Re: [PATCH] vhost/vsock: switch to a mutex for vhost_vsock_hash

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Nov 05, 2018 at 05:33:22PM +0000, Stefan Hajnoczi wrote:
> Now that there are no more data path users of vhost_vsock_lock, it can
> be turned into a mutex.  It's only used by .release() and in the
> .ioctl() path.
> 
> Depends-on: <20181105103547.22018-1-stefanha@xxxxxxxxxx>
> Suggested-by: Jason Wang <jasowang@xxxxxxxxxx>
> Signed-off-by: Stefan Hajnoczi <stefanha@xxxxxxxxxx>
> ---
> Hi Jason,
> Thanks for pointing out that spin_lock_bh() is no longer necessary.
> Let's switch to a mutex.
> ---
>  drivers/vhost/vsock.c | 16 ++++++++--------
>  1 file changed, 8 insertions(+), 8 deletions(-)

Ping?

> diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c
> index 51879ed18652..d95b0c04cc9b 100644
> --- a/drivers/vhost/vsock.c
> +++ b/drivers/vhost/vsock.c
> @@ -27,14 +27,14 @@ enum {
>  };
>  
>  /* Used to track all the vhost_vsock instances on the system. */
> -static DEFINE_SPINLOCK(vhost_vsock_lock);
> +static DEFINE_MUTEX(vhost_vsock_mutex);
>  static DEFINE_READ_MOSTLY_HASHTABLE(vhost_vsock_hash, 8);
>  
>  struct vhost_vsock {
>  	struct vhost_dev dev;
>  	struct vhost_virtqueue vqs[2];
>  
> -	/* Link to global vhost_vsock_hash, writes use vhost_vsock_lock */
> +	/* Link to global vhost_vsock_hash, writes use vhost_vsock_mutex */
>  	struct hlist_node hash;
>  
>  	struct vhost_work send_pkt_work;
> @@ -51,7 +51,7 @@ static u32 vhost_transport_get_local_cid(void)
>  	return VHOST_VSOCK_DEFAULT_HOST_CID;
>  }
>  
> -/* Callers that dereference the return value must hold vhost_vsock_lock or the
> +/* Callers that dereference the return value must hold vhost_vsock_mutex or the
>   * RCU read lock.
>   */
>  static struct vhost_vsock *vhost_vsock_get(u32 guest_cid)
> @@ -576,10 +576,10 @@ static int vhost_vsock_dev_release(struct inode *inode, struct file *file)
>  {
>  	struct vhost_vsock *vsock = file->private_data;
>  
> -	spin_lock_bh(&vhost_vsock_lock);
> +	mutex_lock(&vhost_vsock_mutex);
>  	if (vsock->guest_cid)
>  		hash_del_rcu(&vsock->hash);
> -	spin_unlock_bh(&vhost_vsock_lock);
> +	mutex_unlock(&vhost_vsock_mutex);
>  
>  	/* Wait for other CPUs to finish using vsock */
>  	synchronize_rcu();
> @@ -623,10 +623,10 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vsock, u64 guest_cid)
>  		return -EINVAL;
>  
>  	/* Refuse if CID is already in use */
> -	spin_lock_bh(&vhost_vsock_lock);
> +	mutex_lock(&vhost_vsock_mutex);
>  	other = vhost_vsock_get(guest_cid);
>  	if (other && other != vsock) {
> -		spin_unlock_bh(&vhost_vsock_lock);
> +		mutex_unlock(&vhost_vsock_mutex);
>  		return -EADDRINUSE;
>  	}
>  
> @@ -635,7 +635,7 @@ static int vhost_vsock_set_cid(struct vhost_vsock *vsock, u64 guest_cid)
>  
>  	vsock->guest_cid = guest_cid;
>  	hash_add_rcu(vhost_vsock_hash, &vsock->hash, guest_cid);
> -	spin_unlock_bh(&vhost_vsock_lock);
> +	mutex_unlock(&vhost_vsock_mutex);
>  
>  	return 0;
>  }
> -- 
> 2.19.1
> 

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux