Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2196639/?format=api
{ "id": 2196639, "url": "http://patchwork.ozlabs.org/api/patches/2196639/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260215163847.3522572-9-den@valinux.co.jp/", "project": { "id": 28, "url": "http://patchwork.ozlabs.org/api/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, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260215163847.3522572-9-den@valinux.co.jp>", "list_archive_url": null, "date": "2026-02-15T16:38:46", "name": "[v7,8/9] PCI: endpoint: pci-epf-test: Reuse pre-exposed doorbell targets", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "e5b44a0226514986aa551ae6006851231ee37557", "submitter": { "id": 91573, "url": "http://patchwork.ozlabs.org/api/people/91573/?format=api", "name": "Koichiro Den", "email": "den@valinux.co.jp" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/linux-pci/patch/20260215163847.3522572-9-den@valinux.co.jp/mbox/", "series": [ { "id": 492228, "url": "http://patchwork.ozlabs.org/api/series/492228/?format=api", "web_url": "http://patchwork.ozlabs.org/project/linux-pci/list/?series=492228", "date": "2026-02-15T16:38:38", "name": "PCI: endpoint: pci-ep-msi: Add embedded doorbell fallback", "version": 7, "mbox": "http://patchwork.ozlabs.org/series/492228/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2196639/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2196639/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "\n <linux-pci+bounces-47319-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=OTKkEZTd;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.105.105.114; helo=tor.lore.kernel.org;\n envelope-from=linux-pci+bounces-47319-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=\"OTKkEZTd\"", "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.229.74", "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 tor.lore.kernel.org (tor.lore.kernel.org [172.105.105.114])\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 4fDWrJ6d8Hz1xpY\n\tfor <incoming@patchwork.ozlabs.org>; Mon, 16 Feb 2026 03:41:20 +1100 (AEDT)", "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby tor.lore.kernel.org (Postfix) with ESMTP id 1683D301474F\n\tfor <incoming@patchwork.ozlabs.org>; Sun, 15 Feb 2026 16:39:44 +0000 (UTC)", "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 6BD7A2F83DE;\n\tSun, 15 Feb 2026 16:39:16 +0000 (UTC)", "from TY3P286CU002.outbound.protection.outlook.com\n (mail-japaneastazon11020074.outbound.protection.outlook.com [52.101.229.74])\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 D9D622F617D;\n\tSun, 15 Feb 2026 16:39:14 +0000 (UTC)", "from TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:38f::10)\n by OSCP286MB5196.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:34b::5) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Sun, 15 Feb\n 2026 16:39:08 +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; Sun, 15 Feb 2026\n 16:39:08 +0000" ], "ARC-Seal": [ "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771173556; cv=fail;\n b=KT2zUWqm6wKxeUOYL35Gh+B90wi4R9gT8QUUdZ2Au/9CYly7xcbGRmv/t2ZSBMi7WLv3WQF7M9QTI/i8JYv/I33c+bfvAp8fia7MLcKytdb6L6IwfwAqBoacbpjD6JX80FWbG+lh5RhtLhRtwXJ3VWRyWQrVUhrG1b2aNDZkyN0=", "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=COMfuoHhgdG8EIq3e8TfRfK0Xz5QEUoY67WmbPqXIsRgiRJZoRU+m1aFYEjgXP3sMsEaJQCBvF1IgW3PRLixHCHCw97QfoYBy/H5LX3fP+qGAInGQhuN854KoxzU58Hki8Cc6POS45BfKqByB6WAKQuQ6xqCITMj5E5wj/blD0MQ1ZjuvHmk6spF/t75Z0zEEuiCUhd4H95xkPnpgQhX9BdaE13ZZ+3f3PDEYrCgYqG5tc36utMNwSojzvnyDT+1Lhnq3bPiokWj6BCk2XaehuWFLj3Z/MWBXmgXvjwNbA7X6htLHpdcqdlTgZz5yfrb7qQXOmFgymhX5VRPxnc3cg==" ], "ARC-Message-Signature": [ "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771173556; c=relaxed/simple;\n\tbh=7GVlESclAxEbWcjxLLAmeANTgDo/YehQPop3OS1jgrw=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t Content-Type:MIME-Version;\n b=baYBcTqzxI2dleIbJS+oAxc0CIvcxRULm7YvRDM8KfpPCMUkbd0LUVD+hqRi2vV0lYqUNKmyFE7KL9M0wpOlt+qclPe13eJ/EgyefzRW9mZJIplASAIV5Ss1OYrQ3jlrntljmY8p3F8DtKjr9jxIAXvHTbu2rfOtYfSikBQMVGc=", "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=c8xqUzwhffuejSxAvNC4quupZc4ukQb8YBC/L5g5yYw=;\n b=LBFw3eQ9lsASbr+uzpuYB8EwTP+VgrJq30ybNE46+0PCEgJEFbe2s8TLJN69BfN/VR5cPguGHqh41eW+mjPMo0Rm/Wrun6Zplf730B/em0v7XsnmlIsBG3GASvkzXWt7ZRMx1p9Wo8AZol7R96KJ9lpGnRxswz3UeNWC56aVet/BFdtvASp1/gOZ1wPATU2FmDNcKndNrIaTmfx9lSc3KLUP8lMmxAFa1+C5Mucs2q6Gda3dbT/szPQ01g8RDi8CYeRLPMd3e+LKO2sgUooVAhWnOu8wRDupXOSBciYMqWW1sAsuKbQ1VV/HtYFBeA0z3Vzwz/n/7D2jz2q4z5BExg==" ], "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=OTKkEZTd; arc=fail smtp.client-ip=52.101.229.74", "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=c8xqUzwhffuejSxAvNC4quupZc4ukQb8YBC/L5g5yYw=;\n b=OTKkEZTdpPZZ8lfoUXpnGIdQrmUCOF5TW4uR4mFggUOj2QDcOpbcWENcHbLN1oL8hlzazCLN9FS6wTukIxkIyuVo+oednmdcKGgzJezhuDmW8m6lwRGpfKONQSlK7tdN+KKEuJNCV8Ook28/JvT8eW/KaktVyK7+E+BkaVK63wY=", "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 v7 8/9] PCI: endpoint: pci-epf-test: Reuse pre-exposed\n doorbell targets", "Date": "Mon, 16 Feb 2026 01:38:46 +0900", "Message-ID": "<20260215163847.3522572-9-den@valinux.co.jp>", "X-Mailer": "git-send-email 2.51.0", "In-Reply-To": "<20260215163847.3522572-1-den@valinux.co.jp>", "References": "<20260215163847.3522572-1-den@valinux.co.jp>", "Content-Transfer-Encoding": "8bit", "Content-Type": "text/plain", "X-ClientProxiedBy": "TY4P286CA0080.JPNP286.PROD.OUTLOOK.COM\n (2603:1096:405:36d::12) 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_|OSCP286MB5196:EE_", "X-MS-Office365-Filtering-Correlation-Id": "419f58ac-26ef-480f-1f58-08de6cb0bd98", "X-MS-Exchange-SenderADCheck": "1", "X-MS-Exchange-AntiSpam-Relay": "0", "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016|921020;", "X-Microsoft-Antispam-Message-Info": "\n peDVLM8joTfoUcj/9z5kH6ol6V08Q32hBhUm9MFVUFplU9JWS62QmPT+leG3lU/DFKQDGjgeGKaF/CyU/gyQgnRvYWfjB4MHcQnclqyZXexCbdhG0NBp/M1p1T8HhaQPXAf5PjGW7PiHHWpyM5TGI1kvV6NPbOwWbPpILpfXOxSOqwmx0JR4mx8P8RUCS0c1bOM53Tjt/wUX05PIOn7yiaHkLL0DVY9MnqSOFu3k08LEKfvkXQ+s9L7PRETKeCPvfQOtTHvy+rgpYL58sfmLK5KRTGRo2/i8hPN/PKKqjvN+Ca2eEVRV9fWgLJhZpK6O3IFpuiSUViLGINrBBbYGPFYTfVlQxOQ1pKCu5wPH1lQKEho8+mFHrFzPXrgXibFaC5sPY7zOzEtFLQ9Zt9QGQs0egZWGq/VeSg6Y5ApPcZArGPC8PiCoptmcGquhrGOBRpdv5qFAT9qm3Xjew9RR6jl+NpAG/DQlfFPtzlBSHm3qpbfYzx+tcb2s255GogFuij4fFSwdF5w06BoKs5wxwHGrbzJFiry9p3bvTmqiVVCtxHMM2pE8RFSWtkLv8lg0PxWnpzZSGufnMgE9Cwb2km9zSGUVv5Twd0PMVeNnc2baW+FBiKg2BYq6SudBhzQmjfaZovnwNZ4lVE3yuwbmHZiZtys/GGxgyts4URvHFdptiIQHMuouLUb8OxUL6Y3MNXmvBQ4QDRTn5PlOkP0VroHl/STVtepoBT7d37uPU1/vibmozP1YlUmPobh9wRyfqrSPIFSCw1AdBNMc+XocVvggmv14MwyquD91CDJypaNbSIGZzDf/vQnOweiJDoniG29+BhYOrOXeUY4OkpsCM4fi82GXLVTFXTw4NGruz8nAwHWECUqt6jy1JmWbJr9l+u3NofGXy/QZFZfDiMXbL8kmSMtug+gAXwUpojYPywqa4EV4gGYPZUrB5lYeFM5TkdveFaoU3kJCpN4ynmKVwtReA7APvGyocGck9x1cQbSEaj7yti+LkXjX35FZhYJ458+jG+jaFnu21MItwgqNWzZZQq1WSphE6ETTKGxsuAU8UA0aRMA4iyZMM44SSKpjcXxNSfY3Qw3x5LveHzyJoXoetX2Q+Ailhn/+DRFFaGyizm0M9On+S+C5eC3B+vxQY8aSbx7+C3+g8wai2A5MWyqNp16SpTaJL4mPmyRaJ+FSwvV1MWa2PBj0q+mlGfGQNuM7iKkNRtM8yeni+lbDGL1U9WUKaGzIHJOFddPR3G+GGlsiURt7wG/1YJLAnvbuRTytPv2yfi8+A7l4ZggBbp4cHffeGB3rp327N88shjhgmEWhc1siNp+x4u8Sk7lFYQfN3lXWMA7KBE0HV76E56ayuI3g/mJqR46PC7oTh7VFpU9QPysx3gwpurx10+f0euG8bLH9DWtKlk27ro9ofooCseC7/SvfEr1MyBN/YKLTJUprPHyRSFvEFaBfOEWEmdzw2uow4i0tCx8/mAeJgR574TRNrMWREQF++M9kwJA7GfN1jr1pknArlD3W1zKpAisba3tABk1zyJFYnq5b6RrQQzn+sJS78EK7LNFbOyqurq27cEuLahH9SVAU1Go++3vA1l+WbQO/9HFVQljWJg==", "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)(1800799024)(10070799003)(7416014)(376014)(366016)(921020);DIR:OUT;SFP:1102;", "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1", "X-MS-Exchange-AntiSpam-MessageData-0": "\n d2mcQDv+WdipefqRulofIC1m0mCRoaEEfMGquKi3QVoF4TSkD6wlrHskjgmUbfqmTIElrGDRykKiEKzfx4fMoXxBCeeXI3aUVJ0jT731i7Zewg1ZMEUD53+RobyqAslaBPZPG/rgRFu2zFT33T8fE2SliqN+ocM6fDplh1NDTmvLQQQ7Gc73GT6QSgXBoZUIebPIU49jMVFRbDQmbcVeINE0cR8jCA3i8Zfx19T6h4f7G0S7m1MOj1FUoudBRagWH52ZTu5dYrsCTQGfqf8k2w9KWie6YLy4A4LVhi0fe6tiGwPFgXUkPynuJUdAlq0yJfrOUH/TblixGQ+L8At11+zs/9dxGSvxM8lur5UiDQF2RnIcOu0F5ug0NJb58s+B+RQGE+M9LGWf/l8DlqUQOTSrAMRbOYyUTN2F8dxJtEBANBshokxRwByR/BxUdBsCBGE5MS1jHKTIhG10JYVvNbJ20OI0xrXfZjkgdjeBSBknm3Okr76P8cqhuSfWT7S/Gv3sN+4gmA6dWMzSBYTfx+coVHZ8il/Kbxm7oFkgBexMVVCIgnTB68cReKccERWYUOGLo/ROhPiasbxL00gk+1W/Kykyw8/hiIcsb+CPkoTjPOmM5FkN9sYOHaM2o65hcm8ze/M+mrF4DMilOmGLiMJ24I49pU23UJKEQyIPiRvorm5sgER5qNjxfkQqKNRZkx8wfBAjbBe8wZfh7n6D3x5Z/Y3iO/w9O8Y5wbNM3Pc7KJ2Mv8qS4m/QChgUnFh6Xf5k/G/7o0BYBwCyDWqZZ6gEKq+DhaQ1RdLfNplCy6gEc3yCGirp57oNkDZZC8iwISafGf+Q6zSZPyXDIcNKyf4v3JA5X6x7nbDcQVR5TuOFDnIiifE2z6MWv1zFNR1tWOrihIuDL6mqhdKHb1OzSHduoAgKYAnj2tDmmuaIN7XbckMv4eTS6LeuSZWbe20XERdBXep4JDGgW6Y4N6lETPQzfhTRhLlfckKfmm54jTZC2cqpRrJ1EeKrveTB8JgUEk+IVHPinkM418HTsCOwKJ90gFmr3I3QgLd5XDlPSIYvJpZIXVQdxASGcrhTSmDIUV8/NKUFHohIutHsUe8U89FXPtEFhUM9A8fvlqxd2+34u1bGQu/ljAl/GaNNQ/nrQEzJx0ioafyNV/MIhx3BdFevptmNrQwv78zWeU3L0PI7VOckteorVIw/UTNX5blNR6eh4Gy67mvTkVOyykMLXuwCCojkHqHfn5JchktWX6g9jqriGgvowNhA/0MUCCsvxqYg062wSwL4o5C/3Ye9ZUU4qNwv1mrFNgQ/y5GiGH7DljASR70eQlBpKHNdf4BIhKGfOarOftykzMt4SVXSYzM2br7INp3NsZApyJbjZzkAGrJ2bFixiCTkwgi4/We6fBq6QFs9Vu3FNCIp3yoiGYaMTlX0aGENkdbkgG3oUs916ZmrB510uAUYMfPZbqssMc06G3EdlcsXzIO8gFhJZqMcxKVrXKI1q5E/LP1R7KYqlGchHjZ+S15jljcpDiRVL2yzUSkCQe/1lc6mNnl8UDP6Udjci2VrlNOmS3Uc6RN70y14c9tmAWI0RpcHUpfSPTmYA5nJ8YMc8edzP3QnOKWg/rxfVe8ppvGUSbRRUdR0ELoWKqHc8zp55DN1/y6JavIW84rbEN4SNmSqFlH+JDC6wuhzt2jqheSnxDy8JLPTn4GUwdIfD3MhMWs+t3/dr2Wm8chrSnUCwLrvbDBinQ2xjicl0JnpdSVlfWzMkw9WY73PY/k9qdd/d//8lhIF", "X-OriginatorOrg": "valinux.co.jp", "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 419f58ac-26ef-480f-1f58-08de6cb0bd98", "X-MS-Exchange-CrossTenant-AuthSource": "TY7P286MB7722.JPNP286.PROD.OUTLOOK.COM", "X-MS-Exchange-CrossTenant-AuthAs": "Internal", "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "15 Feb 2026 16:39:08.4492\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 uteHzoVgqq+kJlqckeGdgSRS93FTPH0JZaoqxF+BYrLTSZin6XyT0yGkEynEdm4ssBOKcdF8m/0X3kcRiLTrIQ==", "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "OSCP286MB5196" }, "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---\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 defe1e2ea427..7b0955b4c703 100644\n--- a/drivers/pci/endpoint/functions/pci-epf-test.c\n+++ b/drivers/pci/endpoint/functions/pci-epf-test.c\n@@ -87,6 +87,7 @@ struct pci_epf_test {\n \tconst struct pci_epc_features *epc_features;\n \tstruct pci_epf_bar\tdb_bar;\n \tbool\t\t\tdb_irq_requested;\n+\tbool\t\t\tdb_bar_programmed;\n \tsize_t\t\t\tbar_size[PCI_STD_NUM_BARS];\n };\n \n@@ -730,7 +731,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@@ -742,13 +745,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@@ -761,25 +779,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_doorbell_cleanup;\n+\t\tif (ret)\n+\t\t\tgoto err_doorbell_cleanup;\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_doorbell_cleanup;\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_doorbell_cleanup;\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@@ -806,17 +832,21 @@ static void pci_epf_test_disable_doorbell(struct pci_epf_test *epf_test,\n \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": [ "v7", "8/9" ] }