Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp3752007ybb; Tue, 31 Mar 2020 11:16:36 -0700 (PDT) X-Google-Smtp-Source: ADFU+vv02cKs6rBxI7D4QqzZaU9bm1T4BhIfCaqQln7ecqOczlcyhE7xlTBpW0vi6FqNS239Dn05 X-Received: by 2002:a05:6830:1c77:: with SMTP id s23mr14439855otg.191.1585678596107; Tue, 31 Mar 2020 11:16:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585678596; cv=none; d=google.com; s=arc-20160816; b=VmIkk2hRyGQN1UKHy0FyEAJ7B/SDr0AgDhQQYIdTGmProa6pwDObAh/3aHrO8L0cWc u4NxRKsvwuSgyldEds3JpAfWeqrcRwOy8dwzj63khV0EHGu73LEHTjnIpW1u9ewWBcYs Jwoq5Ab1vH62tbUY8mgoz3Oe2EXou3uQHLnBHCrQbcBJ7mXsh96QKaG9Jf+Uzt/bhqmW SYKJueXtnrhO6kKnDn5tZYEjtySJEt8FF9VK+XFAMTGpCEUCUXuW4npglHuBPds8R+LC XKkePkgHZ0e2EIsnQWzlSy39iS+SXRAcQkouk2QsUd4bwlRpGbvunsD9HK0FR28UDoei AEyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=TSvrVqyL1Jx5FubyVmhg6f6i8aYPPkfIz/TD3nTqZyI=; b=hEA6Dx/O5Xj5beb/uBMA3PrdfmP39PV4PQlE1OjFEbRXmbU+GX3Q8tE/+Bl87AzgfG c50y7CupggbEF+bhIdNfkMhrZodHnziU9oQDQB1MO1QnE58Ubt36N7zYrFJ3zy6wp5tA jPIb1/Xi9vqiSx9f7+hHcitHJIQAh0qoY6oLFVYv21xtwzR9wScetfu6caxrRegLGzgq G49OVFjqCF4v7SjMW7eG/fSSJRKiQnxYzqG7UrmA+HI8Acva/kaa9jr+fhYl1iWJH11B tBekI/aZMMqkkoBzAuJJBoyTp3H61cNZe8ZUQKkR9q41FIIgBNY+kfhqpuk0Ug6mZvAt p/WA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=FVZ3Ph3d; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 109si8241026otv.36.2020.03.31.11.16.22; Tue, 31 Mar 2020 11:16:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=FVZ3Ph3d; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727607AbgCaSOc (ORCPT + 99 others); Tue, 31 Mar 2020 14:14:32 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:51379 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726208AbgCaSOc (ORCPT ); Tue, 31 Mar 2020 14:14:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1585678470; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TSvrVqyL1Jx5FubyVmhg6f6i8aYPPkfIz/TD3nTqZyI=; b=FVZ3Ph3du9/1mXQ4x5nSIQJAMai81j63BgNGwEPF6rJEgwzGUG5YcgueSUCrDiQAjDUPko fWMwZl1QWY2duRVE9ray2VwLdwfw7NBJ62pyqU7F+t18RfamsEs0JwVJbnHM1rZu9dcVpq 2bYQn4IwC05n5rTViTBxJbwQDCnbU0E= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-146-Evw0rzZ4NkW_V0hpiOSJ1A-1; Tue, 31 Mar 2020 14:14:28 -0400 X-MC-Unique: Evw0rzZ4NkW_V0hpiOSJ1A-1 Received: by mail-wr1-f70.google.com with SMTP id d1so13296183wru.15 for ; Tue, 31 Mar 2020 11:14:28 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=TSvrVqyL1Jx5FubyVmhg6f6i8aYPPkfIz/TD3nTqZyI=; b=XLt8VXyHkeprRFdWYNLmYVcokRyWd/xhYu7MYTUIRl9DpuBFMKa+ArvXmCz8vP82v8 3KVotyB0okma1c1PDrkgmCv/poxL43jqvDx3Lqcwb+w6fBL9ZFkRgLMCpypMv0HJqjZT h19DdacKlGELX/FTYg3N0PY4ukscvI83Q1MV+B81tLynu4bjoYHF+mArUc70Y/kNT8dV xdYTtHhgSU1nAnskqykXqDmPwWI7S6goZ7i9bDt5Y2QGXRPhSa8QADWXb4RUkMe2o9sD SwqaCHH29dwMKOUq0qxSZBiqFGWVvLsUwiVTFA8oEwbQuGvSuMrr56gC0qxWxNUpOQx7 fwkw== X-Gm-Message-State: AGi0Pubi2ACFgbdAosQTmDDdRplY33ZmO4eDfmNHo2oJDzgL2Vb+aSp5 f1r5a9LfTegm6lnf706BojdCD3/MfXVA77X2Oa6aY603Cv6dIg7tWSSYrm0Dt4ZIQEiMkUESHP5 hX4o3PvQbxCXhYi/poN65RVV+ X-Received: by 2002:a1c:e904:: with SMTP id q4mr133903wmc.84.1585678467306; Tue, 31 Mar 2020 11:14:27 -0700 (PDT) X-Received: by 2002:a1c:e904:: with SMTP id q4mr133880wmc.84.1585678467042; Tue, 31 Mar 2020 11:14:27 -0700 (PDT) Received: from redhat.com (bzq-79-176-51-222.red.bezeqint.net. [79.176.51.222]) by smtp.gmail.com with ESMTPSA id h81sm5180039wme.42.2020.03.31.11.14.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 31 Mar 2020 11:14:26 -0700 (PDT) Date: Tue, 31 Mar 2020 14:14:23 -0400 From: "Michael S. Tsirkin" To: Eugenio =?iso-8859-1?Q?P=E9rez?= Cc: "linux-kernel@vger.kernel.org" , kvm list , Halil Pasic , "virtualization@lists.linux-foundation.org" , Linux Next Mailing List , Cornelia Huck , Stephen Rothwell , Christian Borntraeger Subject: Re: [PATCH v2 1/8] vhost: Create accessors for virtqueues private_data Message-ID: <20200331141244-mutt-send-email-mst@kernel.org> References: <20200331180006.25829-1-eperezma@redhat.com> <20200331180006.25829-2-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20200331180006.25829-2-eperezma@redhat.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Mar 31, 2020 at 07:59:59PM +0200, Eugenio P?rez wrote: > Signed-off-by: Eugenio P?rez > --- > drivers/vhost/net.c | 28 +++++++++++++++------------- > drivers/vhost/vhost.h | 28 ++++++++++++++++++++++++++++ > drivers/vhost/vsock.c | 14 +++++++------- > 3 files changed, 50 insertions(+), 20 deletions(-) > > diff --git a/drivers/vhost/net.c b/drivers/vhost/net.c > index e158159671fa..6c5e7a6f712c 100644 > --- a/drivers/vhost/net.c > +++ b/drivers/vhost/net.c > @@ -424,7 +424,7 @@ static void vhost_net_disable_vq(struct vhost_net *n, > struct vhost_net_virtqueue *nvq = > container_of(vq, struct vhost_net_virtqueue, vq); > struct vhost_poll *poll = n->poll + (nvq - n->vqs); > - if (!vq->private_data) > + if (!vhost_vq_get_backend_opaque(vq)) > return; > vhost_poll_stop(poll); > } > @@ -437,7 +437,7 @@ static int vhost_net_enable_vq(struct vhost_net *n, > struct vhost_poll *poll = n->poll + (nvq - n->vqs); > struct socket *sock; > > - sock = vq->private_data; > + sock = vhost_vq_get_backend_opaque(vq); > if (!sock) > return 0; > > @@ -524,7 +524,7 @@ static void vhost_net_busy_poll(struct vhost_net *net, > return; > > vhost_disable_notify(&net->dev, vq); > - sock = rvq->private_data; > + sock = vhost_vq_get_backend_opaque(rvq); > > busyloop_timeout = poll_rx ? rvq->busyloop_timeout: > tvq->busyloop_timeout; > @@ -570,8 +570,10 @@ static int vhost_net_tx_get_vq_desc(struct vhost_net *net, > > if (r == tvq->num && tvq->busyloop_timeout) { > /* Flush batched packets first */ > - if (!vhost_sock_zcopy(tvq->private_data)) > - vhost_tx_batch(net, tnvq, tvq->private_data, msghdr); > + if (!vhost_sock_zcopy(vhost_vq_get_backend_opaque(tvq))) > + vhost_tx_batch(net, tnvq, > + vhost_vq_get_backend_opaque(tvq), > + msghdr); > > vhost_net_busy_poll(net, rvq, tvq, busyloop_intr, false); > > @@ -685,7 +687,7 @@ static int vhost_net_build_xdp(struct vhost_net_virtqueue *nvq, > struct vhost_virtqueue *vq = &nvq->vq; > struct vhost_net *net = container_of(vq->dev, struct vhost_net, > dev); > - struct socket *sock = vq->private_data; > + struct socket *sock = vhost_vq_get_backend_opaque(vq); > struct page_frag *alloc_frag = &net->page_frag; > struct virtio_net_hdr *gso; > struct xdp_buff *xdp = &nvq->xdp[nvq->batched_xdp]; > @@ -952,7 +954,7 @@ static void handle_tx(struct vhost_net *net) > struct socket *sock; > > mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_TX); > - sock = vq->private_data; > + sock = vhost_vq_get_backend_opaque(vq); > if (!sock) > goto out; > > @@ -1121,7 +1123,7 @@ static void handle_rx(struct vhost_net *net) > int recv_pkts = 0; > > mutex_lock_nested(&vq->mutex, VHOST_NET_VQ_RX); > - sock = vq->private_data; > + sock = vhost_vq_get_backend_opaque(vq); > if (!sock) > goto out; > > @@ -1344,9 +1346,9 @@ static struct socket *vhost_net_stop_vq(struct vhost_net *n, > container_of(vq, struct vhost_net_virtqueue, vq); > > mutex_lock(&vq->mutex); > - sock = vq->private_data; > + sock = vhost_vq_get_backend_opaque(vq); > vhost_net_disable_vq(n, vq); > - vq->private_data = NULL; > + vhost_vq_set_backend_opaque(vq, NULL); > vhost_net_buf_unproduce(nvq); > nvq->rx_ring = NULL; > mutex_unlock(&vq->mutex); > @@ -1528,7 +1530,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) > } > > /* start polling new socket */ > - oldsock = vq->private_data; > + oldsock = vhost_vq_get_backend_opaque(vq); > if (sock != oldsock) { > ubufs = vhost_net_ubuf_alloc(vq, > sock && vhost_sock_zcopy(sock)); > @@ -1538,7 +1540,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) > } > > vhost_net_disable_vq(n, vq); > - vq->private_data = sock; > + vhost_vq_set_backend_opaque(vq, sock); > vhost_net_buf_unproduce(nvq); > r = vhost_vq_init_access(vq); > if (r) > @@ -1575,7 +1577,7 @@ static long vhost_net_set_backend(struct vhost_net *n, unsigned index, int fd) > return 0; > > err_used: > - vq->private_data = oldsock; > + vhost_vq_set_backend_opaque(vq, oldsock); > vhost_net_enable_vq(n, vq); > if (ubufs) > vhost_net_ubuf_put_wait_and_free(ubufs); > diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h > index a123fd70847e..0808188f7e8f 100644 > --- a/drivers/vhost/vhost.h > +++ b/drivers/vhost/vhost.h > @@ -244,6 +244,34 @@ enum { > (1ULL << VIRTIO_F_VERSION_1) > }; > > +/** > + * vhost_vq_set_backend_opaque - Set backend opaque. > + * > + * @vq Virtqueue. > + * @private_data The private data. > + * > + * Context: Need to call with vq->mutex acquired. > + */ > +static inline void vhost_vq_set_backend_opaque(struct vhost_virtqueue *vq, > + void *private_data) > +{ > + vq->private_data = private_data; > +} > + > +/** > + * vhost_vq_get_backend_opaque - Get backend opaque. > + * > + * @vq Virtqueue. > + * @private_data The private data. > + * > + * Context: Need to call with vq->mutex acquired. > + * Return: Opaque previously set with vhost_vq_set_backend_opaque. > + */ > +static inline void *vhost_vq_get_backend_opaque(struct vhost_virtqueue *vq) > +{ > + return vq->private_data; > +} > + > static inline bool vhost_has_feature(struct vhost_virtqueue *vq, int bit) > { > return vq->acked_features & (1ULL << bit); I think I prefer vhost_vq_get_backend and vhost_vq_set_backend. "opaque" just means that it's void * that is clear from the signature anyway. > diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c > index c2d7d57e98cf..6e20dbe14acd 100644 > --- a/drivers/vhost/vsock.c > +++ b/drivers/vhost/vsock.c > @@ -91,7 +91,7 @@ vhost_transport_do_send_pkt(struct vhost_vsock *vsock, > > mutex_lock(&vq->mutex); > > - if (!vq->private_data) > + if (!vhost_vq_get_backend_opaque(vq)) > goto out; > > /* Avoid further vmexits, we're already processing the virtqueue */ > @@ -440,7 +440,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work) > > mutex_lock(&vq->mutex); > > - if (!vq->private_data) > + if (!vhost_vq_get_backend_opaque(vq)) > goto out; > > vhost_disable_notify(&vsock->dev, vq); > @@ -533,8 +533,8 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) > goto err_vq; > } > > - if (!vq->private_data) { > - vq->private_data = vsock; > + if (!vhost_vq_get_backend_opaque(vq)) { > + vhost_vq_set_backend_opaque(vq, vsock); > ret = vhost_vq_init_access(vq); > if (ret) > goto err_vq; > @@ -547,14 +547,14 @@ static int vhost_vsock_start(struct vhost_vsock *vsock) > return 0; > > err_vq: > - vq->private_data = NULL; > + vhost_vq_set_backend_opaque(vq, NULL); > mutex_unlock(&vq->mutex); > > for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) { > vq = &vsock->vqs[i]; > > mutex_lock(&vq->mutex); > - vq->private_data = NULL; > + vhost_vq_set_backend_opaque(vq, NULL); > mutex_unlock(&vq->mutex); > } > err: > @@ -577,7 +577,7 @@ static int vhost_vsock_stop(struct vhost_vsock *vsock) > struct vhost_virtqueue *vq = &vsock->vqs[i]; > > mutex_lock(&vq->mutex); > - vq->private_data = NULL; > + vhost_vq_set_backend_opaque(vq, NULL); > mutex_unlock(&vq->mutex); > } > > -- > 2.18.1