irq_data->chip = &lapic_controller;
                irq_data->chip_data = data;
                irq_data->hwirq = virq + i;
-               err = assign_irq_vector_policy(virq + i, irq_data->node, data,
-                                              info);
 -              err = assign_irq_vector_policy(virq, node, data, info);
++              err = assign_irq_vector_policy(virq + i, node, data, info);
                if (err)
                        goto error;
        }
 
  __visible unsigned int __irq_entry do_IRQ(struct pt_regs *regs)
  {
        struct pt_regs *old_regs = set_irq_regs(regs);
- 
+       struct irq_desc * desc;
        /* high bit used in ret_from_ code  */
        unsigned vector = ~regs->orig_ax;
-       unsigned irq;
  
 +      /*
 +       * NB: Unlike exception entries, IRQ entries do not reliably
 +       * handle context tracking in the low-level entry code.  This is
 +       * because syscall entries execute briefly with IRQs on before
 +       * updating context tracking state, so we can take an IRQ from
 +       * kernel mode with CONTEXT_USER.  The low-level entry code only
 +       * updates the context if we came from user mode, so we won't
 +       * switch to CONTEXT_KERNEL.  We'll fix that once the syscall
 +       * code is cleaned up enough that we can cleanly defer enabling
 +       * IRQs.
 +       */
 +
        entering_irq();
  
-       irq = __this_cpu_read(vector_irq[vector]);
 +      /* entering_irq() tells RCU that we're not quiescent.  Check it. */
 +      RCU_LOCKDEP_WARN(!rcu_is_watching(), "IRQ failed to wake up RCU");
 +
+       desc = __this_cpu_read(vector_irq[vector]);
  
-       if (!handle_irq(irq, regs)) {
+       if (!handle_irq(desc, regs)) {
                ack_APIC_irq();
  
-               if (irq != VECTOR_RETRIGGERED) {
-                       pr_emerg_ratelimited("%s: %d.%d No irq handler for vector (irq %d)\n",
+               if (desc != VECTOR_RETRIGGERED) {
+                       pr_emerg_ratelimited("%s: %d.%d No irq handler for vector\n",
                                             __func__, smp_processor_id(),
-                                            vector, irq);
+                                            vector);
                } else {
-                       __this_cpu_write(vector_irq[vector], VECTOR_UNDEFINED);
+                       __this_cpu_write(vector_irq[vector], VECTOR_UNUSED);
                }
        }