Received: by 10.192.165.148 with SMTP id m20csp340632imm; Fri, 4 May 2018 11:04:55 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq250B89sPkMR/OS3jdWfAOS4a7IPfLOBMeRJxyVHeDaw1DMuOUc76aGDeHIzV0cRNwzx28 X-Received: by 2002:a17:902:524:: with SMTP id 33-v6mr29138682plf.25.1525457095587; Fri, 04 May 2018 11:04:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525457095; cv=none; d=google.com; s=arc-20160816; b=NDTasXKt2boUbGWH5MlZ9h4h+xr7FnOYN/zc/94b/54T4xMyQl8sjRhib1nXD2XMBl fEPcA1oyas28UzUkz1nODIY+SCpyh4IQ++x/HGHc7Q+uIvAonH/ZcMeJgDz2/3SJU0c8 eeARuzpUTo97ustyJcbW5c2/C7ust/8lFMJppsEQV1kPHzkpLBkuBwGcnrDrtTC7JpGs 6EEDcyRTgG7qGXt2w2reCfkkmVyPy/zUUQw/kBIGBqAFS6arSQJCeUS3ssW6rC1gfDjC +7PJHalMpNhfia8V5FcmtOiv3bNTkagLP9SBk0942UhmhkV9BgtmRzLDmwlALu87WxeC adQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date:arc-authentication-results; bh=qJivs1iq/X4rMtcTyODh0zwa4GFqufSoDnTJ3HSnriE=; b=fGDkLW86xfwxcAzheEVZHRnmGNsAQKeen+XWpRrDbAuc322ZQxBmW3wGnq4pyUf4MY lnzJUW4yFAfxy7IF5iyLaIdGIzXCCUH1Yf/kUYLlhdOuka8kJBRNh63HcJCH0LGTVis+ OpBTXIWl1TvPuoBPuSvfFnXn6gWQskc508/DMj7/Hct4/L+ybry62N2QvfMpMhokLpig UgnMrZBpJda+LaIrk1YPX+5sf2/zs6YiDUbs+/ty/KUy1HQ4rTJ8XAiazZ8/v2PQvzGI XvA9tQLUIIRYJ+LFFb3aauQDSEoeXW4DRmrUYYkJciZXvLYYZNGBJiRFG0jAoxOd/1Wy GzIw== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l30-v6si16049919plg.420.2018.05.04.11.04.40; Fri, 04 May 2018 11:04:55 -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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751562AbeEDSE1 (ORCPT + 99 others); Fri, 4 May 2018 14:04:27 -0400 Received: from mga01.intel.com ([192.55.52.88]:2349 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751189AbeEDSE0 (ORCPT ); Fri, 4 May 2018 14:04:26 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 04 May 2018 11:04:26 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.49,363,1520924400"; d="scan'208";a="53245372" Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga001.jf.intel.com with ESMTP; 04 May 2018 11:04:25 -0700 Date: Fri, 4 May 2018 11:07:06 -0700 From: Jacob Pan To: Jean-Philippe Brucker Cc: "iommu@lists.linux-foundation.org" , LKML , Joerg Roedel , David Woodhouse , Greg Kroah-Hartman , Alex Williamson , Rafael Wysocki , "Liu, Yi L" , "Tian, Kevin" , Raj Ashok , Jean Delvare , Christoph Hellwig , Lu Baolu , "Liu, Yi L" , "Liu@ostrya.localdomain" , jacob.jun.pan@linux.intel.com Subject: Re: [PATCH v4 05/22] iommu: introduce iommu invalidate API function Message-ID: <20180504110706.3392a98e@jacob-builder> In-Reply-To: <20180503214616.51553247@jacob-builder> References: <1523915351-54415-1-git-send-email-jacob.jun.pan@linux.intel.com> <1523915351-54415-6-git-send-email-jacob.jun.pan@linux.intel.com> <20180420181951.GA50099@ostrya.localdomain> <20180423134325.6780f6ac@jacob-builder> <72ee47c4-55fa-4ff1-d94e-cc26203e3eda@arm.com> <20180501155838.4ec3720c@jacob-builder> <20180503214616.51553247@jacob-builder> Organization: OTC X-Mailer: Claws Mail 3.13.2 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 3 May 2018 21:46:16 -0700 Jacob Pan wrote: > On Wed, 2 May 2018 10:31:50 +0100 > Jean-Philippe Brucker wrote: > > > On 01/05/18 23:58, Jacob Pan wrote: > > >>>> Maybe this should be called "NG_PAGE_PASID", > > >>> Sure. I was thinking page range already implies non-global > > >>> pages. > > >>>> and "DOMAIN_PAGE" should > > >>>> instead be "PAGE_PASID". If I understood their meaning > > >>>> correctly, it would be more consistent with the rest. > > >>>> > > >>> I am trying not to mix granu between request w/ PASID and w/o. > > >>> DOMAIN_PAGE meant to be for request w/o PASID. > > >> > > >> Is the distinction necessary? I understand the IOMMU side might > > >> offer many possibilities for invalidation, but the user probably > > >> doesn't need all of them. It might be easier to document, > > >> upstream and maintain if we only specify what's currently needed > > >> by users (what does QEMU VT-d use?) Others can always extend it > > >> by increasing the version. > > >> > > >> Do you think that this invalidation message will be used outside > > >> of BIND_PASID_TABLE context? I can't see an other use but who > > >> knows. At the moment requests w/o PASID are managed with > > >> VFIO_IOMMU_MAP/UNMAP_DMA, which doesn't require invalidation. And > > >> in a BIND_PASID_TABLE context, IOMMUs requests w/o PASID are > > >> just a special case using PASID 0 (for Arm and AMD) so I suppose > > >> they'll use the same invalidation commands as requests w/ PASID. > > >> > > > My understanding is that for GIOVA use case, VT-d vIOMMU creates > > > GIOVA-GPA mapping and the host shadows the 2nd level page tables > > > to create GIOVA-HPA mapping. So when assigned device in the guest > > > can do both DMA map/unmap and VFIO map/unmap, VFIO unmap is one > > > time deal (I guess invalidation can be captured in other code > > > path), but guest kernel use of DMA unmap could will trigger > > > invalidation. QEMU needs to trap those invalidation and passdown > > > to physical IOMMU. So we do need invalidation w/o PASID. > > > > Hm, isn't this all done by host userspace? Whether guest does DMA > > map/unmap or VFIO map/unmap, it creates/removes IOVA-GPA mappings in > > the vIOMMU. QEMU captures invalidation requests for these mappings > > from the guest, finds GPA-HVA in the shadow map and sends a VFIO > > map/unmap request for IOVA-HVA. > > > Sorry for the delay but you are right, I have also confirmed with Yi > that we don't need second level invalidation. I will remove IOTLB > invalidation w/o PASID case from the API. > Now the passdown invalidation granularities look like: (sorted by coarseness), will send out in v5 patchset soon if no issues. /** * enum iommu_inv_granularity - Generic invalidation granularity * * @IOMMU_INV_GRANU_DOMAIN: Device context cache associated with a * domain ID. * @IOMMU_INV_GRANU_DEVICE: Device context cache associated with a * device ID * @IOMMU_INV_GRANU_DOMAIN_ALL_PASID: TLB entries or PASID caches of all * PASIDs associated with a domain ID * @IOMMU_INV_GRANU_PASID_SEL: TLB entries or PASID cache associated * with a PASID and a domain * @IOMMU_INV_GRANU_PAGE_PASID: TLB entries of selected page range * within a PASID * * When an invalidation request is passed down to IOMMU to flush translation * caches, it may carry different granularity levels, which can be specific * to certain types of translation caches. For an example, PASID selective * granularity is only applicable PASID cache and IOTLB invalidation but for * device context caches. * This enum is a collection of granularities for all types of translation * caches. The idea is to make it easy for IOMMU model specific driver to * convert from generic to model specific value. Not all combinations between * translation caches and granularity levels are valid. Each IOMMU driver * can enforce check based on its own conversion table. The conversion is * based on 2D look-up with inputs as follows: * - translation cache types * - granularity * No global granularity is allowed in that passdown invalidation for an * assigned device should only impact the device or domain itself. * * type | DTLB | TLB | PASID | CONTEXT * granule | | | | * -----------------+-----------+-----------+-----------+----------- * DOMAIN | | | | Y * DEVICE | | | | Y * DN_ALL_PASID | Y | Y | Y | * PASID_SEL | Y | Y | Y | * PAGE_PASID | | Y | | * */ enum iommu_inv_granularity { IOMMU_INV_GRANU_DOMAIN, IOMMU_INV_GRANU_DEVICE, IOMMU_INV_GRANU_DOMAIN_ALL_PASID, IOMMU_INV_GRANU_PASID_SEL, IOMMU_INV_GRANU_PAGE_PASID, IOMMU_INV_NR_GRANU, }; > Thanks, > > > Thanks, > > Jean > > > > [Jacob Pan] [Jacob Pan]