* [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
@ 2008-11-11 14:00 Neil Horman
2008-11-11 14:43 ` Andy Gospodarek
2008-11-11 15:12 ` Michael Chan
0 siblings, 2 replies; 10+ messages in thread
From: Neil Horman @ 2008-11-11 14:00 UTC (permalink / raw)
To: mchan, netdev, jgarzik; +Cc: nhorman
Hey-
I noted recently that bnx2 had a few problems with its poll_controller
method:
1) It passes a net_device structure to bnx2_interrupt, but bnx2_interrupt
expects a bnx2_napi structure.
2) bnx2_interrupt never checks all its rx queues, so theres no guarantee that
we'll see incomming frames.
This patch should fix both those problems
Regards
Neil
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
bnx2.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 430d430..9e1f0e3 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -7203,10 +7203,12 @@ bnx2_change_mtu(struct net_device *dev, int new_mtu)
static void
poll_bnx2(struct net_device *dev)
{
+ int i;
struct bnx2 *bp = netdev_priv(dev);
disable_irq(bp->pdev->irq);
- bnx2_interrupt(bp->pdev->irq, dev);
+ for (i = 0; i < bp->irq_nvecs; i++)
+ bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
enable_irq(bp->pdev->irq);
}
#endif
--
/****************************************************
* Neil Horman <nhorman@tuxdriver.com>
* Software Engineer, Red Hat
****************************************************/
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 14:00 [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked Neil Horman
@ 2008-11-11 14:43 ` Andy Gospodarek
2008-11-11 15:12 ` Michael Chan
1 sibling, 0 replies; 10+ messages in thread
From: Andy Gospodarek @ 2008-11-11 14:43 UTC (permalink / raw)
To: Neil Horman; +Cc: mchan, netdev, jgarzik
On Tue, Nov 11, 2008 at 09:00:55AM -0500, Neil Horman wrote:
> Hey-
> I noted recently that bnx2 had a few problems with its poll_controller
> method:
>
> 1) It passes a net_device structure to bnx2_interrupt, but bnx2_interrupt
> expects a bnx2_napi structure.
>
> 2) bnx2_interrupt never checks all its rx queues, so theres no guarantee that
> we'll see incomming frames.
>
> This patch should fix both those problems
>
> Regards
> Neil
>
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
>
>
> bnx2.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
>
> diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> index 430d430..9e1f0e3 100644
> --- a/drivers/net/bnx2.c
> +++ b/drivers/net/bnx2.c
> @@ -7203,10 +7203,12 @@ bnx2_change_mtu(struct net_device *dev, int new_mtu)
> static void
> poll_bnx2(struct net_device *dev)
> {
> + int i;
> struct bnx2 *bp = netdev_priv(dev);
>
> disable_irq(bp->pdev->irq);
> - bnx2_interrupt(bp->pdev->irq, dev);
> + for (i = 0; i < bp->irq_nvecs; i++)
> + bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
> enable_irq(bp->pdev->irq);
> }
> #endif
I suspect bnx2 isn't the only one that needs to address #2 above due to
ever-increasing usage of MSI-X and multiqueue rx.
Acked-by: Andy Gospodarek <andy@greyhouse.net>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 14:00 [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked Neil Horman
2008-11-11 14:43 ` Andy Gospodarek
@ 2008-11-11 15:12 ` Michael Chan
2008-11-11 16:46 ` Neil Horman
1 sibling, 1 reply; 10+ messages in thread
From: Michael Chan @ 2008-11-11 15:12 UTC (permalink / raw)
To: 'Neil Horman', netdev@vger.kernel.org, jgarzik@pobox.com,
'davem@davemloft.net'
Neil Horman wrote:
> Hey-
> I noted recently that bnx2 had a few problems with its
> poll_controller
> method:
>
> 1) It passes a net_device structure to bnx2_interrupt, but
> bnx2_interrupt
> expects a bnx2_napi structure.
>
> 2) bnx2_interrupt never checks all its rx queues, so theres
> no guarantee that
> we'll see incomming frames.
>
> This patch should fix both those problems
>
> Regards
> Neil
>
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
>
>
> bnx2.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
>
> diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> index 430d430..9e1f0e3 100644
> --- a/drivers/net/bnx2.c
> +++ b/drivers/net/bnx2.c
> @@ -7203,10 +7203,12 @@ bnx2_change_mtu(struct net_device
> *dev, int new_mtu)
> static void
> poll_bnx2(struct net_device *dev)
> {
> + int i;
> struct bnx2 *bp = netdev_priv(dev);
>
> disable_irq(bp->pdev->irq);
> - bnx2_interrupt(bp->pdev->irq, dev);
> + for (i = 0; i < bp->irq_nvecs; i++)
> + bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
Neil, thanks for the patch.
We should probably pass bp->irq_tbl[i].vector as 1st parameter
for correctness, even though it doesn't really matter in this
case since it is not used by bnx2_interrupt().
> enable_irq(bp->pdev->irq);
> }
> #endif
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 15:12 ` Michael Chan
@ 2008-11-11 16:46 ` Neil Horman
2008-11-11 17:09 ` Michael Chan
0 siblings, 1 reply; 10+ messages in thread
From: Neil Horman @ 2008-11-11 16:46 UTC (permalink / raw)
To: Michael Chan
Cc: netdev@vger.kernel.org, jgarzik@pobox.com,
'davem@davemloft.net'
On Tue, Nov 11, 2008 at 07:12:13AM -0800, Michael Chan wrote:
> Neil Horman wrote:
>
> > Hey-
> > I noted recently that bnx2 had a few problems with its
> > poll_controller
> > method:
> >
> > 1) It passes a net_device structure to bnx2_interrupt, but
> > bnx2_interrupt
> > expects a bnx2_napi structure.
> >
> > 2) bnx2_interrupt never checks all its rx queues, so theres
> > no guarantee that
> > we'll see incomming frames.
> >
> > This patch should fix both those problems
> >
> > Regards
> > Neil
> >
> > Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
> >
> >
> > bnx2.c | 4 +++-
> > 1 file changed, 3 insertions(+), 1 deletion(-)
> >
> >
> > diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> > index 430d430..9e1f0e3 100644
> > --- a/drivers/net/bnx2.c
> > +++ b/drivers/net/bnx2.c
> > @@ -7203,10 +7203,12 @@ bnx2_change_mtu(struct net_device
> > *dev, int new_mtu)
> > static void
> > poll_bnx2(struct net_device *dev)
> > {
> > + int i;
> > struct bnx2 *bp = netdev_priv(dev);
> >
> > disable_irq(bp->pdev->irq);
> > - bnx2_interrupt(bp->pdev->irq, dev);
> > + for (i = 0; i < bp->irq_nvecs; i++)
> > + bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
>
> Neil, thanks for the patch.
>
> We should probably pass bp->irq_tbl[i].vector as 1st parameter
> for correctness, even though it doesn't really matter in this
> case since it is not used by bnx2_interrupt().
>
I thought we overwrote pdev->irq with the value from irq_tbl when we registered
for msi interrupts?
Neil
> > enable_irq(bp->pdev->irq);
> > }
> > #endif
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
/****************************************************
* Neil Horman <nhorman@tuxdriver.com>
* Software Engineer, Red Hat
****************************************************/
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 16:46 ` Neil Horman
@ 2008-11-11 17:09 ` Michael Chan
2008-11-11 17:37 ` Neil Horman
0 siblings, 1 reply; 10+ messages in thread
From: Michael Chan @ 2008-11-11 17:09 UTC (permalink / raw)
To: Neil Horman
Cc: netdev@vger.kernel.org, jgarzik@pobox.com,
'davem@davemloft.net'
On Tue, 2008-11-11 at 08:46 -0800, Neil Horman wrote:
> On Tue, Nov 11, 2008 at 07:12:13AM -0800, Michael Chan wrote:
> > Neil Horman wrote:
> > > diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> > > index 430d430..9e1f0e3 100644
> > > --- a/drivers/net/bnx2.c
> > > +++ b/drivers/net/bnx2.c
> > > @@ -7203,10 +7203,12 @@ bnx2_change_mtu(struct net_device
> > > *dev, int new_mtu)
> > > static void
> > > poll_bnx2(struct net_device *dev)
> > > {
> > > + int i;
> > > struct bnx2 *bp = netdev_priv(dev);
> > >
> > > disable_irq(bp->pdev->irq);
> > > - bnx2_interrupt(bp->pdev->irq, dev);
> > > + for (i = 0; i < bp->irq_nvecs; i++)
> > > + bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
> >
> > Neil, thanks for the patch.
> >
> > We should probably pass bp->irq_tbl[i].vector as 1st parameter
> > for correctness, even though it doesn't really matter in this
> > case since it is not used by bnx2_interrupt().
> >
> I thought we overwrote pdev->irq with the value from irq_tbl when we registered
> for msi interrupts?
>
In MSI and INTA mode, we store pdev->irq into irq_tbl[0].vector. In
MSI-X mode, we'll have multiple vectors in the irq_tbl entries and
pdev->irq is no longer relevant. So to be correct when we have multiple
vectors, the irq_tbl values should be used.
Thanks.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 17:09 ` Michael Chan
@ 2008-11-11 17:37 ` Neil Horman
2008-11-11 17:59 ` Michael Chan
0 siblings, 1 reply; 10+ messages in thread
From: Neil Horman @ 2008-11-11 17:37 UTC (permalink / raw)
To: Michael Chan
Cc: netdev@vger.kernel.org, jgarzik@pobox.com,
'davem@davemloft.net'
On Tue, Nov 11, 2008 at 09:09:10AM -0800, Michael Chan wrote:
>
> On Tue, 2008-11-11 at 08:46 -0800, Neil Horman wrote:
> > On Tue, Nov 11, 2008 at 07:12:13AM -0800, Michael Chan wrote:
> > > Neil Horman wrote:
> > > > diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> > > > index 430d430..9e1f0e3 100644
> > > > --- a/drivers/net/bnx2.c
> > > > +++ b/drivers/net/bnx2.c
> > > > @@ -7203,10 +7203,12 @@ bnx2_change_mtu(struct net_device
> > > > *dev, int new_mtu)
> > > > static void
> > > > poll_bnx2(struct net_device *dev)
> > > > {
> > > > + int i;
> > > > struct bnx2 *bp = netdev_priv(dev);
> > > >
> > > > disable_irq(bp->pdev->irq);
> > > > - bnx2_interrupt(bp->pdev->irq, dev);
> > > > + for (i = 0; i < bp->irq_nvecs; i++)
> > > > + bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
> > >
> > > Neil, thanks for the patch.
> > >
> > > We should probably pass bp->irq_tbl[i].vector as 1st parameter
> > > for correctness, even though it doesn't really matter in this
> > > case since it is not used by bnx2_interrupt().
> > >
> > I thought we overwrote pdev->irq with the value from irq_tbl when we registered
> > for msi interrupts?
> >
>
> In MSI and INTA mode, we store pdev->irq into irq_tbl[0].vector. In
> MSI-X mode, we'll have multiple vectors in the irq_tbl entries and
> pdev->irq is no longer relevant. So to be correct when we have multiple
> vectors, the irq_tbl values should be used.
>
> Thanks.
>
Copy that. Here you go, followon patch to change how we pass the irq vector to
bnx2_interrupt. Doesn't do anything super-usefull, but good for the sake of
correctness
Regards
Neil
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
bnx2.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 9e1f0e3..cad8b7a 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -7208,7 +7208,7 @@ poll_bnx2(struct net_device *dev)
disable_irq(bp->pdev->irq);
for (i = 0; i < bp->irq_nvecs; i++)
- bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
+ bnx2_interrupt(bp->irq_tbl[i].vector, &bp->bnx2_napi[i]);
enable_irq(bp->pdev->irq);
}
#endif
>
> --
> To unsubscribe from this list: send the line "unsubscribe netdev" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
/****************************************************
* Neil Horman <nhorman@tuxdriver.com>
* Software Engineer, Red Hat
****************************************************/
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 17:37 ` Neil Horman
@ 2008-11-11 17:59 ` Michael Chan
2008-11-11 20:58 ` Neil Horman
0 siblings, 1 reply; 10+ messages in thread
From: Michael Chan @ 2008-11-11 17:59 UTC (permalink / raw)
To: Neil Horman
Cc: netdev@vger.kernel.org, jgarzik@pobox.com,
'davem@davemloft.net'
On Tue, 2008-11-11 at 09:37 -0800, Neil Horman wrote:
> Copy that. Here you go, followon patch to change how we pass the irq vector to
> bnx2_interrupt. Doesn't do anything super-usefull, but good for the sake of
> correctness
Sorry, I missed something earlier. After looking at this more closely,
we should also move disable_irq() into the loop and call it with the
same vector values from irq_tbl.
Thanks.
>
> Regards
> Neil
>
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
>
>
> bnx2.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>
> diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
> index 9e1f0e3..cad8b7a 100644
> --- a/drivers/net/bnx2.c
> +++ b/drivers/net/bnx2.c
> @@ -7208,7 +7208,7 @@ poll_bnx2(struct net_device *dev)
>
> disable_irq(bp->pdev->irq);
> for (i = 0; i < bp->irq_nvecs; i++)
> - bnx2_interrupt(bp->pdev->irq, &bp->bnx2_napi[i]);
> + bnx2_interrupt(bp->irq_tbl[i].vector, &bp->bnx2_napi[i]);
> enable_irq(bp->pdev->irq);
> }
> #endif
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 17:59 ` Michael Chan
@ 2008-11-11 20:58 ` Neil Horman
2008-11-13 0:23 ` David Miller
0 siblings, 1 reply; 10+ messages in thread
From: Neil Horman @ 2008-11-11 20:58 UTC (permalink / raw)
To: Michael Chan
Cc: netdev@vger.kernel.org, jgarzik@pobox.com,
'davem@davemloft.net'
On Tue, Nov 11, 2008 at 09:59:24AM -0800, Michael Chan wrote:
>
> On Tue, 2008-11-11 at 09:37 -0800, Neil Horman wrote:
> > Copy that. Here you go, followon patch to change how we pass the irq vector to
> > bnx2_interrupt. Doesn't do anything super-usefull, but good for the sake of
> > correctness
>
> Sorry, I missed something earlier. After looking at this more closely,
> we should also move disable_irq() into the loop and call it with the
> same vector values from irq_tbl.
>
Oops your right, new comprehensive patch, replacing the previous 2.
Fix bnx2 so that netpoll works properly. Specifically:
1) Fix parameters to bnx2_interrupt to be a struct bnx2_napi rather than a
struct net_device
2) Fix poll_controller method to check every queue in the rx case so frames
aren't missed
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
bnx2.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c
index 430d430..d07e3f1 100644
--- a/drivers/net/bnx2.c
+++ b/drivers/net/bnx2.c
@@ -7204,10 +7204,13 @@ static void
poll_bnx2(struct net_device *dev)
{
struct bnx2 *bp = netdev_priv(dev);
+ int i;
- disable_irq(bp->pdev->irq);
- bnx2_interrupt(bp->pdev->irq, dev);
- enable_irq(bp->pdev->irq);
+ for (i = 0; i < bp->irq_nvecs; i++) {
+ disable_irq(bp->irq_tbl[i].vector);
+ bnx2_interrupt(bp->irq_tbl[i].vector, &bp->bnx2_napi[i]);
+ enable_irq(bp->irq_tbl[i].vector);
+ }
}
#endif
--
/****************************************************
* Neil Horman <nhorman@tuxdriver.com>
* Software Engineer, Red Hat
****************************************************/
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-11 20:58 ` Neil Horman
@ 2008-11-13 0:23 ` David Miller
2008-11-13 1:09 ` Neil Horman
0 siblings, 1 reply; 10+ messages in thread
From: David Miller @ 2008-11-13 0:23 UTC (permalink / raw)
To: nhorman; +Cc: mchan, netdev, jgarzik
From: Neil Horman <nhorman@tuxdriver.com>
Date: Tue, 11 Nov 2008 15:58:03 -0500
> Fix bnx2 so that netpoll works properly. Specifically:
>
> 1) Fix parameters to bnx2_interrupt to be a struct bnx2_napi rather than a
> struct net_device
>
> 2) Fix poll_controller method to check every queue in the rx case so frames
> aren't missed
>
> Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
This looks good, applied, thanks Neil!
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked
2008-11-13 0:23 ` David Miller
@ 2008-11-13 1:09 ` Neil Horman
0 siblings, 0 replies; 10+ messages in thread
From: Neil Horman @ 2008-11-13 1:09 UTC (permalink / raw)
To: David Miller; +Cc: mchan, netdev, jgarzik
On Wed, Nov 12, 2008 at 04:23:59PM -0800, David Miller wrote:
> From: Neil Horman <nhorman@tuxdriver.com>
> Date: Tue, 11 Nov 2008 15:58:03 -0500
>
> > Fix bnx2 so that netpoll works properly. Specifically:
> >
> > 1) Fix parameters to bnx2_interrupt to be a struct bnx2_napi rather than a
> > struct net_device
> >
> > 2) Fix poll_controller method to check every queue in the rx case so frames
> > aren't missed
> >
> > Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
>
> This looks good, applied, thanks Neil!
>
Thank you Dave!
Neil
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2008-11-13 1:11 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-11-11 14:00 [PATCH] bnx2: fix poll_controller method so that proper structures are passed and all rx queues are checked Neil Horman
2008-11-11 14:43 ` Andy Gospodarek
2008-11-11 15:12 ` Michael Chan
2008-11-11 16:46 ` Neil Horman
2008-11-11 17:09 ` Michael Chan
2008-11-11 17:37 ` Neil Horman
2008-11-11 17:59 ` Michael Chan
2008-11-11 20:58 ` Neil Horman
2008-11-13 0:23 ` David Miller
2008-11-13 1:09 ` Neil Horman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).