From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from imap.sh.mvista.com (unknown [63.81.120.155]) by ozlabs.org (Postfix) with ESMTP id 7A0DEDDEE6 for ; Sat, 27 Oct 2007 23:09:45 +1000 (EST) Message-ID: <4723389F.7010109@ru.mvista.com> Date: Sat, 27 Oct 2007 17:09:51 +0400 From: Sergei Shtylyov MIME-Version: 1.0 To: Anton Vorontsov Subject: Re: [PATCH] ucc_geth: add support for netpoll References: <20071011124842.GB13963@localhost.localdomain> In-Reply-To: <20071011124842.GB13963@localhost.localdomain> Content-Type: text/plain; charset=us-ascii; format=flowed Cc: netdev@vger.kernel.org, leoli@freescale.com, linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Hello. Anton Vorontsov wrote: > This patch adds netpoll support for the QE UCC Gigabit Ethernet > driver. The approach is very similar to the gianfar driver. It's rather contrarywise -- this is standard approach and gianfar with its 3 TSEC IRQs has a quite non-standard poll_controller() implementation. > Tested using netconsole. KGDBoE is considered a better test (I hope you've also tested with it). > Signed-off-by: Anton Vorontsov > diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c > index 18a6f48..06807ce 100644 > --- a/drivers/net/ucc_geth.c > +++ b/drivers/net/ucc_geth.c > @@ -3691,6 +3691,22 @@ static irqreturn_t ucc_geth_irq_handler(int irq, void *info) > return IRQ_HANDLED; > } > > +#ifdef CONFIG_NET_POLL_CONTROLLER > +/* > + * Polling 'interrupt' - used by things like netconsole to send skbs > + * without having to re-enable interrupts. It's not called while > + * the interrupt routine is executing. > + */ > +static void ucc_netpoll(struct net_device *dev) > +{ > + struct ucc_geth_private *ugeth = netdev_priv(dev); > + > + disable_irq(ugeth->ug_info->uf_info.irq); > + ucc_geth_irq_handler(ugeth->ug_info->uf_info.irq, dev); > + enable_irq(ugeth->ug_info->uf_info.irq); Why not make it less complex (for a reader and gcc too :-) ? struct ucc_geth_private *ugeth = netdev_priv(dev); int irq = ugeth->ug_info->uf_info.irq; disable_irq(irq); ucc_geth_irq_handler(irq, dev); enable_irq(irq); > +} > +#endif /* CONFIG_NET_POLL_CONTROLLER */ > + > /* Called when something needs to use the ethernet device */ > /* Returns 0 for success. */ > static int ucc_geth_open(struct net_device *dev) WBR, Sergei