During a soft lockup a kernel task won’t unlock the CPU, like in the good old DOS days. “Something or other” is left “hanging”. During a hard lockup interrupts aren’t even being processed, which more clearly points to a bug: something is masking interrupts and not unlocking.