Loading Documentation/kernel-hacking/locking.rst +2 −2 Original line number Diff line number Diff line Loading @@ -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). Loading Documentation/translations/it_IT/kernel-hacking/locking.rst +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading MAINTAINERS +2 −0 Original line number Diff line number Diff line Loading @@ -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> Loading arch/x86/kernel/apic/io_apic.c +2 −5 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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, Loading arch/x86/platform/uv/uv_irq.c +3 −4 Original line number Diff line number Diff line Loading @@ -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 Loading
Documentation/kernel-hacking/locking.rst +2 −2 Original line number Diff line number Diff line Loading @@ -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). Loading
Documentation/translations/it_IT/kernel-hacking/locking.rst +2 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
MAINTAINERS +2 −0 Original line number Diff line number Diff line Loading @@ -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> Loading
arch/x86/kernel/apic/io_apic.c +2 −5 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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, Loading
arch/x86/platform/uv/uv_irq.c +3 −4 Original line number Diff line number Diff line Loading @@ -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