kernel_samsung_a53x/arch
Niklas Schnelle 3b98a26de2 s390/pci: fix max size calculation in zpci_memcpy_toio()
[ Upstream commit 80df7d6af7f6d229b34cf237b2cc9024c07111cd ]

The zpci_get_max_write_size() helper is used to determine the maximum
size a PCI store or load can use at a given __iomem address.

For the PCI block store the following restrictions apply:

1. The dst + len must not cross a 4K boundary in the (pseudo-)MMIO space
2. len must not exceed ZPCI_MAX_WRITE_SIZE
3. len must be a multiple of 8 bytes
4. The src address must be double word (8 byte) aligned
5. The dst address must be double word (8 byte) aligned

Otherwise only a normal PCI store which takes its src value from
a register can be used. For these PCI store restriction 1 still applies.
Similarly 1 also applies to PCI loads.

It turns out zpci_max_write_size() instead implements stricter
conditions which prevents PCI block stores from being used where they
can and should be used. In particular instead of conditions 4 and 5 it
wrongly enforces both dst and src to be size aligned. This indirectly
covers condition 1 but also prevents many legal PCI block stores.

On top of the functional shortcomings the zpci_get_max_write_size() is
misnamed as it is used for both read and write size calculations. Rename
it to zpci_get_max_io_size() and implement the listed conditions
explicitly.

Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Fixes: cd24834130ac ("s390/pci: base support")
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
[agordeev@linux.ibm.com replaced spaces with tabs]
Signed-off-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2024-11-18 12:12:50 +01:00
..
alpha Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
arc ARC: fix spare error 2024-11-18 12:12:17 +01:00
arm ARM: davinci: always select CONFIG_CPU_ARM926T 2024-11-18 12:12:38 +01:00
arm64 KVM: arm64: vgic-its: Avoid potential UAF in LPI translation cache 2024-11-18 12:12:48 +01:00
c6x Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
csky Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
h8300 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
hexagon Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ia64 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
m68k Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
microblaze Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mips MIPS: Alchemy: Fix an out-of-bound access in db1550_dev_setup() 2024-11-18 12:12:48 +01:00
nds32 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nios2 Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
openrisc Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
parisc parisc: Drop the HP-UX ENOSYM and EREMOTERELEASE error codes 2024-11-18 12:11:10 +01:00
powerpc powerpc/imc-pmu: Add a null pointer check in update_events_in_group() 2024-11-18 12:12:20 +01:00
riscv riscv: fix misaligned access handling of C.SWSP and C.SDSP 2024-11-18 12:11:41 +01:00
s390 s390/pci: fix max size calculation in zpci_memcpy_toio() 2024-11-18 12:12:50 +01:00
sh sh: bios: Revive earlyprintk support 2024-11-18 11:43:04 +01:00
sparc sparc32: fix a braino in fault handling in csum_and_copy_..._user() 2024-11-18 10:58:31 +01:00
um Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
x86 x86/kvm: Do not try to disable kvmclock if it was not enabled 2024-11-18 12:12:48 +01:00
xtensa Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00