2
0
mirror of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git synced 2025-09-04 20:19:47 +08:00
linux/arch/powerpc/kernel
Narayana Murty N 33bc69cf66 powerpc/eeh: Fix missing PE bridge reconfiguration during VFIO EEH recovery
VFIO EEH recovery for PCI passthrough devices fails on PowerNV and pseries
platforms due to missing host-side PE bridge reconfiguration. In the
current implementation, eeh_pe_configure() only performs RTAS or OPAL-based
bridge reconfiguration for native host devices, but skips it entirely for
PEs managed through VFIO in guest passthrough scenarios.

This leads to incomplete EEH recovery when a PCI error affects a
passthrough device assigned to a QEMU/KVM guest. Although VFIO triggers the
EEH recovery flow through VFIO_EEH_PE_ENABLE ioctl, the platform-specific
bridge reconfiguration step is silently bypassed. As a result, the PE's
config space is not fully restored, causing subsequent config space access
failures or EEH freeze-on-access errors inside the guest.

This patch fixes the issue by ensuring that eeh_pe_configure() always
invokes the platform's configure_bridge() callback (e.g.,
pseries_eeh_phb_configure_bridge) even for VFIO-managed PEs. This ensures
that RTAS or OPAL calls to reconfigure the PE bridge are correctly issued
on the host side, restoring the PE's configuration space after an EEH
event.

This fix is essential for reliable EEH recovery in QEMU/KVM guests using
VFIO PCI passthrough on PowerNV and pseries systems.

Tested with:
- QEMU/KVM guest using VFIO passthrough (IBM Power9,(lpar)Power11 host)
- Injected EEH errors with pseries EEH errinjct tool on host, recovery
  verified on qemu guest.
- Verified successful config space access and CAP_EXP DevCtl restoration
  after recovery

