Rust for Linux List
 help / color / mirror / Atom feed
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Danilo Krummrich" <dakr@kernel.org>
Cc: "Heiko Carstens" <hca@linux.ibm.com>,
	"Niklas Schnelle" <schnelle@linux.ibm.com>,
	"Gerd Bayer" <gbayer@linux.ibm.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Vasily Gorbik" <gor@linux.ibm.com>,
	"Alexander Gordeev" <agordeev@linux.ibm.com>,
	driver-core@lists.linux.dev,
	"Christian Borntraeger" <borntraeger@linux.ibm.com>,
	"Sven Schnelle" <svens@linux.ibm.com>,
	linux-s390@vger.kernel.org,
	Linux-Arch <linux-arch@vger.kernel.org>,
	"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Tamir Duberstein" <tamird@kernel.org>,
	"Alexandre Courbot" <acourbot@nvidia.com>,
	"Onur Özkan" <work@onurozkan.dev>,
	rust-for-linux@vger.kernel.org
Subject: Re: `io{re,un}map()` build error in s390 under `!CONFIG_HAS_IOMEM`
Date: Tue, 04 Aug 2026 14:02:10 +0200	[thread overview]
Message-ID: <f0e0c069-23eb-443a-800d-267cfe4c2aa2@app.fastmail.com> (raw)
In-Reply-To: <DKG43HF7A2EN.PC1LBC0QUP93@kernel.org>

On Tue, Aug 4, 2026, at 13:10, Danilo Krummrich wrote:
> On Tue Aug 4, 2026 at 12:36 PM CEST, Arnd Bergmann wrote:
>> On Tue, Aug 4, 2026, at 09:13, Heiko Carstens wrote:
>>>
>>>> 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.
>>>> 
>>>> [1] https://lore.kernel.org/driver-core/20260803200249.3494259-1-dakr@kernel.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.

We have both types of interfaces in the kernel. For HAS_IOMEM and HAS_IOPORT,
the link failure is intentional, as it helps identify drivers that need
a Kconfig dependency and are either unusable or potentially harmful if loaded
without this.

Having empty stubs only really makes sense for things like LED support
where a driver calling the interfaces can continue to work
correctly when the interface is compile-time disabled.

> However, there's already a precedent for this in the kernel, e.g. in [2]. Of
> 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.

arch/um is the only other one that does not always enable HAS_IOMEM,
though most m68k targets don't have any support for ISA/PCI style
MMIO or PIO and probably should not enable it in theory.

> [2] 
> https://elixir.bootlin.com/linux/v7.1.5/source/include/linux/device/devres.h#L115

Right, we are definitely already inconsistent here.

>> The simple change below would just extend that behavior to !PCI
>> and make that consistent with CONFIG_PCI=y 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=y 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 succeed
> and only the accessors would prevent undefined behavior?
>
> In this case I still think ioremap() should just fail.

In that case, it would make sense to also change the CONFIG_PCI=y
version to fail the same way when the address points outside of
the PCI memory space range. The current version in
arch/s390/pci/pci.c just falls back to generic_ioremap_prot(),
which is what I would use here directly:

void __iomem *ioremap_prot(phys_addr_t phys_addr, size_t size,
                           pgprot_t prot)
{
        if (!static_branch_unlikely(&have_mio))
                return (void __iomem *)phys_addr;
        return generic_ioremap_prot(phys_addr, size, prot);
}

The two methods here (generic_ioremap_prot() and the cast)
are machine specific to refer to two different ways that PCI
devices can be accessed if present, but there is no case
for PCI being unavailable altogether.

       Arnd

  reply	other threads:[~2026-08-04 12:02 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-03 18:09 `io{re,un}map()` build error in s390 under `!CONFIG_HAS_IOMEM` Miguel Ojeda
2026-08-03 19:56 ` Arnd Bergmann
2026-08-03 20:09   ` Danilo Krummrich
2026-08-04  7:13     ` Heiko Carstens
2026-08-04 10:36       ` Arnd Bergmann
2026-08-04 11:10         ` Danilo Krummrich
2026-08-04 12:02           ` Arnd Bergmann [this message]
2026-08-04 12:26             ` Gary Guo
2026-08-05 15:08             ` Danilo Krummrich
2026-08-04 12:21         ` Niklas Schnelle
2026-08-04 15:52           ` Arnd Bergmann
2026-08-05 15:36             ` Niklas Schnelle
2026-08-05 15:56               ` Arnd Bergmann
2026-08-06 13:25                 ` Niklas Schnelle
2026-08-06 13:44                   ` Arnd Bergmann
2026-08-06 15:21                     ` Geert Uytterhoeven

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f0e0c069-23eb-443a-800d-267cfe4c2aa2@app.fastmail.com \
    --to=arnd@arndb.de \
    --cc=a.hindborg@kernel.org \
    --cc=acourbot@nvidia.com \
    --cc=agordeev@linux.ibm.com \
    --cc=aliceryhl@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun@kernel.org \
    --cc=borntraeger@linux.ibm.com \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=driver-core@lists.linux.dev \
    --cc=gary@garyguo.net \
    --cc=gbayer@linux.ibm.com \
    --cc=gor@linux.ibm.com \
    --cc=hca@linux.ibm.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=lossin@kernel.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=schnelle@linux.ibm.com \
    --cc=svens@linux.ibm.com \
    --cc=tamird@kernel.org \
    --cc=tmgross@umich.edu \
    --cc=work@onurozkan.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox