[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/3] x86/pt: enable binding of GSIs to a PVH Dom0
>>> On 16.05.17 at 17:55, <roger.pau@xxxxxxxxxx> wrote: > On Fri, May 12, 2017 at 07:42:51AM -0600, Jan Beulich wrote: >> >>> On 19.04.17 at 17:11, <roger.pau@xxxxxxxxxx> wrote: >> > Note that currently there's no support for unbinding this interrupts. >> >> Do you plan to deal with that before this changes goes in? Aiui this >> not working means you can't pass through devices with pin based >> interrupts once Dom0 chose to bind to them. Otoh hand you modify >> pt_irq_destroy_bind(), so I'm a little puzzled ... > > Yes, I modify pt_irq_destroy_bind to return EOPNOTSUPP when trying to unbind > such an interrupt. I can implement the unbind, but it's not going to be used > ATM. Is it not? I can see the mentioned pass-through case to be of no interest, but wouldn't a well behaved kernel perhaps unmap IRQs while shutting down? >> > + spin_lock(&d->arch.hvm_domain.irq_lock); >> > + if ( !hvm_irq->gsi_assert_count[gsi] ) >> > + { >> > + hvm_irq->gsi_assert_count[gsi]++; >> >> Why is this an increment instead of a simple write of 1? Or the >> other way around - why is this not always incrementing, just like >> __hvm_pci_intx_assert() does? (Symmetric questions then for >> hvm_gsi_deassert()). > > __hvm_pci_intx_{de}assert has an array that tracks the status of each > interrupt > line, and Xen does the routing based on that (the __test_and_clear_bit at the > top of __hvm_pci_intx_assert). That prevents the same line from triggering > multiple times, which is not available here, and thus Xen needs to rely on > gsi_assert_count in order to know if the GSI is pending or not. > > Switched to use a set to 1/0 instead of the increment, which I agree makes > this > clearer. And altogether this likely would benefit from a comment put somewhere. >> > @@ -504,10 +567,18 @@ int pt_irq_create_bind( >> > spin_unlock(&d->event_lock); >> > >> > if ( iommu_verbose ) >> > - printk(XENLOG_G_INFO >> > - "d%d: bind: m_gsi=%u g_gsi=%u dev=%02x.%02x.%u >> > intx=%u\n", >> > - d->domain_id, pirq, guest_gsi, bus, >> > - PCI_SLOT(device), PCI_FUNC(device), intx); >> > + { >> > + char buf[50]; >> > + >> > + if ( !is_hardware_domain(d) ) >> > + snprintf(buf, ARRAY_SIZE(buf), " dev=%02x.%02x.%u >> > intx=%u", >> > + digl->bus, PCI_SLOT(digl->device), >> > + PCI_FUNC(digl->device), digl->intx); >> >> The buffer array seems heavily over-sized - my counting gives at best >> slightly over 20 characters you actually need. > > AFAICT max length should be 21, would you be fine with me setting it to 24 to > be safe? Sure. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |