On Mon, 5 Mar 2018, Evgenii Shatokhin wrote: > Hi, Hi, > > The atomic replace allows to create cumulative patches. They > > are useful when you maintain many livepatches and want to remove > > one that is lower on the stack. In addition it is very useful when > > more patches touch the same function and there are dependencies > > between them. > > I have experimented with this updated patchset a bit. > It looks like replace operation fails if there is a loaded but disabled patch. > > Suppose there are 2 binary patches changing the same kernel functions. Load > patch1, then disable it (echo 0 > /sys/kernel/livepatch/patch1/enabled), then > try load patch2 with atomic replace. I get "Device or resource busy" error at > this point. > > It seems, __klp_enable_patch() returns -EBUSY for some reason. I haven't dug > deeper into that code yet. Yes, it is "enforce stacking" check in __klp_enable_patch(): /* enforce stacking: only the first disabled patch can be enabled */ if (patch->list.prev != &klp_patches && !list_prev_entry(patch, list)->enabled) return -EBUSY; So not connected to this patch set. We've had the behaviour for quite some time. Miroslav > A workaround is simple: just unload all disabled patches before trying to load > patch2 with replace. Still, the behavior is quite strange. -- To unsubscribe from this list: send the line "unsubscribe live-patching" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html