Commit 5931e4eb authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

Merge branch 'irq/core' into irq/urgent

Pull in the upstream changes so a fix for them can be applied.
parents ce7980ae 6f3ee0e2
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1277,11 +1277,11 @@ Manfred Spraul points out that you can still do this, even if the data
is very occasionally accessed in user context or softirqs/tasklets. The
irq handler doesn't use a lock, and all other accesses are done as so::

        spin_lock(&lock);
        mutex_lock(&lock);
        disable_irq(irq);
        ...
        enable_irq(irq);
        spin_unlock(&lock);
        mutex_unlock(&lock);

The disable_irq() prevents the irq handler from running
(and waits for it to finish if it's currently running on other CPUs).
+2 −2
Original line number Diff line number Diff line
@@ -1307,11 +1307,11 @@ se i dati vengono occasionalmente utilizzati da un contesto utente o
da un'interruzione software. Il gestore d'interruzione non utilizza alcun
*lock*, e tutti gli altri accessi verranno fatti così::

        spin_lock(&lock);
        mutex_lock(&lock);
        disable_irq(irq);
        ...
        enable_irq(irq);
        spin_unlock(&lock);
        mutex_unlock(&lock);

La funzione disable_irq() impedisce al gestore d'interruzioni
d'essere eseguito (e aspetta che finisca nel caso fosse in esecuzione su
+2 −0
Original line number Diff line number Diff line
@@ -10942,6 +10942,8 @@ L: linux-kernel@vger.kernel.org
S:	Maintained
T:	git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
F:	kernel/irq/
F:	include/linux/group_cpus.h
F:	lib/group_cpus.c
IRQCHIP DRIVERS
M:	Thomas Gleixner <tglx@linutronix.de>
+2 −5
Original line number Diff line number Diff line
@@ -2364,9 +2364,8 @@ static int mp_irqdomain_create(int ioapic)
		return -ENODEV;
	}

	ip->irqdomain = irq_domain_create_linear(fn, hwirqs, cfg->ops,
	ip->irqdomain = irq_domain_create_hierarchy(parent, 0, hwirqs, fn, cfg->ops,
						    (void *)(long)ioapic);

	if (!ip->irqdomain) {
		/* Release fw handle if it was allocated above */
		if (!cfg->dev)
@@ -2374,8 +2373,6 @@ static int mp_irqdomain_create(int ioapic)
		return -ENOMEM;
	}

	ip->irqdomain->parent = parent;

	if (cfg->type == IOAPIC_DOMAIN_LEGACY ||
	    cfg->type == IOAPIC_DOMAIN_STRICT)
		ioapic_dynirq_base = max(ioapic_dynirq_base,
+3 −4
Original line number Diff line number Diff line
@@ -166,10 +166,9 @@ static struct irq_domain *uv_get_irq_domain(void)
	if (!fn)
		goto out;

	uv_domain = irq_domain_create_tree(fn, &uv_domain_ops, NULL);
	if (uv_domain)
		uv_domain->parent = x86_vector_domain;
	else
	uv_domain = irq_domain_create_hierarchy(x86_vector_domain, 0, 0, fn,
						&uv_domain_ops, NULL);
	if (!uv_domain)
		irq_domain_free_fwnode(fn);
out:
	mutex_unlock(&uv_lock);
Loading