From mboxrd@z Thu Jan 1 00:00:00 1970 From: Beth Kon Subject: Re: [PATCH 1/2] Clean up MADT Table Creation Date: Wed, 20 May 2009 12:10:36 -0400 Message-ID: <4A142B7C.2070600@us.ibm.com> References: <1242443800-22686-1-git-send-email-eak@us.ibm.com> <4A105A39.2080001@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, mtosatti@redhat.com, vincent@vincent-minet.net, gleb@redhat.com, anthony@codemonkey.ws To: Avi Kivity Return-path: Received: from e2.ny.us.ibm.com ([32.97.182.142]:41268 "EHLO e2.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753035AbZETQJM (ORCPT ); Wed, 20 May 2009 12:09:12 -0400 Received: from d01relay04.pok.ibm.com (d01relay04.pok.ibm.com [9.56.227.236]) by e2.ny.us.ibm.com (8.13.1/8.13.1) with ESMTP id n4KG59Cq000929 for ; Wed, 20 May 2009 12:05:09 -0400 Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay04.pok.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n4KG9DKP246150 for ; Wed, 20 May 2009 12:09:13 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n4KG9CYR001209 for ; Wed, 20 May 2009 12:09:13 -0400 In-Reply-To: <4A105A39.2080001@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Avi Kivity wrote: > Beth Kon wrote: >> This patch is based on the recent patch from Vincent Minet. I split >> Vincent's >> changes into 2 patches (to separate MADT and RSDT table cleanup, as >> suggested by >> Marcelo) and added a bit to them. And to give credit where it is due, >> this >> cleanup is also related to the patch Marcelo provided when the HPET >> addition tripped over the same problem. (Thanks again Marcelo :-) >> This patch moves all the table layout calculations to the same area of >> acpi_bios_init. This prevents corruption problems when, in the middle of >> filling in the tables, the MADT table size grows. The idea is to do >> all the layout in one section, then fill things in afterwards. It >> also corrects a problem where the madt table was memset to 0 before >> the final size of the table had been determined. >> >> Signed-off-by: Beth Kon >> >> diff --git a/kvm/bios/rombios32.c b/kvm/bios/rombios32.c >> index cbd5f15..7f62e4f 100755 >> --- a/kvm/bios/rombios32.c >> +++ b/kvm/bios/rombios32.c >> @@ -1665,6 +1665,7 @@ void acpi_bios_init(void) >> >> addr = (addr + 7) & ~7; >> madt_addr = addr; >> + madt = (void *)(addr); >> madt_size = sizeof(*madt) + >> sizeof(struct madt_processor_apic) * MAX_CPUS + >> #ifdef BX_QEMU >> @@ -1672,7 +1673,11 @@ void acpi_bios_init(void) >> #else >> sizeof(struct madt_io_apic); >> #endif >> - madt = (void *)(addr); >> + for ( i = 0; i < 16; i++ ) { >> + if ( PCI_ISA_IRQ_MASK & (1U << i) ) { >> + madt_size += sizeof(struct madt_int_override); >> + } >> + } >> addr += madt_size; >> >> > > You're just duplicating the override creation loop (with its internal > if); if we update it, we'll have to update this too. Yep, that's a valid complaint. I'll resubmit shortly. > > Why not set madt_end = int_override and calculate madt_size = madt_end > - madt? >