[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