From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Lan Tianyu <tianyu.lan@intel.com>
Cc: andrew.cooper3@citrix.com, kevin.tian@intel.com,
chao.gao@intel.com, jbeulich@suse.com, xen-devel@lists.xen.org
Subject: Re: [RFC PATCH 2/23] DMOP: Introduce new DMOP commands for vIOMMU support
Date: Tue, 18 Apr 2017 09:32:33 -0400 [thread overview]
Message-ID: <20170418133233.GD25159@char.us.oracle.com> (raw)
In-Reply-To: <d9c8e991-67e1-835d-dea9-1d2279c83fb3@intel.com>
On Tue, Apr 18, 2017 at 03:24:35PM +0800, Lan Tianyu wrote:
> Hi Konrad:
> Thanks for your review.
>
> On 2017年04月17日 22:36, Konrad Rzeszutek Wilk wrote:
> > On Fri, Mar 17, 2017 at 07:27:02PM +0800, Lan Tianyu wrote:
> >> This patch is to introduce create, destroy and query capabilities
> >> command for vIOMMU. vIOMMU layer will deal with requests and call
> >> arch vIOMMU ops.
> >>
> >> Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
> >> ---
> >> xen/arch/x86/hvm/dm.c | 29 +++++++++++++++++++++++++++++
> >> xen/include/public/hvm/dm_op.h | 39 +++++++++++++++++++++++++++++++++++++++
> >> 2 files changed, 68 insertions(+)
> >>
> >> diff --git a/xen/arch/x86/hvm/dm.c b/xen/arch/x86/hvm/dm.c
> >> index 2122c45..2b28f70 100644
> >> --- a/xen/arch/x86/hvm/dm.c
> >> +++ b/xen/arch/x86/hvm/dm.c
> >> @@ -491,6 +491,35 @@ static int dm_op(domid_t domid,
> >> break;
> >> }
> >>
> >> + case XEN_DMOP_create_viommu:
> >> + {
> >> + struct xen_dm_op_create_viommu *data =
> >> + &op.u.create_viommu;
> >> +
> >> + rc = viommu_create(d, data->base_address, data->length, data->capabilities);
> >> + if (rc >= 0) {
> >
> > The style guide is is to have a space here and { on a newline.
>
> Yes, will fix.
>
> >
> >> + data->viommu_id = rc;
> >> + rc = 0;
> >> + }
> >> + break;
> >> + }
> >
> > Newline here..
> >
> >
> >> + case XEN_DMOP_destroy_viommu:
> >> + {
> >> + const struct xen_dm_op_destroy_viommu *data =
> >> + &op.u.destroy_viommu;
> >> +
> >> + rc = viommu_destroy(d, data->viommu_id);
> >> + break;
> >> + }
> >
> > Ahem?
> >> + case XEN_DMOP_query_viommu_caps:
> >> + {
> >> + struct xen_dm_op_query_viommu_caps *data =
> >> + &op.u.query_viommu_caps;
> >> +
> >> + data->caps = viommu_query_caps(d);
> >> + rc = 0;
> >> + break;
> >> + }
> >
> > And here.
> >> default:
> >> rc = -EOPNOTSUPP;
> >> break;
> >> diff --git a/xen/include/public/hvm/dm_op.h b/xen/include/public/hvm/dm_op.h
> >> index f54cece..b8c7359 100644
> >> --- a/xen/include/public/hvm/dm_op.h
> >> +++ b/xen/include/public/hvm/dm_op.h
> >> @@ -318,6 +318,42 @@ struct xen_dm_op_inject_msi {
> >> uint64_aligned_t addr;
> >> };
> >>
> >> +/*
> >> + * XEN_DMOP_create_viommu: Create vIOMMU device.
> >> + */
> >> +#define XEN_DMOP_create_viommu 15
> >> +
> >> +struct xen_dm_op_create_viommu {
> >> + /* IN - MMIO base address of vIOMMU */
> >
> > Any limit? Can it be zero?
>
> In current patchset, base address is allocated by toolstack and passed
> to Qemu to create vIOMMU in hyervisor. Toolstack should make sure the
> range won't be conflicted with other resource.
Sure, but the hypervisor should also do some sanity checking. Having some idea
of limits/sizes would be quite helpfull. Either in the code or in this
comment.
>
> >
> >> + uint64_t base_address;
> >> + /* IN - Length of MMIO region */
> >
> > Any restrictions? Can it be say 2 bytes? Or is this in page-size granularity?
>
> >From the VTD spec, register size must be an integer multiple of 4KB and
> I think the vIOMMU device model(E,G vvtd) in hypervisor should check the
> lengh. Different vendor may have different restriction.
Right, but I thinking you should document this, or at least make it clear
what the expectations are.
>
> >
> >> + uint64_t length;
> >> + /* IN - Capabilities with which we want to create */
> >> + uint64_t capabilities;
> >
> > That sounds like some form of flags?
>
> Yes, this patchset just introduces interrupt remapping flag and other
> vendor also can use it to add new features.
>
> >
> >> + /* OUT - vIOMMU identity */
> >> + uint32_t viommu_id;
> >> +};
> >> +
> >> +/*
> >> + * XEN_DMOP_destroy_viommu: Destroy vIOMMU device.
> >> + */
> >> +#define XEN_DMOP_destroy_viommu 16
> >> +
> >> +struct xen_dm_op_destroy_viommu {
> >> + /* OUT - vIOMMU identity */
> >
> > Out? Not in?
>
> Sorry, it should be OUT parameter.
>
> >
> >> + uint32_t viommu_id;
> >> +};
> >> +
> >> +/*
> >> + * XEN_DMOP_q_viommu: Query vIOMMU capabilities.
> >> + */
> >> +#define XEN_DMOP_query_viommu_caps 17
> >> +
> >> +struct xen_dm_op_query_viommu_caps {
> >> + /* OUT - vIOMMU Capabilities*/
> >
> > Don't you need to also mention which vIOMMU? As you
> > could have potentially many of them?
>
> If we want to support different vendors' vIOMMU, it's necessary to do
> that and we need to introduce a new field "vIOMMU type" (E,G Intel, AMD
> and ARM IOMMU).
Right, but the 'xen_dm_op_create_viommu' has the capabilities
and retuirns the vIOMMU identity. It looks like it could be called
multiple times which means you could have multiple vIOMMU and
each could have a different capability.
As such this call should also have as IN the vIOMMU identity
to at least be symmetrical with the other hypercalls.
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-04-18 13:32 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-17 11:27 [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 1/23] VIOMMU: Add vIOMMU helper functions to create, destroy and query capabilities Lan Tianyu
2017-03-21 19:56 ` Julien Grall
2017-03-22 8:36 ` Tian, Kevin
2017-03-22 12:41 ` Lan, Tianyu
2017-03-22 8:45 ` Lan Tianyu
2017-03-22 11:40 ` Julien Grall
2017-03-22 13:32 ` Lan, Tianyu
2017-03-17 11:27 ` [RFC PATCH 2/23] DMOP: Introduce new DMOP commands for vIOMMU support Lan Tianyu
2017-04-17 14:36 ` Konrad Rzeszutek Wilk
2017-04-18 7:24 ` Lan Tianyu
2017-04-18 13:32 ` Konrad Rzeszutek Wilk [this message]
2017-03-17 11:27 ` [RFC PATCH 3/23] VIOMMU: Add irq request callback to deal with irq remapping Lan Tianyu
2017-04-17 14:39 ` Konrad Rzeszutek Wilk
2017-04-18 8:18 ` Lan Tianyu
2017-04-18 13:36 ` Konrad Rzeszutek Wilk
2017-03-17 11:27 ` [RFC PATCH 4/23] VIOMMU: Add get irq info callback to convert irq remapping request Lan Tianyu
2017-04-17 14:39 ` Konrad Rzeszutek Wilk
2017-03-17 11:27 ` [RFC PATCH 5/23] Tools/libxc: Add viommu operations in libxc Lan Tianyu
2017-03-28 16:24 ` Wei Liu
2017-03-29 0:40 ` Chao Gao
2017-03-29 9:08 ` Paul Durrant
2017-03-30 19:57 ` Chao Gao
2017-04-14 15:38 ` Lan, Tianyu
2017-04-17 11:08 ` Wei Liu
2017-04-17 12:01 ` Lan Tianyu
2017-05-11 12:35 ` Wei Liu
2017-05-11 12:31 ` Lan Tianyu
2017-04-18 9:08 ` Paul Durrant
2017-04-18 9:59 ` Lan Tianyu
2017-04-18 14:15 ` Paul Durrant
2017-04-19 12:21 ` Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 6/23] Tools/libacpi: Add DMA remapping reporting (DMAR) ACPI table structures Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 7/23] Tools/libacpi: Add new fields in acpi_config to build DMAR table Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 8/23] Tools/libacpi: Add a user configurable parameter to control vIOMMU attributes Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 9/23] Tools/libxl: Inform device model to create a guest with a vIOMMU device Lan Tianyu
2017-03-28 16:24 ` Wei Liu
2017-03-17 11:27 ` [RFC PATCH 10/23] x86/hvm: Introduce a emulated VTD for HVM Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 11/23] X86/vvtd: Add MMIO handler for VVTD Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 12/23] X86/vvtd: Set Interrupt Remapping Table Pointer through GCMD Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 13/23] X86/vvtd: Process interrupt remapping request Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 14/23] X86/vvtd: decode interrupt attribute from IRTE Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 15/23] X86/vioapic: Hook interrupt delivery of vIOAPIC Lan Tianyu
2017-04-17 14:43 ` Konrad Rzeszutek Wilk
2017-04-18 8:34 ` Lan Tianyu
2017-04-18 13:37 ` Konrad Rzeszutek Wilk
2017-03-17 11:27 ` [RFC PATCH 16/23] X86/vvtd: Enable Queued Invalidation through GCMD Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 17/23] X86/vvtd: Enable Interrupt Remapping " Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 18/23] x86/vpt: Get interrupt vector through a vioapic interface Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 19/23] passthrough: move some fields of hvm_gmsi_info to a sub-structure Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 20/23] Tools/libxc: Add a new interface to bind msi-ir with pirq Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 21/23] X86/vmsi: Hook guest MSI injection Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 22/23] X86/vvtd: Handle interrupt translation faults Lan Tianyu
2017-03-17 11:27 ` [RFC PATCH 23/23] X86/vvtd: Add queued invalidation (QI) support Lan Tianyu
2017-03-20 14:23 ` [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform Roger Pau Monné
2017-03-21 2:28 ` Lan Tianyu
2017-03-21 5:29 ` Lan Tianyu
2017-03-29 8:00 ` Roger Pau Monné
2017-03-29 3:52 ` Chao Gao
2017-04-17 14:41 ` Konrad Rzeszutek Wilk
2017-04-18 8:19 ` Lan Tianyu
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=20170418133233.GD25159@char.us.oracle.com \
--to=konrad.wilk@oracle.com \
--cc=andrew.cooper3@citrix.com \
--cc=chao.gao@intel.com \
--cc=jbeulich@suse.com \
--cc=kevin.tian@intel.com \
--cc=tianyu.lan@intel.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.