From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:51140) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rs8OA-000247-4k for qemu-devel@nongnu.org; Tue, 31 Jan 2012 02:44:27 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Rs8O9-0004wV-2M for qemu-devel@nongnu.org; Tue, 31 Jan 2012 02:44:26 -0500 Received: from mail-gy0-f173.google.com ([209.85.160.173]:42193) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Rs8O8-0004wR-V6 for qemu-devel@nongnu.org; Tue, 31 Jan 2012 02:44:25 -0500 Received: by ghrr20 with SMTP id r20so2069684ghr.4 for ; Mon, 30 Jan 2012 23:44:24 -0800 (PST) Sender: Paolo Bonzini Message-ID: <4F279BD1.8010608@redhat.com> Date: Tue, 31 Jan 2012 08:44:17 +0100 From: Paolo Bonzini MIME-Version: 1.0 References: <1327957741-5842-1-git-send-email-aliguori@us.ibm.com> <1327957741-5842-10-git-send-email-aliguori@us.ibm.com> In-Reply-To: <1327957741-5842-10-git-send-email-aliguori@us.ibm.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 10/23] qdev: remove baked in notion of aliases List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Anthony Liguori Cc: Peter Maydell , Andreas Faerber , qemu-devel@nongnu.org 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