Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp7064082ybi; Wed, 5 Jun 2019 10:36:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqxF3Z7uIg4w+Kro6vMNv1YJ2qngPxdTGDqfXEhkgLSi45GRhy+7GkKLzRngIUCm4KiC9mjm X-Received: by 2002:a17:90a:214e:: with SMTP id a72mr18923025pje.0.1559756181154; Wed, 05 Jun 2019 10:36:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559756181; cv=none; d=google.com; s=arc-20160816; b=yBiun6N0rmZs9c7K5DY0Yyas97HDoKmn2XYa4T1b8kC8lGXUPJH156cRIm1OQfgfoc R0T2BKkB5gRQ3Pfm1yY/7LHNPWbrqM2wfSiFzaa5bxD86xMPSnkrGvhfkS76LhAZbJih rUAGU3+tt+r27cYvxThRDWaz+4JxpY6kLoVX3t/khnfNCXHzOXkSSR5FaNG4JOdETrSF X+9Ku2PHV7yOSgZcYKJtrVaKK/s2oSAnraDI+wSKVrbmVzA1Ub0+uN6v7oQx/F/zidHz tmN75P1uX6rP4Nq4ReVP5h6cazhvrqC1vRvJsM9VN677FtpS44NYfbfdtyfOVFmjucHu fdlw== 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; bh=rESPEYGk9ZffkVcosuxhFkl7AsXRONuaH/lCtZyf4z4=; b=tMHjEkNWR0kl6XFv/p3zPJiDk8vrLBzXtqSJ9Rtb3QUObRYZNBpWWlQY1FKMhN69bl QLXUlAOpUlxCk5tk2tM/44Gt7C+hRawCJfzI8prxoXGv4gNU2gZ6UNFoPdDO2+wpI4cI 2X9AJJd83ZMpkFkhZ92I7Ns/zDnfvLsZomyXeF7GKtIff70CjmeAk6t4ZSj9TcEfjGQQ 7k8vgjCk758fPogyZ0/ZrqrZyLCmqlmrSKxN2ZkZFJPXtz3JAfZZKbluZU2oR+rPs4n0 a/KIcH9WdBJFBPloamQGZNL+dcv7FyVL2/ZfC/nd97Rak7pgEqqaMyEFbUW9cB2DOcCk EUSA== 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 77si28396884pgb.237.2019.06.05.10.36.03; Wed, 05 Jun 2019 10:36:21 -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 S1726589AbfFERev (ORCPT + 99 others); Wed, 5 Jun 2019 13:34:51 -0400 Received: from mga11.intel.com ([192.55.52.93]:27814 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726240AbfFEReu (ORCPT ); Wed, 5 Jun 2019 13:34:50 -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 fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2019 10:34:50 -0700 X-ExtLoop1: 1 Received: from jacob-builder.jf.intel.com (HELO jacob-builder) ([10.7.199.155]) by orsmga001.jf.intel.com with ESMTP; 05 Jun 2019 10:34:49 -0700 Date: Wed, 5 Jun 2019 10:37:54 -0700 From: Jacob Pan To: "Tian, Kevin" Cc: Jean-Philippe Brucker , "Raj, Ashok" , "alex.williamson@redhat.com" , "iommu@lists.linux-foundation.org" , "linux-kernel@vger.kernel.org" , "robin.murphy@arm.com" , jacob.jun.pan@linux.intel.com Subject: Re: [PATCH v2 2/4] iommu: Introduce device fault data Message-ID: <20190605103754.6d8830d7@jacob-builder> In-Reply-To: References: <20190603145749.46347-1-jean-philippe.brucker@arm.com> <20190603145749.46347-3-jean-philippe.brucker@arm.com> <20190603150842.11070cfd@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 Wed, 5 Jun 2019 08:51:45 +0000 "Tian, Kevin" wrote: > > From: Jacob Pan > > Sent: Tuesday, June 4, 2019 6:09 AM > > > > On Mon, 3 Jun 2019 15:57:47 +0100 > > Jean-Philippe Brucker wrote: > > > > > +/** > > > + * struct iommu_fault_page_request - Page Request data > > > + * @flags: encodes whether the corresponding fields are valid and > > > whether this > > > + * is the last page in group (IOMMU_FAULT_PAGE_REQUEST_* > > > values) > > > + * @pasid: Process Address Space ID > > > + * @grpid: Page Request Group Index > > > + * @perm: requested page permissions (IOMMU_FAULT_PERM_* values) > > > + * @addr: page address > > > + * @private_data: device-specific private information > > > + */ > > > +struct iommu_fault_page_request { > > > +#define IOMMU_FAULT_PAGE_REQUEST_PASID_VALID (1 << 0) > > > +#define IOMMU_FAULT_PAGE_REQUEST_LAST_PAGE (1 << 1) > > > +#define IOMMU_FAULT_PAGE_REQUEST_PRIV_DATA (1 << 2) > > > + __u32 flags; > > > + __u32 pasid; > > > + __u32 grpid; > > > + __u32 perm; > > > + __u64 addr; > > > + __u64 private_data[2]; > > > +}; > > > + > > > > Just a thought, for non-identity G-H PASID management. We could > > pass on guest PASID in PRQ to save a lookup in QEMU. In this case, > > QEMU allocate a GPASID for vIOMMU then a host PASID for pIOMMU. > > QEMU has a G->H lookup. When PRQ comes in to the pIOMMU with > > HPASID, IOMMU driver > > can retrieve GPASID from the bind data then report to the guest via > > VFIO. In this case QEMU does not need to do a H->G PASID lookup. > > > > Should we add a gpasid field here? or we can add a flag and field > > later, up to you. > > > > Can private_data serve this purpose? It's better not introducing > gpasid awareness within host IOMMU driver. It is just a user-level > data associated with a PASID when binding happens. Kernel doesn't > care the actual meaning, simply record it and then return back to > user space later upon device fault. Qemu interprets the meaning as > gpasid in its own context. otherwise usages may use it for other > purpose. > private_data was intended for device PRQ with private data, part of the VT-d PRQ descriptor. For vSVA, we can withhold private_data in the host then respond back when page response from the guest matches pending PRQ with the data withheld. But for in-kernel PRQ reporting, private data still might be passed on to any driver who wants to process the PRQ. So we can't re-purpose it. But for in-kernel VDCM driver, it needs a lookup from guest PASID to host PASID. I thought you wanted to have IOMMU driver provide such service since the knowledge of H-G pasid can be established during bind_gpasid time. In that sense, we _do_ have gpasid awareness. > Thanks > Kevin [Jacob Pan]