|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 2/2] ns16550: enable use of PCI MSI
>>> On 29.11.18 at 18:33, <roger.pau@xxxxxxxxxx> wrote:
> On Mon, Oct 01, 2018 at 10:26:05AM -0600, Jan Beulich wrote:
>> --- a/xen/arch/x86/msi.c
>> +++ b/xen/arch/x86/msi.c
>> @@ -742,6 +742,16 @@ static int msi_capability_init(struct pc
>>
>> *desc = entry;
>> /* Restore the original MSI enabled bits */
>> + if ( !hardware_domain )
>
> Wouldn't it be better to assign the device to dom_xen (pdev->domain =
> dom_xen), and then check if the owner is dom_xen here?
I'm not sure this couldn't be wrong in the general case (and we
sit on a generic code path here): It depends on whether Dom0
can modify the device's config space, and I wouldn't want to
(here) introduce a connection between dom_xen ownership and
whether Dom0 can control INTX. The comment below here is
specifically worded to the effect of why I use hardware_domain
here.
If we ever get into the situation of wanting to enable MSI on an
internally used device _after_ Dom0 has started, this would need
careful re-considering.
> Or at the point where this is called from the serial console driver is
> too early for dom_xen to exist?
ns16550_init_postirq() is where both MSI setup and hiding of the
device happen, so in principle this would seem to be possible for
the specific case of a serial card.
>> @@ -777,8 +777,65 @@ static void __init ns16550_init_postirq(
>> uart->ps_bdf[0], uart->ps_bdf[1],
>> uart->ps_bdf[2]);
>> }
>> +
>> + if ( uart->msi )
>> + {
>> + struct msi_info msi = {
>> + .bus = uart->ps_bdf[0],
>> + .devfn = PCI_DEVFN(uart->ps_bdf[1], uart->ps_bdf[2]),
>> + .irq = rc = uart->irq,
>> + .entry_nr = 1
>> + };
>> +
>> + if ( rc > 0 )
>> + {
>> + struct msi_desc *msi_desc = NULL;
>> +
>> + pcidevs_lock();
>> +
>> + rc = pci_enable_msi(&msi, &msi_desc);
>
> Before attempting to enable MSI, shouldn't you make sure memory
> decoding is enabled in case the device uses MSIX?
>
> I think this code assumes the device will always use MSI? (in which
> case my above question is likely moot).
I've yet to see serial cards using MSI-X. If we get to the point where
this is needed, we also may need to first set up the BAR for the MSI-X
table. Furthermore pci_enable_msi() won't even try to enable MSI-X
with msi->table_base being zero.
>> --- a/xen/drivers/pci/pci.c
>> +++ b/xen/drivers/pci/pci.c
>> @@ -115,6 +115,21 @@ int pci_find_next_ext_capability(int seg
>> return 0;
>> }
>>
>> +void pci_intx(const struct pci_dev *pdev, bool_t enable)
>
> Please use bool.
See how old this patch is. V1 was posted long before bool came into
existence, and I had refrained from posting v2 until I actually had a
device where MSI would indeed function (the first two I tried this
with claimed to be MSI capable, but no interrupts ever surfaced
when MSI was enabled on them, yet I couldn't be sure the code
was doing something wrong). Obviously I then forgot to switch this,
which I've now done.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |