Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757686Ab0D3RN2 (ORCPT ); Fri, 30 Apr 2010 13:13:28 -0400 Received: from www.tglx.de ([62.245.132.106]:36196 "EHLO www.tglx.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932747Ab0D3RMm (ORCPT ); Fri, 30 Apr 2010 13:12:42 -0400 Date: Fri, 30 Apr 2010 12:53:11 +0200 (CEST) From: Thomas Gleixner To: Peter P Waskiewicz Jr cc: davem@davemloft.net, arjan@linux.jf.intel.com, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH linux-next v2 1/2] irq: Add CPU mask affinity hint In-Reply-To: <20100430085150.4630.46790.stgit@ppwaskie-hc2.jf.intel.com> Message-ID: References: <20100430085150.4630.46790.stgit@ppwaskie-hc2.jf.intel.com> User-Agent: Alpine 2.00 (LFD 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2761 Lines: 78 On Fri, 30 Apr 2010, Peter P Waskiewicz Jr wrote: > This patch adds a cpumask affinity hint to the irq_desc > structure, along with a registration function and a read-only > proc entry for each interrupt. > > This affinity_hint handle for each interrupt can be used by > underlying drivers that need a better mechanism to control > interrupt affinity. The underlying driver can register a > cpumask for the interrupt, which will allow the driver to > provide the CPU mask for the interrupt to anything that > requests it. The intent is to extend the userspace daemon, > irqbalance, to help hint to it a preferred CPU mask to balance > the interrupt into. > > Signed-off-by: Peter P Waskiewicz Jr > --- > > include/linux/interrupt.h | 13 +++++++++++++ > include/linux/irq.h | 1 + > kernel/irq/manage.c | 28 ++++++++++++++++++++++++++++ > kernel/irq/proc.c | 33 +++++++++++++++++++++++++++++++++ > 4 files changed, 75 insertions(+), 0 deletions(-) > > diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h > index 75f3f00..9c9ea2a 100644 > --- a/include/linux/interrupt.h > +++ b/include/linux/interrupt.h > @@ -209,6 +209,9 @@ extern int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask); > extern int irq_can_set_affinity(unsigned int irq); > extern int irq_select_affinity(unsigned int irq); > > +extern int irq_register_affinity_hint(unsigned int irq, > + const struct cpumask *m); I think we can do with a single funtion irq_set_affinity_hint() and let the caller set the pointer to NULL. > > +int irq_register_affinity_hint(unsigned int irq, const struct cpumask *m) > +{ > + struct irq_desc *desc = irq_to_desc(irq); > + unsigned long flags; desc needs to be checked. It might be NULL ! > + > + raw_spin_lock_irqsave(&desc->lock, flags); > + desc->affinity_hint = m; > + raw_spin_unlock_irqrestore(&desc->lock, flags); > + > + return 0; > +} > +EXPORT_SYMBOL(irq_register_affinity_hint); EXPORT_SYMBOL_GPL please > +static int irq_affinity_hint_proc_show(struct seq_file *m, void *v) > +{ > + struct irq_desc *desc = irq_to_desc((long)m->private); > + unsigned long flags; > + int ret = -EINVAL; > + > + raw_spin_lock_irqsave(&desc->lock, flags); > + if (desc->affinity_hint) { > + seq_cpumask(m, desc->affinity_hint); Please make a local copy under desc->mask and do the seq_cpumask() stuff on the local copy outside of desc->lock Thanks, tglx -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/