mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
One cc: stable commit, the rest are a series of minor cleanups which have
been sitting in MST's tree during my vacation. I changed a function name and made one trivial change, then they spent two days in linux-next. Thanks, Rusty. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAABAgAGBQJUQFBQAAoJENkgDmzRrbjxJRIP/1yCQRElQewxURSmJelyqCdU 0mHYB0R9Mf3tfre1xnofqs2lWeSMc/4ptKHsVR6pupoztSwnz7HsLHfEFvFJh4mj KsaqYElxkNxTcfyHwLjyJS0/J6tG1tYypXGiimTBS0bvFHL3XZdimVgJ6WvX+gO7 YSaDEX8/EqCERafslS5+gKJlz3drDOnCZCe9y4BDSmsvl2k7bkpSxIn8vsR6jIC0 c5JpUy6QVF+3XA/J932M7yRs+xpqxNoUWiyY3ar9o3CtQAaQB0ZAetSxY6hTfvVc GlNFzCifdsaQwsl2SVsE2h6tWaRhtMtcGWQuhHThIPyIf8XxhYyBRY2FLo70LMz1 eqtwy6F/Bg/nzUsdee4PZBMeoKHlAEL12RpsEKgfUoLzj16Aqa8ll+Agbglbkw8G f3d2FwzKAlpY5NwHETC1wYy52PJ3efqksRWuhokmYpxNSbHJS/lsiJOE7272/4Qr MtXuvRmo22tf34XFd5y7zqWjgZ58eeFOqQWi/K+6ZgpqVOvikjrXXKEuiVdjO0ZD kTVR/sQKiR+79rzENk80XBhWaMveECNXF1TiZ/3MmURkmEOBRQMxRQ20BX3exvna AJ/WVA5DcfXZc1yyqknE1NLGrvSBMJENH13x2QPwrqNWAryOOKuF1VKKIwWlDw5j vtx5nXiJa8YYdxI2TJCN =JK6x -----END PGP SIGNATURE----- Merge tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux Pull virtio updates from Rusty Russell: "One cc: stable commit, the rest are a series of minor cleanups which have been sitting in MST's tree during my vacation. I changed a function name and made one trivial change, then they spent two days in linux-next" * tag 'virtio-next-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rusty/linux: (25 commits) virtio-rng: refactor probe error handling virtio_scsi: drop scan callback virtio_balloon: enable VQs early on restore virtio_scsi: fix race on device removal virito_scsi: use freezable WQ for events virtio_net: enable VQs early on restore virtio_console: enable VQs early on restore virtio_scsi: enable VQs early on restore virtio_blk: enable VQs early on restore virtio_scsi: move kick event out from virtscsi_init virtio_net: fix use after free on allocation failure 9p/trans_virtio: enable VQs early virtio_console: enable VQs early virtio_blk: enable VQs early virtio_net: enable VQs early virtio: add API to enable VQs early virtio_net: minor cleanup virtio-net: drop config_mutex virtio_net: drop config_enable virtio-blk: drop config_mutex ...
This commit is contained in:
commit
0e6e58f941
15 changed files with 207 additions and 137 deletions
|
|
@ -123,9 +123,6 @@ struct virtnet_info {
|
|||
/* Host can handle any s/g split between our header and packet data */
|
||||
bool any_header_sg;
|
||||
|
||||
/* enable config space updates */
|
||||
bool config_enable;
|
||||
|
||||
/* Active statistics */
|
||||
struct virtnet_stats __percpu *stats;
|
||||
|
||||
|
|
@ -135,9 +132,6 @@ struct virtnet_info {
|
|||
/* Work struct for config space updates */
|
||||
struct work_struct config_work;
|
||||
|
||||
/* Lock for config space updates */
|
||||
struct mutex config_lock;
|
||||
|
||||
/* Does the affinity hint is set for virtqueues? */
|
||||
bool affinity_hint_set;
|
||||
|
||||
|
|
@ -1414,13 +1408,9 @@ static void virtnet_config_changed_work(struct work_struct *work)
|
|||
container_of(work, struct virtnet_info, config_work);
|
||||
u16 v;
|
||||
|
||||
mutex_lock(&vi->config_lock);
|
||||
if (!vi->config_enable)
|
||||
goto done;
|
||||
|
||||
if (virtio_cread_feature(vi->vdev, VIRTIO_NET_F_STATUS,
|
||||
struct virtio_net_config, status, &v) < 0)
|
||||
goto done;
|
||||
return;
|
||||
|
||||
if (v & VIRTIO_NET_S_ANNOUNCE) {
|
||||
netdev_notify_peers(vi->dev);
|
||||
|
|
@ -1431,7 +1421,7 @@ static void virtnet_config_changed_work(struct work_struct *work)
|
|||
v &= VIRTIO_NET_S_LINK_UP;
|
||||
|
||||
if (vi->status == v)
|
||||
goto done;
|
||||
return;
|
||||
|
||||
vi->status = v;
|
||||
|
||||
|
|
@ -1442,8 +1432,6 @@ static void virtnet_config_changed_work(struct work_struct *work)
|
|||
netif_carrier_off(vi->dev);
|
||||
netif_tx_stop_all_queues(vi->dev);
|
||||
}
|
||||
done:
|
||||
mutex_unlock(&vi->config_lock);
|
||||
}
|
||||
|
||||
static void virtnet_config_changed(struct virtio_device *vdev)
|
||||
|
|
@ -1764,8 +1752,6 @@ static int virtnet_probe(struct virtio_device *vdev)
|
|||
u64_stats_init(&virtnet_stats->rx_syncp);
|
||||
}
|
||||
|
||||
mutex_init(&vi->config_lock);
|
||||
vi->config_enable = true;
|
||||
INIT_WORK(&vi->config_work, virtnet_config_changed_work);
|
||||
|
||||
/* If we can receive ANY GSO packets, we must allocate large ones. */
|
||||
|
|
@ -1813,6 +1799,8 @@ static int virtnet_probe(struct virtio_device *vdev)
|
|||
goto free_vqs;
|
||||
}
|
||||
|
||||
virtio_device_ready(vdev);
|
||||
|
||||
/* Last of all, set up some receive buffers. */
|
||||
for (i = 0; i < vi->curr_queue_pairs; i++) {
|
||||
try_fill_recv(&vi->rq[i], GFP_KERNEL);
|
||||
|
|
@ -1849,6 +1837,8 @@ static int virtnet_probe(struct virtio_device *vdev)
|
|||
return 0;
|
||||
|
||||
free_recv_bufs:
|
||||
vi->vdev->config->reset(vdev);
|
||||
|
||||
free_receive_bufs(vi);
|
||||
unregister_netdev(dev);
|
||||
free_vqs:
|
||||
|
|
@ -1882,17 +1872,13 @@ static void virtnet_remove(struct virtio_device *vdev)
|
|||
|
||||
unregister_hotcpu_notifier(&vi->nb);
|
||||
|
||||
/* Prevent config work handler from accessing the device. */
|
||||
mutex_lock(&vi->config_lock);
|
||||
vi->config_enable = false;
|
||||
mutex_unlock(&vi->config_lock);
|
||||
/* Make sure no work handler is accessing the device. */
|
||||
flush_work(&vi->config_work);
|
||||
|
||||
unregister_netdev(vi->dev);
|
||||
|
||||
remove_vq_common(vi);
|
||||
|
||||
flush_work(&vi->config_work);
|
||||
|
||||
free_percpu(vi->stats);
|
||||
free_netdev(vi->dev);
|
||||
}
|
||||
|
|
@ -1905,10 +1891,8 @@ static int virtnet_freeze(struct virtio_device *vdev)
|
|||
|
||||
unregister_hotcpu_notifier(&vi->nb);
|
||||
|
||||
/* Prevent config work handler from accessing the device */
|
||||
mutex_lock(&vi->config_lock);
|
||||
vi->config_enable = false;
|
||||
mutex_unlock(&vi->config_lock);
|
||||
/* Make sure no work handler is accessing the device */
|
||||
flush_work(&vi->config_work);
|
||||
|
||||
netif_device_detach(vi->dev);
|
||||
cancel_delayed_work_sync(&vi->refill);
|
||||
|
|
@ -1923,8 +1907,6 @@ static int virtnet_freeze(struct virtio_device *vdev)
|
|||
|
||||
remove_vq_common(vi);
|
||||
|
||||
flush_work(&vi->config_work);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1937,6 +1919,8 @@ static int virtnet_restore(struct virtio_device *vdev)
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
virtio_device_ready(vdev);
|
||||
|
||||
if (netif_running(vi->dev)) {
|
||||
for (i = 0; i < vi->curr_queue_pairs; i++)
|
||||
if (!try_fill_recv(&vi->rq[i], GFP_KERNEL))
|
||||
|
|
@ -1948,10 +1932,6 @@ static int virtnet_restore(struct virtio_device *vdev)
|
|||
|
||||
netif_device_attach(vi->dev);
|
||||
|
||||
mutex_lock(&vi->config_lock);
|
||||
vi->config_enable = true;
|
||||
mutex_unlock(&vi->config_lock);
|
||||
|
||||
rtnl_lock();
|
||||
virtnet_set_queues(vi, vi->curr_queue_pairs);
|
||||
rtnl_unlock();
|
||||
|
|
|
|||
Loading…
Reference in a new issue