| From: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Date: Fri, 20 Jul 2018 18:33:59 +0200 |
| Subject: xen-netfront: fix queue name setting |
| |
| commit 2d408c0d4574b01b9ed45e02516888bf925e11a9 upstream. |
| |
| Commit f599c64fdf7d ("xen-netfront: Fix race between device setup and |
| open") changed the initialization order: xennet_create_queues() now |
| happens before we do register_netdev() so using netdev->name in |
| xennet_init_queue() is incorrect, we end up with the following in |
| /proc/interrupts: |
| |
| 60: 139 0 xen-dyn -event eth%d-q0-tx |
| 61: 265 0 xen-dyn -event eth%d-q0-rx |
| 62: 234 0 xen-dyn -event eth%d-q1-tx |
| 63: 1 0 xen-dyn -event eth%d-q1-rx |
| |
| and this looks ugly. Actually, using early netdev name (even when it's |
| already set) is also not ideal: nowadays we tend to rename eth devices |
| and queue name may end up not corresponding to the netdev name. |
| |
| Use nodename from xenbus device for queue naming: this can't change in VM's |
| lifetime. Now /proc/interrupts looks like |
| |
| 62: 202 0 xen-dyn -event device/vif/0-q0-tx |
| 63: 317 0 xen-dyn -event device/vif/0-q0-rx |
| 64: 262 0 xen-dyn -event device/vif/0-q1-tx |
| 65: 17 0 xen-dyn -event device/vif/0-q1-rx |
| |
| Fixes: f599c64fdf7d ("xen-netfront: Fix race between device setup and open") |
| Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> |
| Reviewed-by: Ross Lagerwall <ross.lagerwall@citrix.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/xen-netfront.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/xen-netfront.c |
| +++ b/drivers/net/xen-netfront.c |
| @@ -1646,7 +1646,7 @@ static int xennet_init_queue(struct netf |
| queue->rx_refill_timer.function = rx_refill_timeout; |
| |
| snprintf(queue->name, sizeof(queue->name), "%s-q%u", |
| - queue->info->netdev->name, queue->id); |
| + queue->info->xbdev->nodename, queue->id); |
| |
| /* Initialise tx_skbs as a free chain containing every entry. */ |
| queue->tx_skb_freelist = 0; |