get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2223142,
    "url": "http://patchwork.ozlabs.org/api/patches/2223142/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260414141514.1341429-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": "<20260414141514.1341429-7-den@valinux.co.jp>",
    "list_archive_url": null,
    "date": "2026-04-14T14:15:13",
    "name": "[v14,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/20260414141514.1341429-7-den@valinux.co.jp/mbox/",
    "series": [
        {
            "id": 499855,
            "url": "http://patchwork.ozlabs.org/api/series/499855/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=499855",
            "date": "2026-04-14T14:15:08",
            "name": "PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback",
            "version": 14,
            "mbox": "http://patchwork.ozlabs.org/series/499855/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2223142/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223142/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-52499-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=ZMmSVWNw;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.232.135.74; helo=sto.lore.kernel.org;\n envelope-from=linux-pci+bounces-52499-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=\"ZMmSVWNw\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.228.133",
            "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 sto.lore.kernel.org (sto.lore.kernel.org [172.232.135.74])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fw5wC4qXyz1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 00:18:03 +1000 (AEST)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id E0E1A3023ECC\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 14:17:18 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id B4A263E9582;\n\tTue, 14 Apr 2026 14:16:39 +0000 (UTC)",
            "from OS0P286CU011.outbound.protection.outlook.com\n (mail-japanwestazon11020133.outbound.protection.outlook.com [52.101.228.133])\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 269F73E92A9;\n\tTue, 14 Apr 2026 14:16:38 +0000 (UTC)",
            "from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by TY3P286MB2529.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:222::14) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Tue, 14 Apr\n 2026 14:16:27 +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.9769.046; Tue, 14 Apr 2026\n 14:16:27 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776176199; cv=fail;\n b=fWpNFe30HpdcqzsUjojjsv1gujhWCMHNKjj1GC/gRezd8S+ONmwJ4amFi+eYnstVeD0r6e+mSBVi5HeWYpLGpdRUJj60UMeBbVJPDM8uPmDUtlR0EnNqMDeZ+54nEy+kgglDhgp9hIKLAE93q1pzWXJ+jG9UovADp9RZHVxGGhg=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=EN351bDlK3+Fg+6F3bXn2pJThgDUb3uuWvFYUAorB9q9UGtEfoDoXeVnXvfo0KvZ/4oOSAZACc1+wz7lf3qwDlUV03GEAiV/6OsyId75RwoajW030xVUcVURhTLTEyfunWoIRos5FrMXNZ8CvLHAjOXGtXU7rvTROMaGvVwc8Dy7h0tQXOcDh79YtmsZbirPlPbBk4eGHXHits2hAUNb99l66e1cBroeK9Lb4HK7bsCDe6QK622jl21NMUfBwvEplaUJediiLGUP437ip4skLW96wuPWNRL4Y4FBusq8aWqnAe63or8PyaRIZ1105Cuahsag0ZGr4gOSx6bjA5atcw=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776176199; c=relaxed/simple;\n\tbh=VifbmuDhePhh4pA5/eVfh05M1bkFT1lnXVlxS+ld4tM=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=pzUKPoLjFitimd8iSVlmcAciFcnLK+88h2OinBSboyQGGaJeor3YYm3Jmp2Yllly7o7AvfpymNapTM2WtjEsCk7UsuwOGBRJNxFaFuAoHAeMW7reZk9ucxhcf4cuha0DW4rd0oGtC7aTyyifj+eTg/YJwFtbIpcVZ8b1WQ120G4=",
            "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=sCJ5Z2AdrnpQvLaiZlI8Zol1cdABaHymgvMXXd2v4fQ=;\n b=fMAJ7bWzpD03SNO9V/NPNMslQvxAhZlHeDx7uDRP/+Dq6jjW+rzqwKEqxiOU52x9pjqHAAxq6woQPYeJwm6D0j2HUdugs2X75jzb8a82/fCC1+XqZarB/BDkv1nM97QJDR+m/laigAe0dWxuzV/0a+WU7T2DrySOOCy/HEQ2aOffahSWGKWg51yC+f6J0xLrmeTyN/bmqTHqIRu6H1lbi5RqaiLqlBGk7HfpQo0a0/HTqsvuHoa+7iDeojB5kjgO3nq7DS5uXWNdQdAVz3ZOahTmP9h9+gth1ZeFQNHIh1erhQAOtkraf3C4psukVgmzmFikVK3zyPz9UbwyyyDkEQ=="
        ],
        "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=ZMmSVWNw; arc=fail smtp.client-ip=52.101.228.133",
            "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=sCJ5Z2AdrnpQvLaiZlI8Zol1cdABaHymgvMXXd2v4fQ=;\n b=ZMmSVWNwsKU3zg/ilsbLTtqdGcjRG7P4HvCk9lzRnI90IF8w0xep1Lckhblqv8nAHE8mKAyQZ4pH3V7sylTxJtouw7Z9E/J/mq82+M2UOYhBgSbPrpe+zBp5icGZv5sYVpshBa6TnBQ+YSWUBIbOfmgdpblGra/ILA3DDJPmpXI=",
        "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 v14 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed\n doorbell targets",
        "Date": "Tue, 14 Apr 2026 23:15:13 +0900",
        "Message-ID": "<20260414141514.1341429-7-den@valinux.co.jp>",
        "X-Mailer": "git-send-email 2.51.0",
        "In-Reply-To": "<20260414141514.1341429-1-den@valinux.co.jp>",
        "References": "<20260414141514.1341429-1-den@valinux.co.jp>",
        "Content-Transfer-Encoding": "8bit",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "TYCP286CA0075.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:31a::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_|TY3P286MB2529:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "c97429c6-ce84-41b6-eb34-08de9a306ac2",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|10070799003|7416014|376014|366016|1800799024|921020|56012099003|22082099003|18002099003;",
        "X-Microsoft-Antispam-Message-Info": "\n\tAEn2yFO5zLQoZw/m7YVBBGOjzILxw8dnFE4ByEsFBMKS9ZrMfuKwfKZghFX58b06HAw1H90JGhVpTGcm4gP+UhxBp9GPYw9rIQBz4daG7xEeIYZyHxChDvZq3lwHayRdufET3bbqH25kDWVyv3QEzhF4WxrFkANvyWVMDjcZApk8ZkkqbORwVGtOFOnzpP1nIVvvbJi99uQflCclOlIzc+5KgYOJmEZu7CQUeRqZ4S3CgyD6FGrzbIDNUTDDrq+czT0lUcK1Xw1P0X/4mtXLve5Yo9jHWa7e622xt8n3O0JD8MEmCe9T2oc0WLSjgkh9Z76CK0sh06zintZMoeG9/WNgRWwYnBrGsExEyXrBV3DSvNAViUueYl5e/ZbS6Njc3LUIu3mZ2BZ7Dmvtfu2+tDBXbBz74yJebZQeIkTDJlS3ttN8/OMjyaXBihrOug3vMEmVKENMtLGBLb5ch3DLB2VaCOL1p6sxGkI+5DPAb2+BvEIUo4PhOqZKSwgMAbNwbyumFHwGQkIUnnhaPi8F2uf1vYJFVtMjLWif0EWCJZXsq7H2mrV75orVPbcahZf+oELU/h8dC2h4XGSsIxI5ieK002v6MtVudNK3p/hTI1m5v3qGlew7kgbiPPFU/sJMjMt9qnxSb13treKIejYxSE4YvcpUhb1TLaSNMnUxp8b+jgIHOeKqhG475s8hRj40BmSGacbd34PV0axingoqsueYEZdm+nHzXVKF1BZejJluLUyf59bGfCJNtu4ev6I/VMHkiwwFJaH3GrNfnQnMIw==",
        "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)(10070799003)(7416014)(376014)(366016)(1800799024)(921020)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n MbCkJnq1WpbO+a0aUu5T64QniwiJYTz+7h6qlwbvUo67EIe9qB2Lc4MUXViRuL507zOq0ew3bYd9Z+kAmIQub4hGaHrMTicUD9egdy1D7cQlDzRSbd+LP5K/ItPLr4txE7xuAi7QmCrqsIpxWYSm8LZOZva3QltXcsD46qiB8dUuA9pfnhdQFmHTuoYq65shGr6Otm/EYrIq3kG3HnUH8H0rneqxw7rfy4xF/kW7Nwa9pw8KvcAeXmldS7k/FGkUpve4k1V2Ya16uoA2sTJELHzgjZtPgZIT2VE+CUmwyYhf88lVRqzKWd5Dt1rBddNHCdn9sqn7Rm79B+smNWefF/g1+jYxWdapM9UuL3NxlPUH6LWoq9x1RnWzmjaLKc0VNaspQ4t+BUVmOSvdpr+aSboejrhj/y06/OugUkDrmUGXLM8iudpEoyW4aEHBypKPAi6Ij2gVxpTvxZGpVdET8W6uKPXcU74+z95XKWazXWlR4FNvpBloxGiUivHNZSvgSQE4hw7dbfmyLVdfTqMqe/HHUai/z7YRff9nINfnLhrcIWM5PQ9JDqLtwGwSCCaCZs8nRPoK08QlW5knByVTdSPkNpkqjTBUBKLJ5wou8eyHP+Xxex7AnqwvnzbxmZgXKqh5cL/kMYq0+UP7PtCbdG3eoTbPvaYGaobhTqDjlAlFfLiy7/9LBAAjIwBPhdSoUMRV9JrEVw/WLgFy7NAuWkpwWfebfqwcNwME+KoOEoV44xF3B2sJw/PwvNcckoywm69xTeD6ERdvbE8wnRldljhMLpb1ryZEWuzGbjx45bBDtPSJm23h5TcBZjI+P8MDbfl8peUNUYY0wwRjJWwQY+k6NM6+wwDmIf5CO7plq0yZc15JtoAdZ6X6pdqkRzknijRmF0CacmVpIWJednVTysbmw4cmgIJ78eiqrl5s93MmElKxZp3sGwIBz8KxRAYcO2fAZeVgAW7aeXif2csfuzwJ8/D/59bPqGxu5x37gXQD39ocXRxyTUGUOBU12YciAznyrS0XGWRJ+WHamF5J5iPqnhRuxU0Lc02u9qDi0NAcUw0I2H4ScjmrXMPks6hymM365ifGN5X/ra444QQZF28L4fsIzpNeR5cjR0/C/T3JzTuWlSdww+a3PMG/4/vvTgm98HXFRDvx/InYUhXOUH9OE9sGVUo+xHxLEboHj5VwSuV+DK1ETumWxrnO7ia3m/ZvCjKPyXA6+S8J1TcIUPcnlapSHd93ReZEKLfVlAl/euE1jrwycg9whSrTzklrV+T66nAqIyV7Uy7pOvQ4ZD1O362ak8gEjllxPxmlb5Up46B75XL6fPQHOfSt1zIuqc4AWtl55Axzmc+OFsyMedUtLbww9Wtqa5SwXEPiCyxZWxfaR0N8p3FtSNWV6zQccr7aR1rigiq4fFJWh9ZqbZ8QN8fqVShGLzjqYCRQA9phCVSari9aZl4as7JLhkpYPeJHJGp3K/UzRCQ79xPNfb5iXFfuo4klzARqH1lNMhqGmFnKNRqtwDvc1tU5ilr6rRpA2Wu89Ak2qPLR+jv8w0paVAQi8MBP0UhrfDFg9/uT17pwoo5Bw8KcChpr1nnMlT2vCi1dUDmfm6V23xiVWURQ/FqZvI+n+aV7/giEZmZPBg0FeIY5aBgdv0riwNLucNhXnpIraWckGzUIVBCGPD1ub03C0fPAjLW6K8rENEKgFANjXA3Jy9I6l4cVMIcnoQo3JYyx8QsdpF9gJrZY15tqW4JHxBhpeht3ucCGMXdcBYVqmPp7lLEsoYUWl3hZ",
        "X-OriginatorOrg": "valinux.co.jp",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n c97429c6-ce84-41b6-eb34-08de9a306ac2",
        "X-MS-Exchange-CrossTenant-AuthSource": "TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "14 Apr 2026 14:16:27.3844\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 mg6w+9kvlQ05c5WwLulJE3gzedFcCoMHQznUZHdp870rUTQfGUToR/AjPby1ahSI9LD5kVjrrw/EWF13nJpMDw==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "TY3P286MB2529"
    },
    "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 7eb94dffac2d..bdc1bb932aa5 100644\n--- a/drivers/pci/endpoint/functions/pci-epf-test.c\n+++ b/drivers/pci/endpoint/functions/pci-epf-test.c\n@@ -94,6 +94,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@@ -733,7 +734,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@@ -743,13 +746,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@@ -761,22 +779,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@@ -806,17 +832,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": [
        "v14",
        "6/7"
    ]
}