From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D7BCAC43331 for ; Tue, 31 Mar 2020 10:59:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id A835C208E0 for ; Tue, 31 Mar 2020 10:59:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730567AbgCaK7p convert rfc822-to-8bit (ORCPT ); Tue, 31 Mar 2020 06:59:45 -0400 Received: from mga07.intel.com ([134.134.136.100]:43384 "EHLO mga07.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730403AbgCaK7p (ORCPT ); Tue, 31 Mar 2020 06:59:45 -0400 IronPort-SDR: hmIyjhHQCf5hCPs8xIu38TX19e12vEuBfA7k3spg/d5alME1HMh9t2RMXgwlIYdXj1uylpT+j0 bOW8IukWdreg== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2020 03:59:44 -0700 IronPort-SDR: ohgEQWK6TSy042e2SG4MrfKhUh7JE/FFXx35AyVj+KNmbrke2Yr30O15MRT8a+DXAtx5H6T/78 KIzwiOKL8Tuw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,327,1580803200"; d="scan'208";a="272704772" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga004.fm.intel.com with ESMTP; 31 Mar 2020 03:59:44 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 31 Mar 2020 03:59:44 -0700 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 31 Mar 2020 03:59:44 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.225]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.191]) with mapi id 14.03.0439.000; Tue, 31 Mar 2020 18:59:40 +0800 From: "Liu, Yi L" To: Auger Eric , "qemu-devel@nongnu.org" , "alex.williamson@redhat.com" , "peterx@redhat.com" CC: "pbonzini@redhat.com" , "mst@redhat.com" , "david@gibson.dropbear.id.au" , "Tian, Kevin" , "Tian, Jun J" , "Sun, Yi Y" , "kvm@vger.kernel.org" , "Wu, Hao" , "jean-philippe@linaro.org" , Jacob Pan , Yi Sun Subject: RE: [PATCH v2 08/22] vfio/common: provide PASID alloc/free hooks Thread-Topic: [PATCH v2 08/22] vfio/common: provide PASID alloc/free hooks Thread-Index: AQHWBkpiGmk8cmt3gUmACGVeg+XtIahiAOgAgACGbQA= Date: Tue, 31 Mar 2020 10:59:39 +0000 Message-ID: References: <1585542301-84087-1-git-send-email-yi.l.liu@intel.com> <1585542301-84087-9-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: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Eric, > From: Auger Eric > Sent: Tuesday, March 31, 2020 6:48 PM > To: Liu, Yi L ; qemu-devel@nongnu.org; > alex.williamson@redhat.com; peterx@redhat.com > Cc: pbonzini@redhat.com; mst@redhat.com; david@gibson.dropbear.id.au; Tian, > Kevin ; Tian, Jun J ; Sun, Yi Y > ; kvm@vger.kernel.org; Wu, Hao ; jean- > philippe@linaro.org; Jacob Pan ; Yi Sun > > Subject: Re: [PATCH v2 08/22] vfio/common: provide PASID alloc/free hooks > > Yi, > > On 3/30/20 6:24 AM, Liu Yi L wrote: > > This patch defines vfio_host_iommu_context_info, implements the PASID > > alloc/free hooks defined in HostIOMMUContextClass. > > > > Cc: Kevin Tian > > Cc: Jacob Pan > > Cc: Peter Xu > > Cc: Eric Auger > > Cc: Yi Sun > > Cc: David Gibson > > Cc: Alex Williamson > > Signed-off-by: Liu Yi L > > --- > > hw/vfio/common.c | 69 +++++++++++++++++++++++++++++++++++ > > include/hw/iommu/host_iommu_context.h | 3 ++ > > include/hw/vfio/vfio-common.h | 4 ++ > > 3 files changed, 76 insertions(+) > > > > diff --git a/hw/vfio/common.c b/hw/vfio/common.c index > > c276732..5f3534d 100644 > > --- a/hw/vfio/common.c > > +++ b/hw/vfio/common.c > > @@ -1179,6 +1179,53 @@ static int vfio_get_iommu_type(VFIOContainer > *container, > > return -EINVAL; > > } > > > > +static int vfio_host_iommu_ctx_pasid_alloc(HostIOMMUContext *iommu_ctx, > > + uint32_t min, uint32_t max, > > + uint32_t *pasid) { > > + VFIOContainer *container = container_of(iommu_ctx, > > + VFIOContainer, iommu_ctx); > > + struct vfio_iommu_type1_pasid_request req; > > + unsigned long argsz; > you can easily avoid using argsz variable oh, right. :-) > > + int ret; > > + > > + argsz = sizeof(req); > > + req.argsz = argsz; > > + req.flags = VFIO_IOMMU_PASID_ALLOC; > > + req.alloc_pasid.min = min; > > + req.alloc_pasid.max = max; > > + > > + if (ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req)) { > > + ret = -errno; > > + error_report("%s: %d, alloc failed", __func__, ret); > better use %m directly or strerror(errno) also include vbasedev->name? or yes, vbasedev->name is also nice to have. > > + return ret; > > + } > > + *pasid = req.alloc_pasid.result; > > + return 0; > > +} > > + > > +static int vfio_host_iommu_ctx_pasid_free(HostIOMMUContext *iommu_ctx, > > + uint32_t pasid) { > > + VFIOContainer *container = container_of(iommu_ctx, > > + VFIOContainer, iommu_ctx); > > + struct vfio_iommu_type1_pasid_request req; > > + unsigned long argsz; > same got it. > > + int ret; > > + > > + argsz = sizeof(req); > > + req.argsz = argsz; > > + req.flags = VFIO_IOMMU_PASID_FREE; > > + req.free_pasid = pasid; > > + > > + if (ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req)) { > > + ret = -errno; > > + error_report("%s: %d, free failed", __func__, ret); > same yep. > > + return ret; > > + } > > + return 0; > > +} > > + > > static int vfio_init_container(VFIOContainer *container, int group_fd, > > Error **errp) { @@ -1791,3 +1838,25 > > @@ int vfio_eeh_as_op(AddressSpace *as, uint32_t op) > > } > > return vfio_eeh_container_op(container, op); } > > + > > +static void vfio_host_iommu_context_class_init(ObjectClass *klass, > > + void *data) { > > + HostIOMMUContextClass *hicxc = HOST_IOMMU_CONTEXT_CLASS(klass); > > + > > + hicxc->pasid_alloc = vfio_host_iommu_ctx_pasid_alloc; > > + hicxc->pasid_free = vfio_host_iommu_ctx_pasid_free; } > > + > > +static const TypeInfo vfio_host_iommu_context_info = { > > + .parent = TYPE_HOST_IOMMU_CONTEXT, > > + .name = TYPE_VFIO_HOST_IOMMU_CONTEXT, > > + .class_init = vfio_host_iommu_context_class_init, > Ah OK > > This is the object inheriting from the abstract TYPE_HOST_IOMMU_CONTEXT. yes. it is. :-) > I initially thought VTDHostIOMMUContext was, sorry for the misunderstanding. Ah, my fault, should have got it earlier. so we may have just aligned in last Oct. > Do you expect other HostIOMMUContext backends? Given the name and ops, it > looks really related to VFIO? For other backends, I guess you mean other passthru modules? If yes, I think they should have their own type name. Just like vIOMMUs, the below vIOMMUs defines their own type name and inherits the same parent. static const TypeInfo vtd_iommu_memory_region_info = { .parent = TYPE_IOMMU_MEMORY_REGION, .name = TYPE_INTEL_IOMMU_MEMORY_REGION, .class_init = vtd_iommu_memory_region_class_init, }; static const TypeInfo smmuv3_iommu_memory_region_info = { .parent = TYPE_IOMMU_MEMORY_REGION, .name = TYPE_SMMUV3_IOMMU_MEMORY_REGION, .class_init = smmuv3_iommu_memory_region_class_init, }; static const TypeInfo amdvi_iommu_memory_region_info = { .parent = TYPE_IOMMU_MEMORY_REGION, .name = TYPE_AMD_IOMMU_MEMORY_REGION, .class_init = amdvi_iommu_memory_region_class_init, }; Regards, Yi Liu From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3891CC43331 for ; Tue, 31 Mar 2020 11:01:00 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0BC5F207FF for ; Tue, 31 Mar 2020 11:01:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0BC5F207FF Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:35952 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jJEdf-0004Tb-7S for qemu-devel@archiver.kernel.org; Tue, 31 Mar 2020 07:00:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53981) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jJEcZ-0003OB-78 for qemu-devel@nongnu.org; Tue, 31 Mar 2020 06:59:52 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1jJEcW-0004a5-SH for qemu-devel@nongnu.org; Tue, 31 Mar 2020 06:59:50 -0400 Received: from mga07.intel.com ([134.134.136.100]:43385) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1jJEcW-0004XW-KO for qemu-devel@nongnu.org; Tue, 31 Mar 2020 06:59:48 -0400 IronPort-SDR: im2JaepvDo4ypqfDL2xo+mO7KJtwuYTXqBcR0PkjaGkRQoOrWsxVx00HIFybLPEy1bIspSZqKo R5nuXIsDX+jQ== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Mar 2020 03:59:44 -0700 IronPort-SDR: ohgEQWK6TSy042e2SG4MrfKhUh7JE/FFXx35AyVj+KNmbrke2Yr30O15MRT8a+DXAtx5H6T/78 KIzwiOKL8Tuw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.72,327,1580803200"; d="scan'208";a="272704772" Received: from fmsmsx107.amr.corp.intel.com ([10.18.124.205]) by fmsmga004.fm.intel.com with ESMTP; 31 Mar 2020 03:59:44 -0700 Received: from fmsmsx117.amr.corp.intel.com (10.18.116.17) by fmsmsx107.amr.corp.intel.com (10.18.124.205) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 31 Mar 2020 03:59:44 -0700 Received: from shsmsx107.ccr.corp.intel.com (10.239.4.96) by fmsmsx117.amr.corp.intel.com (10.18.116.17) with Microsoft SMTP Server (TLS) id 14.3.439.0; Tue, 31 Mar 2020 03:59:44 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.225]) by SHSMSX107.ccr.corp.intel.com ([169.254.9.191]) with mapi id 14.03.0439.000; Tue, 31 Mar 2020 18:59:40 +0800 From: "Liu, Yi L" To: Auger Eric , "qemu-devel@nongnu.org" , "alex.williamson@redhat.com" , "peterx@redhat.com" Subject: RE: [PATCH v2 08/22] vfio/common: provide PASID alloc/free hooks Thread-Topic: [PATCH v2 08/22] vfio/common: provide PASID alloc/free hooks Thread-Index: AQHWBkpiGmk8cmt3gUmACGVeg+XtIahiAOgAgACGbQA= Date: Tue, 31 Mar 2020 10:59:39 +0000 Message-ID: References: <1585542301-84087-1-git-send-email-yi.l.liu@intel.com> <1585542301-84087-9-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: quoted-printable MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 134.134.136.100 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "jean-philippe@linaro.org" , "Tian, Kevin" , Jacob Pan , Yi Sun , "kvm@vger.kernel.org" , "mst@redhat.com" , "Tian, Jun J" , "Sun, Yi Y" , "pbonzini@redhat.com" , "Wu, Hao" , "david@gibson.dropbear.id.au" Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Hi Eric, > From: Auger Eric > Sent: Tuesday, March 31, 2020 6:48 PM > To: Liu, Yi L ; qemu-devel@nongnu.org; > alex.williamson@redhat.com; peterx@redhat.com > Cc: pbonzini@redhat.com; mst@redhat.com; david@gibson.dropbear.id.au; Tia= n, > Kevin ; Tian, Jun J ; Sun, Yi= Y > ; kvm@vger.kernel.org; Wu, Hao ; je= an- > philippe@linaro.org; Jacob Pan ; Yi Sun > > Subject: Re: [PATCH v2 08/22] vfio/common: provide PASID alloc/free hooks >=20 > Yi, >=20 > On 3/30/20 6:24 AM, Liu Yi L wrote: > > This patch defines vfio_host_iommu_context_info, implements the PASID > > alloc/free hooks defined in HostIOMMUContextClass. > > > > Cc: Kevin Tian > > Cc: Jacob Pan > > Cc: Peter Xu > > Cc: Eric Auger > > Cc: Yi Sun > > Cc: David Gibson > > Cc: Alex Williamson > > Signed-off-by: Liu Yi L > > --- > > hw/vfio/common.c | 69 +++++++++++++++++++++++++++= ++++++++ > > include/hw/iommu/host_iommu_context.h | 3 ++ > > include/hw/vfio/vfio-common.h | 4 ++ > > 3 files changed, 76 insertions(+) > > > > diff --git a/hw/vfio/common.c b/hw/vfio/common.c index > > c276732..5f3534d 100644 > > --- a/hw/vfio/common.c > > +++ b/hw/vfio/common.c > > @@ -1179,6 +1179,53 @@ static int vfio_get_iommu_type(VFIOContainer > *container, > > return -EINVAL; > > } > > > > +static int vfio_host_iommu_ctx_pasid_alloc(HostIOMMUContext *iommu_ctx= , > > + uint32_t min, uint32_t max, > > + uint32_t *pasid) { > > + VFIOContainer *container =3D container_of(iommu_ctx, > > + VFIOContainer, iommu_ctx); > > + struct vfio_iommu_type1_pasid_request req; > > + unsigned long argsz; > you can easily avoid using argsz variable oh, right. :-) > > + int ret; > > + > > + argsz =3D sizeof(req); > > + req.argsz =3D argsz; > > + req.flags =3D VFIO_IOMMU_PASID_ALLOC; > > + req.alloc_pasid.min =3D min; > > + req.alloc_pasid.max =3D max; > > + > > + if (ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req)) { > > + ret =3D -errno; > > + error_report("%s: %d, alloc failed", __func__, ret); > better use %m directly or strerror(errno) also include vbasedev->name? or yes, vbasedev->name is also nice to have. > > + return ret; > > + } > > + *pasid =3D req.alloc_pasid.result; > > + return 0; > > +} > > + > > +static int vfio_host_iommu_ctx_pasid_free(HostIOMMUContext *iommu_ctx, > > + uint32_t pasid) { > > + VFIOContainer *container =3D container_of(iommu_ctx, > > + VFIOContainer, iommu_ctx); > > + struct vfio_iommu_type1_pasid_request req; > > + unsigned long argsz; > same got it. > > + int ret; > > + > > + argsz =3D sizeof(req); > > + req.argsz =3D argsz; > > + req.flags =3D VFIO_IOMMU_PASID_FREE; > > + req.free_pasid =3D pasid; > > + > > + if (ioctl(container->fd, VFIO_IOMMU_PASID_REQUEST, &req)) { > > + ret =3D -errno; > > + error_report("%s: %d, free failed", __func__, ret); > same yep. > > + return ret; > > + } > > + return 0; > > +} > > + > > static int vfio_init_container(VFIOContainer *container, int group_fd, > > Error **errp) { @@ -1791,3 +1838,25 > > @@ int vfio_eeh_as_op(AddressSpace *as, uint32_t op) > > } > > return vfio_eeh_container_op(container, op); } > > + > > +static void vfio_host_iommu_context_class_init(ObjectClass *klass, > > + void *data) { > > + HostIOMMUContextClass *hicxc =3D HOST_IOMMU_CONTEXT_CLASS(klass); > > + > > + hicxc->pasid_alloc =3D vfio_host_iommu_ctx_pasid_alloc; > > + hicxc->pasid_free =3D vfio_host_iommu_ctx_pasid_free; } > > + > > +static const TypeInfo vfio_host_iommu_context_info =3D { > > + .parent =3D TYPE_HOST_IOMMU_CONTEXT, > > + .name =3D TYPE_VFIO_HOST_IOMMU_CONTEXT, > > + .class_init =3D vfio_host_iommu_context_class_init, > Ah OK >=20 > This is the object inheriting from the abstract TYPE_HOST_IOMMU_CONTEXT. yes. it is. :-) > I initially thought VTDHostIOMMUContext was, sorry for the misunderstandi= ng. Ah, my fault, should have got it earlier. so we may have just aligned in last Oct. > Do you expect other HostIOMMUContext backends? Given the name and ops, it > looks really related to VFIO? For other backends, I guess you mean other passthru modules? If yes, I think they should have their own type name. Just like vIOMMUs, the below vIOMMUs defines their own type name and inherits the same parent. static const TypeInfo vtd_iommu_memory_region_info =3D { .parent =3D TYPE_IOMMU_MEMORY_REGION, .name =3D TYPE_INTEL_IOMMU_MEMORY_REGION, .class_init =3D vtd_iommu_memory_region_class_init, }; static const TypeInfo smmuv3_iommu_memory_region_info =3D { .parent =3D TYPE_IOMMU_MEMORY_REGION, .name =3D TYPE_SMMUV3_IOMMU_MEMORY_REGION, .class_init =3D smmuv3_iommu_memory_region_class_init, }; static const TypeInfo amdvi_iommu_memory_region_info =3D { .parent =3D TYPE_IOMMU_MEMORY_REGION, .name =3D TYPE_AMD_IOMMU_MEMORY_REGION, .class_init =3D amdvi_iommu_memory_region_class_init, }; Regards, Yi Liu