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

Reply via email to