[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-1.4] net: fix infinite loop on exit
From: |
Jason Wang |
Subject: |
Re: [Qemu-devel] [PATCH for-1.4] net: fix infinite loop on exit |
Date: |
Thu, 07 Feb 2013 14:24:14 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 |
On 02/07/2013 08:25 AM, Michael Roth wrote:
> 1ceef9f27359cbe92ef124bf74de6f792e71f6fb added handling for cleaning
> up multiple queues in qemu_del_nic() for cases where multiqueue is in
> use. To determine the number of queues it looks at nic->conf->queues,
> then iterates through all the queues to cleanup the associated
> NetClientStates. If no queues are found, no NetClientStates are deleted.
>
> However, nic->conf->queues is only set when a peer is created via
> -netdev or netdev_add, and is otherwise 0. This causes us to spin in
> net_cleanup() if we attempt to shut down qemu before adding a host
> device.
>
> Since qemu_new_nic() unconditionally creates at least 1
> queue/NetClientState at queue idx 0, make qemu_del_nic() always attempt
> to clean it up.
>
> Signed-off-by: Michael Roth <address@hidden>
> ---
> net/net.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/net/net.c b/net/net.c
> index 9806862..f9e7136 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -351,7 +351,7 @@ void qemu_del_net_client(NetClientState *nc)
>
> void qemu_del_nic(NICState *nic)
> {
> - int i, queues = nic->conf->queues;
> + int i, queues = MAX(nic->conf->queues, 1);
>
> /* If this is a peer NIC and peer has already been deleted, free it now.
> */
> if (nic->peer_deleted) {
Acked-by: Jason Wang <address@hidden>
Alternatively, we can set the conf->queues to 1 in qemu_new_nic() if we
find it was 0. But this fix is ok enough.
Thanks