From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id A1CE37271; Fri, 12 Jan 2018 04:28:07 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Jan 2018 19:28:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,347,1511856000"; d="scan'208";a="9786292" Received: from fmsmsx108.amr.corp.intel.com ([10.18.124.206]) by orsmga007.jf.intel.com with ESMTP; 11 Jan 2018 19:28:05 -0800 Received: from shsmsx104.ccr.corp.intel.com (10.239.4.70) by FMSMSX108.amr.corp.intel.com (10.18.124.206) with Microsoft SMTP Server (TLS) id 14.3.319.2; Thu, 11 Jan 2018 19:28:05 -0800 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.213]) by SHSMSX104.ccr.corp.intel.com ([169.254.5.152]) with mapi id 14.03.0319.002; Fri, 12 Jan 2018 11:28:03 +0800 From: "Zhang, Qi Z" To: "Tan, Jianfeng" , 'Maxime Coquelin' , "dev@dpdk.org" , "stable@dpdk.org" , "santosh.shukla@caviumnetworks.com" , "Burakov, Anatoly" , "thomas@monjalon.net" , "stephen@networkplumber.org" CC: "peterx@redhat.com" Thread-Topic: [PATCH v2] bus/pci: forbid VA as IOVA mode if IOMMU address width too small Thread-Index: AQHTi1GS326iHabW/UKAbWXh/pi0F6Nvkh5w Date: Fri, 12 Jan 2018 03:28:03 +0000 Message-ID: <039ED4275CED7440929022BC67E706115312BA1A@SHSMSX103.ccr.corp.intel.com> References: <20180109131801.26520-1-maxime.coquelin@redhat.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.0.0.116 dlp-reaction: no-action x-originating-ip: [10.239.127.40] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [PATCH v2] bus/pci: forbid VA as IOVA mode if IOMMU address width too small X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Jan 2018 03:28:08 -0000 > -----Original Message----- > From: Tan, Jianfeng > Sent: Friday, January 12, 2018 11:01 AM > To: 'Maxime Coquelin' ; dev@dpdk.org; > stable@dpdk.org; santosh.shukla@caviumnetworks.com; Burakov, Anatoly > ; thomas@monjalon.net; > stephen@networkplumber.org > Cc: peterx@redhat.com; Zhang, Qi Z > Subject: RE: [PATCH v2] bus/pci: forbid VA as IOVA mode if IOMMU address > width too small >=20 >=20 >=20 > > -----Original Message----- > > From: Maxime Coquelin [mailto:maxime.coquelin@redhat.com] > > Sent: Tuesday, January 9, 2018 9:18 PM > > To: dev@dpdk.org; stable@dpdk.org; Tan, Jianfeng; > > santosh.shukla@caviumnetworks.com; Burakov, Anatoly; > > thomas@monjalon.net; stephen@networkplumber.org > > Cc: peterx@redhat.com; Maxime Coquelin > > Subject: [PATCH v2] bus/pci: forbid VA as IOVA mode if IOMMU address > > width too small > > > > Intel VT-d supports different address widths for the IOVAs, from > > 39 bits to 56 bits. > > > > While recent processors support at least 48 bits, VT-d emulation > > currently only supports 39 bits. It makes DMA mapping to fail in this > > case when using VA as IOVA mode, as user-space virtual addresses uses > > up to 47 bits (see kernel's Documentation/x86/x86_64/mm.txt). > > > > This patch parses VT-d CAP register value available in sysfs, and > > forbid VA as IOVA mode if the GAW is 39 bits or unknown. > > > > Fixes: f37dfab21c98 ("drivers/net: enable IOVA mode for Intel PMDs") > > > > Cc: stable@dpdk.org > > Signed-off-by: Maxime Coquelin >=20 > I don't have strong objection on this patch. Plus, this patch has been ve= rified > with --no-huge, and Intel low-end processors (with the help of Zhang Qi). Sorry, my bad, I just found it is tested with igb_uio. re-tested it with vfio, seems VA width is no decoded correctly I have sagaw =3D 4, which means 48b VA address, but the real device is 39, = so IOVA is not disabled, still see that failure. Thanks Qi >=20 > Tested-by: Jianfeng Tan >=20 > > --- > > > > Changes in v2: > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > - Rework pci_one_device_iommu_support_va #ifdefery (Stephen) > > - Don't inline introduced functions (Stephen) > > > > drivers/bus/pci/linux/pci.c | 108 > > ++++++++++++++++++++++++++++++++++++++++---- > > 1 file changed, 99 insertions(+), 9 deletions(-) > > > > diff --git a/drivers/bus/pci/linux/pci.c b/drivers/bus/pci/linux/pci.c > > index 25f907e04..0a43c4b89 100644 > > --- a/drivers/bus/pci/linux/pci.c > > +++ b/drivers/bus/pci/linux/pci.c > > @@ -547,6 +547,100 @@ pci_one_device_has_iova_va(void) > > return 0; > > } > > > > +#if defined(RTE_ARCH_X86) > > +static bool > > +pci_one_device_iommu_support_va(struct rte_pci_device *dev) { > > +#define VTD_CAP_SAGAW_SHIFT 8 > > +#define VTD_CAP_SAGAW_MASK (0x1fULL << > > VTD_CAP_SAGAW_SHIFT) > > +#define X86_VA_WIDTH 47 /* From Documentation/x86/x86_64/mm.txt > */ > > + struct rte_pci_addr *addr =3D &dev->addr; > > + char filename[PATH_MAX]; > > + FILE *fp; > > + uint64_t sagaw, vtd_cap_reg =3D 0; > > + int guest_addr_width =3D 0; > > + > > + snprintf(filename, sizeof(filename), > > + "%s/" PCI_PRI_FMT "/iommu/intel-iommu/cap", > > + rte_pci_get_sysfs_path(), addr->domain, addr->bus, addr- > > >devid, > > + addr->function); > > + if (access(filename, F_OK) =3D=3D -1) { > > + /* We don't have an Intel IOMMU, assume VA supported*/ >=20 > A nitpick: missed a space between "supported" and "*/" >=20 > Thanks, > Jianfeng