mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
scsi: ufs: Fix race conditions related to driver data
[ Upstream commit21ad0e4908] 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:
@@ -140,7 +140,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);
|
||||
|
||||
|
||||
@@ -350,8 +350,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);
|
||||
|
||||
|
||||
@@ -6851,6 +6851,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");
|
||||
|
||||
Reference in New Issue
Block a user