Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216677/?format=api
{ "id": 2216677, "url": "http://patchwork.ozlabs.org/api/patches/2216677/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260327035422.4020455-7-den@valinux.co.jp/", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/projects/28/?format=api", "name": "Linux PCI development", "link_name": "linux-pci", "list_id": "linux-pci.vger.kernel.org", "list_email": "linux-pci@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260327035422.4020455-7-den@valinux.co.jp>", "list_archive_url": null, "date": "2026-03-27T03:54:21", "name": "[v12,6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "83c22ef77e4fcbda54bb577520358b6dc3449903", "submitter": { "id": 91573, "url": "http://patchwork.ozlabs.org/api/people/91573/?format=api", "name": "Koichiro Den", "email": "den@valinux.co.jp" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260327035422.4020455-7-den@valinux.co.jp/mbox/", "series": [ { "id": 497685, "url": "http://patchwork.ozlabs.org/api/series/497685/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=497685", "date": "2026-03-27T03:54:17", "name": "PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback", "version": 12, "mbox": "http://patchwork.ozlabs.org/series/497685/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2216677/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216677/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-pci+bounces-51250-incoming=patchwork.ozlabs.org@vger.kernel.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "linux-pci@vger.kernel.org" ], "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.a=rsa-sha256 header.s=selector1 header.b=WeNsb998;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-51250-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)", "smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=\"WeNsb998\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.125.142", "smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp", "smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=valinux.co.jp", "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=valinux.co.jp;" ], "Received": [ "from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fhn0w6vRjz1yFp\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 14:57:52 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 6F1D530ED92A\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 27 Mar 2026 03:54:44 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 8EB18376BC1;\n\tFri, 27 Mar 2026 03:54:41 +0000 (UTC)", "from TYVP286CU001.outbound.protection.outlook.com\n (mail-japaneastazon11021142.outbound.protection.outlook.com [52.101.125.142])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B6573750B9;\n\tFri, 27 Mar 2026 03:54:39 +0000 (UTC)", "from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by TY7P286MB7090.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:323::16) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9745.20; Fri, 27 Mar\n 2026 03:54:30 +0000", "from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM\n ([fe80::2305:327c:28ec:9b32]) by TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM\n ([fe80::2305:327c:28ec:9b32%5]) with mapi id 15.20.9745.019; Fri, 27 Mar 2026\n 03:54:30 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1774583681; cv=fail;\n b=DE/rpALxAT40kvShtEslPUmH29TcPAwsYA9o2+pDVCNW1Z5T+tLK7L2GezwAESqXBV2KLn8U8q635jm9q9vAVk86kSs+FENMhRhdyJjwwsVPPobQaRJ0x6+SZ4CbjRc7LSausKhM4UGGNeHi7o2gxeHbuLY0GxBlfYuxbIKYl6o=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=TpwOlkzjv96HoLZEjVN8euHVL7gFcSdzAIOKxFmZtRD/ZPJCSmXmeBdahTdrwp9VBw2C7Z/zy+vuMG83UP+CcmSeqZ0J8DYQ/G7ItC5zbMuCOUF61pN05xfZ9JC3GeYVSAAWaIKzUFD+y1d0WtiQpTaTF0YS/iHGWowZdNRcvakz+3EBF48JIYb0TYdv5NWYOp6g0cFgfs5mSPJMJb+LBLO5ImVQzKbcbCcLzYT8Z68hT+/fvcl8HFc77dQl6ZIY3aAFghOWaQL2sGA3y+4OdJbr9PIrzNrslpywJ8UG31HSn5shpTMT4DMwnoxRnbozWnMUkqZcYs2A8Ij+JuWMcg==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1774583681; c=relaxed/simple;\n\tbh=dlVnbhX8PxGnedfMNDpDYZosmRi6VsKB2pbJC0JUfqo=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=CHxl+LQAILHRNVQGvTUtzT9E65Nf1bzy1s5pP14hAbyYG2Rb9EUvvanwyHDh1v16cV7ezGF+7wxwwr8g32cR3ldGLkaZfeADsW0QHSHQfdaadfmddVt7prz1AXL2JIXra9Syb8zoQERp9Cq2zOXaPaywOLqxEpMe+ic7bFGmjEA=", "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=Zdv0PXxOcHbw+RGn7yNzlRw8lKljXPhJ7YMgz3q8sHU=;\n b=ltOfKSVlKAMBZCEVglIgrEHhSEyE7AQK4xjWOJ1wl+WjTsRT3Gz4QJH/h64t02dem+x5Q7MiWPm+qjlELXZ2qHJitLL4MV/sh0cdKvLXFz3hIkzMn/H6Cr3SLzYaHvmnZOXuS0CYO8CRafMvArP7UlMD1W/umQb44BdIQXlw7JorYXoaW1Qtwnphw/gEGfa+K+AIW674mInla4ukFAIjsBVHiO5JyN3XsCTATIl67Ojkaga0SEuaetBxuioMSiAbZL8iHArV+wXwz5TFgl2otY9UXpvdrR+DLwqbzL9wxkEY8vd6TJJk7dM0XtbiiVTxegqEUOWtXWVcp6mVWiYV4Q==" ], "ARC-Authentication-Results": [ "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=valinux.co.jp;\n spf=pass smtp.mailfrom=valinux.co.jp;\n dkim=pass (1024-bit key) header.d=valinux.co.jp header.i=@valinux.co.jp\n header.b=WeNsb998; arc=fail smtp.client-ip=52.101.125.142", "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=valinux.co.jp; dmarc=pass action=none\n header.from=valinux.co.jp; dkim=pass header.d=valinux.co.jp; arc=none" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=valinux.co.jp;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=Zdv0PXxOcHbw+RGn7yNzlRw8lKljXPhJ7YMgz3q8sHU=;\n b=WeNsb998yTnrzjNeml2untSnFs2LK/gfgwGvGwPRMf663KKiC5Im6YFnQjwdwFIfOUgM3mEFMj3yHD8kdon/Oc7fcMtT/H7uSvzMrtkIHvM8tCPblvyfA2uTbs91oW2dH9+7dTC4loN+kcIaf07F527Sql5nvMFOo8czD/CkvYg=", "From": "Koichiro Den <den@valinux.co.jp>", "To": "Jingoo Han <jingoohan1@gmail.com>,\n Manivannan Sadhasivam <mani@kernel.org>,\n Lorenzo Pieralisi <lpieralisi@kernel.org>, =?utf-8?q?Krzysztof_Wilczy=C5=84?=\n\t=?utf-8?q?ski?= <kwilczynski@kernel.org>, Rob Herring <robh@kernel.org>,\n Bjorn Helgaas <bhelgaas@google.com>,\n Kishon Vijay Abraham I <kishon@kernel.org>, Jon Mason <jdmason@kudzu.us>,\n Dave Jiang <dave.jiang@intel.com>, Allen Hubbe <allenbh@gmail.com>,\n Niklas Cassel <cassel@kernel.org>, Frank Li <Frank.Li@nxp.com>,\n Bhanu Seshu Kumar Valluri <bhanuseshukumar@gmail.com>,\n Marco Crivellari <marco.crivellari@suse.com>,\n Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>,\n Manikanta Maddireddy <mmaddireddy@nvidia.com>", "Cc": "linux-pci@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tntb@lists.linux.dev", "Subject": "[PATCH v12 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed\n doorbell targets", "Date": "Fri, 27 Mar 2026 12:54:21 +0900", "Message-ID": "<20260327035422.4020455-7-den@valinux.co.jp>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260327035422.4020455-1-den@valinux.co.jp>", "References": "<20260327035422.4020455-1-den@valinux.co.jp>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "TY4PR01CA0004.jpnprd01.prod.outlook.com\n (2603:1096:405:26e::16) To TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:405:38f::10)", "Precedence": "bulk", "X-Mailing-List": "linux-pci@vger.kernel.org", "List-Id": "<linux-pci.vger.kernel.org>", "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>", "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>", "MIME-Version": "1.0", "X-MS-PublicTrafficType": "Email", "X-MS-TrafficTypeDiagnostic": "TY7P286MB7722:EE_|TY7P286MB7090:EE_", "X-MS-Office365-Filtering-Correlation-Id": "f876d0cc-d193-492b-ea0f-08de8bb48c6a", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|366016|1800799024|10070799003|376014|7416014|921020|18002099003|22082099003|56012099003;", "X-Microsoft-Antispam-Message-Info": "\n\tblaK+0KA6eA8kGOhDyMB6XZWmcFmo0trj04eq2MuhZ4ZQ3e7ftQgRU51vvyyI0IgtJAccYlmOecJZQxVq6itd4Q+pvyCJmHRVo42DrL6DV6jKExOxh8g/PjBlnsyeZ0ohlAFsGxdr968lFaKR5Swi+DoHukg8t6U4aK/gqaS8gmepuVXXP8IudZwBD9AYN+GS3Gl71ZUJ0x6zN3DDKAZic2My4XkrrSUVtFHP23eKVSLvoqUFm6p5WxRUZTJoGlZgxTrPQ7Y9ZDeaNHXwNDWAl/f5ZTFrCDWvo26vHDmOO0PaoSGLKXXW5VP0QNLBM8F0FTYHslMh2vMTDnQoKSP8K/HJ4+w/X6ILnp2QTaVxiMqTuCh0PmXQ4ekEY/opAVsKpG7aWHHtE6ukpSHYe8uTwRUDMJA+vr6RAMyKjnhFDZzhIx/Pf3cCpAKtgmYQ/kAeyBo1MsRs3iABrtd621tTVqlcUet+ERwbyRFzG24pPvbhrQJb5ZyOEzziAUqiLPFw6Zrp/PlSViR4lwLDnNOd8SK+Ol/DeK0GcNMxKoGvelVT4jq1aNE87b9+JJsCA0UVkcIq7moAC7vEJYOUiIt/5i6/bOg0NS31T4ODcpIl4mkyUzUbqU5GzCK71+iqhmfi4414H4xM9FmCPO8CWWRYjVQr/oj+Md5xiANsOIkBEjxU0uPgS6GhcnmqjX+AnAILUJNttF4TJ3s8cPTD6jLM4kVGeai5FFsct68USH5u7cfPMaENF4UYXio4uAEuXQ4EKr0IsHyGLjJ2RRScqO7OQ==", "X-Forefront-Antispam-Report": "\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(10070799003)(376014)(7416014)(921020)(18002099003)(22082099003)(56012099003);DIR:OUT;SFP:1102;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n kT/QfxALEZSgsiXrAhv9pZfAbUHTZTi7DgFjXAp3SSLwpcN7B/fFdCvZpDBnpFBtELCS0Gsq2SUYA6bETKARhJGwxribPVMygJDgo3Zz1npjlvt/hX8x0UTo5Eucs+OPQeyshqLqPuFpG2h4De64qFnk+KZys4iBdQkJDTeH9ZWMHvlMbUFf2gZPlOv4OBlh3PHC94ESTc1UvC4yw+6/8fazozDWLAdlLfvIwZtmNngl+O/JnFt3AdVnDEPx6V8sAi+QTSianjC26b8kVH4QO1t1aWrY+cdRwPs8EjDJyoccloEm7yIsz70PNxSjX5m1oRSv8apZxaLSN1jljPV+VtNwUJMVJO/lIEt6D7Rdb/ZR/9Nk68VVdwZe6xhPPO5et55RZoFf9vfz6SVwFvyf71eFOxF5gbObUfL3X2xd/SLr7LVKzCyHn9iZ38nYbuCn3meiSvOSuKi+EktqJPqbKVUE1RMDz9ZtMasmxRzhOXnt8tuF72pWdKFk06NNWz4eyI/XnQm15JNF3zBYa+GFuNR4LLvtC28+bi4SktIXWW4KIapzLROKQM/SMGOG4DGdgl1Fl7ETd4C2IgTZ6CdGwFTLTuyF1NkO95OQy0gQm0UD3OejOfcPPZgu1L31WPioWFiC2740ysnOBLMYr2GKqenJwwvOcq/A0lL4hAFI8JrvOuSFXOmnu98PwJ50DrrNp7okLRPRGJEmFXNy0pgUlhCgDRIhJxHOBKDPv0efAfGtyfQDjOwbBkYQI0cjcSiJM8603NPIWQG1qmPVJ2rAWBqYFkUusRBeoQjCS4CQ+e4GKPGj2GCz8OHmdEZ+tWTEX2Kgr1XZYQthucqrc9AKdpeauTdIjSr+9JaJertCgf9NKPPnnt3L10PYDBWMZyo51T7iqFy3YVxeJGkHFqPwr/V52J+n/wMfhdyANp8smn05WROTGLkuOQGQoTjzSJX+ZCHk0QGh7WO8RgBDwb9n/NGKAIcZYWixfh8vAqIFRYb2tlQ7KTIkbOXeG1cJ3eS3zm8rjsPpQu3oMWonfkC1MPobAwDGv6nQ5L0rLCI53piEtbtofYOqKiTa0WtrISkrQgjY5tAwF75WuO5MyhL8+G+hRLvFSsnSPHw5IVgx0DQ4wAhXzh2+d8UofJut9NNq3sGM4lNljIq2eKAQuhVdND02/hn1f+xohuoQutiIOoV/TBQMgz4g1ZkNioKDbnADbL8QiqXpMDHewUTcWLSwviRBw+4Kwt+hYTNDYmz1tm53UlZl3O5S/5pMFxyd1MNsmlKcZmJz2uZ4UxOcB3dqp9c7bf63berZGktXdA4aQsnTxXIYW3D6doHME6eKT+A3EYbEOBvWPybrnTXYOBorXzWZm+gIOris59VTMUIgV8EsNNl97b+E0L7rzYZ7b1WAjvSg5VTzjZijOjnk51+ilMTFZRsTsQzMmQsT9Gw2j5AxmCCGjE33ncrzUWgH59au7L49uHiM0RFkpbZrSnMHUgpwLzXR3jhf+N2Rx9u8ZDY/ZifczuVHl+qJpNuYfGah8Rqaxu0mqkLq8MRCszs9nG37rXp+k8dDLLn1t8emfGYAHT0taO9A0SFYSDr/m34ztylPUuim3e2KXBlu3bggxQKtq/epMfPIsWmTPD3VLFwFN/W1dASHEPzqB6NGcX/anMdxa5vh4hK4zdb2b6Vec6UP9kNfTgK+iYmyeH3Et+uuxkHD4eoYbWgIxALIWC1SZwsyoUt2Sl6yi2vD3U/dflFWyoGISRjcpcLnZ536fA8GsmNpw0S9Te9ZheEBHvmy", "X-OriginatorOrg": "valinux.co.jp", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n f876d0cc-d193-492b-ea0f-08de8bb48c6a", "X-MS-Exchange-CrossTenant-AuthSource": "TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "27 Mar 2026 03:54:29.9906\n (UTC)", "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted", "X-MS-Exchange-CrossTenant-Id": "7a57bee8-f73d-4c5f-a4f7-d72c91c8c111", "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED", "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n v2/8Kjd3jH6vUcazVqMFzvPXD8FLUZ5OkdQcRWFxsIz+OjHo27jEpO5HTqShphANZf9jBCh99Gh7UWPqBAfN1w==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "TY7P286MB7090" }, "content": "pci-epf-test advertises the doorbell target to the RC as a BAR number\nand an offset, and the RC rings the doorbell with a single DWORD MMIO\nwrite.\n\nSome doorbell backends may report that the doorbell target is already\nexposed via a platform-owned fixed BAR (db_msg[0].bar/offset). In that\ncase, reuse the pre-exposed window and do not reprogram the BAR with\npci_epc_set_bar().\n\nAlso honor db_msg[0].irq_flags when requesting the doorbell IRQ, and\nonly restore the original BAR mapping on disable if pci-epf-test\nprogrammed it.\n\nTested-by: Niklas Cassel <cassel@kernel.org>\nReviewed-by: Frank Li <Frank.Li@nxp.com>\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\n drivers/pci/endpoint/functions/pci-epf-test.c | 84 +++++++++++++------\n 1 file changed, 57 insertions(+), 27 deletions(-)", "diff": "diff --git a/drivers/pci/endpoint/functions/pci-epf-test.c b/drivers/pci/endpoint/functions/pci-epf-test.c\nindex 14e61ebe1f11..b6c865b0883d 100644\n--- a/drivers/pci/endpoint/functions/pci-epf-test.c\n+++ b/drivers/pci/endpoint/functions/pci-epf-test.c\n@@ -93,6 +93,7 @@ struct pci_epf_test {\n \tbool\t\t\tdma_private;\n \tconst struct pci_epc_features *epc_features;\n \tstruct pci_epf_bar\tdb_bar;\n+\tbool\t\t\tdb_bar_programmed;\n \tsize_t\t\t\tbar_size[PCI_STD_NUM_BARS];\n };\n \n@@ -732,7 +733,9 @@ static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test,\n {\n \tu32 status = le32_to_cpu(reg->status);\n \tstruct pci_epf *epf = epf_test->epf;\n+\tstruct pci_epf_doorbell_msg *db;\n \tstruct pci_epc *epc = epf->epc;\n+\tunsigned long irq_flags;\n \tstruct msi_msg *msg;\n \tenum pci_barno bar;\n \tsize_t offset;\n@@ -742,13 +745,28 @@ static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test,\n \tif (ret)\n \t\tgoto set_status_err;\n \n-\tmsg = &epf->db_msg[0].msg;\n-\tbar = pci_epc_get_next_free_bar(epf_test->epc_features, epf_test->test_reg_bar + 1);\n-\tif (bar < BAR_0)\n-\t\tgoto err_doorbell_cleanup;\n+\tdb = &epf->db_msg[0];\n+\tmsg = &db->msg;\n+\tepf_test->db_bar_programmed = false;\n+\n+\tif (db->bar != NO_BAR) {\n+\t\t/*\n+\t\t * The doorbell target is already exposed via a platform-owned\n+\t\t * fixed BAR\n+\t\t */\n+\t\tbar = db->bar;\n+\t\toffset = db->offset;\n+\t} else {\n+\t\tbar = pci_epc_get_next_free_bar(epf_test->epc_features,\n+\t\t\t\t\t\tepf_test->test_reg_bar + 1);\n+\t\tif (bar < BAR_0)\n+\t\t\tgoto err_doorbell_cleanup;\n+\t}\n+\n+\tirq_flags = epf->db_msg[0].irq_flags | IRQF_ONESHOT;\n \n \tret = request_threaded_irq(epf->db_msg[0].virq, NULL,\n-\t\t\t\t pci_epf_test_doorbell_handler, IRQF_ONESHOT,\n+\t\t\t\t pci_epf_test_doorbell_handler, irq_flags,\n \t\t\t\t \"pci-ep-test-doorbell\", epf_test);\n \tif (ret) {\n \t\tdev_err(&epf->dev,\n@@ -760,22 +778,30 @@ static void pci_epf_test_enable_doorbell(struct pci_epf_test *epf_test,\n \treg->doorbell_data = cpu_to_le32(msg->data);\n \treg->doorbell_bar = cpu_to_le32(bar);\n \n-\tmsg = &epf->db_msg[0].msg;\n-\tret = pci_epf_align_inbound_addr(epf, bar, ((u64)msg->address_hi << 32) | msg->address_lo,\n-\t\t\t\t\t &epf_test->db_bar.phys_addr, &offset);\n+\tif (db->bar == NO_BAR) {\n+\t\tret = pci_epf_align_inbound_addr(epf, bar,\n+\t\t\t\t\t\t ((u64)msg->address_hi << 32) |\n+\t\t\t\t\t\t msg->address_lo,\n+\t\t\t\t\t\t &epf_test->db_bar.phys_addr,\n+\t\t\t\t\t\t &offset);\n \n-\tif (ret)\n-\t\tgoto err_free_irq;\n+\t\tif (ret)\n+\t\t\tgoto err_free_irq;\n+\t}\n \n \treg->doorbell_offset = cpu_to_le32(offset);\n \n-\tepf_test->db_bar.barno = bar;\n-\tepf_test->db_bar.size = epf->bar[bar].size;\n-\tepf_test->db_bar.flags = epf->bar[bar].flags;\n+\tif (db->bar == NO_BAR) {\n+\t\tepf_test->db_bar.barno = bar;\n+\t\tepf_test->db_bar.size = epf->bar[bar].size;\n+\t\tepf_test->db_bar.flags = epf->bar[bar].flags;\n \n-\tret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_bar);\n-\tif (ret)\n-\t\tgoto err_free_irq;\n+\t\tret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf_test->db_bar);\n+\t\tif (ret)\n+\t\t\tgoto err_free_irq;\n+\n+\t\tepf_test->db_bar_programmed = true;\n+\t}\n \n \tstatus |= STATUS_DOORBELL_ENABLE_SUCCESS;\n \treg->status = cpu_to_le32(status);\n@@ -805,17 +831,21 @@ static void pci_epf_test_disable_doorbell(struct pci_epf_test *epf_test,\n \tfree_irq(epf->db_msg[0].virq, epf_test);\n \tpci_epf_test_doorbell_cleanup(epf_test);\n \n-\t/*\n-\t * The doorbell feature temporarily overrides the inbound translation\n-\t * to point to the address stored in epf_test->db_bar.phys_addr, i.e.,\n-\t * it calls set_bar() twice without ever calling clear_bar(), as\n-\t * calling clear_bar() would clear the BAR's PCI address assigned by\n-\t * the host. Thus, when disabling the doorbell, restore the inbound\n-\t * translation to point to the memory allocated for the BAR.\n-\t */\n-\tret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]);\n-\tif (ret)\n-\t\tgoto set_status_err;\n+\tif (epf_test->db_bar_programmed) {\n+\t\t/*\n+\t\t * The doorbell feature temporarily overrides the inbound translation\n+\t\t * to point to the address stored in epf_test->db_bar.phys_addr, i.e.,\n+\t\t * it calls set_bar() twice without ever calling clear_bar(), as\n+\t\t * calling clear_bar() would clear the BAR's PCI address assigned by\n+\t\t * the host. Thus, when disabling the doorbell, restore the inbound\n+\t\t * translation to point to the memory allocated for the BAR.\n+\t\t */\n+\t\tret = pci_epc_set_bar(epc, epf->func_no, epf->vfunc_no, &epf->bar[bar]);\n+\t\tif (ret)\n+\t\t\tgoto set_status_err;\n+\n+\t\tepf_test->db_bar_programmed = false;\n+\t}\n \n \tstatus |= STATUS_DOORBELL_DISABLE_SUCCESS;\n \treg->status = cpu_to_le32(status);\n", "prefixes": [ "v12", "6/7" ] }