Re: [PATCH] misc: pci_endpoint_test: Defer IRQ allocation until ioctl(PCITEST_SET_IRQTYPE)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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





[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux