Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/810850/?format=api
{ "id": 810850, "url": "http://patchwork.ozlabs.org/api/patches/810850/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170907060329.32402-7-bjorn.andersson@linaro.org/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170907060329.32402-7-bjorn.andersson@linaro.org>", "list_archive_url": null, "date": "2017-09-07T06:03:28", "name": "[6/7] net: qrtr: Use sk_buff->cb in receive path", "commit_ref": null, "pull_url": null, "state": "deferred", "archived": true, "hash": "9c856c419f3d5dc76396cb3b23a2ba924b08675a", "submitter": { "id": 68398, "url": "http://patchwork.ozlabs.org/api/people/68398/?format=api", "name": "Bjorn Andersson", "email": "bjorn.andersson@linaro.org" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170907060329.32402-7-bjorn.andersson@linaro.org/mbox/", "series": [ { "id": 1911, "url": "http://patchwork.ozlabs.org/api/series/1911/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=1911", "date": "2017-09-07T06:03:24", "name": "net: qrtr: Fixes and support receiving version 2 packets", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/1911/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/810850/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/810850/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": [ "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "ozlabs.org; dkim=pass (1024-bit key;\n\tunprotected) header.d=linaro.org header.i=@linaro.org\n\theader.b=\"j1vbo/tK\"; dkim-atps=neutral" ], "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xnqfK42d8z9sRY\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 7 Sep 2017 16:04:25 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1754123AbdIGGDq (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 7 Sep 2017 02:03:46 -0400", "from mail-pg0-f54.google.com ([74.125.83.54]:34610 \"EHLO\n\tmail-pg0-f54.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1754021AbdIGGDl (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 7 Sep 2017 02:03:41 -0400", "by mail-pg0-f54.google.com with SMTP id q68so3394596pgq.1\n\tfor <netdev@vger.kernel.org>; Wed, 06 Sep 2017 23:03:40 -0700 (PDT)", "from localhost.localdomain (ip68-111-217-79.sd.sd.cox.net.\n\t[68.111.217.79]) by smtp.gmail.com with ESMTPSA id\n\ts1sm2186650pfk.27.2017.09.06.23.03.39\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tWed, 06 Sep 2017 23:03:40 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google;\n\th=from:to:cc:subject:date:message-id:in-reply-to:references;\n\tbh=/thH9etSK4B+8rLqtVVQ/Jd8bt8cVU+Vh5nH0wQcye8=;\n\tb=j1vbo/tKXHVzgG39CyBcP99h5BToxM24LgHviGFnwSvyDWD98Y+hkt3dQ+lStcdKP+\n\tIW230IbPVtQobF3oYSmZ0GNJ3fmmCXVeaqd7WISalBTkAOS1MxY8ASHDSFF+ZRYv9A8o\n\t2M8chteYIRKEezdehvw6MA2tfZf/hfhyTJI8Q=", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n\t:references;\n\tbh=/thH9etSK4B+8rLqtVVQ/Jd8bt8cVU+Vh5nH0wQcye8=;\n\tb=t9xR2etIeW5amubumkG9YLcCwmJMOTySdN3kBqp+EL6fMY1J31Az/VgG17s7OIA+61\n\tuPCLnNuRmKyi9CsDdumKr/jFCQ5Pv4JpTTsUKmTO+5LrWrN2++Ws4qK1JqsO/CcnYfHr\n\tqumiiu4OXrJFBmC5rQlYCSvw6wkHdhJWP8OmchSBkAnsPGGnyD6BCKD/WgDg1P5Ak/rB\n\tYsWv8pAt69m/qTtkR2B+XMnHxEnbc2O0T/M0fL1kpsjRM44ruWMIKtWtNiHrzkulGv+6\n\taNVCmw29UaVA752eQUVMHz/1GIhhd0EyTweo6a4qHQTbN789eJl5KBA2qwXU1E9OOU6l\n\tdqFA==", "X-Gm-Message-State": "AHPjjUjDnMkdsMmfVlZJkFYxUbEpUXUIgpvjrNgn//SOZNtltl3QQ8ru\n\tP5U03t9+78waDADrE3w9Tw==", "X-Google-Smtp-Source": "ADKCNb5Q0irZ/BkvhnKP51naXW2sY0DgY/9ferenaL4cTujpB9eo9+a/Uux48ELdyqPcCCFnvq6kqw==", "X-Received": "by 10.98.73.144 with SMTP id r16mr1598862pfi.314.1504764220515; \n\tWed, 06 Sep 2017 23:03:40 -0700 (PDT)", "From": "Bjorn Andersson <bjorn.andersson@linaro.org>", "To": "\"David S. Miller\" <davem@davemloft.net>", "Cc": "netdev@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tlinux-arm-msm@vger.kernel.org, Chris Lew <clew@codeaurora.org>", "Subject": "[PATCH 6/7] net: qrtr: Use sk_buff->cb in receive path", "Date": "Wed, 6 Sep 2017 23:03:28 -0700", "Message-Id": "<20170907060329.32402-7-bjorn.andersson@linaro.org>", "X-Mailer": "git-send-email 2.12.0", "In-Reply-To": "<20170907060329.32402-1-bjorn.andersson@linaro.org>", "References": "<20170907060329.32402-1-bjorn.andersson@linaro.org>", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "Rather than parsing the header of incoming messages throughout the\nimplementation do it once when we retrieve the message and store the\nrelevant information in the \"cb\" member of the sk_buff.\n\nThis allows us to, in a later commit, decode version 2 messages into\nthis same structure.\n\nSigned-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>\n---\n net/qrtr/qrtr.c | 70 ++++++++++++++++++++++++++++++++-------------------------\n 1 file changed, 40 insertions(+), 30 deletions(-)", "diff": "diff --git a/net/qrtr/qrtr.c b/net/qrtr/qrtr.c\nindex f28ecd7d735b..5042999756ce 100644\n--- a/net/qrtr/qrtr.c\n+++ b/net/qrtr/qrtr.c\n@@ -48,6 +48,16 @@ struct qrtr_hdr {\n \t__le32 dst_port_id;\n } __packed;\n \n+struct qrtr_cb {\n+\tu32 src_node;\n+\tu32 src_port;\n+\tu32 dst_node;\n+\tu32 dst_port;\n+\n+\tu8 type;\n+\tu8 confirm_rx;\n+};\n+\n #define QRTR_HDR_SIZE sizeof(struct qrtr_hdr)\n \n struct qrtr_sock {\n@@ -216,6 +226,7 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)\n \tstruct qrtr_node *node = ep->node;\n \tconst struct qrtr_hdr *phdr = data;\n \tstruct sk_buff *skb;\n+\tstruct qrtr_cb *cb;\n \tunsigned int psize;\n \tunsigned int size;\n \tunsigned int type;\n@@ -245,8 +256,15 @@ int qrtr_endpoint_post(struct qrtr_endpoint *ep, const void *data, size_t len)\n \tif (!skb)\n \t\treturn -ENOMEM;\n \n-\tskb_reset_transport_header(skb);\n-\tskb_put_data(skb, data, len);\n+\tcb = (struct qrtr_cb *)skb->cb;\n+\tcb->src_node = le32_to_cpu(phdr->src_node_id);\n+\tcb->src_port = le32_to_cpu(phdr->src_port_id);\n+\tcb->dst_node = le32_to_cpu(phdr->dst_node_id);\n+\tcb->dst_port = le32_to_cpu(phdr->dst_port_id);\n+\tcb->type = type;\n+\tcb->confirm_rx = !!phdr->confirm_rx;\n+\n+\tskb_put_data(skb, data + QRTR_HDR_SIZE, size);\n \n \tskb_queue_tail(&node->rx_queue, skb);\n \tschedule_work(&node->work);\n@@ -295,26 +313,20 @@ static void qrtr_node_rx_work(struct work_struct *work)\n \tstruct sk_buff *skb;\n \n \twhile ((skb = skb_dequeue(&node->rx_queue)) != NULL) {\n-\t\tconst struct qrtr_hdr *phdr;\n-\t\tu32 dst_node, dst_port;\n \t\tstruct qrtr_sock *ipc;\n-\t\tu32 src_node;\n+\t\tstruct qrtr_cb *cb;\n \t\tint confirm;\n \n-\t\tphdr = (const struct qrtr_hdr *)skb_transport_header(skb);\n-\t\tsrc_node = le32_to_cpu(phdr->src_node_id);\n-\t\tdst_node = le32_to_cpu(phdr->dst_node_id);\n-\t\tdst_port = le32_to_cpu(phdr->dst_port_id);\n-\t\tconfirm = !!phdr->confirm_rx;\n+\t\tcb = (struct qrtr_cb *)skb->cb;\n+\t\tsrc.sq_node = cb->src_node;\n+\t\tsrc.sq_port = cb->src_port;\n+\t\tdst.sq_node = cb->dst_node;\n+\t\tdst.sq_port = cb->dst_port;\n+\t\tconfirm = !!cb->confirm_rx;\n \n-\t\tsrc.sq_node = src_node;\n-\t\tsrc.sq_port = le32_to_cpu(phdr->src_port_id);\n-\t\tdst.sq_node = dst_node;\n-\t\tdst.sq_port = dst_port;\n+\t\tqrtr_node_assign(node, cb->src_node);\n \n-\t\tqrtr_node_assign(node, src_node);\n-\n-\t\tipc = qrtr_port_lookup(dst_port);\n+\t\tipc = qrtr_port_lookup(cb->dst_port);\n \t\tif (!ipc) {\n \t\t\tkfree_skb(skb);\n \t\t} else {\n@@ -604,7 +616,7 @@ static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb,\n \t\t\t struct sockaddr_qrtr *to)\n {\n \tstruct qrtr_sock *ipc;\n-\tstruct qrtr_hdr *phdr;\n+\tstruct qrtr_cb *cb;\n \n \tipc = qrtr_port_lookup(to->sq_port);\n \tif (!ipc || &ipc->sk == skb->sk) { /* do not send to self */\n@@ -612,11 +624,9 @@ static int qrtr_local_enqueue(struct qrtr_node *node, struct sk_buff *skb,\n \t\treturn -ENODEV;\n \t}\n \n-\tphdr = skb_push(skb, QRTR_HDR_SIZE);\n-\tskb_reset_transport_header(skb);\n-\n-\tphdr->src_node_id = cpu_to_le32(from->sq_node);\n-\tphdr->src_port_id = cpu_to_le32(from->sq_port);\n+\tcb = (struct qrtr_cb *)skb->cb;\n+\tcb->src_node = from->sq_node;\n+\tcb->src_port = from->sq_port;\n \n \tif (sock_queue_rcv_skb(&ipc->sk, skb)) {\n \t\tqrtr_port_put(ipc);\n@@ -750,9 +760,9 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg,\n \t\t\tsize_t size, int flags)\n {\n \tDECLARE_SOCKADDR(struct sockaddr_qrtr *, addr, msg->msg_name);\n-\tconst struct qrtr_hdr *phdr;\n \tstruct sock *sk = sock->sk;\n \tstruct sk_buff *skb;\n+\tstruct qrtr_cb *cb;\n \tint copied, rc;\n \n \tlock_sock(sk);\n@@ -769,22 +779,22 @@ static int qrtr_recvmsg(struct socket *sock, struct msghdr *msg,\n \t\treturn rc;\n \t}\n \n-\tphdr = (const struct qrtr_hdr *)skb_transport_header(skb);\n-\tcopied = le32_to_cpu(phdr->size);\n+\tcopied = skb->len;\n \tif (copied > size) {\n \t\tcopied = size;\n \t\tmsg->msg_flags |= MSG_TRUNC;\n \t}\n \n-\trc = skb_copy_datagram_msg(skb, QRTR_HDR_SIZE, msg, copied);\n+\trc = skb_copy_datagram_msg(skb, 0, msg, copied);\n \tif (rc < 0)\n \t\tgoto out;\n \trc = copied;\n \n \tif (addr) {\n+\t\tcb = (struct qrtr_cb *)skb->cb;\n \t\taddr->sq_family = AF_QIPCRTR;\n-\t\taddr->sq_node = le32_to_cpu(phdr->src_node_id);\n-\t\taddr->sq_port = le32_to_cpu(phdr->src_port_id);\n+\t\taddr->sq_node = cb->src_node;\n+\t\taddr->sq_port = cb->src_port;\n \t\tmsg->msg_namelen = sizeof(*addr);\n \t}\n \n@@ -877,7 +887,7 @@ static int qrtr_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)\n \tcase TIOCINQ:\n \t\tskb = skb_peek(&sk->sk_receive_queue);\n \t\tif (skb)\n-\t\t\tlen = skb->len - QRTR_HDR_SIZE;\n+\t\t\tlen = skb->len;\n \t\trc = put_user(len, (int __user *)argp);\n \t\tbreak;\n \tcase SIOCGIFADDR:\n", "prefixes": [ "6/7" ] }