[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <10ef8eac12c01f52ec3b8c0bedf6cf34627d1ceb.camel@redhat.com>
Date: Wed, 29 Nov 2023 13:40:19 +0100
From: Philipp Stanner <pstanner@...hat.com>
To: Arnd Bergmann <arnd@...nel.org>,
Bjorn Helgaas <bhelgaas@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Randy Dunlap <rdunlap@...radead.org>,
Jason Gunthorpe <jgg@...pe.ca>,
Eric Auger <eric.auger@...hat.com>,
Kent Overstreet <kent.overstreet@...il.com>,
Niklas Schnelle <schnelle@...ux.ibm.com>,
Neil Brown <neilb@...e.de>, John Sanpe <sanpeqf@...il.com>,
Dave Jiang <dave.jiang@...el.com>,
Yury Norov <yury.norov@...il.com>,
Kees Cook <keescook@...omium.org>,
Masami Hiramatsu <mhiramat@...nel.org>,
David Gow <davidgow@...gle.com>,
Thomas Gleixner <tglx@...utronix.de>,
"wuqiang.matt" <wuqiang.matt@...edance.com>,
Jason Baron <jbaron@...mai.com>,
Ben Dooks <ben.dooks@...ethink.co.uk>,
Danilo Krummrich <dakr@...hat.com>
Cc: linux-kernel@...r.kernel.org, linux-pci@...r.kernel.org,
pstanner@...hat.com
Subject: Re: [PATCH 4/4] lib/iomap.c: improve comment about pci anomaly
Hi again,
so I thought about this for a while and want to ask some follow up
questions in addition to those by Danilo in the other mail.
(btw, -CC Herbert Xu, since the mailserver is bouncing)
On Tue, 2023-11-21 at 11:03 +0100, Arnd Bergmann wrote:
> On Mon, Nov 20, 2023, at 22:59, Philipp Stanner wrote:
> > lib/iomap.c contains one of the definitions of pci_iounmap(). The
> > current comment above this out-of-place function does not clarify
> > WHY
> > the function is defined here.
> >
> > Linus's detailed comment above pci_iounmap() in drivers/pci/iomap.c
> > clarifies that in a far better way.
> >
> > Extend the existing comment with an excerpt from Linus's and hint
> > at the
> > other implementation in drivers/pci/iomap.c
> >
> > Signed-off-by: Philipp Stanner <pstanner@...hat.com>
>
> I think instead of explaining why the code is so complicated
> here, I'd prefer to make it more logical and not have to
> explain it.
>
> We should be able to define a generic version like
>
> void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
> {
> #ifdef CONFIG_HAS_IOPORT
> if (iomem_is_ioport(addr)) {
> ioport_unmap(addr);
> return;
> }
> #endif
> iounmap(addr)
> }
ACK, I think this makes sense – if we agree (as in the other thread)
that we never need an empty pci_iounmap().
>
> and then define iomem_is_ioport() in lib/iomap.c for x86,
Wait a minute.
lib/ should never contain architecture-specific code, should it? I
assume your argument is that we write a default version of
iomem_is_ioport(), that could, in theory, be used by many
architectures, but ultimately only x86 will use that default.
> while defining it in asm-generic/io.h for the rest,
So we're not talking about the function prototypes here, but about the
actual implementation that should reside in asm-generic/io.h, aye?
Because the prototype obviously always has to be identical.
> with an override in asm/io.h for those architectures
> that need a custom inb().
So like this in ARCH/include/asm/io.h:
#define iomem_is_ioport iomem_is_ioport
bool iomem_is_ioport(...);
and in include/asm-generic/io.h:
#ifndef iomem_is_ioport
bool iomem_is_ioport(...);
correct?
Still, as Danilo has asked in his email, the question about how inb()
is related to it still stands
>
> Note that with ia64 gone, GENERIC_IOMAP is not at all
> generic any more and could just move it to x86 or name
> it something else. This is what currently uses it:
>
> arch/hexagon/Kconfig: select GENERIC_IOMAP
> arch/um/Kconfig: select GENERIC_IOMAP
>
> These have no port I/O at all, so it doesn't do anything.
>
> arch/m68k/Kconfig: select GENERIC_IOMAP
>
> on m68knommu, the default implementation from asm-generic/io.h
> as the same effect as GENERIC_IOMAP but is more efficient.
> On classic m68k, GENERIC_IOMAP does not do what it is
> meant to because I/O ports on ISA devices have port
> numbers above PIO_OFFSET. Also they don't have PCI.
>
> arch/mips/Kconfig: select GENERIC_IOMAP
>
> This looks completely bogus because it sets PIO_RESERVED
> to 0 and always uses the mmio part of lib/iomap.c.
>
> arch/powerpc/platforms/Kconfig: select GENERIC_IOMAP
>
> This is only used for two platforms: cell and powernv,
> though on Cell it no longer does anything after the
> commit f4981a00636 ("powerpc: Remove the celleb support");
> I think the entire io_workarounds code now be folded
> back into spider_pci.c if we wanted to.
>
> The PowerNV LPC support does seem to still rely on it.
> This tries to do the exact same thing as lib/logic_pio.c
> for Huawei arm64 servers. I suspect that neither of them
> does it entirely correctly since the powerpc side appears
> to just override any non-LPC PIO support while the arm64
> side is missing the ioread/iowrite support.
I think by now I get what the issue with GENERIC_IOMAP is. But do you
want me to do something about GENERIC_IOMAP (besides the things
directly related to the PCI functionality I'm touching) for you to
approve of a modified version of this patch series?
P.
>
> Arnd
>
Powered by blists - more mailing lists