diff options
author | David S. Miller <davem@davemloft.net> | 2013-10-26 00:05:26 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-10-26 00:05:26 -0400 |
commit | d49c83d7ab38891e2072b42f09a0c06af2bca84e (patch) | |
tree | 18769c24f318e7981bbf13759a4a9cfa9c2fc0cb | |
parent | 4c8e84b22aa1bfee40b047d7810ba08615235c05 (diff) | |
parent | d6994ca798f5897a4342f727b21d77e01d92f093 (diff) |
Merge branch 'qlcnic'
Shahed Shaikh says:
====================
qlcnic: Bug fixes
This patch series contains following fixes-
* Performace drop because driver was forcing adapter not to check
destination IP for LRO.
* driver was not issuing qlcnic_fw_cmd_set_drv_version() to 83xx adapter
becasue of improper handling of QLCNIC_FW_CAPABILITY_MORE_CAPS bit.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 7 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 6 |
3 files changed, 9 insertions, 10 deletions
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index 3ca00e05f23d..ace217c447dd 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | |||
@@ -2276,9 +2276,9 @@ int qlcnic_83xx_get_nic_info(struct qlcnic_adapter *adapter, | |||
2276 | temp = (cmd.rsp.arg[8] & 0x7FFE0000) >> 17; | 2276 | temp = (cmd.rsp.arg[8] & 0x7FFE0000) >> 17; |
2277 | npar_info->max_linkspeed_reg_offset = temp; | 2277 | npar_info->max_linkspeed_reg_offset = temp; |
2278 | } | 2278 | } |
2279 | if (npar_info->capabilities & QLCNIC_FW_CAPABILITY_MORE_CAPS) | 2279 | |
2280 | memcpy(ahw->extra_capability, &cmd.rsp.arg[16], | 2280 | memcpy(ahw->extra_capability, &cmd.rsp.arg[16], |
2281 | sizeof(ahw->extra_capability)); | 2281 | sizeof(ahw->extra_capability)); |
2282 | 2282 | ||
2283 | out: | 2283 | out: |
2284 | qlcnic_free_mbx_args(&cmd); | 2284 | qlcnic_free_mbx_args(&cmd); |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c index f8adc7b01f1f..b64e2bef9428 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | |||
@@ -785,8 +785,6 @@ void qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *adapter) | |||
785 | 785 | ||
786 | #define QLCNIC_ENABLE_IPV4_LRO 1 | 786 | #define QLCNIC_ENABLE_IPV4_LRO 1 |
787 | #define QLCNIC_ENABLE_IPV6_LRO 2 | 787 | #define QLCNIC_ENABLE_IPV6_LRO 2 |
788 | #define QLCNIC_NO_DEST_IPV4_CHECK (1 << 8) | ||
789 | #define QLCNIC_NO_DEST_IPV6_CHECK (2 << 8) | ||
790 | 788 | ||
791 | int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int enable) | 789 | int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int enable) |
792 | { | 790 | { |
@@ -806,11 +804,10 @@ int qlcnic_82xx_config_hw_lro(struct qlcnic_adapter *adapter, int enable) | |||
806 | 804 | ||
807 | word = 0; | 805 | word = 0; |
808 | if (enable) { | 806 | if (enable) { |
809 | word = QLCNIC_ENABLE_IPV4_LRO | QLCNIC_NO_DEST_IPV4_CHECK; | 807 | word = QLCNIC_ENABLE_IPV4_LRO; |
810 | if (adapter->ahw->extra_capability[0] & | 808 | if (adapter->ahw->extra_capability[0] & |
811 | QLCNIC_FW_CAP2_HW_LRO_IPV6) | 809 | QLCNIC_FW_CAP2_HW_LRO_IPV6) |
812 | word |= QLCNIC_ENABLE_IPV6_LRO | | 810 | word |= QLCNIC_ENABLE_IPV6_LRO; |
813 | QLCNIC_NO_DEST_IPV6_CHECK; | ||
814 | } | 811 | } |
815 | 812 | ||
816 | req.words[0] = cpu_to_le64(word); | 813 | req.words[0] = cpu_to_le64(word); |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index 9e61eb867452..d8f4897e9e82 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |||
@@ -1131,7 +1131,10 @@ qlcnic_initialize_nic(struct qlcnic_adapter *adapter) | |||
1131 | if (err == -EIO) | 1131 | if (err == -EIO) |
1132 | return err; | 1132 | return err; |
1133 | adapter->ahw->extra_capability[0] = temp; | 1133 | adapter->ahw->extra_capability[0] = temp; |
1134 | } else { | ||
1135 | adapter->ahw->extra_capability[0] = 0; | ||
1134 | } | 1136 | } |
1137 | |||
1135 | adapter->ahw->max_mac_filters = nic_info.max_mac_filters; | 1138 | adapter->ahw->max_mac_filters = nic_info.max_mac_filters; |
1136 | adapter->ahw->max_mtu = nic_info.max_mtu; | 1139 | adapter->ahw->max_mtu = nic_info.max_mtu; |
1137 | 1140 | ||
@@ -2159,8 +2162,7 @@ void qlcnic_set_drv_version(struct qlcnic_adapter *adapter) | |||
2159 | else if (qlcnic_83xx_check(adapter)) | 2162 | else if (qlcnic_83xx_check(adapter)) |
2160 | fw_cmd = QLCNIC_CMD_83XX_SET_DRV_VER; | 2163 | fw_cmd = QLCNIC_CMD_83XX_SET_DRV_VER; |
2161 | 2164 | ||
2162 | if ((ahw->capabilities & QLCNIC_FW_CAPABILITY_MORE_CAPS) && | 2165 | if (ahw->extra_capability[0] & QLCNIC_FW_CAPABILITY_SET_DRV_VER) |
2163 | (ahw->extra_capability[0] & QLCNIC_FW_CAPABILITY_SET_DRV_VER)) | ||
2164 | qlcnic_fw_cmd_set_drv_version(adapter, fw_cmd); | 2166 | qlcnic_fw_cmd_set_drv_version(adapter, fw_cmd); |
2165 | } | 2167 | } |
2166 | 2168 | ||