* [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
@ 2017-09-08 8:19 Thomas Gleixner
2017-09-08 16:12 ` Haiyang Zhang
2017-09-08 16:57 ` Stephen Hemminger
0 siblings, 2 replies; 5+ messages in thread
From: Thomas Gleixner @ 2017-09-08 8:19 UTC (permalink / raw)
To: LKML
Cc: Stephen Hemminger, Simon Xiao, KY Srinivasan, Haiyang Zhang,
Steven Rostedt, Peter Zijlstra, Linus Torvalds, Josh Poimboeuf,
H. Peter Anvin, Denys Vlasenko, Brian Gerst, Borislav Petkov,
Andy Lutomirski
The rework of the IDT setup changed the way how unused system gates are
accounted. At the end of the gate initialization all unused gates in the
system vector area are set to the spurios handler and marked as used for
consistency reasons.
Marking them as used breaks MS HyperV because it installs its hypercall
vector after that point and the installation is guarded by the bit in the
used_vectors map. So the hyperv vector stays directed to the spurious
interrupt handler.
Leave them marked as unused again and unbreak HyperV that way.
Fixes: dc20b2d52653 ("x86/idt: Move interrupt gate initialization to IDT code")
Reported-by: Stephen Hemminger <sthemmin@microsoft.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
arch/x86/kernel/idt.c | 1 -
1 file changed, 1 deletion(-)
--- a/arch/x86/kernel/idt.c
+++ b/arch/x86/kernel/idt.c
@@ -320,7 +320,6 @@ void __init idt_setup_apic_and_irq_gates
for_each_clear_bit_from(i, used_vectors, NR_VECTORS) {
#ifdef CONFIG_X86_LOCAL_APIC
- set_bit(i, used_vectors);
set_intr_gate(i, spurious_interrupt);
#else
entry = irq_entries_start + 8 * (i - FIRST_EXTERNAL_VECTOR);
^ permalink raw reply [flat|nested] 5+ messages in thread* RE: [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
2017-09-08 8:19 [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install Thomas Gleixner
@ 2017-09-08 16:12 ` Haiyang Zhang
2017-09-08 16:57 ` Stephen Hemminger
1 sibling, 0 replies; 5+ messages in thread
From: Haiyang Zhang @ 2017-09-08 16:12 UTC (permalink / raw)
To: Thomas Gleixner, LKML
Cc: Stephen Hemminger, Simon Xiao, KY Srinivasan, Steven Rostedt,
Peter Zijlstra, Linus Torvalds, Josh Poimboeuf, H. Peter Anvin,
Denys Vlasenko, Brian Gerst, Borislav Petkov, Andy Lutomirski
> -----Original Message-----
> From: Thomas Gleixner [mailto:tglx@linutronix.de]
> Sent: Friday, September 8, 2017 4:20 AM
> To: LKML <linux-kernel@vger.kernel.org>
> Cc: Stephen Hemminger <sthemmin@microsoft.com>; Simon Xiao
> <sixiao@microsoft.com>; KY Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Steven Rostedt <rostedt@goodmis.org>; Peter
> Zijlstra <peterz@infradead.org>; Linus Torvalds <torvalds@linux-
> foundation.org>; Josh Poimboeuf <jpoimboe@redhat.com>; H. Peter Anvin
> <hpa@zytor.com>; Denys Vlasenko <dvlasenk@redhat.com>; Brian Gerst
> <brgerst@gmail.com>; Borislav Petkov <bp@alien8.de>; Andy Lutomirski
> <luto@kernel.org>
> Subject: [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
>
> The rework of the IDT setup changed the way how unused system gates are
> accounted. At the end of the gate initialization all unused gates in the
> system vector area are set to the spurios handler and marked as used for
> consistency reasons.
>
> Marking them as used breaks MS HyperV because it installs its hypercall
> vector after that point and the installation is guarded by the bit in
> the
> used_vectors map. So the hyperv vector stays directed to the spurious
> interrupt handler.
>
> Leave them marked as unused again and unbreak HyperV that way.
>
> Fixes: dc20b2d52653 ("x86/idt: Move interrupt gate initialization to IDT
> code")
> Reported-by: Stephen Hemminger <sthemmin@microsoft.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Thanks for the quick response.
I tested the patch and the kernel boots up on Hyper-V now.
Reviewed-and-Tested-by: Haiyang Zhang <haiyangz@microsoft.com>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
2017-09-08 8:19 [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install Thomas Gleixner
2017-09-08 16:12 ` Haiyang Zhang
@ 2017-09-08 16:57 ` Stephen Hemminger
2017-09-08 17:09 ` Thomas Gleixner
1 sibling, 1 reply; 5+ messages in thread
From: Stephen Hemminger @ 2017-09-08 16:57 UTC (permalink / raw)
To: Thomas Gleixner
Cc: LKML, Stephen Hemminger, Simon Xiao, KY Srinivasan, Haiyang Zhang,
Steven Rostedt, Peter Zijlstra, Linus Torvalds, Josh Poimboeuf,
H. Peter Anvin, Denys Vlasenko, Brian Gerst, Borislav Petkov,
Andy Lutomirski
On Fri, 8 Sep 2017 01:19:52 -0700
"Thomas Gleixner" <tglx@linutronix.de> wrote:
> The rework of the IDT setup changed the way how unused system gates are
> accounted. At the end of the gate initialization all unused gates in the
> system vector area are set to the spurios handler and marked as used for
> consistency reasons.
>
> Marking them as used breaks MS HyperV because it installs its hypercall
> vector after that point and the installation is guarded by the bit in the
> used_vectors map. So the hyperv vector stays directed to the spurious
> interrupt handler.
>
> Leave them marked as unused again and unbreak HyperV that way.
>
> Fixes: dc20b2d52653 ("x86/idt: Move interrupt gate initialization to IDT
> code")
> Reported-by: Stephen Hemminger <sthemmin@microsoft.com>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This fixes it, thanks.
Tested-by: Stephen Hemminger <sthemmin@microsoft.com>
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
2017-09-08 16:57 ` Stephen Hemminger
@ 2017-09-08 17:09 ` Thomas Gleixner
2017-09-08 17:15 ` KY Srinivasan
0 siblings, 1 reply; 5+ messages in thread
From: Thomas Gleixner @ 2017-09-08 17:09 UTC (permalink / raw)
To: Stephen Hemminger
Cc: LKML, Stephen Hemminger, Simon Xiao, KY Srinivasan, Haiyang Zhang,
Steven Rostedt, Peter Zijlstra, Linus Torvalds, Josh Poimboeuf,
H. Peter Anvin, Denys Vlasenko, Brian Gerst, Borislav Petkov,
Andy Lutomirski
On Fri, 8 Sep 2017, Stephen Hemminger wrote:
> On Fri, 8 Sep 2017 01:19:52 -0700
> "Thomas Gleixner" <tglx@linutronix.de> wrote:
>
> > The rework of the IDT setup changed the way how unused system gates are
> > accounted. At the end of the gate initialization all unused gates in the
> > system vector area are set to the spurios handler and marked as used for
> > consistency reasons.
> >
> > Marking them as used breaks MS HyperV because it installs its hypercall
> > vector after that point and the installation is guarded by the bit in the
> > used_vectors map. So the hyperv vector stays directed to the spurious
> > interrupt handler.
> >
> > Leave them marked as unused again and unbreak HyperV that way.
> >
> > Fixes: dc20b2d52653 ("x86/idt: Move interrupt gate initialization to IDT
> > code")
> > Reported-by: Stephen Hemminger <sthemmin@microsoft.com>
> > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
>
> This fixes it, thanks.
>
> Tested-by: Stephen Hemminger <sthemmin@microsoft.com>
What's the reason that the vector is not set up early in the boot process?
Thanks,
tglx
^ permalink raw reply [flat|nested] 5+ messages in thread* RE: [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
2017-09-08 17:09 ` Thomas Gleixner
@ 2017-09-08 17:15 ` KY Srinivasan
0 siblings, 0 replies; 5+ messages in thread
From: KY Srinivasan @ 2017-09-08 17:15 UTC (permalink / raw)
To: Thomas Gleixner, Stephen Hemminger
Cc: LKML, Stephen Hemminger, Simon Xiao, Haiyang Zhang,
Steven Rostedt, Peter Zijlstra, Linus Torvalds, Josh Poimboeuf,
H. Peter Anvin, Denys Vlasenko, Brian Gerst, Borislav Petkov,
Andy Lutomirski
> -----Original Message-----
> From: Thomas Gleixner [mailto:tglx@linutronix.de]
> Sent: Friday, September 8, 2017 10:09 AM
> To: Stephen Hemminger <stephen@networkplumber.org>
> Cc: LKML <linux-kernel@vger.kernel.org>; Stephen Hemminger
> <sthemmin@microsoft.com>; Simon Xiao <sixiao@microsoft.com>; KY
> Srinivasan <kys@microsoft.com>; Haiyang Zhang
> <haiyangz@microsoft.com>; Steven Rostedt <rostedt@goodmis.org>; Peter
> Zijlstra <peterz@infradead.org>; Linus Torvalds <torvalds@linux-
> foundation.org>; Josh Poimboeuf <jpoimboe@redhat.com>; H. Peter Anvin
> <hpa@zytor.com>; Denys Vlasenko <dvlasenk@redhat.com>; Brian Gerst
> <brgerst@gmail.com>; Borislav Petkov <bp@alien8.de>; Andy Lutomirski
> <luto@kernel.org>
> Subject: Re: [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install
>
> On Fri, 8 Sep 2017, Stephen Hemminger wrote:
> > On Fri, 8 Sep 2017 01:19:52 -0700
> > "Thomas Gleixner" <tglx@linutronix.de> wrote:
> >
> > > The rework of the IDT setup changed the way how unused system gates
> are
> > > accounted. At the end of the gate initialization all unused gates in the
> > > system vector area are set to the spurios handler and marked as used for
> > > consistency reasons.
> > >
> > > Marking them as used breaks MS HyperV because it installs its hypercall
> > > vector after that point and the installation is guarded by the bit in the
> > > used_vectors map. So the hyperv vector stays directed to the spurious
> > > interrupt handler.
> > >
> > > Leave them marked as unused again and unbreak HyperV that way.
> > >
> > > Fixes: dc20b2d52653 ("x86/idt: Move interrupt gate initialization to IDT
> > > code")
> > > Reported-by: Stephen Hemminger <sthemmin@microsoft.com>
> > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> >
> > This fixes it, thanks.
> >
> > Tested-by: Stephen Hemminger <sthemmin@microsoft.com>
>
> What's the reason that the vector is not set up early in the boot process?
No specific reason other than that was the way I had coded it up initially. I will send in a patch to
fix that.
Regards,
K. Y
>
> Thanks,
>
> tglx
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-09-08 17:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-09-08 8:19 [PATCH] x86/idt: Unbreak MS HyperV hypercall vector install Thomas Gleixner
2017-09-08 16:12 ` Haiyang Zhang
2017-09-08 16:57 ` Stephen Hemminger
2017-09-08 17:09 ` Thomas Gleixner
2017-09-08 17:15 ` KY Srinivasan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.