Received: by 2002:a05:6a10:a841:0:0:0:0 with SMTP id d1csp92163pxy; Wed, 21 Apr 2021 19:39:05 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyBC8p6p7dClpUkNaVa+KXZOfUuox+agEisDRX/3sWFgaho/UJNV5zEcitbajEi5zWUBimn X-Received: by 2002:a17:902:7c0d:b029:ec:a243:cf9b with SMTP id x13-20020a1709027c0db02900eca243cf9bmr1009182pll.75.1619059145255; Wed, 21 Apr 2021 19:39:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619059145; cv=none; d=google.com; s=arc-20160816; b=0JWJ/HPwn1VZzcJ07s085lxH2Mb+JewbtxvFKMZrfVaaO/D+oQDebQwQgeeFXRw+o9 Rfyc6/PWSKrN7z2s57U24H7Pc4Dq6p+0e8TPUjrQlslAT285+81t8gJws9eCMUjfNcqt nkXK05jzYuHkYRm0mNxnbIzKzbhqG+iOSJs0SVWXUZxO0Un2Z6bIJklibOU17lQ5bpu/ EaUWmJFg+do0WiAXScrCO9LBM6gUWZ438qwAQBGSKeBH64SNjs99guOa7BPsh7QnXUwG sssFprglP1wEPoEYs4Z+Eh90WiQomwEn+caYA7QbTiSmuViHlpmDiVCP9azvkIhieq2V Ytmw== 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 :mime-version:user-agent:date:message-id:from:references:cc:to :subject:dkim-signature; bh=Inh19Rdi8OHMk1GcJYs3DU+EPz9TREj6IWlYcp5GPTY=; b=zVOuSqe0uHDhEmeFjuVjdqoaY2ZZN0DiXbO4Q4LDNs8nn1hMo5og/MZXhfMDAQ69Cr ThYhwF7c9ZCh091/WTnmA/VccATwonEil6gbWN3u/4p9MiUNFTJ4ioGC+7GnZQpJGMid 5ESweAiAt6NSnITjRvIP6FNbKOFy02xROLvMOY4RzO0I263irHaFHxy1tRQIvTnJQ/vi qrDf63p2wu+EE0kkRt9/rhyve1q27xzTZA/0ZRyVGlt6HNGjFBdiIlUasO5RLr7lK9eg luckOy1iYFWPYWowul6KjX3jAj5cV0j8Ysge0e8imMZ9ft2vZXBMcAGUGqWZv66VrGzY oThA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="U9Ob/LSj"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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. [23.128.96.18]) by mx.google.com with ESMTP id in16si4538621pjb.30.2021.04.21.19.38.50; Wed, 21 Apr 2021 19:39:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b="U9Ob/LSj"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S234240AbhDVCiV (ORCPT + 99 others); Wed, 21 Apr 2021 22:38:21 -0400 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:41644 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230338AbhDVCiV (ORCPT ); Wed, 21 Apr 2021 22:38:21 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619059067; 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=Inh19Rdi8OHMk1GcJYs3DU+EPz9TREj6IWlYcp5GPTY=; b=U9Ob/LSjbL9Jk4mlt2FtfQ7fK5M3qX6whcp6h9eJthAVAVbb7zQV1QhlcgTeUZQ+Zx5y6M W3T15137kMr7QoQFy+U9e9lnVnQEjQ8H6td7oQP31H3KW++yL6Vb+q9Rm6vM4ou8Jb2VXZ s3qplaLbUn5oGanSVpqxsaUe04Cbrd0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-319-Gnon2iFYPoavERAheM8_FQ-1; Wed, 21 Apr 2021 22:37:43 -0400 X-MC-Unique: Gnon2iFYPoavERAheM8_FQ-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 012CE802575; Thu, 22 Apr 2021 02:37:42 +0000 (UTC) Received: from wangxiaodeMacBook-Air.local (ovpn-13-214.pek2.redhat.com [10.72.13.214]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6D63F610A8; Thu, 22 Apr 2021 02:37:40 +0000 (UTC) Subject: Re: [PATCH] vdpa/mlx5: Add support for doorbell bypassing To: Eli Cohen , mst@redhat.com Cc: virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org References: <20210421104145.115907-1-elic@nvidia.com> From: Jason Wang Message-ID: Date: Thu, 22 Apr 2021 10:37:38 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.9.1 MIME-Version: 1.0 In-Reply-To: <20210421104145.115907-1-elic@nvidia.com> Content-Type: text/plain; charset=gbk; format=flowed Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ?? 2021/4/21 ????6:41, Eli Cohen ะด??: > Implement mlx5_get_vq_notification() to return the doorbell address. > Size is set to one system page as required. > > Signed-off-by: Eli Cohen > --- > drivers/vdpa/mlx5/core/mlx5_vdpa.h | 1 + > drivers/vdpa/mlx5/core/resources.c | 1 + > drivers/vdpa/mlx5/net/mlx5_vnet.c | 6 ++++++ > 3 files changed, 8 insertions(+) > > diff --git a/drivers/vdpa/mlx5/core/mlx5_vdpa.h b/drivers/vdpa/mlx5/core/mlx5_vdpa.h > index b6cc53ba980c..49de62cda598 100644 > --- a/drivers/vdpa/mlx5/core/mlx5_vdpa.h > +++ b/drivers/vdpa/mlx5/core/mlx5_vdpa.h > @@ -41,6 +41,7 @@ struct mlx5_vdpa_resources { > u32 pdn; > struct mlx5_uars_page *uar; > void __iomem *kick_addr; > + u64 phys_kick_addr; > u16 uid; > u32 null_mkey; > bool valid; > diff --git a/drivers/vdpa/mlx5/core/resources.c b/drivers/vdpa/mlx5/core/resources.c > index 6521cbd0f5c2..665f8fc1710f 100644 > --- a/drivers/vdpa/mlx5/core/resources.c > +++ b/drivers/vdpa/mlx5/core/resources.c > @@ -247,6 +247,7 @@ int mlx5_vdpa_alloc_resources(struct mlx5_vdpa_dev *mvdev) > goto err_key; > > kick_addr = mdev->bar_addr + offset; > + res->phys_kick_addr = kick_addr; > > res->kick_addr = ioremap(kick_addr, PAGE_SIZE); > if (!res->kick_addr) { > diff --git a/drivers/vdpa/mlx5/net/mlx5_vnet.c b/drivers/vdpa/mlx5/net/mlx5_vnet.c > index 10c5fef3c020..680751074d2a 100644 > --- a/drivers/vdpa/mlx5/net/mlx5_vnet.c > +++ b/drivers/vdpa/mlx5/net/mlx5_vnet.c > @@ -1865,8 +1865,14 @@ static void mlx5_vdpa_free(struct vdpa_device *vdev) > > static struct vdpa_notification_area mlx5_get_vq_notification(struct vdpa_device *vdev, u16 idx) > { > + struct mlx5_vdpa_dev *mvdev = to_mvdev(vdev); > struct vdpa_notification_area ret = {}; > + struct mlx5_vdpa_net *ndev; > + > + ndev = to_mlx5_vdpa_ndev(mvdev); > > + ret.addr = (phys_addr_t)ndev->mvdev.res.phys_kick_addr; > + ret.size = PAGE_SIZE; Note that the page will be mapped in to guest, so it's only safe if the doorbeel exclusively own the page. This means if there're other registers in the page, we can not let the doorbell bypass to work. So this is suspicious at least in the case of subfunction where we calculate the bar length in mlx5_sf_dev_table_create() as: table->sf_bar_length = 1 << (MLX5_CAP_GEN(dev, log_min_sf_size) + 12); It looks to me this can only work for the arch with PAGE_SIZE = 4096, otherwise we can map more into the userspace(guest). Thanks > return ret; > } >