From: Klaus Jensen <its@irrelevant.dk>
To: qemu-devel@nongnu.org
Cc: stefanha@redhat.com, qemu-block@nongnu.org, mst@redhat.com
Subject: making a qdev bus available from a (non-qtree?) device
Date: Tue, 11 May 2021 20:17:42 +0200 [thread overview]
Message-ID: <YJrKRsF4/38QheKn@apples.localdomain> (raw)
[-- Attachment #1: Type: text/plain, Size: 2859 bytes --]
Hi all,
I need some help with grok'ing qdev busses. Stefan, Michael - David
suggested on IRC that I CC'ed you guys since you might have solved a
similar issue with virtio devices. I've tried to study how that works,
but I'm not exactly sure how to apply it to the issue I'm having.
Currently, to support multiple namespaces on the emulated nvme device,
one can do something like this:
-device nvme,id=nvme-ctrl-0,serial=foo,...
-device nvme-ns,id=nvme-ns-0,bus=nvme-ctrl-0,...
-device nvme-ns,id-nvme-ns-1,bus=nvme-ctrl-0,...
The nvme device creates an 'nvme-bus' and the nvme-ns devices has
dc->bus_type = TYPE_NVME_BUS. This all works very well and provides a
nice overview in `info qtree`:
bus: main-system-bus
type System
...
dev: q35-pcihost, id ""
..
bus: pcie.0
type PCIE
..
dev: nvme, id "nvme-ctrl-0"
..
bus: nvme-ctrl-0
type nvme-bus
dev: nvme-ns, id "nvme-ns-0"
..
dev: nvme-ns, id "nvme-ns-1"
..
Nice and qdevy.
We have since introduced support for NVM Subsystems through an
nvme-subsys device. The nvme-subsys device is just a TYPE_DEVICE and
does not show in `info qtree` (I wonder if this should actually just
have been an -object?). Anyway. The nvme device has a 'subsys' link
parameter and we use this to manage the namespaces across the subsystem
that may contain several nvme devices (controllers). The problem is that
this doesnt work too well with unplugging since if the nvme device is
`device_del`'ed, the nvme-ns devices on the nvme-bus are unrealized
which is not what we want. We really want the namespaces to linger,
preferably on an nvme-bus of the nvme-subsys device so they can be
attached to other nvme devices that may show up (or already exist) in
the subsystem.
The core problem I'm having is that I can't seem to create an nvme-bus
from the nvme-subsys device and make it available to the nvme-ns device
on the command line:
-device nvme-subsys,id=nvme-subsys-0,...
-device nvme-ns,bus=nvme-subsys-0
The above results in 'No 'nvme-bus' bus found for device 'nvme-ns', even
though I do `qbus_create_inplace()` just like the nvme device. However,
I *can* reparent the nvme-ns device in its realize() method, so if I
instead define it like so:
-device nvme-subsys,id=nvme-subsys-0,...
-device nvme,id=nvme-ctrl-0,subsys=nvme-subsys-0
-device nvme-ns,bus=nvme-ctrl-0
I can then call `qdev_set_parent_bus()` and set the parent bus to the
bus creates in the nvme-subsys device. This solves the problem since the
namespaces are not "garbage collected" when the nvme device is removed,
but it just feels wrong you know? Also, if possible, I'd of course
really like to retain the nice entries in `info qtree`.
Thanks,
Klaus
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next reply other threads:[~2021-05-11 18:23 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-11 18:17 Klaus Jensen [this message]
2021-05-12 3:39 ` making a qdev bus available from a (non-qtree?) device Philippe Mathieu-Daudé
2021-05-12 8:00 ` Peter Maydell
2021-05-12 12:02 ` Markus Armbruster
2021-05-13 14:02 ` Stefan Hajnoczi
2021-05-17 6:55 ` Klaus Jensen
2021-05-17 9:56 ` Stefan Hajnoczi
2021-05-17 6:44 ` Klaus Jensen
2021-05-21 7:33 ` Markus Armbruster
2021-05-21 8:48 ` Klaus Jensen
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=YJrKRsF4/38QheKn@apples.localdomain \
--to=its@irrelevant.dk \
--cc=mst@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).