On Mon, Mar 18, 2024 at 06:38:20PM +0530, Mukesh Ojha wrote: > > > On 3/3/2024 12:55 AM, Bjorn Andersson wrote: > > On Tue, Feb 27, 2024 at 09:23:06PM +0530, Mukesh Ojha wrote: > > > qcom_scm_is_available() gives wrong indication if __scm > > > is initialized but __scm->dev is not. > > > > > > Fix this appropriately by making sure if __scm is > > > initialized and then it is associated with its > > > device. > > > > > > > This seems like a bug fix, and should as such have a Fixes: tag and > > probably Cc: stable@xxxxxxxxxxxxxxx > > > > > Signed-off-by: Mukesh Ojha <quic_mojha@xxxxxxxxxxx> > > > --- > > > drivers/firmware/qcom/qcom_scm.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/drivers/firmware/qcom/qcom_scm.c b/drivers/firmware/qcom/qcom_scm.c > > > index 6c252cddd44e..6f14254c0c10 100644 > > > --- a/drivers/firmware/qcom/qcom_scm.c > > > +++ b/drivers/firmware/qcom/qcom_scm.c > > > @@ -1859,6 +1859,7 @@ static int qcom_scm_probe(struct platform_device *pdev) > > > if (!scm) > > > return -ENOMEM; > > > + scm->dev = &pdev->dev; > > > ret = qcom_scm_find_dload_address(&pdev->dev, &scm->dload_mode_addr); > > > if (ret < 0) > > > return ret; > > > @@ -1895,7 +1896,6 @@ static int qcom_scm_probe(struct platform_device *pdev) > > > return ret; > > > __scm = scm; > > > - __scm->dev = &pdev->dev; > > > > Is it sufficient to just move the line up, or do we need a barrier of > > some sort here? > > Would be good to use, smp_mb() before the assignment > __scm = scm > along with moving below line > __scm->dev = &pdev->dev > Full memory barrier is not needed here. store variant is sufficient. WRITE_ONCE() + smp_store_release() will fit here no? Thanks, Pavan