qed*: Don't reset statistics on inner reload
Several user APIs can cause driver to perform an inner-reload. Currently, doing this would cause the HW/FW statistics of the adapter to reset, which isn't the expected behavior [statistics should only reset on explicit unloads]. Signed-off-by: Yuval Mintz <Yuval.Mintz@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									326439883e
								
							
						
					
					
						commit
						a0d26d5a4f
					
				| @ -1745,7 +1745,8 @@ static int qed_start_vport(struct qed_dev *cdev, | |||||||
| 			   start.vport_id, start.mtu); | 			   start.vport_id, start.mtu); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	qed_reset_vport_stats(cdev); | 	if (params->clear_stats) | ||||||
|  | 		qed_reset_vport_stats(cdev); | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3231,7 +3231,7 @@ static int qede_stop_queues(struct qede_dev *edev) | |||||||
| 	return rc; | 	return rc; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static int qede_start_queues(struct qede_dev *edev) | static int qede_start_queues(struct qede_dev *edev, bool clear_stats) | ||||||
| { | { | ||||||
| 	int rc, tc, i; | 	int rc, tc, i; | ||||||
| 	int vlan_removal_en = 1; | 	int vlan_removal_en = 1; | ||||||
| @ -3462,6 +3462,7 @@ out: | |||||||
| 
 | 
 | ||||||
| enum qede_load_mode { | enum qede_load_mode { | ||||||
| 	QEDE_LOAD_NORMAL, | 	QEDE_LOAD_NORMAL, | ||||||
|  | 	QEDE_LOAD_RELOAD, | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| static int qede_load(struct qede_dev *edev, enum qede_load_mode mode) | static int qede_load(struct qede_dev *edev, enum qede_load_mode mode) | ||||||
| @ -3500,7 +3501,7 @@ static int qede_load(struct qede_dev *edev, enum qede_load_mode mode) | |||||||
| 		goto err3; | 		goto err3; | ||||||
| 	DP_INFO(edev, "Setup IRQs succeeded\n"); | 	DP_INFO(edev, "Setup IRQs succeeded\n"); | ||||||
| 
 | 
 | ||||||
| 	rc = qede_start_queues(edev); | 	rc = qede_start_queues(edev, mode != QEDE_LOAD_RELOAD); | ||||||
| 	if (rc) | 	if (rc) | ||||||
| 		goto err4; | 		goto err4; | ||||||
| 	DP_INFO(edev, "Start VPORT, RXQ and TXQ succeeded\n"); | 	DP_INFO(edev, "Start VPORT, RXQ and TXQ succeeded\n"); | ||||||
| @ -3555,7 +3556,7 @@ void qede_reload(struct qede_dev *edev, | |||||||
| 	if (func) | 	if (func) | ||||||
| 		func(edev, args); | 		func(edev, args); | ||||||
| 
 | 
 | ||||||
| 	qede_load(edev, QEDE_LOAD_NORMAL); | 	qede_load(edev, QEDE_LOAD_RELOAD); | ||||||
| 
 | 
 | ||||||
| 	mutex_lock(&edev->qede_lock); | 	mutex_lock(&edev->qede_lock); | ||||||
| 	qede_config_rx_mode(edev->ndev); | 	qede_config_rx_mode(edev->ndev); | ||||||
|  | |||||||
| @ -49,6 +49,7 @@ struct qed_start_vport_params { | |||||||
| 	bool drop_ttl0; | 	bool drop_ttl0; | ||||||
| 	u8 vport_id; | 	u8 vport_id; | ||||||
| 	u16 mtu; | 	u16 mtu; | ||||||
|  | 	bool clear_stats; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct qed_stop_rxq_params { | struct qed_stop_rxq_params { | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user