aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xen/arch/x86/x86_64/traps.c6
-rw-r--r--xen/include/asm-x86/processor.h4
2 files changed, 6 insertions, 4 deletions
diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c
index 2373435f29..fe4bc8ceaf 100644
--- a/xen/arch/x86/x86_64/traps.c
+++ b/xen/arch/x86/x86_64/traps.c
@@ -385,13 +385,13 @@ void __devinit subarch_percpu_traps_init(void)
BUILD_BUG_ON((IST_MAX + 2) * PAGE_SIZE + PRIMARY_STACK_SIZE > STACK_SIZE);
/* Machine Check handler has its own per-CPU 4kB stack. */
- this_cpu(init_tss).ist[IST_MCE] = (unsigned long)&stack[IST_MCE * PAGE_SIZE];
+ this_cpu(init_tss).ist[IST_MCE-1] = (unsigned long)&stack[IST_MCE * PAGE_SIZE];
/* Double-fault handler has its own per-CPU 4kB stack. */
- this_cpu(init_tss).ist[IST_DF] = (unsigned long)&stack[IST_DF * PAGE_SIZE];
+ this_cpu(init_tss).ist[IST_DF-1] = (unsigned long)&stack[IST_DF * PAGE_SIZE];
/* NMI handler has its own per-CPU 4kB stack. */
- this_cpu(init_tss).ist[IST_NMI] = (unsigned long)&stack[IST_NMI * PAGE_SIZE];
+ this_cpu(init_tss).ist[IST_NMI-1] = (unsigned long)&stack[IST_NMI * PAGE_SIZE];
/* Trampoline for SYSCALL entry from long mode. */
stack = &stack[IST_MAX * PAGE_SIZE]; /* Skip the IST stacks. */
diff --git a/xen/include/asm-x86/processor.h b/xen/include/asm-x86/processor.h
index df9f612e5f..9da4124c19 100644
--- a/xen/include/asm-x86/processor.h
+++ b/xen/include/asm-x86/processor.h
@@ -417,7 +417,9 @@ struct tss_struct {
union { u64 rsp1, esp1; };
union { u64 rsp2, esp2; };
u64 reserved1;
- u64 ist[7];
+ u64 ist[7]; /* Interrupt Stack Table is 1-based so tss->ist[0]
+ * corresponds to an IST value of 1 in an Interrupt
+ * Descriptor */
u64 reserved2;
u16 reserved3;
#else