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

- From: Yu-cheng Yu \<hidden\>
- Date: 2018-08-31 15:53:03 
- List: linux-api
- Page: https://ratatoskr.run/linux-api/2018/08/5368772
- Thread: https://ratatoskr.run/linux-doc/2018/08/5367691/t.md

```text
On Fri, 2018-08-31 at 07:47 -0700, Dave Hansen wrote:
> 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.

I created the test,

https://github.com/yyu168/cet-smoke-test/blob/quick/quick/mprotect_ben
ch.c

then realized this won't work.

To trigger a race in ptep_set_wrprotect(), we need to fork from one of
three pthread siblings.

Or do we measure only how much this affects fork?
If there is no racing, the effect should be minimal.

Yu-cheng
```
