diff --git a/patches/xen-netfront-Fix-mismatched-rtnl_unlock.patch b/patches/xen-netfront-Fix-mismatched-rtnl_unlock.patch new file mode 100644 index 0000000..6128eec --- /dev/null +++ b/patches/xen-netfront-Fix-mismatched-rtnl_unlock.patch @@ -0,0 +1,21 @@ +diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c +index d5e790dd589a..d7dc95f58dae 100644 +--- a/drivers/net/xen-netfront.c ++++ b/drivers/net/xen-netfront.c +@@ -1817,7 +1817,7 @@ static int talk_to_netback(struct xenbus_device *dev, + err = xen_net_read_mac(dev, info->netdev->dev_addr); + if (err) { + xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename); +- goto out; ++ goto out_unlocked; + } + + rtnl_lock(); +@@ -1932,6 +1932,7 @@ static int talk_to_netback(struct xenbus_device *dev, + xennet_destroy_queues(info); + out: + rtnl_unlock(); ++out_unlocked: + device_unregister(&dev->dev); + return err; + } diff --git a/patches/xen-netfront-Update-features-after-registering-netde.patch b/patches/xen-netfront-Update-features-after-registering-netde.patch new file mode 100644 index 0000000..6d6d3b7 --- /dev/null +++ b/patches/xen-netfront-Update-features-after-registering-netde.patch @@ -0,0 +1,26 @@ +diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c +index d7dc95f58dae..31bc4210f969 100644 +--- a/drivers/net/xen-netfront.c ++++ b/drivers/net/xen-netfront.c +@@ -1958,10 +1958,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) { +@@ -1971,6 +1967,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