[RFC] [PATCH 06/13] soc: qcom: qmi_helpers: optionally bind to QRTR endpoint ID in qmi_sock_create
Mihai Moldovan
ionic at ionic.de
Sun Nov 17 08:06:05 PST 2024
For clients that already know the QRTR endpoint ID before actually
creating the QMI socket and set it in struct qmi_handle, optionally try
to bind to this QRTR endpoint ID when creating the socket.
This can fail, and qmi_sock_create will issue diagnostic messages, but
otherwise ignore the error.
Signed-off-by: Mihai Moldovan <ionic at ionic.de>
---
drivers/soc/qcom/qmi_interface.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/soc/qcom/qmi_interface.c b/drivers/soc/qcom/qmi_interface.c
index bb98b06e87f8..893e5a6accd9 100644
--- a/drivers/soc/qcom/qmi_interface.c
+++ b/drivers/soc/qcom/qmi_interface.c
@@ -586,6 +586,7 @@ static struct socket *qmi_sock_create(struct qmi_handle *qmi,
struct sockaddr_qrtr *sq)
{
struct socket *sock;
+ const struct proto_ops *ops = NULL;
int ret;
ret = sock_create_kern(&init_net, AF_QIPCRTR, SOCK_DGRAM,
@@ -593,6 +594,33 @@ static struct socket *qmi_sock_create(struct qmi_handle *qmi,
if (ret < 0)
return ERR_PTR(ret);
+ ops = READ_ONCE(sock->ops);
+
+ if (!ops) {
+ pr_warn("sock->ops not available for QMI socket, will not be "
+ "able to bind to endpoint ID.\n");
+ /* N.B.: this error value will not be passed out. */
+ ret = -ENXIO;
+ }
+
+ if (!ret && !ops->setsockopt) {
+ pr_warn("ops->setsockopt not available for QMI socket, will "
+ "not be able to bind to endpoint ID.\n");
+ /* N.B.: this error value will not be passed out. */
+ ret = -ENXIO;
+ }
+
+ /* Only bind to a specific endpoint if a valid one was provided. */
+ if (!ret && qmi->endpoint_id) {
+ ret = ops->setsockopt(sock, SOL_QRTR, QRTR_BIND_ENDPOINT,
+ KERNEL_SOCKPTR(&qmi->endpoint_id),
+ sizeof(qmi->endpoint_id));
+
+ if (ret < 0)
+ pr_warn("binding to QRTR endpoint ID requested, but "
+ "operation failed: %d\n", ret);
+ }
+
ret = kernel_getsockname(sock, (struct sockaddr *)sq);
if (ret < 0) {
sock_release(sock);
--
2.45.2
More information about the ath11k
mailing list