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

Yassine Oudjana
2025-07-05T18:29:55Z

On Wednesday, April 9th, 2025 at 3:54 PM, Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> wrote:

> On 4/6/25 4:07 PM, Yassine Oudjana wrote:
>
> > Move QRTR instance conversion from qmi_interface into a new macro in order
> > to reuse it in QRTR device ID tables.
> >
> > Signed-off-by: Yassine Oudjana y.oudjana@protonmail.com
> > ---
> > drivers/soc/qcom/qmi_interface.c | 5 +++--
> > include/linux/soc/qcom/qrtr.h | 2 ++
> > 2 files changed, 5 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/soc/qcom/qmi_interface.c b/drivers/soc/qcom/qmi_interface.c
> > index bc6d6379d8b1..cb57b7e1f252 100644
> > --- a/drivers/soc/qcom/qmi_interface.c
> > +++ b/drivers/soc/qcom/qmi_interface.c
> > @@ -14,6 +14,7 @@
> > #include <linux/workqueue.h>
> > #include <trace/events/sock.h>
> > #include <linux/soc/qcom/qmi.h>
> > +#include <linux/soc/qcom/qrtr.h>
> >
> > static struct socket *qmi_sock_create(struct qmi_handle *qmi,
> > struct sockaddr_qrtr *sq);
> > @@ -173,7 +174,7 @@ static void qmi_send_new_lookup(struct qmi_handle *qmi, struct qmi_service *svc)
> > memset(&pkt, 0, sizeof(pkt));
> > pkt.cmd = cpu_to_le32(QRTR_TYPE_NEW_LOOKUP);
> > pkt.server.service = cpu_to_le32(svc->service);
> > - pkt.server.instance = cpu_to_le32(svc->version | svc->instance << 8);
> > + pkt.server.instance = cpu_to_le32(QRTR_INSTANCE(svc->version, svc->instance));
> >
> > sq.sq_family = qmi->sq.sq_family;
> > sq.sq_node = qmi->sq.sq_node;
> > @@ -236,7 +237,7 @@ static void qmi_send_new_server(struct qmi_handle *qmi, struct qmi_service *svc)
> > memset(&pkt, 0, sizeof(pkt));
> > pkt.cmd = cpu_to_le32(QRTR_TYPE_NEW_SERVER);
> > pkt.server.service = cpu_to_le32(svc->service);
> > - pkt.server.instance = cpu_to_le32(svc->version | svc->instance << 8);
> > + pkt.server.instance = cpu_to_le32(QRTR_INSTANCE(svc->version, svc->instance));
> > pkt.server.node = cpu_to_le32(qmi->sq.sq_node);
> > pkt.server.port = cpu_to_le32(qmi->sq.sq_port);
> >
> > 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:

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,
| ^~~~~~~~~~~~~
../include/linux/bitfield.h:114:9: error: braced-group within expression allowed only inside a function
114 | ({ \
| ^
../include/linux/soc/qcom/qrtr.h:21:51: 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,
| ^~~~~~~~~~~~~