get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1115484,
    "url": "http://patchwork.ozlabs.org/api/patches/1115484/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1560411450-29121-2-git-send-email-magnus.karlsson@intel.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<1560411450-29121-2-git-send-email-magnus.karlsson@intel.com>",
    "list_archive_url": null,
    "date": "2019-06-13T07:37:25",
    "name": "[bpf-next,1/6] xsk: replace ndo_xsk_async_xmit with ndo_xsk_wakeup",
    "commit_ref": null,
    "pull_url": null,
    "state": "awaiting-upstream",
    "archived": false,
    "hash": "d9a90cedb4445098f4125352cb09b5cd59526745",
    "submitter": {
        "id": 72726,
        "url": "http://patchwork.ozlabs.org/api/people/72726/?format=api",
        "name": "Magnus Karlsson",
        "email": "magnus.karlsson@intel.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1560411450-29121-2-git-send-email-magnus.karlsson@intel.com/mbox/",
    "series": [
        {
            "id": 113704,
            "url": "http://patchwork.ozlabs.org/api/series/113704/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=113704",
            "date": "2019-06-13T07:37:25",
            "name": "add need_wakeup flag to the AF_XDP rings",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/113704/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1115484/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1115484/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.137; helo=fraxinus.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=intel.com"
        ],
        "Received": [
            "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 45PrF01hQvz9s5c\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 14 Jun 2019 03:23:47 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 1FCE086672;\n\tThu, 13 Jun 2019 17:23:45 +0000 (UTC)",
            "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id l-hE5m8F0FDv; Thu, 13 Jun 2019 17:23:44 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 16AC585E09;\n\tThu, 13 Jun 2019 17:23:44 +0000 (UTC)",
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ash.osuosl.org (Postfix) with ESMTP id C53581BF363\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 13 Jun 2019 07:37:45 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id C21582107D\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 13 Jun 2019 07:37:45 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id CWf2XeXUlGFD for <intel-wired-lan@lists.osuosl.org>;\n\tThu, 13 Jun 2019 07:37:44 +0000 (UTC)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby silver.osuosl.org (Postfix) with ESMTPS id ABE6920345\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 13 Jun 2019 07:37:44 +0000 (UTC)",
            "from orsmga004.jf.intel.com ([10.7.209.38])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t13 Jun 2019 00:37:44 -0700",
            "from mkarlsso-mobl.ger.corp.intel.com (HELO VM.ger.corp.intel.com)\n\t([10.103.211.41])\n\tby orsmga004.jf.intel.com with ESMTP; 13 Jun 2019 00:37:39 -0700"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "From": "Magnus Karlsson <magnus.karlsson@intel.com>",
        "To": "magnus.karlsson@intel.com, bjorn.topel@intel.com, ast@kernel.org,\n\tdaniel@iogearbox.net, netdev@vger.kernel.org, brouer@redhat.com",
        "Date": "Thu, 13 Jun 2019 09:37:25 +0200",
        "Message-Id": "<1560411450-29121-2-git-send-email-magnus.karlsson@intel.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1560411450-29121-1-git-send-email-magnus.karlsson@intel.com>",
        "References": "<1560411450-29121-1-git-send-email-magnus.karlsson@intel.com>",
        "X-Mailman-Approved-At": "Thu, 13 Jun 2019 17:23:43 +0000",
        "Subject": "[Intel-wired-lan] [PATCH bpf-next 1/6] xsk: replace\n\tndo_xsk_async_xmit with ndo_xsk_wakeup",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "Cc": "axboe@kernel.dk, maximmi@mellanox.com, kevin.laatz@intel.com,\n\tjakub.kicinski@netronome.com, maciejromanfijalkowski@gmail.com,\n\tbruce.richardson@intel.com, ciara.loftus@intel.com,\n\tilias.apalodimas@linaro.org, xiaolong.ye@intel.com,\n\tintel-wired-lan@lists.osuosl.org, qi.z.zhang@intel.com,\n\tmaciej.fijalkowski@intel.com, bpf@vger.kernel.org",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "This commit replaces ndo_xsk_async_xmit with ndo_xsk_wakeup. This new\nndo provides the same functionality as before but with the addition of\na new flags field that is used to specifiy if Rx, Tx or both should be\nwoken up. The previous ndo only woke up Tx, as implied by the\nname. The i40e and ixgbe drivers (which are all the supported ones)\nare updated with this new interface.\n\nThis new ndo will be used by the new need_wakeup functionality of XDP\nsockets that need to be able to wake up both Rx and Tx driver\nprocessing.\n\nSigned-off-by: Magnus Karlsson <magnus.karlsson@intel.com>\n---\n drivers/net/ethernet/intel/i40e/i40e_main.c          |  5 +++--\n drivers/net/ethernet/intel/i40e/i40e_xsk.c           |  7 ++++---\n drivers/net/ethernet/intel/i40e/i40e_xsk.h           |  2 +-\n drivers/net/ethernet/intel/ixgbe/ixgbe_main.c        |  5 +++--\n drivers/net/ethernet/intel/ixgbe/ixgbe_txrx_common.h |  2 +-\n drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c         |  4 ++--\n include/linux/netdevice.h                            | 14 ++++++++++++--\n 7 files changed, 26 insertions(+), 13 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c\nindex 320562b..327182e 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_main.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c\n@@ -12025,7 +12025,8 @@ static int i40e_xdp_setup(struct i40e_vsi *vsi,\n \tif (need_reset && prog)\n \t\tfor (i = 0; i < vsi->num_queue_pairs; i++)\n \t\t\tif (vsi->xdp_rings[i]->xsk_umem)\n-\t\t\t\t(void)i40e_xsk_async_xmit(vsi->netdev, i);\n+\t\t\t\t(void)i40e_xsk_wakeup(vsi->netdev, i,\n+\t\t\t\t\t\t      XDP_WAKEUP_RX);\n \n \treturn 0;\n }\n@@ -12347,7 +12348,7 @@ static const struct net_device_ops i40e_netdev_ops = {\n \t.ndo_bridge_setlink\t= i40e_ndo_bridge_setlink,\n \t.ndo_bpf\t\t= i40e_xdp,\n \t.ndo_xdp_xmit\t\t= i40e_xdp_xmit,\n-\t.ndo_xsk_async_xmit\t= i40e_xsk_async_xmit,\n+\t.ndo_xsk_wakeup\t        = i40e_xsk_wakeup,\n };\n \n /**\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.c b/drivers/net/ethernet/intel/i40e/i40e_xsk.c\nindex 1b17486..32be3dd 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_xsk.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.c\n@@ -116,7 +116,7 @@ static int i40e_xsk_umem_enable(struct i40e_vsi *vsi, struct xdp_umem *umem,\n \t\t\treturn err;\n \n \t\t/* Kick start the NAPI context so that receiving will start */\n-\t\terr = i40e_xsk_async_xmit(vsi->netdev, qid);\n+\t\terr = i40e_xsk_wakeup(vsi->netdev, qid, XDP_WAKEUP_RX);\n \t\tif (err)\n \t\t\treturn err;\n \t}\n@@ -762,13 +762,14 @@ bool i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi,\n }\n \n /**\n- * i40e_xsk_async_xmit - Implements the ndo_xsk_async_xmit\n+ * i40e_xsk_wakeup - Implements the ndo_xsk_wakeup\n  * @dev: the netdevice\n  * @queue_id: queue id to wake up\n+ * @flags: ignored in our case since we have Rx and Tx in the same NAPI.\n  *\n  * Returns <0 for errors, 0 otherwise.\n  **/\n-int i40e_xsk_async_xmit(struct net_device *dev, u32 queue_id)\n+int i40e_xsk_wakeup(struct net_device *dev, u32 queue_id, u32 flags)\n {\n \tstruct i40e_netdev_priv *np = netdev_priv(dev);\n \tstruct i40e_vsi *vsi = np->vsi;\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_xsk.h b/drivers/net/ethernet/intel/i40e/i40e_xsk.h\nindex 8cc0a2e..9ed59c1 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_xsk.h\n+++ b/drivers/net/ethernet/intel/i40e/i40e_xsk.h\n@@ -18,6 +18,6 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget);\n \n bool i40e_clean_xdp_tx_irq(struct i40e_vsi *vsi,\n \t\t\t   struct i40e_ring *tx_ring, int napi_budget);\n-int i40e_xsk_async_xmit(struct net_device *dev, u32 queue_id);\n+int i40e_xsk_wakeup(struct net_device *dev, u32 queue_id, u32 flags);\n \n #endif /* _I40E_XSK_H_ */\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\nindex 57fd9ee..5812f84 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c\n@@ -10272,7 +10272,8 @@ static int ixgbe_xdp_setup(struct net_device *dev, struct bpf_prog *prog)\n \tif (need_reset && prog)\n \t\tfor (i = 0; i < adapter->num_rx_queues; i++)\n \t\t\tif (adapter->xdp_ring[i]->xsk_umem)\n-\t\t\t\t(void)ixgbe_xsk_async_xmit(adapter->netdev, i);\n+\t\t\t\t(void)ixgbe_xsk_wakeup(adapter->netdev, i,\n+\t\t\t\t\t\t       XDP_WAKEUP_RX);\n \n \treturn 0;\n }\n@@ -10391,7 +10392,7 @@ static const struct net_device_ops ixgbe_netdev_ops = {\n \t.ndo_features_check\t= ixgbe_features_check,\n \t.ndo_bpf\t\t= ixgbe_xdp,\n \t.ndo_xdp_xmit\t\t= ixgbe_xdp_xmit,\n-\t.ndo_xsk_async_xmit\t= ixgbe_xsk_async_xmit,\n+\t.ndo_xsk_wakeup         = ixgbe_xsk_wakeup,\n };\n \n static void ixgbe_disable_txr_hw(struct ixgbe_adapter *adapter,\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_txrx_common.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_txrx_common.h\nindex d93a690..6d01700 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_txrx_common.h\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_txrx_common.h\n@@ -42,7 +42,7 @@ int ixgbe_clean_rx_irq_zc(struct ixgbe_q_vector *q_vector,\n void ixgbe_xsk_clean_rx_ring(struct ixgbe_ring *rx_ring);\n bool ixgbe_clean_xdp_tx_irq(struct ixgbe_q_vector *q_vector,\n \t\t\t    struct ixgbe_ring *tx_ring, int napi_budget);\n-int ixgbe_xsk_async_xmit(struct net_device *dev, u32 queue_id);\n+int ixgbe_xsk_wakeup(struct net_device *dev, u32 queue_id, u32 flags);\n void ixgbe_xsk_clean_tx_ring(struct ixgbe_ring *tx_ring);\n \n #endif /* #define _IXGBE_TXRX_COMMON_H_ */\ndiff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c\nindex bfe95ce..1a1add8 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c\n@@ -151,7 +151,7 @@ static int ixgbe_xsk_umem_enable(struct ixgbe_adapter *adapter,\n \t\tixgbe_txrx_ring_enable(adapter, qid);\n \n \t\t/* Kick start the NAPI context so that receiving will start */\n-\t\terr = ixgbe_xsk_async_xmit(adapter->netdev, qid);\n+\t\terr = ixgbe_xsk_wakeup(adapter->netdev, qid, XDP_WAKEUP_RX);\n \t\tif (err)\n \t\t\treturn err;\n \t}\n@@ -739,7 +739,7 @@ bool ixgbe_clean_xdp_tx_irq(struct ixgbe_q_vector *q_vector,\n \treturn budget > 0 && xmit_done;\n }\n \n-int ixgbe_xsk_async_xmit(struct net_device *dev, u32 qid)\n+int ixgbe_xsk_wakeup(struct net_device *dev, u32 qid, u32 flags)\n {\n \tstruct ixgbe_adapter *adapter = netdev_priv(dev);\n \tstruct ixgbe_ring *ring;\ndiff --git a/include/linux/netdevice.h b/include/linux/netdevice.h\nindex 44b47e9..fd29d39 100644\n--- a/include/linux/netdevice.h\n+++ b/include/linux/netdevice.h\n@@ -903,6 +903,10 @@ struct netdev_bpf {\n \t};\n };\n \n+/* Flags for ndo_xsk_wakeup. */\n+#define XDP_WAKEUP_RX (1 << 0)\n+#define XDP_WAKEUP_TX (1 << 1)\n+\n #ifdef CONFIG_XFRM_OFFLOAD\n struct xfrmdev_ops {\n \tint\t(*xdo_dev_state_add) (struct xfrm_state *x);\n@@ -1229,6 +1233,12 @@ struct tlsdev_ops;\n  *\tthat got dropped are freed/returned via xdp_return_frame().\n  *\tReturns negative number, means general error invoking ndo, meaning\n  *\tno frames were xmit'ed and core-caller will free all frames.\n+ * int (*ndo_xsk_wakeup)(struct net_device *dev, u32 queue_id, u32 flags);\n+ *      This function is used to wake up the softirq, ksoftirqd or kthread\n+ *\tresponsible for sending and/or receiving packets on a specific\n+ *\tqueue id bound to an AF_XDP socket. The flags field specifies if\n+ *\tonly RX, only Tx, or both should be woken up using the flags\n+ *\tXDP_WAKEUP_RX and XDP_WAKEUP_TX.\n  * struct devlink_port *(*ndo_get_devlink_port)(struct net_device *dev);\n  *\tGet devlink port instance associated with a given netdev.\n  *\tCalled with a reference on the netdevice and devlink locks only,\n@@ -1428,8 +1438,8 @@ struct net_device_ops {\n \tint\t\t\t(*ndo_xdp_xmit)(struct net_device *dev, int n,\n \t\t\t\t\t\tstruct xdp_frame **xdp,\n \t\t\t\t\t\tu32 flags);\n-\tint\t\t\t(*ndo_xsk_async_xmit)(struct net_device *dev,\n-\t\t\t\t\t\t      u32 queue_id);\n+\tint\t\t\t(*ndo_xsk_wakeup)(struct net_device *dev,\n+\t\t\t\t\t\t  u32 queue_id, u32 flags);\n \tstruct devlink_port *\t(*ndo_get_devlink_port)(struct net_device *dev);\n };\n \n",
    "prefixes": [
        "bpf-next",
        "1/6"
    ]
}