linux/arch/powerpc/kernel
Oliver O'Halloran 450be4960a powerpc/pci: Remove LSI mappings on device teardown
When a passthrough IO adapter is removed from a pseries machine using hash
MMU and the XIVE interrupt mode, the POWER hypervisor expects the guest OS
to clear all page table entries related to the adapter. If some are still
present, the RTAS call which isolates the PCI slot returns error 9001
"valid outstanding translations" and the removal of the IO adapter fails.
This is because when the PHBs are scanned, Linux maps automatically the
INTx interrupts in the Linux interrupt number space but these are never
removed.

This problem can be fixed by adding the corresponding unmap operation when
the device is removed. There's no pcibios_* hook for the remove case, but
the same effect can be achieved using a bus notifier.

Because INTx are shared among PHBs (and potentially across the system),
this adds tracking of virq to unmap them only when the last user is gone.

[aik: added refcounter]

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru>
Tested-by: Cédric Le Goater <clg@kaod.org>
Reviewed-by: Frederic Barrat <fbarrat@linux.ibm.com>
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20201202005222.5477-1-aik@ozlabs.ru
2020-12-04 01:01:34 +11:00
..
ptrace powerpc/ptrace-view: Use pt_regs values instead of thread_struct based one. 2020-12-04 01:01:26 +11:00
syscalls mm/madvise: introduce process_madvise() syscall: an external memory hinting API 2020-10-18 09:27:10 -07:00
trace powerpc: Add a ppc_inst_as_str() helper 2020-07-23 17:41:36 +10:00
vdso32 powerpc: Use common STABS_DEBUG and DWARF_DEBUG and ELF_DETAILS macro 2020-12-04 01:01:20 +11:00
vdso64 powerpc: Use common STABS_DEBUG and DWARF_DEBUG and ELF_DETAILS macro 2020-12-04 01:01:20 +11:00
.gitignore .gitignore: add SPDX License Identifier 2020-03-25 11:50:48 +01:00
align.c powerpc: Use fallthrough pseudo-keyword 2020-07-29 21:09:37 +10:00
asm-offsets.c powerpc/book3s64/pkeys: Store/restore userspace AMR/IAMR correctly on entry and exit from kernel 2020-12-04 01:01:25 +11:00
audit.c
btext.c treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
cacheinfo.c powerpc/cacheinfo: Warn if cache object chain becomes unordered 2020-07-30 22:53:48 +10:00
cacheinfo.h powerpc/cacheinfo: add cacheinfo_teardown, cacheinfo_rebuild 2019-06-15 16:52:06 +10:00
compat_audit.c
cpu_setup_6xx.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
cpu_setup_44x.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cpu_setup_fsl_booke.S powerpc/booke: Spelling s/date/data/ 2019-11-17 01:56:31 -06:00
cpu_setup_pa6t.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 333 2019-06-05 17:37:06 +02:00
cpu_setup_power.c powerpc/perf: MMCR0 control for PMU registers under PMCC=00 2020-12-04 01:01:29 +11:00
cpu_setup_ppc970.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
cputable.c powerpc/44x: Don't support 440 when CONFIG_PPC_47x is set 2020-12-04 01:01:34 +11:00
crash_dump.c powerpc: Add prefixed instructions to instruction data type 2020-05-19 00:10:39 +10:00
dawr.c powerpc/watchpoint: Guest support for 2nd DAWR hcall 2020-07-26 23:34:19 +10:00
dbell.c powerpc: Inline doorbell sending functions 2020-07-29 21:02:09 +10:00
dma-iommu.c dma-mapping: add a new dma_alloc_pages API 2020-09-25 06:20:47 +02:00
dma-mask.c
dma-swiotlb.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
dt_cpu_ftrs.c powerpc/feature: Remove CPU_FTR_NODSISRALIGN 2020-12-04 01:01:34 +11:00
early_32.c powerpc/fsl_booke/32: implement KASLR infrastructure 2019-11-13 19:27:40 +11:00
eeh_cache.c powerpc/eeh_cache: Fix a possible debugfs deadlock 2020-11-02 12:54:20 +11:00
eeh_driver.c pci-v5.9-changes 2020-08-07 18:48:15 -07:00
eeh_event.c powerpc/eeh: Fix build with STACKTRACE=n 2019-09-14 00:01:14 +10:00
eeh_pe.c powerpc/eeh: Delete eeh_pe->config_addr 2020-10-07 22:34:47 +11:00
eeh_sysfs.c powerpc/eeh: Pass eeh_dev to eeh_ops->resume_notify() 2020-07-26 23:34:20 +10:00
eeh.c powerpc/eeh: Fix eeh_dev_check_failure() for PE#0 2020-10-22 10:38:53 +11:00
entry_32.S powerpc/44x: Don't support 47x code and non 47x code at the same time 2020-12-04 01:01:34 +11:00
entry_64.S powerpc/book3s64/pkeys: Optimize KUAP and KUEP feature disabled case 2020-12-04 01:01:28 +11:00
epapr_hcalls.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
epapr_paravirt.c powerpc: Use a datatype for instructions 2020-05-19 00:10:37 +10:00
exceptions-64e.S powerpc/64e: remove 64s specific interrupt soft-mask code 2020-10-06 23:22:23 +11:00
exceptions-64s.S powerpc/book3s64/pkeys: Store/restore userspace AMR/IAMR correctly on entry and exit from kernel 2020-12-04 01:01:25 +11:00
fadump.c powerpc updates for 5.10 2020-10-16 12:21:15 -07:00
firmware.c powerpc: Reintroduce is_kvm_guest() as a fast-path check 2020-12-04 01:01:22 +11:00
fpu.S powerpc: Drop SYNC_601() ISYNC_601() and SYNC() 2020-10-08 21:17:13 +11:00
fsl_booke_entry_mapping.S powerpc/fsl_booke/32: implement KASLR infrastructure 2019-11-13 19:27:40 +11:00
head_8xx.S powerpc/8xx: Manage _PAGE_ACCESSED through APG bits in L1 entry 2020-11-05 23:34:25 +11:00
head_32.h powerpc/32: Use SPRN_SPRG_SCRATCH2 in exception prologs 2020-12-04 01:01:32 +11:00
head_40x.S powerpc/40x: Always fault when _PAGE_ACCESSED is not set 2020-11-05 23:34:16 +11:00
head_44x.S mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
head_64.S powerpc/64: Fix an EMIT_BUG_ENTRY in head_64.S 2020-12-04 01:01:20 +11:00
head_book3s_32.S powerpc/32s: Use SPRN_SPRG_SCRATCH2 in DSI prolog 2020-12-04 01:01:32 +11:00
head_booke.h powerpc: Replace RFI by rfi on book3s/32 and booke 2020-11-19 16:56:54 +11:00
head_fsl_booke.S mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
hw_breakpoint_constraints.c powerpc/watchpoint: Move DAWR detection logic outside of hw_breakpoint.c 2020-09-15 22:13:19 +10:00
hw_breakpoint.c powerpc/watchpoint: Move DAWR detection logic outside of hw_breakpoint.c 2020-09-15 22:13:19 +10:00
idle_6xx.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
idle_book3e.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
idle_book3s.S powerpc/64s: Reimplement power4_idle code in C 2020-01-16 14:59:37 +10:00
idle_e500.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
idle.c powerpc: Move arch_cpu_idle_dead() into smp.c 2020-09-18 19:59:43 +10:00
ima_arch.c powerpc/ima: Fix secure boot rules in ima arch policy 2020-05-07 17:25:54 +10:00
io-workarounds.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
io.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
iomap.c powerpc: inline iomap accessors 2020-12-04 01:01:09 +11:00
iommu.c dma-mapping: introduce dma_get_seg_boundary_nr_pages() 2020-09-03 18:12:15 +02:00
irq.c powerpc: Remove get_tb_or_rtc() 2020-10-08 21:17:14 +11:00
isa-bridge.c powerpc: remove __ioremap_at and __iounmap_at 2020-06-02 10:59:10 -07:00
jump_label.c powerpc: Use a datatype for instructions 2020-05-19 00:10:37 +10:00
kgdb.c maccess: make get_kernel_nofault() check for minimal type compatibility 2020-06-18 12:10:37 -07:00
kprobes-ftrace.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 156 2019-05-30 11:26:35 -07:00
kprobes.c powerpc: kprobes: Use generic kretprobe trampoline handler 2020-09-08 11:52:34 +02:00
kvm_emul.S powerpc/kvm: Add ifdefs around template code 2019-09-14 00:04:40 +10:00
kvm.c powerpc/kvm: Explicitly mark kvm guest code as __init 2019-09-14 00:04:40 +10:00
l2cr_6xx.S powerpc: Drop SYNC_601() ISYNC_601() and SYNC() 2020-10-08 21:17:13 +11:00
legacy_serial.c tty/serial: Migrate 8250_fsl to use has_sysrq 2019-12-18 15:04:42 +01:00
Makefile powerpc: Avoid broken GCC __attribute__((optimize)) 2020-11-19 14:50:14 +11:00
mce_power.c powerpc/64s/pseries: Add ERAT specific machine check handler 2020-12-04 01:01:23 +11:00
mce.c powerpc/64s: Remove "Host" from MCE logging 2020-12-04 01:01:23 +11:00
misc_32.S powerpc: Rewrite FSL_BOOKE flush_cache_instruction() in C 2020-09-02 11:00:21 +10:00
misc_64.S powerpc: Remove SYNC on non 6xx 2020-10-08 21:17:12 +11:00
misc.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
module_32.c powerpc: module_[32|64].c: replace swap function with built-in one 2020-05-11 23:15:14 +10:00
module_64.c maccess: rename probe_kernel_{read,write} to copy_{from,to}_kernel_nofault 2020-06-17 10:57:41 -07:00
module.c powerpc: Use MODULES_VADDR if defined 2020-07-27 00:01:30 +10:00
msi.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
note.S powerpc: Add PowerPC Capabilities ELF note 2019-08-30 09:40:15 +10:00
nvram_64.c powerpc updates for 5.8 2020-06-05 12:39:30 -07:00
of_platform.c powerpc/eeh: Remove eeh_dev_phb_init_dynamic() 2020-07-26 23:34:19 +10:00
optprobes_head.S powerpc: Add prefixed instructions to instruction data type 2020-05-19 00:10:39 +10:00
optprobes.c powerpc: Add ppc_inst_as_u64() 2020-05-26 23:36:57 +10:00
paca.c powerpc: Avoid broken GCC __attribute__((optimize)) 2020-11-19 14:50:14 +11:00
pci_32.c powerpc/64: Adjust order in pcibios_init() 2019-08-22 23:11:48 +10:00
pci_64.c powerpc updates for 5.8 2020-06-05 12:39:30 -07:00
pci_dn.c powerpc/eeh: Rename eeh_{add_to|remove_from}_parent_pe() 2020-07-26 23:34:21 +10:00
pci_of_scan.c powerpc/pci: Remove pcibios_setup_bus_devices() 2020-01-06 16:25:29 +11:00
pci-common.c powerpc/pci: Remove LSI mappings on device teardown 2020-12-04 01:01:34 +11:00
pci-hotplug.c powerpc/eeh: Release EEH device state synchronously 2020-05-18 21:58:44 +10:00
pmc.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
ppc_save_regs.S powerpc: Improve ppc_save_regs() 2020-04-04 21:40:57 +11:00
ppc32.h treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
proc_powerpc.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
process.c powerpc/book3s64/pkeys: Don't update SPRN_AMR when in kernel mode. 2020-12-04 01:01:26 +11:00
prom_init_check.sh powerpc/prom_init: Undo relocation before entering secure mode 2019-10-29 15:12:17 +11:00
prom_init.c treewide: Convert macro and uses of __section(foo) to __section("foo") 2020-10-25 14:51:49 -07:00
prom_parse.c
prom.c powerpc/feature: Remove CPU_FTR_NODSISRALIGN 2020-12-04 01:01:34 +11:00
reloc_32.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
reloc_64.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
rtas_flash.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
rtas_pci.c mm: reorder includes after introduction of linux/pgtable.h 2020-06-09 09:39:13 -07:00
rtas-proc.c proc: convert everything to "struct proc_ops" 2020-02-04 03:05:26 +00:00
rtas-rtc.c
rtas.c powerpc/rtas: Restrict RTAS requests from userspace 2020-10-06 23:22:27 +11:00
rtasd.c powerpc/rtasd: simplify handle_rtas_event(), emit message on events 2020-07-16 13:12:38 +10:00
secure_boot.c powerpc/pseries: Detect secure and trusted boot state of the system. 2020-07-16 14:49:53 +10:00
security.c powerpc/security: Fix link stack flush instruction 2020-10-08 12:50:52 +11:00
secvar-ops.c powerpc/powernv: Add OPAL API interface to access secure variable 2019-11-13 00:33:22 +11:00
secvar-sysfs.c powerpc: expose secure variables to userspace via sysfs 2019-11-13 00:33:22 +11:00
setup_32.c powerpc: Remove support for PowerPC 601 2020-10-08 21:17:13 +11:00
setup_64.c Merge branch 'fixes' into next 2020-11-25 23:17:31 +11:00
setup-common.c powerpc/64: Set up a kernel stack for secondaries before cpu_restore() 2020-11-02 12:54:38 +11:00
setup.h powerpc: Avoid broken GCC __attribute__((optimize)) 2020-11-19 14:50:14 +11:00
signal_32.c powerpc/vdso: Retrieve sigtramp offsets at buildtime 2020-12-04 01:01:17 +11:00
signal_64.c powerpc/vdso: Retrieve sigtramp offsets at buildtime 2020-12-04 01:01:17 +11:00
signal.c powerpc/signal: Refactor bad frame logging 2020-12-04 01:01:12 +11:00
signal.h powerpc/signal: Create 'unsafe' versions of copy_[ck][fpr/vsx]_to_user() 2020-12-04 01:01:14 +11:00
smp-tbsync.c
smp.c powerpc/smp: Call rcu_cpu_starting() earlier 2020-11-02 12:54:20 +11:00
stacktrace.c kernel: rename show_stack_loglvl() => show_stack() 2020-06-09 09:39:13 -07:00
suspend.c PM: hibernate: powerpc: Expose pfn_is_nosave() prototype 2019-06-14 10:48:56 +02:00
swsusp_32.S powerpc/32: Blacklist functions running with MMU disabled for kprobe 2020-06-02 20:59:11 +10:00
swsusp_64.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 505 2019-06-19 17:11:22 +02:00
swsusp_asm64.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 505 2019-06-19 17:11:22 +02:00
swsusp_booke.S
swsusp.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
sys_ppc32.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
syscall_64.c powerpc/book3s64/pkeys: Optimize KUAP and KUEP feature disabled case 2020-12-04 01:01:28 +11:00
syscalls.c y2038: syscalls: change remaining timeval to __kernel_old_timeval 2019-11-15 14:38:29 +01:00
sysfs.c powerpc/sysfs: Remove unused 'err' variable in sysfs_create_dscr_default() 2020-09-18 20:05:24 +10:00
systbl_chk.sh treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
systbl.S powerpc/64/sycall: Implement syscall entry/exit logic in C 2020-04-01 13:42:13 +11:00
tau_6xx.c powerpc/tau: Disable TAU between measurements 2020-09-15 22:13:30 +10:00
time.c powerpc/vdso: Switch VDSO to generic C implementation. 2020-12-04 01:01:10 +11:00
tm.S powerpc/tm: Save and restore AMR on treclaim and trechkpt 2020-10-06 23:22:25 +11:00
traps.c powerpc/book3s64/pkeys: Don't update SPRN_AMR when in kernel mode. 2020-12-04 01:01:26 +11:00
ucall.S powerpc/kernel: Add ucall_norets() ultravisor call handler 2019-08-30 09:40:15 +10:00
udbg_16550.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
udbg.c powerpc/udbg: Make it safe to call udbg_printf() always 2019-10-11 19:33:25 +11:00
uprobes.c powerpc: Add ppc_inst_next() 2020-05-26 23:36:51 +10:00
vdso.c powerpc/vdso: Remove DBG() 2020-12-04 01:01:19 +11:00
vecemu.c powerpc: Define and use get_user_instr() et. al. 2020-05-19 00:10:37 +10:00
vector.S powerpc: re-initialise lazy FPU/VEC counters on every fault 2020-07-16 13:00:24 +10:00
vmlinux.lds.S Merge branch 'fixes' into next 2020-11-25 23:17:31 +11:00
watchdog.c