Commit b8c9c3b8 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Johannes Berg
Browse files

um: stop using PCI port I/O



arch/um is one of the last users of CONFIG_GENERIC_IOMAP, but upon
closer look it appears that the PCI host bridge does not register
any port I/O, and the absense of both custom inb/outb functions and
a PCI_IOBASE constant means that actually trying to use port I/O
results on a NULL pointer access.

Build testing with clang confirms this by warning about this exact
problem:

include/asm-generic/io.h:549:31: error: performing pointer arithmetic on a null pointer has undefined behavior [-Werror,-Wnull-pointer-arithmetic]
  549 |         val = __raw_readb(PCI_IOBASE + addr);
      |                           ~~~~~~~~~~ ^

Remove all the Kconfig selects that refer to legacy port I/O
and instead just build the normal MMIO path that is emulated
by the virtio PCI host.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Link: https://patch.msgid.link/20250509084125.1488601-1-arnd@kernel.org


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent e619e18e
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -52,13 +52,7 @@ config NO_IOMEM
config UML_IOMEM_EMULATION
	bool
	select INDIRECT_IOMEM
	select HAS_IOPORT
	select GENERIC_PCI_IOMAP
	select GENERIC_IOMAP
	select NO_GENERIC_PCI_IOPORT_MAP

config NO_IOPORT_MAP
	def_bool !UML_IOMEM_EMULATION

config ISA
	bool
+0 −1
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ obj-$(CONFIG_GPROF) += gprof_syms.o
obj-$(CONFIG_OF) += dtb.o
obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
obj-$(CONFIG_STACKTRACE) += stacktrace.o
obj-$(CONFIG_GENERIC_PCI_IOMAP) += ioport.o

USER_OBJS := config.o

arch/um/kernel/ioport.c

deleted100644 → 0
+0 −13
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (C) 2021 Intel Corporation
 * Author: Johannes Berg <johannes@sipsolutions.net>
 */
#include <asm/iomap.h>
#include <asm-generic/pci_iomap.h>

void __iomem *__pci_ioport_map(struct pci_dev *dev, unsigned long port,
			       unsigned int nr)
{
	return NULL;
}