All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Alexander Graf <agraf@suse.de>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
	Anthony Liguori <aliguori@amazon.com>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] qdev: Keep global allocation counter per bus
Date: Thu, 05 Dec 2013 09:58:40 +0100	[thread overview]
Message-ID: <52A04040.1040301@redhat.com> (raw)
In-Reply-To: <1386188688-6480-1-git-send-email-agraf@suse.de>

Il 04/12/2013 21:24, Alexander Graf ha scritto:
> When we have 2 separate qdev devices that both create a qbus of the
> same type without specifying a bus name or device name, we end up
> with two buses of the same name, such as ide.0 on the Mac machines:
> 
>   dev: macio-ide, id ""
>     bus: ide.0
>       type IDE
>   dev: macio-ide, id ""
>     bus: ide.0
>       type IDE
> 
> If we now spawn a device that connects to a ide.0 the last created
> bus gets the device, with the first created bus inaccessible to the
> command line.
> 
> After some discussion on IRC we concluded that the best quick fix way
> forward for this is to make automated bus-class type based allocation
> count a global counter. That's what this patch implements. With this
> we instead get
> 
>   dev: macio-ide, id ""
>     bus: ide.1
>       type IDE
>   dev: macio-ide, id ""
>     bus: ide.0
>       type IDE
> 
> on the example mentioned above.
> 
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: Markus Armbruster <armbru@redhat.com>
> CC: Anthony Liguori <aliguori@amazon.com>
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  hw/core/qdev.c         | 20 +++++++++++++-------
>  include/hw/qdev-core.h |  2 ++
>  2 files changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index e374a93..959130c 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -409,27 +409,33 @@ DeviceState *qdev_find_recursive(BusState *bus, const char *id)
>  static void qbus_realize(BusState *bus, DeviceState *parent, const char *name)
>  {
>      const char *typename = object_get_typename(OBJECT(bus));
> +    BusClass *bc;
>      char *buf;
> -    int i,len;
> +    int i, len, bus_id;
>  
>      bus->parent = parent;
>  
>      if (name) {
>          bus->name = g_strdup(name);
>      } else if (bus->parent && bus->parent->id) {
> -        /* parent device has id -> use it for bus name */
> +        /* parent device has id -> use it plus parent-bus-id for bus name */
> +        bus_id = bus->parent->num_child_bus;
> +
>          len = strlen(bus->parent->id) + 16;
>          buf = g_malloc(len);
> -        snprintf(buf, len, "%s.%d", bus->parent->id, bus->parent->num_child_bus);
> +        snprintf(buf, len, "%s.%d", bus->parent->id, bus_id);
>          bus->name = buf;
>      } else {
> -        /* no id -> use lowercase bus type for bus name */
> +        /* no id -> use lowercase bus type plus global bus-id for bus name */
> +        bc = BUS_GET_CLASS(bus);
> +        bus_id = bc->automatic_ids++;
> +
>          len = strlen(typename) + 16;
>          buf = g_malloc(len);
> -        len = snprintf(buf, len, "%s.%d", typename,
> -                       bus->parent ? bus->parent->num_child_bus : 0);
> -        for (i = 0; i < len; i++)
> +        len = snprintf(buf, len, "%s.%d", typename, bus_id);
> +        for (i = 0; i < len; i++) {
>              buf[i] = qemu_tolower(buf[i]);
> +        }
>          bus->name = buf;
>      }
>  
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index f2043a6..09f8527 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -161,6 +161,8 @@ struct BusClass {
>      int (*reset)(BusState *bus);
>      /* maximum devices allowed on the bus, 0: no limit. */
>      int max_dev;
> +    /* number of automatically allocated bus ids (e.g. ide.0) */
> +    int automatic_ids;
>  };
>  
>  typedef struct BusChild {
> 

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

  reply	other threads:[~2013-12-05  8:58 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-04 20:24 [Qemu-devel] [PATCH] qdev: Keep global allocation counter per bus Alexander Graf
2013-12-05  8:58 ` Paolo Bonzini [this message]
2013-12-05  9:44 ` Markus Armbruster
2013-12-05 10:33   ` Paolo Bonzini
2013-12-05 11:20     ` Markus Armbruster
2013-12-05 11:38       ` Paolo Bonzini
2013-12-05 10:23 ` Markus Armbruster
  -- strict thread matches above, loose matches on Subject: below --
2014-02-03 19:36 Alexander Graf
2014-02-04 10:33 ` Markus Armbruster
2014-02-04 11:48   ` Paolo Bonzini
2014-02-04 12:14     ` Markus Armbruster
2014-02-05 17:25       ` Paolo Bonzini
2014-02-06 14:41         ` Markus Armbruster
2014-02-06 14:41           ` Alexander Graf
2014-02-06 15:11             ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=52A04040.1040301@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=agraf@suse.de \
    --cc=aliguori@amazon.com \
    --cc=armbru@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.