Re: `io{re,un}map()` build error in s390 under `!CONFIG_HAS_IOMEM`

"Danilo Krummrich" <[email protected]> Tue, 04 Aug 2026 13:10:35 +0200
Newsgroups org.kernel.vger.rust-for-linux,dev.linux.lists.driver-core,org.kernel.vger.linux-arch,org.kernel.vger.linux-s390
Message-ID <[email protected]>
On Tue Aug 4, 2026 at 12:36 PM CEST, Arnd Bergmann wrote:
> On Tue, Aug 4, 2026, at 09:13, Heiko Carstens wrote:
>> On Mon, Aug 03, 2026 at 10:09:08PM +0200, Danilo Krummrich wrote:
>>> On Mon Aug 3, 2026 at 9:56 PM CEST, Arnd Bergmann wrote:
>>> > In theory you should be able to use rust code without PCI MMIO
>>> > support, but I can't see any practical downsides to making rust
>>> > 'depends on HAS_MMIO' to avoid having to add those #ifdef.
>>>=20
>>> I think the implications should be minor without making Rust depend on
>>> CONFIG_HAS_IOMEM.
>>>=20
>>> I just sent out a fix [1]; the only annoying part is [2], but we should=
 change
>>> those doc-tests anyway. For the one in rust/kernel/io.rs we already did=
 in
>>> driver-core-next.
>>>=20
>>> [1] https://lore.kernel.org/driver-core/20260803200249.3494259-1-dakr@k=
ernel.org/
>
> This looks like you still provide the rust version of ioremap(),
> turning what is supposed to be a link failure into a runtime
> error.

Which is the standard for many core APIs, such as [1]. However, I do agree =
that
in this case the correct fix would be to have all architectures provide the
stubs rather than the Rust code.

However, there's already a precedent for this in the kernel, e.g. in [2]. O=
f
course, it would be better to clean this up, but depending on whether there=
's
more architectures having this issue (I didn't check) that's separate from =
a
fix.

[1] https://elixir.bootlin.com/linux/v7.1.5/source/include/linux/regmap.h#L=
1809
[2] https://elixir.bootlin.com/linux/v7.1.5/source/include/linux/device/dev=
res.h#L115

>> I'm wondering if it would make sense to make HAS_IOMEM always available
>> on s390, even though it doesn't make too much sense without PCI.
>> But at least it would make s390 again a bit less special.
>
> I see that with CONFIG_PCI=3Dy, s390 already falls back to
> generic_ioremap_prot() and just maps any phys_addr_t into the
> page table as PAGE_KERNEL, regardless of whether this is an MMIO
> address or not.
>
> The simple change below would just extend that behavior to !PCI
> and make that consistent with CONFIG_PCI=3Dy on machines without
> actual PCI hardware. Of course any code that might rely on this
> is now a bug that likely never gets caught at build time.
>
> This still relies on implementing the __raw_* helpers as nop
> to have the same behavior as the PCI=3Dy version, as the generic
> version would just end up dereferencing the invalid pointers.

As mentioned, I didn't check, but if this is the only architecture causing =
those
issues that'd be the better fix of course.

However, IIUC, your patch below would make ioremap() and friends silenty su=
cceed
and only the accessors would prevent undefined behavior?

In this case I still think ioremap() should just fail.