To recreate:
kpatch load kpatch-macro-hooks.ko
kpatch replace kpatch-meminfo-string.ko <-- first patch's hook unload doesn't run
I don't see a straightforward way to fix this without a little bit of redesign. I wonder if we should just get rid of "kpatch replace", because of all the complexity it adds to the code. Is it really important to have an atomic replace for upgrading cumulative modules, vs just doing kpatch unload old.ko; kpatch load new.ko?