|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 3/3] x86/AMD-Vi: Fix IVRS HPET special->handle override
>>> On 17.09.13 at 16:10, Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
wrote:
> On 09/16/2013 03:03 AM, Jan Beulich wrote:
>>>>> On 14.09.13 at 01:30, <suravee.suthikulpanit@xxxxxxx> wrote:
>>> From: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
>>>
>>> The current logic does not handle the case when HPET special->handle
>>> is invalid in IVRS. On such system, the following message is shown:
>>>
>>> (XEN) AMD-Vi: Failed to setup HPET MSI remapping: Wrong HPET
>>>
>>> This patch will allow the ivrs_hpet[<handle>]=<sbdf> to override the
>>> IVRS.
>>>
>>> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
>>> ---
>>> xen/drivers/passthrough/amd/iommu_acpi.c | 22 +++++++++++++++-------
>>> 1 file changed, 15 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/xen/drivers/passthrough/amd/iommu_acpi.c
>>> b/xen/drivers/passthrough/amd/iommu_acpi.c
>>> index 0778af0..bfcc2eb 100644
>>> --- a/xen/drivers/passthrough/amd/iommu_acpi.c
>>> +++ b/xen/drivers/passthrough/amd/iommu_acpi.c
>>> @@ -671,6 +671,7 @@ static void __init parse_ivrs_hpet(char *str)
>>> if ( !s || *s )
>>> return;
>>>
>>> + hpet_sbdf.id = id;
>>> hpet_sbdf.bdf = PCI_BDF(bus, dev, func);
>>> hpet_sbdf.seg = seg;
>>> hpet_sbdf.cmdline = 1;
>>> @@ -787,19 +788,26 @@ static u16 __init parse_ivhd_device_special(
>>> }
>>> break;
>>> case ACPI_IVHD_HPET:
>>> + if ( hpet_sbdf.cmdline )
>>> + {
>>> + AMD_IOMMU_DEBUG("IVHD: Command line override present for HPET
> %#x "
>>> + "(IVRS: %#x devID %04x:%02x:%02x.%u)\n",
>>> + hpet_sbdf.id, special->handle, seg,
>>> PCI_BUS(bdf),
>>> + PCI_SLOT(bdf), PCI_FUNC(bdf));
>>> + hpet_sbdf.iommu = iommu;
>> This (unconditional) assignment is what the earlier logic attempted
>> to avoid: We must not blindly set this (and in particular not blindly
>> overwrite a previously set valid value), and in order to do so we
>> need to know whether to trust devid or handle. I'm therefore going
>> to apply only the first hunk - being a clear and obvious bug fix - for
>> the time being.
>>
> But since we only allow one HPET in the system, and if users want to
> override the one that is in the IVRS (the buggy one)
> we should allow this, right? Otherwise, if the special->handle doesn't
> match, it would end up causing this logic to complain
> about multiple HPETs.
We must not allow multiple HPET entries in the ACPI tables to
confuse us and store a bad IOMMU pointer. And yes, we also
must not wrongly complain about multiple HEPTs.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |