From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54834) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5wCX-0003zf-96 for qemu-devel@nongnu.org; Fri, 19 Jun 2015 09:19:22 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5wCV-0006lW-MT for qemu-devel@nongnu.org; Fri, 19 Jun 2015 09:19:21 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45747) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5wCV-0006lM-HE for qemu-devel@nongnu.org; Fri, 19 Jun 2015 09:19:19 -0400 From: Markus Armbruster References: <1434194302-26589-1-git-send-email-armbru@redhat.com> <1434194302-26589-4-git-send-email-armbru@redhat.com> <55840F46.7000009@suse.de> Date: Fri, 19 Jun 2015 15:19:17 +0200 In-Reply-To: <55840F46.7000009@suse.de> ("Andreas =?utf-8?Q?F=C3=A4rber=22?= =?utf-8?Q?'s?= message of "Fri, 19 Jun 2015 14:47:02 +0200") Message-ID: <87vbejn8dm.fsf@blackfin.pond.sub.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Subject: Re: [Qemu-devel] [PATCH v2 3/7] qdev-monitor: Stop error avalance in qbus_find_recursive() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Andreas =?utf-8?Q?F=C3=A4rber?= Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, kraxel@redhat.com Andreas F=C3=A4rber writes: > Did you mean avalanche? Yes, fixing... > Am 13.06.2015 um 13:18 schrieb Markus Armbruster: >> Reproducer: >>=20 >> $ qemu-system-x86_64 -nodefaults -device virtio-rng-pci -device virt= io-rng-pci -device virtio-rng-device,bus=3Dvirtio-bus >> qemu-system-x86_64: -device virtio-rng-device,bus=3Dvirtio-bus: Bus = 'virtio-bus' is full >> qemu-system-x86_64: -device virtio-rng-device,bus=3Dvirtio-bus: Bus = 'virtio-bus' is full >> qemu-system-x86_64: -device virtio-rng-device,bus=3Dvirtio-bus: Bus = 'virtio-bus' not found >>=20 >> qbus_find_recursive() reports the "is full" error itself, and leaves >> reporting "not found" to its caller. The result is confusion. Write >> it a function contract that permits leaving all error reporting to the >> caller, and implement it. Update callers to detect and report "is >> full". >>=20 >> Screwed up when commit 1395af6 added the max_dev limit and the "is >> full" error condition to enforce it. >>=20 >> Signed-off-by: Markus Armbruster >> Reviewed-by: Eric Blake >> --- >> qdev-monitor.c | 62 ++++++++++++++++++++++++++++++++++++---------------= ------- >> 1 file changed, 39 insertions(+), 23 deletions(-) >>=20 >> diff --git a/qdev-monitor.c b/qdev-monitor.c >> index 7dd62dd..1408c86 100644 >> --- a/qdev-monitor.c >> +++ b/qdev-monitor.c >> @@ -364,43 +364,55 @@ static DeviceState *qbus_find_dev(BusState *bus, c= har *elem) >> return NULL; >> } >>=20=20 >> +static inline bool qbus_is_full(BusState *bus) >> +{ >> + BusClass *bus_class =3D BUS_GET_CLASS(bus); >> + return bus_class->max_dev && bus->max_index >=3D bus_class->max_dev; >> +} >> + >> +/** > > This should probably just be "/*". Fixing... > I'll trust you on getting the functional logic right, can't do a full > review right now. Thank you all the same!