59 lines
2.2 KiB
Diff
59 lines
2.2 KiB
Diff
From patchwork Thu Jun 21 13:00:21 2018
|
|
Content-Type: text/plain; charset="utf-8"
|
|
MIME-Version: 1.0
|
|
Content-Transfer-Encoding: 7bit
|
|
Subject: [2/2] xen-netfront: Update features after registering netdev
|
|
X-Patchwork-Submitter: Ross Lagerwall <ross.lagerwall@citrix.com>
|
|
X-Patchwork-Id: 932720
|
|
Message-Id: <20180621130021.27029-3-ross.lagerwall@citrix.com>
|
|
To: <netdev@vger.kernel.org>
|
|
Cc: Ross Lagerwall <ross.lagerwall@citrix.com>,
|
|
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
|
|
Juergen Gross <jgross@suse.com>, "David S. Miller" <davem@davemloft.net>,
|
|
<xen-devel@lists.xenproject.org>, <linux-kernel@vger.kernel.org>,
|
|
Liam Shepherd <liam@dancer.es>
|
|
Date: Thu, 21 Jun 2018 14:00:21 +0100
|
|
From: Ross Lagerwall <ross.lagerwall@citrix.com>
|
|
List-Id: <netdev.vger.kernel.org>
|
|
|
|
Update the features after calling register_netdev() otherwise the
|
|
device features are not set up correctly and it not possible to change
|
|
the MTU of the device. After this change, the features reported by
|
|
ethtool match the device's features before the commit which introduced
|
|
the issue and it is possible to change the device's MTU.
|
|
|
|
Fixes: f599c64fdf7d ("xen-netfront: Fix race between device setup and open")
|
|
Reported-by: Liam Shepherd <liam@dancer.es>
|
|
Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
|
|
Reviewed-by: Juergen Gross <jgross@suse.com>
|
|
---
|
|
drivers/net/xen-netfront.c | 8 ++++----
|
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
|
|
index ee4cb6c..a57daec 100644
|
|
--- a/drivers/net/xen-netfront.c
|
|
+++ b/drivers/net/xen-netfront.c
|
|
@@ -1951,10 +1951,6 @@ static int xennet_connect(struct net_device *dev)
|
|
/* talk_to_netback() sets the correct number of queues */
|
|
num_queues = dev->real_num_tx_queues;
|
|
|
|
- rtnl_lock();
|
|
- netdev_update_features(dev);
|
|
- rtnl_unlock();
|
|
-
|
|
if (dev->reg_state == NETREG_UNINITIALIZED) {
|
|
err = register_netdev(dev);
|
|
if (err) {
|
|
@@ -1964,6 +1960,10 @@ static int xennet_connect(struct net_device *dev)
|
|
}
|
|
}
|
|
|
|
+ rtnl_lock();
|
|
+ netdev_update_features(dev);
|
|
+ rtnl_unlock();
|
|
+
|
|
/*
|
|
* All public and private state should now be sane. Get
|
|
* ready to start sending and receiving packets and give the driver
|