desc->limit1 = (limit >> 16) & 0xf;
 }
 
-void set_intr_gate(unsigned int n, const void *addr);
+void update_intr_gate(unsigned int n, const void *addr);
 void alloc_intr_gate(unsigned int n, const void *addr);
 
 extern unsigned long used_vectors[];
 
        }
 }
 
+static void set_intr_gate(unsigned int n, const void *addr)
+{
+       struct idt_data data;
+
+       BUG_ON(n > 0xFF);
+
+       memset(&data, 0, sizeof(data));
+       data.vector     = n;
+       data.addr       = addr;
+       data.segment    = __KERNEL_CS;
+       data.bits.type  = GATE_INTERRUPT;
+       data.bits.p     = 1;
+
+       idt_setup_from_table(idt_table, &data, 1, false);
+}
+
 /**
  * idt_setup_early_traps - Initialize the idt table with early traps
  *
        load_idt(&idt);
 }
 
-void set_intr_gate(unsigned int n, const void *addr)
+void __init update_intr_gate(unsigned int n, const void *addr)
 {
-       struct idt_data data;
-
-       BUG_ON(n > 0xFF);
-
-       memset(&data, 0, sizeof(data));
-       data.vector     = n;
-       data.addr       = addr;
-       data.segment    = __KERNEL_CS;
-       data.bits.type  = GATE_INTERRUPT;
-       data.bits.p     = 1;
-
-       idt_setup_from_table(idt_table, &data, 1, false);
+       if (WARN_ON_ONCE(!test_bit(n, used_vectors)))
+               return;
+       set_intr_gate(n, addr);
 }
 
 void alloc_intr_gate(unsigned int n, const void *addr)
 
 
 static void __init kvm_apf_trap_init(void)
 {
-       set_intr_gate(14, async_page_fault);
+       update_intr_gate(X86_TRAP_PF, async_page_fault);
 }
 
 void __init kvm_guest_init(void)