[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 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. Jan > + break; > + } > + > /* set device id of hpet */ > - if ( hpet_sbdf.iommu || > - (hpet_sbdf.cmdline && hpet_sbdf.id != special->handle) ) > + if ( hpet_sbdf.iommu ) > { > printk(XENLOG_WARNING "Only one IVHD HPET entry is supported\n"); > break; > } > + > hpet_sbdf.id = special->handle; > - if ( !hpet_sbdf.cmdline ) > - { > - hpet_sbdf.bdf = bdf; > - hpet_sbdf.seg = seg; > - } > + hpet_sbdf.bdf = bdf; > + hpet_sbdf.seg = seg; > hpet_sbdf.iommu = iommu; > break; > default: > -- > 1.8.1.2 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |