From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753035Ab0IVQG6 (ORCPT ); Wed, 22 Sep 2010 12:06:58 -0400 Received: from www.tglx.de ([62.245.132.106]:49590 "EHLO www.tglx.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752598Ab0IVQG5 (ORCPT ); Wed, 22 Sep 2010 12:06:57 -0400 Date: Wed, 22 Sep 2010 18:06:32 +0200 (CEST) From: Thomas Gleixner To: Ben Hutchings cc: Tom Herbert , netdev@vger.kernel.org, linux-net-drivers@solarflare.com, linux-kernel , Peter Zijlstra , Ingo Molnar Subject: Re: [RFC][PATCH 1/4] IRQ: IRQ groups for multiqueue devices In-Reply-To: <1285171249.2279.11.camel@achroite.uk.solarflarecom.com> Message-ID: References: <1285009290.2282.121.camel@achroite.uk.solarflarecom.com> <1285009685.2282.127.camel@achroite.uk.solarflarecom.com> <1285071945.2307.21.camel@achroite.uk.solarflarecom.com> <1285171249.2279.11.camel@achroite.uk.solarflarecom.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 On Wed, 22 Sep 2010, Ben Hutchings wrote: > On Tue, 2010-09-21 at 21:04 +0200, Thomas Gleixner wrote: > [...] > > Talked to Peter about it and we came to the conclusion, that we should > > just provide a callback infrastructure in the irq code which does not > > care about the action behind it. That's going to solve #1,#2,#3,#5,#6 > > and parts of #8 > > > > That queue/index map code should move to lib/ or some other > > appropriate place so it can be shared with storage or whatever is > > going to grow multiqueue. comments #4, #7, #8 (s@kernel/irq@lib/@) > > above still apply :) > > OK. > > > The modification to the genirq code would be based on registering > > > > struct irq_affinity_callback { > > unsigned int irq; > > struct kref kref; > > struct work work; > > void (*callback)(struct irq_affinity_callback *, const cpumask_t *mask); > > void (*release)(struct kref *ref); > > }; > > > > for an interrupt via > > > > int irq_set_affinity_callback(unsigned int irq, > > struct irq_affinity_callback *cb); > > > > That function can be called with cb=NULL to remove the callback. if > > cb!=NULL, irq, kref and work are initialized. > > When should it be called, relative to {request,free}_irq() and > pci_{disable,enable}_msix()? It should be called before request_irq and before free_irq. free_irq will warn when the pointer is !NULL. > [...] > > That allows you to do all kind of magic in thread context, updating > > the queue map, reallocating queue memory when the node affinity > > changes (I know that you want to), go wild. > > I definitely don't want to reallocate queues if node affinity of the IRQ > is changed by irqbalance, because this will disrupt traffic. So > changing the node affinity of queues has to be a separate operation. Fair enough. > > Thoughts ? > > This does look like something I can use, thanks. Will look into it in the next days. Thanks, tglx