All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tian, Kevin" <kevin.tian@intel.com>
To: "Lan, Tianyu" <tianyu.lan@intel.com>,
	"xen-devel@lists.xen.org" <xen-devel@lists.xen.org>
Cc: "wei.liu2@citrix.com" <wei.liu2@citrix.com>,
	"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>,
	"ian.jackson@eu.citrix.com" <ian.jackson@eu.citrix.com>,
	"julien.grall@arm.com" <julien.grall@arm.com>,
	"jbeulich@suse.com" <jbeulich@suse.com>,
	"Gao, Chao" <chao.gao@intel.com>
Subject: Re: [PATCH V2 1/25] VIOMMU: Add vIOMMU helper functions to create, destroy and query capabilities
Date: Thu, 24 Aug 2017 08:14:47 +0000	[thread overview]
Message-ID: <AADFC41AFE54684AB9EE6CBC0274A5D190D80F8E@SHSMSX101.ccr.corp.intel.com> (raw)
In-Reply-To: <1503015736-22315-1-git-send-email-tianyu.lan@intel.com>

> From: Lan, Tianyu
> Sent: Friday, August 18, 2017 8:22 AM
> 
> This patch is to introduct an abstract layer for arch vIOMMU
> implementation
> to deal with requests from dom0. Arch vIOMMU code needs to provide
> callback
> to perform create, destroy and query capabilities operation.
> 
> Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
> ---
>  xen/arch/x86/Kconfig     |   1 +
>  xen/arch/x86/setup.c     |   1 +
>  xen/common/Kconfig       |   3 +
>  xen/common/Makefile      |   1 +
>  xen/common/domain.c      |   3 +
>  xen/common/viommu.c      | 165
> +++++++++++++++++++++++++++++++++++++++++++++++
>  xen/include/xen/sched.h  |   2 +
>  xen/include/xen/viommu.h |  71 ++++++++++++++++++++
>  8 files changed, 247 insertions(+)
>  create mode 100644 xen/common/viommu.c
>  create mode 100644 xen/include/xen/viommu.h
> 
> diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig
> index 30c2769..1f1de96 100644
> --- a/xen/arch/x86/Kconfig
> +++ b/xen/arch/x86/Kconfig
> @@ -23,6 +23,7 @@ config X86
>  	select HAS_PDX
>  	select NUMA
>  	select VGA
> +	select VIOMMU
> 
>  config ARCH_DEFCONFIG
>  	string
> diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
> index db5df69..68f1631 100644
> --- a/xen/arch/x86/setup.c
> +++ b/xen/arch/x86/setup.c
> @@ -1513,6 +1513,7 @@ void __init noreturn __start_xen(unsigned long
> mbi_p)
>      early_msi_init();
> 
>      iommu_setup();    /* setup iommu if available */
> +    viommu_setup();

start_xen is about physical bits, why placing viommu stuff here?

> 
>      smp_prepare_cpus(max_cpus);
> 
> diff --git a/xen/common/Kconfig b/xen/common/Kconfig
> index dc8e876..2ad2c8d 100644
> --- a/xen/common/Kconfig
> +++ b/xen/common/Kconfig
> @@ -49,6 +49,9 @@ config HAS_CHECKPOLICY
>  	string
>  	option env="XEN_HAS_CHECKPOLICY"
> 
> +config VIOMMU
> +	bool
> +
>  config KEXEC
>  	bool "kexec support"
>  	default y
> diff --git a/xen/common/Makefile b/xen/common/Makefile
> index 26c5a64..852553d 100644
> --- a/xen/common/Makefile
> +++ b/xen/common/Makefile
> @@ -56,6 +56,7 @@ obj-y += time.o
>  obj-y += timer.o
>  obj-y += trace.o
>  obj-y += version.o
> +obj-$(CONFIG_VIOMMU) += viommu.o
>  obj-y += virtual_region.o
>  obj-y += vm_event.o
>  obj-y += vmap.o
> diff --git a/xen/common/domain.c b/xen/common/domain.c
> index b22aacc..d1f9b10 100644
> --- a/xen/common/domain.c
> +++ b/xen/common/domain.c
> @@ -396,6 +396,9 @@ struct domain *domain_create(domid_t domid,
> unsigned int domcr_flags,
>          spin_unlock(&domlist_update_lock);
>      }
> 
> +    if ( (err = viommu_init_domain(d)) != 0 )
> +        goto fail;
> +

though viommu framework is common, it's better to have arch
specific code invoke above function based on their own 
requirement (e.g. if any dependency required to enforce)

