From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=35054 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OOFmP-0007oo-7d for qemu-devel@nongnu.org; Mon, 14 Jun 2010 15:57:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OOFmL-00073t-Hb for qemu-devel@nongnu.org; Mon, 14 Jun 2010 15:57:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:9925) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OOFmL-00073a-8l for qemu-devel@nongnu.org; Mon, 14 Jun 2010 15:57:05 -0400 From: Alex Williamson In-Reply-To: <4C15D413.6020803@redhat.com> References: <20100614054923.879.33717.stgit@localhost.localdomain> <4C15D413.6020803@redhat.com> Content-Type: text/plain; charset="UTF-8" Date: Mon, 14 Jun 2010 13:56:29 -0600 Message-ID: <1276545389.12015.499.camel@x201> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [RFC PATCH 0/5] Introduce canonical device hierarchy string List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: chrisw@redhat.com, kvm@vger.kernel.org, qemu-devel@nongnu.org, paul@codesourcery.com, avi@redhat.com On Mon, 2010-06-14 at 09:02 +0200, Gerd Hoffmann wrote: > Hi, > > > My premise with this attempt is that we walk the hierarchy and use the > > names to create the base of the path. As we get to the device, > > particularly to the parent bus of the device, we need to start looking at > > properties to ensure uniqueness. > > You'll need that for every bus along the way down to the device. Create > a virtual machine with two lsi scsi host adapters, then attach a disk > with scsi id 0 to each. Just the scsi id isn't good enougth to identify > the device. You'll need the lsi pci address too. Yep, see below. > > For now, the only properties I've tagged as path > > properties are PCI bus addresses and MAC addresses. > > mac address isn't needed here. You need the property which specifies > the bus address. For PCI this obviously is the PCI address. For scsi > the scsi id. For ISA you can use the I/O port base. virtio-serial the > port number, ... PCI: addr SCSI: scsi-id ISA: serial/parallel = iobase, others?? ide-drive: unit I2C: address virtio-serial doesn't seem to make a DeviceState per port, so I think it can be skipped. I'm sure I'm still missing some... That gives me the list below (printed from qdev_init()): /i440FX-pcihost /i440FX-pcihost/pci.0/i440FX.00.0 /i440FX-pcihost/pci.0/PIIX3.01.0 /i440FX-pcihost/pci.0/cirrus-vga.02.0 /i440FX-pcihost/pci.0/PIIX3.01.0/isa.0/mc146818rtc /i440FX-pcihost/pci.0/PIIX3.01.0/isa.0/isa-serial.0x3f8 /i440FX-pcihost/pci.0/PIIX3.01.0/isa.0/isa-serial.0x2f8 /i440FX-pcihost/pci.0/PIIX3.01.0/isa.0/isa-parallel.0x378 /i440FX-pcihost/pci.0/PIIX3.01.0/isa.0/i8042 /i440FX-pcihost/pci.0/PIIX3.01.0/isa.0/isa-fdc /i440FX-pcihost/pci.0/i82551.03.0 /i440FX-pcihost/pci.0/virtio-net-pci.04.0 /i440FX-pcihost/pci.0/e1000.05.0 /i440FX-pcihost/pci.0/rtl8139.06.0 /i440FX-pcihost/pci.0/pcnet.07.0 /i440FX-pcihost/pci.0/piix3-ide.01.1 /i440FX-pcihost/pci.0/piix3-ide.01.1/ide.0/ide-drive.0 /i440FX-pcihost/pci.0/piix3-ide.01.1/ide.0/ide-drive.1 /i440FX-pcihost/pci.0/piix3-ide.01.1/ide.1/ide-drive.0 /i440FX-pcihost/pci.0/PIIX4_PM.01.3 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.80 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.81 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.82 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.83 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.84 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.85 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.86 /i440FX-pcihost/pci.0/PIIX4_PM.01.3/i2c/smbus-eeprom.87 /i440FX-pcihost/pci.0/lsi53c895a.08.0/scsi.0/scsi-disk.0 /i440FX-pcihost/pci.0/lsi53c895a.08.0/scsi.0/scsi-disk.3 /i440FX-pcihost/pci.0/lsi53c895a.08.0 /i440FX-pcihost/pci.0/virtio-serial-pci.09.0 /i440FX-pcihost/pci.0/virtio-serial-pci.0a.0 /i440FX-pcihost/pci.0/virtio-blk-pci.0b.0