quoted
The livepatch code uses workqueue because the livepatch can be
disabled via sysfs interface. It obviously could not wait until
the sysfs interface is removed in the sysfs write() callback
that triggered the removal.
If klp_free_patch_* is moved into module_exit() and not let enable
store() to kill kobjects, all kobjects can be deleted in module_exit(),
then wait_for_completion(patch->finish) may be removed, also wq isn't
required for the async cleanup.
It sounds like a nice cleanup. If we combine kobject_del() to prevent any
show()/store() accesses and free everything later in module_exit(), it
could work. If I am not missing something around how we maintain internal
lists of live patches and their modules.
Thanks
Miroslav