On Tue, May 17, 2022 at 10:44:54AM +1000, David Gwynne wrote:
> + cookie = SCARG(uap, proc_cookie);
> + if (pr->ps_kbind_addr == pc) {
> + membar_datadep_consumer();
> + if (pr->ps_kbind_cookie != cookie)
> + goto sigill;
> + } else {
You must use membar_consumer() here. membar_datadep_consumer() is
a barrier between reading pointer and pointed data. Only alpha
requires membar_datadep_consumer() for that, everywhere else it is
a NOP.
> + mtx_enter(&pr->ps_mtx);
> + kpc = pr->ps_kbind_addr;
Do we need kpc variable? I would prefer to read explicit
pr->ps_kbind_addr in the two places where we use it.
I think the logic of barriers and mutexes is correct.
with the suggestions above OK bluhm@