Received: by 2002:a05:6a10:9afc:0:0:0:0 with SMTP id t28csp2622031pxm; Mon, 28 Feb 2022 02:54:52 -0800 (PST) X-Google-Smtp-Source: ABdhPJxX5k5OJwwL9Y3cx6+xZAWYIx0HVZlnnIGzeLViMmKc7hN88t/hq7QkuWVKFwXt51+ee+c4 X-Received: by 2002:a17:906:dfe9:b0:6cf:7f1d:dddd with SMTP id lc9-20020a170906dfe900b006cf7f1dddddmr14742220ejc.621.1646045692404; Mon, 28 Feb 2022 02:54:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1646045692; cv=none; d=google.com; s=arc-20160816; b=XX4xHBjT8QQ47uP/ku5TWWhQCmThKmBuM1VNI1ULvutrx663p+d07dFxeMRlAygePB arjOFCEv/hrvXaqGbqyg1Nor15joVOH9Q7/XHR+b1eAnQDtKJFo+gCZOpIWzad9VcOtE Gld2h0NvRfEo/dHfifKbrimsmG0q12cobiV6fTeS3yLX0sofImyqyFoAFE7w2d3Ylumf 39YgC2VVEiMUOmfd0YRmgKlbR254U1CCwGGC6gpf0xrzgI/RGhZmOhM/hatTcucDAThp cSbrkZOExlrABJ6fDO03IZJ6UFTo+1x9ZqWA3WOmEJS+KA1Z1TFU5PPMp5VhfkDQZ4UK o/2g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=ZEg+1lw95oVgyFcFAqtClQVp7snHOaZZ37kJvcE2J+E=; b=Jvhp2b2m11OCTiuU+woXwFgG7gva15BYWT5dRLXhiwK1zvEqzTZZ7GB3ZAzMhSsOnF H2u7QIADV0sGHQGnQOhBKXn3McV+RYj4wqlchlMDiKKxopcCcZgAC2X6dRHkDouCLK1+ 2YEklSKnY89e3yUxDo3XjQLIpDatHY9VumneTv7bLXSb2xWIz6ojUKiZLLUiGCaZVEZt u5EYwbQTuWWSC0GHpVYizO9IQHAFwK6zsL3A9qOgk93zimDVcW4jl0fjhJQhmsotnaLe 2vJPtc08hvFWYeLmeoBw/SC8AnFVVeAVj2F0KAaFf2pw3QB1OKhcAgu2fuV1DxaHrMiw CGdw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=XqrFaj4F; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id s15-20020a170906168f00b006b763b99388si5788161ejd.816.2022.02.28.02.54.30; Mon, 28 Feb 2022 02:54:52 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=XqrFaj4F; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S229695AbiB1IIW (ORCPT + 99 others); Mon, 28 Feb 2022 03:08:22 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56358 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233542AbiB1IIV (ORCPT ); Mon, 28 Feb 2022 03:08:21 -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 ESMTP id E16C133A1F for ; Mon, 28 Feb 2022 00:07:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646035660; 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=ZEg+1lw95oVgyFcFAqtClQVp7snHOaZZ37kJvcE2J+E=; b=XqrFaj4F135it6vhaJJm2w4y3n4jB07m+U7WUm8P7bDtMMXaOaeaHV5v+ynnz/slaCPPG/ l49fyOmtVwgF+6HzROcpYSLbVRTdPOo8rhNWmWHkr/lAhBx7TOTLLybWP+QXwt0nDvoqua /RbhupE5GlMvNztQGCZ03qtLKyXPQnU= Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-199-v3ZAtIs2OlSEXbHooWqYhg-1; Mon, 28 Feb 2022 03:07:36 -0500 X-MC-Unique: v3ZAtIs2OlSEXbHooWqYhg-1 Received: by mail-pg1-f197.google.com with SMTP id u17-20020a63a911000000b0037491401c44so6168674pge.17 for ; Mon, 28 Feb 2022 00:07:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:to:cc:references:from:in-reply-to :content-transfer-encoding; bh=ZEg+1lw95oVgyFcFAqtClQVp7snHOaZZ37kJvcE2J+E=; b=W24PmUZVTn2WS6DJTQIz8d1DdKOKf+SeExTWBpNwgXWztd1ZdfztyNPko82k460myK Y8xAUembRiZ6kM1hVEL/9jPZxOhBTBdZPmlm6ys7WjtOpXehCcMDAMVR/cKVjSv6Yzec pvSUhWnr2xNhavs5qhGo+pj4ax1+7p4/EOs0RqEO/NudBhXpdl6fOR21UoGAButysvQw xpRFc83Ta+9UHkMtLGwvjyv5ZJHT1lWLiAquHa59x6N/9g/l7LIBD31EgrfevL1slQ8O Z6tS1oMW0ckbD2kOYrz1fnwgWe3rEj26K6Xi4MPdo6jOlQ7hZylWXB75mrFDx8PKrupM Lp3A== X-Gm-Message-State: AOAM530diBgi3omK0NGLr2ZBF/eiKHjTtsYlbo9N++ORlFDapb45X+oa Ee8EMdDv1Rhcb0CTV8VC5fZ0C2x+/VOGxAHmrs713EVml0I2XiO9/yMdnC4atLGt0kK1V79/vUu wsnijZ8c0cg7qDNixEUCMzOF/ X-Received: by 2002:a17:902:b692:b0:151:5474:d3ee with SMTP id c18-20020a170902b69200b001515474d3eemr8260947pls.139.1646035655194; Mon, 28 Feb 2022 00:07:35 -0800 (PST) X-Received: by 2002:a17:902:b692:b0:151:5474:d3ee with SMTP id c18-20020a170902b69200b001515474d3eemr8260925pls.139.1646035654918; Mon, 28 Feb 2022 00:07:34 -0800 (PST) Received: from [10.72.13.215] ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id lr2-20020a17090b4b8200b001bd6b5cce1dsm206968pjb.36.2022.02.28.00.07.29 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 28 Feb 2022 00:07:34 -0800 (PST) Message-ID: Date: Mon, 28 Feb 2022 16:07:27 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [RFC PATCH v2 05/19] vdpa: introduce virtqueue groups Content-Language: en-US To: Gautam Dawar Cc: gdawar@xilinx.com, martinh@xilinx.com, hanand@xilinx.com, tanujk@xilinx.com, eperezma@redhat.com, "Michael S. Tsirkin" , Zhu Lingshan , Stefano Garzarella , Xie Yongji , Eli Cohen , Si-Wei Liu , Parav Pandit , Longpeng , virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, netdev@vger.kernel.org References: <20201216064818.48239-1-jasowang@redhat.com> <20220224212314.1326-1-gdawar@xilinx.com> <20220224212314.1326-6-gdawar@xilinx.com> From: Jason Wang In-Reply-To: <20220224212314.1326-6-gdawar@xilinx.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A, RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 在 2022/2/25 上午5:22, Gautam Dawar 写道: > This patch introduces virtqueue groups to vDPA device. The virtqueue > group is the minimal set of virtqueues that must share an address > space. And the address space identifier could only be attached to > a specific virtqueue group. > > Signed-off-by: Jason Wang > Signed-off-by: Gautam Dawar > --- > drivers/vdpa/ifcvf/ifcvf_main.c | 8 +++++++- > drivers/vdpa/mlx5/net/mlx5_vnet.c | 8 +++++++- > drivers/vdpa/vdpa.c | 3 +++ > drivers/vdpa/vdpa_sim/vdpa_sim.c | 9 ++++++++- > drivers/vdpa/vdpa_sim/vdpa_sim.h | 1 + > include/linux/vdpa.h | 16 ++++++++++++---- > 6 files changed, 38 insertions(+), 7 deletions(-) We had three more parents now, so we should convert them as well: vp_vdpa, VDUSE and eni_vdpa. Thanks > > diff --git a/drivers/vdpa/ifcvf/ifcvf_main.c b/drivers/vdpa/ifcvf/ifcvf_main.c > index d1a6b5ab543c..c815a2e62440 100644 > --- a/drivers/vdpa/ifcvf/ifcvf_main.c > +++ b/drivers/vdpa/ifcvf/ifcvf_main.c > @@ -378,6 +378,11 @@ static size_t ifcvf_vdpa_get_config_size(struct vdpa_device *vdpa_dev) > return vf->config_size; > } > > +static u32 ifcvf_vdpa_get_vq_group(struct vdpa_device *vdpa, u16 idx) > +{ > + return 0; > +} > + > static void ifcvf_vdpa_get_config(struct vdpa_device *vdpa_dev, > unsigned int offset, > void *buf, unsigned int len) > @@ -453,6 +458,7 @@ static const struct vdpa_config_ops ifc_vdpa_ops = { > .get_device_id = ifcvf_vdpa_get_device_id, > .get_vendor_id = ifcvf_vdpa_get_vendor_id, > .get_vq_align = ifcvf_vdpa_get_vq_align, > + .get_vq_group = ifcvf_vdpa_get_vq_group, > .get_config_size = ifcvf_vdpa_get_config_size, > .get_config = ifcvf_vdpa_get_config, > .set_config = ifcvf_vdpa_set_config, > @@ -507,7 +513,7 @@ static int ifcvf_vdpa_dev_add(struct vdpa_mgmt_dev *mdev, const char *name, > pdev = ifcvf_mgmt_dev->pdev; > dev = &pdev->dev; > adapter = vdpa_alloc_device(struct ifcvf_adapter, vdpa, > - dev, &ifc_vdpa_ops, name, false); > + dev, &ifc_vdpa_ops, 1, name, false); > if (IS_ERR(adapter)) { > IFCVF_ERR(pdev, "Failed to allocate vDPA structure"); > return PTR_ERR(adapter); > diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c > index b53603d94082..fcfc28460b72 100644 > --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c > +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c > @@ -1847,6 +1847,11 @@ static u32 mlx5_vdpa_get_vq_align(struct vdpa_device *vdev) > return PAGE_SIZE; > } > > +static u32 mlx5_vdpa_get_vq_group(struct vdpa_device *vdpa, u16 idx) > +{ > + return 0; > +} > + > enum { MLX5_VIRTIO_NET_F_GUEST_CSUM = 1 << 9, > MLX5_VIRTIO_NET_F_CSUM = 1 << 10, > MLX5_VIRTIO_NET_F_HOST_TSO6 = 1 << 11, > @@ -2363,6 +2368,7 @@ static const struct vdpa_config_ops mlx5_vdpa_ops = { > .get_vq_notification = mlx5_get_vq_notification, > .get_vq_irq = mlx5_get_vq_irq, > .get_vq_align = mlx5_vdpa_get_vq_align, > + .get_vq_group = mlx5_vdpa_get_vq_group, > .get_device_features = mlx5_vdpa_get_device_features, > .set_driver_features = mlx5_vdpa_set_driver_features, > .get_driver_features = mlx5_vdpa_get_driver_features, > @@ -2575,7 +2581,7 @@ static int mlx5_vdpa_dev_add(struct vdpa_mgmt_dev *v_mdev, const char *name, > } > > ndev = vdpa_alloc_device(struct mlx5_vdpa_net, mvdev.vdev, mdev->device, &mlx5_vdpa_ops, > - name, false); > + 1, name, false); > if (IS_ERR(ndev)) > return PTR_ERR(ndev); > > diff --git a/drivers/vdpa/vdpa.c b/drivers/vdpa/vdpa.c > index 9846c9de4bfa..a07bf0130559 100644 > --- a/drivers/vdpa/vdpa.c > +++ b/drivers/vdpa/vdpa.c > @@ -159,6 +159,7 @@ static void vdpa_release_dev(struct device *d) > * initialized but before registered. > * @parent: the parent device > * @config: the bus operations that is supported by this device > + * @ngroups: number of groups supported by this device > * @size: size of the parent structure that contains private data > * @name: name of the vdpa device; optional. > * @use_va: indicate whether virtual address must be used by this device > @@ -171,6 +172,7 @@ static void vdpa_release_dev(struct device *d) > */ > struct vdpa_device *__vdpa_alloc_device(struct device *parent, > const struct vdpa_config_ops *config, > + unsigned int ngroups, > size_t size, const char *name, > bool use_va) > { > @@ -203,6 +205,7 @@ struct vdpa_device *__vdpa_alloc_device(struct device *parent, > vdev->config = config; > vdev->features_valid = false; > vdev->use_va = use_va; > + vdev->ngroups = ngroups; > > if (name) > err = dev_set_name(&vdev->dev, "%s", name); > diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.c b/drivers/vdpa/vdpa_sim/vdpa_sim.c > index ddbe142af09a..c98cb1f869fa 100644 > --- a/drivers/vdpa/vdpa_sim/vdpa_sim.c > +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.c > @@ -250,7 +250,7 @@ struct vdpasim *vdpasim_create(struct vdpasim_dev_attr *dev_attr) > else > ops = &vdpasim_config_ops; > > - vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops, > + vdpasim = vdpa_alloc_device(struct vdpasim, vdpa, NULL, ops, 1, > dev_attr->name, false); > if (IS_ERR(vdpasim)) { > ret = PTR_ERR(vdpasim); > @@ -399,6 +399,11 @@ static u32 vdpasim_get_vq_align(struct vdpa_device *vdpa) > return VDPASIM_QUEUE_ALIGN; > } > > +static u32 vdpasim_get_vq_group(struct vdpa_device *vdpa, u16 idx) > +{ > + return 0; > +} > + > static u64 vdpasim_get_device_features(struct vdpa_device *vdpa) > { > struct vdpasim *vdpasim = vdpa_to_sim(vdpa); > @@ -620,6 +625,7 @@ static const struct vdpa_config_ops vdpasim_config_ops = { > .set_vq_state = vdpasim_set_vq_state, > .get_vq_state = vdpasim_get_vq_state, > .get_vq_align = vdpasim_get_vq_align, > + .get_vq_group = vdpasim_get_vq_group, > .get_device_features = vdpasim_get_device_features, > .set_driver_features = vdpasim_set_driver_features, > .get_driver_features = vdpasim_get_driver_features, > @@ -650,6 +656,7 @@ static const struct vdpa_config_ops vdpasim_batch_config_ops = { > .set_vq_state = vdpasim_set_vq_state, > .get_vq_state = vdpasim_get_vq_state, > .get_vq_align = vdpasim_get_vq_align, > + .get_vq_group = vdpasim_get_vq_group, > .get_device_features = vdpasim_get_device_features, > .set_driver_features = vdpasim_set_driver_features, > .get_driver_features = vdpasim_get_driver_features, > diff --git a/drivers/vdpa/vdpa_sim/vdpa_sim.h b/drivers/vdpa/vdpa_sim/vdpa_sim.h > index cd58e888bcf3..0be7c1e7ef80 100644 > --- a/drivers/vdpa/vdpa_sim/vdpa_sim.h > +++ b/drivers/vdpa/vdpa_sim/vdpa_sim.h > @@ -63,6 +63,7 @@ struct vdpasim { > u32 status; > u32 generation; > u64 features; > + u32 groups; > /* spinlock to synchronize iommu table */ > spinlock_t iommu_lock; > }; > diff --git a/include/linux/vdpa.h b/include/linux/vdpa.h > index 2de442ececae..026b7ad72ed7 100644 > --- a/include/linux/vdpa.h > +++ b/include/linux/vdpa.h > @@ -85,6 +85,7 @@ struct vdpa_device { > bool use_va; > int nvqs; > struct vdpa_mgmt_dev *mdev; > + unsigned int ngroups; > }; > > /** > @@ -172,6 +173,10 @@ struct vdpa_map_file { > * for the device > * @vdev: vdpa device > * Returns virtqueue algin requirement > + * @get_vq_group: Get the group id for a specific virtqueue > + * @vdev: vdpa device > + * @idx: virtqueue index > + * Returns u32: group id for this virtqueue > * @get_device_features: Get virtio features supported by the device > * @vdev: vdpa device > * Returns the virtio features support by the > @@ -282,6 +287,7 @@ struct vdpa_config_ops { > > /* Device ops */ > u32 (*get_vq_align)(struct vdpa_device *vdev); > + u32 (*get_vq_group)(struct vdpa_device *vdev, u16 idx); > u64 (*get_device_features)(struct vdpa_device *vdev); > int (*set_driver_features)(struct vdpa_device *vdev, u64 features); > u64 (*get_driver_features)(struct vdpa_device *vdev); > @@ -314,6 +320,7 @@ struct vdpa_config_ops { > > struct vdpa_device *__vdpa_alloc_device(struct device *parent, > const struct vdpa_config_ops *config, > + unsigned int ngroups, > size_t size, const char *name, > bool use_va); > > @@ -324,17 +331,18 @@ struct vdpa_device *__vdpa_alloc_device(struct device *parent, > * @member: the name of struct vdpa_device within the @dev_struct > * @parent: the parent device > * @config: the bus operations that is supported by this device > + * @ngroups: the number of virtqueue groups supported by this device > * @name: name of the vdpa device > * @use_va: indicate whether virtual address must be used by this device > * > * Return allocated data structure or ERR_PTR upon error > */ > -#define vdpa_alloc_device(dev_struct, member, parent, config, name, use_va) \ > - container_of(__vdpa_alloc_device( \ > - parent, config, \ > +#define vdpa_alloc_device(dev_struct, member, parent, config, ngroups, name, use_va) \ > + container_of((__vdpa_alloc_device( \ > + parent, config, ngroups, \ > sizeof(dev_struct) + \ > BUILD_BUG_ON_ZERO(offsetof( \ > - dev_struct, member)), name, use_va), \ > + dev_struct, member)), name, use_va)), \ > dev_struct, member) > > int vdpa_register_device(struct vdpa_device *vdev, int nvqs);