On 2022/3/16 11:01 下午, Petr Mladek wrote: > 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. Ok, this works for me too ;-) Thanks. > > Best Regards, > Petr