mirror-linux/arch/s390/include/asm
Niklas Schnelle 9ffaf52290 iommu/s390: Make attach succeed when the device was surprise removed
When a PCI device is removed with surprise hotplug, there may still be
attempts to attach the device to the default domain as part of tear down
via (__iommu_release_dma_ownership()), or because the removal happens
during probe (__iommu_probe_device()). In both cases zpci_register_ioat()
fails with a cc value indicating that the device handle is invalid. This
is because the device is no longer part of the instance as far as the
hypervisor is concerned.

Currently this leads to an error return and s390_iommu_attach_device()
fails. This triggers the WARN_ON() in __iommu_group_set_domain_nofail()
because attaching to the default domain must never fail.

With the device fenced by the hypervisor no DMAs to or from memory are
possible and the IOMMU translations have no effect. Proceed as if the
registration was successful and let the hotplug event handling clean up
the device.

This is similar to how devices in the error state are handled since
commit 59bbf59679 ("iommu/s390: Make attach succeed even if the device
is in error state") except that for removal the domain will not be
registered later. This approach was also previously discussed at the
link.

Handle both cases, error state and removal, in a helper which checks if
the error needs to be propagated or ignored. Avoid magic number
condition codes by using the pre-existing, but never used, defines for
PCI load/store condition codes and rename them to reflect that they
apply to all PCI instructions.

Cc: stable@vger.kernel.org # v6.2
Link: https://lore.kernel.org/linux-iommu/20240808194155.GD1985367@ziepe.ca/
Suggested-by: Jason Gunthorpe <jgg@ziepe.ca>
Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.ibm.com>
Reviewed-by: Benjamin Block <bblock@linux.ibm.com>
Link: https://lore.kernel.org/r/20250904-iommu_succeed_attach_removed-v1-1-e7f333d2f80f@linux.ibm.com
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
2025-09-05 15:11:09 +02:00
..
trace s390/hiperdispatch: Add trace events 2024-08-29 22:56:35 +02:00
vdso s390/time: Remove in-kernel time steering 2025-07-21 12:41:55 +02:00
Kbuild arch, mm: move definition of node_data to generic code 2024-09-03 21:15:28 -07:00
abs_lowcore.h s390/lowcore: Convert relocated lowcore alternative to machine feature 2025-03-04 17:18:05 +01:00
access-regs.h
airq.h
alternative.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
ap.h s390/ap: Unmask SLCF bit in card and queue ap functions sysfs 2025-07-31 18:59:26 +02:00
appldata.h s390: Convert MACHINE_IS_[LPAR|VM|KVM], etc, machine_is_[lpar|vm|kvm]() 2025-03-04 17:18:07 +01:00
arch_hweight.h s390: Use MARCH_HAS_*_FEATURES defines 2024-09-07 17:12:42 +02:00
archrandom.h
asce.h s390/mm: Reimplement lazy ASCE handling 2025-04-14 11:23:21 +02:00
asm-const.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
asm-extable.h s390/uaccess: Shorten raw_copy_from_user() / raw_copy_to_user() inline assemblies 2025-03-04 17:18:03 +01:00
asm-prototypes.h s390/expoline: Make modules use kernel expolines 2024-04-17 13:38:03 +02:00
asm.h s390: Rename GCC_ASM_FLAG_OUTPUT_BROKEN to CC_ASM_FLAG_OUTPUT_BROKEN 2025-01-26 17:24:04 +01:00
atomic.h s390/atomic: Provide arch_atomic_*_and_test() implementations 2024-12-15 16:19:03 +01:00
atomic_ops.h s390/atomic_ops: Let __atomic_add_const() variants always return void 2025-03-04 17:34:04 +01:00
barrier.h s390: Use MARCH_HAS_*_FEATURES defines 2024-09-07 17:12:42 +02:00
bitops.h s390/bitops: Disable arch_test_bit() optimization for PROFILE_ALL_BRANCHES 2025-02-11 19:35:08 +01:00
boot_data.h s390/boot: Add timestamps to early boot messages 2025-01-26 17:24:02 +01:00
bug.h
cache.h
ccwdev.h driver core: have match() callback in struct bus_type take a const * 2024-07-03 15:16:54 +02:00
ccwgroup.h
checksum.h s390: Remove superfluous new lines from inline assemblies 2024-12-15 16:19:03 +01:00
chpid.h
chsc.h s390/chsc: use notifier for AP configuration changes 2024-04-09 17:29:55 +02:00
cio.h s390/virtio_ccw: use DMA handle from DMA API 2024-03-13 09:23:46 +01:00
clocksource.h
clp.h
cmb.h
cmpxchg.h s390/cmpxchg: Provide arch_try_cmpxchg128() 2024-11-12 14:01:28 +01:00
compat.h
cpacf.h s390/crypto: Add protected key hmac subfunctions for KMAC 2025-06-26 18:52:33 +08:00
cpcmd.h
cpu.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
cpu_mf-insn.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
cpu_mf.h s390: Use inline qualifier for all EX_TABLE and ALTERNATIVE inline assemblies 2025-03-18 17:13:51 +01:00
cpufeature.h watchdog: diag288_wdt: Implement module autoload 2025-04-16 09:26:49 +02:00
cputime.h
crw.h
css_chars.h s390/qdio: Rename feature flag aif_osa to aif_qdio 2025-01-03 11:00:53 +01:00
ctlreg.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
current.h s390/current: Implement current with inline assembly 2025-03-18 17:13:04 +01:00
dat-bits.h s390/kvm: Move bitfields for dat tables 2024-07-10 19:50:45 +02:00
debug.h s390/pci: Add pci_msg debug view to PCI report 2024-12-16 16:14:27 +01:00
delay.h
diag.h s390: Use inline qualifier for all EX_TABLE and ALTERNATIVE inline assemblies 2025-03-18 17:13:51 +01:00
diag288.h watchdog: diag288_wdt: Implement module autoload 2025-04-16 09:26:49 +02:00
dis.h
dma-types.h s390/mm: provide simple ARCH_HAS_DEBUG_VIRTUAL support 2024-03-13 09:23:49 +01:00
dma.h
dwarf.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
eadm.h s390/cio: use bitwise types to allow for type checking 2024-03-13 09:23:46 +01:00
ebcdic.h s390/ebcdic: Fix length decrement in codepage_convert() 2025-01-13 09:50:18 +01:00
elf.h s390: Remove 2k vs 4k page table leftovers 2025-03-18 17:13:05 +01:00
entry-common.h KVM: s390: Rework guest entry logic 2025-07-21 13:01:03 +00:00
exec.h
extable.h
extmem.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
facility.h s390/facilities: Fix warning about shadow of global variable 2024-10-10 15:32:43 +02:00
fault.h
fcx.h s390/cio: use bitwise types to allow for type checking 2024-03-13 09:23:46 +01:00
fprobe.h fprobe: Add fprobe_header encoding feature 2024-12-26 10:50:05 -05:00
fpu-insn-asm.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
fpu-insn.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
fpu-types.h
fpu.h s390/vx: Convert cpu_has_vx() to cpu feature function 2025-03-04 17:18:07 +01:00
ftrace.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
ftrace.lds.h
futex.h s390/mm: Reimplement lazy ASCE handling 2025-04-14 11:23:21 +02:00
gmap.h KVM: s390: Refactor and split some gmap helpers 2025-05-28 17:48:04 +02:00
gmap_helpers.h KVM: s390: Refactor and split some gmap helpers 2025-05-28 17:48:04 +02:00
hardirq.h s390: Replace S390_lowcore by get_lowcore() 2024-06-18 17:01:33 +02:00
hiperdispatch.h s390/hiperdispatch: Introduce hiperdispatch 2024-08-29 22:56:35 +02:00
hugetlb.h s390 updates for 6.15 merge window 2025-03-29 11:59:43 -07:00
hw_irq.h
idals.h s390/cio,idal: fix virtual vs physical address confusion 2024-03-13 09:23:47 +01:00
idle.h
io.h - The 6 patch series "Enable strict percpu address space checks" from 2025-04-01 09:29:18 -07:00
ipl.h
irq.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
irq_work.h
irqflags.h s390/irqflags: do not instrument arch_local_irq_*() with KMSAN 2024-07-03 19:30:25 -07:00
isc.h
itcw.h
jump_label.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
kasan.h
kdebug.h
kexec.h s390/kdump: Provide is_kdump_kernel() implementation 2024-10-25 16:03:23 +02:00
kfence.h s390/kfence: Split kfence pool into 4k mappings in arch_kfence_init_pool() 2025-03-18 17:13:05 +01:00
kmsan.h s390/kmsan: Fix merge conflict with get_lowcore() introduction 2024-07-23 16:01:51 +02:00
kprobes.h
kvm_host.h KVM: s390: Rework guest entry logic 2025-07-21 13:01:03 +00:00
kvm_host_types.h s390/kvm: Split kvm_host header file 2025-03-31 12:20:39 +02:00
kvm_para.h
linkage.h
lowcore.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
maccess.h
machine.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
march.h s390: Allow to compile with z17 optimizations 2025-04-09 12:12:41 +02:00
mem_encrypt.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
mmu.h s390: Remove 2k vs 4k page table leftovers 2025-03-18 17:13:05 +01:00
mmu_context.h s390/mm: Select ARCH_WANT_IRQS_OFF_ACTIVATE_MM 2025-04-14 11:23:21 +02:00
module.h s390/module: Provide find_section() helper 2024-09-13 17:28:36 +02:00
msi.h
nmi.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
nospec-branch.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
nospec-insn.h s390: Explicitly include <linux/export.h> 2025-06-17 18:18:02 +02:00
numa.h
os_info.h s390/os_info: Fix array size in struct os_info 2024-04-29 17:33:29 +02:00
page-states.h s390: Remove __bootdata annotations from declarations 2024-12-15 16:19:04 +01:00
page.h Merge branch 'uaccess-key' into features 2025-06-29 13:21:16 +02:00
pai.h s390/pai: Convert to use flag output macros 2024-11-13 14:31:32 +01:00
pci.h pci-v6.15-changes 2025-03-28 19:36:53 -07:00
pci_clp.h s390/pci: check for relaxed translation capability 2025-02-21 12:01:57 +01:00
pci_debug.h
pci_dma.h iommu/s390: allow larger region tables 2025-04-17 16:43:12 +02:00
pci_insn.h iommu/s390: Make attach succeed when the device was surprise removed 2025-09-05 15:11:09 +02:00
pci_io.h s390/pci: Align prototypes of zpci IO memcpy functions 2024-10-16 11:33:06 +02:00
percpu.h mm/percpu: conditionally define _shared_alloc_tag via CONFIG_ARCH_MODULE_NEEDS_WEAK_PER_CPU 2025-07-09 22:42:15 -07:00
perf_event.h Performance events changes for v6.13: 2024-11-19 13:34:06 -08:00
pfault.h
pgalloc.h mm: pass mm down to pagetable_{pte,pmd}_ctor 2025-05-11 17:48:21 -07:00
pgtable.h s390/mm: Enable THP_SWAP and THP_MIGRATION 2025-07-31 18:59:26 +02:00
physmem_info.h s390/boot: Add physmem tracking debug support 2025-01-26 17:24:02 +01:00
pkey.h s390/pkey/crypto: Introduce xflags param for pkey in-kernel API 2025-04-30 11:34:03 +02:00
pnet.h
preempt.h s390/preempt: Optimize __preempt_count_dec_and_test() 2024-12-15 16:19:03 +01:00
processor.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
ptrace.h s390 updates for 6.17 merge window 2025-07-29 20:17:08 -07:00
purgatory.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
qdio.h s390/cio: use bitwise types to allow for type checking 2024-03-13 09:23:46 +01:00
runtime-const.h s390: Add runtime constant support 2024-07-23 15:54:58 +02:00
runtime_instr.h
rwonce.h
schid.h
sclp.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
scsw.h s390/cio: use bitwise types to allow for type checking 2024-03-13 09:23:46 +01:00
seccomp.h
sections.h
set_memory.h - The series "zram: optimal post-processing target selection" from 2024-11-23 09:58:07 -08:00
setup.h s390/nmi: Print additional information 2025-06-26 15:30:51 +02:00
signal.h
sigp.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
skey.h s390/skey: Provide infrastructure for executing with non-default access key 2025-06-29 13:12:02 +02:00
smp.h s390/smp: Implement raw_smp_processor_id() with inline assembly 2025-03-18 17:13:04 +01:00
softirq_stack.h s390: Replace S390_lowcore by get_lowcore() 2024-06-18 17:01:33 +02:00
sparsemem.h s390/sparsemem: Provide phys_to_target_node() with CONFIG_NUMA 2024-11-07 10:33:44 +01:00
spinlock.h s390/spinlock: Implement SPINLOCK_LOCKVAL with inline assembly 2025-03-18 17:13:04 +01:00
spinlock_types.h Improve consistency of '#error' directive messages 2024-11-11 17:17:04 -08:00
stacktrace.h s390/entry: Pass the asce as parameter to sie64a() 2024-07-10 19:50:45 +02:00
stp.h s390/time: Add PtP driver 2024-10-30 17:02:39 -07:00
string.h s390/string: Remove strcpy() implementation 2025-04-30 11:41:28 +02:00
syscall.h syscall.h: introduce syscall_set_nr() 2025-05-11 17:48:15 -07:00
syscall_wrapper.h
sysinfo.h s390/sysinfo: Move stsi() to header file 2025-03-04 17:18:07 +01:00
text-patching.h
thread_info.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
timex.h s390/time: Use monotonic clock in get_cycles() 2025-07-21 12:41:55 +02:00
tlb.h Generic: 2025-06-02 12:24:58 -07:00
tlbflush.h s390/tlb: Convert MACHINE_HAS_TLB_GUEST to machine_has_tlb_guest() 2025-03-04 17:18:06 +01:00
topology.h s390/smp: Add support for HOTPLUG_SMT 2025-03-31 12:20:39 +02:00
tpi.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
types.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
uaccess.h s390/uaccess: Make cmpxchg_user_key() library code 2025-06-29 13:12:01 +02:00
unistd.h clone3: drop __ARCH_WANT_SYS_CLONE3 macro 2024-07-10 14:23:38 +02:00
unwind.h
uprobes.h
user.h
uv.h Generic: 2025-06-02 12:24:58 -07:00
vdso-symbols.h s390/vdso: Move vdso symbol handling to separate header file 2024-09-13 17:28:36 +02:00
vdso.h s390: Replace __ASSEMBLY__ with __ASSEMBLER__ in non-uapi headers 2025-06-16 16:23:02 +02:00
vmalloc.h
vmlinux.lds.h
vtime.h s390/vtime: Remove duplicate get_lowcore() calls 2024-06-18 17:01:33 +02:00
vtimer.h
word-at-a-time.h s390: Use inline qualifier for all EX_TABLE and ALTERNATIVE inline assemblies 2025-03-18 17:13:51 +01:00
xor.h