From: Niklas Cassel <cassel@kernel.org>
To: Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
Cc: "Manivannan Sadhasivam" <manivannan.sadhasivam@linaro.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Kishon Vijay Abraham I" <kishon@kernel.org>,
"Arnd Bergmann" <arnd@arndb.de>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Gustavo Pimentel" <gustavo.pimentel@synopsys.com>,
"Bjorn Helgaas" <helgaas@kernel.org>,
linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH v2 3/3] misc: pci_endpoint_test: Fix irq_type to convey the correct type
Date: Fri, 31 Jan 2025 13:10:54 +0100 [thread overview]
Message-ID: <Z5y9zpFGkBnY2TG1@ryzen> (raw)
In-Reply-To: <fe8c2233-fa2a-4356-8005-6cbabf6a0e96@socionext.com>
On Fri, Jan 31, 2025 at 07:16:54PM +0900, Kunihiko Hayashi wrote:
> Hi Niklas,
>
> On 2025/01/29 20:58, Niklas Cassel wrote:
> > On Tue, Jan 28, 2025 at 08:02:31PM +0530, Manivannan Sadhasivam wrote:
> > > On Wed, Jan 22, 2025 at 11:24:46AM +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".
> > > >
> > >
> > > This is becoming a nuisance. I think we should get rid of the global
> > > 'irq_type'
> > > and just stick to the one that is configurable using IOCTL command. Even
> > > if the
> > > user has configured the global 'irq_type' it is bound to change with IOCTL
> > > command.
> >
> > +1
>
> After fixing the issue described in this patch,
> we can replace with a new member of 'struct pci_endpoint_test' instead.
Sorry, but I don't understand what you mean here.
You want this patch to be applied.
Then you want to add a new struct member to struct pci_endpoint_test?
struct pci_endpoint_test already has a struct member named irq_type,
so why do you want to add a new member?
Like Mani suggested, I think it would be nice if we could remove the
global irq_type kernel module parameter, and change so that
PCITEST_GET_IRQTYPE returns test->irq_type.
Note that your series does not apply to pci/next, and needs to be rebased.
(It conflicts with f26d37ee9bda ("misc: pci_endpoint_test: Fix IOCTL return value"))
>
> > But I also don't like how since we migrated to selftests:
> > READ_TEST / WRITE_TEST / COPY_TEST unconditionally call
> > ioctl(PCITEST_SET_IRQTYPE, MSI) before doing their thing.
>
> I think that it's better to prepare new patch series.
Here, I was pointing out what I think is a regression with the
migration to selftests. (Which is unrelated to this series.)
I do suggest a way to improve things futher down (introducing a
PCITEST_SET_IRQTYPE, AUTO), but I don't think that you need to be
the one implementing this suggestion, since you did not introduce
this regression.
>
> > Will this cause the test case to fail for platforms that only support MSI-X?
> > (See e.g. dwc/pci-layerscape-ep.c where this could be the case.)
> >
> >
> > Sure, before, in pcitest.sh, we would do:
> >
> >
> > pcitest -i 2
> > pcitest -x $msix
> >
> >
> > pcitest -i 1
> >
> > pcitest -r -s 1
> > pcitest -r -s 1024
> > pcitest -r -s 1025
> > pcitest -r -s 1024000
> > pcitest -r -s 1024001
> >
> >
> > Which would probably print an error if:
> > pcitest -i 1
> > failed.
> >
> > but the READ_TEST / WRITE_TEST / COPY_TEST tests themselves
> > would not fail.
> >
> >
> > Perhaps we should rethink this, and introduce a new
> > PCITEST_SET_IRQTYPE, AUTO
> >
> > I would be fine if
> > READ_TEST / WRITE_TEST / COPY_TEST
> > called PCITEST_SET_IRQTYPE, AUTO
> > before doing their thing.
> >
> >
> >
> > How I suggest PCITEST_SET_IRQTYPE, AUTO
> > would work:
> >
> > Since we now have capabilties merged:
> > https://lore.kernel.org/linux-pci/20241203063851.695733-4-cassel@kernel.org/
> >
> > Add epc_features->msi_capable and epc->features->msix_capable
> > as two new bits in the PCI_ENDPOINT_TEST_CAPS register.
> >
> > If PCITEST_SET_IRQTYPE, AUTO:
> > if EP CAP has msi_capable set: set IRQ type MSI
> > else if EP CAP has msix_capable set: set IRQ type MSI-X
> > else: set legacy/INTx
>
> There is something ambiguous about the behavior for me.
>
> The test->irq_type has a state "UNDEFINED".
> After issueing "Clear IRQ", test->irq_type becomes "UNDEFINED" currently,
> and all tests with IRQs will fail until new test->irq_type is set.
That is fine, no?
If a user calls PCITEST_CLEAR_IRQ without doing a PCITEST_SET_IRQTYPE
afterwards, what else can the tests relying on IRQs to other than fail?
FWIW, tools/testing/selftests/pci_endpoint/pci_endpoint_test.c never does
an ioctl(PCITEST_CLEAR_IRQ).
>
> If SET_IRQTYPE is AUTO, how will test->irq_type be set?
I was thinking something like this:
pci_endpoint_test_set_irq()
{
u32 caps = pci_endpoint_test_readl(test, PCI_ENDPOINT_TEST_CAPS);
...
if (req_irq_type == IRQ_TYPE_AUTO) {
if (caps & MSI_CAPABLE)
test->irq_type = IRQ_TYPE_MSI;
else if (caps & MSIX_CAPABLE)
test->irq_type = IRQ_TYPE_MSIX;
else
test->irq_type = IRQ_TYPE_INTX;
}
...
}
Kind regards,
Niklas
next prev parent reply other threads:[~2025-01-31 12:10 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-22 2:24 [PATCH v2 0/3] Fix some issues related to an interrupt type in pci_endpoint_test Kunihiko Hayashi
2025-01-22 2:24 ` [PATCH v2 1/3] misc: pci_endpoint_test: Avoid issue of interrupts remaining after request_irq error Kunihiko Hayashi
2025-01-28 14:12 ` Manivannan Sadhasivam
2025-01-29 7:54 ` Kunihiko Hayashi
2025-02-07 18:02 ` Manivannan Sadhasivam
2025-02-10 1:39 ` Kunihiko Hayashi
2025-01-22 2:24 ` [PATCH v2 2/3] misc: pci_endpoint_test: Fix disyplaying irq_type " Kunihiko Hayashi
2025-01-28 14:20 ` Manivannan Sadhasivam
2025-01-22 2:24 ` [PATCH v2 3/3] misc: pci_endpoint_test: Fix irq_type to convey the correct type Kunihiko Hayashi
2025-01-28 14:32 ` Manivannan Sadhasivam
2025-01-29 7:55 ` Kunihiko Hayashi
2025-01-29 11:58 ` Niklas Cassel
2025-01-31 10:16 ` Kunihiko Hayashi
2025-01-31 12:10 ` Niklas Cassel [this message]
2025-01-31 12:20 ` Niklas Cassel
2025-01-31 13:13 ` Niklas Cassel
2025-02-03 8:03 ` Kunihiko Hayashi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z5y9zpFGkBnY2TG1@ryzen \
--to=cassel@kernel.org \
--cc=arnd@arndb.de \
--cc=gregkh@linuxfoundation.org \
--cc=gustavo.pimentel@synopsys.com \
--cc=hayashi.kunihiko@socionext.com \
--cc=helgaas@kernel.org \
--cc=kishon@kernel.org \
--cc=kw@linux.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.