[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [RFC XEN PATCH v8 5/5] domctl: Add XEN_DOMCTL_gsi_permission to grant gsi
On 2024/5/30 23:51, Jan Beulich wrote: > On 30.05.2024 13:19, Chen, Jiqian wrote: >> On 2024/5/29 20:22, Jan Beulich wrote: >>> On 29.05.2024 13:13, Chen, Jiqian wrote: >>>> On 2024/5/29 15:10, Jan Beulich wrote: >>>>> On 29.05.2024 08:56, Chen, Jiqian wrote: >>>>>> On 2024/5/29 14:31, Jan Beulich wrote: >>>>>>> On 29.05.2024 04:41, Chen, Jiqian wrote: >>>>>>>> But I found in function init_irq_data: >>>>>>>> for ( irq = 0; irq < nr_irqs_gsi; irq++ ) >>>>>>>> { >>>>>>>> int rc; >>>>>>>> >>>>>>>> desc = irq_to_desc(irq); >>>>>>>> desc->irq = irq; >>>>>>>> >>>>>>>> rc = init_one_irq_desc(desc); >>>>>>>> if ( rc ) >>>>>>>> return rc; >>>>>>>> } >>>>>>>> Does it mean that when irq < nr_irqs_gsi, the gsi and irq is a 1:1 >>>>>>>> mapping? >>>>>>> >>>>>>> No, as explained before. I also don't see how you would derive that >>>>>>> from the code above. >>>>>> Because here set desc->irq = irq, and it seems there is no other place >>>>>> to change this desc->irq, so, gsi 1 is considered to irq 1. >>>>> >>>>> What are you taking this from? The loop bound isn't nr_gsis, and the >>>>> iteration >>>>> variable isn't in GSI space either; it's in IRQ numbering space. In this >>>>> loop >>>>> we're merely leveraging that every GSI has a corresponding IRQ; >>>>> there are no assumptions made about the mapping between the two. Afaics >>>>> at least. >>>>> >>>>>>> "nr_irqs_gsi" describes what its name says: The number of >>>>>>> IRQs mapping to a (_some_) GSI. That's to tell them from the non-GSI >>>>>>> (i.e. >>>>>>> mainly MSI) ones. There's no implication whatsoever on the IRQ <-> GSI >>>>>>> mapping. >>>>>>> >>>>>>>> What's more, when using PHYSDEVOP_setup_gsi, it calls mp_register_gsi, >>>>>>>> and in mp_register_gsi, it uses " desc = irq_to_desc(gsi); " to get >>>>>>>> irq_desc directly. >>>>>>> >>>>>>> Which may be wrong, while that wrong-ness may not have hit anyone in >>>>>>> practice (for reasons that would need working out). >>>>>>> >>>>>>>> Combining above, can we consider "gsi == irq" when irq < nr_irqs_gsi ? >>>>>>> >>>>>>> Again - no. >>>>>> Since you are certain that they are not equal, could you tell me where >>>>>> show they are not equal or where build their mappings, >>>>>> so that I can know how to do a conversion gsi from irq. >>>>> >>>>> I did point you at the ACPI Interrupt Source Override structure before. >>>>> We're parsing those in acpi_parse_int_src_ovr(), to give you a place to >>>>> start going from. >>>> Oh! I think I know. >>>> If I want to transform gsi to irq, I need to do below: >>>> int irq, entry, ioapic, pin; >>>> >>>> ioapic = mp_find_ioapic(gsi); >>>> pin = gsi - mp_ioapic_routing[ioapic].gsi_base; >>>> entry = find_irq_entry(ioapic, pin, mp_INT); >>>> irq = pin_2_irq(entry, ioapic, pin); >>>> >>>> Am I right? >>> >>> This looks plausible, yes. >> I dump all mpc_config_intsrc of array mp_irqs, it shows: >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 0 dstapic >> 33 dstirq 2 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 15 srcbus 0 srcbusirq 9 >> dstapic 33 dstirq 9 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 1 dstapic >> 33 dstirq 1 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 3 dstapic >> 33 dstirq 3 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 4 dstapic >> 33 dstirq 4 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 5 dstapic >> 33 dstirq 5 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 6 dstapic >> 33 dstirq 6 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 7 dstapic >> 33 dstirq 7 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 8 dstapic >> 33 dstirq 8 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 10 >> dstapic 33 dstirq 10 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 11 >> dstapic 33 dstirq 11 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 12 >> dstapic 33 dstirq 12 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 13 >> dstapic 33 dstirq 13 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 14 >> dstapic 33 dstirq 14 >> (XEN) find_irq_entry type 3 irqtype 0 irqflag 0 srcbus 0 srcbusirq 15 >> dstapic 33 dstirq 15 >> >> It seems only Legacy irq and gsi[0:15] has a mapping in mp_irqs. >> Other gsi can be considered 1:1 mapping with irq? Or are there other places >> reflect the mapping between irq and gsi? > > It may be uncommon to have overrides for higher GSIs, but I don't think ACPI > disallows that. Do you suggest me to add overrides for higher GSIs into array mp_irqs? > > Jan -- Best regards, Jiqian Chen.
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |