From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57506) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcDk-0005lO-La for qemu-devel@nongnu.org; Tue, 03 Feb 2015 07:04:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YIcDh-0000if-Fl for qemu-devel@nongnu.org; Tue, 03 Feb 2015 07:04:44 -0500 Received: from mx1.redhat.com ([209.132.183.28]:48938) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YIcDh-0000iI-8g for qemu-devel@nongnu.org; Tue, 03 Feb 2015 07:04:41 -0500 Message-ID: <54D0B950.2060209@redhat.com> Date: Tue, 03 Feb 2015 13:04:32 +0100 From: Laszlo Ersek MIME-Version: 1.0 References: <1422592273-4432-1-git-send-email-lersek@redhat.com> <54CB09E2.9040506@redhat.com> In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] hw/arm/virt: explain device-to-transport mapping in create_virtio_devices() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell Cc: QEMU Developers On 02/03/15 12:51, Peter Maydell wrote: > On 30 January 2015 at 04:34, Laszlo Ersek wrote: >> Peter, >> >> On 01/30/15 05:31, Laszlo Ersek wrote: >>> Signed-off-by: Laszlo Ersek >>> --- >>> hw/arm/virt.c | 32 ++++++++++++++++++++++++++++---- >>> 1 file changed, 28 insertions(+), 4 deletions(-) >>> >>> diff --git a/hw/arm/virt.c b/hw/arm/virt.c >>> index 2353440..091e5ee 100644 >>> --- a/hw/arm/virt.c >>> +++ b/hw/arm/virt.c >>> @@ -441,10 +441,27 @@ static void create_virtio_devices(const VirtBoardInfo *vbi, qemu_irq *pic) >>> int i; >>> hwaddr size = vbi->memmap[VIRT_MMIO].size; >>> >>> - /* Note that we have to create the transports in forwards order >>> - * so that command line devices are inserted lowest address first, >>> - * and then add dtb nodes in reverse order so that they appear in >>> - * the finished device tree lowest address first. >>> + /* We create the transports in forwards order. Since qbus_realize() >>> + * prepends (not appends) new child buses, the incrementing loop below will >>> + * create a list of virtio-mmio buses with decreasing base addresses. >>> + * >>> + * When a -device option is processed from the command line, >>> + * qbus_find_recursive() picks the next free virtio-mmio bus in forwards >>> + * order. The upshot is that -device options in increasing command line >>> + * order are mapped to virtio-mmio buses with decreasing base addresses. >>> + * >>> + * When this code was originally written, that arrangement ensured that the >>> + * guest Linux kernel would give the lowest "name" (/dev/vda, eth0, etc) to >>> + * the first -device on the command line. (The end-to-end order is a >>> + * function of this loop, qbus_realize(), qbus_find_recursive(), and the >>> + * guest kernel's name-to-address assignment strategy.) >>> + * >>> + * Meanwhile, the kernel's traversal seems to have been reserved; see eg. >> >> can you please s/reserved/reversed/? >> >> Result of over-editing, sorry. > > Sure, no problem. I also suggest I add this para: > * > * In any case, the kernel makes no guarantee about the stability of > * enumeration order of virtio devices (as demonstrated by it changing > * between kernel versions). For reliable and stable identification > * of disks users must use UUIDs or similar mechanisms. Thanks. Do you want me to resubmit, or can you just squash it and observe that fact in a [peter.maydell@linaro.org: note about UUIDs] betwixt two other tags? Thanks Laszlo PS: yes, I love "betwixt". Whether I used it correctly above is secondary. ;)