mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	scsi: hisi_sas: Initialise devices in .slave_alloc callback
Perform driver-specific SCSI device initialization in the designated SCSI midlayer callback instead of relying on the libsas "device found" callback. The SCSI midlayer .slave_alloc interface is called prior to sending any I/O to the device. Link: https://lore.kernel.org/r/1634041588-74824-2-git-send-email-john.garry@huawei.com Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com> Signed-off-by: John Garry <john.garry@huawei.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
		
							parent
							
								
									d489f18ad1
								
							
						
					
					
						commit
						36c6b7613e
					
				
					 5 changed files with 18 additions and 6 deletions
				
			
		|  | @ -649,6 +649,7 @@ extern int hisi_sas_probe(struct platform_device *pdev, | |||
| extern int hisi_sas_remove(struct platform_device *pdev); | ||||
| 
 | ||||
| extern int hisi_sas_slave_configure(struct scsi_device *sdev); | ||||
| extern int hisi_sas_slave_alloc(struct scsi_device *sdev); | ||||
| extern int hisi_sas_scan_finished(struct Scsi_Host *shost, unsigned long time); | ||||
| extern void hisi_sas_scan_start(struct Scsi_Host *shost); | ||||
| extern int hisi_sas_host_reset(struct Scsi_Host *shost, int reset_type); | ||||
|  |  | |||
|  | @ -756,6 +756,20 @@ static int hisi_sas_init_device(struct domain_device *device) | |||
| 	return rc; | ||||
| } | ||||
| 
 | ||||
| int hisi_sas_slave_alloc(struct scsi_device *sdev) | ||||
| { | ||||
| 	struct domain_device *ddev; | ||||
| 	int rc; | ||||
| 
 | ||||
| 	rc = sas_slave_alloc(sdev); | ||||
| 	if (rc) | ||||
| 		return rc; | ||||
| 	ddev = sdev_to_domain_dev(sdev); | ||||
| 
 | ||||
| 	return hisi_sas_init_device(ddev); | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(hisi_sas_slave_alloc); | ||||
| 
 | ||||
| static int hisi_sas_dev_found(struct domain_device *device) | ||||
| { | ||||
| 	struct hisi_hba *hisi_hba = dev_to_hisi_hba(device); | ||||
|  | @ -802,9 +816,6 @@ static int hisi_sas_dev_found(struct domain_device *device) | |||
| 	dev_info(dev, "dev[%d:%x] found\n", | ||||
| 		sas_dev->device_id, sas_dev->dev_type); | ||||
| 
 | ||||
| 	rc = hisi_sas_init_device(device); | ||||
| 	if (rc) | ||||
| 		goto err_out; | ||||
| 	sas_dev->dev_status = HISI_SAS_DEV_NORMAL; | ||||
| 	return 0; | ||||
| 
 | ||||
|  |  | |||
|  | @ -1771,7 +1771,7 @@ static struct scsi_host_template sht_v1_hw = { | |||
| 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS, | ||||
| 	.eh_device_reset_handler = sas_eh_device_reset_handler, | ||||
| 	.eh_target_reset_handler = sas_eh_target_reset_handler, | ||||
| 	.slave_alloc		= sas_slave_alloc, | ||||
| 	.slave_alloc		= hisi_sas_slave_alloc, | ||||
| 	.target_destroy		= sas_target_destroy, | ||||
| 	.ioctl			= sas_ioctl, | ||||
| #ifdef CONFIG_COMPAT | ||||
|  |  | |||
|  | @ -3584,7 +3584,7 @@ static struct scsi_host_template sht_v2_hw = { | |||
| 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS, | ||||
| 	.eh_device_reset_handler = sas_eh_device_reset_handler, | ||||
| 	.eh_target_reset_handler = sas_eh_target_reset_handler, | ||||
| 	.slave_alloc		= sas_slave_alloc, | ||||
| 	.slave_alloc		= hisi_sas_slave_alloc, | ||||
| 	.target_destroy		= sas_target_destroy, | ||||
| 	.ioctl			= sas_ioctl, | ||||
| #ifdef CONFIG_COMPAT | ||||
|  |  | |||
|  | @ -3157,7 +3157,7 @@ static struct scsi_host_template sht_v3_hw = { | |||
| 	.max_sectors		= SCSI_DEFAULT_MAX_SECTORS, | ||||
| 	.eh_device_reset_handler = sas_eh_device_reset_handler, | ||||
| 	.eh_target_reset_handler = sas_eh_target_reset_handler, | ||||
| 	.slave_alloc		= sas_slave_alloc, | ||||
| 	.slave_alloc		= hisi_sas_slave_alloc, | ||||
| 	.target_destroy		= sas_target_destroy, | ||||
| 	.ioctl			= sas_ioctl, | ||||
| #ifdef CONFIG_COMPAT | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Xiang Chen
						Xiang Chen