Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 3160499aacb81f6735941eb4c372d87a > files > 70

kvm-83-164.el5_5.30.src.rpm

From 465bca89479c55998c37b7617be1fc07c32c3c9a Mon Sep 17 00:00:00 2001
From: Juan Quintela <quintela@redhat.com>
Date: Tue, 22 Dec 2009 17:05:55 -0200
Subject: [PATCH 08/16] Add support for DeviceVersion to machine type

RH-Author: Juan Quintela <quintela@redhat.com>
Message-id: <659cbb6827f21439c2db864451fe92540f22c13c.1261501421.git.quintela@redhat.com>
Patchwork-id: 5892
O-Subject: [PATCH 03/11] Add support for DeviceVersion to machine type
Bugzilla: 541731
RH-Acked-by: Markus Armbruster <armbru@redhat.com>
RH-Acked-by: Dor Laor <dlaor@redhat.com>
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
RH-Acked-by: Marcelo Tosatti <mtosatti@redhat.com>

We add support for having an array of (device, version) at the machine
descritpion.

if version is SAVEVM_DISABLE it means that this device should be disabled.
We also add machine_device_version(name, version) to search version
for this device name at the device description.  If this device
don't exist inthe machine description, "version" is returned.

Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 qemu/hw/boards.h |    6 ++++++
 qemu/hw/hw.h     |    5 +++++
 qemu/hw/pc.c     |   13 +++++++++++++
 3 files changed, 24 insertions(+), 0 deletions(-)

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
---
 qemu/hw/boards.h |    6 ++++++
 qemu/hw/hw.h     |    5 +++++
 qemu/hw/pc.c     |   13 +++++++++++++
 3 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/qemu/hw/boards.h b/qemu/hw/boards.h
index 6211c8b..9e146ce 100644
--- a/qemu/hw/boards.h
+++ b/qemu/hw/boards.h
@@ -10,6 +10,11 @@ typedef void QEMUMachineInitFunc(ram_addr_t ram_size, int vga_ram_size,
                                  const char *initrd_filename,
                                  const char *cpu_model);
 
+typedef struct DeviceVersion {
+	const char *name;
+	const int version_id;
+} DeviceVersion;
+
 typedef struct QEMUMachine {
     const char *name;
     const char *desc;
@@ -20,6 +25,7 @@ typedef struct QEMUMachine {
     int use_scsi;
     int max_cpus;
     struct QEMUMachine *next;
+    DeviceVersion *devices;
 } QEMUMachine;
 
 int qemu_register_machine(QEMUMachine *m);
diff --git a/qemu/hw/hw.h b/qemu/hw/hw.h
index 3809f57..9ffa432 100644
--- a/qemu/hw/hw.h
+++ b/qemu/hw/hw.h
@@ -232,6 +232,11 @@ typedef void SaveStateHandler(QEMUFile *f, void *opaque, int version_id);
 typedef int SaveLiveStateHandler(QEMUFile *f, int stage, void *opaque);
 typedef int LoadStateHandler(QEMUFile *f, void *opaque, int version_id);
 
+/* Used to disable a savevm section */
+#define SAVEVM_DISABLED -1
+
+int machine_device_version(const char *name, int version_id);
+
 int register_savevm(const char *idstr,
                     int instance_id,
                     int version_id,
diff --git a/qemu/hw/pc.c b/qemu/hw/pc.c
index 1a7e896..af29c9a 100644
--- a/qemu/hw/pc.c
+++ b/qemu/hw/pc.c
@@ -1264,6 +1264,19 @@ void cmos_set_s3_resume(void)
         rtc_set_memory(rtc_state, 0xF, 0xFE);
 }
 
+int machine_device_version(const char *name, int version_id)
+{
+    DeviceVersion *device  = current_machine->devices;
+
+    while (device && device->name) {
+        if (!strcmp(name, device->name)) {
+	    return device->version_id;
+	}
+	device++;
+    }
+    return version_id;
+}
+
 QEMUMachine pc_machine = {
     .name = "pc",
     .desc = "Standard PC",
-- 
1.6.3.rc4.29.g8146