xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Julien Grall <julien.grall@arm.com>
To: "Roger Pau Monné" <roger.pau@citrix.com>
Cc: Lan Tianyu <tianyu.lan@intel.com>,
	kevin.tian@intel.com, wei.liu2@citrix.com,
	andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com,
	xen-devel@lists.xen.org, jbeulich@suse.com, chao.gao@intel.com
Subject: Re: [PATCH V2 1/25] DOMCTL: Introduce new DOMCTL commands for vIOMMU support
Date: Thu, 24 Aug 2017 15:03:49 +0100	[thread overview]
Message-ID: <f08c62b2-fb68-b5d2-b5f8-c67bb90efaf7@arm.com> (raw)
In-Reply-To: <20170823140544.xgm4qtywubajmf5n@dhcp-3-128.uk.xensource.com>

Hi,

On 23/08/17 15:05, Roger Pau Monné wrote:
> On Wed, Aug 23, 2017 at 11:19:01AM +0100, Julien Grall wrote:
>> Hi Roger,
>>
>> On 23/08/17 08:22, Roger Pau Monné wrote:
>>> On Wed, Aug 23, 2017 at 02:06:17PM +0800, Lan Tianyu wrote:
>>>> Hi Roger:
>>>> 	Thanks for your review.
>>>>
>>>> On 2017年08月22日 22:32, Roger Pau Monné wrote:
>>>>> On Wed, Aug 09, 2017 at 04:34:02PM -0400, Lan Tianyu wrote:
>>>>>> +
>>>>>> +/* vIOMMU capabilities */
>>>>>> +#define VIOMMU_CAP_IRQ_REMAPPING  (1u << 0)
>>>>>> +
>>>>>> +struct xen_domctl_viommu_op {
>>>>>> +    uint32_t cmd;
>>>>>> +#define XEN_DOMCTL_create_viommu          0
>>>>>> +#define XEN_DOMCTL_destroy_viommu         1
>>>>>> +#define XEN_DOMCTL_query_viommu_caps      2
>>>>>> +    union {
>>>>>> +        struct {
>>>>>> +            /* IN - vIOMMU type */
>>>>>> +            uint64_t viommu_type;
>>>>>> +            /*
>>>>>> +             * IN - MMIO base address of vIOMMU. vIOMMU device models
>>>>>> +             * are in charge of to check base_address and length.
>>>>>> +             */
>>>>>> +            uint64_t base_address;
>>>>>> +            /* IN - Length of MMIO region */
>>>>>> +            uint64_t length;
>>>>>
>>>>> It seems weird that you can specify the length, is that something
>>>>> that a user would like to set? Isn't the length of the IOMMU MMIO
>>>>> region fixed by the hardware spec?
>>>>
>>>> Different vendor may have different IOMMU register region sizes. (e.g,
>>>> VTD has one page size for register region). The length field is to make
>>>> vIOMMU device model not to abuse address space. Some registers' offsets
>>>> are reported by other register and these offsets are emulated by vIOMMU
>>>> device model. If it's not necessary, we can remove it and add it when
>>>> there is real such requirement.
>>>
>>> So from my understanding the size of the IOMMU MMIO region is implicit
>>> in the IOMMU type that the user chooses. I don't think this field is
>>> needed.
>>
>> To me, it makes more sense to care both the base and the size rather than
>> only the former.
>>
>> The toolstack is in charge of the address space and should be aware of the
>> size of everything. This address space may not be static and it makes sense
>> to give this information to Xen and verify we had the same assumption.
>
> Does this imply that we will have variable size vIOMMU MMIO regions?

There are existing IOMMU with multiple MMIO regions. This is the case of 
the Nvidia SMMU. Whether we will emulate then is another question. But 
for completeness, I would use address/size.

Note that we haven't decided on ARM whether we will emulate the IOMMU or 
use a PV based solution.

>
> If not the toolstack should know the size of the MMIO region at all
> times, unless you are running a toolstack version != Xen version,
> which is not supported.
>
>>>
>>>>>
>>>>>> +            /* IN - Capabilities with which we want to create */
>>>>>> +            uint64_t capabilities;
>>>>>> +            /* OUT - vIOMMU identity */
>>>>>> +            uint32_t viommu_id;
>>>>>> +        } create_viommu;
>>>>>> +
>>>>>> +        struct {
>>>>>> +            /* IN - vIOMMU identity */
>>>>>> +            uint32_t viommu_id;
>>>>>> +        } destroy_viommu;
>>>>>> +
>>>>>> +        struct {
>>>>>> +            /* IN - vIOMMU type */
>>>>>> +            uint64_t viommu_type;
>>>>>> +            /* OUT - vIOMMU Capabilities */
>>>>>> +            uint64_t capabilities;
>>>>>> +        } query_caps;
>>>>>
>>>>> This also seems weird, shouldn't you query the capabilities of an
>>>>> already created vIOMMU, rather than a vIOMMU type? Shouldn't the first
>>>>> field be viommu_id?
>>>>>
>>>>
>>>> Query interface here is to check what capabilities the vIOMMU device
>>>> model specified by viommu_type can support before create vIOMMU (suppose
>>>> user may select different capabilities). If capabilities returned by
>>>> query interface doesn't meet user configuration, tool stack should
>>>> return error. So it just accepts viommu_type.
>>>
>>> I don't think that's needed, if the chosen capabilities are not
>>> supported by the selected IOMMU type simply return error in
>>> XEN_DOMCTL_create_viommu.
>>>
>>> The capabilities of each IOMMU type should be listed in the man page,
>>> and the user should select a supported set or else
>>> XEN_DOMCTL_create_viommu will fail. Doing the checks both in the
>>> toolstack and in XEN_DOMCTL_create_viommu seems pointless and prone to
>>> errors.
>>
>> What if the some capabilities depends on host IOMMU? How are you going to
>> report that to the user?
>
> I would print a message on the hypervisor console, I don't see the
> value of doing the same check in the toolstack that Xen will also need
> to do in XEN_DOMCTL_create_viommu.
>
> I would see value on having such a query hypercall once we have an
> implementation that indeed has different capabilities depending on the
> hardware, and once a xl command to fetch and print such capabilities
> is introduced.

Fair enough.


> As said, the above query is only used to perform the checks done in
> XEN_DOMCTL_create_viommu on the toolstack.

Cheers,

-- 
Julien Grall

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

  reply	other threads:[~2017-08-24 14:03 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 [this message]
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
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=f08c62b2-fb68-b5d2-b5f8-c67bb90efaf7@arm.com \
    --to=julien.grall@arm.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.gao@intel.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=kevin.tian@intel.com \
    --cc=roger.pau@citrix.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).