Re: The interface of flush_cache_page

From: David S. Miller (davem@redhat.com)
Date: Sat Aug 04 2001 - 04:48:02 EST


NIIBE Yutaka writes:
> When it is called from vmscan.c:try_to_swap_out, as the PTE is cleared
> to be zero, we have no way to know what phisical address to match.

That is really an error, and it is only because the last time the
logic try_to_swap_out() logic got rearranges the cache flush got moved
lower down.

In fact, several architectures will take a fatal trap due to
this sequence. On these systems the tlb must be able to translate the
virtual address given to it for the flush, and that translation must
be valid.

Thus, the code there should be:

        flush_cache_page(vma, address);
        pte = ptep_get_and_clear(page_table);
        flush_tlb_page(vma, address);

And the flush_cache_page() further down in that function then can be
removed.

Feel free to send this fix to Linus. It is probably causing
HyperSparc sparc32 to fail to work at all once a swap happens,
if platforms using that chip work at all.

Later,
David S. Miller
davem@redhat.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Tue Aug 07 2001 - 21:00:32 EST