# Re: \[RFC PATCH v3 12/24\] x86/mm: Modify ptep\_set\_wrprotect and pmdp\_set\_wrprotect for \_PAGE\_DIRTY\_SW

- From: Dave Hansen \<dave.hansen@linux.intel.com\>
- Date: 2018-08-31 14:49:55 
- List: linux-api
- Page: https://ratatoskr.run/linux-api/2018/08/5368694
- Thread: https://ratatoskr.run/linux-doc/2018/08/5367691/t.md

```text
On 08/31/2018 07:33 AM, Yu-cheng Yu wrote:
> Please use the form:
> 
> 	pte_t new_pte, pte = READ_ONCE(*ptep);
> 	do {
> 		new_pte = /* ... */;
> 	} while (!try_cmpxchg(ptep, &pte, new_pte);

It's probably also worth doing some testing to see if you can detect the
cost of the cmpxchg.  It's definitely more than the old code.

A loop that does mprotect(PROT_READ) followed by
mprotect(PROT_READ|PROT_WRITE) should do it.
```
