On Tue, 29 Aug 2023 at 09:59, Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> wrote: > > On 28/08/2023 21:24, Bartosz Golaszewski wrote: > > Checking for the availability of SCM bridge can happen from any context. > > It's only by chance that we haven't run into concurrency issues but with > > the upcoming SHM Bridge driver that will be initiated at the same > > initcall level, we need to assure the assignment and readback of the > > __scm pointer is atomic. > > > > Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > --- > > drivers/firmware/qcom_scm.c | 6 +++--- > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c > > index 980fcfa20b9f..422de70faff8 100644 > > --- a/drivers/firmware/qcom_scm.c > > +++ b/drivers/firmware/qcom_scm.c > > @@ -1331,7 +1331,7 @@ static int qcom_scm_find_dload_address(struct device *dev, u64 *addr) > > */ > > bool qcom_scm_is_available(void) > > { > > - return !!__scm; > > + return !!READ_ONCE(__scm); > > } > > EXPORT_SYMBOL(qcom_scm_is_available); > > > > @@ -1477,8 +1477,8 @@ static int qcom_scm_probe(struct platform_device *pdev) > > if (ret) > > return ret; > > > > - __scm = scm; > > - __scm->dev = &pdev->dev; > > + scm->dev = &pdev->dev; > > + WRITE_ONCE(__scm, scm); > > Your re-ordering is not effective here, I think. I don't understand it's > purpose exactly, but scm->dev assignment is not WRITE_ONCE(), thus it > can be reordered: > > "compiler is also forbidden from reordering successive instances of > READ_ONCE and WRITE_ONCE" <- so compiler is not forbidden to reorder > other stuff. > > "Ensuring that the compiler does not fold, spindle, or otherwise > mutilate accesses that either do not require ordering or that interact" > <- which means you do not require ordering here. > Hmm, I had the list_add() implementation in mind as well as examples from https://www.kernel.org/doc/Documentation/memory-barriers.txt and was under the impression that WRITE_ONCE() here is enough. I need to double check it. Bart