From: Ron Mercer <ron.mercer@qlogic.com>
To: netdev@vger.kernel.org
Cc: ron.mercer@qlogic.com
Subject: [PATCH 3/7] qla3xxx: bugfix: Dropping interrupt under heavy network load.
Date: Mon, 26 Mar 2007 13:42:59 -0700 [thread overview]
Message-ID: <11749417831535-git-send-email-ron.mercer@qlogic.com> (raw)
In-Reply-To: <20070326164650.GA3822@linux-7mw0.qlogic.org>
Update the rx queue pointer when exiting NAPI poll rather than
at the end of each iteration. Remove unnecessary PCI flushes
that occurred after every write. Now write all regs and
flush once.
Signed-off-by: Ron Mercer <ron.mercer@qlogic.com>
---
drivers/net/qla3xxx.c | 71 ++++++++++++++++++++----------------------------
1 files changed, 30 insertions(+), 41 deletions(-)
diff --git a/drivers/net/qla3xxx.c b/drivers/net/qla3xxx.c
index 85850d1..24c485e 100755
--- a/drivers/net/qla3xxx.c
+++ b/drivers/net/qla3xxx.c
@@ -1691,6 +1691,27 @@ static int ql_populate_free_queue(struct ql3_adapter *qdev)
/*
* Caller holds hw_lock.
*/
+static void ql_update_small_bufq_prod_index(struct ql3_adapter *qdev)
+{
+ struct ql3xxx_port_registers __iomem *port_regs = qdev->mem_map_registers;
+ if (qdev->small_buf_release_cnt >= 16) {
+ while (qdev->small_buf_release_cnt >= 16) {
+ qdev->small_buf_q_producer_index++;
+
+ if (qdev->small_buf_q_producer_index ==
+ NUM_SBUFQ_ENTRIES)
+ qdev->small_buf_q_producer_index = 0;
+ qdev->small_buf_release_cnt -= 8;
+ }
+ wmb();
+ writel(qdev->small_buf_q_producer_index,
+ &port_regs->CommonRegs.rxSmallQProducerIndex);
+ }
+}
+
+/*
+ * Caller holds hw_lock.
+ */
static void ql_update_lrg_bufq_prod_index(struct ql3_adapter *qdev)
{
struct bufq_addr_element *lrg_buf_q_ele;
@@ -1732,13 +1753,10 @@ static void ql_update_lrg_bufq_prod_index(struct ql3_adapter *qdev)
lrg_buf_q_ele = qdev->lrg_buf_q_virt_addr;
}
}
-
+ wmb();
qdev->lrg_buf_next_free = lrg_buf_q_ele;
-
- ql_write_common_reg(qdev,
- &port_regs->CommonRegs.
- rxLargeQProducerIndex,
- qdev->lrg_buf_q_producer_index);
+ writel(qdev->lrg_buf_q_producer_index,
+ &port_regs->CommonRegs.rxLargeQProducerIndex);
}
}
@@ -1944,16 +1962,12 @@ static void ql_process_macip_rx_intr(struct ql3_adapter *qdev,
static int ql_tx_rx_clean(struct ql3_adapter *qdev,
int *tx_cleaned, int *rx_cleaned, int work_to_do)
{
- struct ql3xxx_port_registers __iomem *port_regs = qdev->mem_map_registers;
struct net_rsp_iocb *net_rsp;
struct net_device *ndev = qdev->ndev;
- unsigned long hw_flags;
int work_done = 0;
- u32 rsp_producer_index = le32_to_cpu(*(qdev->prsp_producer_index));
-
/* While there are entries in the completion queue. */
- while ((rsp_producer_index !=
+ while ((le32_to_cpu(*(qdev->prsp_producer_index)) !=
qdev->rsp_consumer_index) && (work_done < work_to_do)) {
net_rsp = qdev->rsp_current;
@@ -2009,33 +2023,7 @@ static int ql_tx_rx_clean(struct ql3_adapter *qdev,
work_done = *tx_cleaned + *rx_cleaned;
}
- if(work_done) {
- spin_lock_irqsave(&qdev->hw_lock, hw_flags);
-
- ql_update_lrg_bufq_prod_index(qdev);
-
- if (qdev->small_buf_release_cnt >= 16) {
- while (qdev->small_buf_release_cnt >= 16) {
- qdev->small_buf_q_producer_index++;
-
- if (qdev->small_buf_q_producer_index ==
- NUM_SBUFQ_ENTRIES)
- qdev->small_buf_q_producer_index = 0;
- qdev->small_buf_release_cnt -= 8;
- }
-
- wmb();
- ql_write_common_reg(qdev,
- &port_regs->CommonRegs.
- rxSmallQProducerIndex,
- qdev->small_buf_q_producer_index);
-
- }
-
- spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
- }
-
- return *tx_cleaned + *rx_cleaned;
+ return work_done;
}
static int ql_poll(struct net_device *ndev, int *budget)
@@ -2059,9 +2047,10 @@ quit_polling:
netif_rx_complete(ndev);
spin_lock_irqsave(&qdev->hw_lock, hw_flags);
- ql_write_common_reg(qdev,
- &port_regs->CommonRegs.rspQConsumerIndex,
- qdev->rsp_consumer_index);
+ ql_update_small_bufq_prod_index(qdev);
+ ql_update_lrg_bufq_prod_index(qdev);
+ writel(qdev->rsp_consumer_index,
+ &port_regs->CommonRegs.rspQConsumerIndex);
spin_unlock_irqrestore(&qdev->hw_lock, hw_flags);
ql_enable_interrupts(qdev);
--
1.5.0.rc4.16.g9e258
next prev parent reply other threads:[~2007-03-26 20:43 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-26 16:46 [PATCH 0/7] qla3xxx: bugfixes and new PHY support Ron Mercer
2007-03-26 19:43 ` [PATCH 1/7] qla3xxx: bugfix: Add tx control block memset Ron Mercer
2007-03-26 19:43 ` [PATCH 2/7] qla3xxx: bugfix: Multi segment sends were getting whacked Ron Mercer
2007-03-26 19:43 ` [PATCH 3/7] qla3xxx: bugfix: Dropping interrupt under heavy network load Ron Mercer
2007-03-26 19:43 ` [PATCH 4/7] qla3xxx: bugfix: Jumbo frame handling Ron Mercer
2007-03-26 19:43 ` [PATCH 5/7] qla3xxx: Add ethtool get_pauseparam for improved bonding support Ron Mercer
2007-03-26 19:43 ` [PATCH 6/7] qla3xxx: Adding support for the Agere PHY (ET1011C) Ron Mercer
2007-03-29 12:35 ` Jeff Garzik
2007-03-26 19:43 ` [PATCH 7/7] qla3xxx: Bumping driver version number to v2.03.00-k4 Ron Mercer
2007-03-26 20:42 ` [PATCH 1/7] qla3xxx: bugfix: Add tx control block memset Ron Mercer
2007-03-28 6:19 ` Jeff Garzik
2007-03-26 20:42 ` [PATCH 2/7] qla3xxx: bugfix: Multi segment sends were getting whacked Ron Mercer
2007-03-26 20:42 ` Ron Mercer [this message]
2007-03-26 20:43 ` [PATCH 4/7] qla3xxx: bugfix: Jumbo frame handling Ron Mercer
2007-03-26 20:43 ` [PATCH 5/7] qla3xxx: Add ethtool get_pauseparam for improved bonding support Ron Mercer
2007-03-26 20:43 ` [PATCH 6/7] qla3xxx: Adding support for the Agere PHY (ET1011C) Ron Mercer
2007-03-26 20:43 ` [PATCH 7/7] qla3xxx: Bumping driver version number to v2.03.00-k4 Ron Mercer
2007-03-26 20:47 ` Andrew Vasquez
2007-03-26 20:59 ` Ron Mercer
2007-03-29 12:32 ` Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11749417831535-git-send-email-ron.mercer@qlogic.com \
--to=ron.mercer@qlogic.com \
--cc=netdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).