Merge branches 'core-urgent-for-linus' and 'irq-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
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 b568b8601f
This commit is contained in:
commit
3f4d9925e9
|
@ -613,6 +613,11 @@ int acpi_gsi_to_irq(u32 gsi, unsigned int *irqp)
|
||||||
{
|
{
|
||||||
int rc, irq, trigger, polarity;
|
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);
|
rc = acpi_get_override_irq(gsi, &trigger, &polarity);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
|
trigger = trigger ? ACPI_LEVEL_SENSITIVE : ACPI_EDGE_SENSITIVE;
|
||||||
|
|
|
@ -302,6 +302,9 @@ int check_irq_vectors_for_cpu_disable(void)
|
||||||
irq = __this_cpu_read(vector_irq[vector]);
|
irq = __this_cpu_read(vector_irq[vector]);
|
||||||
if (irq >= 0) {
|
if (irq >= 0) {
|
||||||
desc = irq_to_desc(irq);
|
desc = irq_to_desc(irq);
|
||||||
|
if (!desc)
|
||||||
|
continue;
|
||||||
|
|
||||||
data = irq_desc_get_irq_data(desc);
|
data = irq_desc_get_irq_data(desc);
|
||||||
cpumask_copy(&affinity_new, data->affinity);
|
cpumask_copy(&affinity_new, data->affinity);
|
||||||
cpu_clear(this_cpu, affinity_new);
|
cpu_clear(this_cpu, affinity_new);
|
||||||
|
|
|
@ -326,6 +326,7 @@ void rcu_read_unlock_special(struct task_struct *t)
|
||||||
special = t->rcu_read_unlock_special;
|
special = t->rcu_read_unlock_special;
|
||||||
if (special.b.need_qs) {
|
if (special.b.need_qs) {
|
||||||
rcu_preempt_qs();
|
rcu_preempt_qs();
|
||||||
|
t->rcu_read_unlock_special.b.need_qs = false;
|
||||||
if (!t->rcu_read_unlock_special.s) {
|
if (!t->rcu_read_unlock_special.s) {
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in New Issue