{"id":2220213,"url":"http://patchwork.ozlabs.org/api/patches/2220213/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260406155717.880246-6-den@valinux.co.jp/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/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,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260406155717.880246-6-den@valinux.co.jp>","list_archive_url":null,"date":"2026-04-06T15:57:15","name":"[v13,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/people/91573/?format=json","name":"Koichiro Den","email":"den@valinux.co.jp"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-pci/patch/20260406155717.880246-6-den@valinux.co.jp/mbox/","series":[{"id":498879,"url":"http://patchwork.ozlabs.org/api/series/498879/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=498879","date":"2026-04-06T15:57:10","name":"PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback","version":13,"mbox":"http://patchwork.ozlabs.org/series/498879/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2220213/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2220213/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linux-pci+bounces-51960-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=OJFfeWuj;\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-51960-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=\"OJFfeWuj\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.229.111","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 4fqDYf6mtXz1xy1\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 07 Apr 2026 02:00:06 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id F1F223044A73\n\tfor <incoming@patchwork.ozlabs.org>; Mon,  6 Apr 2026 15:57:33 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 60B543385A7;\n\tMon,  6 Apr 2026 15:57:32 +0000 (UTC)","from TY3P286CU002.outbound.protection.outlook.com\n (mail-japaneastazon11020111.outbound.protection.outlook.com [52.101.229.111])\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 3852E332616;\n\tMon,  6 Apr 2026 15:57:30 +0000 (UTC)","from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by TYYP286MB4187.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:10b::5) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Mon, 6 Apr\n 2026 15:57: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.9769.017; Mon, 6 Apr 2026\n 15:57:25 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1775491052; cv=fail;\n b=XrMBDFDzCFtCJsz06XKFJFxCp0Zi7NEJ9yr1PGsQe6s25Hw1Qvh0X9NOH8RxNFaED1sWEr61oXDWxS+XpX4uTlgfyUaVsVaS2QJ9+TcJY8xtNQMrmfZP/KbZqKhzKz70odvgGpYAs6CfaBQigKoUtC+Ebm9NdFhvz1Dh9YegYvU=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=TKuqiIaB4sKVyqBFXiQpFDbjaguRs5Er7sBzmiK2mWSDsdm5cMZECEY5qLQ3pFuxsKWONSt+jzHQ/XwzYIXtaecIf7JTN9+JJcBDgAYtMWP9s4s4G3y0XhoKdQG36dd0whla9t8GmQs6TSQAxcrrbgubqw/yieYwhAoFKKk9bcwDi+NBNt9fdnuF9MUiyXZbt6Dce2XmsKJJek7z6IiU31qMNM1AQixsDhw9DWKq4zcQoPFya8fNuCjOeyYDTvrxbpZSvZjzRW3DHGxl932QkQZVblAsn8JkiQITNws3GlalOIWUkKRCjqczTtqHlHMvqnFWv4zjoFieVCte9UAlzw=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1775491052; 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=rpx8TUzQc5UO3vcGyFjdugOCXKA2W0zcSY0ueuFnDJ8yDbJhOqTEEss5b6oZRhdSNl4pYvqvI8l0r1hIYNfbyP/1fqvzm3n/ublV7pqLjcTDv0TteyUZvs8FNTfbFCYU18+xO8hsDx4Z4Onr64GzwVVJ600InI0xjsD9JyOwrSA=","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=bzQTTefnO31zfkmz4Jp8U8YfRaWC9mIacbmYbSrvsJPTXqunBBDWPgvwFLuAdnuDDczJjtJJbpuHLg6GQjB+ac5WVsftLM0IbOagaJYpJKP09u6vRHdxZM0aXtMukhUwX+m5axusq8Wh1sPVBYFt3Uok8kD62OLjEX5qMdvkiGK2XMQz/FqYkKzAbW82v0HgxIikJIBSohwhio1vf3tPTDU9RQv/p0khcrjuy8sniG5+XrGimDfYU1tZRZj6P9bDy1s2EZtiFId/v35S4unzGhBDc5B5Ya0mAl3sL9oj0N7bbijRqxFyPoE9ozpTxoR0zn/Vh94gOSITJCReEnsmnQ=="],"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=OJFfeWuj; arc=fail smtp.client-ip=52.101.229.111","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=OJFfeWujwJ0SMz13e/978tDvMUfXED0Ar+zDeQm8+xOh18cX/OYeMy/XX474nhW+bMt/X/pZPL/BWEUjT4vbkr4bzTxKwghm7ScQWcGP+vrc2ohFloo8dMjwlRO2PKmd8izx/DPuy3V20q8j/2AXIbhOsiXndGQ/giikZdoygb4=","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 v13 5/7] PCI: endpoint: pci-epf-vntb: Reuse pre-exposed\n doorbells and IRQ flags","Date":"Tue,  7 Apr 2026 00:57:15 +0900","Message-ID":"<20260406155717.880246-6-den@valinux.co.jp>","X-Mailer":"git-send-email 2.51.0","In-Reply-To":"<20260406155717.880246-1-den@valinux.co.jp>","References":"<20260406155717.880246-1-den@valinux.co.jp>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"TYCP286CA0040.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:29d::15) 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_|TYYP286MB4187:EE_","X-MS-Office365-Filtering-Correlation-Id":"2a863273-c597-498f-eb12-08de93f53277","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|366016|376014|10070799003|1800799024|7416014|56012099003|22082099003|18002099003|921020;","X-Microsoft-Antispam-Message-Info":"\n\tfSvfNz7TXok3gppaHig+kt5s98wspXPquYem2XZ5dz5XgWnGZtfMsIDvpydFdYEjo6rVs8Z4+qjOiy0lgLbuc2cqftDCfwzmZk92o7n9CxY5ZG7dnFP3/lM0V9Wai7fwqCdeEB+v/7jLVZWSgJ1CVEHXhJB2xZFhuKa7dwAHwM3S8QifJO4ZNpPiWQjGStjizrShJlXR0Bt/mXD5EFPydBKd7AR6MX2eDx9q8zAMw9/wuElItMECZyR6SonW1tPPbN0pmdGsmW4Ju1MnRqp4f+7jWV6ijWdVE5y05p8XaqatAuayNWfE7hXzig9cq6S2eywhiLEvVe6PLcyA7TXewr1H2iH7b9Z7hkD6+evSaJpQX/mmqIcLO72tpnrhzHiPikB0Gytw19vNTWWBeVMyD6ZXrvOgCgnTNIn4mOE5h6uwR2Ok66qXVg5vo9++t9DyXKI55+IxoR3vnBygorZ5haCTKFRvUaUmd2F25czuavsfHAgBqwSeEgxmdPbxdsL2u2NTnYT+Mbx0pABL/EnCN4QwxaWU54xDQjxLPI8Q3fur2QcwSFAI7SaNagD3uqcWeJhmB+06Lw4dmKe95qoN/A6C5DUI52g0ryxeko83SyudnOqQYroGPjn/r6mgP8Jta81bi6cPBNr4HNbdyucyWS38xKuUyLjv/QmLDSs8lZpZEG2T6lxmijTnhx+JSvHnG27NQQLKn8yxNgawwFF4U9ui9Tp21uAxJ4jQxiQzP0/TSwmp9mHiBS//Cub6HdHGdTi12kTjW68xxjmNrh2r/Q==","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)(376014)(10070799003)(1800799024)(7416014)(56012099003)(22082099003)(18002099003)(921020);DIR:OUT;SFP:1102;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"\n +ZZYAluYiUk8PNN06nmFj5hwChlbsTVqMW6BLpiAYJVz+zQTY6Qh6DzHh7uztYN3dC59gffAv0Wk0gN0316Snyc/qIuM0De7i2dDimxSeVtWsszPAHhcuD0I9ic0vRpD13+oclimNvuDXBELnBMWujFiUQSEfy7I+XL5+/Nt/gpPQ4/xGD4EY4XQO7KVQ62I8bdLQTHL1jK53qfE1rzqUW4Vd/hQLp7Fu/20C02XJPDL7RStc/e2DIh10DVt8Cdqmt0YRbp/GFIc3MpTUOSTINcOgdwsFK4x1eLomNBteYWgvjJKkX/92XUKNyZpsZIjFY3VSgqMx7tvqpM+i3nbi8JEenbabqcVbEjVcMbYcQKUSGTqm0It0KOM8AFiwoA6MTeWxCcrxFBafsDJcAeydFc/jIB3HC1GVx1P7F0c48z4eJyUyjW6g0UYKDSAdT2PdQmAqy/WwSv5DU8m1XcUu4EpHsgu4e6BvmrSu1bDUfGDpeWzo0ovldnMUv5wPrLr77NtHPNVk8miSyk6aIE9ZWJcKpI08T2Ec38c/V29TqDyV5v/nehuP76j6fCufoob33QCuOMYWSlzKUg2Oj/VVD5gInFTvKpW0F6FycWhpATYM1XZwdLRlCyF/ybS8occrLV8iD6RyyElIEXl4unJ4LyixJloiwLl0NjsIg7QsAVL8tNWPJfL62Qz0kqVYoXLcgsAEMReb/dvG9AyQ1Mdrjb3zl3qZ5kBadAsa/xQJhSwFc1jh7bevYaHN6lylqkeKraSEv6QFlxQBGSIbS8rww4+W9s17Q4iruROXqLxABmoh9IrTcfEJw6z2ALt2sLUyn5XEqfjH89Db6ylo1q90Dg3YsT/RdBwunhkASdOUR9KmccQVvtO2Pgjc3JtPBit2yRiodN0OaD6QvCoyP8Bo/dZk3FEcUy3tV5lW/7jb3saSO2FMk9pmx+jx6e9cO31u7VbKYB7XLroqwT6MFfet5v/l3N6l55pvDuF2i9xMLh3/yvJ9cmGw8O+Rkx8SV8h5ZjzgsRA3c7jtTlJEva5eZKTj+7Q5L2v6bMmRRYHRAzOJWEx2gfpna/g4FnDOqGarP8U5XwJ+Yj019woKIaRSEfjwzE+ArTIE9uvMyUx9F0P/JUSw7iOaY/hlyJ9uA8UHyFIjlzOD0cZc6v3cZXZDpA31RYwO3lORtEm4Yo4WUa5YPRxsYaQNq3s7oFEcCyM58rZqcu3MD58T5y1ZrIfJkUYJTgrC6kxXg3OeNUoL/DL/f2cMlypfTpHGTPCaAco4jRRk2yAM3ulsUrcL7YPn3zaOkf7kb92dRX6Fyo6M3cFQ34bBoBWHmKPn2nDmVIkgvBd3PbVfSj4ASc42iFR5oBvCJm4Fg0k3yL1+ReY7RbIkYEgLMzBCfU5QfG1xZuBATJTjxdUoNX9knnbySgwEoZ3WyoAN1r6Tvg/t6+0j/CakUSm50KTrCjFYq/tW0Cd2BfdjC0QWbkqN5XQbDlFvOx898Nlp0R5MgKpwj4I5TYRYtt8NBNIRhJcfCzIXZNmmnAAO58e5V01Su9zMr5Pl4uWIU1JLnmJbVO2cea7xEgLCiMlN/c5pk42OvstLJ4VBERYQoVTCceSZ6HbI5ReU4X0fDOehv1i69sYvqWDvegW61bvIdmXNQvFROktdtp0ok1R5v2dsmATVaKMoU4++RedNBUnPKvab12KZWjd5bokVdOIOzJEvIApQ99u5E7nnRUvA3Zf4TIwDdOmCPFBZiR2pByb3fyrPwh9hxmvOcrCIqRBLG8++/lA0zRA+B8i","X-OriginatorOrg":"valinux.co.jp","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 2a863273-c597-498f-eb12-08de93f53277","X-MS-Exchange-CrossTenant-AuthSource":"TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"06 Apr 2026 15:57:25.6932\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 M4qBAd6zJL5jSWtjMSvEoM3wThzPTO0o6+gyS4LFD412BVMryOvq0mw0w3bLNYIcTRN7W/Aiv2U+/VJXuVskkQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYYP286MB4187"},"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":["v13","5/7"]}