On 2 April 2025 22:01:16 CEST, Frank Li <Frank.li@xxxxxxx> wrote: >On Wed, Apr 02, 2025 at 10:57:00AM +0200, Niklas Cassel wrote: >> Commit a402006d48a9 ("misc: pci_endpoint_test: Remove global 'irq_type' >> and 'no_msi'") changed so that the default IRQ vector requested by >> pci_endpoint_test_probe() was no longer the module param 'irq_type', >> but instead test->irq_type. test->irq_type is by default >> IRQ_TYPE_UNDEFINED (until someone calls ioctl(PCITEST_SET_IRQTYPE)). >> >> However, the commit also changed so that after initializing test->irq_type >> to IRQ_TYPE_UNDEFINED, it also overrides it with driver_data->irq_type, if >> the PCI device and vendor ID provides driver_data. >> >> This causes a regression for PCI device and vendor IDs that do not provide >> driver_data, and the driver now fails to probe on such platforms. >> >> Considering that the pci endpoint selftests and the old pcitest always >> call ioctl(PCITEST_SET_IRQTYPE) > >Maybe my pcitest is too old. "pcitest -r" have not call ioctl(PCITEST_SET_IRQTYPE). >I need run "pcitest -i 1" firstly. It'd better remove pcitest information >because pcitest already was removed from git tree. and now pcitest always >show NOT OKAY. If you are on an old version, the return value from the ioctls have been inverted by Mani: https://github.com/torvalds/linux/commit/f26d37ee9bda938e968d0e11ba1f8f1588b2a135 But you should use the pci endpoint selftest, or the pcitest.sh shell script. Both the pci endpoint selftest and the pcitest.sh shell script always do ioctl(PCITEST_SET_IRQTYPE) before doing a read/write/copy test. Like you said, pcitest and the matching pcitest.sh shell script have been removed, so I suggest using the selftest. > >> before performing any test that requires >> IRQs, simply remove the allocation of IRQs in pci_endpoint_test_probe(), >> and defer it until ioctl(PCITEST_SET_IRQTYPE) has been called. >> >> A positive side effect of this is that even if the endpoint controller has >> issues with IRQs, the user can do still do all the tests/ioctls() that do >> not require working IRQs, e.g. PCITEST_BAR and PCITEST_BARS. >> >> This also means that we can remove the now unused irq_type from >> driver_data. The irq_type will always be the one configured by the user >> using ioctl(PCITEST_SET_IRQTYPE). (A user that does not know, or care >> which irq_type that is used, can use PCITEST_IRQ_TYPE_AUTO. This has >> superseded the need for a default irq_type in driver_data.) > >But you remove "irq_type" at driver_data, does it means PCITEST_IRQ_TYPE_AUTO >will not be supported? It is supported by the selftest. It is not supported by pcitest since it has been removed from the tree. driver_data was just specifying the default IRQ type, but that IRQ type was always overriden using ioctl(PCITEST_SET_IRQTYPE) before a read/write/copy/test by the pcitest.sh shell script and the selftest, so the IRQ type in driver_data was quite pointless. Kind regards, Niklas