Skip to content

Commit 4bd7ef0

Browse files
Chopra, Manishdavem330
authored andcommitted
qlcnic: Fix tunnel offload for 82xx adapters
Qlogic's 82xx series adapter doesn't support tunnel offloads, driver incorrectly assumes that it is supported and causes firmware hang while running tunnel IO. This patch fixes this by not advertising tunnel offloads for 82xx adapters. Signed-off-by: Manish Chopra <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent a53cb29 commit 4bd7ef0

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

drivers/net/ethernet/qlogic/qlcnic/qlcnic.h

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1824,22 +1824,44 @@ struct qlcnic_hardware_ops {
18241824
u32 (*get_cap_size)(void *, int);
18251825
void (*set_sys_info)(void *, int, u32);
18261826
void (*store_cap_mask)(void *, u32);
1827+
bool (*encap_rx_offload) (struct qlcnic_adapter *adapter);
1828+
bool (*encap_tx_offload) (struct qlcnic_adapter *adapter);
18271829
};
18281830

18291831
extern struct qlcnic_nic_template qlcnic_vf_ops;
18301832

1831-
static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
1833+
static inline bool qlcnic_83xx_encap_tx_offload(struct qlcnic_adapter *adapter)
18321834
{
18331835
return adapter->ahw->extra_capability[0] &
18341836
QLCNIC_83XX_FW_CAPAB_ENCAP_TX_OFFLOAD;
18351837
}
18361838

1837-
static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
1839+
static inline bool qlcnic_83xx_encap_rx_offload(struct qlcnic_adapter *adapter)
18381840
{
18391841
return adapter->ahw->extra_capability[0] &
18401842
QLCNIC_83XX_FW_CAPAB_ENCAP_RX_OFFLOAD;
18411843
}
18421844

1845+
static inline bool qlcnic_82xx_encap_tx_offload(struct qlcnic_adapter *adapter)
1846+
{
1847+
return false;
1848+
}
1849+
1850+
static inline bool qlcnic_82xx_encap_rx_offload(struct qlcnic_adapter *adapter)
1851+
{
1852+
return false;
1853+
}
1854+
1855+
static inline bool qlcnic_encap_rx_offload(struct qlcnic_adapter *adapter)
1856+
{
1857+
return adapter->ahw->hw_ops->encap_rx_offload(adapter);
1858+
}
1859+
1860+
static inline bool qlcnic_encap_tx_offload(struct qlcnic_adapter *adapter)
1861+
{
1862+
return adapter->ahw->hw_ops->encap_tx_offload(adapter);
1863+
}
1864+
18431865
static inline int qlcnic_start_firmware(struct qlcnic_adapter *adapter)
18441866
{
18451867
return adapter->nic_ops->start_firmware(adapter);

drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ static struct qlcnic_hardware_ops qlcnic_83xx_hw_ops = {
242242
.get_cap_size = qlcnic_83xx_get_cap_size,
243243
.set_sys_info = qlcnic_83xx_set_sys_info,
244244
.store_cap_mask = qlcnic_83xx_store_cap_mask,
245+
.encap_rx_offload = qlcnic_83xx_encap_rx_offload,
246+
.encap_tx_offload = qlcnic_83xx_encap_tx_offload,
245247
};
246248

247249
static struct qlcnic_nic_template qlcnic_83xx_ops = {

drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,8 @@ static struct qlcnic_hardware_ops qlcnic_hw_ops = {
632632
.get_cap_size = qlcnic_82xx_get_cap_size,
633633
.set_sys_info = qlcnic_82xx_set_sys_info,
634634
.store_cap_mask = qlcnic_82xx_store_cap_mask,
635+
.encap_rx_offload = qlcnic_82xx_encap_rx_offload,
636+
.encap_tx_offload = qlcnic_82xx_encap_tx_offload,
635637
};
636638

637639
static int qlcnic_check_multi_tx_capability(struct qlcnic_adapter *adapter)

drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ static struct qlcnic_hardware_ops qlcnic_sriov_vf_hw_ops = {
7777
.free_mac_list = qlcnic_sriov_vf_free_mac_list,
7878
.enable_sds_intr = qlcnic_83xx_enable_sds_intr,
7979
.disable_sds_intr = qlcnic_83xx_disable_sds_intr,
80+
.encap_rx_offload = qlcnic_83xx_encap_rx_offload,
81+
.encap_tx_offload = qlcnic_83xx_encap_tx_offload,
8082
};
8183

8284
static struct qlcnic_nic_template qlcnic_sriov_vf_ops = {

0 commit comments

Comments
 (0)