Hi, On Mon, Sep 09, 2024 at 09:02:20AM -0500, Narayana Murty N wrote: > VFIO_EEH_PE_INJECT_ERR ioctl is currently failing on pseries > due to missing implementation of err_inject eeh_ops for pseries. > This patch implements pseries_eeh_err_inject in eeh_ops/pseries > eeh_ops. Implements support for injecting MMIO load/store error > for testing from user space. > > The check on PCI error type (bus type) code is moved to platform > code, since the eeh_pe_inject_err can be allowed to more error > types depending on platform requirement. Removal of the check for > 'type' in eeh_pe_inject_err() doesn't impact PowerNV as > pnv_eeh_err_inject() already has an equivalent check in place. > > Signed-off-by: Narayana Murty N <nnmli...@linux.ibm.com> > Reviewed-by: Vaibhav Jain <vaib...@linux.ibm.com> > > --- > arch/powerpc/include/asm/eeh.h | 2 +- > arch/powerpc/kernel/eeh.c | 9 +++-- > arch/powerpc/platforms/pseries/eeh_pseries.c | 39 +++++++++++++++++++- > 3 files changed, 44 insertions(+), 6 deletions(-) > > diff --git a/arch/powerpc/include/asm/eeh.h b/arch/powerpc/include/asm/eeh.h > index 91a9fd53254f..317b12fc1fe4 100644 > --- a/arch/powerpc/include/asm/eeh.h > +++ b/arch/powerpc/include/asm/eeh.h > @@ -308,7 +308,7 @@ int eeh_pe_reset(struct eeh_pe *pe, int option, bool > include_passed); > int eeh_pe_configure(struct eeh_pe *pe); > int eeh_pe_inject_err(struct eeh_pe *pe, int type, int func, > unsigned long addr, unsigned long mask); > - > +int eeh_pe_inject_mmio_error(struct pci_dev *pdev); > /** > * EEH_POSSIBLE_ERROR() -- test for possible MMIO failure. > * > diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c > index d03f17987fca..49ab11a287a3 100644 > --- a/arch/powerpc/kernel/eeh.c > +++ b/arch/powerpc/kernel/eeh.c > @@ -1537,10 +1537,6 @@ int eeh_pe_inject_err(struct eeh_pe *pe, int type, int > func, > if (!eeh_ops || !eeh_ops->err_inject) > return -ENOENT; > > - /* Check on PCI error type */ > - if (type != EEH_ERR_TYPE_32 && type != EEH_ERR_TYPE_64) > - return -EINVAL; > - > /* Check on PCI error function */ > if (func < EEH_ERR_FUNC_MIN || func > EEH_ERR_FUNC_MAX) > return -EINVAL; > @@ -1851,6 +1847,11 @@ static const struct file_operations eeh_dev_break_fops > = { > .read = eeh_debugfs_dev_usage, > }; > > +int eeh_pe_inject_mmio_error(struct pci_dev *pdev) > +{ > + return eeh_debugfs_break_device(pdev); > +} > +
The new function, as the context suggests, is only compiled if CONFIG_DEBUG_FS=y. However, it is called unconditionally. With CONFIG_DEBUG_FS=n, this results in powerpc64-linux-ld: arch/powerpc/platforms/pseries/eeh_pseries.o: in function `pseries_eeh_err_inject': /opt/buildbot/slave/qemu-ppc64/build/arch/powerpc/platforms/pseries/eeh_pseries.c:814:(.text+0x554): undefined reference to `eeh_pe_inject_mmio_error' make[3]: *** [/opt/buildbot/slave/qemu-ppc64/build/scripts/Makefile.vmlinux:34: vmlinux] Error 1 make[2]: *** [/opt/buildbot/slave/qemu-ppc64/build/Makefile:1157: vmlinux] Error 2 I'll enable CONFIG_DEBUG_FS in my tests and won't report this further, but you might want to consider fixing the problem at some point. Guenter