From nobody Wed Sep 17 22:19:00 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE0A9C4332F for ; Wed, 14 Dec 2022 16:32:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239149AbiLNQcv (ORCPT ); Wed, 14 Dec 2022 11:32:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239135AbiLNQcG (ORCPT ); Wed, 14 Dec 2022 11:32:06 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 35F0F15822 for ; Wed, 14 Dec 2022 08:31:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671035477; 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=1lGOBSIFe5pUAxEjRFkRz63QN+FtG9EzKvnfhz76nOw=; b=gyS/Qx853+tG0y4ovn67hBzzpO64kyq3nBrzKQUACMOe6ZnjkeKHPEGK8Ccv6Qhm33uXfE 2bCYy169o40L4NsytQeIpg4dWuLiCPDXbvsmSBq7IwA10zUgcl3cW/rnmB+8zZJPUpnc3H YfAm69GsIV9anrgt3gPAhy0oC9gYCn8= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-589-1Nx6bXeDMpObx7rj-DH6Bw-1; Wed, 14 Dec 2022 11:30:31 -0500 X-MC-Unique: 1Nx6bXeDMpObx7rj-DH6Bw-1 Received: by mail-wm1-f72.google.com with SMTP id h81-20020a1c2154000000b003d1c8e519fbso7427625wmh.2 for ; Wed, 14 Dec 2022 08:30:31 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1lGOBSIFe5pUAxEjRFkRz63QN+FtG9EzKvnfhz76nOw=; b=RokKwjW9b/kM/OFzUzGQtn1NxNz9OSBzdy4Izk/JS/WreBoHAXqKEa5ff3Hh28++fO r2YacpO8EqbAV1HDJ/6xDrNwlT2N33QUjJVWCCN0T27JZThpuLAopcueePKvxrtbEie4 vyshU2kesCr8rbrgj8lHoF4IVGbDye9lWzSy6y+zyTTfEJMvO1oQBp4GlWfxUSBD/cyi uP95LFHJZIHn7s20v1rkNmh3nypMf8H3P3GdhqXLccE2UHE/7iS8CYYAX/ESYTCwKHti 6JqkGAoGFgXCyT6WNSjbHpK5ypYkoq1qF1vz1RJS/K91pFloICQVHnhNukPsseogH+pp RcuQ== X-Gm-Message-State: AFqh2kosOInhESHrbDgulDXsLP6YAfRoeCZrQJ1HWgMWNwUAqlZTL+7S C7Shy1uLLuBFq3MzdBQB9XthQy6g6oh43/IgbInmtyb0fenytlTHgtVioAQLiePcSCVNEazLUdb psQZERKW8gVwATWqy13KMD/hh X-Received: by 2002:a5d:6b82:0:b0:254:e300:df10 with SMTP id n2-20020a5d6b82000000b00254e300df10mr3175569wrx.0.1671035430299; Wed, 14 Dec 2022 08:30:30 -0800 (PST) X-Google-Smtp-Source: AMrXdXtON+i2KOCKckOC+y5p1sstetwPc0ECbYZbXcpC/pxYXEHqSVOOlJPZuP9yMFAhSEmoSjaS2Q== X-Received: by 2002:a5d:6b82:0:b0:254:e300:df10 with SMTP id n2-20020a5d6b82000000b00254e300df10mr3175558wrx.0.1671035430129; Wed, 14 Dec 2022 08:30:30 -0800 (PST) Received: from step1.redhat.com (host-87-11-6-51.retail.telecomitalia.it. [87.11.6.51]) by smtp.gmail.com with ESMTPSA id e17-20020adffd11000000b002422816aa25sm3791759wrr.108.2022.12.14.08.30.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 08:30:29 -0800 (PST) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Jason Wang , Andrey Zhadchenko , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Michael S. Tsirkin" , eperezma@redhat.com, stefanha@redhat.com, netdev@vger.kernel.org, Stefano Garzarella Subject: [RFC PATCH 1/6] vdpa: add bind_mm callback Date: Wed, 14 Dec 2022 17:30:20 +0100 Message-Id: <20221214163025.103075-2-sgarzare@redhat.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221214163025.103075-1-sgarzare@redhat.com> References: <20221214163025.103075-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This new optional callback is used to bind the device to a specific address space so the vDPA framework can use VA when this callback is implemented. Suggested-by: Jason Wang Signed-off-by: Stefano Garzarella --- include/linux/vdpa.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h index 6d0f5e4e82c2..34388e21ef3f 100644 --- a/include/linux/vdpa.h +++ b/include/linux/vdpa.h @@ -282,6 +282,12 @@ struct vdpa_map_file { * @iova: iova to be unmapped * @size: size of the area * Returns integer: success (0) or error (< 0) + * @bind_mm: Bind the device to a specific address space + * so the vDPA framework can use VA when this + * callback is implemented. (optional) + * @vdev: vdpa device + * @mm: address space to bind + * @owner: process that owns the address space * @free: Free resources that belongs to vDPA (optional) * @vdev: vdpa device */ @@ -341,6 +347,8 @@ struct vdpa_config_ops { u64 iova, u64 size); int (*set_group_asid)(struct vdpa_device *vdev, unsigned int group, unsigned int asid); + int (*bind_mm)(struct vdpa_device *vdev, struct mm_struct *mm, + struct task_struct *owner); =20 /* Free device resources */ void (*free)(struct vdpa_device *vdev); --=20 2.38.1 From nobody Wed Sep 17 22:19:00 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7BCE7C001B2 for ; Wed, 14 Dec 2022 16:31:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239020AbiLNQb3 (ORCPT ); Wed, 14 Dec 2022 11:31:29 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48796 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238993AbiLNQbV (ORCPT ); Wed, 14 Dec 2022 11:31:21 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1DA3D113C for ; Wed, 14 Dec 2022 08:30:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671035438; 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=ntjy4bIssvEAdzLttb0Oirdk6ECvBiYBnXEucLTwyX4=; b=Qbgp1/VVy3Mx7jzfThfQ5F71naalQjDuO4OQrMr1/6ynoyJrYSR7E8Ybo9/lHJxFFNfPqh 314C7koTYRd+8WoUf9EgpPeE8MF7Y9smb6tSS415g4FPkgYoo3n6woqdr4okRpCv3hQCEp 4YM6XsU93eb01eyD2gGdgep3GPQPdCE= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-48-ha83elm3PGec7Jkojlbzcw-1; Wed, 14 Dec 2022 11:30:33 -0500 X-MC-Unique: ha83elm3PGec7Jkojlbzcw-1 Received: by mail-wm1-f70.google.com with SMTP id m38-20020a05600c3b2600b003d1fc5f1f80so7439899wms.1 for ; Wed, 14 Dec 2022 08:30:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ntjy4bIssvEAdzLttb0Oirdk6ECvBiYBnXEucLTwyX4=; b=cCKG4Kxz59XXq9h64uTs61JTnfnt47vfYh9lGGlUEH7Dbr4XgCgG/uV4IGuhFwf/66 v6ULay4HdBnQO9BX0CPiNhqxlm81p/838/sI32fF6j6N5QIHLS2//Eei9zdd5lmthjsg dGowpO2E7I8dcttFdLpPazYFo5nLGboxjOu33KKrU7kLTXG6SsjFXbXm/Kmg6VQQPgVA FHpLlUqjalY6UvLR7qByFFUF1/S83dhnc/CAGOCtT7iLwo54yrsyjEK8asa9nkvtIOev YuGMx+NSJdG02lXbAOFvQw8o6u0x8fnw2S5JA14hRRs7ilkFS8GUvZRkwVH0YT/ZCEy5 eFoQ== X-Gm-Message-State: ANoB5pm6lgMHDodXzddzTzxp66pkFPO1LpdHNm412vVYUXf4lKFz/Up5 TovteVbAvS4BoWdQ+csMzgaM3cAgLhbO/ZcpQq6fOJALpXhNDKA/Up4yaSN6lgJjprEgBcxlKVt zrsLDRIIUcn47pBp6CQSa3Obp X-Received: by 2002:a5d:43c8:0:b0:242:659f:9411 with SMTP id v8-20020a5d43c8000000b00242659f9411mr18656563wrr.9.1671035432137; Wed, 14 Dec 2022 08:30:32 -0800 (PST) X-Google-Smtp-Source: AA0mqf749Y7E+BT4q6kPhJknMxXoEgk8H6qeSlLUTLbG1hIMjBAx7MTauP5T5GnuPa8o2ZC6K5qBtA== X-Received: by 2002:a5d:43c8:0:b0:242:659f:9411 with SMTP id v8-20020a5d43c8000000b00242659f9411mr18656541wrr.9.1671035431915; Wed, 14 Dec 2022 08:30:31 -0800 (PST) Received: from step1.redhat.com (host-87-11-6-51.retail.telecomitalia.it. [87.11.6.51]) by smtp.gmail.com with ESMTPSA id e17-20020adffd11000000b002422816aa25sm3791759wrr.108.2022.12.14.08.30.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 08:30:31 -0800 (PST) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Jason Wang , Andrey Zhadchenko , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Michael S. Tsirkin" , eperezma@redhat.com, stefanha@redhat.com, netdev@vger.kernel.org, Stefano Garzarella Subject: [RFC PATCH 2/6] vhost-vdpa: use bind_mm device callback Date: Wed, 14 Dec 2022 17:30:21 +0100 Message-Id: <20221214163025.103075-3-sgarzare@redhat.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221214163025.103075-1-sgarzare@redhat.com> References: <20221214163025.103075-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When the user call VHOST_SET_OWNER ioctl and the vDPA device has `use_va` set to true, let's call the bind_mm callback. In this way we can bind the device to the user address space and directly use the user VA. Signed-off-by: Stefano Garzarella --- drivers/vhost/vdpa.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/drivers/vhost/vdpa.c b/drivers/vhost/vdpa.c index b08e07fc7d1f..a775d1a52c77 100644 --- a/drivers/vhost/vdpa.c +++ b/drivers/vhost/vdpa.c @@ -219,6 +219,17 @@ static int vhost_vdpa_reset(struct vhost_vdpa *v) return vdpa_reset(vdpa); } =20 +static long vhost_vdpa_bind_mm(struct vhost_vdpa *v) +{ + struct vdpa_device *vdpa =3D v->vdpa; + const struct vdpa_config_ops *ops =3D vdpa->config; + + if (!vdpa->use_va || !ops->bind_mm) + return 0; + + return ops->bind_mm(vdpa, v->vdev.mm, current); +} + static long vhost_vdpa_get_device_id(struct vhost_vdpa *v, u8 __user *argp) { struct vdpa_device *vdpa =3D v->vdpa; @@ -276,6 +287,10 @@ static long vhost_vdpa_set_status(struct vhost_vdpa *v= , u8 __user *statusp) ret =3D vdpa_reset(vdpa); if (ret) return ret; + + ret =3D vhost_vdpa_bind_mm(v); + if (ret) + return ret; } else vdpa_set_status(vdpa, status); =20 @@ -679,6 +694,13 @@ static long vhost_vdpa_unlocked_ioctl(struct file *fil= ep, break; default: r =3D vhost_dev_ioctl(&v->vdev, cmd, argp); + if (!r && cmd =3D=3D VHOST_SET_OWNER) { + r =3D vhost_vdpa_bind_mm(v); + if (r) { + vhost_dev_reset_owner(&v->vdev, NULL); + break; + } + } if (r =3D=3D -ENOIOCTLCMD) r =3D vhost_vdpa_vring_ioctl(v, cmd, argp); break; --=20 2.38.1 From nobody Wed Sep 17 22:19:00 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2A353C4167B for ; Wed, 14 Dec 2022 16:31:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239030AbiLNQbc (ORCPT ); Wed, 14 Dec 2022 11:31:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48838 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239015AbiLNQb3 (ORCPT ); Wed, 14 Dec 2022 11:31:29 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3ECBC21A9 for ; Wed, 14 Dec 2022 08:30:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671035443; 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=uDSLhjChOzyvO7sWXszZbPlZnPPU1GukY9F9aZWrZdA=; b=QA+iVwGhmwQXNa8z5zC3ov5UhNyMMVaHq8RhbjR1zkLUzQ0QxljYc5VucIgGZaXXF64j72 guA9BoW3QhtLJzJQOa9zdPy+Bq+BMtbDbrMK7W1AHIWEPDEg7RCKlbV/Fpn1EcJpA+8X69 6QtjD26E++Cb+3dBVx4PjL62CMBKguE= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-85-0t8rficaMvuOHA_MwDSb8g-1; Wed, 14 Dec 2022 11:30:36 -0500 X-MC-Unique: 0t8rficaMvuOHA_MwDSb8g-1 Received: by mail-wm1-f70.google.com with SMTP id c126-20020a1c3584000000b003cfffcf7c1aso7440637wma.0 for ; Wed, 14 Dec 2022 08:30:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uDSLhjChOzyvO7sWXszZbPlZnPPU1GukY9F9aZWrZdA=; b=GOFR1wHsAz+JdBuDg6CiSG2gBlMEE4zB3n4Q0lHaYliqlKoRE+i5q7mV5/qjigT0II LAKratUnpFk3Je9q7r6H2ckorbz3l4On+A6R4L/Akg5/IFu+WYp5pe7iBP/+dewJRgKT 6I4RH1bUZr3reTe/BC7f86v9w+sdtX8Hrfw2ub9lqx0UuLajq4bkk3Vv8NYu81DhFwkm G9NNmffAgTCSKtJtpzwNskBypB+Cpb0PCfCFXo/2F49ctPpVw3UVvSKF3uFl1QwTmQLx xCvHUI7Y43I/LB9+xlYxcN7GONUd/ItJros045omukkzOI2nrIfUh6MbP5vF31fbdodn qe0Q== X-Gm-Message-State: ANoB5pkMAN4eIKqPQy23++y0LExBba6j0BhHIvgl/cocDGyYQRs3L6M8 gZT++2U7l1ftJXZjpOGx3lgoHD4Q5rvt4lvHWMEgcXJC3aWvlPpir9JvOFv+5GeQPjMQO/w7O7e f/UkbJbQnxX4cj3zxGHBlSBK5 X-Received: by 2002:a5d:55c4:0:b0:242:19d6:da77 with SMTP id i4-20020a5d55c4000000b0024219d6da77mr15384059wrw.15.1671035434141; Wed, 14 Dec 2022 08:30:34 -0800 (PST) X-Google-Smtp-Source: AA0mqf64FO5UwTyJyWczFAW3XAofyHe4ZMJGRxWj6B/ZMPYSJWN7NbuJdbyQLq95i6Mag0G2kucxQQ== X-Received: by 2002:a5d:55c4:0:b0:242:19d6:da77 with SMTP id i4-20020a5d55c4000000b0024219d6da77mr15384042wrw.15.1671035433873; Wed, 14 Dec 2022 08:30:33 -0800 (PST) Received: from step1.redhat.com (host-87-11-6-51.retail.telecomitalia.it. [87.11.6.51]) by smtp.gmail.com with ESMTPSA id e17-20020adffd11000000b002422816aa25sm3791759wrr.108.2022.12.14.08.30.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 08:30:33 -0800 (PST) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Jason Wang , Andrey Zhadchenko , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Michael S. Tsirkin" , eperezma@redhat.com, stefanha@redhat.com, netdev@vger.kernel.org, Stefano Garzarella Subject: [RFC PATCH 3/6] vringh: support VA with iotlb Date: Wed, 14 Dec 2022 17:30:22 +0100 Message-Id: <20221214163025.103075-4-sgarzare@redhat.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221214163025.103075-1-sgarzare@redhat.com> References: <20221214163025.103075-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" vDPA supports the possibility to use user VA in the iotlb messages. So, let's add support for user VA in vringh to use it in the vDPA simulators. Signed-off-by: Stefano Garzarella --- include/linux/vringh.h | 5 +- drivers/vdpa/mlx5/core/resources.c | 3 +- drivers/vdpa/mlx5/net/mlx5_vnet.c | 2 +- drivers/vdpa/vdpa_sim/vdpa_sim.c | 4 +- drivers/vhost/vringh.c | 250 +++++++++++++++++++++++------ 5 files changed, 207 insertions(+), 57 deletions(-) diff --git a/include/linux/vringh.h b/include/linux/vringh.h index 212892cf9822..c70962f16b1f 100644 --- a/include/linux/vringh.h +++ b/include/linux/vringh.h @@ -32,6 +32,9 @@ struct vringh { /* Can we get away with weak barriers? */ bool weak_barriers; =20 + /* Use user's VA */ + bool use_va; + /* Last available index we saw (ie. where we're up to). */ u16 last_avail_idx; =20 @@ -279,7 +282,7 @@ void vringh_set_iotlb(struct vringh *vrh, struct vhost_= iotlb *iotlb, spinlock_t *iotlb_lock); =20 int vringh_init_iotlb(struct vringh *vrh, u64 features, - unsigned int num, bool weak_barriers, + unsigned int num, bool weak_barriers, bool use_va, struct vring_desc *desc, struct vring_avail *avail, struct vring_used *used); diff --git a/drivers/vdpa/mlx5/core/resources.c b/drivers/vdpa/mlx5/core/re= sources.c index 9800f9bec225..e0bab3458b40 100644 --- a/drivers/vdpa/mlx5/core/resources.c +++ b/drivers/vdpa/mlx5/core/resources.c @@ -233,7 +233,8 @@ static int init_ctrl_vq(struct mlx5_vdpa_dev *mvdev) if (!mvdev->cvq.iotlb) return -ENOMEM; =20 - vringh_set_iotlb(&mvdev->cvq.vring, mvdev->cvq.iotlb, &mvdev->cvq.iommu_l= ock); + vringh_set_iotlb(&mvdev->cvq.vring, mvdev->cvq.iotlb, + &mvdev->cvq.iommu_lock); =20 return 0; } diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5= _vnet.c index 90913365def4..81ba0867e2c8 100644 --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c @@ -2504,7 +2504,7 @@ static int setup_cvq_vring(struct mlx5_vdpa_dev *mvde= v) =20 if (mvdev->actual_features & BIT_ULL(VIRTIO_NET_F_CTRL_VQ)) err =3D vringh_init_iotlb(&cvq->vring, mvdev->actual_features, - MLX5_CVQ_MAX_ENT, false, + MLX5_CVQ_MAX_ENT, false, false, (struct vring_desc *)(uintptr_t)cvq->desc_addr, (struct vring_avail *)(uintptr_t)cvq->driver_addr, (struct vring_used *)(uintptr_t)cvq->device_addr); diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_= sim.c index b20689f8fe89..2e0ee7280aa8 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -67,7 +67,7 @@ static void vdpasim_queue_ready(struct vdpasim *vdpasim, = unsigned int idx) { struct vdpasim_virtqueue *vq =3D &vdpasim->vqs[idx]; =20 - vringh_init_iotlb(&vq->vring, vdpasim->features, vq->num, false, + vringh_init_iotlb(&vq->vring, vdpasim->features, vq->num, false, false, (struct vring_desc *)(uintptr_t)vq->desc_addr, (struct vring_avail *) (uintptr_t)vq->driver_addr, @@ -87,7 +87,7 @@ static void vdpasim_vq_reset(struct vdpasim *vdpasim, vq->cb =3D NULL; vq->private =3D NULL; vringh_init_iotlb(&vq->vring, vdpasim->dev_attr.supported_features, - VDPASIM_QUEUE_MAX, false, NULL, NULL, NULL); + VDPASIM_QUEUE_MAX, false, false, NULL, NULL, NULL); =20 vq->vring.notify =3D NULL; } diff --git a/drivers/vhost/vringh.c b/drivers/vhost/vringh.c index 11f59dd06a74..c1f77dc93482 100644 --- a/drivers/vhost/vringh.c +++ b/drivers/vhost/vringh.c @@ -1094,15 +1094,99 @@ EXPORT_SYMBOL(vringh_need_notify_kern); =20 #if IS_REACHABLE(CONFIG_VHOST_IOTLB) =20 -static int iotlb_translate(const struct vringh *vrh, - u64 addr, u64 len, u64 *translated, - struct bio_vec iov[], - int iov_size, u32 perm) +static int iotlb_translate_va(const struct vringh *vrh, + u64 addr, u64 len, u64 *translated, + struct iovec iov[], + int iov_size, u32 perm) { struct vhost_iotlb_map *map; struct vhost_iotlb *iotlb =3D vrh->iotlb; + u64 s =3D 0, last =3D addr + len - 1; + int ret =3D 0; + + spin_lock(vrh->iotlb_lock); + + while (len > s) { + u64 size; + + if (unlikely(ret >=3D iov_size)) { + ret =3D -ENOBUFS; + break; + } + + map =3D vhost_iotlb_itree_first(iotlb, addr, last); + if (!map || map->start > addr) { + ret =3D -EINVAL; + break; + } else if (!(map->perm & perm)) { + ret =3D -EPERM; + break; + } + + size =3D map->size - addr + map->start; + iov[ret].iov_len =3D min(len - s, size); + iov[ret].iov_base =3D (void __user *)(unsigned long) + (map->addr + addr - map->start); + s +=3D size; + addr +=3D size; + ++ret; + } + + spin_unlock(vrh->iotlb_lock); + + if (translated) + *translated =3D min(len, s); + + return ret; +} + +static inline int copy_from_va(const struct vringh *vrh, void *dst, void *= src, + u64 len, u64 *translated) +{ + struct iovec iov[16]; + struct iov_iter iter; + int ret; + + ret =3D iotlb_translate_va(vrh, (u64)(uintptr_t)src, len, translated, iov, + ARRAY_SIZE(iov), VHOST_MAP_RO); + if (ret =3D=3D -ENOBUFS) + ret =3D ARRAY_SIZE(iov); + else if (ret < 0) + return ret; + + iov_iter_init(&iter, READ, iov, ret, *translated); + + return copy_from_iter(dst, *translated, &iter); +} + +static inline int copy_to_va(const struct vringh *vrh, void *dst, void *sr= c, + u64 len, u64 *translated) +{ + struct iovec iov[16]; + struct iov_iter iter; + int ret; + + ret =3D iotlb_translate_va(vrh, (u64)(uintptr_t)dst, len, translated, iov, + ARRAY_SIZE(iov), VHOST_MAP_WO); + if (ret =3D=3D -ENOBUFS) + ret =3D ARRAY_SIZE(iov); + else if (ret < 0) + return ret; + + iov_iter_init(&iter, WRITE, iov, ret, *translated); + + return copy_to_iter(src, *translated, &iter); +} + +static int iotlb_translate_pa(const struct vringh *vrh, + u64 addr, u64 len, u64 *translated, + struct bio_vec iov[], + int iov_size, u32 perm) +{ + struct vhost_iotlb_map *map; + struct vhost_iotlb *iotlb =3D vrh->iotlb; + u64 s =3D 0, last =3D addr + len - 1; int ret =3D 0; - u64 s =3D 0; =20 spin_lock(vrh->iotlb_lock); =20 @@ -1114,8 +1198,7 @@ static int iotlb_translate(const struct vringh *vrh, break; } =20 - map =3D vhost_iotlb_itree_first(iotlb, addr, - addr + len - 1); + map =3D vhost_iotlb_itree_first(iotlb, addr, last); if (!map || map->start > addr) { ret =3D -EINVAL; break; @@ -1143,28 +1226,61 @@ static int iotlb_translate(const struct vringh *vrh, return ret; } =20 +static inline int copy_from_pa(const struct vringh *vrh, void *dst, void *= src, + u64 len, u64 *translated) +{ + struct bio_vec iov[16]; + struct iov_iter iter; + int ret; + + ret =3D iotlb_translate_pa(vrh, (u64)(uintptr_t)src, len, translated, iov, + ARRAY_SIZE(iov), VHOST_MAP_RO); + if (ret =3D=3D -ENOBUFS) + ret =3D ARRAY_SIZE(iov); + else if (ret < 0) + return ret; + + iov_iter_bvec(&iter, READ, iov, ret, *translated); + + return copy_from_iter(dst, *translated, &iter); +} + +static inline int copy_to_pa(const struct vringh *vrh, void *dst, void *sr= c, + u64 len, u64 *translated) +{ + struct bio_vec iov[16]; + struct iov_iter iter; + int ret; + + ret =3D iotlb_translate_pa(vrh, (u64)(uintptr_t)dst, len, translated, iov, + ARRAY_SIZE(iov), VHOST_MAP_WO); + if (ret =3D=3D -ENOBUFS) + ret =3D ARRAY_SIZE(iov); + else if (ret < 0) + return ret; + + iov_iter_bvec(&iter, WRITE, iov, ret, *translated); + + return copy_to_iter(src, *translated, &iter); +} + static inline int copy_from_iotlb(const struct vringh *vrh, void *dst, void *src, size_t len) { u64 total_translated =3D 0; =20 while (total_translated < len) { - struct bio_vec iov[16]; - struct iov_iter iter; u64 translated; int ret; =20 - ret =3D iotlb_translate(vrh, (u64)(uintptr_t)src, - len - total_translated, &translated, - iov, ARRAY_SIZE(iov), VHOST_MAP_RO); - if (ret =3D=3D -ENOBUFS) - ret =3D ARRAY_SIZE(iov); - else if (ret < 0) - return ret; - - iov_iter_bvec(&iter, READ, iov, ret, translated); + if (vrh->use_va) { + ret =3D copy_from_va(vrh, dst, src, + len - total_translated, &translated); + } else { + ret =3D copy_from_pa(vrh, dst, src, + len - total_translated, &translated); + } =20 - ret =3D copy_from_iter(dst, translated, &iter); if (ret < 0) return ret; =20 @@ -1182,22 +1298,17 @@ static inline int copy_to_iotlb(const struct vringh= *vrh, void *dst, u64 total_translated =3D 0; =20 while (total_translated < len) { - struct bio_vec iov[16]; - struct iov_iter iter; u64 translated; int ret; =20 - ret =3D iotlb_translate(vrh, (u64)(uintptr_t)dst, - len - total_translated, &translated, - iov, ARRAY_SIZE(iov), VHOST_MAP_WO); - if (ret =3D=3D -ENOBUFS) - ret =3D ARRAY_SIZE(iov); - else if (ret < 0) - return ret; - - iov_iter_bvec(&iter, WRITE, iov, ret, translated); + if (vrh->use_va) { + ret =3D copy_to_va(vrh, dst, src, + len - total_translated, &translated); + } else { + ret =3D copy_to_pa(vrh, dst, src, + len - total_translated, &translated); + } =20 - ret =3D copy_to_iter(src, translated, &iter); if (ret < 0) return ret; =20 @@ -1212,20 +1323,36 @@ static inline int copy_to_iotlb(const struct vringh= *vrh, void *dst, static inline int getu16_iotlb(const struct vringh *vrh, u16 *val, const __virtio16 *p) { - struct bio_vec iov; - void *kaddr, *from; int ret; =20 /* Atomic read is needed for getu16 */ - ret =3D iotlb_translate(vrh, (u64)(uintptr_t)p, sizeof(*p), NULL, - &iov, 1, VHOST_MAP_RO); - if (ret < 0) - return ret; + if (vrh->use_va) { + struct iovec iov; + + ret =3D iotlb_translate_va(vrh, (u64)(uintptr_t)p, sizeof(*p), + NULL, &iov, 1, VHOST_MAP_RO); + if (ret < 0) + return ret; =20 - kaddr =3D kmap_atomic(iov.bv_page); - from =3D kaddr + iov.bv_offset; - *val =3D vringh16_to_cpu(vrh, READ_ONCE(*(__virtio16 *)from)); - kunmap_atomic(kaddr); + ret =3D __get_user(*val, (__virtio16 *)iov.iov_base); + if (ret) + return ret; + + *val =3D vringh16_to_cpu(vrh, *val); + } else { + struct bio_vec iov; + void *kaddr, *from; + + ret =3D iotlb_translate_pa(vrh, (u64)(uintptr_t)p, sizeof(*p), + NULL, &iov, 1, VHOST_MAP_RO); + if (ret < 0) + return ret; + + kaddr =3D kmap_atomic(iov.bv_page); + from =3D kaddr + iov.bv_offset; + *val =3D vringh16_to_cpu(vrh, READ_ONCE(*(__virtio16 *)from)); + kunmap_atomic(kaddr); + } =20 return 0; } @@ -1233,20 +1360,36 @@ static inline int getu16_iotlb(const struct vringh = *vrh, static inline int putu16_iotlb(const struct vringh *vrh, __virtio16 *p, u16 val) { - struct bio_vec iov; - void *kaddr, *to; int ret; =20 /* Atomic write is needed for putu16 */ - ret =3D iotlb_translate(vrh, (u64)(uintptr_t)p, sizeof(*p), NULL, - &iov, 1, VHOST_MAP_WO); - if (ret < 0) - return ret; + if (vrh->use_va) { + struct iovec iov; =20 - kaddr =3D kmap_atomic(iov.bv_page); - to =3D kaddr + iov.bv_offset; - WRITE_ONCE(*(__virtio16 *)to, cpu_to_vringh16(vrh, val)); - kunmap_atomic(kaddr); + ret =3D iotlb_translate_va(vrh, (u64)(uintptr_t)p, sizeof(*p), + NULL, &iov, 1, VHOST_MAP_RO); + if (ret < 0) + return ret; + + val =3D cpu_to_vringh16(vrh, val); + + ret =3D __put_user(val, (__virtio16 *)iov.iov_base); + if (ret) + return ret; + } else { + struct bio_vec iov; + void *kaddr, *to; + + ret =3D iotlb_translate_pa(vrh, (u64)(uintptr_t)p, sizeof(*p), NULL, + &iov, 1, VHOST_MAP_WO); + if (ret < 0) + return ret; + + kaddr =3D kmap_atomic(iov.bv_page); + to =3D kaddr + iov.bv_offset; + WRITE_ONCE(*(__virtio16 *)to, cpu_to_vringh16(vrh, val)); + kunmap_atomic(kaddr); + } =20 return 0; } @@ -1308,6 +1451,7 @@ static inline int putused_iotlb(const struct vringh *= vrh, * @features: the feature bits for this ring. * @num: the number of elements. * @weak_barriers: true if we only need memory barriers, not I/O. + * @use_va: true if IOTLB contains user VA * @desc: the userpace descriptor pointer. * @avail: the userpace avail pointer. * @used: the userpace used pointer. @@ -1315,11 +1459,13 @@ static inline int putused_iotlb(const struct vringh= *vrh, * Returns an error if num is invalid. */ int vringh_init_iotlb(struct vringh *vrh, u64 features, - unsigned int num, bool weak_barriers, + unsigned int num, bool weak_barriers, bool use_va, struct vring_desc *desc, struct vring_avail *avail, struct vring_used *used) { + vrh->use_va =3D use_va; + return vringh_init_kern(vrh, features, num, weak_barriers, desc, avail, used); } --=20 2.38.1 From nobody Wed Sep 17 22:19:00 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2C62CC001B2 for ; Wed, 14 Dec 2022 16:32:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239055AbiLNQcO (ORCPT ); Wed, 14 Dec 2022 11:32:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239059AbiLNQbs (ORCPT ); Wed, 14 Dec 2022 11:31:48 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E29A22B2 for ; Wed, 14 Dec 2022 08:31:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671035461; 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=M+wOP66zSvRhQYDjszQYz+C5vn4h5BGATu0cy0bUORc=; b=TBApN3X70e48JNCw5FWm6xr4iHVTKQAuAKzczQUTPCtN1lJwfkrSpFRsND3gDMl/23Yxc3 yaVx0TqoVbTY1ZuUkQj087OQjBYUjmc6sVgooRbDmewT/QEkgImKz809j9/CvSfwamfK0l EFYPgBMskvBun1YwMrMh0bcIarPTHek= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-578-xmVIbZK0OWSR7wOPzjGyNA-1; Wed, 14 Dec 2022 11:30:57 -0500 X-MC-Unique: xmVIbZK0OWSR7wOPzjGyNA-1 Received: by mail-wm1-f69.google.com with SMTP id m38-20020a05600c3b2600b003d1fc5f1f80so7440530wms.1 for ; Wed, 14 Dec 2022 08:30:57 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M+wOP66zSvRhQYDjszQYz+C5vn4h5BGATu0cy0bUORc=; b=LlGzEnlniH9Qd0OX6D8iG28QMMJ1r1BCkC6N3ZegBMlkrOBnEYh68ZosnYlCpMEW13 0eSdpkGTlRi7utFH9WMfw4H01hIeK/8R21cFrCJe/l/Yuc8iyd2iyabVyIAyH9xaEaEP nT5sL1pjBGM7IdHhTsn579kY4qdTdVmVSFw6UDSGiM2+5byd/BU1oKBQI7LDGG4d4uOa XsvuDrHwTPdR04BCB6TjjyT6GZljsUAwF0DFemCL5krSYkQtc8i8ZFDuHJVJH40DTfK3 y4KzkA5/CtBumYUdVzF7QVZ17nNqG6whcRCn7KfaPLd+AaQS886McQFWtsCVMsXb9Y5m vx0A== X-Gm-Message-State: ANoB5pl9ycmvrm3yc5yYZamW8OuA+pAzzbarWcTxc3aMY41PAxUXn+gW R3nmKv5DLC5HFavFuXg+I6OEmWf0dT5Yz6Lsk0/ggpEhUfxLCeC9vNjxRNEQUlXfXoFesqwjDjv 77haWZPNRbbpkWcsfho/KPg1S X-Received: by 2002:a05:600c:3c95:b0:3d0:4af1:a36e with SMTP id bg21-20020a05600c3c9500b003d04af1a36emr19162741wmb.26.1671035456704; Wed, 14 Dec 2022 08:30:56 -0800 (PST) X-Google-Smtp-Source: AA0mqf60WGqYgsSKb75OsCZF9FEfxsX89v9hIf3pvnwfZ9ScHyDYE49t9+hNy2gQ3Yhy/2cfcsbUgg== X-Received: by 2002:a05:600c:3c95:b0:3d0:4af1:a36e with SMTP id bg21-20020a05600c3c9500b003d04af1a36emr19162723wmb.26.1671035456529; Wed, 14 Dec 2022 08:30:56 -0800 (PST) Received: from step1.redhat.com (host-87-11-6-51.retail.telecomitalia.it. [87.11.6.51]) by smtp.gmail.com with ESMTPSA id c6-20020a05600c0a4600b003d1e3b1624dsm3850323wmq.2.2022.12.14.08.30.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 08:30:55 -0800 (PST) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Jason Wang , Andrey Zhadchenko , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Michael S. Tsirkin" , eperezma@redhat.com, stefanha@redhat.com, netdev@vger.kernel.org, Stefano Garzarella Subject: [RFC PATCH 4/6] vdpa_sim: make devices agnostic for work management Date: Wed, 14 Dec 2022 17:30:23 +0100 Message-Id: <20221214163025.103075-5-sgarzare@redhat.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221214163025.103075-1-sgarzare@redhat.com> References: <20221214163025.103075-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Let's move work management inside the vdpa_sim core. This way we can easily change how we manage the works, without having to change the devices each time. Signed-off-by: Stefano Garzarella --- drivers/vdpa/vdpa_sim/vdpa_sim.h | 3 ++- drivers/vdpa/vdpa_sim/vdpa_sim.c | 17 +++++++++++++++-- drivers/vdpa/vdpa_sim/vdpa_sim_blk.c | 6 ++---- drivers/vdpa/vdpa_sim/vdpa_sim_net.c | 6 ++---- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_= sim.h index 0e78737dcc16..7e6dd366856f 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.h +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h @@ -44,7 +44,7 @@ struct vdpasim_dev_attr { u32 ngroups; u32 nas; =20 - work_func_t work_fn; + void (*work_fn)(struct vdpasim *vdpasim); void (*get_config)(struct vdpasim *vdpasim, void *config); void (*set_config)(struct vdpasim *vdpasim, const void *config); }; @@ -73,6 +73,7 @@ struct vdpasim { =20 struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *attr, const struct vdpa_dev_set_config *config); +void vdpasim_schedule_work(struct vdpasim *vdpasim); =20 /* TODO: cross-endian support */ static inline bool vdpasim_is_little_endian(struct vdpasim *vdpasim) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_= sim.c index 2e0ee7280aa8..9bde33e38e27 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -245,6 +245,13 @@ static const struct dma_map_ops vdpasim_dma_ops =3D { static const struct vdpa_config_ops vdpasim_config_ops; static const struct vdpa_config_ops vdpasim_batch_config_ops; =20 +static void vdpasim_work_fn(struct work_struct *work) +{ + struct vdpasim *vdpasim =3D container_of(work, struct vdpasim, work); + + vdpasim->dev_attr.work_fn(vdpasim); +} + struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr, const struct vdpa_dev_set_config *config) { @@ -275,7 +282,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr = *dev_attr, } =20 vdpasim->dev_attr =3D *dev_attr; - INIT_WORK(&vdpasim->work, dev_attr->work_fn); + INIT_WORK(&vdpasim->work, vdpasim_work_fn); spin_lock_init(&vdpasim->lock); spin_lock_init(&vdpasim->iommu_lock); =20 @@ -329,6 +336,12 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr= *dev_attr, } EXPORT_SYMBOL_GPL(vdpasim_create); =20 +void vdpasim_schedule_work(struct vdpasim *vdpasim) +{ + schedule_work(&vdpasim->work); +} +EXPORT_SYMBOL_GPL(vdpasim_schedule_work); + static int vdpasim_set_vq_address(struct vdpa_device *vdpa, u16 idx, u64 desc_area, u64 driver_area, u64 device_area) @@ -357,7 +370,7 @@ static void vdpasim_kick_vq(struct vdpa_device *vdpa, u= 16 idx) struct vdpasim_virtqueue *vq =3D &vdpasim->vqs[idx]; =20 if (vq->ready) - schedule_work(&vdpasim->work); + vdpasim_schedule_work(vdpasim); } =20 static void vdpasim_set_vq_cb(struct vdpa_device *vdpa, u16 idx, diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c b/drivers/vdpa/vdpa_sim/v= dpa_sim_blk.c index c6db1a1baf76..ae2309411acd 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim_blk.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -286,9 +285,8 @@ static bool vdpasim_blk_handle_req(struct vdpasim *vdpa= sim, return handled; } =20 -static void vdpasim_blk_work(struct work_struct *work) +static void vdpasim_blk_work(struct vdpasim *vdpasim) { - struct vdpasim *vdpasim =3D container_of(work, struct vdpasim, work); bool reschedule =3D false; int i; =20 @@ -326,7 +324,7 @@ static void vdpasim_blk_work(struct work_struct *work) spin_unlock(&vdpasim->lock); =20 if (reschedule) - schedule_work(&vdpasim->work); + vdpasim_schedule_work(vdpasim); } =20 static void vdpasim_blk_get_config(struct vdpasim *vdpasim, void *config) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c b/drivers/vdpa/vdpa_sim/v= dpa_sim_net.c index c3cb225ea469..a209df365158 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim_net.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim_net.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -143,9 +142,8 @@ static void vdpasim_handle_cvq(struct vdpasim *vdpasim) } } =20 -static void vdpasim_net_work(struct work_struct *work) +static void vdpasim_net_work(struct vdpasim *vdpasim) { - struct vdpasim *vdpasim =3D container_of(work, struct vdpasim, work); struct vdpasim_virtqueue *txq =3D &vdpasim->vqs[1]; struct vdpasim_virtqueue *rxq =3D &vdpasim->vqs[0]; ssize_t read, write; @@ -196,7 +194,7 @@ static void vdpasim_net_work(struct work_struct *work) vdpasim_net_complete(rxq, write); =20 if (++pkts > 4) { - schedule_work(&vdpasim->work); + vdpasim_schedule_work(vdpasim); goto out; } } --=20 2.38.1 From nobody Wed Sep 17 22:19:00 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8B13C4332F for ; Wed, 14 Dec 2022 16:33:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239158AbiLNQdB (ORCPT ); Wed, 14 Dec 2022 11:33:01 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239045AbiLNQcN (ORCPT ); Wed, 14 Dec 2022 11:32:13 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 107DE14D3F for ; Wed, 14 Dec 2022 08:31:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671035488; 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=eNeRnQ41YTwI7Dv9IlQ//H1saK0wcCg2ACIcfcXrP3k=; b=MkK4rkbgeZxOXYa28p3POjhOJs92EpW4Yn4V2XDOPCxPrAF9ewLvE3ows6z+5kvrS21I54 ayrVHiosB8ZXg9M06ehFmGMn3TtqKfp2e7zJTbmVACs+WYzRzgniCwkPx+AmF698aHjoA4 Gzxr0bEkyu+y1h0vmmT9p6//N5qpd7s= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-113-FpaNKZl0NRyRPHfhpuKUBw-1; Wed, 14 Dec 2022 11:31:21 -0500 X-MC-Unique: FpaNKZl0NRyRPHfhpuKUBw-1 Received: by mail-wr1-f72.google.com with SMTP id l9-20020adfa389000000b00241f907e102so62461wrb.8 for ; Wed, 14 Dec 2022 08:31:03 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eNeRnQ41YTwI7Dv9IlQ//H1saK0wcCg2ACIcfcXrP3k=; b=Nmoh4BwDT8Q6BjcPGgMGUlXwFlrIBIvzirXLxhckrH87uR4VFoNxXWlcUWb59KuB5k NghSvrl2BsvCrFyd+STUzCyw++1mv3aT+xK+bC8OqsttJFvxjy186ya3fIdcPIs5uhaK ggQALxurdhXv4jPUc8Ga1W5RcNjrBDz6rx2aqm8CEjsAeu8kc/43uo0jxZR/yfrAYc5U P1akJ2Vb8HRcwfb60TfCTl7+ge006wJB0Wq1sE7po09Z0PmXlAkFad2GpyD/48OAH9XK Vb0gMbzLcnd20ryxUdg8zjQNj4ZUsfVDHkpd34EB/Sr8G92aYZbLqIZH+Fd/lu9nfVEn Aqow== X-Gm-Message-State: ANoB5pkpz8t1RInErobA/vqc7O/AMSz6kZ6HY2poNH//AsBRj6h+jOHP 5ceuZ0IYZIQwhNzMva+MofIOE0oG5IzU0/KJ1QoUJoC5BMnI1Ride5Xcs3C7r7StQ0mYit4pFG+ z5z2gTT1rJUMAxM52Ff7/7HFk X-Received: by 2002:a05:600c:3b15:b0:3d0:d177:cac1 with SMTP id m21-20020a05600c3b1500b003d0d177cac1mr19372599wms.36.1671035458590; Wed, 14 Dec 2022 08:30:58 -0800 (PST) X-Google-Smtp-Source: AA0mqf41TbDFZYAxyeY/6/VgR7BHHW22n4sdvEUddOO8zMQQsvGDfuNF6JjoQjUcHxV0WQ+cml5BAg== X-Received: by 2002:a05:600c:3b15:b0:3d0:d177:cac1 with SMTP id m21-20020a05600c3b1500b003d0d177cac1mr19372586wms.36.1671035458429; Wed, 14 Dec 2022 08:30:58 -0800 (PST) Received: from step1.redhat.com (host-87-11-6-51.retail.telecomitalia.it. [87.11.6.51]) by smtp.gmail.com with ESMTPSA id c6-20020a05600c0a4600b003d1e3b1624dsm3850323wmq.2.2022.12.14.08.30.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 08:30:57 -0800 (PST) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Jason Wang , Andrey Zhadchenko , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Michael S. Tsirkin" , eperezma@redhat.com, stefanha@redhat.com, netdev@vger.kernel.org, Stefano Garzarella Subject: [RFC PATCH 5/6] vdpa_sim: use kthread worker Date: Wed, 14 Dec 2022 17:30:24 +0100 Message-Id: <20221214163025.103075-6-sgarzare@redhat.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221214163025.103075-1-sgarzare@redhat.com> References: <20221214163025.103075-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Let's use our own kthread to run device jobs. This allows us more flexibility, especially we can attach the kthread to the user address space when vDPA uses user's VA. Signed-off-by: Stefano Garzarella --- drivers/vdpa/vdpa_sim/vdpa_sim.h | 3 ++- drivers/vdpa/vdpa_sim/vdpa_sim.c | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_= sim.h index 7e6dd366856f..07ef53ea375e 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.h +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h @@ -53,7 +53,8 @@ struct vdpasim_dev_attr { struct vdpasim { struct vdpa_device vdpa; struct vdpasim_virtqueue *vqs; - struct work_struct work; + struct kthread_worker *worker; + struct kthread_work work; struct vdpasim_dev_attr dev_attr; /* spinlock to synchronize virtqueue state */ spinlock_t lock; diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_= sim.c index 9bde33e38e27..36a1d2e0a6ba 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -11,8 +11,8 @@ #include #include #include +#include #include -#include #include #include #include @@ -245,7 +245,7 @@ static const struct dma_map_ops vdpasim_dma_ops =3D { static const struct vdpa_config_ops vdpasim_config_ops; static const struct vdpa_config_ops vdpasim_batch_config_ops; =20 -static void vdpasim_work_fn(struct work_struct *work) +static void vdpasim_work_fn(struct kthread_work *work) { struct vdpasim *vdpasim =3D container_of(work, struct vdpasim, work); =20 @@ -282,7 +282,13 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr= *dev_attr, } =20 vdpasim->dev_attr =3D *dev_attr; - INIT_WORK(&vdpasim->work, vdpasim_work_fn); + + kthread_init_work(&vdpasim->work, vdpasim_work_fn); + vdpasim->worker =3D kthread_create_worker(0, "vDPA sim worker: %s", + dev_attr->name); + if (IS_ERR(vdpasim->worker)) + goto err_iommu; + spin_lock_init(&vdpasim->lock); spin_lock_init(&vdpasim->iommu_lock); =20 @@ -338,7 +344,7 @@ EXPORT_SYMBOL_GPL(vdpasim_create); =20 void vdpasim_schedule_work(struct vdpasim *vdpasim) { - schedule_work(&vdpasim->work); + kthread_queue_work(vdpasim->worker, &vdpasim->work); } EXPORT_SYMBOL_GPL(vdpasim_schedule_work); =20 @@ -689,7 +695,8 @@ static void vdpasim_free(struct vdpa_device *vdpa) struct vdpasim *vdpasim =3D vdpa_to_sim(vdpa); int i; =20 - cancel_work_sync(&vdpasim->work); + kthread_cancel_work_sync(&vdpasim->work); + kthread_destroy_worker(vdpasim->worker); =20 for (i =3D 0; i < vdpasim->dev_attr.nvqs; i++) { vringh_kiov_cleanup(&vdpasim->vqs[i].out_iov); --=20 2.38.1 From nobody Wed Sep 17 22:19:00 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A15A6C4332F for ; Wed, 14 Dec 2022 16:32:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239062AbiLNQcQ (ORCPT ); Wed, 14 Dec 2022 11:32:16 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239065AbiLNQbt (ORCPT ); Wed, 14 Dec 2022 11:31:49 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5BD5614D1F for ; Wed, 14 Dec 2022 08:31:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1671035468; 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=zUQYRaS8aTqjl4sq2+Qu5cD5eqcY+9WtPJEWRyeBg18=; b=GrlYnINXsNDr3cPuvstru/DvbdJfke0TdLjVX5xjbx10e+7TVzHIMT8yH5p5ErZObbDtm9 U/JJaJlwG+APiZxQFVzYQiF5O9FtvBxGZzTEW5yfaxzY7iEk0+j6gA3Vh3ms8NNXWfDOGJ ZyK85G+YXWZBxTjAWVYQhmBvMbew+Nk= Received: from mail-wr1-f71.google.com (mail-wr1-f71.google.com [209.85.221.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-213-UB5gaN5DOlay4P6mJ8r0uA-1; Wed, 14 Dec 2022 11:31:01 -0500 X-MC-Unique: UB5gaN5DOlay4P6mJ8r0uA-1 Received: by mail-wr1-f71.google.com with SMTP id d6-20020adfa346000000b0024211c0f988so61227wrb.9 for ; Wed, 14 Dec 2022 08:31:01 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zUQYRaS8aTqjl4sq2+Qu5cD5eqcY+9WtPJEWRyeBg18=; b=k1wPjVWGWlOUCvvYNHtnAEnRny5jNf+o9mUSBpf4s1Qn4UkIuQyhj94+JWwHXdpJ8c pijgH/TKrPnofVcBImRyZLgreTUnWwzqjSKB1rMfamfB5+a2wvkwEEQ2uUyy1Sr+XxBz O8pqZWtE9C/lXFnFkAU9w8y0fxKv4D9JR+1h5LE7INhpTZW5EL4V6iPGm9xpNlK8tt0q VRrg/jDxnowaPII/1wfL3gdnHIw/8usxjWvuwDqJETztrWdg1X9SZQploQjS5g62MBnr 8CGW0PKZuLaeXKZGPyp1aY9QO4yZulbXcQaSiPLiu8UuXr4bpubbb7QPsF5FijZYYYVo WkKA== X-Gm-Message-State: ANoB5pmSMfNeFA0Q/eu9gYyX70S0pPZrfi9nGcXzzYw2WqYbAulqAt1E 3RE6bpEVuxThNe8x54mpno9344rWQ7fZ1ZCL/bfUKURfQT5mbGbbbgEwFal0/qjuJdoCuZSaXeF bbN4NooyZVX3DkbN1DOy+Nlvo X-Received: by 2002:a05:600c:3b1b:b0:3d1:fe12:fe34 with SMTP id m27-20020a05600c3b1b00b003d1fe12fe34mr19040160wms.39.1671035460471; Wed, 14 Dec 2022 08:31:00 -0800 (PST) X-Google-Smtp-Source: AA0mqf61ilOWeas/kVNtW9HKu0e1ntW+e3+kM18c3C5LDa9pJ8S3z9wCuW0PcuQ0VElABaMa/0wSoA== X-Received: by 2002:a05:600c:3b1b:b0:3d1:fe12:fe34 with SMTP id m27-20020a05600c3b1b00b003d1fe12fe34mr19040142wms.39.1671035460286; Wed, 14 Dec 2022 08:31:00 -0800 (PST) Received: from step1.redhat.com (host-87-11-6-51.retail.telecomitalia.it. [87.11.6.51]) by smtp.gmail.com with ESMTPSA id c6-20020a05600c0a4600b003d1e3b1624dsm3850323wmq.2.2022.12.14.08.30.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 14 Dec 2022 08:30:59 -0800 (PST) From: Stefano Garzarella To: virtualization@lists.linux-foundation.org Cc: Jason Wang , Andrey Zhadchenko , linux-kernel@vger.kernel.org, kvm@vger.kernel.org, "Michael S. Tsirkin" , eperezma@redhat.com, stefanha@redhat.com, netdev@vger.kernel.org, Stefano Garzarella Subject: [RFC PATCH 6/6] vdpa_sim: add support for user VA Date: Wed, 14 Dec 2022 17:30:25 +0100 Message-Id: <20221214163025.103075-7-sgarzare@redhat.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221214163025.103075-1-sgarzare@redhat.com> References: <20221214163025.103075-1-sgarzare@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The new "use_va" module parameter (default: false) is used in vdpa_alloc_device() to inform the vDPA framework that the device supports VA. vringh is initialized to use VA only when "use_va" is true and the user's mm has been bound. So, only when the bus supports user VA (e.g. vhost-vdpa). vdpasim_mm_work_fn work is used to attach the kthread to the user address space when the .bind_mm callback is invoked, and to detach it when the device is reset. Signed-off-by: Stefano Garzarella --- drivers/vdpa/vdpa_sim/vdpa_sim.h | 1 + drivers/vdpa/vdpa_sim/vdpa_sim.c | 104 ++++++++++++++++++++++++++++++- 2 files changed, 103 insertions(+), 2 deletions(-) diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_= sim.h index 07ef53ea375e..1b010e5c0445 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.h +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h @@ -55,6 +55,7 @@ struct vdpasim { struct vdpasim_virtqueue *vqs; struct kthread_worker *worker; struct kthread_work work; + struct mm_struct *mm_bound; struct vdpasim_dev_attr dev_attr; /* spinlock to synchronize virtqueue state */ spinlock_t lock; diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_= sim.c index 36a1d2e0a6ba..6e07cedef30c 100644 --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c @@ -36,10 +36,90 @@ module_param(max_iotlb_entries, int, 0444); MODULE_PARM_DESC(max_iotlb_entries, "Maximum number of iotlb entries for each address space. 0 means unlimi= ted. (default: 2048)"); =20 +static bool use_va; +module_param(use_va, bool, 0444); +MODULE_PARM_DESC(use_va, "Enable the device's ability to use VA"); + #define VDPASIM_QUEUE_ALIGN PAGE_SIZE #define VDPASIM_QUEUE_MAX 256 #define VDPASIM_VENDOR_ID 0 =20 +struct vdpasim_mm_work { + struct kthread_work work; + struct task_struct *owner; + struct mm_struct *mm; + bool bind; + int ret; +}; + +static void vdpasim_mm_work_fn(struct kthread_work *work) +{ + struct vdpasim_mm_work *mm_work =3D + container_of(work, struct vdpasim_mm_work, work); + + mm_work->ret =3D 0; + + if (mm_work->bind) { + kthread_use_mm(mm_work->mm); +#if 0 + if (mm_work->owner) + mm_work->ret =3D cgroup_attach_task_all(mm_work->owner, + current); +#endif + } else { +#if 0 + //TODO: check it + cgroup_release(current); +#endif + kthread_unuse_mm(mm_work->mm); + } +} + +static void vdpasim_worker_queue_mm(struct vdpasim *vdpasim, + struct vdpasim_mm_work *mm_work) +{ + struct kthread_work *work =3D &mm_work->work; + + kthread_init_work(work, vdpasim_mm_work_fn); + kthread_queue_work(vdpasim->worker, work); + + spin_unlock(&vdpasim->lock); + kthread_flush_work(work); + spin_lock(&vdpasim->lock); +} + +static int vdpasim_worker_bind_mm(struct vdpasim *vdpasim, + struct mm_struct *new_mm, + struct task_struct *owner) +{ + struct vdpasim_mm_work mm_work; + + mm_work.owner =3D owner; + mm_work.mm =3D new_mm; + mm_work.bind =3D true; + + vdpasim_worker_queue_mm(vdpasim, &mm_work); + + if (!mm_work.ret) + vdpasim->mm_bound =3D new_mm; + + return mm_work.ret; +} + +static void vdpasim_worker_unbind_mm(struct vdpasim *vdpasim) +{ + struct vdpasim_mm_work mm_work; + + if (!vdpasim->mm_bound) + return; + + mm_work.mm =3D vdpasim->mm_bound; + mm_work.bind =3D false; + + vdpasim_worker_queue_mm(vdpasim, &mm_work); + + vdpasim->mm_bound =3D NULL; +} static struct vdpasim *vdpa_to_sim(struct vdpa_device *vdpa) { return container_of(vdpa, struct vdpasim, vdpa); @@ -66,8 +146,10 @@ static void vdpasim_vq_notify(struct vringh *vring) static void vdpasim_queue_ready(struct vdpasim *vdpasim, unsigned int idx) { struct vdpasim_virtqueue *vq =3D &vdpasim->vqs[idx]; + bool va_enabled =3D use_va && vdpasim->mm_bound; =20 - vringh_init_iotlb(&vq->vring, vdpasim->features, vq->num, false, false, + vringh_init_iotlb(&vq->vring, vdpasim->features, vq->num, false, + va_enabled, (struct vring_desc *)(uintptr_t)vq->desc_addr, (struct vring_avail *) (uintptr_t)vq->driver_addr, @@ -96,6 +178,9 @@ static void vdpasim_do_reset(struct vdpasim *vdpasim) { int i; =20 + //TODO: should we cancel the works? + vdpasim_worker_unbind_mm(vdpasim); + spin_lock(&vdpasim->iommu_lock); =20 for (i =3D 0; i < vdpasim->dev_attr.nvqs; i++) { @@ -275,7 +360,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr = *dev_attr, =20 vdpasim =3D vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops, dev_attr->ngroups, dev_attr->nas, - dev_attr->name, false); + dev_attr->name, use_va); if (IS_ERR(vdpasim)) { ret =3D PTR_ERR(vdpasim); goto err_alloc; @@ -657,6 +742,19 @@ static int vdpasim_set_map(struct vdpa_device *vdpa, u= nsigned int asid, return ret; } =20 +static int vdpasim_bind_mm(struct vdpa_device *vdpa, struct mm_struct *mm, + struct task_struct *owner) +{ + struct vdpasim *vdpasim =3D vdpa_to_sim(vdpa); + int ret; + + spin_lock(&vdpasim->lock); + ret =3D vdpasim_worker_bind_mm(vdpasim, mm, owner); + spin_unlock(&vdpasim->lock); + + return ret; +} + static int vdpasim_dma_map(struct vdpa_device *vdpa, unsigned int asid, u64 iova, u64 size, u64 pa, u32 perm, void *opaque) @@ -744,6 +842,7 @@ static const struct vdpa_config_ops vdpasim_config_ops = =3D { .set_group_asid =3D vdpasim_set_group_asid, .dma_map =3D vdpasim_dma_map, .dma_unmap =3D vdpasim_dma_unmap, + .bind_mm =3D vdpasim_bind_mm, .free =3D vdpasim_free, }; =20 @@ -776,6 +875,7 @@ static const struct vdpa_config_ops vdpasim_batch_confi= g_ops =3D { .get_iova_range =3D vdpasim_get_iova_range, .set_group_asid =3D vdpasim_set_group_asid, .set_map =3D vdpasim_set_map, + .bind_mm =3D vdpasim_bind_mm, .free =3D vdpasim_free, }; =20 --=20 2.38.1