On Wed 2022-03-16 15:48:25, Miroslav Benes wrote: > On Sat, 12 Mar 2022, Chengming Zhou wrote: > > > module_put() is not called for a patch with "forced" flag. It should > > block the removal of the livepatch module when the code might still > > be in use after forced transition. > > > > klp_force_transition() currently sets "forced" flag for all patches on > > the list. > > > > In fact, any patch can be safely unloaded when it passed through > > the consistency model in KLP_UNPATCHED transition. > > > > By other words, the "forced" flag must be set only for livepatches > > s/By/In/ > > > that are being removed. In particular, set the "forced" flag: > > > > + only for klp_transition_patch when the transition to KLP_UNPATCHED > > state was forced. > > > > + all replaced patches when the transition to KLP_PATCHED state was > > forced and the patch was replacing the existing patches. > > > > index 5683ac0d2566..7f25a5ae89f6 100644 > > --- a/kernel/livepatch/transition.c > > +++ b/kernel/livepatch/transition.c > > @@ -641,6 +641,18 @@ void klp_force_transition(void) > > for_each_possible_cpu(cpu) > > klp_update_patch_state(idle_task(cpu)); > > > > - klp_for_each_patch(patch) > > - patch->forced = true; > > + /* > > + * Only need to set forced flag for the transition patch > > + * when force transition to KLP_UNPATCHED state, but > > + * have to set forced flag for all replaced patches > > + * when force atomic replace transition. > > + */ > > How about something like > > /* > * Set forced flag for patches being removed, which is the transition > * patch in KLP_UNPATCHED state or all replaced patches when forcing > * the atomic replace transition. > */ Or just the first sentence: /* Set forced flag for patches being removed */ The rest is visible from the code. Either version works for me. If we agree on it then I update the text when pushing the patch. Best Regards, Petr