|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 5/6] x86: enable multi-vector MSI
>>> On 23.04.13 at 02:55, Suravee Suthikulanit <suravee.suthikulpanit@xxxxxxx>
wrote:
> On 4/19/2013 5:59 AM, Jan Beulich wrote:
>> --- a/xen/arch/x86/msi.c
>> +++ b/xen/arch/x86/msi.c
>> @@ -238,6 +238,11 @@ static int write_msi_msg(struct msi_desc
>> u8 bus = dev->bus;
>> u8 slot = PCI_SLOT(dev->devfn);
>> u8 func = PCI_FUNC(dev->devfn);
>> + int nr = entry->msi_attrib.entry_nr;
>> +
>> + ASSERT((msg->data & (entry[-nr].msi.nvec - 1)) == nr);
>> + if ( nr )
>> + return 0;
>
> This logic seems incorrect. Do you meant to write --nr?
No, this indeed has to be -nr (i.e. the "master" entry, which is the
first on in the array.
> This causes assertion here. Also, investigation showing the
> value of nr is 0 here.
nr being 0 here is perfectly fine, meaning this is the first ("master")
entry of a multi-vector device (it can't be a single-vector one, as in
that case entry[0].msi.nvec == 1, i.e. the & yields zero regardless
of msg->data).
And the assertion should hold, due to
*data = (msg->data & ~(INTREMAP_ENTRIES - 1)) | offset;
in update_intremap_entry_from_msi_msg(), and
alloc_intremap_entry() returning only aligned blocks.
So the question isn't just what value nr there has, but also what
the other involved values are.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |