{"id":2198052,"url":"http://patchwork.ozlabs.org/api/1.0/patches/2198052/?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-7-den@valinux.co.jp>","date":"2026-02-19T08:13:17","name":"[v9,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/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-7-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/2198052/checks/","tags":{},"headers":{"Return-Path":"\n <linux-pci+bounces-47621-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=wBGHJ95l;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c0a:e001:db::12fc:5321; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-47621-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=\"wBGHJ95l\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.74.87","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\n [IPv6:2600:3c0a:e001:db::12fc:5321])\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 4fGmTC28T8z1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 19:17:35 +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 0421B30B48F9\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 19 Feb 2026 08:13:38 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 44842339714;\n\tThu, 19 Feb 2026 08:13:34 +0000 (UTC)","from OS0P286CU010.outbound.protection.outlook.com\n (mail-japanwestazon11021087.outbound.protection.outlook.com [40.107.74.87])\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 4F7393382C7;\n\tThu, 19 Feb 2026 08:13:32 +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: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.9632.010; Thu, 19 Feb 2026\n 08:13:26 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771488814; cv=fail;\n b=oz10gYlm1AbZqGih59v2SwCJ9tctN8BkBdUmvUuB21KPhXuv/SmvpLV5R1ZaPxGBmDNzE3zvDFr4cjdGPYhSsSgHNqnwuDVnaxI7UVT9NNMj1Z8+ZwSjj7lA3eV3WvnTAjhQxlfUkL9tI06uE5930799nJKYENrtDcaLpgZBSog=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=O5FRrny09oXy0Tssr1RAIGYN7R7dPOrbIjRfvtVGcr6j9TGCXloHcdbhbIb7uUBC14dunqps52GV4hKs9+P1Xs9eDTficzZqSt5zKcobXQws4mcdPV8SVukOX/z/iqSCtR9OpYCQeGjIdHzosHynlyl56yKxZeVdcJuQn7vNB2TbVNtMgFvp6wEgY9mtW43vFVW+yOeKKyFBG6irjEnXfqn8mU3ZBbbtwN5pgTHQ9GtZypj68/Hee2zj2yGabptMO+trr4jL+Rx4u3F0hPbB5BH4g7n3sa+J6u5/e1TQE3NHZEdLKDaf3V+gjPx787zZ3v6dytdocl6vcCVdb04Z4Q=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771488814; c=relaxed/simple;\n\tbh=muglXp/rzpaKKYphs9Ms6c2Zq5omujuDgaUbbp3J0kk=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=aFiNpVrBAkq8wh+wU6uxdgTLGNTJEJTsbjJf2VZuU1cn7oukoNhvSoA7Pcy82miIwXgIyw8oXALTY50a0hH2HW/bU5VCotCs2/XySnGd/rQniGuLcqwkLPY4ZTBdk73HQeP/m8rad28hKczx6gA52l5lW8g0S5GU9h0ufqy+dG0=","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=c0/f4VlESTxqp1Y0jsHfkarYpwQbEzBAcMWXKavG7nw=;\n b=cLMMnXNancmtEp5VwlFG12qLAeXY0xMxWp42qJ5G+pU5IbLX+H121GLW24HuJ7oxwnm4KOvUwrKM7Fj6n09Pbjt9blz69oRhq98TzWz6q6ulS+HdwxGdO8lJFmzxVlXEG44cYltz3jF21BNmW+FQlWdDX6lM66f5n87qZNRQ4BaxICQhsEnuhrtQPNZbp7xDsDMae3Fx5iXM0tHoL1gIPnVGAI6y/wLauun0KWbLd14JFMWyXRmv2ctOOwV1qYzCSP2Jd3ISGTspn50LJ8FFhhRVhNZzQXLLOAbaJZUH8u+9+RQLqZtJUOO6Lc2ZrxZtrYh9aM324orTeonRDpvkfg=="],"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=wBGHJ95l; arc=fail smtp.client-ip=40.107.74.87","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=c0/f4VlESTxqp1Y0jsHfkarYpwQbEzBAcMWXKavG7nw=;\n b=wBGHJ95lLaK14oSAVZVLF17/RZXyuU+bpGZ7fYV5aJ2lZjpM7qeeRZ98q+YYmJzeevGN4GAHexLvSgIEgy0xbYkvmvZx5vZrrynsJphvxqQUMz/6rBmdv0m6t4Cz0H9lOoOlkUka0kpHSYibM7nhbKD3zPVMXLZfAGFSMbzcsxs=","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 6/7] PCI: endpoint: pci-epf-test: Reuse pre-exposed\n doorbell targets","Date":"Thu, 19 Feb 2026 17:13:17 +0900","Message-ID":"<20260219081318.4156901-7-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":"TYWPR01CA0009.jpnprd01.prod.outlook.com\n (2603:1096:400:a9::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_|TYRP286MB5862:EE_","X-MS-Office365-Filtering-Correlation-Id":"78abe31a-9f72-42d9-3215-08de6f8ec208","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 lvuj/Vnok/8pBiNTT7JNKNNOA/HBd610mmQLYjnjLAC52wnbr8FlmUECfE3m4aJkzF8iCW7nrz/lZQczRtwPIETWIPx/UzPcKBlPop1F5AVbIOvlywQbPZWNTtvref4ygeTc+KnpnmYh0/iumWBqKdtZ1WGnebaDnFb1QXIZTQyn6aSlHofHBQwf7e+1uXlVGRNwoPzErERPHEUr2c8h8AV+THHEMuFpcvwBVh+hocvRwsrqj9KnN1QuA4kK4Dmb6UM7vB1AEu/QBbTO2uzOIxbd+iAUC4qPwOUjH1G4ZNC408GEv9yckDZxaK7I4SD2h8tTlTtPaiobkRmvKgzxH3+YDkQUUZPa7KFIWh7wqj9wHRAoa/kEGgQVDnsx6DCVd+087f0PYBJvstraTxmKxzN3eZDYezZwN71hHAwN+pkD6O3dJlaT2gk17zqEUFBsibAnPi5d2IZjSz47tvDiZDfDLVNnKAUsReBNh8g7aqF3CovsBBC5IpGbidnpd6Pi42HVzb69+4Jhgw1Toj71PDgBOtqd4OTWWJLk3uvw7+mBPRvso/foZR9j9+aGX3VzwhCmGLe4HBcLKalej1W0b2GWTfIxVJM9Mm2tbcqug9xrZrOkk63BVsJ/3nmSDtKKhEpEZKTogmjOgGOjtLhM1HIVvH5jsAeN74LHZov+fejZZbyK/fJsi9b01BIY6WPepamSVDppSz62LVRVtSpY2+nUkGt63m/LGrQ4Zm9++JDIBDnnARrNi4oiIRNMnYSkNn1w7W/3CukV+xaHhxSeg3qDqZvy6GqG4wO8cP2hRTtPkE/QCSVeVmtpk44hd+dumBfXkNztAE4sd4VHTvfJs90qAVGwSpVIfovoGCDKRV9oJc4UUQ2WSbGBwXYCwGcYy2SmpI4XVQu1B5quqUDd/lhSk6jSZOlmwWsJZVjX/ONO72sqG71jG3icMuEM0T5lAIQPiyOEBmBv0zVM5Vuoj7p4fubn9p6pm/6LKQ3ZDeFoqia7hR8jxaa2L+6FUZiCxCwzsYYkRawvRklasoh+/BKuNyKAXc1r38s9WoDxbtjrpodwGa07xMBCeZbqV04ETXm8D1Ht0/dWNshAz3WZAni9BZ98PaXpzs1yNRGTJdPbFuF4p85nXz2vpVrYuVLOunDEMUAnOvQOJirx4N3XYJizoxQyWBo4wQVljxjgbDDkykkL36D/mOONG4pfgW0lvdGhTbrt7V/174mlzrF1GzcGq7KKrceoCm2/GHe6CfJHwm/Bf6hxt+Y3VGWuC9yb7ry2HuIFDteyhFuLii9vlRVBqTBt37LNl2kE1UNVIJpjoI3hL5gJD0lE8bIg8dBCYbnvti+Q6FE1qLmPR5U72okrprfHP3J6MtKOCEohUOK36iN9KQ3FTSZinBXYraaOwQI75uYYCycqdALAsUKDzU+quxmm+XMV6ECavi3ujATYNcMv3nsieizLu2F8u20xEXRoOgqUMzegVPxdCHUZxbzEtuESsdn9gzPNRGvYZFCv9sgrrptezSd2Hv45PkrpA0dzj2iJXEL2H3BJfQuzV3mLH+xlOS0BMfQJcnBMylfsVtgUh58dxuCNxjSfkmSB+V4KeasLu7Z7Z6y8Wh2pCA==","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 qiiqqlNTgVoT5Y33ds29NOL0oqiRvF+zKB1PDb2EQj+se6Wi2Z2KXsOkQpeVnckA10zxLWcyLb9ttDZvmjqVEsHGtJXyjfnT1KBViDuabYNfdNMSNWd/AoM9t62SejCwkjejzs2IaKCvtN7Rbkru7FL29L0hV15duyZC3lkkDs9NIWNhFQ1MLVCjsd7YwHvzHF3sWFJwQgqc7ebtFfG6Ql7AcpzY3456cq1KDZIxbvtLuYCV1O3EEXXEJUeQp5Hlln9lah6mpaFrf/0YCDzeIX8qCab+yfFp7RjxZTJDn27VzbKceD+G3/axHCxSG8CGl5xbBXRFuik0QDh46v6tyibwghJUT25jma1DKjAi0icn27plRzqrOqsZ5TrVoDcRVn2xpv8YNyEXfnAVPo21C9joPiYP3vjYfaC/29cIenstEzGhRHn7zHp1n+wWh1uq+pf8o6ZfkjXLwDSmUHwrpLpnX8sVnVWkkp9PgMrUm3+6eio3yXC6tGx4Jib9omQa8G/E7L2CYAdlX57Aytl6WwhmevTuQR1utNp9qrxo8jd1mNl3UtbtTaCPV2iYo6PQoVsokq338TXFlsqwzzf6U7YhlRqfauxH1tvkeO6fhZftjeBeYVKXFN3a88Mm2oJ2Ps+XPqQ05YZGR1gDws8UrYgutVNRTghIkPg1QXOVopUHIaz/kCm8CODF4VsWyBaXsjQXxJIjUB5O5Cl7dyjI5OG+mKnqBO/urK6IF2+GnycBUGpZvKi0eZXf+FAgmDBTCvMu/+V9SyKqCyaeedAK6IMCrv8weIOoJOGrWE9pTIGpJketHt+7vkCMkT4wu1Keskt0qNEbFaDgYdbxCLFHhtzLcGcfD9r17NZmGLCxYabHPYgDz9HFrv6G+MjYIqDmjyodn3ncgHrLr/wowm9u2c2QHwwruMGriVTHEu52ABsR7mirkC4d2MjsjUAlfsqYbaLSgFheSlD/kDU/I7eY1/uTlXsn0AQOSZ6vpJ9gOOtq4AQEfc9Uoyg3JhecYcKOOKLiaoTAIZyMsj2ymANPXGpReMqJV4aHp/WuvLjwx5YW1L4UED/C7yV6BOTqgS1FhlEJPvvhImz5nQioUYJGamBLPVu1H+Grtq0qyMFtvPHXLkDGgb7Dz5Wun1rutpJR+8zAn0+OzSAjA2aTGJsJcdK5yf3CeHf8ttS9LNyc+jqEen+ueCt9PpcIYlyuGIrRCGddiNcAJakFJkHvow5NwKnEnN/JI5qL3iOs4kUDmJE1DWaUcE6ShklG8tLM2pdulA8MllUpxvzUw/+PzXEOSro7SLutXDkpMEx3mER877WDuobwUEHMLG59gCTje/l56RFERDNrNm4QY51Ozwrr9bvDCc8TBmDKoZib0F0q84KVW6ITw5ZdkB+24ttm9GHM2Lck9GnyhvMdgruaYcsDwX6T4LF4NK8vhHcnTUjJ6NembHJotwL6k5Tz5uOyUp099+eHAeeHTndHI+GyJSD75mBUkHjWf59fE07xM4zdeIUV8c0IBfgh/WK2WdD8hzRARVSBDb/wUNKu4jGBZcPgaAq2aPSLPSa1e+EidtRWbFBJ2J4znnlUqN2bKrW4bVnV5zmwxtc6B6AIkmZL/JuHwiv3fscx6ftybwnf4Tvt5VtLGLZXES0UJfhcm4IrPvC5kH+rxF4c8INwFGHjbVWyvH8ptpEmUScD3hTD6ugmvrZoYFkZOuLg8ealjIXmFwn84GxVzwJuxeMf9PRmD/EBb5ZzcF8b6lAkHt6iRcF46V4JbR/tzKjELY20zAXDJlGq","X-OriginatorOrg":"valinux.co.jp","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n 78abe31a-9f72-42d9-3215-08de6f8ec208","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:26.5047\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 oQW4PFKOsUwz7LZ98l0R0jip6iVVwi4EcV9b3FmorfwBfzPw9n4wiH8lQTYG6Nbrh0Yvjqlh6z+O0l8ttkc8Yg==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"TYRP286MB5862"},"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\nSigned-off-by: Koichiro Den <den@valinux.co.jp>\n---\nChanges since v8:\n  - Drop the extra size_add() doorbell-offset check, which is generally\n    unneeded when pci_epf_align_inbound_addr() runs. This fixes\n    BAR_RESERVED cases where epf->bar[bar].size can be 0.\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 684f018ea242..4fc53edbceed 100644\n--- a/drivers/pci/endpoint/functions/pci-epf-test.c\n+++ b/drivers/pci/endpoint/functions/pci-epf-test.c\n@@ -92,6 +92,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@@ -731,7 +732,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@@ -741,13 +744,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@@ -759,22 +777,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@@ -804,17 +830,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":["v9","6/7"]}