Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp338477ybb; Wed, 1 Apr 2020 00:39:46 -0700 (PDT) X-Google-Smtp-Source: ADFU+vtU/UgzQa2Re6NI7gEa5mBhiqHss96i3l8Rt/N4T+QmlEcL1cAgZUB4bJqXM8ZWl8jRc4vS X-Received: by 2002:a9d:6354:: with SMTP id y20mr15948184otk.171.1585726786741; Wed, 01 Apr 2020 00:39:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585726786; cv=none; d=google.com; s=arc-20160816; b=ONUcPOPV6JQRDTQc0CQbOSJ0PiW0iKs/0RJpSqEw3TXuVfuAD4BgvrR7J90MP/iC9R X0JdnnczBTE0pjw8mHCd8RMK4M6J4kMeqqg1XofU8bhkh+Z8USYDMAbxk4UQzal0FgZ9 wO3LgyFY+IzkTahjQjuE1uORBoZTfkhMkexl5pcIDCvlrhhdrkYLe+uK7iWe3eQiAdys +LcnG4A4FwnomONi86iWTYUoShaEvlDuKR0xXr+rLCqf75By3cWG7Ht8LIVZE34oS7v5 PeHrZLYIDnsZGrxdZRai9vQqUUeB/U2vsG6wFjsRM7YnZLQKBoHUPNvqDKD1CuOEqODI GaRw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :dlp-reaction:dlp-version:dlp-product:content-language :accept-language:in-reply-to:references:message-id:date:thread-index :thread-topic:subject:cc:to:from:ironport-sdr:ironport-sdr; bh=kmEgB16eRNGoK3NrYI8J9yWk7yGvuVCEh1UIK2tLpUg=; b=UMuVYV75VdA7CGQWZEjeYKwFkq+t2nU9G6CDjIuLjRC7SpvgaSwlV87uQJNDBaG87d o4+Y+njmy0qj069xE2bmoc9TEg5Tl25PmGkAk3+tla1cMblR9tSys+hS/0LX1VU6f/j1 AqoxcWg4XAQZEkPxFBWfLecgvnDvStW61uyNIiuELzP1D8q2kPPxa9//6rkYvGbmFpqB 58iq7B5Eospd2kRvBnWCLTlUln+wOOWSxsgHe29+BbLS/fL5ASU0HjfbYixjCR3aow7W t0NiZTWJAl/7U244mlHSvGSHRsXLt9rsLQ57xvrJ3rEk45kQJotgB0+OdSb6/vq7ZUuL nZMA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v24si471922oot.29.2020.04.01.00.39.33; Wed, 01 Apr 2020 00:39:46 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732005AbgDAHiH convert rfc822-to-8bit (ORCPT + 99 others); Wed, 1 Apr 2020 03:38:07 -0400 Received: from mga06.intel.com ([134.134.136.31]:65228 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731968AbgDAHiH (ORCPT ); Wed, 1 Apr 2020 03:38:07 -0400 IronPort-SDR: cwuIyNo63sIQoFzP4wlB/Lt8KOWp04LJQpr+5xPgoWdyEGn/BhD2VA6Aq6BCRiXV8+MtR9Fu0f woeRpyWJ41cg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 01 Apr 2020 00:38:05 -0700 IronPort-SDR: qJldliYUR2XcyDxWgtedJMpFY/Vo1ZbIs/csueRUNAwXjyk9nBj6TAhYU5VWKZpzXWkQN+A/yk grBX2A7Mp/Og== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,330,1580803200"; d="scan'208";a="450443701" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga006.fm.intel.com with ESMTP; 01 Apr 2020 00:38:04 -0700 Received: from fmsmsx120.amr.corp.intel.com (10.18.124.208) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 1 Apr 2020 00:38:04 -0700 Received: from shsmsx153.ccr.corp.intel.com (10.239.6.53) by fmsmsx120.amr.corp.intel.com (10.18.124.208) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 1 Apr 2020 00:38:04 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.225]) by SHSMSX153.ccr.corp.intel.com ([169.254.12.89]) with mapi id 14.03.0439.000; Wed, 1 Apr 2020 15:38:00 +0800 From: "Liu, Yi L" To: "Tian, Kevin" , "alex.williamson@redhat.com" , "eric.auger@redhat.com" CC: "jacob.jun.pan@linux.intel.com" , "joro@8bytes.org" , "Raj, Ashok" , "Tian, Jun J" , "Sun, Yi Y" , "jean-philippe@linaro.org" , "peterx@redhat.com" , "iommu@lists.linux-foundation.org" , "kvm@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "Wu, Hao" Subject: RE: [PATCH v1 5/8] vfio/type1: Report 1st-level/stage-1 format to userspace Thread-Topic: [PATCH v1 5/8] vfio/type1: Report 1st-level/stage-1 format to userspace Thread-Index: AQHWAEUcqZEEdiOKbEGofjWp2Yic+6hgi66AgANAF4A= Date: Wed, 1 Apr 2020 07:38:00 +0000 Message-ID: References: <1584880325-10561-1-git-send-email-yi.l.liu@intel.com> <1584880325-10561-6-git-send-email-yi.l.liu@intel.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > From: Tian, Kevin > Sent: Monday, March 30, 2020 7:49 PM > To: Liu, Yi L ; alex.williamson@redhat.com; > Subject: RE: [PATCH v1 5/8] vfio/type1: Report 1st-level/stage-1 format to > userspace > > > From: Liu, Yi L > > Sent: Sunday, March 22, 2020 8:32 PM > > > > From: Liu Yi L > > > > VFIO exposes IOMMU nesting translation (a.k.a dual stage translation) > > capability to userspace. Thus applications like QEMU could support > > vIOMMU with hardware's nesting translation capability for pass-through > > devices. Before setting up nesting translation for pass-through > > devices, QEMU and other applications need to learn the supported > > 1st-lvl/stage-1 translation structure format like page table format. > > > > Take vSVA (virtual Shared Virtual Addressing) as an example, to > > support vSVA for pass-through devices, QEMU setup nesting translation > > for pass- through devices. The guest page table are configured to host > > as 1st-lvl/ > > stage-1 page table. Therefore, guest format should be compatible with > > host side. > > > > This patch reports the supported 1st-lvl/stage-1 page table format on > > the current platform to userspace. QEMU and other alike applications > > should use this format info when trying to setup IOMMU nesting > > translation on host IOMMU. > > > > Cc: Kevin Tian > > CC: Jacob Pan > > Cc: Alex Williamson > > Cc: Eric Auger > > Cc: Jean-Philippe Brucker > > Signed-off-by: Liu Yi L > > --- > > drivers/vfio/vfio_iommu_type1.c | 56 > > +++++++++++++++++++++++++++++++++++++++++ > > include/uapi/linux/vfio.h | 1 + > > 2 files changed, 57 insertions(+) > > > > diff --git a/drivers/vfio/vfio_iommu_type1.c > > b/drivers/vfio/vfio_iommu_type1.c index 9aa2a67..82a9e0b 100644 > > --- a/drivers/vfio/vfio_iommu_type1.c > > +++ b/drivers/vfio/vfio_iommu_type1.c > > @@ -2234,11 +2234,66 @@ static int vfio_iommu_type1_pasid_free(struct > > vfio_iommu *iommu, > > return ret; > > } > > > > +static int vfio_iommu_get_stage1_format(struct vfio_iommu *iommu, > > + u32 *stage1_format) > > +{ > > + struct vfio_domain *domain; > > + u32 format = 0, tmp_format = 0; > > + int ret; > > + > > + mutex_lock(&iommu->lock); > > + if (list_empty(&iommu->domain_list)) { > > + mutex_unlock(&iommu->lock); > > + return -EINVAL; > > + } > > + > > + list_for_each_entry(domain, &iommu->domain_list, next) { > > + if (iommu_domain_get_attr(domain->domain, > > + DOMAIN_ATTR_PASID_FORMAT, &format)) { > > + ret = -EINVAL; > > + format = 0; > > + goto out_unlock; > > + } > > + /* > > + * format is always non-zero (the first format is > > + * IOMMU_PASID_FORMAT_INTEL_VTD which is 1). For > > + * the reason of potential different backed IOMMU > > + * formats, here we expect to have identical formats > > + * in the domain list, no mixed formats support. > > + * return -EINVAL to fail the attempt of setup > > + * VFIO_TYPE1_NESTING_IOMMU if non-identical formats > > + * are detected. > > + */ > > + if (tmp_format && tmp_format != format) { > > + ret = -EINVAL; > > + format = 0; > > + goto out_unlock; > > + } > > + > > + tmp_format = format; > > + } > > this path is invoked only in VFIO_IOMMU_GET_INFO path. If we don't want to > assume the status quo that one container holds only one device w/ vIOMMU > (the prerequisite for vSVA), looks we also need check the format > compatibility when attaching a new group to this container? right. if attaching to a nesting type container (vfio_iommu.nesting bit indicates it), it should check if it is compabile with prior domains in the domain list. But if it is the first one attached to this container, it's fine. is it good? > > + ret = 0; > > + > > +out_unlock: > > + if (format) > > + *stage1_format = format; > > + mutex_unlock(&iommu->lock); > > + return ret; > > +} > > + > > static int vfio_iommu_info_add_nesting_cap(struct vfio_iommu *iommu, > > struct vfio_info_cap *caps) > > { > > struct vfio_info_cap_header *header; > > struct vfio_iommu_type1_info_cap_nesting *nesting_cap; > > + u32 formats = 0; > > + int ret; > > + > > + ret = vfio_iommu_get_stage1_format(iommu, &formats); > > + if (ret) { > > + pr_warn("Failed to get stage-1 format\n"); > > + return ret; > > + } > > > > header = vfio_info_cap_add(caps, sizeof(*nesting_cap), > > VFIO_IOMMU_TYPE1_INFO_CAP_NESTING, > > 1); > > @@ -2254,6 +2309,7 @@ static int > > vfio_iommu_info_add_nesting_cap(struct > > vfio_iommu *iommu, > > /* nesting iommu type supports PASID requests (alloc/free) */ > > nesting_cap->nesting_capabilities |= VFIO_IOMMU_PASID_REQS; > > } > > + nesting_cap->stage1_formats = formats; > > > > return 0; > > } > > diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h > > index ed9881d..ebeaf3e 100644 > > --- a/include/uapi/linux/vfio.h > > +++ b/include/uapi/linux/vfio.h > > @@ -763,6 +763,7 @@ struct vfio_iommu_type1_info_cap_nesting { > > struct vfio_info_cap_header header; > > #define VFIO_IOMMU_PASID_REQS (1 << 0) > > __u32 nesting_capabilities; > > + __u32 stage1_formats; > > do you plan to support multiple formats? If not, use singular name. I do have such plan. e.g. it may be helpful when one day a platform can support multiple formats. Regards, Yi Liu