get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1296568,
    "url": "http://patchwork.ozlabs.org/api/patches/1296568/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20200523004049.34832-3-saeedm@mellanox.com/",
    "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": "<20200523004049.34832-3-saeedm@mellanox.com>",
    "list_archive_url": null,
    "date": "2020-05-23T00:40:38",
    "name": "[net,02/13] net/mlx5: Fix a race when moving command interface to events mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "f5b4c0a6736f9f8c056e691ea4e6175b08e07d50",
    "submitter": {
        "id": 65299,
        "url": "http://patchwork.ozlabs.org/api/people/65299/?format=api",
        "name": "Saeed Mahameed",
        "email": "saeedm@mellanox.com"
    },
    "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/20200523004049.34832-3-saeedm@mellanox.com/mbox/",
    "series": [
        {
            "id": 178808,
            "url": "http://patchwork.ozlabs.org/api/series/178808/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=178808",
            "date": "2020-05-23T00:40:36",
            "name": "[net,01/13] net/mlx5: Add command entry handling completion",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/178808/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1296568/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1296568/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming-netdev@ozlabs.org",
        "Delivered-To": "patchwork-incoming-netdev@ozlabs.org",
        "Authentication-Results": [
            "ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=23.128.96.18; helo=vger.kernel.org;\n envelope-from=netdev-owner@vger.kernel.org; receiver=<UNKNOWN>)",
            "ozlabs.org;\n dmarc=pass (p=none dis=none) header.from=mellanox.com",
            "ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=Mellanox.com header.i=@Mellanox.com header.a=rsa-sha256\n header.s=selector1 header.b=O1HCBgIp;\n\tdkim-atps=neutral",
            "davemloft.net; dkim=none (message not signed)\n header.d=none;davemloft.net; dmarc=none action=none header.from=mellanox.com;"
        ],
        "Received": [
            "from vger.kernel.org (vger.kernel.org [23.128.96.18])\n\tby ozlabs.org (Postfix) with ESMTP id 49TPg64MZkz9sRY\n\tfor <patchwork-incoming-netdev@ozlabs.org>;\n Sat, 23 May 2020 10:41:22 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n        id S2387476AbgEWAlU (ORCPT\n        <rfc822;patchwork-incoming-netdev@ozlabs.org>);\n        Fri, 22 May 2020 20:41:20 -0400",
            "from mail-eopbgr70075.outbound.protection.outlook.com\n ([40.107.7.75]:1415\n        \"EHLO EUR04-HE1-obe.outbound.protection.outlook.com\"\n        rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP\n        id S2387463AbgEWAlT (ORCPT <rfc822;netdev@vger.kernel.org>);\n        Fri, 22 May 2020 20:41:19 -0400",
            "from VI1PR05MB5102.eurprd05.prod.outlook.com (2603:10a6:803:5e::23)\n by VI1PR05MB5391.eurprd05.prod.outlook.com (2603:10a6:803:95::25) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.24; Sat, 23 May\n 2020 00:41:11 +0000",
            "from VI1PR05MB5102.eurprd05.prod.outlook.com\n ([fe80::2405:4594:97a:13c]) by VI1PR05MB5102.eurprd05.prod.outlook.com\n ([fe80::2405:4594:97a:13c%2]) with mapi id 15.20.3021.026; Sat, 23 May 2020\n 00:41:11 +0000",
            "from smtp.office365.com (73.15.39.150) by\n BYAPR08CA0042.namprd08.prod.outlook.com (2603:10b6:a03:117::19) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3021.23 via Frontend\n Transport; Sat, 23 May 2020 00:41:09 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=b0yAVADK1Wp+aGXQ1UxU2r7fodNJP6mTQE0/gYjZgN/IiOtpGQ59oUJIt9Igdfwb0rcbti2ZFgYP8C36EB64zQmPVC8b5KDny0IuY1yHCrn0SjZAlsquYMbytnJY/fOwy3i6Jxtcdtuy7MJU9IGbg2kGZZvMkGkDKXykHbkhQps7HJbBstjEg/eFnhHgQRNYyaKSTwTYCvGP/NIRCtHVN4TD038Q+jJUOQnJzSIG8reQwIPZK7HtUcpYN0mEiJBOBtm/ezutY8YjWCEQLDFZZJZAPISPKygc15S1yjrtJVqIAV5TyzQ3m5HgLFS1OJvlCfmwxEstSXd71h/pKR6Lyg==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=BdvkKk9xpFGKACiRHmE+HesCTkYg9qyFiVwssAvVy3U=;\n b=WbO2pZSlI6ez5WvHmKi1/IWiGtsFCKxH56eCgVFxJWJFcxbA9KY7V0m0uaaPhNGRwPBxneFjQ6mdkzLLdAUxEKhsymImMDblpmeIZFXUZpMsV2vhMKCE/evjjuvb/Qb5eNXjmAsm5yjEX46B58DMr3ZIVW9Q4qXMamo3nhHEQM2rLZdkgMEWOQIHKwiSdtOfy/hlV3K7dOz5k///TtVgMkXiWEsxEyUUbl9OL23fE3jEfH2SKkMQ4vev2bAVfmLqXHW9I5STCOy+JHyrqEgt1lkAxJfC2Lo3Wbl/x3Aq1eFeck2tK+T9XaeoH/UAG+LiLLUgLJ9Q9fxRLzpjK2Jpag==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=mellanox.com; dmarc=pass action=none header.from=mellanox.com;\n dkim=pass header.d=mellanox.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=BdvkKk9xpFGKACiRHmE+HesCTkYg9qyFiVwssAvVy3U=;\n b=O1HCBgIpoEJDqEiFqVPF+jYqugl/qLDQ6Lj1JwCzCyrxaYEO2Tzfv0n/C+3jaMzgpB5pNN5MmXocmnLpv0cyjPlFWa0kQyRsGcLqp3Dze+pdMOYMzBCcTbLiNUXHLQg683TzgsB/gaSPI24L8E40R27IWaXcVuobpompe+m/olM=",
        "From": "Saeed Mahameed <saeedm@mellanox.com>",
        "To": "\"David S. Miller\" <davem@davemloft.net>, kuba@kernel.org",
        "Cc": "netdev@vger.kernel.org, Eran Ben Elisha <eranbe@mellanox.com>,\n        Moshe Shemesh <moshe@mellanox.com>,\n        Saeed Mahameed <saeedm@mellanox.com>",
        "Subject": "[net 02/13] net/mlx5: Fix a race when moving command interface to\n events mode",
        "Date": "Fri, 22 May 2020 17:40:38 -0700",
        "Message-Id": "<20200523004049.34832-3-saeedm@mellanox.com>",
        "X-Mailer": [
            "git-send-email 2.25.4",
            "git-send-email 2.25.4"
        ],
        "In-Reply-To": "<20200523004049.34832-1-saeedm@mellanox.com>",
        "References": "<20200523004049.34832-1-saeedm@mellanox.com>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "BYAPR08CA0042.namprd08.prod.outlook.com\n (2603:10b6:a03:117::19) To VI1PR05MB5102.eurprd05.prod.outlook.com\n (2603:10a6:803:5e::23)",
        "MIME-Version": "1.0",
        "X-MS-Exchange-MessageSentRepresentingType": "1",
        "X-Originating-IP": "[73.15.39.150]",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-HT": "Tenant",
        "X-MS-Office365-Filtering-Correlation-Id": "a9f1c7c0-da9d-4490-a3f5-08d7feb1fd62",
        "X-MS-TrafficTypeDiagnostic": "VI1PR05MB5391:",
        "X-MS-Exchange-Transport-Forked": "True",
        "X-Microsoft-Antispam-PRVS": "\n <VI1PR05MB53911E8A3F5B86DD4B71E407BEB50@VI1PR05MB5391.eurprd05.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:8882;",
        "X-Forefront-PRVS": "0412A98A59",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n SiQXPtHeVbHrC5QqiaD+c7prA85Gsu9hSLCeQ88guavJPLylh1/ZpC3acMV/mjc8im5TqkuR6PiHKO4viggvF1sRUbfkb8jVhS098TUipslKYNDzM10m54aJ1ZUGoIOtVXCAceKdMhOVPQnuv9NzJRVdU0Kivr+RRgePx4orDQXd2DzL/HhZs4O61pGAZmi+8iLD6v7kPNgSFeAY+/1mB5LYDX2Nxj/wQ3X+i4dEJ0/4WEEBEibaaqkqpCdrIC3CVme4jyKI3nYISbeHHN5Otpxcz535KZ5VxOJtHGX9SrpQJFyGOC2+HRi7FI875i7VN5wBUJu39pbAnQAg1x3/k8sKoC32wFvSEnkGgQv90XNVR/js8Jg6QuKQF/8uzoSd",
        "X-Forefront-Antispam-Report": "\n CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:VI1PR05MB5102.eurprd05.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(346002)(376002)(366004)(396003)(39860400002)(136003)(1076003)(8676002)(2616005)(956004)(4326008)(52116002)(186003)(26005)(16526019)(478600001)(6666004)(86362001)(6506007)(6512007)(107886003)(36756003)(316002)(5660300002)(8936002)(6486002)(66946007)(54906003)(66476007)(2906002)(66556008)(54420400002);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData": "\n RVScYtgnj50jvUTqllUScRY/ICQ/9fBM+FWQq3FnZ3ThrrgXlUCLl0J5IV/FRP1Kv8DkNTuFHPbfDvxBqN6YwOTvj9DTJLQ/7AmbU4+A8jAI8bH+Q7KiBGKvFbVm1c4C1fl7tgEkPHxGSDjClEv3eHnuIZ4JlvQN8HH6DUMyRp4QisbfpgmV+q/NkOGaWA0SoqDLFIbcdZkjPGgsdS3kCHQ9wG1Js49mCrC1z3okMDdA53y05YWMH06k5VoKn2bu1CJMtFuMlheA2ij5FtCEUxfH75znH/0DXzVcaB+8tN0ax81KOHcKrVoY3jNYeHVWUQcpughNTO4iu8l62LfZBSQEWk0p6zSZqy8d2UDsZfCcb/qFT1rXQy9nM/yFjRIgRxWEdzZWT6+/scNVERZ89A6Z5XJE6khMsbtxhrK33L4DsrGGiUrYxhW5KoCSAPIIl0NTyArnVi+PlJcMmdhVvDLVOrGuWkQxjHYgafcqC3k=",
        "X-OriginatorOrg": "Mellanox.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n a9f1c7c0-da9d-4490-a3f5-08d7feb1fd62",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "23 May 2020 00:41:11.1890\n (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "a652971c-7d2e-4d9b-a6a4-d149256f461b",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n jiS6zxX/SjPYK1grzdk19lse35a23OurTOpHq9qmtiGn8k/S9M32490PkYaJtEPs4HQTkatBeNe6zIyHglemGw==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "VI1PR05MB5391",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: Eran Ben Elisha <eranbe@mellanox.com>\n\nAfter driver creates (via FW command) an EQ for commands, the driver will\nbe informed on new commands completion by EQE. However, due to a race in\ndriver's internal command mode metadata update, some new commands will\nstill be miss-handled by driver as if we are in polling mode. Such commands\ncan get two non forced completion, leading to already freed command entry\naccess.\n\nCREATE_EQ command, that maps EQ to the command queue must be posted to the\ncommand queue while it is empty and no other command should be posted.\n\nAdd SW mechanism that once the CREATE_EQ command is about to be executed,\nall other commands will return error without being sent to the FW. Allow\nsending other commands only after successfully changing the driver's\ninternal command mode metadata.\nWe can safely return error to all other commands while creating the command\nEQ, as all other commands might be sent from the user/application during\ndriver load. Application can rerun them later after driver's load was\nfinished.\n\nFixes: e126ba97dba9 (\"mlx5: Add driver for Mellanox Connect-IB adapters\")\nSigned-off-by: Eran Ben Elisha <eranbe@mellanox.com>\nSigned-off-by: Moshe Shemesh <moshe@mellanox.com>\nSigned-off-by: Saeed Mahameed <saeedm@mellanox.com>\n---\n drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 35 ++++++++++++++++---\n drivers/net/ethernet/mellanox/mlx5/core/eq.c  |  3 ++\n include/linux/mlx5/driver.h                   |  6 ++++\n 3 files changed, 40 insertions(+), 4 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c\nindex d695b75bc0af..2f3cafdc3b1f 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/cmd.c\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/cmd.c\n@@ -848,6 +848,14 @@ static void free_msg(struct mlx5_core_dev *dev, struct mlx5_cmd_msg *msg);\n static void mlx5_free_cmd_msg(struct mlx5_core_dev *dev,\n \t\t\t      struct mlx5_cmd_msg *msg);\n \n+static bool opcode_allowed(struct mlx5_cmd *cmd, u16 opcode)\n+{\n+\tif (cmd->allowed_opcode == CMD_ALLOWED_OPCODE_ALL)\n+\t\treturn true;\n+\n+\treturn cmd->allowed_opcode == opcode;\n+}\n+\n static void cmd_work_handler(struct work_struct *work)\n {\n \tstruct mlx5_cmd_work_ent *ent = container_of(work, struct mlx5_cmd_work_ent, work);\n@@ -914,7 +922,8 @@ static void cmd_work_handler(struct work_struct *work)\n \n \t/* Skip sending command to fw if internal error */\n \tif (pci_channel_offline(dev->pdev) ||\n-\t    dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {\n+\t    dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR ||\n+\t    !opcode_allowed(&dev->cmd, ent->op)) {\n \t\tu8 status = 0;\n \t\tu32 drv_synd;\n \n@@ -1405,6 +1414,22 @@ static void create_debugfs_files(struct mlx5_core_dev *dev)\n \tmlx5_cmdif_debugfs_init(dev);\n }\n \n+void mlx5_cmd_allowed_opcode(struct mlx5_core_dev *dev, u16 opcode)\n+{\n+\tstruct mlx5_cmd *cmd = &dev->cmd;\n+\tint i;\n+\n+\tfor (i = 0; i < cmd->max_reg_cmds; i++)\n+\t\tdown(&cmd->sem);\n+\tdown(&cmd->pages_sem);\n+\n+\tcmd->allowed_opcode = opcode;\n+\n+\tup(&cmd->pages_sem);\n+\tfor (i = 0; i < cmd->max_reg_cmds; i++)\n+\t\tup(&cmd->sem);\n+}\n+\n static void mlx5_cmd_change_mod(struct mlx5_core_dev *dev, int mode)\n {\n \tstruct mlx5_cmd *cmd = &dev->cmd;\n@@ -1681,12 +1706,13 @@ static int cmd_exec(struct mlx5_core_dev *dev, void *in, int in_size, void *out,\n \tint err;\n \tu8 status = 0;\n \tu32 drv_synd;\n+\tu16 opcode;\n \tu8 token;\n \n+\topcode = MLX5_GET(mbox_in, in, opcode);\n \tif (pci_channel_offline(dev->pdev) ||\n-\t    dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {\n-\t\tu16 opcode = MLX5_GET(mbox_in, in, opcode);\n-\n+\t    dev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR ||\n+\t    !opcode_allowed(&dev->cmd, opcode)) {\n \t\terr = mlx5_internal_err_ret_value(dev, opcode, &drv_synd, &status);\n \t\tMLX5_SET(mbox_out, out, status, status);\n \t\tMLX5_SET(mbox_out, out, syndrome, drv_synd);\n@@ -1988,6 +2014,7 @@ int mlx5_cmd_init(struct mlx5_core_dev *dev)\n \tmlx5_core_dbg(dev, \"descriptor at dma 0x%llx\\n\", (unsigned long long)(cmd->dma));\n \n \tcmd->mode = CMD_MODE_POLLING;\n+\tcmd->allowed_opcode = CMD_ALLOWED_OPCODE_ALL;\n \n \tcreate_msg_cache(dev);\n \ndiff --git a/drivers/net/ethernet/mellanox/mlx5/core/eq.c b/drivers/net/ethernet/mellanox/mlx5/core/eq.c\nindex cccea3a8eddd..ce6c621af043 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/eq.c\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/eq.c\n@@ -611,11 +611,13 @@ static int create_async_eqs(struct mlx5_core_dev *dev)\n \t\t.nent = MLX5_NUM_CMD_EQE,\n \t\t.mask[0] = 1ull << MLX5_EVENT_TYPE_CMD,\n \t};\n+\tmlx5_cmd_allowed_opcode(dev, MLX5_CMD_OP_CREATE_EQ);\n \terr = setup_async_eq(dev, &table->cmd_eq, &param, \"cmd\");\n \tif (err)\n \t\tgoto err1;\n \n \tmlx5_cmd_use_events(dev);\n+\tmlx5_cmd_allowed_opcode(dev, CMD_ALLOWED_OPCODE_ALL);\n \n \tparam = (struct mlx5_eq_param) {\n \t\t.irq_index = 0,\n@@ -645,6 +647,7 @@ static int create_async_eqs(struct mlx5_core_dev *dev)\n \tmlx5_cmd_use_polling(dev);\n \tcleanup_async_eq(dev, &table->cmd_eq, \"cmd\");\n err1:\n+\tmlx5_cmd_allowed_opcode(dev, CMD_ALLOWED_OPCODE_ALL);\n \tmlx5_eq_notifier_unregister(dev, &table->cq_err_nb);\n \treturn err;\n }\ndiff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h\nindex 9b1f29f26c27..c03778c75dfa 100644\n--- a/include/linux/mlx5/driver.h\n+++ b/include/linux/mlx5/driver.h\n@@ -284,6 +284,7 @@ struct mlx5_cmd {\n \tstruct semaphore sem;\n \tstruct semaphore pages_sem;\n \tint\tmode;\n+\tu16     allowed_opcode;\n \tstruct mlx5_cmd_work_ent *ent_arr[MLX5_MAX_COMMANDS];\n \tstruct dma_pool *pool;\n \tstruct mlx5_cmd_debug dbg;\n@@ -875,10 +876,15 @@ mlx5_frag_buf_get_idx_last_contig_stride(struct mlx5_frag_buf_ctrl *fbc, u32 ix)\n \treturn min_t(u32, last_frag_stride_idx - fbc->strides_offset, fbc->sz_m1);\n }\n \n+enum {\n+\tCMD_ALLOWED_OPCODE_ALL,\n+};\n+\n int mlx5_cmd_init(struct mlx5_core_dev *dev);\n void mlx5_cmd_cleanup(struct mlx5_core_dev *dev);\n void mlx5_cmd_use_events(struct mlx5_core_dev *dev);\n void mlx5_cmd_use_polling(struct mlx5_core_dev *dev);\n+void mlx5_cmd_allowed_opcode(struct mlx5_core_dev *dev, u16 opcode);\n \n struct mlx5_async_ctx {\n \tstruct mlx5_core_dev *dev;\n",
    "prefixes": [
        "net",
        "02/13"
    ]
}