vhost: add __rcu annotations
Also add rcu_dereference_protected() for code paths where locks are held. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: "Michael S. Tsirkin" <mst@redhat.com>
This commit is contained in:
committed by
Paul E. McKenney
parent
65e6bf484c
commit
28457ee69c
@ -127,7 +127,10 @@ static void handle_tx(struct vhost_net *net)
|
||||
size_t len, total_len = 0;
|
||||
int err, wmem;
|
||||
size_t hdr_size;
|
||||
struct socket *sock = rcu_dereference(vq->private_data);
|
||||
struct socket *sock;
|
||||
|
||||
sock = rcu_dereference_check(vq->private_data,
|
||||
lockdep_is_held(&vq->mutex));
|
||||
if (!sock)
|
||||
return;
|
||||
|
||||
@ -582,7 +585,10 @@ static void vhost_net_disable_vq(struct vhost_net *n,
|
||||
static void vhost_net_enable_vq(struct vhost_net *n,
|
||||
struct vhost_virtqueue *vq)
|
||||
{
|
||||
struct socket *sock = vq->private_data;
|
||||
struct socket *sock;
|
||||
|
||||
sock = rcu_dereference_protected(vq->private_data,
|
||||
lockdep_is_held(&vq->mutex));
|
||||
if (!sock)
|
||||
return;
|
||||
if (vq == n->vqs + VHOST_NET_VQ_TX) {
|
||||
@ -598,7 +604,8 @@ static struct socket *vhost_net_stop_vq(struct vhost_net *n,
|
||||
struct socket *sock;
|
||||
|
||||
mutex_lock(&vq->mutex);
|
||||
sock = vq->private_data;
|
||||
sock = rcu_dereference_protected(vq->private_data,
|
||||
lockdep_is_held(&vq->mutex));
|
||||
vhost_net_disable_vq(n, vq);
|
||||
rcu_assign_pointer(vq->private_data, NULL);
|
||||
mutex_unlock(&vq->mutex);
|
||||
@ -736,7 +743,8 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd)
|
||||
}
|
||||
|
||||
/* start polling new socket */
|
||||
oldsock = vq->private_data;
|
||||
oldsock = rcu_dereference_protected(vq->private_data,
|
||||
lockdep_is_held(&vq->mutex));
|
||||
if (sock != oldsock) {
|
||||
vhost_net_disable_vq(n, vq);
|
||||
rcu_assign_pointer(vq->private_data, sock);
|
||||
|
Reference in New Issue
Block a user