Re: PROBLEM: consolidated IDT invalidation causes kexec to reboot

From: Linus Torvalds
Date: Sat Dec 23 2017 - 22:30:29 EST


On Sat, Dec 23, 2017 at 5:44 PM, Alexandru Chirvasitu
<achirvasub@xxxxxxxxx> wrote:
>
> For testing purposes, I've altered machine_kexec_32.c making the
> following toy commit. It naively undoes part of e802a51, solely to
> confirm that's where it goes awry in my setup.

That's really funky.

The idt_invalidate() seems to do *exactly* the same thing. It uses
"load_idt()" on an IDT with size 0, and the supplied address.

Can you disassemble your "set_idt()" code vs the "idt_invalidate()"?

> Is this expected behaviour?

No. The code literally seems identical. The only difference is

(a) where the 0 limit comes from

(b) perhaps build flags and whether it is inlined or not due to being
in a different file

and neither of those should matter, but maybe they do.

Which is why I'd like you to actually look at the generated code and
see if you can see any difference..

Linus