mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	bnxt_en: Add a callback to inform RDMA driver during PCI shutdown.
When bnxt_en gets a PCI shutdown call, we need to have a new callback to inform the RDMA driver to do proper shutdown and removal. Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									c7ef35eb0c
								
							
						
					
					
						commit
						0efd2fc65c
					
				| @ -7837,6 +7837,7 @@ static void bnxt_shutdown(struct pci_dev *pdev) | |||||||
| 		dev_close(dev); | 		dev_close(dev); | ||||||
| 
 | 
 | ||||||
| 	if (system_state == SYSTEM_POWER_OFF) { | 	if (system_state == SYSTEM_POWER_OFF) { | ||||||
|  | 		bnxt_ulp_shutdown(bp); | ||||||
| 		bnxt_clear_int_mode(bp); | 		bnxt_clear_int_mode(bp); | ||||||
| 		pci_wake_from_d3(pdev, bp->wol); | 		pci_wake_from_d3(pdev, bp->wol); | ||||||
| 		pci_set_power_state(pdev, PCI_D3hot); | 		pci_set_power_state(pdev, PCI_D3hot); | ||||||
|  | |||||||
| @ -266,6 +266,25 @@ void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void bnxt_ulp_shutdown(struct bnxt *bp) | ||||||
|  | { | ||||||
|  | 	struct bnxt_en_dev *edev = bp->edev; | ||||||
|  | 	struct bnxt_ulp_ops *ops; | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	if (!edev) | ||||||
|  | 		return; | ||||||
|  | 
 | ||||||
|  | 	for (i = 0; i < BNXT_MAX_ULP; i++) { | ||||||
|  | 		struct bnxt_ulp *ulp = &edev->ulp_tbl[i]; | ||||||
|  | 
 | ||||||
|  | 		ops = rtnl_dereference(ulp->ulp_ops); | ||||||
|  | 		if (!ops || !ops->ulp_shutdown) | ||||||
|  | 			continue; | ||||||
|  | 		ops->ulp_shutdown(ulp->handle); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl) | void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl) | ||||||
| { | { | ||||||
| 	u16 event_id = le16_to_cpu(cmpl->event_id); | 	u16 event_id = le16_to_cpu(cmpl->event_id); | ||||||
|  | |||||||
| @ -26,6 +26,7 @@ struct bnxt_ulp_ops { | |||||||
| 	void (*ulp_stop)(void *); | 	void (*ulp_stop)(void *); | ||||||
| 	void (*ulp_start)(void *); | 	void (*ulp_start)(void *); | ||||||
| 	void (*ulp_sriov_config)(void *, int); | 	void (*ulp_sriov_config)(void *, int); | ||||||
|  | 	void (*ulp_shutdown)(void *); | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| struct bnxt_msix_entry { | struct bnxt_msix_entry { | ||||||
| @ -87,6 +88,7 @@ void bnxt_subtract_ulp_resources(struct bnxt *bp, int ulp_id); | |||||||
| void bnxt_ulp_stop(struct bnxt *bp); | void bnxt_ulp_stop(struct bnxt *bp); | ||||||
| void bnxt_ulp_start(struct bnxt *bp); | void bnxt_ulp_start(struct bnxt *bp); | ||||||
| void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs); | void bnxt_ulp_sriov_cfg(struct bnxt *bp, int num_vfs); | ||||||
|  | void bnxt_ulp_shutdown(struct bnxt *bp); | ||||||
| void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl); | void bnxt_ulp_async_events(struct bnxt *bp, struct hwrm_async_event_cmpl *cmpl); | ||||||
| struct bnxt_en_dev *bnxt_ulp_probe(struct net_device *dev); | struct bnxt_en_dev *bnxt_ulp_probe(struct net_device *dev); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Michael Chan
						Michael Chan