Fixes: 212d16cdca ("powerpc/eeh: EEH support for VFIO PCI device")
Signed-off-by: Narayana Murty N <nnmlinux@linux.ibm.com>
Reviewed-by: Vaibhav Jain <vaibhav@linux.ibm.com>
Reviewed-by: Ganesh Goudar <ganeshgr@linux.ibm.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20250508062928.146043-1-nnmlinux@linux.ibm.com
2025-06-13 12:30:48 +05:30
..
ptrace seccomp: remove the 'sd' argument from __secure_computing() 2025-02-10 09:26:22 -08:00
syscalls fs: add open_tree_attr() 2025-02-12 12:12:28 +01:00
trace powerpc64/ftrace: fix clobbered r15 during livepatching 2025-04-29 11:03:07 +05:30
vdso powerpc/vdso: Fix build of VDSO32 with pcrel 2025-06-13 12:30:15 +05:30
.gitignore
85xx_entry_mapping.S powerpc: Remove CONFIG_FSL_BOOKE 2022-09-26 22:47:37 +10:00
align.c
asm-offsets.c powerpc/vdso: Switch to generic storage implementation 2025-02-21 09:54:02 +01:00
audit_32.h powerpc: address missing-prototypes warnings 2023-08-02 22:22:19 +10:00
audit.c powerpc: address missing-prototypes warnings 2023-08-02 22:22:19 +10:00
btext.c powerpc: Use shared font data 2023-10-01 23:09:02 +11:00
cacheinfo.c powerpc: Constify struct kobj_type 2024-09-05 22:25:36 +10:00
cacheinfo.h
compat_audit.c powerpc: address missing-prototypes warnings 2023-08-02 22:22:19 +10:00
cpu_setup_6xx.S powerpc: rename SPRN_HID2 define to SPRN_HID2_750FX 2024-05-08 00:25:00 +10:00
cpu_setup_44x.S
cpu_setup_e500.S powerpc/32: Fix objtool unannotated intra-function call warnings 2022-11-18 19:00:06 +11:00
cpu_setup_pa6t.S
cpu_setup_power.c powerpc/dexcr: Add initial Dynamic Execution Control Register (DEXCR) support 2023-06-19 17:36:25 +10:00
cpu_setup_ppc970.S
cpu_specs_8xx.h powerpc/cputable: Split cpu_specs[] out of cputable.h 2022-09-26 22:47:13 +10:00
cpu_specs_44x.h powerpc/cputable: Split cpu_specs[] out of cputable.h 2022-09-26 22:47:13 +10:00
cpu_specs_47x.h powerpc/cputable: Split cpu_specs[] out of cputable.h 2022-09-26 22:47:13 +10:00
cpu_specs_85xx.h powerpc/cputable: Split cpu_specs[] for mpc85xx and e500mc 2022-09-26 23:00:05 +10:00
cpu_specs_book3s_32.h powerpc/cputable: Split cpu_specs[] out of cputable.h 2022-09-26 22:47:13 +10:00
cpu_specs_book3s_64.h powerpc: Add Power11 architected and raw mode 2024-02-21 23:11:00 +11:00
cpu_specs_e500mc.h powerpc/cputable: Add missing PPC_FEATURE_BOOKE on PPC64 Book-E 2024-02-14 14:24:06 +11:00
cpu_specs.h powerpc: Remove core support for 40x 2024-06-28 22:28:47 +10:00
cputable.c powerpc: Make cpu_spec __ro_after_init 2023-11-27 22:01:14 +11:00
crash_dump.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
dawr.c powerpc: Include asm/firmware.h in all users of firmware_has_feature() 2022-06-29 16:45:05 +10:00
dbell.c powerpc/64: Fix perf profiling asynchronous interrupt handlers 2023-01-30 20:07:42 +11:00
dexcr.c powerpc/dexcr: Add DEXCR prctl interface 2024-05-06 22:04:31 +10:00
dma-iommu.c powerpc: Remove some Cell leftovers 2025-02-26 21:15:07 +05:30
dma-mask.c dma-mapping: move arch_dma_set_mask() declaration to header 2023-07-31 17:54:28 +02:00
dma-swiotlb.c swiotlb: add a SWIOTLB_ANY flag to lift the low memory restriction 2022-04-18 07:21:12 +02:00
dt_cpu_ftrs.c mm/memblock: add memblock_alloc_or_panic interface 2025-01-25 20:22:38 -08:00
early_32.c powerpc: Move C prototypes out of asm-prototypes.h 2022-03-08 22:06:25 +11:00
eeh_cache.c
eeh_driver.c powerpc/eeh: Permanently disable the removed device 2024-04-29 23:51:15 +10:00
eeh_event.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
eeh_pe.c powerpc/eeh: avoid possible crash when edev->pdev changes 2024-06-23 11:54:27 +10:00
eeh_sysfs.c powerpc: Add missing headers 2022-05-08 22:15:40 +10:00
eeh.c powerpc/eeh: Fix missing PE bridge reconfiguration during VFIO EEH recovery 2025-06-13 12:30:48 +05:30
entry_32.S powerpc: Replace CONFIG_4xx with CONFIG_44x 2024-06-28 22:28:48 +10:00
epapr_hcalls.S powerpc/4xx: Remove CONFIG_BOOKE_OR_40x 2024-06-28 22:28:48 +10:00
epapr_paravirt.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
exceptions-64e.S powerpc/64e: drop unused TLB miss handlers 2024-07-12 15:52:15 -07:00
exceptions-64s.S powerpc/cell: Remove support for IBM Cell Blades 2025-02-26 21:15:07 +05:30
fadump.c fadump: Use str_yes_no() helper in fadump_show_config() 2025-04-16 22:25:22 +05:30
firmware.c powerpc: Export kvm_guest static key, for bcachefs six locks 2024-01-01 11:47:38 -05:00
fpu.S powerpc: Don't clobber f0/vs0 during fp|altivec register save 2023-11-28 23:04:43 +11:00
head_8xx.S powerpc/8xx: Fix kernel DTLB miss on dcbz 2024-10-11 15:53:06 +11:00
head_32.h powerpc: Remove core support for 40x 2024-06-28 22:28:47 +10:00
head_44x.S powerpc/44x: Introduce _PAGE_READ and remove _PAGE_USER 2023-10-19 17:12:46 +11:00
head_64.S powerpc/64s: Fix unnecessary copy to 0 when kernel is booted at address 0 2024-06-23 11:54:13 +10:00
head_85xx.S powerpc/e500: use contiguous PMD instead of hugepd 2024-07-12 15:52:18 -07:00
head_book3s_32.S powerpc/603: Inconditionally use task PGDIR in DTLB misses 2024-08-30 21:29:55 +10:00
head_booke.h powerpc: Remove core support for 40x 2024-06-28 22:28:47 +10:00
hw_breakpoint_constraints.c powerpc/watchpoint: Disable pagefaults when getting user instruction 2023-09-18 12:23:47 +10:00
hw_breakpoint.c powerpc/watchpoints: Annotate atomic context in more places 2023-09-18 12:23:47 +10:00
idle_6xx.S
idle_64e.S powerpc: add ISA v3.0 / v3.1 wait opcode macro 2022-09-28 19:22:10 +10:00
idle_85xx.S powerpc: Cleanup idle for e500 2022-09-26 23:00:14 +10:00
idle_book3s.S
idle.c treewide: const qualify ctl_tables where applicable 2025-01-28 13:48:37 +01:00
ima_arch.c integrity: Always reference the blacklist keyring with appraisal 2023-08-01 08:17:25 -04:00
interrupt_64.S powerpc/64: Set task pt_regs->link to the LR value on scv entry 2024-02-05 22:43:19 +11:00
interrupt.c powerpc: enable dynamic preemption 2025-04-16 22:30:22 +05:30
io.c powerpc/io: Use standard barrier macros in io.c 2025-02-26 21:15:09 +05:30
iomap.c
iommu.c powerpc/iommu: Use str_disabled_enabled() helper 2025-05-15 10:05:06 +05:30
irq_64.c work around gcc bugs with 'asm goto' with outputs 2024-02-09 15:57:48 -08:00
irq.c powerpc/irq: use seq_put_decimal_ull_width() for decimal values 2024-11-10 22:33:52 +11:00
isa-bridge.c mm: Introduce vmap_page_range() to map pages in PCI address space 2024-03-11 16:58:10 +01:00
jump_label.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
kdebugfs.c
kgdb.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
kprobes-ftrace.c kprobe/ftrace: bail out if ftrace was killed 2024-05-16 07:23:30 +09:00
kprobes.c powerpc updates for 6.13 2024-11-23 10:44:31 -08:00
kvm_emul.S
kvm.c powerpc: Remove CONFIG_PPC_BOOK3E_MMU 2022-09-26 23:00:14 +10:00
l2cr_6xx.S
legacy_serial.c powerpc: Explicitly include correct DT includes 2023-08-02 22:22:19 +10:00
Makefile Kbuild updates for v6.16 2025-06-07 10:05:35 -07:00
mce_power.c
mce.c powerpc/mce: log the error for all unrecoverable errors 2023-02-10 22:17:34 +11:00
misc_32.S powerpc/32: Replace mulhdu() by mul_u64_u64_shr() 2024-12-10 08:15:30 +05:30
misc_64.S powerpc/64: Remove maple platform 2024-10-29 23:01:52 +11:00
misc.S powerpc: replace #include <asm/export.h> with #include <linux/export.h> 2023-08-16 23:54:48 +10:00
module_32.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
module_64.c powerpc64/ftrace: fix module loading without patchable function entries 2025-04-15 11:40:54 +05:30
module.c powerpc updates for 6.10 2024-05-17 09:05:46 -07:00
msi.c
note.S
nvram_64.c printk: Add a short description string to kmsg_dump() 2024-07-17 12:35:24 +02:00
optprobes_head.S powerpc: add definition for pt_regs offset within an interrupt frame 2022-12-02 17:54:08 +11:00
optprobes.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
paca.c docs: move powerpc under arch 2023-10-10 13:35:55 -06:00
pci_32.c mm/memblock: add memblock_alloc_or_panic interface 2025-01-25 20:22:38 -08:00
pci_64.c powerpc/pci_64: Init pcibios subsys a bit later 2023-03-14 23:36:27 +11:00
pci_dn.c powerpc/pci_dn: Add missing of_node_put() 2022-09-05 17:30:25 +10:00
pci_of_scan.c powerpc: Add missing headers 2022-05-08 22:15:40 +10:00
pci-common.c arch: Rename fbdev header and source files 2024-05-03 17:07:50 +02:00
pci-hotplug.c powerpc/pci: Hotplug driver bridge support 2024-07-04 23:10:40 +10:00
pmc.c powerpc/85xx: Mark some functions static and add missing includes to fix no previous prototype error 2023-08-23 15:55:21 +10:00
ppc_save_regs.S powerpc: update ppc_save_regs to save current r1 in pt_regs 2023-06-19 17:37:14 +10:00
proc_powerpc.c powerpc: Replace strcpy() with strscpy() in proc_ppc64_init() 2025-05-15 09:54:54 +05:30
process.c powerpc: Don't use --- in kernel logs 2025-04-29 11:41:38 +05:30
prom_entry_64.S powerpc/64: Rename entry_64.S to prom_entry_64.S 2023-06-15 14:04:19 +10:00
prom_init_check.sh kasan, powerpc: don't rename memintrinsics if compiler adds prefixes 2023-03-23 17:18:33 -07:00
prom_init.c powerpc/prom_init: Fixup missing #size-cells on PowerBook6,7 2025-03-07 19:08:38 +05:30
prom_parse.c
prom.c powerpc/crash: use generic crashkernel reservation 2025-03-16 22:30:48 -07:00
reloc_32.S
reloc_64.S powerpc/64: avoid using r13 in relocate 2022-09-28 19:22:13 +10:00
rethook.c powerpc: Replace kretprobe code with rethook on powerpc 2024-09-05 22:25:36 +10:00
rtas_entry.S powerpc/rtas: Fix RTAS MSR[HV] handling for Cell 2022-08-26 08:41:54 +10:00
rtas_flash.c powerpc: add missing MODULE_DESCRIPTION() macros 2024-07-04 22:39:20 +10:00
rtas_pci.c powerpc/rtas_pci: rename and properly expose config access APIs 2023-11-28 21:49:45 +11:00
rtas-proc.c powerpc/rtas: Fix ppc_rtas_rmo_buf_show() kernel-doc 2023-11-07 13:13:45 +11:00
rtas-rtc.c powerpc/rtas: arch-wide function token lookup conversions 2023-02-13 22:35:03 +11:00
rtas.c powerpc/pseries: Add a char driver for physical-attestation RTAS 2025-04-17 11:42:30 +05:30
rtasd.c powerpc/rtas: arch-wide function token lookup conversions 2023-02-13 22:35:03 +11:00
secure_boot.c powerpc: Use str_enabled_disabled() helper function 2024-11-05 20:48:20 +11:00
security.c asm-generic: introduce text-patching.h 2024-11-07 14:25:15 -08:00
secvar-ops.c powerpc/secvar: Warn and error if multiple secvar ops are set 2023-02-12 22:12:36 +11:00
secvar-sysfs.c powerpc/secvar: Constify 'struct bin_attribute' 2025-02-21 09:20:32 +01:00
setup_32.c mm/memblock: add memblock_alloc_or_panic interface 2025-01-25 20:22:38 -08:00
setup_64.c powerpc/io: Remove PPC_INDIRECT_MMIO 2025-02-26 21:15:08 +05:30
setup-common.c arch, mm: set max_mapnr when allocating memory map for FLATMEM 2025-03-17 22:06:52 -07:00
setup.h powerpc/4xx: Remove CONFIG_BOOKE_OR_40x 2024-06-28 22:28:48 +10:00
signal_32.c powerpc/signal32: Force inlining of __unsafe_save_user_regs() and save_tm_user_regs_unsafe() 2023-06-09 23:29:51 +10:00
signal_64.c powerpc/signal: Update comment for clarity 2022-07-28 16:22:14 +10:00
signal.c powerpc: Replace GPL 2.0+ README.legal boilerplate with SPDX 2023-09-19 20:05:58 +10:00
signal.h powerpc: Replace GPL 2.0+ README.legal boilerplate with SPDX 2023-09-19 20:05:58 +10:00
smp-tbsync.c
smp.c powerpc: Split systemcfg struct definitions out from vdso 2024-11-02 12:37:36 +01:00
stacktrace.c powerpc: Replace kretprobe code with rethook on powerpc 2024-09-05 22:25:36 +10:00
static_call.c powerpc/static_call: Implement inline static calls 2025-02-26 21:09:43 +05:30
suspend.c
switch.S powerpc: Fix 'intra_function_call not a direct call' warning 2025-03-10 10:00:17 +05:30
swsusp_32.S powerpc/32: Fix objtool unannotated intra-function call warnings 2022-11-18 19:00:06 +11:00
swsusp_64.c powerpc/suspend: Add prototype for do_after_copyback() 2023-11-30 13:15:49 +11:00
swsusp_85xx.S powerpc: Remove CONFIG_FSL_BOOKE 2022-09-26 22:47:37 +10:00
swsusp_asm64.S powerpc/64: asm use consistent global variable declaration and access 2022-09-28 19:22:12 +10:00
swsusp.c
sys_ppc32.c powerpc/32: fix syscall wrappers with 64-bit arguments 2022-11-01 10:24:09 +11:00
syscall.c treewide: context_tracking: Rename CONTEXT_* into CT_STATE_* 2024-07-29 07:33:10 +05:30
syscalls.c powerpc: Adopt SYSCALL_DEFINE for arch-specific syscall handlers 2022-09-28 19:22:08 +10:00
sysfs.c powerpc/machdep: Drop include of dma-mapping.h 2024-10-29 23:01:05 +11:00
systbl.c powerpc: Don't add __powerpc_ prefix to syscall entry points 2022-10-07 00:59:54 +11:00
tau_6xx.c powerpc, workqueue: Use alloc_ordered_workqueue() to create ordered workqueues 2023-05-08 13:52:27 -10:00
time.c powerpc updates for 6.15 2025-03-27 19:39:08 -07:00
tm.S powerpc: replace #include <asm/export.h> with #include <linux/export.h> 2023-08-16 23:54:48 +10:00
traps.c powerpc: Rely on generic printing of preemption model 2025-03-17 11:23:39 +01:00
ucall.S powerpc: replace #include <asm/export.h> with #include <linux/export.h> 2023-08-16 23:54:48 +10:00
udbg_16550.c powerpc/64: Remove maple platform 2024-10-29 23:01:52 +11:00
udbg.c powerpc: Remove UDBG_RTAS_CONSOLE 2025-02-26 21:15:09 +05:30
uprobes.c powerpc: Reject probes on instructions that can't be single stepped 2022-05-06 00:00:20 +10:00
vdso32_wrapper.S powerpc/vdso: Mark the vDSO code read-only after init 2024-12-18 13:46:38 +05:30
vdso64_wrapper.S powerpc/vdso: Mark the vDSO code read-only after init 2024-12-18 13:46:38 +05:30
vdso.c powerpc/vdso: Switch to generic storage implementation 2025-02-21 09:54:02 +01:00
vecemu.c
vector.S powerpc: Don't clobber f0/vs0 during fp|altivec register save 2023-11-28 23:04:43 +11:00
vmlinux.lds.S powerpc/vmlinux: Remove etext, edata and end 2025-02-24 12:26:21 +05:30
watchdog.c powerpc/watchdog: Switch to use hrtimer_setup() 2025-02-18 10:32:31 +01:00