linux/arch
Maciej W. Rozycki 9cc205e3c1
RISC-V: Make port I/O string accessors actually work
Fix port I/O string accessors such as `insb', `outsb', etc. which use
the physical PCI port I/O address rather than the corresponding memory
mapping to get at the requested location, which in turn breaks at least
accesses made by our parport driver to a PCIe parallel port such as:

PCI parallel port detected: 1415:c118, I/O at 0x1000(0x1008), IRQ 20
parport0: PC-style at 0x1000 (0x1008), irq 20, using FIFO [PCSPP,TRISTATE,COMPAT,EPP,ECP]

causing a memory access fault:

Unable to handle kernel access to user memory without uaccess routines at virtual address 0000000000001008
Oops [#1]
Modules linked in:
CPU: 1 PID: 350 Comm: cat Not tainted 6.0.0-rc2-00283-g10d4879f9ef0-dirty #23
Hardware name: SiFive HiFive Unmatched A00 (DT)
epc : parport_pc_fifo_write_block_pio+0x266/0x416
 ra : parport_pc_fifo_write_block_pio+0xb4/0x416
epc : ffffffff80542c3e ra : ffffffff80542a8c sp : ffffffd88899fc60
 gp : ffffffff80fa2700 tp : ffffffd882b1e900 t0 : ffffffd883d0b000
 t1 : ffffffffff000002 t2 : 4646393043330a38 s0 : ffffffd88899fcf0
 s1 : 0000000000001000 a0 : 0000000000000010 a1 : 0000000000000000
 a2 : ffffffd883d0a010 a3 : 0000000000000023 a4 : 00000000ffff8fbb
 a5 : ffffffd883d0a001 a6 : 0000000100000000 a7 : ffffffc800000000
 s2 : ffffffffff000002 s3 : ffffffff80d28880 s4 : ffffffff80fa1f50
 s5 : 0000000000001008 s6 : 0000000000000008 s7 : ffffffd883d0a000
 s8 : 0004000000000000 s9 : ffffffff80dc1d80 s10: ffffffd8807e4000
 s11: 0000000000000000 t3 : 00000000000000ff t4 : 393044410a303930
 t5 : 0000000000001000 t6 : 0000000000040000
status: 0000000200000120 badaddr: 0000000000001008 cause: 000000000000000f
[<ffffffff80543212>] parport_pc_compat_write_block_pio+0xfe/0x200
[<ffffffff8053bbc0>] parport_write+0x46/0xf8
[<ffffffff8050530e>] lp_write+0x158/0x2d2
[<ffffffff80185716>] vfs_write+0x8e/0x2c2
[<ffffffff80185a74>] ksys_write+0x52/0xc2
[<ffffffff80185af2>] sys_write+0xe/0x16
[<ffffffff80003770>] ret_from_syscall+0x0/0x2
---[ end trace 0000000000000000 ]---

For simplicity address the problem by adding PCI_IOBASE to the physical
address requested in the respective wrapper macros only, observing that
the raw accessors such as `__insb', `__outsb', etc. are not supposed to
be used other than by said macros.  Remove the cast to `long' that is no
longer needed on `addr' now that it is used as an offset from PCI_IOBASE
and add parentheses around `addr' needed for predictable evaluation in
macro expansion.  No need to make said adjustments in separate changes
given that current code is gravely broken and does not ever work.

Signed-off-by: Maciej W. Rozycki <macro@orcam.me.uk>
Fixes: fab957c11e ("RISC-V: Atomic and Locking Code")
Cc: stable@vger.kernel.org # v4.15+
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
Link: https://lore.kernel.org/r/alpine.DEB.2.21.2209220223080.29493@angie.orcam.me.uk
Signed-off-by: Palmer Dabbelt <palmer@rivosinc.com>
2022-10-13 14:27:00 -07:00
..
alpha TTY/Serial driver update for 6.1-rc1 2022-10-07 16:36:24 -07:00
arc Kbuild updates for v5.20 2022-08-10 10:40:41 -07:00
arm EFI updates for v6.1 2022-10-09 08:56:54 -07:00
arm64 RISC-V Patches for the 6.1 Merge Window, Part 1 2022-10-09 13:24:01 -07:00
csky Merge 'irq/loongarch', 'pci/ctrl/loongson' and 'pci/header-cleanup-immutable' 2022-08-11 21:06:14 +08:00
hexagon regmap: Updates for v6.1 2022-10-04 19:12:16 -07:00
ia64 TTY/Serial driver update for 6.1-rc1 2022-10-07 16:36:24 -07:00
loongarch EFI updates for v6.1 2022-10-09 08:56:54 -07:00
m68k m68k updates for v6.1 2022-10-03 09:48:47 -07:00
microblaze microblaze: Add support for error injection 2022-09-26 14:13:29 +02:00
mips The first batch of KVM patches, mostly covering x86, which I 2022-10-09 09:39:55 -07:00
nios2 nios2: add force_successful_syscall_return() 2022-08-15 11:25:32 -05:00
openrisc Updates to various subsystems which I help look after. lib, ocfs2, 2022-08-07 10:03:24 -07:00
parisc TTY/Serial driver update for 6.1-rc1 2022-10-07 16:36:24 -07:00
powerpc The first batch of KVM patches, mostly covering x86, which I 2022-10-09 09:39:55 -07:00
riscv RISC-V: Make port I/O string accessors actually work 2022-10-13 14:27:00 -07:00
s390 The first batch of KVM patches, mostly covering x86, which I 2022-10-09 09:39:55 -07:00
sh hardening updates for v6.1-rc1 2022-10-03 17:24:22 -07:00
sparc TTY/Serial driver update for 6.1-rc1 2022-10-07 16:36:24 -07:00
um hardening updates for v6.1-rc1 2022-10-03 17:24:22 -07:00
x86 The first batch of KVM patches, mostly covering x86, which I 2022-10-09 09:39:55 -07:00
xtensa Merge 'irq/loongarch', 'pci/ctrl/loongson' and 'pci/header-cleanup-immutable' 2022-08-11 21:06:14 +08:00
.gitignore
Kconfig kcfi updates for v6.1-rc1 2022-10-03 17:11:07 -07:00