struct irq_desc *desc;
int irq, vector;
- for (vector = 0; vector < NR_VECTORS; ++vector)
+ for ( vector = 0; vector < NR_VECTORS; ++vector )
this_cpu(vector_irq)[vector] = INT_MIN;
irq_desc = xzalloc_array(struct irq_desc, nr_irqs);
if ( !irq_desc )
return -ENOMEM;
- for (irq = 0; irq < nr_irqs_gsi; irq++) {
+ for ( irq = 0; irq < nr_irqs_gsi; irq++ )
+ {
desc = irq_to_desc(irq);
desc->irq = irq;
init_one_irq_desc(desc);
}
- for (; irq < nr_irqs; irq++)
+ for ( ; irq < nr_irqs; irq++ )
irq_to_desc(irq)->irq = irq;
+#ifdef CONFIG_PV
/* Never allocate the hypercall vector or Linux/BSD fast-trap vector. */
set_bit(LEGACY_SYSCALL_VECTOR, used_vectors);
set_bit(HYPERCALL_VECTOR, used_vectors);
+#endif
/* IRQ_MOVE_CLEANUP_VECTOR used for clean up vectors */
set_bit(IRQ_MOVE_CLEANUP_VECTOR, used_vectors);
this_cpu(compat_gdt_table) = boot_cpu_compat_gdt_table;
}
+void __init pv_trap_init(void)
+{
+ /* The 32-on-64 hypercall vector is only accessible from ring 1. */
+ _set_gate(idt_table + HYPERCALL_VECTOR,
+ SYS_DESC_trap_gate, 1, entry_int82);
+
+ /* Fast trap for int80 (faster than taking the #GP-fixup path). */
+ _set_gate(idt_table + LEGACY_SYSCALL_VECTOR, SYS_DESC_trap_gate, 3,
+ &int80_direct_trap);
+
+ open_softirq(NMI_MCE_SOFTIRQ, nmi_mce_softirq);
+}
+
extern void (*const autogen_entrypoints[NR_VECTORS])(void);
void __init trap_init(void)
{
/* Replace early pagefault with real pagefault handler. */
set_intr_gate(TRAP_page_fault, &page_fault);
- /* The 32-on-64 hypercall vector is only accessible from ring 1. */
- _set_gate(idt_table + HYPERCALL_VECTOR,
- SYS_DESC_trap_gate, 1, entry_int82);
-
- /* Fast trap for int80 (faster than taking the #GP-fixup path). */
- _set_gate(idt_table + 0x80, SYS_DESC_trap_gate, 3, &int80_direct_trap);
+ pv_trap_init();
for ( vector = 0; vector < NR_VECTORS; ++vector )
{
cpu_init();
- open_softirq(NMI_MCE_SOFTIRQ, nmi_mce_softirq);
open_softirq(PCI_SERR_SOFTIRQ, pci_serr_softirq);
}
#include <public/xen.h>
+void pv_trap_init(void);
+
/* Deliver interrupt to PV guest. Return 0 on success. */
int pv_raise_interrupt(struct vcpu *v, uint8_t vector);
#include <xen/errno.h>
+static inline void pv_trap_init(void) {}
+
/* Deliver interrupt to PV guest. Return 0 on success. */
static int pv_raise_interrupt(struct vcpu *v, uint8_t vector) { return -EOPNOTSUPP; }