All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: qemu-devel@nongnu.org, chrisw@redhat.com, kvm@vger.kernel.org,
	paul@codesourcery.com, kraxel@redhat.com, avi@redhat.com
Subject: RFC qdev path semantics (was: [Qemu-devel] [RFC PATCH 0/5] Introduce canonical device hierarchy string)
Date: Wed, 16 Jun 2010 11:46:05 +0200	[thread overview]
Message-ID: <m3d3vr48f6.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <20100614054923.879.33717.stgit@localhost.localdomain> (Alex Williamson's message of "Sun, 13 Jun 2010 23:51:12 -0600")

A number of changes to qdev paths have been proposed in various threads.
It's becoming harder to keep track of them, so let me sum them up in one
place.  Please correct me if I misrepresent your ideas.

I'm going to describe the current state of things, and the proposed
changes (marked with ###).


The device tree has the main system bus as root.  A child of a bus is a
device.  A child of a device is a bus.

A qdev path consists of qdev path components separated by '/'.  It
resolves to a node in the device tree, either bus or device.

The qdev path "/" resolves to the root, i.e. the main system bus.

The qdev path IDENT, where IDENT is an identifier, resolves to the
device whose id is IDENT.

If PATH resolves to device DEV, and a child of DEV has the name IDENT,
then we resolve to that bus.

Bus names are chosen by the system as follows:

* If the driver of the parent device model provides a name, use that.

* Else, if the parent device has id ID, use ID.NUM, where NUM is the bus
  number, counting from zero in creation order.

* Else, use TYPE.NUM, where TYPE is derived from the bus type, and NUM
  is the bus number, as above.

### Paul proposes to drop ID.NUM.

### Paul proposes to either drop TYPE.NUM (and require drivers to
    provide bus names), or make NUM count separately for each bus type.

If PATH resolves to bus BUS, then we resolve PATH/IDENT as follows:

* If a child of BUS has id IDENT, then we resolve to that device.

  ### Jan proposes to drop this rule.

* Else, if a child of BUS has a driver with name IDENT, then we resolve
  to that device.

  If more than one exist, resolve to the first one.  This assumes
  children are ordered.  Order is the same as in "info qtree".
  Currently, it's reverse creation order.

  This is *not* a stable address.

* Else, if a child of BUS has a driver with alias name IDENT, then we
  resolve to that device.

  If more than one exist, resolve to the first one.  This assumes
  children are ordered.  Order is the same as in "info qtree".
  Currently, it's reverse creation order.

  This is *not* a stable address.

### I propose: we resolve PATH/@BUS-ADDR to the child of BUS with bus
    address BUS-ADDR, if devices on this type of bus have bus addresses.
    The format of BUS-ADDR depends on the bus.

### Paul proposes to require all buses to define bus addresses.  Make
    one up if necessary.

### Jan proposes: we resolve PATH/IDENT.NUM as follows:

    * If a child of BUS has a driver with name IDENT and an instance
      number NUM, then we resolve to that device.

      Need a suitable definition of "instance number".

      Jan proposes to number devices with the same driver on the same
      bus.  This assumes children are ordered, see above.

      This is *not* a stable address if the bus supports hot-plug.

      I propose to us bus-address as instance number.  Works best
      together with Paul's proposal to define bus addresses.  Syntax
      IDENT@BUS-ADDR makes more sense then.

    * Else, same with driver alias name.

### Here's a possible synthesis of the above three proposals: require
    bus addresses, and permit any of

        PATH/IDENT
        PATH/@BUS-ADDR
        PATH/IDENT@BUS-ADDR

    PATH/IDENT can't address instances that don't come first.

    IDENT in PATH/IDENT@BUS-ADDR is redundant.  Therefore, it can't be
    the canonical qdev path.  That's fine, PATH/@BUS-ADDR serves.

If the above rules resolve PATH to a device in a context where we expect
a bus, and the device has exactly one bus, resolve it to that bus
instead.

### Jan and I propose to drop this rule.

WARNING: multiple messages have this Message-ID (diff)
From: Markus Armbruster <armbru@redhat.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: chrisw@redhat.com, kvm@vger.kernel.org, paul@codesourcery.com,
	qemu-devel@nongnu.org, avi@redhat.com, kraxel@redhat.com
Subject: RFC qdev path semantics (was: [Qemu-devel] [RFC PATCH 0/5] Introduce canonical device hierarchy string)
Date: Wed, 16 Jun 2010 11:46:05 +0200	[thread overview]
Message-ID: <m3d3vr48f6.fsf@blackfin.pond.sub.org> (raw)
In-Reply-To: <20100614054923.879.33717.stgit@localhost.localdomain> (Alex Williamson's message of "Sun, 13 Jun 2010 23:51:12 -0600")

A number of changes to qdev paths have been proposed in various threads.
It's becoming harder to keep track of them, so let me sum them up in one
place.  Please correct me if I misrepresent your ideas.

I'm going to describe the current state of things, and the proposed
changes (marked with ###).


The device tree has the main system bus as root.  A child of a bus is a
device.  A child of a device is a bus.

A qdev path consists of qdev path components separated by '/'.  It
resolves to a node in the device tree, either bus or device.

The qdev path "/" resolves to the root, i.e. the main system bus.

The qdev path IDENT, where IDENT is an identifier, resolves to the
device whose id is IDENT.

If PATH resolves to device DEV, and a child of DEV has the name IDENT,
then we resolve to that bus.

Bus names are chosen by the system as follows:

* If the driver of the parent device model provides a name, use that.

* Else, if the parent device has id ID, use ID.NUM, where NUM is the bus
  number, counting from zero in creation order.

* Else, use TYPE.NUM, where TYPE is derived from the bus type, and NUM
  is the bus number, as above.

### Paul proposes to drop ID.NUM.

### Paul proposes to either drop TYPE.NUM (and require drivers to
    provide bus names), or make NUM count separately for each bus type.

If PATH resolves to bus BUS, then we resolve PATH/IDENT as follows:

* If a child of BUS has id IDENT, then we resolve to that device.

  ### Jan proposes to drop this rule.

* Else, if a child of BUS has a driver with name IDENT, then we resolve
  to that device.

  If more than one exist, resolve to the first one.  This assumes
  children are ordered.  Order is the same as in "info qtree".
  Currently, it's reverse creation order.

  This is *not* a stable address.

* Else, if a child of BUS has a driver with alias name IDENT, then we
  resolve to that device.

  If more than one exist, resolve to the first one.  This assumes
  children are ordered.  Order is the same as in "info qtree".
  Currently, it's reverse creation order.

  This is *not* a stable address.

### I propose: we resolve PATH/@BUS-ADDR to the child of BUS with bus
    address BUS-ADDR, if devices on this type of bus have bus addresses.
    The format of BUS-ADDR depends on the bus.

### Paul proposes to require all buses to define bus addresses.  Make
    one up if necessary.

### Jan proposes: we resolve PATH/IDENT.NUM as follows:

    * If a child of BUS has a driver with name IDENT and an instance
      number NUM, then we resolve to that device.

      Need a suitable definition of "instance number".

      Jan proposes to number devices with the same driver on the same
      bus.  This assumes children are ordered, see above.

      This is *not* a stable address if the bus supports hot-plug.

      I propose to us bus-address as instance number.  Works best
      together with Paul's proposal to define bus addresses.  Syntax
      IDENT@BUS-ADDR makes more sense then.

    * Else, same with driver alias name.

### Here's a possible synthesis of the above three proposals: require
    bus addresses, and permit any of

        PATH/IDENT
        PATH/@BUS-ADDR
        PATH/IDENT@BUS-ADDR

    PATH/IDENT can't address instances that don't come first.

    IDENT in PATH/IDENT@BUS-ADDR is redundant.  Therefore, it can't be
    the canonical qdev path.  That's fine, PATH/@BUS-ADDR serves.

If the above rules resolve PATH to a device in a context where we expect
a bus, and the device has exactly one bus, resolve it to that bus
instead.

### Jan and I propose to drop this rule.

  parent reply	other threads:[~2010-06-16  9:46 UTC|newest]

Thread overview: 160+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-14  5:51 [RFC PATCH 0/5] Introduce canonical device hierarchy string Alex Williamson
2010-06-14  5:51 ` [Qemu-devel] " Alex Williamson
2010-06-14  5:51 ` [RFC PATCH 1/5] qdev: Create qdev_get_dev_path() Alex Williamson
2010-06-14  5:51   ` [Qemu-devel] " Alex Williamson
2010-06-14  6:39   ` Markus Armbruster
2010-06-14  6:39     ` Markus Armbruster
2010-06-14 12:52     ` Alex Williamson
2010-06-14 12:52       ` Alex Williamson
2010-06-14 13:00       ` Jan Kiszka
2010-06-14 13:00         ` Jan Kiszka
2010-06-14 13:09       ` Paul Brook
2010-06-14 13:09         ` Paul Brook
2010-06-14 15:29         ` Alex Williamson
2010-06-14 15:29           ` Alex Williamson
2010-06-14 15:42           ` Paul Brook
2010-06-14 15:42             ` Paul Brook
2010-06-14 16:00           ` Jan Kiszka
2010-06-14 16:00             ` Jan Kiszka
2010-06-14 16:38             ` Alex Williamson
2010-06-14 16:38               ` Alex Williamson
2010-06-14 16:49               ` Jan Kiszka
2010-06-14 16:49                 ` Jan Kiszka
2010-06-14 18:35                 ` Alex Williamson
2010-06-14 18:35                   ` Alex Williamson
2010-06-14 21:43                   ` Paul Brook
2010-06-14 21:43                     ` Paul Brook
2010-06-14 22:11                     ` Alex Williamson
2010-06-14 22:11                       ` Alex Williamson
2010-06-14 22:46                       ` Paul Brook
2010-06-14 22:46                         ` Paul Brook
2010-06-15  1:14                         ` Alex Williamson
2010-06-15  1:14                           ` Alex Williamson
2010-06-15 11:24                           ` Paul Brook
2010-06-15 11:24                             ` Paul Brook
2010-06-15  8:47         ` Markus Armbruster
2010-06-15  8:47           ` Markus Armbruster
2010-06-15  9:34           ` Jan Kiszka
2010-06-15  9:34             ` Jan Kiszka
2010-06-15 11:28             ` Paul Brook
2010-06-15 11:28               ` Paul Brook
2010-06-15 11:45               ` Jan Kiszka
2010-06-15 11:45                 ` Jan Kiszka
2010-06-15 12:04                 ` Paul Brook
2010-06-15 12:04                   ` Paul Brook
2010-06-15 12:16                   ` Jan Kiszka
2010-06-15 12:16                     ` Jan Kiszka
2010-06-15 12:39                     ` Paul Brook
2010-06-15 12:39                       ` Paul Brook
2010-06-15 13:00                       ` Jan Kiszka
2010-06-15 13:00                         ` Jan Kiszka
2010-06-15 13:14                         ` Paul Brook
2010-06-15 13:14                           ` Paul Brook
2010-06-15 13:16                 ` Markus Armbruster
2010-06-15 13:16                   ` Markus Armbruster
2010-06-15 13:32                   ` Jan Kiszka
2010-06-15 13:32                     ` Jan Kiszka
2010-06-15 20:53               ` Alex Williamson
2010-06-15 20:53                 ` Alex Williamson
2010-06-15 21:55                 ` Paul Brook
2010-06-15 21:55                   ` Paul Brook
2010-06-15 22:33                   ` Alex Williamson
2010-06-15 22:33                     ` Alex Williamson
2010-06-15 23:01                     ` Paul Brook
2010-06-15 23:01                       ` Paul Brook
2010-06-15 23:10                       ` Alex Williamson
2010-06-15 23:10                         ` Alex Williamson
2010-06-16  0:25                       ` Chris Wright
2010-06-16  0:25                         ` Chris Wright
2010-06-16  0:30                         ` Paul Brook
2010-06-16  0:30                           ` Paul Brook
2010-06-16  0:35                           ` Chris Wright
2010-06-16  0:35                             ` Chris Wright
2010-06-16  1:30                             ` Paul Brook
2010-06-16  1:30                               ` Paul Brook
2010-06-16  2:55                               ` Alex Williamson
2010-06-16  2:55                                 ` Alex Williamson
2010-06-16  8:23                 ` Markus Armbruster
2010-06-16  8:23                   ` Markus Armbruster
2010-06-17 22:25                   ` Alex Williamson
2010-06-17 22:25                     ` Alex Williamson
2010-06-18  9:16                     ` Jan Kiszka
2010-06-18  9:16                       ` Jan Kiszka
2010-06-18 15:01                       ` Alex Williamson
2010-06-18 15:01                         ` Alex Williamson
2010-06-18 15:22                         ` Jan Kiszka
2010-06-18 15:22                           ` Jan Kiszka
2010-06-18 14:03                     ` Markus Armbruster
2010-06-18 14:03                       ` Markus Armbruster
2010-06-18 14:14                       ` Jan Kiszka
2010-06-18 14:14                         ` Jan Kiszka
2010-06-18 15:21                       ` Alex Williamson
2010-06-18 15:21                         ` Alex Williamson
2010-06-15 11:42             ` Markus Armbruster
2010-06-15 11:42               ` Markus Armbruster
2010-06-15 11:59               ` Jan Kiszka
2010-06-15 11:59                 ` Jan Kiszka
2010-06-15 13:07                 ` Markus Armbruster
2010-06-15 13:07                   ` Markus Armbruster
2010-06-15 13:19                   ` Paul Brook
2010-06-15 13:19                     ` Paul Brook
2010-06-15 13:32                     ` Paul Brook
2010-06-15 13:32                       ` Paul Brook
2010-06-15 15:08                   ` Jan Kiszka
2010-06-15 15:08                     ` Jan Kiszka
2010-06-16 13:02                     ` Markus Armbruster
2010-06-16 13:02                       ` Markus Armbruster
2010-06-14  5:51 ` [RFC PATCH 2/5] savevm: Add DeviceState param Alex Williamson
2010-06-14  5:51   ` [Qemu-devel] " Alex Williamson
2010-06-14  5:51 ` [RFC PATCH 3/5] savevm: Make use of the new " Alex Williamson
2010-06-14  5:51   ` [Qemu-devel] " Alex Williamson
2010-06-14  5:51 ` [RFC PATCH 4/5] eepro100: Add a dev field to eeprom new/free functions Alex Williamson
2010-06-14  5:51   ` [Qemu-devel] " Alex Williamson
2010-06-14  5:51 ` [RFC PATCH 5/5] virtio-net: Incorporate a DeviceState pointer and let savevm track instances Alex Williamson
2010-06-14  5:51   ` [Qemu-devel] " Alex Williamson
2010-06-14  7:02 ` [RFC PATCH 0/5] Introduce canonical device hierarchy string Gerd Hoffmann
2010-06-14  7:02   ` [Qemu-devel] " Gerd Hoffmann
2010-06-14 19:56   ` Alex Williamson
2010-06-14 19:56     ` [Qemu-devel] " Alex Williamson
2010-06-15  8:53     ` Markus Armbruster
2010-06-15  8:53       ` Markus Armbruster
2010-06-15 18:01       ` Alex Williamson
2010-06-15 18:01         ` Alex Williamson
2010-06-16  8:34         ` Markus Armbruster
2010-06-16  8:36           ` Markus Armbruster
2010-06-15  9:12     ` Gerd Hoffmann
2010-06-15  9:12       ` [Qemu-devel] " Gerd Hoffmann
2010-06-15 18:03       ` Alex Williamson
2010-06-15 18:03         ` [Qemu-devel] " Alex Williamson
2010-06-16  9:46 ` Markus Armbruster [this message]
2010-06-16  9:46   ` RFC qdev path semantics (was: [Qemu-devel] [RFC PATCH 0/5] Introduce canonical device hierarchy string) Markus Armbruster
2010-06-16 10:40   ` Paul Brook
2010-06-16 10:40     ` Paul Brook
2010-06-16 11:37   ` RFC qdev path semantics Jan Kiszka
2010-06-16 11:37     ` [Qemu-devel] " Jan Kiszka
2010-06-16 11:45     ` Paul Brook
2010-06-16 11:45       ` [Qemu-devel] " Paul Brook
2010-06-16 12:01       ` Jan Kiszka
2010-06-16 12:01         ` [Qemu-devel] " Jan Kiszka
2010-06-16 12:21         ` Paul Brook
2010-06-16 12:21           ` Paul Brook
2010-06-16 13:50           ` Jan Kiszka
2010-06-16 13:50             ` Jan Kiszka
2010-06-16 13:05   ` Markus Armbruster
2010-06-16 13:05     ` [Qemu-devel] " Markus Armbruster
2010-06-16 13:23     ` Paul Brook
2010-06-16 13:23       ` [Qemu-devel] " Paul Brook
2010-06-16 14:31       ` Markus Armbruster
2010-06-16 14:31         ` Markus Armbruster
2010-06-17 21:43   ` Alex Williamson
2010-06-17 21:43     ` [Qemu-devel] " Alex Williamson
2010-06-17 22:01     ` Paul Brook
2010-06-17 22:01       ` [Qemu-devel] " Paul Brook
2010-06-17 22:34       ` Alex Williamson
2010-06-17 22:34         ` [Qemu-devel] " Alex Williamson
2010-06-18  7:52     ` Gerd Hoffmann
2010-06-18  7:52       ` [Qemu-devel] " Gerd Hoffmann
2010-06-18 14:58   ` Markus Armbruster
2010-06-18 14:58     ` [Qemu-devel] " Markus Armbruster
2010-06-22 14:27   ` Anthony Liguori
2010-06-22 14:27     ` [Qemu-devel] " Anthony Liguori

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=m3d3vr48f6.fsf@blackfin.pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=avi@redhat.com \
    --cc=chrisw@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=paul@codesourcery.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.