There are two variables that indicate the interrupt type to be used
in the next test execution, "irq_type" as global and test->irq_type.
The global is referenced from pci_endpoint_test_get_irq() to preserve
the current type for ioctl(PCITEST_GET_IRQTYPE).
The type set in this function isn't reflected in the global "irq_type",
so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
As a result, the wrong type will be displayed in "pcitest" as follows:
# pcitest -i 0
SET IRQ TYPE TO LEGACY: OKAY
# pcitest -I
GET IRQ TYPE: MSI
Fix this issue by propagating the current type to the global "irq_type".
Cc: stable@vger.kernel.org
Fixes: b2ba9225e031 ("misc: pci_endpoint_test: Avoid using module parameter to determine irqtype")
Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
---
drivers/misc/pci_endpoint_test.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
index f13fa32ef91a..6a0972e7674f 100644
--- a/drivers/misc/pci_endpoint_test.c
+++ b/drivers/misc/pci_endpoint_test.c
@@ -829,6 +829,7 @@ static int pci_endpoint_test_set_irq(struct pci_endpoint_test *test,
return ret;
}
+ irq_type = test->irq_type;
return 0;
}
--
2.25.1
On Mon, Feb 10, 2025 at 04:58:10PM +0900, Kunihiko Hayashi wrote:
> There are two variables that indicate the interrupt type to be used
> in the next test execution, "irq_type" as global and test->irq_type.
>
> The global is referenced from pci_endpoint_test_get_irq() to preserve
> the current type for ioctl(PCITEST_GET_IRQTYPE).
>
> The type set in this function isn't reflected in the global "irq_type",
> so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
> As a result, the wrong type will be displayed in "pcitest" as follows:
>
> # pcitest -i 0
> SET IRQ TYPE TO LEGACY: OKAY
> # pcitest -I
> GET IRQ TYPE: MSI
>
Could you please post the failure with kselftest that got merged into v6.14-rc1?
> Fix this issue by propagating the current type to the global "irq_type".
>
> Cc: stable@vger.kernel.org
> Fixes: b2ba9225e031 ("misc: pci_endpoint_test: Avoid using module parameter to determine irqtype")
> Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
> ---
> drivers/misc/pci_endpoint_test.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
> index f13fa32ef91a..6a0972e7674f 100644
> --- a/drivers/misc/pci_endpoint_test.c
> +++ b/drivers/misc/pci_endpoint_test.c
> @@ -829,6 +829,7 @@ static int pci_endpoint_test_set_irq(struct pci_endpoint_test *test,
> return ret;
> }
>
> + irq_type = test->irq_type;
> return 0;
> }
>
> --
> 2.25.1
>
--
மணிவண்ணன் சதாசிவம்
Hi Manivannan,
On 2025/02/15 2:25, Manivannan Sadhasivam wrote:
> On Mon, Feb 10, 2025 at 04:58:10PM +0900, Kunihiko Hayashi wrote:
>> There are two variables that indicate the interrupt type to be used
>> in the next test execution, "irq_type" as global and test->irq_type.
>>
>> The global is referenced from pci_endpoint_test_get_irq() to preserve
>> the current type for ioctl(PCITEST_GET_IRQTYPE).
>>
>> The type set in this function isn't reflected in the global "irq_type",
>> so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
>> As a result, the wrong type will be displayed in "pcitest" as follows:
>>
>> # pcitest -i 0
>> SET IRQ TYPE TO LEGACY: OKAY
>> # pcitest -I
>> GET IRQ TYPE: MSI
>>
>
> Could you please post the failure with kselftest that got merged into
> v6.14-rc1?
The kselftest doesn't call GET_IRQTYPE, so current kselftest doesn't fail.
If necessary, I can add GET_IRQTYPE test after SET_IRQTYPE of each
interrupt test prior to this patch.
pci_ep_ioctl(PCITEST_SET_IRQTYPE, 0);
ASSERT_EQ(0, ret) TH_LOG("Can't set Legacy IRQ type");
+ pci_ep_ioctl(PCITEST_GET_IRQTYPE, 0);
+ ASSERT_EQ(0, ret) TH_LOG("Can't get Legacy IRQ type");
However, pci_ep_ioctl() returns zero if OK, the return value should be
changed to the actual return value.
#define pci_ep_ioctl(cmd, arg) \
({ \
ret = ioctl(self->fd, cmd, arg); \
- ret = ret < 0 ? -errno : 0; \
+ ret = ret < 0 ? -errno : ret; \
})
Before applying the patch, this test fails.
# RUN pci_ep_basic.LEGACY_IRQ_TEST ...
# pci_endpoint_test.c:104:LEGACY_IRQ_TEST:Expected 0 (0) == ret (1)
# pci_endpoint_test.c:104:LEGACY_IRQ_TEST:Can't get Legacy IRQ type
# LEGACY_IRQ_TEST: Test terminated by assertion
# FAIL pci_ep_basic.LEGACY_IRQ_TEST
Thank you,
---
Best Regards
Kunihiko Hayashi
On Mon, Feb 17, 2025 at 08:26:44PM +0900, Kunihiko Hayashi wrote:
> Hi Manivannan,
>
> On 2025/02/15 2:25, Manivannan Sadhasivam wrote:
> > On Mon, Feb 10, 2025 at 04:58:10PM +0900, Kunihiko Hayashi wrote:
> > > There are two variables that indicate the interrupt type to be used
> > > in the next test execution, "irq_type" as global and test->irq_type.
> > >
> > > The global is referenced from pci_endpoint_test_get_irq() to preserve
> > > the current type for ioctl(PCITEST_GET_IRQTYPE).
> > >
> > > The type set in this function isn't reflected in the global "irq_type",
> > > so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
> > > As a result, the wrong type will be displayed in "pcitest" as follows:
> > >
> > > # pcitest -i 0
> > > SET IRQ TYPE TO LEGACY: OKAY
> > > # pcitest -I
> > > GET IRQ TYPE: MSI
> > >
> >
> > Could you please post the failure with kselftest that got merged into
> > v6.14-rc1?
>
> The kselftest doesn't call GET_IRQTYPE, so current kselftest doesn't fail.
>
> If necessary, I can add GET_IRQTYPE test after SET_IRQTYPE of each
> interrupt test prior to this patch.
>
> pci_ep_ioctl(PCITEST_SET_IRQTYPE, 0);
> ASSERT_EQ(0, ret) TH_LOG("Can't set Legacy IRQ type");
>
> + pci_ep_ioctl(PCITEST_GET_IRQTYPE, 0);
> + ASSERT_EQ(0, ret) TH_LOG("Can't get Legacy IRQ type");
>
Sure.
> However, pci_ep_ioctl() returns zero if OK, the return value should be
> changed to the actual return value.
>
> #define pci_ep_ioctl(cmd, arg) \
> ({ \
> ret = ioctl(self->fd, cmd, arg); \
> - ret = ret < 0 ? -errno : 0; \
> + ret = ret < 0 ? -errno : ret; \
> })
>
Ok.
> Before applying the patch, this test fails.
>
> # RUN pci_ep_basic.LEGACY_IRQ_TEST ...
> # pci_endpoint_test.c:104:LEGACY_IRQ_TEST:Expected 0 (0) == ret (1)
> # pci_endpoint_test.c:104:LEGACY_IRQ_TEST:Can't get Legacy IRQ type
> # LEGACY_IRQ_TEST: Test terminated by assertion
> # FAIL pci_ep_basic.LEGACY_IRQ_TEST
>
Looks good to me.
- Mani
--
மணிவண்ணன் சதாசிவம்
On Mon, Feb 10, 2025 at 04:58:10PM +0900, Kunihiko Hayashi wrote:
> There are two variables that indicate the interrupt type to be used
> in the next test execution, "irq_type" as global and test->irq_type.
>
> The global is referenced from pci_endpoint_test_get_irq() to preserve
> the current type for ioctl(PCITEST_GET_IRQTYPE).
>
> The type set in this function isn't reflected in the global "irq_type",
> so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
> As a result, the wrong type will be displayed in "pcitest" as follows:
>
> # pcitest -i 0
> SET IRQ TYPE TO LEGACY: OKAY
> # pcitest -I
> GET IRQ TYPE: MSI
>
> Fix this issue by propagating the current type to the global "irq_type".
>
> Cc: stable@vger.kernel.org
> Fixes: b2ba9225e031 ("misc: pci_endpoint_test: Avoid using module parameter to determine irqtype")
> Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
> ---
> drivers/misc/pci_endpoint_test.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/drivers/misc/pci_endpoint_test.c b/drivers/misc/pci_endpoint_test.c
> index f13fa32ef91a..6a0972e7674f 100644
> --- a/drivers/misc/pci_endpoint_test.c
> +++ b/drivers/misc/pci_endpoint_test.c
> @@ -829,6 +829,7 @@ static int pci_endpoint_test_set_irq(struct pci_endpoint_test *test,
> return ret;
> }
>
> + irq_type = test->irq_type;
It feels a bit silly to add this line, when you remove this exact line in
the next patch. Perhaps just drop this patch?
Kind regards,
Niklas
Hi Niklas,
On 2025/02/11 1:01, Niklas Cassel wrote:
> On Mon, Feb 10, 2025 at 04:58:10PM +0900, Kunihiko Hayashi wrote:
>> There are two variables that indicate the interrupt type to be used
>> in the next test execution, "irq_type" as global and test->irq_type.
>>
>> The global is referenced from pci_endpoint_test_get_irq() to preserve
>> the current type for ioctl(PCITEST_GET_IRQTYPE).
>>
>> The type set in this function isn't reflected in the global "irq_type",
>> so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
>> As a result, the wrong type will be displayed in "pcitest" as follows:
>>
>> # pcitest -i 0
>> SET IRQ TYPE TO LEGACY: OKAY
>> # pcitest -I
>> GET IRQ TYPE: MSI
>>
>> Fix this issue by propagating the current type to the global "irq_type".
>>
>> Cc: stable@vger.kernel.org
>> Fixes: b2ba9225e031 ("misc: pci_endpoint_test: Avoid using module
> parameter to determine irqtype")
>> Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
>> ---
>> drivers/misc/pci_endpoint_test.c | 1 +
>> 1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/misc/pci_endpoint_test.c
> b/drivers/misc/pci_endpoint_test.c
>> index f13fa32ef91a..6a0972e7674f 100644
>> --- a/drivers/misc/pci_endpoint_test.c
>> +++ b/drivers/misc/pci_endpoint_test.c
>> @@ -829,6 +829,7 @@ static int pci_endpoint_test_set_irq(struct
> pci_endpoint_test *test,
>> return ret;
>> }
>>
>> + irq_type = test->irq_type;
>
> It feels a bit silly to add this line, when you remove this exact line in
> the next patch. Perhaps just drop this patch?
This fix will be removed in patch 4/5, so it seems no means.
However, there is an issue in the stable version, as mentioned in the
commit message, so I fix it here.
I'll treat it separately if necessary.
Thank you,
---
Best Regards
Kunihiko Hayashi
On Thu, Feb 13, 2025 at 07:21:45PM +0900, Kunihiko Hayashi wrote:
> Hi Niklas,
>
> On 2025/02/11 1:01, Niklas Cassel wrote:
> > On Mon, Feb 10, 2025 at 04:58:10PM +0900, Kunihiko Hayashi wrote:
> > > There are two variables that indicate the interrupt type to be used
> > > in the next test execution, "irq_type" as global and test->irq_type.
> > >
> > > The global is referenced from pci_endpoint_test_get_irq() to preserve
> > > the current type for ioctl(PCITEST_GET_IRQTYPE).
> > >
> > > The type set in this function isn't reflected in the global "irq_type",
> > > so ioctl(PCITEST_GET_IRQTYPE) returns the previous type.
> > > As a result, the wrong type will be displayed in "pcitest" as follows:
> > >
> > > # pcitest -i 0
> > > SET IRQ TYPE TO LEGACY: OKAY
> > > # pcitest -I
> > > GET IRQ TYPE: MSI
> > >
> > > Fix this issue by propagating the current type to the global "irq_type".
> > >
> > > Cc: stable@vger.kernel.org
> > > Fixes: b2ba9225e031 ("misc: pci_endpoint_test: Avoid using module
> > parameter to determine irqtype")
> > > Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
> > > ---
> > > drivers/misc/pci_endpoint_test.c | 1 +
> > > 1 file changed, 1 insertion(+)
> > >
> > > diff --git a/drivers/misc/pci_endpoint_test.c
> > b/drivers/misc/pci_endpoint_test.c
> > > index f13fa32ef91a..6a0972e7674f 100644
> > > --- a/drivers/misc/pci_endpoint_test.c
> > > +++ b/drivers/misc/pci_endpoint_test.c
> > > @@ -829,6 +829,7 @@ static int pci_endpoint_test_set_irq(struct
> > pci_endpoint_test *test,
> > > return ret;
> > > }
> > > + irq_type = test->irq_type;
> >
> > It feels a bit silly to add this line, when you remove this exact line in
> > the next patch. Perhaps just drop this patch?
>
> This fix will be removed in patch 4/5, so it seems no means.
> However, there is an issue in the stable version, as mentioned in the
> commit message, so I fix it here.
Ok. Having a small fix first that can be backported, which is then followed
by a bigger cleanup, makes sense in this case.
Reviewed-by: Niklas Cassel <cassel@kernel.org>
© 2016 - 2026 Red Hat, Inc.