From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:43223) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UP2Ad-0003yB-Sr for qemu-devel@nongnu.org; Sun, 07 Apr 2013 22:51:06 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UP2AX-00086S-7t for qemu-devel@nongnu.org; Sun, 07 Apr 2013 22:50:59 -0400 Received: from [222.73.24.84] (port=59409 helo=song.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UP2AW-00085K-5V for qemu-devel@nongnu.org; Sun, 07 Apr 2013 22:50:53 -0400 Date: Mon, 8 Apr 2013 10:50:10 +0800 From: Hu Tao Message-ID: <20130408025010.GA6796@localhost.localdomain> References: <515EB208.7050006@redhat.com> MIME-Version: 1.0 In-Reply-To: <515EB208.7050006@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Subject: Re: [Qemu-devel] [PATCH v17 5/6] pvpanic: create pvpanic device by default List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: Peter Maydell , Gleb Natapov , "Michael S. Tsirkin" , Jan Kiszka , qemu-devel , Markus Armbruster , Blue Swirl , Orit Wasserman , Juan Quintela , Alexander Graf , Christian Borntraeger , Andrew Jones , Alex Williamson , Sasha Levin , Stefan Hajnoczi , Luiz Capitulino , KAMEZAWA Hiroyuki , Anthony Liguori , Marcelo Tosatti On Fri, Apr 05, 2013 at 01:14:16PM +0200, Paolo Bonzini wrote: > Il 05/04/2013 08:36, Hu Tao ha scritto: > > Also parse command line options for ioport and set > > it accordingly. > > This does not do the correct thing for versioned machine types like "-M > pc-1.4". Also, adding stuff to vl.c is really something you cannot do. > Please don't be afraid to ask! > > See the attached patch, untested. Feel free to take it with my S-o-b line. Thanks. But you forgot the attachment? > > Patches 1-4 and 6 are okay. > > Paolo > > > Signed-off-by: Hu Tao > > --- > > hw/i386/pc_piix.c | 2 ++ > > hw/i386/pc_q35.c | 1 + > > hw/pc.h | 4 ++++ > > hw/pvpanic.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > > vl.c | 2 ++ > > 5 files changed, 51 insertions(+) > > > > diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c > > index 0abc9f1..897254a 100644 > > --- a/hw/i386/pc_piix.c > > +++ b/hw/i386/pc_piix.c > > @@ -217,6 +217,8 @@ static void pc_init1(MemoryRegion *system_memory, > > if (pci_enabled) { > > pc_pci_device_init(pci_bus); > > } > > + > > + pvpanic_init(isa_bus); > > } > > > > static void pc_init_pci(QEMUMachineInitArgs *args) > > diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c > > index 4f5f347..fd9ab01 100644 > > --- a/hw/i386/pc_q35.c > > +++ b/hw/i386/pc_q35.c > > @@ -204,6 +204,7 @@ static void pc_q35_init(QEMUMachineInitArgs *args) > > pc_vga_init(isa_bus, host_bus); > > audio_init(isa_bus, host_bus); > > pc_nic_init(isa_bus, host_bus); > > + pvpanic_init(isa_bus); > > if (pci_enabled) { > > pc_pci_device_init(host_bus); > > } > > diff --git a/hw/pc.h b/hw/pc.h > > index 8e1dd4c..1311037 100644 > > --- a/hw/pc.h > > +++ b/hw/pc.h > > @@ -178,6 +178,10 @@ static inline bool isa_ne2000_init(ISABus *bus, int base, int irq, NICInfo *nd) > > /* pc_sysfw.c */ > > void pc_system_firmware_init(MemoryRegion *rom_memory); > > > > +/* pvpanic.c */ > > +int pvpanic_init(ISABus *bus); > > +int pvpanic_ioport(QemuOpts *opts, void *opaque); > > + > > /* e820 types */ > > #define E820_RAM 1 > > #define E820_RESERVED 2 > > diff --git a/hw/pvpanic.c b/hw/pvpanic.c > > index b3d10e2..2e237a4 100644 > > --- a/hw/pvpanic.c > > +++ b/hw/pvpanic.c > > @@ -19,6 +19,8 @@ > > #include > > > > #include "hw/fw_cfg.h" > > +#include "hw/pc.h" > > +#include "qapi/string-input-visitor.h" > > > > /* The bit of supported pv event */ > > #define PVPANIC_F_PANICKED 0 > > @@ -57,6 +59,36 @@ typedef struct PVPanicState { > > uint16_t ioport; > > } PVPanicState; > > > > +static uint16_t ioport; > > + > > +static int set_ioport(const char *name, const char *value, void *opaque) > > +{ > > + StringInputVisitor *mi; > > + > > + if (strcmp(name, "ioport") == 0) { > > + mi = string_input_visitor_new(value); > > + visit_type_uint16(string_input_get_visitor(mi), &ioport, "ioport", > > + NULL); > > + string_input_visitor_cleanup(mi); > > + } > > + > > + return 0; > > +} > > + > > +int pvpanic_ioport(QemuOpts *opts, void *opaque) > > +{ > > + const char *driver; > > + > > + driver = qemu_opt_get(opts, "driver"); > > + if (!driver || strcmp(driver, "pvpanic")) { > > + return 0; > > + } > > + > > + qemu_opt_foreach(opts, set_ioport, NULL, 0); > > + > > + return 0; > > +} > > + > > /* return supported events on read */ > > static uint64_t pvpanic_ioport_read(void *opaque, hwaddr addr, unsigned size) > > { > > @@ -84,6 +116,10 @@ static int pvpanic_isa_initfn(ISADevice *dev) > > static bool port_configured; > > void *fw_cfg; > > > > + if (ioport) { > > + s->ioport = ioport; > > + } > > + > > memory_region_init_io(&s->io, &pvpanic_ops, s, "pvpanic", 1); > > isa_register_ioport(dev, &s->io, s->ioport); > > > > @@ -115,6 +151,12 @@ static void pvpanic_isa_class_init(ObjectClass *klass, void *data) > > dc->props = pvpanic_isa_properties; > > } > > > > +int pvpanic_init(ISABus *bus) > > +{ > > + isa_create_simple(bus, TYPE_ISA_PVPANIC_DEVICE); > > + return 0; > > +} > > + > > static TypeInfo pvpanic_isa_info = { > > .name = TYPE_ISA_PVPANIC_DEVICE, > > .parent = TYPE_ISA_DEVICE, > > diff --git a/vl.c b/vl.c > > index c91fd4e..1a3ffa2 100644 > > --- a/vl.c > > +++ b/vl.c > > @@ -4302,6 +4302,8 @@ int main(int argc, char **argv, char **envp) > > exit (i == 1 ? 1 : 0); > > } > > > > + qemu_opts_foreach(qemu_find_opts("device"), pvpanic_ioport, NULL, 0); > > + > > if (machine->compat_props) { > > qdev_prop_register_global_list(machine->compat_props); > > } > >