{"id":2198051,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2198051/?format=json","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/1.0/projects/28/?format=json","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":"<20260219081318.4156901-6-den@valinux.co.jp>","date":"2026-02-19T08:13:16","name":"[v9,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.0/people/91573/?format=json","name":"Koichiro Den","email":"den@valinux.co.jp"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260219081318.4156901-6-den@valinux.co.jp/mbox/","series":[{"id":492647,"url":"http://patchwork.ozlabs.org/api/1.0/series/492647/?format=json","date":"2026-02-19T08:13:11","name":"PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback","version":9,"mbox":"http://patchwork.ozlabs.org/series/492647/mbox/"}],"check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2198051/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-47620-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=Nb3hNzfz;\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-47620-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=\"Nb3hNzfz\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.125.77","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)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fGmSz40Yqz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 19:17:23 +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 F1ADC30AE264\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 08:13:36 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id D027833509E;\n\tThu, 19 Feb 2026 08:13:33 +0000 (UTC)","from TYVP286CU001.outbound.protection.outlook.com\n (mail-japaneastazon11021077.outbound.protection.outlook.com [52.101.125.77])\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 CC53233710C;\n\tThu, 19 Feb 2026 08:13:31 +0000 (UTC)","from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by TYRP286MB5862.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2ec::12) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9632.15; Thu, 19 Feb\n 2026 08:13:25 +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.9632.010; Thu, 19 Feb 2026\n 08:13:25 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771488813; cv=fail;\n b=Czihm25m3J9rysmxvRN9CAMVhAeFr8zaA7swwBLJGjWlhi0v7F136VBG9BzmRIOuJaYsAeUAOowtHQkKnzGCkbkuxfzZhlHCh2HnsBNCy587yx9x5Aym4KnSmjZNm3CbwqFrQ0G1YUOrCXZOLdTinbhssDq/3PExBcRli2Czp0o=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=ZzTqGgUQh9D/DpB4z90iIRDl/kq8gLMxsk51MuzCWvWE/B6iOX9UcdFDrQGN7yWqtF9jAgYqEussFQGYq6n0EPSp3YpflGrw1ik/FJAAvlQ5sd7dmrnsB2Js2bfuJIW4ivt7Ifu9y8GNSmnP6VCTJ1BrfOzsO9zSZ2Xz83CqIeuvRtFHog03fhMjGJ9gDBc5MliduGVzi+x6b+Kj8RVHjkPs0WaZp/16KR44hi3ruqPa1vzE+HY/tL28PlS06uyHkyx8/svolEwB/oGvVZTNsAujI8QQmVpNn3q6J8YpfwAgsD1ALAvVZkAqgYd7Z8FkfJi9GykZ7/I3PDMjoPqP0g=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771488813; c=relaxed/simple;\n\tbh=GIZflbkhZO07WX+TexC5hedbkstS7lKC0uH2gTWfi4Y=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=Y6HO+jc8v1EskI/JVf1LCxKdOmQpk3CSe7h0gIt7CUS9g/Ne2YoFqVHpcauRk7buo2hUjD6xxksZUsJLuZI3KGQN42dFbgnMqTSwFzovtB1IKp7tpAD1wGUX2c1i2tUhe9RbnqRHxMkFBjg4OnWE4blWDtNhLVhu0DvQU6K1RJ8=","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=f0dVLl8lUOYxnuiRAP1lS0amupJvnq3+JfboBNgIObs=;\n b=iJYINrHjQKxb+5IoKP/aa2KGA6osu2TC2EQVq/IXq1ekV8OtvoyGbEwzv8bd0p5IkzXPtvIkwliDXEwr2i2f3b5GoTvMYt9ggSVyJi7U234HNuBlHA+82WjFFO5cs0NdJTho8qWHjEHkQ9lfW0aqX2wD5q58GpjVbJS1b6VrJfJ2JUq4EvS75cpuXCkekh2mL4/5IUz9AHaX6glIBlnVD6ZAbrdGvaidfxaqoh6OC+QPoUa9RPzroVyMc/IBIah5iwtcZZe5FS1AlEKLpI2s5wa6HNULS613buyo3k+n80ehekYYIOwpPt2vNxPs0o9wxqQXBhtYaFvjGUFgPkZTlg=="],"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=Nb3hNzfz; arc=fail smtp.client-ip=52.101.125.77","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=f0dVLl8lUOYxnuiRAP1lS0amupJvnq3+JfboBNgIObs=;\n b=Nb3hNzfzXCiU6bfFjQ7g+AgOGV3k7KrcPdVLwselIzRdwT6SV6UMNTFgGYO7qAm27fvr7NOrSqvf7Vg4H6MotE5c/NdEcsQdHUVxLTcRW0qA2VaNCKbSnKDpnUXP2Ym0zoIv8ewrVqzkumqblG4Aa3Xh5sp3yzce4Wn3IuPXtIM=","From":"Koichiro Den <den@valinux.co.jp>","To":"jingoohan1@gmail.com,\n\tmani@kernel.org,\n\tlpieralisi@kernel.org,\n\tkwilczynski@kernel.org,\n\trobh@kernel.org,\n\tbhelgaas@google.com,\n\tkishon@kernel.org,\n\tjdmason@kudzu.us,\n\tdave.jiang@intel.com,\n\tallenbh@gmail.com,\n\tcassel@kernel.org,\n\tFrank.Li@nxp.com,\n\tshinichiro.kawasaki@wdc.com,\n\tchristian.bruel@foss.st.com","Cc":"mmaddireddy@nvidia.com,\n\tlinux-pci@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tntb@lists.linux.dev","Subject":"[PATCH v9 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed\n doorbells and IRQ flags","Date":"Thu, 19 Feb 2026 17:13:16 +0900","Message-ID":"<20260219081318.4156901-6-den@valinux.co.jp>","X-Mailer":"git-send-email 2.51.0","In-Reply-To":"<20260219081318.4156901-1-den@valinux.co.jp>","References":"<20260219081318.4156901-1-den@valinux.co.jp>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"TYCP301CA0087.JPNP301.PROD.OUTLOOK.COM\n (2603:1096:405:7b::6) 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_|TYRP286MB5862:EE_","X-MS-Office365-Filtering-Correlation-Id":"c9b15d97-2d01-4a10-dce6-08de6f8ec18a","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|10070799003|376014|7416014|366016|1800799024|921020;","X-Microsoft-Antispam-Message-Info":"\n ICTEPz/jbCZSdgH0jST9tJ3ZUXz2M0iGY6PWZRdILU3BdFlHKcQI59lwegG2mX3jcPM8nTVSIuQd9QZCTONd0i7YJBhn/CQW8TUeE2qNljTB5u5Sqx0iuCMb3Ik2k6z7sfq8VdiQd7G1PDG5t3JCJIKID38G+9OYwrljDhmGAmiIV92xKU4WYqjtHGkw2h7cLLZD38w4o+sOfvT1r8xHfQZwP6AkMYU4s9VQ3sI53XwW7bCU9gUVt2IMwF0X7uo6JZCBYbHYfRbEiP4cF8hJfJrW3CO/UMTeWDwXKsL/6GNQeryUmiBUg+jdsPjI/wCxsyJF8AncwE+pbi9J+twfy1Cc4iZebmGNZrRCSSZjSVJr4Xn+e75/1ch1g+10w4hpDNUwwVMb353a9wNNGcvUPcw2oy59A6MzZTYajWz21fYfSCbUZwAt50lzAPinksgQc9tUEJViaU3sEyUWWN6lhgV3HXcAdloOpzKcTFJzfQlrTHlPetqO7bfhIf3+uSQeL02jL3ZR4gdz8pSu5dWbhNh/dAE6GsqHhR2YqMzpS20tnl9BdaTFDklo+Poa6So53KWzcM1qvOxg0/9hIiUYCwyv6izRQY86/YYZRz3N87NI+G0d7/HG4gD2Bj98zR6BpNgem88OspkOUMhekfu0EZlAHxuFZz1B5ogBuAr54QWjOcCQCU8RaNOCkhrOdIboZoQ9f+FWxIsBhAD2fIIlBm7IkGHHRDXRWGjspqNjKYZvvfSYeCoB7ZGRttass+cMnfTQ2BgIxaS0T/mGmvmoWDiMbGtwM6O27fD3yBX3CZj8sCG0oFsPwQwsgQdEBskEs/+uNemXqsDPZPhecWMm6jpcpeakNDxMPAYPJO6ss27MFRu4RBvgh6la4iVmU0uW/SNzIqTKLQ4apKDBa1a/QSKh6kZRHVRpmlp26nMqbpMeyuFMtFGjkW1D6UEM7PFB1y2dirCrDvGUDVtbaA+tGQNd7PENQ/2zyq3HB27RNrRG72DddZ9Cwpgki1fA+8liXlMTo9KWXNuZuJsFp/N912XVjAUjpRgzOVUBqtohubxaakEBRvbA/nHs4tI3ICtoKibpR+l/nkG9nx2EBfAWXB9tuKH3Bvk2IAI449+rtvNucvT7GpURC+E067FKrbzYcK4QPWuIoanMHFMiXTqq+AuEofqEgNgaLk6bVjB/mTVljVRqtVh989eEP8EzfXl17/Z8rVV3sWSwXPFFgUo3NImg45JmeGB0tsM04DP1Y9YOvcJRN81zenCv8paWZO5pP74gPt7ORf9eUURQNt/1bIOzo2dZYjLhw4leW2K7IYpJnu5kW0MNBEmwengpnr3ir693a+h1tdnGAXgpRg7RXNdIoKJm+aikzOg8UzdnENxpAm5N2g12xJx83b17IsFKmoSWcPv6NX+1Y4kl+aRoW7qNOirbt4sBvh+U1W/ug24BTsYeQZ2fyIAhv6V25thkK75y9P58ZwaTLFFIKFUXl+PcFXJzg65wbVTZzUrXeoMqQAs916QJuFqf7Uto/32rCS4ookbSR3pXDP3rb6+5TLSA2n8+JWOPBFxv+z7lqrrNUUm6qjyslspHRTbxnqeZNnp9S9Unq/xS6I0FYANh1g==","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)(376014)(7416014)(366016)(1800799024)(921020);DIR:OUT;SFP:1102;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n sxYABPKKIHtUNLLHjFmS9GltZ2nTmp6E57Mi+W3tclZLBrekzqJBVs+Ml4cJ869G4Y/AGD8QdtpsT9vIXhuMGze4lrdIpeT0Asy5WGRtRusfqwPO93zPK3nxtPDMVtonpP5RAdOLQAgz87HjRkiny1gk75OdWPv+2UgF3DypAvbI2oburWCEvEEMpaXPig4A6GknznHMv0ncK+Qu+NMuOLvYZEqa8TxcR/rzMeyqwQlV3g/PSFe1I1WgKqTdMBCvKmBubkTcoAHEBJOttIYHhCvSg3Ml33KSUDJ0oWk7mLFHmdvUXZh6g4ZxWxBdFFIwt6+HnhV7JSb89hQXPQG9MjNp+kXt49z4EsgP81ktn9xRjFNbDpbuzthlHYn4ig2VhUR8QQ0Es5e4KZvC8NnuQsarU6APPuwRnm0IwQd1usZO88kplm/5NioLTFS8FoOErjcay+h3kcfLD4+OWXPYSPP0abDkOJr4VXCJ/s0urxXcU4f03UjBvQMV/vVkDtZkw2Z4px9FShXG1/1kzCJOKTp5vQ3x9J4Dw8/t9Ze+sY9e0DUdoBpBIQxVGeGHbqk/8fQX+YnTeJ5T6mrtm5HrUErpdAQdax+pJ+pJR4raEOmuOHO13KICYdpYwoWMfXPyN6w6Crl9zSXBIXfJjoUFHdzmJ/176oCpdjQ5Ifn/QJjQQQvAvWQk9nCN6DlDtCgFdBNIPnJ1sKYlQqOds3qWxl0dw/oFmgZ90+GqejHg3vLI4rRwaJ1JXoWfR+eou1FVCFVFrRVSUkeE1FvOHt/ayTbjWONx9p7lsU9tZDkwU/RxfZCTeWDFcTdzWhYzU9V753CTLUZ9zg1pafO6SJi4czE5b/owK5fe6C9C13R18sRj4OArG1SMXY1T2FaRLne6MYrxvcq/hJGIWSFiApjFiESPOd0uo8XiH2huhcmlwze0wqHHj5uZ5vw49mV9648vT4AmdwDU5Ay2PNE2KJ/tlqiHGd+cdA7tmDrz1m8fsWslxX7En+Keif0Q/hdGUiGiKdfB0biMPJVknUjOoY2VkC2ItuyfndiuDkv34H78HzqdjGC+0F1p7m9ryGSXodtHZULOH0fXa432pOPC7vvssBfdI4svcxFG9uqTMaDQyXNW3bhOxgZpcnmLpXl+kkBAZZ6IpqPFVyl2+dm/JkFh7MLQrb2Z1mSiK5gHx8cuuPpOTGtGIXpzLZVXjo+63kvWy0vYl06ZzC0yi4GCuvfAM7JVcP1MCIjQ/VSxmJvqeeXSGUgkVb10fLxL/pQaYu3Z5XvHL1Fx/ZlirB60c9VOFPbRd2Pl6tNRzZ5pY7PpIlbf4a5siA32TvlhVVipApXp+2U9LW5kLtALPsbQAScQxREHxL5lzIDu5TcrYE9Dq8V8GX2sqx2qIoIM9OFm+PDetKBmAl/NrcRi4IbyOGPQq5CzKXC8fwlr015hyX2rGH7fjWQyjH9Z2UQQ1xTb+bgk+WnYiTGdQz2hwbyFuzS+7QRMT5ZkCqyPD74WBDbbDFT3z6uO0AJpqqXq9zwd5Q30sudTNLLxklpYHJztUZNOTsTllV5BiwM5ZwSl81a59i7m/U369+OBSIGrvnqMcLgX+8CSdTCvPAaDwrreWyuwjrDMfcrfo3mAbd9R1t1K1+lY9CtBB8TC+bvamHb0yTkjzq0m8ebb3fJYXMVxQF4IW2OeVaqJ+o9VimZIYRZj6Zui8BxmW5Ku4e3wGr+ClZmfDIXE9RZHpEzHwZV8Y0QpiFOgN87H4TJut7ex3w06CVGJjLlIF+keQi4sUZc351Df","X-OriginatorOrg":"valinux.co.jp","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n c9b15d97-2d01-4a10-dce6-08de6f8ec18a","X-MS-Exchange-CrossTenant-AuthSource":"TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"19 Feb 2026 08:13:25.7008\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 oMNYcO3ShqR5yK5Q4RCz4m0FGbUNxbBmvwZtOksMs7v94PdFEDhSR64fcFHM/D5KDGbxWC/ste6zNiLK0AV27w==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYRP286MB5862"},"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\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\nChanges since v8:\n  - Reword the last paragraph into imperative mood\n  - Rename s/epf_ntb_db_irq_is_first/epf_ntb_db_irq_is_duplicated/ and\n    invert the returned bool value\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 52cf442ca1d9..7a27e9343394 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":["v9","5/7"]}