Subject: Re: [PATCH 2/3] net: qrtr: Define macro to convert QMI version and instance to QRTR instance

From: Simon Horman <[email-masked]>
Date: Mon, 7 Jul 2025 18:06:36 +0100

On Sat, Jul 05, 2025 at 06:29:39PM +0000, Yassine Oudjana wrote:
> On Wednesday, April 9th, 2025 at 3:54 PM, Konrad Dybcio <[email-masked]> wrote:
> 
> > On 4/6/25 4:07 PM, Yassine Oudjana wrote:

...

> > > diff --git a/include/linux/soc/qcom/qrtr.h b/include/linux/soc/qcom/qrtr.h
> > > index 4d7f25c64c56..10c89a35cbb9 100644
> > > --- a/include/linux/soc/qcom/qrtr.h
> > > +++ b/include/linux/soc/qcom/qrtr.h
> > > @@ -13,6 +13,8 @@ struct qrtr_device {
> > > 
> > > #define to_qrtr_device(d) container_of(d, struct qrtr_device, dev)
> > > 
> > > +#define QRTR_INSTANCE(qmi_version, qmi_instance) (qmi_version | qmi_instance << 8)
> > 
> > 
> > Please use FIELD_PREP + GENMASK to avoid potential overflows
> > 
> > Konrad
> 
> Since I'm using this macro in initializing QRTR match tables I am unable to use
> FIELD_PREP. When I do, I get such errors:

Does using FIELD_PREP_CONST, say in a QRTR_INSTANCE_CONST variant, help?

> 
> In file included from ../arch/arm64/include/asm/sysreg.h:1108,
>                  from ../arch/arm64/include/asm/memory.h:223,
>                  from ../arch/arm64/include/asm/pgtable-prot.h:8,
>                  from ../arch/arm64/include/asm/sparsemem.h:8,
>                  from ../include/linux/numa.h:23,
>                  from ../include/linux/cpumask.h:17,
>                  from ../include/linux/smp.h:13,
>                  from ../include/linux/lockdep.h:14,
>                  from ../include/linux/mutex.h:17,
>                  from ../include/linux/kernfs.h:11,
>                  from ../include/linux/sysfs.h:16,
>                  from ../include/linux/iio/buffer.h:9,
>                  from ../drivers/iio/common/qcom_smgr/qcom_smgr.c:8:
> ../include/linux/bitfield.h:114:9: error: braced-group within expression allowed only inside a function
>   114 |         ({                                                              \
>       |         ^
> ../include/linux/soc/qcom/qrtr.h:21:10: note: in expansion of macro 'FIELD_PREP'
>    21 |         (FIELD_PREP(GENMASK(7, 0), qmi_version) | FIELD_PREP(GENMASK(15, 8), qmi_instance))
>       |          ^~~~~~~~~~
> ../drivers/iio/common/qcom_smgr/qcom_smgr.c:825:29: note: in expansion of macro 'QRTR_INSTANCE'
>   825 |                 .instance = QRTR_INSTANCE(SNS_SMGR_QMI_SVC_V1,
>       |                             ^~~~~~~~~~~~~

...