Subject: Re: [Xen-devel] [PATCH V3 net-next 3/5] xen-netfront: Factor queue-specific data into queue struct.

From: David Vrabel <[email-masked]>
Date: Fri, 14 Feb 2014 18:04:54 +0000

On 14/02/14 17:35, Andrew J. Bennieston wrote:
> From: "Andrew J. Bennieston" <[email-masked]>
> 
> In preparation for multi-queue support in xen-netfront, move the
> queue-specific data from struct netfront_info to struct netfront_queue,
> and update the rest of the code to use this.
> 
> Also adds loops over queues where appropriate, even though only one is
> configured at this point, and uses alloc_etherdev_mq() and the
> corresponding multi-queue netif wake/start/stop functions in preparation
> for multiple active queues.
> 
> Finally, implements a trivial queue selection function suitable for
> ndo_select_queue, which simply returns 0, selecting the first (and
> only) queue.
[...]
> --- a/drivers/net/xen-netfront.c
> +++ b/drivers/net/xen-netfront.c
[...]
> @@ -2048,17 +2196,27 @@ static const struct xenbus_device_id netfront_ids[] = {
[...]
> +	for (i = 0; i < info->num_queues; ++i) {
> +		queue = &info->queues[i];
> +		del_timer_sync(&queue->rx_refill_timer);
> +	}
> +
> +	if (info->num_queues) {
> +		kfree(info->queues);
> +		info->queues = NULL;
> +	}
> +
>  	xennet_sysfs_delif(info->netdev);
>  
>  	unregister_netdev(info->netdev);
>  
> -	del_timer_sync(&info->rx_refill_timer);
> -

This has reordered the del_timer_sync() to before the
unregister_netdev() call.

Can you be sure that the timer cannot be restarted after deleting it?

David