Re: Lockdep warnings on kexec (virtio_blk, hrtimers)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 13 December 2024 19:06:52 GMT, "Rafael J. Wysocki" <rafael@xxxxxxxxxx> wrote:
>On Fri, Dec 13, 2024 at 6:32 PM Rafael J. Wysocki <rafael@xxxxxxxxxx> wrote:
>>
>> On Fri, Dec 13, 2024 at 6:05 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
>> >
>> > On Fri, Dec 13 2024 at 14:07, David Woodhouse wrote:
>> > > On Fri, 2024-12-13 at 14:23 +0100, Thomas Gleixner wrote:
>> > >> That's only true for the case where the new kernel takes over.
>> > >>
>> > >> In the case KEXEC_JUMP=n and kexec_image->preserve_context == true, then
>> > >> it is supposed to align with suspend/resume and if you look at the code
>> > >> then it actually mimics suspend/resume in the most dilettanteish way.
>> > >
>> > > Did you mean KEXEC_JUMP=y there?
>> >
>> > Yes, of course.
>> >
>> > > I spent a while the other week trying to understand the case where
>> > > CONFIG_KEXEC_JUMP=n and kexec_image->preserve_context=true, and came to
>> > > the conclusion that it was a mirage. Userspace can't *actually* set the
>> > > KEXEC_PRESERVE_CONTEXT bit when setting up the image, if KEXEC_JUMP=n.
>> > >
>> > > The whole of the code path for that case is dead code. It's confusing
>> > > because as discussed elsewhere, we don't just #ifdef out the whole of
>> > > that dead code path, but only the bits which don't actually *compile*
>> > > (like references to restore_processor_state() etc.).
>> >
>> > Yes, I had to stare at it quite a while. :)
>> >
>> > >> It's a patently bad idea to clobber the kernel with kexec jump "fixes"
>> > >> instead of using the well tested and established suspend/resume
>> > >> machinery.
>> > >>
>> > >> All it takes is to:
>> > >>
>> > >>     1) disable the wakeup logic
>> > >>
>> > >>     2) provide a mechanism to invoke machine_kexec() instead of the
>> > >>        actual suspend mechanism.
>> > >>
>> > >> No?
>> > >
>> > > Agreed. The hacky proof of concept I posted earlier invoking
>> > > machine_kexec() instead of suspend_ops->enter() works fine. I'll look
>> > > at cleaning it up and making it not invoke all the ACPI hooks for
>> > > *actual* suspend to RAM, etc.
>> >
>> > Something like the below? It survived an hour of loop testing.
>>
>> I think that this KEXEC_JUMP thing can be dropped entirely and forgotten.
>>
>> I'm not aware of anyone actually using it.
>
>And now I've been made aware that it's used.  Oh well.
>
>As discussed with Dave over IRC, the current implementation isn't
>actually that bad.  It might use PMSG_THAW instead of PMSG_RESTORE in
>kernel_kexec(), but other than this it reflects the code flow around
>the jump from the restore kernel to the image one during resume from
>hibernation.
>
>This means that hibernation and kexec jump could be unified somewhat.

Fair enough. I'm happy to do whatever cleanups or consolidation make sense, if we have a consensus.

There remains the question of why the blk-mq thing explodes on the way down for both kjump and, apparently, even the plain kexec case.





[Index of Archives]     [Reiser Filesystem Development]     [Ceph FS]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite National Park]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]     [Linux Media]

  Powered by Linux