[PATCH 1/1] powerpc: add 64 bit version of huge_ptep_set_wrprotect
Benjamin Herrenschmidt
benh at kernel.crashing.org
Thu Jun 26 20:51:42 EST 2008
On Thu, 2008-06-26 at 10:55 +0100, Andy Whitcroft wrote:
> The implementation of huge_ptep_set_wrprotect() directly calls
> ptep_set_wrprotect() to mark a hugepte write protected. However this
> call is not appropriate on ppc64 kernels as this is a small page only
> implementation. This can lead to the hash not being flushed correctly
> when a mapping is being converted to COW, allowing processes to continue
> using the original copy.
>
> Currently huge_ptep_set_wrprotect() unconditionally calls
> ptep_set_wrprotect(). This is fine on ppc32 kernels as this call is
> generic. On 64 bit this is implemented as:
>
> pte_update(mm, addr, ptep, _PAGE_RW, 0);
>
> On ppc64 this last parameter is the page size and is passed directly on
> to hpte_need_flush():
>
> hpte_need_flush(mm, addr, ptep, old, huge);
>
> And this directly affects the page size we pass to flush_hash_page():
>
> flush_hash_page(vaddr, rpte, psize, ssize, 0);
>
> As this changes the way the hash is calculated we will flush the wrong
> pages, potentially leaving live hashes to the original page.
>
> Move the definition of huge_ptep_set_wrprotect() to the 32/64 bit specific
> headers.
>
> Signed-off-by: Andy Whitcroft <apw at shadowen.org>
Acked-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
Good catch btw !
Cheers,
Ben.
More information about the Linuxppc-dev
mailing list