From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:59990) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUHKI-0005jZ-D9 for qemu-devel@nongnu.org; Mon, 22 Apr 2013 10:02:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UUHK9-0001Qy-O6 for qemu-devel@nongnu.org; Mon, 22 Apr 2013 10:02:38 -0400 Received: from cantor2.suse.de ([195.135.220.15]:59519 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UUHK9-0001Qn-Eh for qemu-devel@nongnu.org; Mon, 22 Apr 2013 10:02:29 -0400 Message-ID: <517542F2.6080407@suse.de> Date: Mon, 22 Apr 2013 16:02:26 +0200 From: =?ISO-8859-1?Q?Andreas_F=E4rber?= MIME-Version: 1.0 References: <1366077021-28882-1-git-send-email-afaerber@suse.de> <20130418104156.7a5349f0@nial.usersys.redhat.com> <20130418110151.316c17b6@nial.usersys.redhat.com> <5D9ACBBCF6B270468D615C4719A59BE33A469646@szxeml548-mbx.china.huawei.com> <51753ADA.5010504@suse.de> <51754130.9080507@greensocs.com> In-Reply-To: <51754130.9080507@greensocs.com> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH] qdev: Fix device_add bus assumptions List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: =?ISO-8859-1?Q?KONRAD_Fr=E9d=E9ric?= Cc: Libaiqing , "ehabkost@redhat.com" , Haofeng , "armbru@redhat.com" , "qemu-devel@nongnu.org" , "anthony@codemonkey.ws" , "pbonzini@redhat.com" , Igor Mammedov , "lcapitulino@redhat.com" Hi Fred, Am 22.04.2013 15:54, schrieb KONRAD Fr=E9d=E9ric: > On 22/04/2013 15:27, Andreas F=E4rber wrote: >> Am 22.04.2013 13:51, schrieb Libaiqing: >>> When I use the config below,an error occurs.Is there anything wron= g? >>> >>> Qemu-kvm -enable-kvm -name win7 -M pc-0.15 -m 1024 -smp 2 -boot c=20 >>> -device virtio-serial-pci,id=3Dvirtio-serial0,bus=3Dpci.0,addr=3D0x4 >>> -chardev spicevmc,id=3Dcharchannel0,name=3Dvdagent -device >>> virtserialport,bus=3Dvirtio-serial0.0,chardev=3Dcharchannel0,id=3Dcha= nnel0,name=3Dcom.redhat.spice.0=20 >>> -drive file=3D/home/img/win7.qed,if=3Dvirtio,index=3D0,format=3Dqed = -monitor >>> stdio -vga qxl -vnc :1 >>> >>> Error output: >>> -device >>> virtserialport,bus=3Dvirtio-serial0.0,chardev=3Dcharchannel0,id=3Dcha= nnel0,name=3Dcom.redhat.spice.0: >>> Bus 'virtio-serial0.0' is full >>> -device >>> virtserialport,bus=3Dvirtio-serial0.0,chardev=3Dcharchannel0,id=3Dcha= nnel0,name=3Dcom.redhat.spice.0: >>> Bus 'virtio-serial0.0' not found >>> >>> Any feedback are appliciated. >> This does not sound related to this patch at all... >> >> Instead it sounds as if the virtio refactorings had some effect not on= ly >> on virtio-net but also on virtio-serial. Fred? >=20 > Yes, sounds like the same issue as virtio-net: >=20 > bus: pci.0 > type PCI > dev: virtio-serial-pci, id "virtio-serial0" > ioeventfd =3D off > vectors =3D 2 > class =3D 0x780 > indirect_desc =3D on > event_idx =3D on > max_ports =3D 31 > addr =3D 04.0 > romfile =3D > rombar =3D 1 > multifunction =3D off > command_serr_enable =3D on > class Class 0780, addr 00:04.0, pci id 1af4:1003 (sub 1af4:0003= ) > bar 0: i/o at 0xc040 [0xc05f] > bar 1: mem at 0xfebf1000 [0xfebf1fff] > bus: virtio-serial0.0 > type virtio-pci-bus > dev: virtio-serial-device, id "" > max_ports =3D 31 > bus: virtio-serial-bus.0 > type virtio-serial-bus >=20 > The autogenerated bus name "deviceid.n" (virtio-serial0.0) became a > virtio-bus... >=20 > virtio-serial-bus.0 is the right bus to connect virtserialport. >=20 > Any idea how to fix that? The only idea I can come up with right now is to overwrite the bus name on realize/qdev-init of the containing (virtio-serial-pci) device. Whether we want that is another question... :) It would fix command line backwards compatibility but would be inconsistent then; I guess the former is more important here. Regards, Andreas >=20 > Sorry for that, > Fred >=20 >> >>> -----Original Message----- >>> From: qemu-devel-bounces+libaiqing=3Dhuawei.com@nongnu.org >>> [mailto:qemu-devel-bounces+libaiqing=3Dhuawei.com@nongnu.org] On Beha= lf >>> Of Igor Mammedov >>> Sent: Thursday, April 18, 2013 5:02 PM >>> To: Igor Mammedov >>> Cc: ehabkost@redhat.com; qemu-devel@nongnu.org; armbru@redhat.com; >>> anthony@codemonkey.ws; pbonzini@redhat.com; lcapitulino@redhat.com; >>> Andreas F=E4rber >>> Subject: Re: [Qemu-devel] [PATCH] qdev: Fix device_add bus assumption= s >>> >>> On Thu, 18 Apr 2013 10:41:56 +0200 >>> Igor Mammedov wrote: >>> >>> [...] >>>>> - if (!bus) { >>>>> - bus =3D sysbus_get_default(); >>>>> - } >>>>> - >>>> I've checked all direct childs of TYPE_DEVICE and they all set >>>> k->bus_type, >>>> with only one exception of TYPE_CPU. So it should be safe to remove >>>> fallback >>>> from qdev_device_add POV. >>>> However TYPE_CPU breaks assumption that device always has >>>> parent_bus set >>>> to not NULL in qdev_unplug() and qdev_print() >>> Err, qdev_print() is safe since it's called on bus children only, so >>> it has >>> parent_bus. >>> >>>> It would be better to add something like this: >>>> // untested >>>> >>>> diff --git a/hw/core/qdev.c b/hw/core/qdev.c >>>> index 4eb0134..45009ba 100644 >>>> --- a/hw/core/qdev.c >>>> +++ b/hw/core/qdev.c >>>> @@ -207,7 +207,7 @@ void qdev_unplug(DeviceState *dev, Error **errp) >>>> { >>>> DeviceClass *dc =3D DEVICE_GET_CLASS(dev); >>>> - if (!dev->parent_bus->allow_hotplug) { >>>> + if (dev->parent_bus && !dev->parent_bus->allow_hotplug) { >>>> error_set(errp, QERR_BUS_NO_HOTPLUG, dev->parent_bus->name= ); >>>> return; >>>> } >>>> diff --git a/qdev-monitor.c b/qdev-monitor.c >>>> index 9a78ccf..2476e4e 100644 >>>> --- a/qdev-monitor.c >>>> +++ b/qdev-monitor.c >>>> @@ -557,7 +557,9 @@ static void qdev_print(Monitor *mon, DeviceState >>>> *dev, >>>> int indent) qdev_print_props(mon, dev, DEVICE_CLASS(class)->props, >>>> indent); >>>> class =3D object_class_get_parent(class); >>>> } while (class !=3D object_class_by_name(TYPE_DEVICE)); >>>> - bus_print_dev(dev->parent_bus, mon, dev, indent); >>>> + if (dev->parent_bus) { >>>> + bus_print_dev(dev->parent_bus, mon, dev, indent); >>>> + } >>>> QLIST_FOREACH(child, &dev->child_bus, sibling) { >>>> qbus_print(mon, child, indent); >>>> } >>>> >>>>> /* create device, set properties */ >>>>> qdev =3D DEVICE(object_new(driver)); >>>>> - qdev_set_parent_bus(qdev, bus); >>>>> + >>>>> + if (bus) { >>>>> + qdev_set_parent_bus(qdev, bus); >>>>> + } >>>>> id =3D qemu_opts_id(opts); >>>>> if (id) { >>>> >>> >> >=20 --=20 SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 N=FCrnberg, Germany GF: Jeff Hawn, Jennifer Guild, Felix Imend=F6rffer; HRB 16746 AG N=FCrnbe= rg