aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/qlge/qlge_main.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/drivers/net/qlge/qlge_main.c b/drivers/net/qlge/qlge_main.c
index 16c056a62fc1..17198459918e 100644
--- a/drivers/net/qlge/qlge_main.c
+++ b/drivers/net/qlge/qlge_main.c
@@ -863,7 +863,8 @@ static void ql_write_cq_idx(struct rx_ring *rx_ring)
863/* Process (refill) a large buffer queue. */ 863/* Process (refill) a large buffer queue. */
864static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring) 864static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
865{ 865{
866 int clean_idx = rx_ring->lbq_clean_idx; 866 u32 clean_idx = rx_ring->lbq_clean_idx;
867 u32 start_idx = clean_idx;
867 struct bq_desc *lbq_desc; 868 struct bq_desc *lbq_desc;
868 u64 map; 869 u64 map;
869 int i; 870 int i;
@@ -910,19 +911,23 @@ static void ql_update_lbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
910 rx_ring->lbq_prod_idx += 16; 911 rx_ring->lbq_prod_idx += 16;
911 if (rx_ring->lbq_prod_idx == rx_ring->lbq_len) 912 if (rx_ring->lbq_prod_idx == rx_ring->lbq_len)
912 rx_ring->lbq_prod_idx = 0; 913 rx_ring->lbq_prod_idx = 0;
914 rx_ring->lbq_free_cnt -= 16;
915 }
916
917 if (start_idx != clean_idx) {
913 QPRINTK(qdev, RX_STATUS, DEBUG, 918 QPRINTK(qdev, RX_STATUS, DEBUG,
914 "lbq: updating prod idx = %d.\n", 919 "lbq: updating prod idx = %d.\n",
915 rx_ring->lbq_prod_idx); 920 rx_ring->lbq_prod_idx);
916 ql_write_db_reg(rx_ring->lbq_prod_idx, 921 ql_write_db_reg(rx_ring->lbq_prod_idx,
917 rx_ring->lbq_prod_idx_db_reg); 922 rx_ring->lbq_prod_idx_db_reg);
918 rx_ring->lbq_free_cnt -= 16;
919 } 923 }
920} 924}
921 925
922/* Process (refill) a small buffer queue. */ 926/* Process (refill) a small buffer queue. */
923static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring) 927static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
924{ 928{
925 int clean_idx = rx_ring->sbq_clean_idx; 929 u32 clean_idx = rx_ring->sbq_clean_idx;
930 u32 start_idx = clean_idx;
926 struct bq_desc *sbq_desc; 931 struct bq_desc *sbq_desc;
927 u64 map; 932 u64 map;
928 int i; 933 int i;
@@ -972,13 +977,15 @@ static void ql_update_sbq(struct ql_adapter *qdev, struct rx_ring *rx_ring)
972 rx_ring->sbq_prod_idx += 16; 977 rx_ring->sbq_prod_idx += 16;
973 if (rx_ring->sbq_prod_idx == rx_ring->sbq_len) 978 if (rx_ring->sbq_prod_idx == rx_ring->sbq_len)
974 rx_ring->sbq_prod_idx = 0; 979 rx_ring->sbq_prod_idx = 0;
980 rx_ring->sbq_free_cnt -= 16;
981 }
982
983 if (start_idx != clean_idx) {
975 QPRINTK(qdev, RX_STATUS, DEBUG, 984 QPRINTK(qdev, RX_STATUS, DEBUG,
976 "sbq: updating prod idx = %d.\n", 985 "sbq: updating prod idx = %d.\n",
977 rx_ring->sbq_prod_idx); 986 rx_ring->sbq_prod_idx);
978 ql_write_db_reg(rx_ring->sbq_prod_idx, 987 ql_write_db_reg(rx_ring->sbq_prod_idx,
979 rx_ring->sbq_prod_idx_db_reg); 988 rx_ring->sbq_prod_idx_db_reg);
980
981 rx_ring->sbq_free_cnt -= 16;
982 } 989 }
983} 990}
984 991