[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] HPET interrupt remapping during boot
On Wed, Oct 09, 2019 at 02:03:12PM +0200, Jan Beulich wrote: > On 09.10.2019 13:29, Roger Pau Monné wrote: > > On Wed, Oct 09, 2019 at 12:41:05PM +0200, Jan Beulich wrote: > >> On 09.10.2019 12:11, Roger Pau Monné wrote: > >>> And it does print the following when setting up the iommu: > >>> > >>> (XEN) ioapic 0 pin 0 not masked > >>> (XEN) vec=00 delivery=ExINT dest=P status=0 polarity=0 irr=0 trig=E > >>> mask=0 dest_id:00010000 > >>> > >>> I wonder, shouldn't all pins of all the io-apics be masked at boot? > >> > >> I think you might get different answers here depending on whether > >> you ask firmware or OS people. In fact there are cases where the > >> IO-APIC needs to be left in this state, I think, but such would > >> likely need properly reflecting in ACPI tables (albeit I don't > >> know/recall how this would be done; looking at the code ). This goes back > >> to times > >> when IO-APICs were new and OSes would not even know about them, > >> yet they wouldn't get any interrupts to work if fiddling with > >> only the PIC (sitting behind IO-APIC pin 0). > >> > >> See enable_IO_APIC(), where we actually use this property to > >> determine the pin behind which the 8259 sits. > >> > >> I've seen quite many systems where in the BIOS setup you have an > >> option to select whether you have an "ACPI OS" (wording of course > >> varies). I've never checked whether this may e.g. reflect itself > >> in the handover state of the GSI 0 RTE. > >> > >> In your testing patch, could you also log the PIC mask bytes? > >> There ought to be at least one unmasked; or wait - there actually > >> is a spurious interrupt there (right before IOMMU initialization): > >> > >> (XEN) spurious 8259A interrupt: IRQ7. > > > > So I've added a log of the PIC masks just before checking the ioapic > > masks: > > > > (XEN) 8259A-1 mask: fe 8259A-2 mask: ff > > > > AFAICT IRQ7 seems to be unmasked? Sorry my knowledge of PICs is quite > > limited since I've never had to deal with them. > > That's IRQ0 then which is unmasked. As said the spurious one > (IRQ7) can't be masked (at the PIC); only the "normal" IRQ7 can > be. > > > The line I've added is: > > > > printk("8259A-1 mask: %x 8259A-2 mask: %x\n", inb(0x21), inb(0xA1)); > > > > I wonder why does Xen even has any code to deal with the PICs, > > shouldn't we rely on io-apics only for legacy delivery? > > There are (were?) systems where things wouldn't work without. > > >> Hence I wonder if there's not possibly a 2nd one once the IOMMU > >> has been set up. > > > > Right, then I guess we either mask all the io-apic pins or we setup > > proper remapping entries for non-masked pins? (in order to avoid iommu > > faults) > > Making the ExtInt entry is at least worth an experiment, to > (hopefully) confirm that this would take care of the IOMMU > fault. But I'm afraid (as per above) it's not an option in > general. What I could see us doing is mask the entry if all > legacy IRQs are handled through the IO-APIC. This would take > care of spurious interrupts, as these are the only ones > which can make it through when the PIC mask bits are all set. > However, maybe it is legitimate to mask the ExtInt entry > when an IOMMU comes into play. That was my thinking, ie: make sure every io-apic pin is masked before enabling iommu interrupt remapping. Nothing useful can happen of having io-apic pins unmasked, as the remapping is not setup anyway. If/when those pins get used a proper remapping entry is going to be setup, and the pin would then be unmasked. > As to "proper" remapping entries: I'll have to look at the > spec what they say about this. There's only one IRT index > that we can put in the RTE, yet this would need to serve all > 15 IRQs potentially coming through the PIC. Recall that the > vector gets supplied by the PIC in the ExtInt case, not by > the IO-APIC RTE. You can set the delivery mode of the IRTE to ExtINT, much like how this is done on the io-apic, and then poke the PIC to figure out which IRQ triggered? Roger. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |