Merge branch 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 1 Sep 2015 22:20:51 +0000 (15:20 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 1 Sep 2015 22:20:51 +0000 (15:20 -0700)
Pull x86 apic updates from Thomas Gleixner:
 "This udpate contains:

   - rework the irq vector array to store a pointer to the irq
     descriptor instead of the irq number to avoid a lookup of the irq
     descriptor in the irq entry path

   - lguest interrupt handling cleanups

   - conversion of the local apic timer to the new clockevent callbacks

   - preparatory changes for the irq argument removal of interrupt flow
     handlers"

* 'x86-apic-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/irq: Do not dereference irq descriptor before checking it
  tools/lguest: Clean up include dir
  tools/lguest: Fix redefinition of struct virtio_pci_cfg_cap
  x86/irq: Store irq descriptor in vector array
  genirq: Provide irq_desc_has_action
  x86/irq: Get rid of an indentation level
  x86/irq: Rename VECTOR_UNDEFINED to VECTOR_UNUSED
  x86/irq: Replace numeric constant
  x86/irq: Protect smp_cleanup_move
  x86/lguest: Do not setup unused irq vectors
  x86/lguest: Clean up lguest_setup_irq
  x86/apic: Drop local_irq_save/restore in timer callbacks
  x86/apic: Migrate apic timer to new set_state interface
  x86/irq: Use access helper irq_data_get_affinity_mask()
  x86/irq: Use accessor irq_data_get_irq_handler_data()
  x86/irq: Use accessor irq_data_get_node()

1  2 
arch/x86/kernel/apic/apic.c
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/apic/vector.c
arch/x86/kernel/hpet.c
arch/x86/kernel/irq.c
arch/x86/lguest/boot.c

Simple merge
Simple merge
index 2683f36e4e0a5e67311a7bcdbceea61c17382ec6,200b5a5d6b795f0b894ae5c8294c9017a34dbb0a..1bbd0fe2c8062f35f795d2ed23f75373f5a6b872
@@@ -322,8 -324,7 +324,7 @@@ static int x86_vector_alloc_irqs(struc
                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;
        }
Simple merge
index ae00b355114dd9922bf977684e8e473b0d55561d,e010847583d7895c7c301a4fe74329691496ed74..f8062aaf5df9c830ec287f6774ad270e13d34b32
@@@ -214,39 -211,23 +214,38 @@@ u64 arch_irq_stat(void
  __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);
                }
        }
  
Simple merge