{"id":2234793,"url":"http://patchwork.ozlabs.org/api/1.2/patches/2234793/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260508043543.217179-5-kwilczynski@kernel.org/","project":{"id":2,"url":"http://patchwork.ozlabs.org/api/1.2/projects/2/?format=json","name":"Linux PPC development","link_name":"linuxppc-dev","list_id":"linuxppc-dev.lists.ozlabs.org","list_email":"linuxppc-dev@lists.ozlabs.org","web_url":"https://github.com/linuxppc/wiki/wiki","scm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git","webscm_url":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/","list_archive_url":"https://lore.kernel.org/linuxppc-dev/","list_archive_url_format":"https://lore.kernel.org/linuxppc-dev/{}/","commit_url_format":"https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git/commit/?id={}"},"msgid":"<20260508043543.217179-5-kwilczynski@kernel.org>","list_archive_url":"https://lore.kernel.org/linuxppc-dev/20260508043543.217179-5-kwilczynski@kernel.org/","date":"2026-05-08T04:35:23","name":"[v7,04/24] PCI/sysfs: Split pci_llseek_resource() for device and legacy attributes","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"624eea528ea591ad4c67001f679a7c905684c077","submitter":{"id":86709,"url":"http://patchwork.ozlabs.org/api/1.2/people/86709/?format=json","name":"Krzysztof Wilczyński","email":"kwilczynski@kernel.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20260508043543.217179-5-kwilczynski@kernel.org/mbox/","series":[{"id":503322,"url":"http://patchwork.ozlabs.org/api/1.2/series/503322/?format=json","web_url":"http://patchwork.ozlabs.org/project/linuxppc-dev/list/?series=503322","date":"2026-05-08T04:35:20","name":"PCI: Convert all dynamic sysfs attributes to static","version":7,"mbox":"http://patchwork.ozlabs.org/series/503322/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2234793/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2234793/checks/","tags":{},"related":[],"headers":{"Return-Path":"\n <linuxppc-dev+bounces-20588-incoming=patchwork.ozlabs.org@lists.ozlabs.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=d1n/BPYa;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org\n (client-ip=2404:9400:21b9:f100::1; helo=lists.ozlabs.org;\n envelope-from=linuxppc-dev+bounces-20588-incoming=patchwork.ozlabs.org@lists.ozlabs.org;\n receiver=patchwork.ozlabs.org)","lists.ozlabs.org;\n arc=none smtp.remote-ip=172.234.252.31","lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org","lists.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=d1n/BPYa;\n\tdkim-atps=neutral","lists.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=kernel.org\n (client-ip=172.234.252.31; helo=sea.source.kernel.org;\n envelope-from=kwilczynski@kernel.org; receiver=lists.ozlabs.org)"],"Received":["from lists.ozlabs.org (lists.ozlabs.org\n [IPv6:2404:9400:21b9:f100::1])\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 4gBbt25JTKz1yJq\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 08 May 2026 14:36:26 +1000 (AEST)","from boromir.ozlabs.org (localhost [127.0.0.1])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 4gBbsd529Dz2xfR;\n\tFri, 08 May 2026 14:36:05 +1000 (AEST)","from sea.source.kernel.org (sea.source.kernel.org [172.234.252.31])\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 lists.ozlabs.org (Postfix) with ESMTPS id 4gBbsc70dgz2xPb\n\tfor <linuxppc-dev@lists.ozlabs.org>; Fri, 08 May 2026 14:36:04 +1000 (AEST)","from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58])\n\tby sea.source.kernel.org (Postfix) with ESMTP id 769E043560;\n\tFri,  8 May 2026 04:36:03 +0000 (UTC)","by smtp.kernel.org (Postfix) with ESMTPSA id 0987DC2BCB4;\n\tFri,  8 May 2026 04:35:59 +0000 (UTC)"],"ARC-Seal":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707; t=1778214965;\n\tcv=none;\n b=Tn+onhK1aZFu+DB9Rr031eD9Xz7kMmvZ2KvBQvEfhhsxEUg6jDGJ4iR7vht7QLBHGJto9nurQRZL8788QP2bOwAUk378u3u8A4HTzHZOIMEpp0yWg0HFNrbw0DGulB13eD0mOTElnx0QxrpVb6YB3pjMNH/021QuSjsowW+j6uNaYw4ZDK3Sbci+bYF0o+HZMR8HVYGVzVXF0QI1MZaSbFFr+Nyzey5cUY0u95fHSllmLxiyJ3iTtS1CKx1ak0NbwyO/6tI1Y3VkAl1wJy4uCUvV3oA2QvBNsOjXzle5M2mbrBKlLG9hvDNcVsha6/R1PEzY/i1oILOBhamNJO20sg==","ARC-Message-Signature":"i=1; a=rsa-sha256; d=lists.ozlabs.org; s=201707;\n\tt=1778214965; c=relaxed/relaxed;\n\tbh=hL5eYVsSUY1Is3NsEHFXNssm619EpveDtS/ShwL5AvQ=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version:Content-Type;\n b=bbj+J7T2rvUXQM8SlHNrS2s18yJI0NYcKhJ+V4DuelZ/nCmmhg8KuL7XA+p8xgZKH1SEPZvSqqerJl4bXeEtAX7nRV4PWSG9apiIy3LOxNQJleO3WS8+YhiWLCvjDZ9eYja8Jc93pYWLGJnXEerSDYWgDmWNXoFOmAPvlVDxrrUebOoODiG4rPxPT0pZlpu1bDgBzcdrygye0/QKfhigasLBdftBcm+4Wr6Y+ReGBPTZtDHPB1jKhZ0GlOa40EyR/KtAH1AeAB3NRvWpJPkqIHofhb4ADODBlr5Vo+27hNgOf90SMyOH5o7sPr7NUduAMRMuQaKJiMPmfpWzC/c5DQ==","ARC-Authentication-Results":"i=1; lists.ozlabs.org;\n dmarc=pass (p=quarantine dis=none) header.from=kernel.org;\n dkim=pass (2048-bit key;\n unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256\n header.s=k20201202 header.b=d1n/BPYa; dkim-atps=neutral;\n spf=pass (client-ip=172.234.252.31; helo=sea.source.kernel.org;\n envelope-from=kwilczynski@kernel.org;\n receiver=lists.ozlabs.org) smtp.mailfrom=kernel.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org;\n\ts=k20201202; t=1778214963;\n\tbh=im9Vn3gtovnQ43+zgtWx6f84+VVW78Es3AfaAKaONdk=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=d1n/BPYaRi1gXC3Gz3HZJeLlxIu+lFnW11fuqw0pVb89lIUIWwYU4WmAza3o4ig4t\n\t 22DZdvjuymZMCXCo6nwAeRN8B6bHSvH9UbTPn9LsZrSXq6Zf9+crYxRLW0PW9JABL4\n\t QJNRjDjs8lPwPBHuDQ2h0KyRz5iMS+mFwVq5yKtF6It/TzsiLsRCpuxCN3ICjFQspn\n\t JVLRQT0tisZJehAoXdXY3zHZ4rJuppdVyHdCMSGpH+4D9RK+abpDTr+hvUnr61T9lG\n\t B27sMCi4bKDZ/aHuFVEB1j5LiAyYQD0te5/ZAhfb0cZolKrYbv+2wnYc7BbH8JzuTp\n\t BA3TWelz08Osw==","From":"=?utf-8?q?Krzysztof_Wilczy=C5=84ski?= <kwilczynski@kernel.org>","To":"Bjorn Helgaas <bhelgaas@google.com>","Cc":"Bjorn Helgaas <helgaas@kernel.org>,\n Manivannan Sadhasivam <mani@kernel.org>,\n Lorenzo Pieralisi <lpieralisi@kernel.org>,\n Alex Williamson <alex@shazbot.org>, Magnus Lindholm <linmag7@gmail.com>,\n Matt Turner <mattst88@gmail.com>,\n Richard Henderson <richard.henderson@linaro.org>,\n Christophe Leroy <chleroy@kernel.org>,\n Madhavan Srinivasan <maddy@linux.ibm.com>,\n Michael Ellerman <mpe@ellerman.id.au>, Nicholas Piggin <npiggin@gmail.com>,\n Dexuan Cui <decui@microsoft.com>,\n =?utf-8?q?Krzysztof_Ha=C5=82asa?= <khalasa@piap.pl>,\n Lukas Wunner <lukas@wunner.de>, \"Oliver O'Halloran\" <oohall@gmail.com>,\n Saurabh Singh Sengar <ssengar@microsoft.com>,\n Shuan He <heshuan@bytedance.com>, Srivatsa Bhat <srivatsabhat@microsoft.com>,\n\t=?utf-8?q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>,\n linux-pci@vger.kernel.org, linux-alpha@vger.kernel.org,\n linuxppc-dev@lists.ozlabs.org","Subject":"[PATCH v7 04/24] PCI/sysfs: Split pci_llseek_resource() for device\n and legacy attributes","Date":"Fri,  8 May 2026 04:35:23 +0000","Message-ID":"<20260508043543.217179-5-kwilczynski@kernel.org>","X-Mailer":"git-send-email 2.54.0","In-Reply-To":"<20260508043543.217179-1-kwilczynski@kernel.org>","References":"<20260508043543.217179-1-kwilczynski@kernel.org>","X-Mailing-List":"linuxppc-dev@lists.ozlabs.org","List-Id":"<linuxppc-dev.lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev+help@lists.ozlabs.org>","List-Owner":"<mailto:linuxppc-dev+owner@lists.ozlabs.org>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Archive":"<https://lore.kernel.org/linuxppc-dev/>,\n  <https://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Subscribe":"<mailto:linuxppc-dev+subscribe@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-digest@lists.ozlabs.org>,\n  <mailto:linuxppc-dev+subscribe-nomail@lists.ozlabs.org>","List-Unsubscribe":"<mailto:linuxppc-dev+unsubscribe@lists.ozlabs.org>","Precedence":"list","MIME-Version":"1.0","Content-Type":"text/plain; charset=UTF-8","Content-Transfer-Encoding":"8bit","X-Spam-Status":"No, score=-0.6 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED,\n\tDKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS\n\tautolearn=disabled version=4.0.1 OzLabs 8","X-Spam-Checker-Version":"SpamAssassin 4.0.1 (2024-03-25) on lists.ozlabs.org"},"content":"Both legacy and resource attributes set .f_mapping = iomem_get_mapping,\nso the default generic_file_llseek() would consult iomem_inode for the\nfile size, which knows nothing about the attribute.  That is why custom\nllseek callbacks exist.\n\nCurrently, the legacy and resource attributes have .size set at creation\ntime, as such, using the attr->size is sufficient.  However, the upcoming\nstatic resource attributes will have .size == 0 set, since they are const,\nand the .bin_size callback will be used to provide the real size to kernfs\ninstead.\n\nThe legacy attributes operate on a struct pci_bus, not struct pci_dev,\nso calling to_pci_dev() on them would be invalid.\n\nThus, split pci_llseek_resource() into two functions:\n\n  - pci_llseek_resource(), which derives the file size from the BAR\n    using pci_resource_len().\n\n  - pci_llseek_resource_legacy(), which uses attr->size directly.\n\nUpdate the dynamic legacy attribute creation to use the new\npci_llseek_resource_legacy() callback.\n\nThe original pci_llseek_resource() was added in commit 24de09c16f97\n(\"PCI: Implement custom llseek for sysfs resource entries\").\n\nTested-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>\nSigned-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org>\n---\n drivers/pci/pci-sysfs.c | 21 +++++++++++++++++----\n 1 file changed, 17 insertions(+), 4 deletions(-)","diff":"diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c\nindex 2e4e226e78d4..2280b7edb41f 100644\n--- a/drivers/pci/pci-sysfs.c\n+++ b/drivers/pci/pci-sysfs.c\n@@ -881,13 +881,26 @@ static const struct attribute_group pci_dev_config_attr_group = {\n  * llseek operation for mmappable PCI resources.\n  * May be left unused if the arch doesn't provide them.\n  */\n+static __maybe_unused loff_t\n+pci_llseek_resource_legacy(struct file *filep,\n+\t\t\t   struct kobject *kobj __always_unused,\n+\t\t\t   const struct bin_attribute *attr,\n+\t\t\t   loff_t offset, int whence)\n+{\n+\treturn fixed_size_llseek(filep, offset, whence, attr->size);\n+}\n+\n static __maybe_unused loff_t\n pci_llseek_resource(struct file *filep,\n-\t\t    struct kobject *kobj __always_unused,\n+\t\t    struct kobject *kobj,\n \t\t    const struct bin_attribute *attr,\n \t\t    loff_t offset, int whence)\n {\n-\treturn fixed_size_llseek(filep, offset, whence, attr->size);\n+\tstruct pci_dev *pdev = to_pci_dev(kobj_to_dev(kobj));\n+\tint bar = (unsigned long)attr->private;\n+\n+\treturn fixed_size_llseek(filep, offset, whence,\n+\t\t\t\t pci_resource_len(pdev, bar));\n }\n \n #ifdef HAVE_PCI_LEGACY\n@@ -1022,7 +1035,7 @@ void pci_create_legacy_files(struct pci_bus *b)\n \tb->legacy_io->read = pci_read_legacy_io;\n \tb->legacy_io->write = pci_write_legacy_io;\n \t/* See pci_create_attr() for motivation */\n-\tb->legacy_io->llseek = pci_llseek_resource;\n+\tb->legacy_io->llseek = pci_llseek_resource_legacy;\n \tb->legacy_io->mmap = pci_mmap_legacy_io;\n \tb->legacy_io->f_mapping = iomem_get_mapping;\n \tpci_adjust_legacy_attr(b, pci_mmap_io);\n@@ -1038,7 +1051,7 @@ void pci_create_legacy_files(struct pci_bus *b)\n \tb->legacy_mem->attr.mode = 0600;\n \tb->legacy_mem->mmap = pci_mmap_legacy_mem;\n \t/* See pci_create_attr() for motivation */\n-\tb->legacy_mem->llseek = pci_llseek_resource;\n+\tb->legacy_mem->llseek = pci_llseek_resource_legacy;\n \tb->legacy_mem->f_mapping = iomem_get_mapping;\n \tpci_adjust_legacy_attr(b, pci_mmap_mem);\n \terror = device_create_bin_file(&b->dev, b->legacy_mem);\n","prefixes":["v7","04/24"]}