scsi: ufs: Fix race conditions related to driver data
[ Upstream commit 21ad0e49085deb22c094f91f9da57319a97188e4 ]
The driver data pointer must be set before any callbacks are registered
that use that pointer. Hence move the initialization of that pointer from
after the ufshcd_init() call to inside ufshcd_init().
Link: https://lore.kernel.org/r/20211203231950.193369-7-bvanassche@acm.org
Fixes: 3b1d05807a
("[SCSI] ufs: Segregate PCI Specific Code")
Reported-by: Alexey Dobriyan <adobriyan@gmail.com>
Tested-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b9b691de3c
commit
27a90275e8
@ -135,7 +135,6 @@ tc_dwc_g210_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||
return err;
|
||||
}
|
||||
|
||||
pci_set_drvdata(pdev, hba);
|
||||
pm_runtime_put_noidle(&pdev->dev);
|
||||
pm_runtime_allow(&pdev->dev);
|
||||
|
||||
|
@ -436,8 +436,6 @@ int ufshcd_pltfrm_init(struct platform_device *pdev,
|
||||
goto dealloc_host;
|
||||
}
|
||||
|
||||
platform_set_drvdata(pdev, hba);
|
||||
|
||||
pm_runtime_set_active(&pdev->dev);
|
||||
pm_runtime_enable(&pdev->dev);
|
||||
|
||||
|
@ -8328,6 +8328,13 @@ int ufshcd_init(struct ufs_hba *hba, void __iomem *mmio_base, unsigned int irq)
|
||||
struct Scsi_Host *host = hba->host;
|
||||
struct device *dev = hba->dev;
|
||||
|
||||
/*
|
||||
* dev_set_drvdata() must be called before any callbacks are registered
|
||||
* that use dev_get_drvdata() (frequency scaling, clock scaling, hwmon,
|
||||
* sysfs).
|
||||
*/
|
||||
dev_set_drvdata(dev, hba);
|
||||
|
||||
if (!mmio_base) {
|
||||
dev_err(hba->dev,
|
||||
"Invalid memory reference for mmio_base is NULL\n");
|
||||
|
Loading…
Reference in New Issue
Block a user