From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: Re: [PATCH] hvmloader: don't use AML operations on 64-bit fields Date: Tue, 27 May 2014 11:44:19 +0100 Message-ID: <538488A30200007800015F0A@mail.emea.novell.com> References: <53846F840200007800015E99@mail.emea.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WpErm-0002f3-Pm for xen-devel@lists.xenproject.org; Tue, 27 May 2014 10:44:23 +0000 In-Reply-To: <53846F840200007800015E99@mail.emea.novell.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel Cc: Ian Campbell , Ian Jackson , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org >>> On 27.05.14 at 10:57, wrote: > WinXP and Win2K3, while having no problem with the QWordMemory resource > (there was another one there before), don't like operations on 64-bit > fields. Split the fields d0688669 ("hvmloader: also cover PCI MMIO > ranges above 4G with UC MTRR ranges") added to 32-bit ones, handling > carry over explicitly. > > Signed-off-by: Jan Beulich I have to withdraw this - just found an iasl version that mis-compiles (afaict at least) it. > --- a/tools/firmware/hvmloader/acpi/dsdt.asl > +++ b/tools/firmware/hvmloader/acpi/dsdt.asl > @@ -57,8 +57,10 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > MSUA, 32, /* MADT checksum address */ > MAPA, 32, /* MADT LAPIC0 address */ > VGIA, 32, /* VM generation id address */ > - HMIN, 64, > - HLEN, 64 > + LMIN, 32, > + HMIN, 32, > + LLEN, 32, > + HLEN, 32 > } > > /* Fix HCT test for 0x400 pci memory: > @@ -176,15 +178,27 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2, > Add(MMIN, MLEN, MMAX) > Subtract(MMAX, One, MMAX) > > - CreateQWordField(PRT0, \_SB.PCI0._CRS._Y02._MIN, HMIN) > - CreateQWordField(PRT0, \_SB.PCI0._CRS._Y02._MAX, HMAX) > - CreateQWordField(PRT0, \_SB.PCI0._CRS._Y02._LEN, HLEN) > - > - Store(\_SB.HMIN, HMIN) > - Store(\_SB.HLEN, HLEN) > - Add(HMIN, HLEN, HMAX) > - If(LOr(HMIN, HLEN)) { > - Subtract(HMAX, One, HMAX) > + CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._MIN, MINL) > + CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._MAX, MAXL) > + CreateDWordField(PRT0, \_SB.PCI0._CRS._Y02._LEN, LENL) > + CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._MIN, 4), MINH) > + CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._MAX, 4), MAXH) > + CreateDWordField(PRT0, Add(\_SB.PCI0._CRS._Y02._LEN, 4), LENH) > + > + Store(\_SB.LMIN, MINL) > + Store(\_SB.HMIN, MINH) > + Store(\_SB.LLEN, LENL) > + Store(\_SB.HLEN, LENH) > + Add(MINL, LENL, MAXL) > + Add(MINH, LENH, MAXH) > + If(LLess(MAXL, MINL)) { > + Add(MAXH, One, MAXH) > + } > + If(LOr(MINH, LENL)) { > + If(LEqual(MAXL, 0)) { > + Subtract(MAXH, One, MAXH) > + } > + Subtract(MAXL, One, MAXL) > } > > Return (PRT0)