Re: [PATCH] PCI/sysfs: Return -EINVAL for unsupported I/O BAR mmap
Krzysztof WilczyĆski <[email protected]> Sat, 1 Aug 2026 13:08:44 +0900
| Newsgroups | org.kernel.vger.linux-pci |
|---|---|
| Message-ID | <20260801040825.GF3183355@rocinante> |
Hello,
> Currently, mmap() of a resourceN file for an I/O BAR fails with
> -ENODEV on architectures where arch_can_pci_mmap_io() is 0, such as
> x86, because the attribute has no mmap callback there and the error
> comes from the generic kernfs dispatch.
>
> This is a side effect of commit e854d8b2a82e ("PCI: Add
> arch_can_pci_mmap_io() on architectures which can mmap() I/O space"),
> which removed the mmap callback from the I/O resource attribute on
> these architectures. Previously the request reached the architecture
> mmap code and failed with -EINVAL, and the same commit deliberately
> kept -EINVAL for the identical operation on the procfs interface, so
> the two PCI userspace interfaces have disagreed ever since.
>
> Therefore, add a pci_mmap_resource_io_unsupported() callback that
> returns -EINVAL and use it as the mmap handler of the I/O resource
> attribute when arch_can_pci_mmap_io() is 0, so the failure is
> produced deliberately by PCI code, consistent with the procfs
> interface and with the behaviour before e854d8b2a82e.
>
> Architectures where arch_can_pci_mmap_io() is non-zero keep the real
> pci_mmap_resource_uc() handler and are unaffected. The mmap() fails
> either way. Only the reported error changes from -ENODEV to -EINVAL.
Applied to the sysfs branch.
Thank you!
Krzysztof