From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43620) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TLUmS-0001Or-5C for qemu-devel@nongnu.org; Tue, 09 Oct 2012 04:03:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TLUmL-0007pf-Pg for qemu-devel@nongnu.org; Tue, 09 Oct 2012 04:03:08 -0400 Received: from mx1.redhat.com ([209.132.183.28]:26757) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TLUmL-0007pE-Gr for qemu-devel@nongnu.org; Tue, 09 Oct 2012 04:03:01 -0400 Message-ID: <5073DA2A.5030301@redhat.com> Date: Tue, 09 Oct 2012 10:02:50 +0200 From: Paolo Bonzini MIME-Version: 1.0 References: <9cdff450169c1a7956528afe8be3a4caa592d2ab.1349749915.git.jbaron@redhat.com> In-Reply-To: <9cdff450169c1a7956528afe8be3a4caa592d2ab.1349749915.git.jbaron@redhat.com> Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit 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: Jason Baron 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 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? 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(); >