On Mon, Dec 17, 2018 at 10:57:30AM -0500, Tony Krowiak wrote: > The qbus_is_full(BusState *bus) function (qdev_monitor.c) compares the > max_index > value of the BusState structure with the max_dev value of the BusClass > structure > to determine whether the maximum number of children has been reached for the > bus. The problem is, the max_index field of the BusState structure does not > necessarily reflect the number of devices that have been plugged into > the bus. > > Whenever a child device is plugged into the bus, the bus's max_index value is > assigned to the child device and then incremented. If the child is > subsequently > unplugged, the value of the max_index does not change and no longer reflects > the > number of children. > > When the bus's max_index value reaches the maximum number of devices > allowed for the bus (i.e., the max_dev field in the BusClass structure), > attempts to plug another device will be rejected claiming that the bus is > full -- even if the bus is actually empty. > > To resolve the problem, a new 'num_children' field is being added to the > BusState structure to keep track of the number of children plugged into the > bus. It will be incremented when a child is plugged, and decremented when a > child is unplugged. > > Signed-off-by: Tony Krowiak <akrow...@linux.ibm.com> > Reviewed-by: Pierre Morel<pmo...@linux.ibm.com> > Reviewed-by: Halil Pasic <pa...@linux.ibm.com>
Queued on machine-next, thanks! -- Eduardo