* [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb().
@ 2009-02-11 13:58 Ron Mercer
2009-02-11 13:58 ` [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang Ron Mercer
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
Replace calls to vlan_hwaccel_rx() and netif_rx().
Thanks to Dave Miller for pointing out the the driver was making
the wrong upcall for passing packets into the stack.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 3d1d7b6..27c5e4d 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -1449,12 +1449,12 @@ static void ql_process_mac_rx_intr(struct ql_adapter *qdev,
if (qdev->vlgrp && (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V)) {
QPRINTK(qdev, RX_STATUS, DEBUG,
"Passing a VLAN packet upstream.\n");
- vlan_hwaccel_rx(skb, qdev->vlgrp,
+ vlan_hwaccel_receive_skb(skb, qdev->vlgrp,
le16_to_cpu(ib_mac_rsp->vlan_id));
} else {
QPRINTK(qdev, RX_STATUS, DEBUG,
"Passing a normal packet upstream.\n");
- netif_rx(skb);
+ netif_receive_skb(skb);
}
}
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang.
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
@ 2009-02-11 13:58 ` Ron Mercer
2009-02-13 0:38 ` David Miller
2009-02-11 13:58 ` [PATCH 3/7] qlge: bugfix: Add missing put_page() call Ron Mercer
` (5 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 27c5e4d..69f7d05 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -1511,6 +1511,11 @@ void ql_queue_asic_error(struct ql_adapter *qdev)
netif_stop_queue(qdev->ndev);
netif_carrier_off(qdev->ndev);
ql_disable_interrupts(qdev);
+ /* Clear adapter up bit to signal the recovery
+ * process that it shouldn't kill the reset worker
+ * thread
+ */
+ clear_bit(QL_ADAPTER_UP, &qdev->flags);
queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
}
@@ -3100,7 +3105,11 @@ static int ql_adapter_down(struct ql_adapter *qdev)
netif_stop_queue(ndev);
netif_carrier_off(ndev);
- cancel_delayed_work_sync(&qdev->asic_reset_work);
+ /* Don't kill the reset worker thread if we
+ * are in the process of recovery.
+ */
+ if (test_bit(QL_ADAPTER_UP, &qdev->flags))
+ cancel_delayed_work_sync(&qdev->asic_reset_work);
cancel_delayed_work_sync(&qdev->mpi_reset_work);
cancel_delayed_work_sync(&qdev->mpi_work);
@@ -3501,7 +3510,7 @@ static int qlge_set_mac_address(struct net_device *ndev, void *p)
static void qlge_tx_timeout(struct net_device *ndev)
{
struct ql_adapter *qdev = (struct ql_adapter *)netdev_priv(ndev);
- queue_delayed_work(qdev->workqueue, &qdev->asic_reset_work, 0);
+ ql_queue_asic_error(qdev);
}
static void ql_asic_reset_work(struct work_struct *work)
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/7] qlge: bugfix: Add missing put_page() call.
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
2009-02-11 13:58 ` [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang Ron Mercer
@ 2009-02-11 13:58 ` Ron Mercer
2009-02-13 0:38 ` David Miller
2009-02-11 13:58 ` [PATCH 4/7] qlge: bugfix: Add missing dev_kfree_skb_any() call Ron Mercer
` (4 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
We put the page back if we can't get mapping for it. We don't
want unmapped buffers on our receive buffer queue.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 69f7d05..5b75fc9 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -907,6 +907,8 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
0, PAGE_SIZE,
PCI_DMA_FROMDEVICE);
if (pci_dma_mapping_error(qdev->pdev, map)) {
+ put_page(lbq_desc->p.lbq_page);
+ lbq_desc->p.lbq_page = NULL;
QPRINTK(qdev, RX_STATUS, ERR,
"PCI mapping failed.\n");
return;
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/7] qlge: bugfix: Add missing dev_kfree_skb_any() call.
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
2009-02-11 13:58 ` [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang Ron Mercer
2009-02-11 13:58 ` [PATCH 3/7] qlge: bugfix: Add missing put_page() call Ron Mercer
@ 2009-02-11 13:58 ` Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-11 13:58 ` [PATCH 5/7] qlge: bugfix: Fix TSO breakage Ron Mercer
` (3 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
We put the skb back if we can't get mapping for it. We don't
want unmapped buffers on our receive buffer queue.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 5b75fc9..fc7d210 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -970,6 +970,8 @@ static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
if (pci_dma_mapping_error(qdev->pdev, map)) {
QPRINTK(qdev, IFUP, ERR, "PCI mapping failed.\n");
rx_ring->sbq_clean_idx = clean_idx;
+ dev_kfree_skb_any(sbq_desc->p.skb);
+ sbq_desc->p.skb = NULL;
return;
}
pci_unmap_addr_set(sbq_desc, mapaddr, map);
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/7] qlge: bugfix: Fix TSO breakage.
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
` (2 preceding siblings ...)
2009-02-11 13:58 ` [PATCH 4/7] qlge: bugfix: Add missing dev_kfree_skb_any() call Ron Mercer
@ 2009-02-11 13:58 ` Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-11 13:58 ` [PATCH 6/7] qlge: bugfix: Fix RX scaling values Ron Mercer
` (2 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
Moved the buffer mapping to a point after TSO logic has modified the
iph->check field. We were seeing stale data on the PCIe bus.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index fc7d210..54b0a9e 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -1936,10 +1936,6 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
tx_ring_desc = &tx_ring->q[tx_ring->prod_idx];
mac_iocb_ptr = tx_ring_desc->queue_entry;
memset((void *)mac_iocb_ptr, 0, sizeof(mac_iocb_ptr));
- if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) != NETDEV_TX_OK) {
- QPRINTK(qdev, TX_QUEUED, ERR, "Could not map the segments.\n");
- return NETDEV_TX_BUSY;
- }
mac_iocb_ptr->opcode = OPCODE_OB_MAC_IOCB;
mac_iocb_ptr->tid = tx_ring_desc->index;
@@ -1965,6 +1961,12 @@ static int qlge_send(struct sk_buff *skb, struct net_device *ndev)
ql_hw_csum_setup(skb,
(struct ob_mac_tso_iocb_req *)mac_iocb_ptr);
}
+ if (ql_map_send(qdev, mac_iocb_ptr, skb, tx_ring_desc) !=
+ NETDEV_TX_OK) {
+ QPRINTK(qdev, TX_QUEUED, ERR,
+ "Could not map the segments.\n");
+ return NETDEV_TX_BUSY;
+ }
QL_DUMP_OB_MAC_IOCB(mac_iocb_ptr);
tx_ring->prod_idx++;
if (tx_ring->prod_idx == tx_ring->wq_len)
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 6/7] qlge: bugfix: Fix RX scaling values.
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
` (3 preceding siblings ...)
2009-02-11 13:58 ` [PATCH 5/7] qlge: bugfix: Fix TSO breakage Ron Mercer
@ 2009-02-11 13:58 ` Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-11 13:58 ` [PATCH 7/7] qlge: bugfix: Add missing rx buf clean index on early exit Ron Mercer
2009-02-13 0:38 ` [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() David Miller
6 siblings, 1 reply; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
Receive packets were only scaling across 2 of the receive queues. The
value was hardcoded to 2 instead of being based on how many rx queues
were running.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 54b0a9e..3ab0369 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -2884,8 +2884,8 @@ static int ql_start_rss(struct ql_adapter *qdev)
/*
* Fill out the Indirection Table.
*/
- for (i = 0; i < 32; i++)
- hash_id[i] = i & 1;
+ for (i = 0; i < 256; i++)
+ hash_id[i] = i & (qdev->rss_ring_count - 1);
/*
* Random values for the IPv6 and IPv4 Hash Keys.
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 7/7] qlge: bugfix: Add missing rx buf clean index on early exit.
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
` (4 preceding siblings ...)
2009-02-11 13:58 ` [PATCH 6/7] qlge: bugfix: Fix RX scaling values Ron Mercer
@ 2009-02-11 13:58 ` Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-13 0:38 ` [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() David Miller
6 siblings, 1 reply; 14+ messages in thread
From: Ron Mercer @ 2009-02-11 13:58 UTC (permalink / raw)
To: davem; +Cc: netdev, linux-driver, ron.mercer
The large receive buffer queue is not properly tracking the current
index in the case where an early exit occurs. This can happen when a
page alloc or dma mapping fails. If this occurs the queue will get
out of sync and invalid indexes can be written to the hardware.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qlge/qlge_main.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 3ab0369..8ea72dc 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -898,6 +898,7 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
lbq_desc->index);
lbq_desc->p.lbq_page = alloc_page(GFP_ATOMIC);
if (lbq_desc->p.lbq_page == NULL) {
+ rx_ring->lbq_clean_idx = clean_idx;
QPRINTK(qdev, RX_STATUS, ERR,
"Couldn't get a page.\n");
return;
@@ -907,6 +908,7 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
0, PAGE_SIZE,
PCI_DMA_FROMDEVICE);
if (pci_dma_mapping_error(qdev->pdev, map)) {
+ rx_ring->lbq_clean_idx = clean_idx;
put_page(lbq_desc->p.lbq_page);
lbq_desc->p.lbq_page = NULL;
QPRINTK(qdev, RX_STATUS, ERR,
--
1.6.0.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb().
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
` (5 preceding siblings ...)
2009-02-11 13:58 ` [PATCH 7/7] qlge: bugfix: Add missing rx buf clean index on early exit Ron Mercer
@ 2009-02-13 0:38 ` David Miller
6 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:38 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:31 -0800
> Replace calls to vlan_hwaccel_rx() and netif_rx().
> Thanks to Dave Miller for pointing out the the driver was making
> the wrong upcall for passing packets into the stack.
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang.
2009-02-11 13:58 ` [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang Ron Mercer
@ 2009-02-13 0:38 ` David Miller
0 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:38 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:32 -0800
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 3/7] qlge: bugfix: Add missing put_page() call.
2009-02-11 13:58 ` [PATCH 3/7] qlge: bugfix: Add missing put_page() call Ron Mercer
@ 2009-02-13 0:38 ` David Miller
0 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:38 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:33 -0800
> We put the page back if we can't get mapping for it. We don't
> want unmapped buffers on our receive buffer queue.
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 4/7] qlge: bugfix: Add missing dev_kfree_skb_any() call.
2009-02-11 13:58 ` [PATCH 4/7] qlge: bugfix: Add missing dev_kfree_skb_any() call Ron Mercer
@ 2009-02-13 0:39 ` David Miller
0 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:39 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:34 -0800
> We put the skb back if we can't get mapping for it. We don't
> want unmapped buffers on our receive buffer queue.
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/7] qlge: bugfix: Fix TSO breakage.
2009-02-11 13:58 ` [PATCH 5/7] qlge: bugfix: Fix TSO breakage Ron Mercer
@ 2009-02-13 0:39 ` David Miller
0 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:39 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:35 -0800
> Moved the buffer mapping to a point after TSO logic has modified the
> iph->check field. We were seeing stale data on the PCIe bus.
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/7] qlge: bugfix: Fix RX scaling values.
2009-02-11 13:58 ` [PATCH 6/7] qlge: bugfix: Fix RX scaling values Ron Mercer
@ 2009-02-13 0:39 ` David Miller
0 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:39 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:36 -0800
> Receive packets were only scaling across 2 of the receive queues. The
> value was hardcoded to 2 instead of being based on how many rx queues
> were running.
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 7/7] qlge: bugfix: Add missing rx buf clean index on early exit.
2009-02-11 13:58 ` [PATCH 7/7] qlge: bugfix: Add missing rx buf clean index on early exit Ron Mercer
@ 2009-02-13 0:39 ` David Miller
0 siblings, 0 replies; 14+ messages in thread
From: David Miller @ 2009-02-13 0:39 UTC (permalink / raw)
To: ron.mercer; +Cc: netdev, linux-driver
From: Ron Mercer <ron.mercer@qlogic.com>
Date: Wed, 11 Feb 2009 05:58:37 -0800
> The large receive buffer queue is not properly tracking the current
> index in the case where an early exit occurs. This can happen when a
> page alloc or dma mapping fails. If this occurs the queue will get
> out of sync and invalid indexes can be written to the hardware.
>
> Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
Applied.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2009-02-13 0:39 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-02-11 13:58 [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() Ron Mercer
2009-02-11 13:58 ` [PATCH 2/7] qlge: bugfix: Fix fatal error recovery hang Ron Mercer
2009-02-13 0:38 ` David Miller
2009-02-11 13:58 ` [PATCH 3/7] qlge: bugfix: Add missing put_page() call Ron Mercer
2009-02-13 0:38 ` David Miller
2009-02-11 13:58 ` [PATCH 4/7] qlge: bugfix: Add missing dev_kfree_skb_any() call Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-11 13:58 ` [PATCH 5/7] qlge: bugfix: Fix TSO breakage Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-11 13:58 ` [PATCH 6/7] qlge: bugfix: Fix RX scaling values Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-11 13:58 ` [PATCH 7/7] qlge: bugfix: Add missing rx buf clean index on early exit Ron Mercer
2009-02-13 0:39 ` David Miller
2009-02-13 0:38 ` [PATCH 1/7] qlge: bugfix: Use netif_receive_skb() and vlan_hwaccel_receive_skb() David Miller
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).