get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/809224/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 809224,
    "url": "http://patchwork.ozlabs.org/api/patches/809224/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/1504416646-9527-5-git-send-email-subashab@codeaurora.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": "<1504416646-9527-5-git-send-email-subashab@codeaurora.org>",
    "list_archive_url": null,
    "date": "2017-09-03T05:30:44",
    "name": "[net-next,4/6] net: qualcomm: rmnet: Refactor the new rmnet dev creation",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "b32419e006cf18091d6b1f1e919bda053ee64a7b",
    "submitter": {
        "id": 65547,
        "url": "http://patchwork.ozlabs.org/api/people/65547/?format=api",
        "name": "Subash Abhinov Kasiviswanathan",
        "email": "subashab@codeaurora.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/1504416646-9527-5-git-send-email-subashab@codeaurora.org/mbox/",
    "series": [
        {
            "id": 1198,
            "url": "http://patchwork.ozlabs.org/api/series/1198/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=1198",
            "date": "2017-09-03T05:30:40",
            "name": "net: qualcomm: rmnet: Fix comments on initial patchset",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/1198/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/809224/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/809224/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=codeaurora.org header.i=@codeaurora.org\n\theader.b=\"GShX7zYv\"; \n\tdkim=pass (1024-bit key) header.d=codeaurora.org\n\theader.i=@codeaurora.org header.b=\"BRIi6mnv\"; \n\tdkim-atps=neutral",
            "pdx-caf-mail.web.codeaurora.org;\n\tdmarc=none (p=none dis=none)\n\theader.from=codeaurora.org",
            "pdx-caf-mail.web.codeaurora.org;\n\tspf=none smtp.mailfrom=subashab@codeaurora.org"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xlM7457Rgz9sDB\n\tfor <patchwork-incoming@ozlabs.org>;\n\tSun,  3 Sep 2017 15:32:16 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751542AbdICFcN (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tSun, 3 Sep 2017 01:32:13 -0400",
            "from smtp.codeaurora.org ([198.145.29.96]:42746 \"EHLO\n\tsmtp.codeaurora.org\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751196AbdICFb4 (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Sun, 3 Sep 2017 01:31:56 -0400",
            "by smtp.codeaurora.org (Postfix, from userid 1000)\n\tid 1065E60A10; Sun,  3 Sep 2017 05:31:56 +0000 (UTC)",
            "from subashab-lnx.qualcomm.com (unknown [129.46.15.92])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\t(Authenticated sender: subashab@codeaurora.org)\n\tby smtp.codeaurora.org (Postfix) with ESMTPSA id 914CD60996;\n\tSun,  3 Sep 2017 05:31:54 +0000 (UTC)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org;\n\ts=default; t=1504416716;\n\tbh=gfhBxgRhtzvxJpV2bFW9PPETVR7hhI/k+Ysj2pbwmAw=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=GShX7zYvaiKO1RrvvjivKZYXbAyILgSjbqhyox3BeMowBv/vmYELlTuyHFrtQftUJ\n\tUT7Y/47Z7t18rRBeE8JPPofNggWkWCzoLlgmvQv9un+9JhIFv3RsA1D7lkOutv1ysC\n\tdggm0V6fpcrg+iV7qoRwPwmUU/oINmq7e/q3fYBo=",
            "v=1; a=rsa-sha256; c=relaxed/simple; d=codeaurora.org;\n\ts=default; t=1504416715;\n\tbh=gfhBxgRhtzvxJpV2bFW9PPETVR7hhI/k+Ysj2pbwmAw=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=BRIi6mnvLc4WSy8hXHN+Sha3q/ydCshM8ryxLQO/hKJ335DR8DEmZujV3+6L5Brh3\n\tGq9ouWIQfaIAF9oUHN3hpcrom+A6xadeU2cIxBOZilhgV0MLQJL04SlcGl+LKduO10\n\twYTKsbipkGQapbAAOg6gP5IB7bbCpgL+/muFg9rA="
        ],
        "X-Spam-Checker-Version": "SpamAssassin 3.4.0 (2014-02-07) on\n\tpdx-caf-mail.web.codeaurora.org",
        "X-Spam-Level": "",
        "X-Spam-Status": "No, score=-2.8 required=2.0 tests=ALL_TRUSTED,BAYES_00,\n\tDKIM_SIGNED,\n\tT_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0",
        "DMARC-Filter": "OpenDMARC Filter v1.3.2 smtp.codeaurora.org 914CD60996",
        "From": "Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>",
        "To": "netdev@vger.kernel.org, davem@davemloft.net",
        "Cc": "Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>,\n\tDan Williams <dcbw@redhat.com>",
        "Subject": "[PATCH net-next 4/6] net: qualcomm: rmnet: Refactor the new rmnet\n\tdev creation",
        "Date": "Sat,  2 Sep 2017 23:30:44 -0600",
        "Message-Id": "<1504416646-9527-5-git-send-email-subashab@codeaurora.org>",
        "X-Mailer": "git-send-email 1.9.1",
        "In-Reply-To": "<1504416646-9527-1-git-send-email-subashab@codeaurora.org>",
        "References": "<1504416646-9527-1-git-send-email-subashab@codeaurora.org>",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "Data format can be directly set from rmnet_newlink() since the\nrmnet real dev info is already available.\n\nSince __rmnet_get_real_dev_info() is no longer used in rmnet_config.c\nafter removal of those functions, move content to\nrmnet_get_real_dev_info().\n\n__rmnet_set_endpoint_config() is collapsed into\nrmnet_set_endpoint_config() since only mux_id was being set additionally\nwithin it. Remove an unnecessary mux_id check.\n\nSet the mux_id for the rmnet_dev within rmnet_vnd_newlink() itself.\n\nSigned-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>\nCc: Dan Williams <dcbw@redhat.com>\n---\n drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c | 96 +++++-----------------\n drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c    | 13 ++-\n drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h    |  1 -\n 3 files changed, 26 insertions(+), 84 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c\nindex 3ca98ec..c0aed7c 100644\n--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c\n+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_config.c\n@@ -57,16 +57,6 @@ static int rmnet_is_real_dev_registered(const struct net_device *real_dev)\n \treturn (rx_handler == rmnet_rx_handler);\n }\n \n-/* Needs either rcu_read_lock() or rtnl lock */\n-static struct rmnet_real_dev_info*\n-__rmnet_get_real_dev_info(const struct net_device *real_dev)\n-{\n-\tif (rmnet_is_real_dev_registered(real_dev))\n-\t\treturn rcu_dereference_rtnl(real_dev->rx_handler_data);\n-\telse\n-\t\treturn NULL;\n-}\n-\n /* Needs rtnl lock */\n static struct rmnet_real_dev_info*\n rmnet_get_real_dev_info_rtnl(const struct net_device *real_dev)\n@@ -83,10 +73,7 @@ static int rmnet_is_real_dev_registered(const struct net_device *real_dev)\n \tif (!rmnet_is_real_dev_registered(dev)) {\n \t\tep = rmnet_vnd_get_endpoint(dev);\n \t} else {\n-\t\tr = __rmnet_get_real_dev_info(dev);\n-\n-\t\tif (!r)\n-\t\t\treturn NULL;\n+\t\tr = rmnet_get_real_dev_info_rtnl(dev);\n \n \t\tep = &r->muxed_ep[config_id];\n \t}\n@@ -139,70 +126,23 @@ static int rmnet_register_real_device(struct net_device *real_dev)\n \treturn 0;\n }\n \n-static int rmnet_set_ingress_data_format(struct net_device *dev, u32 idf)\n-{\n-\tstruct rmnet_real_dev_info *r;\n-\n-\tnetdev_dbg(dev, \"Ingress format 0x%08X\\n\", idf);\n-\n-\tr = __rmnet_get_real_dev_info(dev);\n-\n-\tr->ingress_data_format = idf;\n-\n-\treturn 0;\n-}\n-\n-static int rmnet_set_egress_data_format(struct net_device *dev, u32 edf,\n-\t\t\t\t\tu16 agg_size, u16 agg_count)\n+static void rmnet_set_endpoint_config(struct net_device *dev,\n+\t\t\t\t      u8 mux_id, u8 rmnet_mode,\n+\t\t\t\t      struct net_device *egress_dev)\n {\n-\tstruct rmnet_real_dev_info *r;\n-\n-\tnetdev_dbg(dev, \"Egress format 0x%08X agg size %d cnt %d\\n\",\n-\t\t   edf, agg_size, agg_count);\n-\n-\tr = __rmnet_get_real_dev_info(dev);\n-\n-\tr->egress_data_format = edf;\n-\n-\treturn 0;\n-}\n-\n-static int __rmnet_set_endpoint_config(struct net_device *dev, int config_id,\n-\t\t\t\t       struct rmnet_endpoint *ep)\n-{\n-\tstruct rmnet_endpoint *dev_ep;\n-\n-\tdev_ep = rmnet_get_endpoint(dev, config_id);\n-\n-\tif (!dev_ep)\n-\t\treturn -EINVAL;\n-\n-\tmemcpy(dev_ep, ep, sizeof(struct rmnet_endpoint));\n-\tdev_ep->mux_id = config_id;\n-\n-\treturn 0;\n-}\n-\n-static int rmnet_set_endpoint_config(struct net_device *dev,\n-\t\t\t\t     int config_id, u8 rmnet_mode,\n-\t\t\t\t     struct net_device *egress_dev)\n-{\n-\tstruct rmnet_endpoint ep;\n+\tstruct rmnet_endpoint *ep;\n \n \tnetdev_dbg(dev, \"id %d mode %d dev %s\\n\",\n-\t\t   config_id, rmnet_mode, egress_dev->name);\n-\n-\tif (config_id >= RMNET_MAX_LOGICAL_EP)\n-\t\treturn -EINVAL;\n+\t\t   mux_id, rmnet_mode, egress_dev->name);\n \n+\tep = rmnet_get_endpoint(dev, mux_id);\n \t/* This config is cleared on every set, so its ok to not\n \t * clear it on a device delete.\n \t */\n-\tmemset(&ep, 0, sizeof(struct rmnet_endpoint));\n-\tep.rmnet_mode = rmnet_mode;\n-\tep.egress_dev = egress_dev;\n-\n-\treturn __rmnet_set_endpoint_config(dev, config_id, &ep);\n+\tmemset(ep, 0, sizeof(struct rmnet_endpoint));\n+\tep->rmnet_mode = rmnet_mode;\n+\tep->egress_dev = egress_dev;\n+\tep->mux_id = mux_id;\n }\n \n static int rmnet_newlink(struct net *src_net, struct net_device *dev,\n@@ -242,9 +182,11 @@ static int rmnet_newlink(struct net *src_net, struct net_device *dev,\n \tif (err)\n \t\tgoto err2;\n \n-\trmnet_vnd_set_mux(dev, mux_id);\n-\trmnet_set_egress_data_format(real_dev, egress_format, 0, 0);\n-\trmnet_set_ingress_data_format(real_dev, ingress_format);\n+\tnetdev_dbg(dev, \"data format [ingress 0x%08X] [egress 0x%08X]\\n\",\n+\t\t   ingress_format, egress_format);\n+\tr->egress_data_format = egress_format;\n+\tr->ingress_data_format = ingress_format;\n+\n \trmnet_set_endpoint_config(real_dev, mux_id, mode, dev);\n \trmnet_set_endpoint_config(dev, mux_id, mode, real_dev);\n \treturn 0;\n@@ -376,10 +318,14 @@ struct rtnl_link_ops rmnet_link_ops __read_mostly = {\n \t.get_size\t= rmnet_get_size,\n };\n \n+/* Needs either rcu_read_lock() or rtnl lock */\n struct rmnet_real_dev_info*\n rmnet_get_real_dev_info(struct net_device *real_dev)\n {\n-\treturn __rmnet_get_real_dev_info(real_dev);\n+\tif (rmnet_is_real_dev_registered(real_dev))\n+\t\treturn rcu_dereference_rtnl(real_dev->rx_handler_data);\n+\telse\n+\t\treturn NULL;\n }\n \n /* Startup/Shutdown */\ndiff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c\nindex 7c73052..a6de041 100644\n--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c\n+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.c\n@@ -93,6 +93,7 @@ void rmnet_vnd_setup(struct net_device *rmnet_dev)\n int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,\n \t\t      struct rmnet_real_dev_info *r)\n {\n+\tstruct rmnet_priv *priv;\n \tint rc;\n \n \tif (r->rmnet_devices[id])\n@@ -103,6 +104,10 @@ int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,\n \t\tr->rmnet_devices[id] = rmnet_dev;\n \t\tr->nr_rmnet_devs++;\n \t\trmnet_dev->rtnl_link_ops = &rmnet_link_ops;\n+\n+\t\tpriv = netdev_priv(rmnet_dev);\n+\t\tpriv->mux_id = id;\n+\n \t\tnetdev_dbg(rmnet_dev, \"rmnet dev created\\n\");\n \t}\n \n@@ -127,14 +132,6 @@ u8 rmnet_vnd_get_mux(struct net_device *rmnet_dev)\n \treturn priv->mux_id;\n }\n \n-void rmnet_vnd_set_mux(struct net_device *rmnet_dev, u8 mux_id)\n-{\n-\tstruct rmnet_priv *priv;\n-\n-\tpriv = netdev_priv(rmnet_dev);\n-\tpriv->mux_id = mux_id;\n-}\n-\n /* Gets the logical endpoint configuration for a RmNet virtual network device\n  * node. Caller should confirm that devices is a RmNet VND before calling.\n  */\ndiff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h\nindex b102b42..4823f38 100644\n--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h\n+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_vnd.h\n@@ -24,6 +24,5 @@ int rmnet_vnd_newlink(u8 id, struct net_device *rmnet_dev,\n void rmnet_vnd_rx_fixup(struct sk_buff *skb, struct net_device *dev);\n void rmnet_vnd_tx_fixup(struct sk_buff *skb, struct net_device *dev);\n u8 rmnet_vnd_get_mux(struct net_device *rmnet_dev);\n-void rmnet_vnd_set_mux(struct net_device *rmnet_dev, u8 mux_id);\n void rmnet_vnd_setup(struct net_device *dev);\n #endif /* _RMNET_VND_H_ */\n",
    "prefixes": [
        "net-next",
        "4/6"
    ]
}