qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH 00/14] qdev: assign unique names to all devices


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH 00/14] qdev: assign unique names to all devices (part 1)
Date: Fri, 16 Sep 2011 13:06:31 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110516 Lightning/1.0b2 Thunderbird/3.1.10

On 09/16/2011 12:03 PM, Jan Kiszka wrote:
On 2011-09-16 18:54, Anthony Liguori wrote:
On 09/16/2011 11:48 AM, Jan Kiszka wrote:
On 2011-09-16 18:00, Anthony Liguori wrote:
This series introduces an infrastructure to remove anonymous devices from qdev.
Anonymous devices are one of the big gaps between qdev and QOM so removing is
a prerequisite to incrementally merging QOM.

Besides the infrastructure, I also converted almost all of the possible PC
devices to have unique names.  Please not that naming is not a property of
devices but rather of the thing that creates the devices (usually machines).

The names are ugly but this is because of the alternating device/bus hierarchy
in qdev.  For now, the names use '::' as deliminators but I think Jan has
convinced me that down the road, we should use '/' as a deliminator such that
the resulting names are actually valid paths (using a canonical path format).

I still don't see why we need to store strings as device references.
Everyone that lacks a reference (QEMU-external users) can pass in a path
- which can be a device name in the simple case. That path is resolved
to an object reference before proceeding with the requested service. If
an object should be serialized in whatever way and we need a stable
name, a central service could return this by walking up the composition
tree until a user-assigned name is found.

So there is really no need to bother device model developers with the
topics "How do I define a unique name?"

This series just asks the device model developer to come up with a unique *when*
they're doing device composition.  Even with a totally path based interface,
this is always going to be a firm requirement.

It will happen automatically - by defining a link to the child in the
parent device. Requesting unique names is redundant.

How do you link in qdev today?  The only place we have to hook is qdev_create().

In QOM, you do this:

struct PIIX3 {
  RTC rtc;
};

static void piix3_initfn(...)
{
   plug_add_child(PLUG(s), "rtc", &s->rtc);
}

This will initialize s->rtc (setting its name to be the composition path) and create the property in the PIIX3.

You might disagree as to whether the name should be stored, but hopefully you at least agree that this is the right programming model.

Regards,

Anthony Liguori



I think it may be possible to eliminate required device names by having a formal
notion of composition and have the devices store the names of the composed
devices as part of the reference to that device.  You could then have user
created devices use a separate hash table to track the names of those devices.

But, we can't easily do this today.  Having either a fully qualified name or a
composition name as part of qdev_create() is the Right Thing IMHO so I think
this is the stepping stone to something more sophisticated.

A name for an internal reference is the wrong tool IMHO.

Jan





reply via email to

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