From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57694) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aWhq5-0006Ko-LT for qemu-devel@nongnu.org; Fri, 19 Feb 2016 04:59:06 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aWhq2-0006Os-Gx for qemu-devel@nongnu.org; Fri, 19 Feb 2016 04:59:05 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58716) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aWhq2-0006Om-At for qemu-devel@nongnu.org; Fri, 19 Feb 2016 04:59:02 -0500 From: Markus Armbruster References: <4744c26fdfd911c44b58a9b6e1d0effc6cb39594.1455739133.git.alistair.francis@xilinx.com> <87lh6ijqa2.fsf@blackfin.pond.sub.org> <56C63C0D.8030501@redhat.com> Date: Fri, 19 Feb 2016 10:58:59 +0100 In-Reply-To: <56C63C0D.8030501@redhat.com> (Paolo Bonzini's message of "Thu, 18 Feb 2016 22:47:57 +0100") Message-ID: <87d1rtuil8.fsf@blackfin.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH v1 1/2] qdev-monitor.c: Register reset function if the device has one List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org, Alistair Francis , crosthwaitepeter@gmail.com, cov@codeaurora.org, Andreas =?utf-8?Q?F?= =?utf-8?Q?=C3=A4rber?= , lig.fnst@cn.fujitsu.com Paolo Bonzini writes: > On 18/02/2016 10:56, Markus Armbruster wrote: >> Alistair Francis writes: >> >>> If the device being added when running qdev_device_add() has >>> a reset function, register it so that it can be called. >>> >>> Signed-off-by: Alistair Francis >>> --- >>> >>> qdev-monitor.c | 2 ++ >>> 1 file changed, 2 insertions(+) >>> >>> diff --git a/qdev-monitor.c b/qdev-monitor.c >>> index 81e3ff3..0a99d01 100644 >>> --- a/qdev-monitor.c >>> +++ b/qdev-monitor.c >>> @@ -561,6 +561,8 @@ DeviceState *qdev_device_add(QemuOpts *opts, Error **errp) >>> >>> if (bus) { >>> qdev_set_parent_bus(dev, bus); >>> + } else if (dc->reset) { >>> + qemu_register_reset((void (*)(void *))dc->reset, dev); >>> } >>> >>> id = qemu_opts_id(opts); >> >> This looks wrong to me. >> >> You stuff all the device reset methods into the global reset_handlers >> list, where they get called in some semi-random order. This breaks when >> there are reset order dependencies between devices, e.g. between a >> device and the bus it plugs into. > > There is no bus here, see the "if" above the one that's being added. > > However, what devices have done so far is to register/unregister the > reset in the realize/unrealize methods, and I suggest doing the same. Shows that our support for bus-less devices is still in its infancy. For me, a device has a number of external connectors that need to be wired up. A qdev bus is merely a standardized package of such connectors. For historical reasons, buses are all qdev has, with a special sysbus for everything that cannot be shoehorned into a single bus. To work with individual connectors, you have to drop into C (ignoring the weird "platform bus" sysbus thing Alex added). Support for doing that at configuration rather than code level would be nice. [...]