Files
linux/include/asm-powerpc
Andy Whitcroft 016b33c495 powerpc: Add 64 bit version of huge_ptep_set_wrprotect
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@shadowen.org>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2008-07-01 11:28:56 +10:00
..
2008-01-30 13:34:07 +01:00
2007-07-31 21:12:07 -07:00
2008-02-03 16:32:51 +02:00
2008-07-01 11:28:47 +10:00
2008-02-06 10:41:00 -08:00
2006-12-04 20:39:30 +11:00
2008-05-29 07:06:56 -05:00
2008-05-29 07:06:56 -05:00
2008-05-29 07:06:56 -05:00
2008-05-29 07:06:56 -05:00
2008-02-06 10:41:02 -08:00
2007-03-09 15:03:25 +11:00
2007-03-22 22:52:55 +11:00
2007-07-17 10:23:11 -07:00
2007-10-17 08:42:55 -07:00
2007-10-11 09:14:31 -05:00
2008-04-18 00:46:35 +02:00
2008-06-06 21:22:09 +03:00
2008-04-27 18:21:39 +03:00
2007-05-08 11:15:20 -07:00
2007-06-28 19:16:38 +10:00
2007-10-19 11:53:41 -07:00
2008-04-27 18:21:37 +03:00
2007-08-20 07:28:48 -05:00
2006-12-11 16:35:07 +11:00
2008-05-23 16:53:23 +10:00
2007-05-08 11:15:05 -07:00
2008-03-05 16:34:39 -06:00
2006-06-30 18:20:44 +02:00
2007-04-24 21:31:51 +10:00
2007-05-11 08:29:34 -07:00
2007-06-28 19:19:20 +10:00
2008-04-17 10:42:34 -04:00
2007-05-02 20:04:30 +10:00
2007-05-08 11:54:20 +10:00
2008-02-07 08:42:30 -08:00