Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.0/patches/2197144/?format=api
{ "id": 2197144, "url": "http://patchwork.ozlabs.org/api/1.0/patches/2197144/?format=api", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/1.0/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": "<20260217080601.3808847-9-den@valinux.co.jp>", "date": "2026-02-17T08:06:00", "name": "[v8,8/9] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "82cf6c5ecf252504c82bb157c1b8149da16b0fa6", "submitter": { "id": 91573, "url": "http://patchwork.ozlabs.org/api/1.0/people/91573/?format=api", "name": "Koichiro Den", "email": "den@valinux.co.jp" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260217080601.3808847-9-den@valinux.co.jp/mbox/", "series": [ { "id": 492390, "url": "http://patchwork.ozlabs.org/api/1.0/series/492390/?format=api", "date": "2026-02-17T08:05:52", "name": "PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback", "version": 8, "mbox": "http://patchwork.ozlabs.org/series/492390/mbox/" } ], "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2197144/checks/", "tags": {}, "headers": { "Return-Path": "\n <linux-pci+bounces-47433-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=K7C1vUr/;\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-47433-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=\"K7C1vUr/\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=40.107.74.114", "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 4fFXLC3P70z1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 19:07:15 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sto.lore.kernel.org (Postfix) with ESMTP id BA0FE300E28B\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 08:06:50 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 1B4BE2F0C7E;\n\tTue, 17 Feb 2026 08:06:23 +0000 (UTC)", "from OS0P286CU010.outbound.protection.outlook.com\n (mail-japanwestazon11021114.outbound.protection.outlook.com [40.107.74.114])\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 644DA2DF707;\n\tTue, 17 Feb 2026 08:06:21 +0000 (UTC)", "from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by OS7P286MB7132.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:42f::6) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Tue, 17 Feb\n 2026 08:06:14 +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.9611.013; Tue, 17 Feb 2026\n 08:06:14 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771315583; cv=fail;\n b=KrF1cRCt7bWghAldnJV8p7uoV4zKeUoVNZCgQMD4FzTEAF+2Ww698C4O5nHsgMowBfBwxcgGev90Z/GE18JxjWyBnDJfBW44oqdegq5z0lKv/OU8/0h6Ak9TQGaJueVsK0HPsA9tWeXzDQymOGwxg4kAb0Znzz//SkjAjEUW298=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=J5pGICgPmnqX4rKcRu+CGqTCCj6Yllx9Mqni0OevKDId4Uu7NsJe5Si26y+6U2xWDLQ57JRLZZ1Sapvj6pV35uQpmjD5A3UTyQ36nnXu4eCzYC1LhEiq3qr9PjdawDlVMWBBTprvOI1+r3o2KTQHdYPgzAhug1biVxF4EyaYznRYq+X4JRTcJV433+U7fZN6UspNfKgvR2B844Q93mM8ZzlY6KBInGCcoaxDkSOQqpQy8jOe/Ha8QyNCFw10yHqGiQk8B4ZuDneKAtcB3NAfNjWiZC/+rmBSYXuFjdzq1CddxWDkppBhVoS3qXal8phnUkI3OPprFI0IXMcutSDQaQ==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771315583; c=relaxed/simple;\n\tbh=NGUBqpXStEhYVYNtvBHkE3nhOawXzDFxMEJeZIQZrN0=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=GLrLq+rBTytwOda7GlLiX6AGrojIx/NDubDqnEAUoWISKCjyoHOA08W9Q8Zb/5UVUHuA3mREIcn9rpI2Y1dd92wtCRCZxlcMPYaEt80rRbe9pqtQF6Usg+RXhZnHtnsN41gFUnGLRBqndk43OKm6zcNKM0jb0Ztoemhmc10soA4=", "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=pHwHdnhRuoRN5muLu8YkVyQT5oWn/9wyB21jJTKRj0I=;\n b=nqCrJYAL+Q+Id8coMMNiC53PsaQJ7YquHMRnGu0Y+mJ88Agcv85uPtoRzJkjx2+BzVXGxL0Kycj7+a0v2hMY2UkGjlRKuzwG1dgGcd3zOPB7rFeABwyJ3ZLJHim65XI4DhpkiW4EMlFspkLEUEOGH3bMoOJ0C13xKVwEKZnz7t3rq5nQorYeBlEVsZGmsXrQ5pk0i2FGz8RGj6HQeJ34fWcTHXwjqpXGgGFEOYOyJUYqD+V5q8D9JoMwmmuC7d520qmhGRuOEDrr7MAGOIVhAfueMN00CeYbvJGggah5y+nhdk+hI8TrMXWJorMJBB3TaOdffw3DZ5OuYG+dLS/oHw==" ], "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=K7C1vUr/; arc=fail smtp.client-ip=40.107.74.114", "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=pHwHdnhRuoRN5muLu8YkVyQT5oWn/9wyB21jJTKRj0I=;\n b=K7C1vUr/oJw8ZDT8m1POtq4NdZ5swj76PgUYgmSGvXMSKHlf4KEtu+oEY8QR2FXwLsWK/1IPF4D5gcA3yQ+PanD5HbYQ1IgdfsKqmjPOC9kDHj+PbZTvUQ8kx/XjT+s2jp1eubotHkD0AqgleDk1BKLdyDIG0cml1A8NSy00l0g=", "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\theiko@sntech.de,\n\tkishon@kernel.org,\n\tjdmason@kudzu.us,\n\tdave.jiang@intel.com,\n\tallenbh@gmail.com,\n\tcassel@kernel.org,\n\tshawn.lin@rock-chips.com,\n\tFrank.Li@nxp.com", "Cc": "linux-pci@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org,\n\tlinux-rockchip@lists.infradead.org,\n\tntb@lists.linux.dev", "Subject": "[PATCH v8 8/9] PCI: endpoint: pci-epf-test: Reuse pre-exposed\n doorbell targets", "Date": "Tue, 17 Feb 2026 17:06:00 +0900", "Message-ID": "<20260217080601.3808847-9-den@valinux.co.jp>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260217080601.3808847-1-den@valinux.co.jp>", "References": "<20260217080601.3808847-1-den@valinux.co.jp>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "TYCP286CA0112.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:400:29c::7) 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_|OS7P286MB7132:EE_", "X-MS-Office365-Filtering-Correlation-Id": "4d0a01fd-de9e-449d-6eee-08de6dfb6b8f", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|366016|376014|1800799024|7416014|10070799003|921020;", "X-Microsoft-Antispam-Message-Info": "\n eO3U69qKQqjrst7rPjSBxoiHJD2GY/O2GTsjnMsQruFmEsL4OJVOxXvh5JQS1IbnXNNS5XY2Dxtrlap6+STMGbS0re9zMEgA4NNOOj1t+v2SWeKPqzTwv6gb/8bNTLgTeg+Vv+djdEcIBxLd9CW+fpVI0JhtYIdR9n0Gib40ULp03OZzj3ci2HoiI/rp0olEjYcJLvd7X9tFytD51WpCNyHj2tGC6Pt7jZiCaVm5fsD3t1jTqfkwhatSXOR1D2XVZcHpumFqIbIx2wrr4Tb8EFGVsx6WjLiqzega4bB0U5QJf6/JHz2mjmHSpu6UbpaNpeEkqB9ewCDGC5mydmBQfm+p8CjPGMGKH6RMbBaKwsK2gtwPzvnoB1nM6iFDfcOsmaVTBx2XG5xpwgxpyBa+Epz/k5a9Z0dUW91Wzl5MCcTRICGbHIA+f2xUT1ejSSgBbzXTcRNfpXSFPyxf/D4CX6fN4VhSPZ6ix9gDGFIIWRV+KraqQW7NBOyjPjtEE1XqNYtQgHJNRF6w01mgZDDWMp/PYCOvuI08RVTiJse60ZmZewrGAxNCSHaFS29qEXC0bAH3mtqOa8SY8ITYtOE+UFvA+U7Hmkk9KCTmKORoqrx7iJTmbVkDUNpPItlfyGhGbDGrLRMUcwfyZgb8SFF4IWbcR3unmN68KRaE3s3CTKOMsnGeEf+K8mIcKSxLhxNIpTq2NYj2X+4lAJBt3eiCFCsVNhypMAxq0Qd+qiVABeGavm5Q2k/oD3vpkOJSGc1bxNnIsaAbwi9m75nwdkboZZ077GdY0IH90BnuQeCX9sXKKjWO6BK5zv+QHi0cpZe0oEHeAlNGnlkRNVDf1B+zt85RJZwrbDcNTC+9+UJpjmE6WdNwaYl8nBKflBOTNDQZ2rq+Q06TpAO7Scz2sXyNrWd5MGKSZAIhlguRUstLk/u9XCtrEY8nxNveuXa13xK6mnzHtOTK5/lK+uc7UZ7NzI3Vqs0g7KXDvxCkfLy5We2TLhb3YoQe8+CfxiC/Mu+6VkAFwB5lCiExJZuaQkPeuqmvBGSh3WjPNGvRMaP3m40HEp8UBCE4GqgvTDMW4e3dT/JzkJUHsD0aXh0KdfSINKboFoKzg80TtEpuKE/tbJnhNLUpVszOlEjQ4O+5Xph1qi0F0SOQ2sP+y1aOl4MZc97HqbRPryz3szRRHii74eRmnz60PMsKsQxlPX9Pn2pVzFmwv+djr87t584MFq3pXruJQnRzAQrSS4LA68Y+Vrdl1a3M4unrRKENq7tY1KBkztCL/khDjux6xhQJDxoZHVEP57I9yrcJWe+75AFXpgon5jWglrZwJw5dWEKmYAaGwucsrS0BhYJErU4bAN1ooWXM3SgYKjG1bAITVN+49Z+WnfAQk+309l83NcgAgsyzE0VDSLXcCAeWz1pS5TccnB/PH7zwa9ae0/llCY5OJ+UIwwxCEkIEr58Oyj9gDa+9/qKgosFY0IAIbpZlT6/gnaJhndg35qertQCQz1o9LKxN76MrXlqBGPRaL1dpzprkF8EaWHPBfV/MJwBnrVt4SZ/PBFjhUN5U8cLBQhG9epVgcEGQbVCK4nYpOliVJ8QCZV9WJbRNEtVPTXrOis0kbA==", "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)(1800799024)(7416014)(10070799003)(921020);DIR:OUT;SFP:1102;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n lh0IbMj6uh87/zkhFKZaniRne102Dx3jYojJmKdOe0eepog7eUZu3haU7MhJyXz/bAE5ip2DHdik3/z91ErAnbh1FLSqdpMOXHkExLPOLxf5SyaPyZAixy0onPuFovHzDwCDr0M+49fGvwRV1eYOrnbObjAUq1odj4USQh0Z6fe2l3zvW9ao3prCQhnJr2VnDqhYqXOTK4slNLbCnJIIgXkXEEoqompR3hKpjz/fapltzsZRSU9kRBaYi4tPlVLgP+w6aHekMbnRc2X7PQZBnHRrTx4wtRC45wzjr1kJZiA0L90hhLth/MDIgqe90DaRK7owdUyjB9STcUb5RZEe9LrHEVA6WBKhRbHevalqjAKkl8znebPB2XOIK3TDYC1Gakk/NCrD5wxCZXXHjbTzKkHk8iCPvO0XOIep0ueXg0RCbklxzqDCTm/upsiWEUuTjX1SW/cLfjHn5wEztJ/qi/cSqvQpjCr4olfw65JrnqALUCiaer6qZA/nsOdXel0ZcdgUg3BaMIff4FhPzOYE/Fkdy9NxGY3mWk6GGcZBBIkaGAz0hr7ocJP2vj/p8hpP+5W13i1hvno5qe4twLYmP7EySwV7BYGYEXpYH12+kZhhZq2GM+vo45O7ZMkO4GsoZQsSbDGgJRr+OcC8auV6wz7D8z9q/1hG7K0gmDicFEhPo72JKvzMsgOjwMSYf4JXijBw82zbrYZKscsF3uY2qWgxM3gyHZDXp17S3FCu6DlzLs9QRO7UsGTHEQFjFyC0VzPLWoWQu57c9/GiepNKuIEAcTk+ebvbPTqm6l1ekiRuLK6PZWkXqCz70lLgh7zpt6aC7g3w++hxM8+/Mi/QgES2p+tIAGT03uyJZVyDiW1AOTFzujJk2dC2rVlKGx3NiApeFzk3enmeYDovnNJFBXgEjwZvn8LoEXDg2j7HoTLj9oz1UMbzgWLewBB3LdzS8w2H9Du1G1NkHUc7E9am3KWHGZIRW1EOWqyWTgpNQxjbUK/Y0bbII8kgLKWPxzqntPhUI1pEgOYaLbwOnBsuVnUytqHx6pbVXSSd0RE0Y7e8adk79W8mboMSNvYgwU50BFj2BS3UDcrZ8Lr4EgfdQWNQJlLbb8aGPw/rgcUpuFIrCXbDRtacZM9WGC/AhcNfqRZafLGxG6kcTjuUlYM4fGE4ZrZIuRwSUPAUbDjbShusdYQNdOwn+W2WiF9DXy/NqWzPhRMPOMf0Km9zIYMct0Ss/NZnWGx66jWKeYet6iHp6/fIhuSX129NfYXfHKiL2thESLE5JmFltTC/ORvixQ6cz9Qd/HVAkBNGKncvJ4yktpPFCmaWuSHeDHglx7DFs3o8jn+ryNSIiTjp+SlZo9lbJoHk+cwLpkJc7HWL0aWwgzJjxTbojRogVV9cl+mBgFt7vX1aSZTOX9VILKtS+gV+ieF2PVarv0GggPsTiz8X+vG2Z82+LyBNU7h4dl2gnEdmqiIg/tdGwVaR/offvaVKqViIPgI+rQnJ+mFWk4W+Q6tdafbu/T8leo6W9gg+qYeGn+yEEy8xCmt/vnxdyWxwdKahhhqfAP9R7ntIm4iJvBkVmZ9wYBoHxAZtZqy4SvCpyOllSEV8sCzTvgz8lK39wTjZXOITk5EbWLRRLs/qYy0HD1vKov5VcnGnElweZNPvEhbvgSxrBIAwvp4LelaqsGxp39/a0ZJ4ayOno+K/l2kfi/w1BDfu5QvYNdLBF71UuRd5fqLR0JSw28nvaQygSqTeqg2/z8Y9/9zamVwBZ1msVCgI/5vgn8gtiNuz", "X-OriginatorOrg": "valinux.co.jp", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 4d0a01fd-de9e-449d-6eee-08de6dfb6b8f", "X-MS-Exchange-CrossTenant-AuthSource": "TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "17 Feb 2026 08:06:14.2762\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 AqvM8NxSnhJVB+yV7LOK4mvR3bDvxn5d4v4L8PxW0Yc5veH9Sb/5uuEcdhRK/4ytX5I1adzqCzAUwh3H9k94uQ==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "OS7P286MB7132" }, "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\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 | 87 +++++++++++++------\n 1 file changed, 60 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 12705858e502..f5a74108e180 100644\n--- a/drivers/pci/endpoint/functions/pci-epf-test.c\n+++ b/drivers/pci/endpoint/functions/pci-epf-test.c\n@@ -86,6 +86,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@@ -725,7 +726,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@@ -735,13 +738,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@@ -753,22 +771,33 @@ 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+\tif (size_add(offset, sizeof(u32)) > epf->bar[bar].size)\n+\t\tgoto err_doorbell_cleanup;\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@@ -798,17 +827,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": [ "v8", "8/9" ] }