get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2223140,
    "url": "http://patchwork.ozlabs.org/api/1.1/patches/2223140/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260414141514.1341429-6-den@valinux.co.jp/",
    "project": {
        "id": 28,
        "url": "http://patchwork.ozlabs.org/api/1.1/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
    },
    "msgid": "<20260414141514.1341429-6-den@valinux.co.jp>",
    "date": "2026-04-14T14:15:12",
    "name": "[v14,5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed doorbells and IRQ flags",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "114adb8f8123e87e8cf6f58349ee7045f4ecaaa9",
    "submitter": {
        "id": 91573,
        "url": "http://patchwork.ozlabs.org/api/1.1/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-6-den@valinux.co.jp/mbox/",
    "series": [
        {
            "id": 499855,
            "url": "http://patchwork.ozlabs.org/api/1.1/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/2223140/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2223140/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-52498-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=OhCC0IiZ;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c09:e001:a7::12fc:5321; helo=sto.lore.kernel.org;\n envelope-from=linux-pci+bounces-52498-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=\"OhCC0IiZ\"",
            "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\n [IPv6:2600:3c09:e001:a7::12fc:5321])\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 4fw5vv1G68z1yDF\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 15 Apr 2026 00:17:47 +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 6A59E30227C8\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 14 Apr 2026 14:17:08 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 0EAE53E92A3;\n\tTue, 14 Apr 2026 14:16:38 +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 6D0DC3E8C74;\n\tTue, 14 Apr 2026 14:16:36 +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:26 +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:26 +0000"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776176197; cv=fail;\n b=dKOnHitGPi7ebvxzGTAemDQKLea8K1RlmMtAMTESyr0GgFOmkXLJ6SSOzOVoV62eMq/2eJh59MBLMrpG3AL6Z1X5YEWjhLZ3THDtLfoOb4ZfMO5b8YwZ7Ff/k8Kh/7wnKKIHnCxQXup8flhl6eRh25wjT2qTQBc20gxHI3l0tgg=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=cDi62shUrsxSeoMtiKSB9NsQzY/e1qvaoEoLO+uCAEFUNh6fWcHwBypwVecrIqsycD5iz2emLz/2PYsxLeKQFcI98T2Z6gY2tk74N5MAVILcr7+qVrwQEuXBYiaYnyQQNCDGYumYADFXDcMyjKDf2Rv0AbjcioyCprdIxj+qQuS+ohSI2iT9+caYWmJxc9WA4zoVxE1t68Qjefp7/0nZJec/ocVQq5HhPITTz78mMoElBrwRAY060uXTEYEliKFoI+eqlY4ty7VXCqM3xHsBByW7wKatYTLXYQZY1YLE1lqPt2+f0vNgSgOtAG71Wjfxu/UCXkKcB87qmDIrXrihbA=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776176197; c=relaxed/simple;\n\tbh=sgRjIYZasZJZC6aHGGTqAQ1lBQJuj5jFMHNuey/EsmU=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=vGmoQ4gBiUSVOlPQ7lHHYWn/D6s4z06fcG76LLD4jJjM30InvBHnwUQ4k/l6z1NO/3RTwU+SRK0wnHicWbhz2JTEqOz5GE8qtGatjzu8W/2wqN7kB4jL+hwj06Yovp/H0pBATpdMA24YVQv/6KwFEiCWi5NeYewt9Bh80sMy0S0=",
            "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=b35G/jLYtQSzKulf5UWuDqd43jYQoJdbINzQbTRfmH4=;\n b=d4C1vsDWuVdklJ5JB6E6sUeIOCPQrZIVyKBOVDqX9AtoRa7V5OeO/xworp427H0fFBOrogwJ+04FcvWnlor/c68TlCt3X6oFiB8n1myuTZiFvuglmLSfi6txw64Wvg+vVw1qQ+TPglPG+EJEm+aktPk+hBnO5MChgEyqjaCcSnF8HyFkGYCIjR/oYyMlP+ejADGz6CSjHJ/EUMyBEh0oj0N1iB1ziskjiyWiC/308nacIxzej7q3cw2v4DbV3GDzY2kyh5CeYsWTwZVAZQHr2b8CLjvgRx7APb15vvq4rSHVQCO8ik4tzJMuekaZU+nzcKT7FL6Cowih0YIQ36rXQw=="
        ],
        "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=OhCC0IiZ; 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=b35G/jLYtQSzKulf5UWuDqd43jYQoJdbINzQbTRfmH4=;\n b=OhCC0IiZQhbMbkK3I4J9VJFNMUUFj2kqY4sZpAHrpdqK3CbmOu51SHjaBjFV8SW7ju5e6WMy2EGN8NMT+v2emoPTKvzVHrCI0YhSPlY3Mwn9LJLlNvX/KtFQladjY3Vf5Gk8h4ODbC76mlBfUAAaR0KW1al7p829ADE8At5fugg=",
        "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 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed\n doorbells and IRQ flags",
        "Date": "Tue, 14 Apr 2026 23:15:12 +0900",
        "Message-ID": "<20260414141514.1341429-6-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": "TY4PR01CA0086.jpnprd01.prod.outlook.com\n (2603:1096:405:37d::14) 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": "23ce8525-9f3e-4bc4-cc81-08de9a306a38",
        "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\tOrQeIVgM6jtalc2D6i1RS0lET0ovNt0XfIfRuSnFqzvd2sEOgAUoPwMoqXNroxTRhT31ejQm40TPgLXyAvMbLZKiW7/To2q7ujP64drlDsuH9r8oWRuq3hW7aQ9uYOsSdHstpne+Zy2mRinhdOdl04m8cH4cYlhEvGMCeJqptuwr5fdv7KeJMfQ6uIEEPv+bh8h7enkBv+1qr2Cwl+L+P3n5+NSGkN4JjzkTJoA3josv2w6a49wg9EaFKS9NVNXfwZyw3Q0tPfKSHoJ31/52yUgqDVbm1jeELlBX/EBqvsoApUNYj6TWhf+tYjKdnk3yrftH10bNr0ZDdkrsxUp7hjvs6E/HLYCL/cNmqairoJF6JQpXgoC9wlqFbNZR2Og24Abm80plz54CRJvd0pw/9wPhD1Om6TsK7Po786il1DJ2JfXVCqizbx8+c5d9ip36AUhunRZUZA1CgUuUx2uMZtM97VAUF1pmkBmw6r2UVQWDrwUfRCAL1liYxIo+vqEqUSenbbyPg+eCyE5gOZYQBu0SJILlJLzxldYJu4OQ7LZaGytr43WX596SS39kI8v7DYtEM18PggKSqwN1k4LpqVPJr/8EQkBDGxpkN23ykGrYxM7hAIBwiTSoffDtLM6WKpRTVZg0eR/V1OfQg/tHnD/eKJZx3Dv4JwNsEfITZZYRMmKziyjpu5h8axBeTuC8xZMv9D2VspjLO9Ahwk/0W6/KatBZrufUGmISuZjE0iXiFx8SALVqwfJk0+tAvSHwNBWwRMYQ6ojxsUTdZaeINQ==",
        "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 5QoWYrA0bR2pEYzlmcMUK2KurBlUE/WKlNlzbSd5CvcTpt14qws9YIrIjmt7o44xLndubct0fR26DQeF/f+7p056EceRw4gNPHPchnAhHzhaGB9dHGa2N0jtwFG+9tsjzc2WcjQ/FCrRYckwnjOTWRsYne0J2M8DJlzmu3KFF55a0bwgEzgK7U9r4y0osNXUYtdDdPRJ5uGod/xrq1xER/P644vs9DxDuOSgSlob8hHgDDKjNcueWYzGxjblsqq4zCTZ4rVophEZKNy/4dxLqq57ltcyAzgMXhtRIKeD1MttL2HHcOfvY4hsAAhra8P1u9JOrKAIdj87x2zkMUQujfdhCZBWDPnSRpc/r9UesIJhTm3ouYsLOxIDv1ZG19qXaLi2UaqgJkpbCGsm1gYPWj5yj0rn+Rrl+35H4nUs/TsBi3erN9tok5ACeF1SHsD8gtJU57EvBZ7DHXUvwYuEfzfHz2OpRMr6kUIgKNEdHqrSsWFf3rUYHYvLBgdK29cBvOUECHhQrEmg3+0Hj/ac/3cHFWY/C0mhwmuPjCmruc1x/fB/rBZ1HYQr5jdS9T/iZ5V4z7+YbBVMxU1dTG+y6p4QoXvjhj0ItgF1iuLoZC2Bq2KDVWHxjWVA5R5qHmVZ3tHF/6YYhcwvB5Qy13P81MTJoIHbTzeCpbKC1PsdULhDWtGlbcoyvU7VlzHiWCci/7EGkqW2XzdzJhq63Wp31GF5GmZ8vhZ7Vrinf6kAkEHpi0iAAH2mgwnIVEmw/zEbQYxx5RWUEpFUmB3pY+OT3v+Yy8fR3+iVfVtky6qtGWXR9ZkcscKCx31mSps/Z3H3ZspVwRLpuQrZi/q0sHu3bv//yROTAJuVkyADa8GR34mI1moJzKCRY+XniXKNFFVEr0WO/+6nG1rMLSR4dl3tKo3EvJojFpRM6DopDH9L+M3t6sx11i3IXN/hmL1MEY2wbtyeGzlcu5lKBrU51eIHkyn7TGxEyE/i3X6P3eEgZaGs20A6izd7FV9quWXJyiI8ag0PRkICQuT6TgJgo0Bufxi3NjyIDvmuujmKmyv/MEowsRkU2cwAAqfAagMI5jkh/nFqlGRJAeUsbFt/Mo4LL+kFtLqavo+Ng375E8MDhKN+vXzsT0FHsaRGrrC4Pyh4nqVW/b1z0wsasX+OhNkjFO3Xk2WTFnzg0HRYAiRJHp74z02Zg4HUvqaokvb55HaZmG5b65mH8pJ/54Y1gErdQC/kcExDtPp/o3MZdLKh59XpfHdlWRH0Vq7CRt5KWcvGUvFz7XE8SOSh/eIsvD8apoMzXwe8e2gXXtaQ2Gsz4ovcgWAkuDMqeRxAP+DJyNh1PWcAUPvxx5r1AUmE5Dt2wz7IIe97qPxygvFfQiLc7QaPywcc35yzGCdqhTce2SJr+jUkDCqW1hRx6lxo0Z3MU0H4pmqhBAlVYwbI0uwEUe9lucj9xuiweCuFQP6LIXLIh1q9gB4dhroM2sopViGRIYG3BH4DVQGvCZHYYgIBgI0Pguab5CL6Q9a2IMYr60Y5nJjF5kGOR4n3sO/SKDpUlwHMksy7QFlhMhn9eE75c0Vn9NAHEGETccSh47GmD/mXPZjj7wM6vZt1upvrCmTniScEFqbQ4f+62HSWSIgKLa+5V6UERx4VCB3UtJuVh37aldo7up9zkKqkoY3cMJgDn2AR93YpYi9o/zUs6fGR9rc5oej54fgnwyQRFxgUs/C8q6IH7LS95l+vpkP1xM4E0XVVBl5mJX19h+eDZV0JXK8kWIG8yTMlFd3KgrMwFeRI",
        "X-OriginatorOrg": "valinux.co.jp",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 23ce8525-9f3e-4bc4-cc81-08de9a306a38",
        "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:26.4835\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 9TaMwArrL+iWicMWvhjRjlDGzN3TvSK2orqlKGG7gQ9/z3U6bTBgnkSJibyZa1Dy1dQmvu2MtrrfoDtaBeUW3g==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "TY3P286MB2529"
    },
    "content": "Support doorbell backends where the doorbell target is already exposed\nvia a platform-owned fixed BAR mapping and/or where the doorbell IRQ\nmust be requested with specific flags.\n\nWhen pci_epf_alloc_doorbell() provides db_msg[].bar/offset, reuse the\npre-exposed BAR window and skip programming a new inbound mapping. Also\nhonor db_msg[].irq_flags when requesting the doorbell IRQ.\n\nMultiple doorbells may share the same Linux IRQ. Avoid duplicate\nrequest_irq() calls by requesting each unique virq once.\n\nMake pci-epf-vntb work with platform-defined or embedded doorbell\nbackends without exposing backend-specific details to the consumer\nlayer.\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-vntb.c | 61 ++++++++++++++++++-\n 1 file changed, 58 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/pci/endpoint/functions/pci-epf-vntb.c b/drivers/pci/endpoint/functions/pci-epf-vntb.c\nindex 2256c3062b1a..b493a300da4d 100644\n--- a/drivers/pci/endpoint/functions/pci-epf-vntb.c\n+++ b/drivers/pci/endpoint/functions/pci-epf-vntb.c\n@@ -134,6 +134,11 @@ struct epf_ntb {\n \tu16 vntb_vid;\n \n \tbool linkup;\n+\n+\t/*\n+\t * True when doorbells are interrupt-driven (MSI or embedded), false\n+\t * when polled.\n+\t */\n \tbool msi_doorbell;\n \tu32 spad_size;\n \n@@ -517,6 +522,17 @@ static int epf_ntb_configure_interrupt(struct epf_ntb *ntb)\n \treturn 0;\n }\n \n+static bool epf_ntb_db_irq_is_duplicated(const struct pci_epf *epf, unsigned int idx)\n+{\n+\tunsigned int i;\n+\n+\tfor (i = 0; i < idx; i++)\n+\t\tif (epf->db_msg[i].virq == epf->db_msg[idx].virq)\n+\t\t\treturn true;\n+\n+\treturn false;\n+}\n+\n static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb,\n \t\t\t\t\t    struct pci_epf_bar *db_bar,\n \t\t\t\t\t    const struct pci_epc_features *epc_features,\n@@ -533,9 +549,24 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb,\n \tif (ret)\n \t\treturn ret;\n \n+\t/*\n+\t * The doorbell target may already be exposed by a platform-owned fixed\n+\t * BAR. In that case, we must reuse it and the requested db_bar must\n+\t * match.\n+\t */\n+\tif (epf->db_msg[0].bar != NO_BAR && epf->db_msg[0].bar != barno) {\n+\t\tret = -EINVAL;\n+\t\tgoto err_free_doorbell;\n+\t}\n+\n \tfor (req = 0; req < ntb->db_count; req++) {\n+\t\t/* Avoid requesting duplicate handlers */\n+\t\tif (epf_ntb_db_irq_is_duplicated(epf, req))\n+\t\t\tcontinue;\n+\n \t\tret = request_irq(epf->db_msg[req].virq, epf_ntb_doorbell_handler,\n-\t\t\t\t  0, \"pci_epf_vntb_db\", ntb);\n+\t\t\t\t  epf->db_msg[req].irq_flags, \"pci_epf_vntb_db\",\n+\t\t\t\t  ntb);\n \n \t\tif (ret) {\n \t\t\tdev_err(&epf->dev,\n@@ -545,6 +576,22 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb,\n \t\t}\n \t}\n \n+\tif (epf->db_msg[0].bar != NO_BAR) {\n+\t\tfor (i = 0; i < ntb->db_count; i++) {\n+\t\t\tmsg = &epf->db_msg[i].msg;\n+\n+\t\t\tif (epf->db_msg[i].bar != barno) {\n+\t\t\t\tret = -EINVAL;\n+\t\t\t\tgoto err_free_irq;\n+\t\t\t}\n+\n+\t\t\tntb->reg->db_data[i] = msg->data;\n+\t\t\tntb->reg->db_offset[i] = epf->db_msg[i].offset;\n+\t\t}\n+\t\tgoto out;\n+\t}\n+\n+\t/* Program inbound mapping for the doorbell */\n \tmsg = &epf->db_msg[0].msg;\n \n \thigh = 0;\n@@ -591,6 +638,7 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb,\n \t\tntb->reg->db_offset[i] = offset;\n \t}\n \n+out:\n \tntb->reg->db_entry_size = 0;\n \n \tntb->msi_doorbell = true;\n@@ -598,9 +646,13 @@ static int epf_ntb_db_bar_init_msi_doorbell(struct epf_ntb *ntb,\n \treturn 0;\n \n err_free_irq:\n-\tfor (req--; req >= 0; req--)\n+\tfor (req--; req >= 0; req--) {\n+\t\tif (epf_ntb_db_irq_is_duplicated(epf, req))\n+\t\t\tcontinue;\n \t\tfree_irq(epf->db_msg[req].virq, ntb);\n+\t}\n \n+err_free_doorbell:\n \tpci_epf_free_doorbell(ntb->epf);\n \treturn ret;\n }\n@@ -666,8 +718,11 @@ static void epf_ntb_db_bar_clear(struct epf_ntb *ntb)\n \tif (ntb->msi_doorbell) {\n \t\tint i;\n \n-\t\tfor (i = 0; i < ntb->db_count; i++)\n+\t\tfor (i = 0; i < ntb->db_count; i++) {\n+\t\t\tif (epf_ntb_db_irq_is_duplicated(ntb->epf, i))\n+\t\t\t\tcontinue;\n \t\t\tfree_irq(ntb->epf->db_msg[i].virq, ntb);\n+\t\t}\n \t}\n \n \tif (ntb->epf->db_msg)\n",
    "prefixes": [
        "v14",
        "5/7"
    ]
}