diff options
author | Ariel Elior <ariele@broadcom.com> | 2011-08-29 20:08:46 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-09-15 14:49:30 -0400 |
commit | 150966ad56291776a1f3fed86000a027e0794922 (patch) | |
tree | 22ebd5997379cd41a86f85e72a0cc11e7e7de699 /drivers | |
parent | a5c53dbcde9a156e8303acc6ecb2296bf609fe38 (diff) |
bnx2x: Fix for a host coalescing bug which impared latency.
Seperated Rx and Tx coalescing to different state machines.
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/bnx2x/bnx2x.h | 25 | ||||
-rw-r--r-- | drivers/net/bnx2x/bnx2x_main.c | 33 |
2 files changed, 42 insertions, 16 deletions
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 2621a1c56358..e46df5331c55 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
@@ -751,24 +751,17 @@ struct bnx2x_fastpath { | |||
751 | #define FP_CSB_FUNC_OFF \ | 751 | #define FP_CSB_FUNC_OFF \ |
752 | offsetof(struct cstorm_status_block_c, func) | 752 | offsetof(struct cstorm_status_block_c, func) |
753 | 753 | ||
754 | #define HC_INDEX_TOE_RX_CQ_CONS 0 /* Formerly Ustorm TOE CQ index */ | 754 | #define HC_INDEX_ETH_RX_CQ_CONS 1 |
755 | /* (HC_INDEX_U_TOE_RX_CQ_CONS) */ | ||
756 | #define HC_INDEX_ETH_RX_CQ_CONS 1 /* Formerly Ustorm ETH CQ index */ | ||
757 | /* (HC_INDEX_U_ETH_RX_CQ_CONS) */ | ||
758 | #define HC_INDEX_ETH_RX_BD_CONS 2 /* Formerly Ustorm ETH BD index */ | ||
759 | /* (HC_INDEX_U_ETH_RX_BD_CONS) */ | ||
760 | |||
761 | #define HC_INDEX_TOE_TX_CQ_CONS 4 /* Formerly Cstorm TOE CQ index */ | ||
762 | /* (HC_INDEX_C_TOE_TX_CQ_CONS) */ | ||
763 | #define HC_INDEX_ETH_TX_CQ_CONS_COS0 5 /* Formerly Cstorm ETH CQ index */ | ||
764 | /* (HC_INDEX_C_ETH_TX_CQ_CONS) */ | ||
765 | #define HC_INDEX_ETH_TX_CQ_CONS_COS1 6 /* Formerly Cstorm ETH CQ index */ | ||
766 | /* (HC_INDEX_C_ETH_TX_CQ_CONS) */ | ||
767 | #define HC_INDEX_ETH_TX_CQ_CONS_COS2 7 /* Formerly Cstorm ETH CQ index */ | ||
768 | /* (HC_INDEX_C_ETH_TX_CQ_CONS) */ | ||
769 | 755 | ||
770 | #define HC_INDEX_ETH_FIRST_TX_CQ_CONS HC_INDEX_ETH_TX_CQ_CONS_COS0 | 756 | #define HC_INDEX_OOO_TX_CQ_CONS 4 |
757 | |||
758 | #define HC_INDEX_ETH_TX_CQ_CONS_COS0 5 | ||
759 | |||
760 | #define HC_INDEX_ETH_TX_CQ_CONS_COS1 6 | ||
771 | 761 | ||
762 | #define HC_INDEX_ETH_TX_CQ_CONS_COS2 7 | ||
763 | |||
764 | #define HC_INDEX_ETH_FIRST_TX_CQ_CONS HC_INDEX_ETH_TX_CQ_CONS_COS0 | ||
772 | 765 | ||
773 | #define BNX2X_RX_SB_INDEX \ | 766 | #define BNX2X_RX_SB_INDEX \ |
774 | (&fp->sb_index_values[HC_INDEX_ETH_RX_CQ_CONS]) | 767 | (&fp->sb_index_values[HC_INDEX_ETH_RX_CQ_CONS]) |
diff --git a/drivers/net/bnx2x/bnx2x_main.c b/drivers/net/bnx2x/bnx2x_main.c index 0b68d02fe455..c027e9341a1a 100644 --- a/drivers/net/bnx2x/bnx2x_main.c +++ b/drivers/net/bnx2x/bnx2x_main.c | |||
@@ -4828,6 +4828,37 @@ void bnx2x_setup_ndsb_state_machine(struct hc_status_block_sm *hc_sm, | |||
4828 | hc_sm->time_to_expire = 0xFFFFFFFF; | 4828 | hc_sm->time_to_expire = 0xFFFFFFFF; |
4829 | } | 4829 | } |
4830 | 4830 | ||
4831 | |||
4832 | /* allocates state machine ids. */ | ||
4833 | static inline | ||
4834 | void bnx2x_map_sb_state_machines(struct hc_index_data *index_data) | ||
4835 | { | ||
4836 | /* zero out state machine indices */ | ||
4837 | /* rx indices */ | ||
4838 | index_data[HC_INDEX_ETH_RX_CQ_CONS].flags &= ~HC_INDEX_DATA_SM_ID; | ||
4839 | |||
4840 | /* tx indices */ | ||
4841 | index_data[HC_INDEX_OOO_TX_CQ_CONS].flags &= ~HC_INDEX_DATA_SM_ID; | ||
4842 | index_data[HC_INDEX_ETH_TX_CQ_CONS_COS0].flags &= ~HC_INDEX_DATA_SM_ID; | ||
4843 | index_data[HC_INDEX_ETH_TX_CQ_CONS_COS1].flags &= ~HC_INDEX_DATA_SM_ID; | ||
4844 | index_data[HC_INDEX_ETH_TX_CQ_CONS_COS2].flags &= ~HC_INDEX_DATA_SM_ID; | ||
4845 | |||
4846 | /* map indices */ | ||
4847 | /* rx indices */ | ||
4848 | index_data[HC_INDEX_ETH_RX_CQ_CONS].flags |= | ||
4849 | SM_RX_ID << HC_INDEX_DATA_SM_ID_SHIFT; | ||
4850 | |||
4851 | /* tx indices */ | ||
4852 | index_data[HC_INDEX_OOO_TX_CQ_CONS].flags |= | ||
4853 | SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT; | ||
4854 | index_data[HC_INDEX_ETH_TX_CQ_CONS_COS0].flags |= | ||
4855 | SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT; | ||
4856 | index_data[HC_INDEX_ETH_TX_CQ_CONS_COS1].flags |= | ||
4857 | SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT; | ||
4858 | index_data[HC_INDEX_ETH_TX_CQ_CONS_COS2].flags |= | ||
4859 | SM_TX_ID << HC_INDEX_DATA_SM_ID_SHIFT; | ||
4860 | } | ||
4861 | |||
4831 | static void bnx2x_init_sb(struct bnx2x *bp, dma_addr_t mapping, int vfid, | 4862 | static void bnx2x_init_sb(struct bnx2x *bp, dma_addr_t mapping, int vfid, |
4832 | u8 vf_valid, int fw_sb_id, int igu_sb_id) | 4863 | u8 vf_valid, int fw_sb_id, int igu_sb_id) |
4833 | { | 4864 | { |
@@ -4859,6 +4890,7 @@ static void bnx2x_init_sb(struct bnx2x *bp, dma_addr_t mapping, int vfid, | |||
4859 | hc_sm_p = sb_data_e2.common.state_machine; | 4890 | hc_sm_p = sb_data_e2.common.state_machine; |
4860 | sb_data_p = (u32 *)&sb_data_e2; | 4891 | sb_data_p = (u32 *)&sb_data_e2; |
4861 | data_size = sizeof(struct hc_status_block_data_e2)/sizeof(u32); | 4892 | data_size = sizeof(struct hc_status_block_data_e2)/sizeof(u32); |
4893 | bnx2x_map_sb_state_machines(sb_data_e2.index_data); | ||
4862 | } else { | 4894 | } else { |
4863 | memset(&sb_data_e1x, 0, | 4895 | memset(&sb_data_e1x, 0, |
4864 | sizeof(struct hc_status_block_data_e1x)); | 4896 | sizeof(struct hc_status_block_data_e1x)); |
@@ -4873,6 +4905,7 @@ static void bnx2x_init_sb(struct bnx2x *bp, dma_addr_t mapping, int vfid, | |||
4873 | hc_sm_p = sb_data_e1x.common.state_machine; | 4905 | hc_sm_p = sb_data_e1x.common.state_machine; |
4874 | sb_data_p = (u32 *)&sb_data_e1x; | 4906 | sb_data_p = (u32 *)&sb_data_e1x; |
4875 | data_size = sizeof(struct hc_status_block_data_e1x)/sizeof(u32); | 4907 | data_size = sizeof(struct hc_status_block_data_e1x)/sizeof(u32); |
4908 | bnx2x_map_sb_state_machines(sb_data_e1x.index_data); | ||
4876 | } | 4909 | } |
4877 | 4910 | ||
4878 | bnx2x_setup_ndsb_state_machine(&hc_sm_p[SM_RX_ID], | 4911 | bnx2x_setup_ndsb_state_machine(&hc_sm_p[SM_RX_ID], |