qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 10/23] qdev: remove baked in notion of aliases


From: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 10/23] qdev: remove baked in notion of aliases
Date: Tue, 31 Jan 2012 08:44:17 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:9.0) Gecko/20111222 Thunderbird/9.0

On 01/30/2012 10:08 PM, Anthony Liguori wrote:
+/*
+ * Aliases were a bad idea from the start.  Let's keep them
+ * from spreading further.
+ */
+static const char *qdev_class_get_alias(DeviceClass *dc)
+{
+    const char *typename = object_class_get_name(OBJECT_CLASS(dc));
+
+    if (strcmp(typename, "virtio-blk-pci") == 0) {
+        return "virtio-blk";
+    } else if (strcmp(typename, "virtio-net-pci") == 0) {
+        return "virtio-net";
+    } else if (strcmp(typename, "virtio-serial-pci") == 0) {
+        return "virtio-serial";
+    } else if (strcmp(typename, "virtio-balloon-pci") == 0) {
+        return "virtio-balloon";
+    } else if (strcmp(typename, "virtio-blk-s390") == 0) {
+        return "virtio-blk";
+    } else if (strcmp(typename, "virtio-net-s390") == 0) {
+        return "virtio-net";
+    } else if (strcmp(typename, "virtio-serial-s390") == 0) {
+        return "virtio-serial";
+    } else if (strcmp(typename, "lsi53c895a") == 0) {
+        return "lsi";
+    } else if (strcmp(typename, "ich9-ahci") == 0) {
+        return "ahci";
+    }
+
+    return NULL;
+}
+
+static bool qdev_class_has_alias(DeviceClass *dc)
+{
+    return (qdev_class_get_alias(dc) != NULL);
+}
+
  const char *qdev_fw_name(DeviceState *dev)
  {
      DeviceClass *dc = DEVICE_GET_CLASS(dev);

      if (dc->fw_name) {
          return dc->fw_name;
-    } else if (dc->alias) {
-        return dc->alias;
+    } else if (qdev_class_has_alias(dc)) {
+        return qdev_class_get_alias(dc);
      }

      return object_get_typename(OBJECT(dev));
@@ -161,8 +197,8 @@ static void qdev_print_devinfo(ObjectClass *klass, void 
*opaque)
      if (dc->bus_info) {
          error_printf(", bus %s", dc->bus_info->name);
      }
-    if (dc->alias) {
-        error_printf(", alias \"%s\"", dc->alias);
+    if (qdev_class_has_alias(dc)) {
+        error_printf(", alias \"%s\"", qdev_class_get_alias(dc));
      }
      if (dc->desc) {
          error_printf(", desc \"%s\"", dc->desc);
@@ -188,6 +224,27 @@ static int set_property(const char *name, const char 
*value, void *opaque)
      return 0;
  }

+static const char *find_typename_by_alias(const char *alias)
+{
+    /* I don't think s390 aliasing could have ever worked... */

Yes, because s390 doesn't have PCI.

+    if (strcmp(alias, "virtio-blk") == 0) {
+        return "virtio-blk-pci";
+    } else if (strcmp(alias, "virtio-net") == 0) {
+        return "virtio-net-pci";
+    } else if (strcmp(alias, "virtio-serial") == 0) {
+        return "virtio-serial-pci";
+    } else if (strcmp(alias, "virtio-balloon") == 0) {
+        return "virtio-balloon-pci";
+    } else if (strcmp(alias, "lsi") == 0) {
+        return "lsi53c895a";
+    } else if (strcmp(alias, "ahci") == 0) {
+        return "ich9-ahci";
+    }
+
+    return NULL;
+}
+


Please change this to a table so that you can have:

    if (object_class_by_name(table[i].name) &&
        strcmp(alias, table[i].alias) == 0) {
        return table[i].name;
    }

and for the other direction

    if (object_class_by_name(table[i].name) &&
        strcmp(name, table[i].name) == 0) {
        return table[i].alias;
    }

Paolo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]