From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:49025) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TLg4j-000693-JE for qemu-devel@nongnu.org; Tue, 09 Oct 2012 16:06:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TLg4i-0001zW-DS for qemu-devel@nongnu.org; Tue, 09 Oct 2012 16:06:45 -0400 Received: from mx1.redhat.com ([209.132.183.28]:17365) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TLg4i-0001zJ-57 for qemu-devel@nongnu.org; Tue, 09 Oct 2012 16:06:44 -0400 Date: Tue, 9 Oct 2012 16:06:39 -0400 From: Jason Baron Message-ID: <20121009200639.GC3592@redhat.com> References: <9cdff450169c1a7956528afe8be3a4caa592d2ab.1349749915.git.jbaron@redhat.com> <5073DA2A.5030301@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <5073DA2A.5030301@redhat.com> Subject: Re: [Qemu-devel] [PATCH v2 20/21] q35: automatically load the q35 dsdt table List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: aliguori@us.ibm.com, juzhang@redhat.com, mst@redhat.com, jan.kiszka@siemens.com, qemu-devel@nongnu.org, agraf@suse.de, blauwirbel@gmail.com, yamahata@valinux.co.jp, alex.williamson@redhat.com, kevin@koconnor.net, avi@redhat.com, mkletzan@redhat.com, lcapitulino@redhat.com, afaerber@suse.de, armbru@redhat.com, kraxel@redhat.com On Tue, Oct 09, 2012 at 10:02:50AM +0200, Paolo Bonzini wrote: > Il 09/10/2012 05:30, Jason Baron ha scritto: > > From: Jason Baron > > > > Automatically, locate the required q35 dsdt table on load. Otherwise we error > > out. This could be done in the bios, but its harder to produce a good error > > message. > > Not just for q35, so the commit message is wrong, but the patch is > otherwise good. > > We should import the source code for the DSDT from SeaBIOS, and support > building it + installing it. You made this a hard failure, so it has to > be done before this patch goes in, doesn't it? > Right, so perhaps this patch is held off until the SeaBIOS changes are in place, and q35 can still be invoked via -acpitable file=, in the meantime. On the other hand, this patch will work with the '-L' option supplied to the updated SeaBIOS dir, without the .aml built into qemu. That seems reasonable to me as well. Thanks, -Jason > Paolo > > > Signed-off-by: Jason Baron > > --- > > hw/pc.c | 19 +++++++++++++++++++ > > hw/pc.h | 2 ++ > > hw/pc_piix.c | 7 +++++++ > > hw/pc_q35.c | 7 +++++++ > > 4 files changed, 35 insertions(+), 0 deletions(-) > > > > diff --git a/hw/pc.c b/hw/pc.c > > index f5fbd0c..4ee41a1 100644 > > --- a/hw/pc.c > > +++ b/hw/pc.c > > @@ -1172,3 +1172,22 @@ void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name) > > gsi_state->ioapic_irq[i] = qdev_get_gpio_in(dev, i); > > } > > } > > + > > +int find_and_load_dsdt(const char *dsdt_name) > > +{ > > + char *filename; > > + char buf[1024]; > > + > > + filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, dsdt_name); > > + if (!filename) { > > + return -1; > > + } > > + snprintf(buf, 1024, "file=%s", filename); > > + g_free(filename); > > + if (acpi_table_add(buf) < 0) { > > + fprintf(stderr, "Wrong acpi table provided\n"); > > + return -1; > > + } > > + > > + return 0; > > +} > > diff --git a/hw/pc.h b/hw/pc.h > > index 125c1fd..5e93ae1 100644 > > --- a/hw/pc.h > > +++ b/hw/pc.h > > @@ -227,5 +227,7 @@ void pc_system_firmware_init(MemoryRegion *rom_memory); > > #define E820_UNUSABLE 5 > > > > int e820_add_entry(uint64_t, uint64_t, uint32_t); > > +int find_and_load_dsdt(const char *dsdt_name); > > + > > > > #endif > > diff --git a/hw/pc_piix.c b/hw/pc_piix.c > > index e133630..06bb40e 100644 > > --- a/hw/pc_piix.c > > +++ b/hw/pc_piix.c > > @@ -126,6 +126,13 @@ static void pc_init1(MemoryRegion *system_memory, > > MemoryRegion *rom_memory; > > void *fw_cfg = NULL; > > > > + /* let's first see if we can find the proper dsdt */ > > + if (find_and_load_dsdt("acpi-dsdt.aml")) { > > + fprintf(stderr, "Couldn't find piix dsdt table!\n" > > + "Try updating your bios.\n"); > > + exit(1); > > + } > > + > > pc_cpus_init(cpu_model); > > > > if (kvmclock_enabled) { > > diff --git a/hw/pc_q35.c b/hw/pc_q35.c > > index 48083bb..1f96af0 100644 > > --- a/hw/pc_q35.c > > +++ b/hw/pc_q35.c > > @@ -356,6 +356,13 @@ static void pc_q35_init(ram_addr_t ram_size, > > qemu_irq *i8259; > > int i; > > > > + /* let's first see if we can find the proper dsdt */ > > + if (find_and_load_dsdt("q35-acpi-dsdt.aml")) { > > + fprintf(stderr, "Couldn't find q35 dsdt table!\n" > > + "Try updating your bios.\n"); > > + exit(1); > > + } > > + > > pc_cpus_init(cpu_model); > > > > kvmclock_create(); > > >