On Thu, Jul 31, 2025 at 07:38:58PM +0200, Gerd Bayer wrote: > Simple pointer-casts to map byte and word reads from PCI config space > into dwords (i.e. u32) produce unintended results on big-endian systems. > Add the necessary adjustments under compile-time switch > CONFIG_CPU_BIG_ENDIAN. > > pci_bus_read_config() was just introduced with > https://lore.kernel.org/all/20250716161203.83823-2-18255117159@xxxxxxx/ > > Signed-off-by: Gerd Bayer <gbayer@xxxxxxxxxxxxx> > --- > Sorry to spill this endianness aware code into drivers/pci, feel free to > suggest a cleaner approach. This has fixed the issues seen on s390 systems PCI is little-endian. On big-endian systems, the endianness conversion of Config Space accesses happens transparently in the struct pci_ops ->read() and ->write() callbacks. E.g. on s390, zpci_cfg_load() and zpci_cfg_store() call le64_to_cpu() and cpu_to_le64(), respectively. We do not want to mess with endianness in the PCI core, so this isn't a proper fix IMO. A viable approach might be to turn pci_bus_read_config() into a macro in include/linux/pci.h which calls the byte/word/dword variant based on sizeof(*val) or something like that. But at this point, with the merge window already open, it's probably better to drop the pci/capability-search topic branch from the pull request and retry in the next cycle. > Since this is still sitting in the a pull-request for upstream, > I'm not sure if this warrants a Fixes: tag. In cases like this, do include a Fixes tag but no stable designation. Thanks, Lukas