Messages in this thread | | | Date | Mon, 22 Mar 2021 17:59:08 +0100 | From | Peter Zijlstra <> | Subject | Re: [PATCH 2/3] static_call: Align static_call_is_init() patching condition |
| |
On Fri, Mar 19, 2021 at 03:40:46PM +0100, Rasmus Villemoes wrote: > On 19/03/2021 15.13, Peter Zijlstra wrote: > > >> Dunno, probably overkill, but perhaps we could have an atomic_t (or > >> refcount, whatever) init_ref inited to 1, with init_ref_get() doing an > >> inc_unless_zero, and iff you get a ref, you're free to call (/patch) > >> __init functions and access __initdata, but must do init_ref_put(), with > >> PID1 dropping its initial ref and waiting for it to drop to 0 before > >> doing the *free_initmem() calls. > > > > I'd as soon simply add another SYSTEM state. That way we don't have to > > worry about who else looks at RUNNING for what etc.. > > I don't understand. How would that solve the > > PID1 PIDX > ok = system_state < INIT_MEM_GONE; > system_state = INIT_MEM_GONE; > free_initmem(); > system_state = RUNNING; > if (ok) > poke init mem > > race?
Argh, I meant to put it before SMP bringup, but then still have to run the smp_init calls :/
N/m, you're quite right.
| |