>      return d;
> 
>   fail:
> diff --git a/xen/common/viommu.c b/xen/common/viommu.c
> new file mode 100644
> index 0000000..6874d9f
> --- /dev/null
> +++ b/xen/common/viommu.c
> @@ -0,0 +1,165 @@
> +/*
> + * common/viommu.c
> + *
> + * Copyright (c) 2017 Intel Corporation
> + * Author: Lan Tianyu <tianyu.lan@intel.com>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of
> MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
> License for
> + * more details.
> + *
> + * You should have received a copy of the GNU General Public License
> along with
> + * this program; If not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include <xen/sched.h>
> +#include <xen/spinlock.h>
> +#include <xen/types.h>
> +#include <xen/viommu.h>
> +
> +bool __read_mostly opt_viommu;
> +boolean_param("viommu", opt_viommu);
> +
> +static spinlock_t type_list_lock;
> +static struct list_head type_list;
> +
> +struct viommu_type {
> +    u64 type;

please add some comment what 'type' stands for.

> +    struct viommu_ops *ops;
> +    struct list_head node;
> +};
> +
> +int viommu_init_domain(struct domain *d)
> +{
> +    d->viommu.nr_viommu = 0;
> +    return 0;
> +}
> +
> +static struct viommu_type *viommu_get_type(u64 type)
> +{
> +    struct viommu_type *viommu_type = NULL;
> +
> +    spin_lock(&type_list_lock);
> +    list_for_each_entry( viommu_type, &type_list, node )
> +    {
> +        if ( viommu_type->type == type )
> +        {
> +            spin_unlock(&type_list_lock);
> +            return viommu_type;
> +        }
> +    }
> +    spin_unlock(&type_list_lock);
> +
> +    return NULL;
> +}
> +
> +int viommu_register_type(u64 type, struct viommu_ops * ops)
> +{
> +    struct viommu_type *viommu_type = NULL;
> +
> +    if ( !viommu_enabled() )
> +        return -EINVAL;

shouldn't above be domain specific check?

Thanks
Kevin

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  parent reply	other threads:[~2017-08-24  8:14 UTC|newest]

Thread overview: 136+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-09 20:34 [PATCH V2 00/25] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion of virtual vtd Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 1/25] DOMCTL: Introduce new DOMCTL commands for vIOMMU support Lan Tianyu
2017-08-17 11:18   ` Wei Liu
2017-08-18  2:57     ` Lan Tianyu
2017-08-22 14:32   ` Roger Pau Monné
2017-08-23  6:06     ` Lan Tianyu
2017-08-23  7:22       ` Roger Pau Monné
2017-08-23  9:12         ` Lan Tianyu
2017-08-23 10:19         ` Julien Grall
2017-08-23 14:05           ` Roger Pau Monné
2017-08-24 14:03             ` Julien Grall
2017-08-24 14:25               ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 2/25] VIOMMU: Add irq request callback to deal with irq remapping Lan Tianyu
2017-08-17 11:18   ` Wei Liu
2017-08-18  0:22     ` [PATCH V2 1/25] VIOMMU: Add vIOMMU helper functions to create, destroy and query capabilities Lan Tianyu
2017-08-18  8:41       ` Jan Beulich
2017-08-18  8:50         ` Lan Tianyu
2017-08-18 13:32       ` Wei Liu
2017-08-22 15:27       ` Roger Pau Monné
2017-08-23  7:10         ` Lan Tianyu
2017-08-23  7:38           ` Roger Pau Monné
2017-08-24  8:14       ` Tian, Kevin [this message]
2017-08-18  7:09     ` [PATCH V2 2/25] VIOMMU: Add irq request callback to deal with irq remapping Lan Tianyu
2017-08-18 10:13       ` Wei Liu
2017-08-22  8:04         ` Lan Tianyu
2017-08-22  8:42           ` Wei Liu
2017-08-22 10:39             ` Lan Tianyu
2017-08-22 10:53               ` Wei Liu
2017-08-22 10:54                 ` Lan Tianyu
2017-08-22 15:32   ` Roger Pau Monné
2017-08-23  7:42     ` Lan Tianyu
2017-08-23  9:24       ` Jan Beulich
2017-08-23  9:47         ` Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 3/25] VIOMMU: Add get irq info callback to convert irq remapping request Lan Tianyu
2017-08-17 11:19   ` Wei Liu
2017-08-22 15:38   ` Roger Pau Monné
2017-08-23  7:43     ` Lan Tianyu
2017-08-23  9:25     ` Jan Beulich
2017-08-09 20:34 ` [PATCH V2 4/25] Xen/doc: Add Xen virtual IOMMU doc Lan Tianyu
2017-08-17 11:19   ` Wei Liu
2017-08-18  7:17     ` Lan Tianyu
2017-08-18 10:15       ` Wei Liu
2017-08-22  8:07         ` Lan Tianyu
2017-08-22 11:03           ` Wei Liu
2017-08-23  2:06             ` Lan Tianyu
2017-08-22 15:55   ` Roger Pau Monné
2017-08-23  7:36     ` Lan Tianyu
2017-08-23 13:53       ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 5/25] tools/libxc: Add viommu operations in libxc Lan Tianyu
2017-08-22 11:09   ` Wei Liu
2017-08-22 16:25   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 6/25] tools/libacpi: Add DMA remapping reporting (DMAR) ACPI table structures Lan Tianyu
2017-08-22 12:56   ` Wei Liu
2017-08-23  2:47     ` Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 7/25] tools/libacpi: Add new fields in acpi_config for DMAR table Lan Tianyu
2017-08-22 13:12   ` Wei Liu
2017-08-23  2:36     ` Lan Tianyu
2017-08-23  8:07       ` Wei Liu
2017-08-22 16:41   ` Roger Pau Monné
2017-08-23  7:52     ` Lan Tianyu
2017-08-23  8:04       ` Roger Pau Monné
2017-08-23 14:11         ` Roger Pau Monné
2017-08-24  2:33         ` Lan Tianyu
2017-08-24  6:54           ` Jan Beulich
2017-08-24  8:36             ` Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 8/25] tools/libxl: Add a user configurable parameter to control vIOMMU attributes Lan Tianyu
2017-08-22 13:19   ` Wei Liu
2017-08-23  2:46     ` Lan Tianyu
2017-08-23  8:09       ` Wei Liu
2017-08-22 16:48   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 9/25] tools/libxl: build DMAR table for a guest with one virtual VTD Lan Tianyu
2017-08-17 11:32   ` Wei Liu
2017-08-17 12:28     ` Wei Liu
2017-08-18  5:45       ` Chao Gao
2017-08-18 13:45         ` Wei Liu
2017-08-18 13:56           ` Jan Beulich
2017-08-22 13:44             ` Wei Liu
2017-08-22 13:48         ` Wei Liu
2017-08-23  5:35           ` Lan Tianyu
2017-08-23  8:34             ` Wei Liu
2017-08-24  3:24               ` Lan Tianyu
2017-08-24 11:08                 ` Wei Liu
2017-08-25  3:19                   ` Lan Tianyu
2017-08-25  7:33                     ` Lan Tianyu
2017-08-25  9:11                       ` Wei Liu
2017-08-09 20:34 ` [PATCH V2 10/25] tools/libxl: create vIOMMU during domain construction Lan Tianyu
2017-08-23  7:45   ` Roger Pau Monné
2017-08-23  8:02     ` Lan Tianyu
2017-08-23 13:53       ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 11/25] x86/hvm: Introduce a emulated VTD for HVM Lan Tianyu
2017-08-23  7:58   ` Roger Pau Monné
2017-08-24  2:16     ` Lan Tianyu
2017-08-24  8:49       ` Roger Pau Monné
2017-08-24  8:54         ` Lan Tianyu
2017-08-24  9:02           ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 12/25] x86/vvtd: Add MMIO handler for VVTD Lan Tianyu
2017-08-23  8:27   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 13/25] x86/vvtd: Set Interrupt Remapping Table Pointer through GCMD Lan Tianyu
2017-08-23  8:47   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 14/25] x86/vvtd: Process interrupt remapping request Lan Tianyu
2017-08-23  9:49   ` Roger Pau Monné
2017-08-23  9:59     ` Jan Beulich
2017-08-09 20:34 ` [PATCH V2 15/25] x86/vvtd: decode interrupt attribute from IRTE Lan Tianyu
2017-08-23  9:57   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 16/25] x86/vioapic: Hook interrupt delivery of vIOAPIC Lan Tianyu
2017-08-23  9:59   ` Roger Pau Monné
2017-08-24  5:28     ` Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 17/25] x86/vvtd: Enable Queued Invalidation through GCMD Lan Tianyu
2017-08-23 10:03   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 18/25] x86/vvtd: Enable Interrupt Remapping " Lan Tianyu
2017-08-23 10:07   ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 19/25] x86/vioapic: extend vioapic_get_vector() to support remapping format RTE Lan Tianyu
2017-08-23 10:14   ` Roger Pau Monné
2017-08-24  6:11     ` Lan Tianyu
2017-08-24  6:59       ` Jan Beulich
2017-08-24  8:04         ` Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 20/25] passthrough: move some fields of hvm_gmsi_info to a sub-structure Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 21/25] tools/libxc: Add a new interface to bind remapping format msi with pirq Lan Tianyu
2017-08-23 10:41   ` Roger Pau Monné
2017-08-25  7:28     ` Chao Gao
2017-08-25  9:35       ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 22/25] x86/vmsi: Hook delivering remapping format msi to guest Lan Tianyu
2017-08-23 10:55   ` Roger Pau Monné
2017-08-23 12:17     ` Jan Beulich
2017-08-09 20:34 ` [PATCH V2 23/25] x86/vvtd: Handle interrupt translation faults Lan Tianyu
2017-08-23 11:51   ` Roger Pau Monné
2017-08-25  7:17     ` Chao Gao
2017-08-25  9:43       ` Roger Pau Monné
2017-08-09 20:34 ` [PATCH V2 24/25] x86/vvtd: Add queued invalidation (QI) support Lan Tianyu
2017-08-23 12:16   ` Roger Pau Monné
2017-08-24  6:31     ` Lan Tianyu
2017-08-09 20:34 ` [PATCH V2 25/25] x86/vvtd: save and restore emulated VT-d Lan Tianyu
2017-08-23 12:19   ` Roger Pau Monné
2017-08-25  6:35     ` Chao Gao
2017-08-25  9:00       ` Jan Beulich
2017-08-25  8:27         ` Chao Gao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=AADFC41AFE54684AB9EE6CBC0274A5D190D80F8E@SHSMSX101.ccr.corp.intel.com \
    --to=kevin.tian@intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.gao@intel.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=tianyu.lan@intel.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.