Merge branches 'core-urgent-for-linus' and 'irq-urgent-for-linus' of git://git.kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sat, 21 Feb 2015 18:36:06 +0000 (10:36 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sat, 21 Feb 2015 18:36:06 +0000 (10:36 -0800)
Pull rcu fix and x86 irq fix from Ingo Molnar:

 - Fix a bug that caused an RCU warning splat.

 - Two x86 irq related fixes: a hotplug crash fix and an ACPI IRQ
   registry fix.

* 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  rcu: Clear need_qs flag to prevent splat

* 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/irq: Check for valid irq descriptor in check_irq_vectors_for_cpu_disable()
  x86/irq: Fix regression caused by commit b568b8601f05

1  2  3 
arch/x86/kernel/acpi/boot.c
kernel/rcu/tree_plugin.h

@@@@ -613,6 -613,6 -613,11 +613,11 @@@@ int acpi_gsi_to_irq(u32 gsi, unsigned i
   {
        int rc, irq, trigger, polarity;
   
++      if (acpi_irq_model == ACPI_IRQ_MODEL_PIC) {
++              *irqp = gsi;
++              return 0;
++      }
++ 
        rc = acpi_get_override_irq(gsi, &trigger, &polarity);
        if (rc == 0) {
                trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
@@@@ -845,7 -845,13 -850,13 +850,7 @@@@ int acpi_ioapic_registered(acpi_handle 
   
   static int __init acpi_parse_sbf(struct acpi_table_header *table)
   {
 --     struct acpi_table_boot *sb;
 --
 --     sb = (struct acpi_table_boot *)table;
 --     if (!sb) {
 --             printk(KERN_WARNING PREFIX "Unable to map SBF\n");
 --             return -ENODEV;
 --     }
 ++     struct acpi_table_boot *sb = (struct acpi_table_boot *)table;
   
        sbf_port = sb->cmos_index;      /* Save CMOS port */
   
@@@@ -859,7 -865,13 -870,13 +864,7 @@@@ static struct resource *hpet_res __init
   
   static int __init acpi_parse_hpet(struct acpi_table_header *table)
   {
 --     struct acpi_table_hpet *hpet_tbl;
 --
 --     hpet_tbl = (struct acpi_table_hpet *)table;
 --     if (!hpet_tbl) {
 --             printk(KERN_WARNING PREFIX "Unable to map HPET\n");
 --             return -ENODEV;
 --     }
 ++     struct acpi_table_hpet *hpet_tbl = (struct acpi_table_hpet *)table;
   
        if (hpet_tbl->address.space_id != ACPI_SPACE_MEM) {
                printk(KERN_WARNING PREFIX "HPET timers must be located in "
diff --combined kernel/rcu/tree_plugin.h
@@@@ -49,6 -49,7 -49,7 +49,6 @@@@ DEFINE_PER_CPU(char, rcu_cpu_has_work)
   static cpumask_var_t rcu_nocb_mask; /* CPUs to have callbacks offloaded. */
   static bool have_rcu_nocb_mask;          /* Was rcu_nocb_mask allocated? */
   static bool __read_mostly rcu_nocb_poll;    /* Offload kthread are to poll. */
 --static char __initdata nocb_buf[NR_CPUS * 5];
   #endif /* #ifdef CONFIG_RCU_NOCB_CPU */
   
   /*
@@@@ -326,6 -327,7 -327,6 +326,7 @@@@ void rcu_read_unlock_special(struct tas
        special = t->rcu_read_unlock_special;
        if (special.b.need_qs) {
                rcu_preempt_qs();
+ +             t->rcu_read_unlock_special.b.need_qs = false;
                if (!t->rcu_read_unlock_special.s) {
                        local_irq_restore(flags);
                        return;
@@@@ -2385,8 -2387,8 -2386,8 +2386,8 @@@@ void __init rcu_init_nohz(void
                cpumask_and(rcu_nocb_mask, cpu_possible_mask,
                            rcu_nocb_mask);
        }
 --     cpulist_scnprintf(nocb_buf, sizeof(nocb_buf), rcu_nocb_mask);
 --     pr_info("\tOffload RCU callbacks from CPUs: %s.\n", nocb_buf);
 ++     pr_info("\tOffload RCU callbacks from CPUs: %*pbl.\n",
 ++             cpumask_pr_args(rcu_nocb_mask));
        if (rcu_nocb_poll)
                pr_info("\tPoll for callbacks from no-CBs CPUs.\n");