forked from mirrors/linux
		
	bnxt_en: Fix wrong return value check in bnxt_close_nic()
The wait_event_interruptible_timeout() function returns 0
if the timeout elapsed, -ERESTARTSYS if it was interrupted
by a signal, and the remaining jiffies otherwise if the
condition evaluated to true before the timeout elapsed.
Driver should have checked for zero return value instead of
a positive value.
MChan: Print a warning for -ERESTARTSYS.  The close operation
will proceed anyway when wait_event_interruptible_timeout()
returns for any reason.  Since we do the close no matter what,
we should not return this error code to the caller.  Change
bnxt_close_nic() to a void function and remove all error
handling from some of the callers.
Fixes: c0c050c58d ("bnxt_en: New Broadcom ethernet driver.")
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Reviewed-by: Vikas Gupta <vikas.gupta@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://lore.kernel.org/r/20231208001658.14230-4-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
			
			
This commit is contained in:
		
							parent
							
								
									aded5d1feb
								
							
						
					
					
						commit
						bd6781c18c
					
				
					 5 changed files with 16 additions and 34 deletions
				
			
		|  | @ -10732,10 +10732,8 @@ static void __bnxt_close_nic(struct bnxt *bp, bool irq_re_init, | |||
| 	bnxt_free_mem(bp, irq_re_init); | ||||
| } | ||||
| 
 | ||||
| int bnxt_close_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) | ||||
| void bnxt_close_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) | ||||
| { | ||||
| 	int rc = 0; | ||||
| 
 | ||||
| 	if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) { | ||||
| 		/* If we get here, it means firmware reset is in progress
 | ||||
| 		 * while we are trying to close.  We can safely proceed with | ||||
|  | @ -10750,15 +10748,18 @@ int bnxt_close_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init) | |||
| 
 | ||||
| #ifdef CONFIG_BNXT_SRIOV | ||||
| 	if (bp->sriov_cfg) { | ||||
| 		int rc; | ||||
| 
 | ||||
| 		rc = wait_event_interruptible_timeout(bp->sriov_cfg_wait, | ||||
| 						      !bp->sriov_cfg, | ||||
| 						      BNXT_SRIOV_CFG_WAIT_TMO); | ||||
| 		if (rc) | ||||
| 			netdev_warn(bp->dev, "timeout waiting for SRIOV config operation to complete!\n"); | ||||
| 		if (!rc) | ||||
| 			netdev_warn(bp->dev, "timeout waiting for SRIOV config operation to complete, proceeding to close!\n"); | ||||
| 		else if (rc < 0) | ||||
| 			netdev_warn(bp->dev, "SRIOV config operation interrupted, proceeding to close!\n"); | ||||
| 	} | ||||
| #endif | ||||
| 	__bnxt_close_nic(bp, irq_re_init, link_re_init); | ||||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| static int bnxt_close(struct net_device *dev) | ||||
|  |  | |||
|  | @ -2375,7 +2375,7 @@ int bnxt_open_nic(struct bnxt *, bool, bool); | |||
| int bnxt_half_open_nic(struct bnxt *bp); | ||||
| void bnxt_half_close_nic(struct bnxt *bp); | ||||
| void bnxt_reenable_sriov(struct bnxt *bp); | ||||
| int bnxt_close_nic(struct bnxt *, bool, bool); | ||||
| void bnxt_close_nic(struct bnxt *, bool, bool); | ||||
| void bnxt_get_ring_err_stats(struct bnxt *bp, | ||||
| 			     struct bnxt_total_ring_err_stats *stats); | ||||
| int bnxt_dbg_hwrm_rd_reg(struct bnxt *bp, u32 reg_off, u16 num_words, | ||||
|  |  | |||
|  | @ -449,15 +449,8 @@ static int bnxt_dl_reload_down(struct devlink *dl, bool netns_change, | |||
| 			return -ENODEV; | ||||
| 		} | ||||
| 		bnxt_ulp_stop(bp); | ||||
| 		if (netif_running(bp->dev)) { | ||||
| 			rc = bnxt_close_nic(bp, true, true); | ||||
| 			if (rc) { | ||||
| 				NL_SET_ERR_MSG_MOD(extack, "Failed to close"); | ||||
| 				dev_close(bp->dev); | ||||
| 				rtnl_unlock(); | ||||
| 				break; | ||||
| 			} | ||||
| 		} | ||||
| 		if (netif_running(bp->dev)) | ||||
| 			bnxt_close_nic(bp, true, true); | ||||
| 		bnxt_vf_reps_free(bp); | ||||
| 		rc = bnxt_hwrm_func_drv_unrgtr(bp); | ||||
| 		if (rc) { | ||||
|  |  | |||
|  | @ -165,9 +165,8 @@ static int bnxt_set_coalesce(struct net_device *dev, | |||
| reset_coalesce: | ||||
| 	if (test_bit(BNXT_STATE_OPEN, &bp->state)) { | ||||
| 		if (update_stats) { | ||||
| 			rc = bnxt_close_nic(bp, true, false); | ||||
| 			if (!rc) | ||||
| 				rc = bnxt_open_nic(bp, true, false); | ||||
| 			bnxt_close_nic(bp, true, false); | ||||
| 			rc = bnxt_open_nic(bp, true, false); | ||||
| 		} else { | ||||
| 			rc = bnxt_hwrm_set_coal(bp); | ||||
| 		} | ||||
|  | @ -972,12 +971,7 @@ static int bnxt_set_channels(struct net_device *dev, | |||
| 			 * before PF unload | ||||
| 			 */ | ||||
| 		} | ||||
| 		rc = bnxt_close_nic(bp, true, false); | ||||
| 		if (rc) { | ||||
| 			netdev_err(bp->dev, "Set channel failure rc :%x\n", | ||||
| 				   rc); | ||||
| 			return rc; | ||||
| 		} | ||||
| 		bnxt_close_nic(bp, true, false); | ||||
| 	} | ||||
| 
 | ||||
| 	if (sh) { | ||||
|  | @ -4042,12 +4036,7 @@ static void bnxt_self_test(struct net_device *dev, struct ethtool_test *etest, | |||
| 		bnxt_run_fw_tests(bp, test_mask, &test_results); | ||||
| 	} else { | ||||
| 		bnxt_ulp_stop(bp); | ||||
| 		rc = bnxt_close_nic(bp, true, false); | ||||
| 		if (rc) { | ||||
| 			etest->flags |= ETH_TEST_FL_FAILED; | ||||
| 			bnxt_ulp_start(bp, rc); | ||||
| 			return; | ||||
| 		} | ||||
| 		bnxt_close_nic(bp, true, false); | ||||
| 		bnxt_run_fw_tests(bp, test_mask, &test_results); | ||||
| 
 | ||||
| 		buf[BNXT_MACLPBK_TEST_IDX] = 1; | ||||
|  |  | |||
|  | @ -521,9 +521,8 @@ static int bnxt_hwrm_ptp_cfg(struct bnxt *bp) | |||
| 
 | ||||
| 	if (netif_running(bp->dev)) { | ||||
| 		if (ptp->rx_filter == HWTSTAMP_FILTER_ALL) { | ||||
| 			rc = bnxt_close_nic(bp, false, false); | ||||
| 			if (!rc) | ||||
| 				rc = bnxt_open_nic(bp, false, false); | ||||
| 			bnxt_close_nic(bp, false, false); | ||||
| 			rc = bnxt_open_nic(bp, false, false); | ||||
| 		} else { | ||||
| 			bnxt_ptp_cfg_tstamp_filters(bp); | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Kalesh AP
						Kalesh AP