Re: [PATCH] cxl: Add generic MSI/MSI-X interrupt support

From: Jonathan Cameron
Date: Fri Oct 14 2022 - 11:57:05 EST


On Thu, 13 Oct 2022 10:37:03 -0700
Davidlohr Bueso <dave@xxxxxxxxxxxx> wrote:

> Thanks for having a look.
>
> On Thu, 13 Oct 2022, Jonathan Cameron wrote:
>
> >> +struct cxl_irq_cap {
> >> + const char *name;
> >> + int (*get_max_msgnum)(struct cxl_dev_state *cxlds);
> >
> >For the CPMU case I need to walk the register locator dvsec block so need
> >the callback to take the pci_dev not the cxl_dev_state.
>
> Hmm ok, however maybe I'm missing something, but given a pdev, do we have a
> way to get back to the cxlds?

I'd failed to register we can easily get from cxlds to pci dev.
Had wrong mental model of what embedded what.

>
> ...
>
> >> static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> >> {
> >> struct cxl_register_map map;
> >> @@ -498,6 +558,9 @@ static int cxl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> >> if (IS_ERR(cxlmd))
> >> return PTR_ERR(cxlmd);
> >>
> >> + /* TODO: When there are users, this return value must be checked */
> >> + cxl_pci_alloc_irq_vectors(cxlds);
> >> +
> >
> >Gut feeling is this will end up moving ahead of any of the sub device creation
> >because many of them end up needing interrupts.
> >
> >Also check response from the start - can't see a reason to not do so as we
> >won't be registering any at all if no callbacks provided.
> >
> >So I'd move it above the devm_cxl_add_memdev() call.
>
> Will do. In addition, are you ok with grouping the irq setup for each cxl
> feature/component, ie:
>
> if (cxl_pci_alloc_irq_vectors(cxlds) > 0) {
> cxl_setup_mbox_irq();
> cxl_setup_events_irq();
> cxl_setup_pmu_irq();
> }
>
> I ask mostly from the mailbox perspective, in that we already have
> a mbox setup call and can certainly understand if people would prefer
> it there, but I tend to prefer the above (logically wrt irqs).

I'd rather see it in each of the setup calls. Out in pci.c we
should just be doing minimum to find that max irq number.
e.g. the CPMU driver will rewalk and find it's vector number directly
from it's own register space.

Jonathan
>
> Thanks,
> Davidlohr