bnx2x: properly initialize L5 features
The code is missing initialization of NO_FCOE_FLAG and NO_ISCSI*FLAGS
when CONFIG_CNIC is not selected.
This causes panic during driver load since commit
1d187b34da
where NO_FCOE tested
unconditionally (outside #ifdef BCM_CNIC structure) and
accessed fp[FCOE_IDX] which is not allocated.
Reported-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: Dmitry Kravkov <dmitry@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
6d4cdf47d2
commit
7185bb335a
@@ -1491,7 +1491,6 @@ static inline u16 bnx2x_extract_max_cfg(struct bnx2x *bp, u32 mf_cfg)
|
|||||||
return max_cfg;
|
return max_cfg;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BCM_CNIC
|
|
||||||
/**
|
/**
|
||||||
* bnx2x_get_iscsi_info - update iSCSI params according to licensing info.
|
* bnx2x_get_iscsi_info - update iSCSI params according to licensing info.
|
||||||
*
|
*
|
||||||
@@ -1499,7 +1498,6 @@ static inline u16 bnx2x_extract_max_cfg(struct bnx2x *bp, u32 mf_cfg)
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void bnx2x_get_iscsi_info(struct bnx2x *bp);
|
void bnx2x_get_iscsi_info(struct bnx2x *bp);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* returns func by VN for current port */
|
/* returns func by VN for current port */
|
||||||
static inline int func_by_vn(struct bnx2x *bp, int vn)
|
static inline int func_by_vn(struct bnx2x *bp, int vn)
|
||||||
|
@@ -9478,9 +9478,9 @@ static void __devinit bnx2x_get_port_hwinfo(struct bnx2x *bp)
|
|||||||
bp->common.shmem2_base);
|
bp->common.shmem2_base);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef BCM_CNIC
|
|
||||||
void bnx2x_get_iscsi_info(struct bnx2x *bp)
|
void bnx2x_get_iscsi_info(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
|
#ifdef BCM_CNIC
|
||||||
int port = BP_PORT(bp);
|
int port = BP_PORT(bp);
|
||||||
|
|
||||||
u32 max_iscsi_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
|
u32 max_iscsi_conn = FW_ENCODE_32BIT_PATTERN ^ SHMEM_RD(bp,
|
||||||
@@ -9500,10 +9500,14 @@ void bnx2x_get_iscsi_info(struct bnx2x *bp)
|
|||||||
*/
|
*/
|
||||||
if (!bp->cnic_eth_dev.max_iscsi_conn)
|
if (!bp->cnic_eth_dev.max_iscsi_conn)
|
||||||
bp->flags |= NO_ISCSI_FLAG;
|
bp->flags |= NO_ISCSI_FLAG;
|
||||||
|
#else
|
||||||
|
bp->flags |= NO_ISCSI_FLAG;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp)
|
static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
|
#ifdef BCM_CNIC
|
||||||
int port = BP_PORT(bp);
|
int port = BP_PORT(bp);
|
||||||
int func = BP_ABS_FUNC(bp);
|
int func = BP_ABS_FUNC(bp);
|
||||||
|
|
||||||
@@ -9570,6 +9574,9 @@ static void __devinit bnx2x_get_fcoe_info(struct bnx2x *bp)
|
|||||||
*/
|
*/
|
||||||
if (!bp->cnic_eth_dev.max_fcoe_conn)
|
if (!bp->cnic_eth_dev.max_fcoe_conn)
|
||||||
bp->flags |= NO_FCOE_FLAG;
|
bp->flags |= NO_FCOE_FLAG;
|
||||||
|
#else
|
||||||
|
bp->flags |= NO_FCOE_FLAG;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp)
|
static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp)
|
||||||
@@ -9582,7 +9589,6 @@ static void __devinit bnx2x_get_cnic_info(struct bnx2x *bp)
|
|||||||
bnx2x_get_iscsi_info(bp);
|
bnx2x_get_iscsi_info(bp);
|
||||||
bnx2x_get_fcoe_info(bp);
|
bnx2x_get_fcoe_info(bp);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
|
static void __devinit bnx2x_get_mac_hwinfo(struct bnx2x *bp)
|
||||||
{
|
{
|
||||||
@@ -9907,9 +9913,7 @@ static int __devinit bnx2x_get_hwinfo(struct bnx2x *bp)
|
|||||||
/* Get MAC addresses */
|
/* Get MAC addresses */
|
||||||
bnx2x_get_mac_hwinfo(bp);
|
bnx2x_get_mac_hwinfo(bp);
|
||||||
|
|
||||||
#ifdef BCM_CNIC
|
|
||||||
bnx2x_get_cnic_info(bp);
|
bnx2x_get_cnic_info(bp);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Get current FW pulse sequence */
|
/* Get current FW pulse sequence */
|
||||||
if (!BP_NOMCP(bp)) {
|
if (!BP_NOMCP(bp)) {
|
||||||
|
Reference in New Issue
Block a user