Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-04-18 Thread Lan Tianyu
On 2017年04月17日 22:41, Konrad Rzeszutek Wilk wrote:
> On Mon, Mar 20, 2017 at 02:23:02PM +, Roger Pau Monné wrote:
>> On Fri, Mar 17, 2017 at 07:27:00PM +0800, Lan Tianyu wrote:
>>> This patchset is to introduce vIOMMU framework and add virtual VTD's
>>> interrupt remapping support according "Xen virtual IOMMU high level
>>> design doc 
>>> V3"(https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.xenproject.org_archives_html_xen-2Ddevel_=DwIGaQ=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10=wAkdPB9j1dAH7AI494B5wFV3Jws7EfB2Q3Sw-K-88Rk=7dZfaODS8zbwpYC0vm7gKQXyM8pBPxfGpz8QMDQzU2k=3hxzmHH4X0gz9Oz5_PYoOmWFTkyETYTFPCqJ9iXD910=
>>>  
>>> 2016-11/msg01391.html).
> 
> It would be awesome if that was as a patch in docs/misc/

Will do that.

> 
> Thanks.
> 
>>>
>>> - vIOMMU framework
>>> New framework provides viommu_ops and help functions to abstract
>>> vIOMMU operations(E,G create, destroy, handle irq remapping request
>>> and so on). Vendors(Intel, ARM, AMD and son) can implement their
>>> vIOMMU callbacks.
>>>
>>> - Xen vIOMMU device model in Qemu 
>>> It's in charge of create/destroy vIOMMU in hypervisor via new vIOMMU
>>> DMOP hypercalls. It will be required to pass virtual devices DMA
>>> request to hypervisor when enable IOVA(DMA request without PASID)
>>> function.
>>>
>>> - Virtual VTD
>>> In this patchset, we enable irq remapping function and covers both
>>> MSI and IOAPIC interrupts. Don't support post interrupt mode emulation
>>> and post interrupt mode enabled on host with virtual VTD. Will add
>>> later.   
>>>
>>> Chao Gao (19):
>>>   Tools/libxc: Add viommu operations in libxc
>>>   Tools/libacpi: Add DMA remapping reporting (DMAR) ACPI table
>>> structures
>>>   Tools/libacpi: Add new fields in acpi_config to build DMAR table
>>>   Tools/libacpi: Add a user configurable parameter to control vIOMMU
>>> attributes
>>>   Tools/libxl: Inform device model to create a guest with a vIOMMU
>>> device
>>>   x86/hvm: Introduce a emulated VTD for HVM
>>>   X86/vvtd: Add MMIO handler for VVTD
>>>   X86/vvtd: Set Interrupt Remapping Table Pointer through GCMD
>>>   X86/vvtd: Process interrupt remapping request
>>>   X86/vvtd: decode interrupt attribute from IRTE
>>>   X86/vioapic: Hook interrupt delivery of vIOAPIC
>>>   X86/vvtd: Enable Queued Invalidation through GCMD
>>>   X86/vvtd: Enable Interrupt Remapping through GCMD
>>>   x86/vpt: Get interrupt vector through a vioapic interface
>>>   passthrough: move some fields of hvm_gmsi_info to a sub-structure
>>>   Tools/libxc: Add a new interface to bind msi-ir with pirq
>>>   X86/vmsi: Hook guest MSI injection
>>>   X86/vvtd: Handle interrupt translation faults
>>>   X86/vvtd: Add queued invalidation (QI) support
>>>
>>> Lan Tianyu (4):
>>>   VIOMMU: Add vIOMMU helper functions to create, destroy and query
>>> capabilities
>>>   DMOP: Introduce new DMOP commands for vIOMMU support
>>>   VIOMMU: Add irq request callback to deal with irq remapping
>>>   VIOMMU: Add get irq info callback to convert irq remapping request
>>>
>>>  tools/libacpi/acpi2_0.h |   45 +
>>>  tools/libacpi/build.c   |   58 ++
>>>  tools/libacpi/libacpi.h |   12 +
>>>  tools/libs/devicemodel/core.c   |   69 ++
>>>  tools/libs/devicemodel/include/xendevicemodel.h |   35 +
>>>  tools/libs/devicemodel/libxendevicemodel.map|3 +
>>>  tools/libxc/include/xenctrl.h   |   17 +
>>>  tools/libxc/include/xenctrl_compat.h|5 +
>>>  tools/libxc/xc_devicemodel_compat.c |   18 +
>>>  tools/libxc/xc_domain.c |   55 +
>>>  tools/libxl/libxl_create.c  |   12 +-
>>>  tools/libxl/libxl_dm.c  |9 +
>>>  tools/libxl/libxl_dom.c |   85 ++
>>>  tools/libxl/libxl_types.idl |8 +
>>>  tools/xl/xl_parse.c |   54 +
>>>  xen/arch/x86/Makefile   |1 +
>>>  xen/arch/x86/hvm/Makefile   |1 +
>>>  xen/arch/x86/hvm/dm.c   |   29 +
>>>  xen/arch/x86/hvm/irq.c  |   10 +
>>>  xen/arch/x86/hvm/vioapic.c  |   36 +
>>>  xen/arch/x86/hvm/vmsi.c |   17 +-
>>>  xen/arch/x86/hvm/vpt.c  |2 +-
>>>  xen/arch/x86/hvm/vvtd.c | 1229 
>>> +++
>>>  xen/arch/x86/viommu.c   |   40 +
>>>  xen/common/Makefile |1 +
>>>  xen/common/domain.c |3 +
>>>  xen/common/viommu.c |  119 +++
>>>  xen/drivers/passthrough/io.c|  183 +++-
>>>  xen/drivers/passthrough/vtd/iommu.h |  213 +++-
>>>  xen/include/asm-arm/viommu.h|   38 +
>>>  xen/include/asm-x86/hvm/vioapic.h   

Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-04-17 Thread Konrad Rzeszutek Wilk
On Mon, Mar 20, 2017 at 02:23:02PM +, Roger Pau Monné wrote:
> On Fri, Mar 17, 2017 at 07:27:00PM +0800, Lan Tianyu wrote:
> > This patchset is to introduce vIOMMU framework and add virtual VTD's
> > interrupt remapping support according "Xen virtual IOMMU high level
> > design doc 
> > V3"(https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.xenproject.org_archives_html_xen-2Ddevel_=DwIGaQ=RoP1YumCXCgaWHvlZYR8PQcxBKCX5YTpkKY057SbK10=wAkdPB9j1dAH7AI494B5wFV3Jws7EfB2Q3Sw-K-88Rk=7dZfaODS8zbwpYC0vm7gKQXyM8pBPxfGpz8QMDQzU2k=3hxzmHH4X0gz9Oz5_PYoOmWFTkyETYTFPCqJ9iXD910=
> >  
> > 2016-11/msg01391.html).

It would be awesome if that was as a patch in docs/misc/

Thanks.

> > 
> > - vIOMMU framework
> > New framework provides viommu_ops and help functions to abstract
> > vIOMMU operations(E,G create, destroy, handle irq remapping request
> > and so on). Vendors(Intel, ARM, AMD and son) can implement their
> > vIOMMU callbacks.
> > 
> > - Xen vIOMMU device model in Qemu 
> > It's in charge of create/destroy vIOMMU in hypervisor via new vIOMMU
> > DMOP hypercalls. It will be required to pass virtual devices DMA
> > request to hypervisor when enable IOVA(DMA request without PASID)
> > function.
> > 
> > - Virtual VTD
> > In this patchset, we enable irq remapping function and covers both
> > MSI and IOAPIC interrupts. Don't support post interrupt mode emulation
> > and post interrupt mode enabled on host with virtual VTD. Will add
> > later.   
> > 
> > Chao Gao (19):
> >   Tools/libxc: Add viommu operations in libxc
> >   Tools/libacpi: Add DMA remapping reporting (DMAR) ACPI table
> > structures
> >   Tools/libacpi: Add new fields in acpi_config to build DMAR table
> >   Tools/libacpi: Add a user configurable parameter to control vIOMMU
> > attributes
> >   Tools/libxl: Inform device model to create a guest with a vIOMMU
> > device
> >   x86/hvm: Introduce a emulated VTD for HVM
> >   X86/vvtd: Add MMIO handler for VVTD
> >   X86/vvtd: Set Interrupt Remapping Table Pointer through GCMD
> >   X86/vvtd: Process interrupt remapping request
> >   X86/vvtd: decode interrupt attribute from IRTE
> >   X86/vioapic: Hook interrupt delivery of vIOAPIC
> >   X86/vvtd: Enable Queued Invalidation through GCMD
> >   X86/vvtd: Enable Interrupt Remapping through GCMD
> >   x86/vpt: Get interrupt vector through a vioapic interface
> >   passthrough: move some fields of hvm_gmsi_info to a sub-structure
> >   Tools/libxc: Add a new interface to bind msi-ir with pirq
> >   X86/vmsi: Hook guest MSI injection
> >   X86/vvtd: Handle interrupt translation faults
> >   X86/vvtd: Add queued invalidation (QI) support
> > 
> > Lan Tianyu (4):
> >   VIOMMU: Add vIOMMU helper functions to create, destroy and query
> > capabilities
> >   DMOP: Introduce new DMOP commands for vIOMMU support
> >   VIOMMU: Add irq request callback to deal with irq remapping
> >   VIOMMU: Add get irq info callback to convert irq remapping request
> > 
> >  tools/libacpi/acpi2_0.h |   45 +
> >  tools/libacpi/build.c   |   58 ++
> >  tools/libacpi/libacpi.h |   12 +
> >  tools/libs/devicemodel/core.c   |   69 ++
> >  tools/libs/devicemodel/include/xendevicemodel.h |   35 +
> >  tools/libs/devicemodel/libxendevicemodel.map|3 +
> >  tools/libxc/include/xenctrl.h   |   17 +
> >  tools/libxc/include/xenctrl_compat.h|5 +
> >  tools/libxc/xc_devicemodel_compat.c |   18 +
> >  tools/libxc/xc_domain.c |   55 +
> >  tools/libxl/libxl_create.c  |   12 +-
> >  tools/libxl/libxl_dm.c  |9 +
> >  tools/libxl/libxl_dom.c |   85 ++
> >  tools/libxl/libxl_types.idl |8 +
> >  tools/xl/xl_parse.c |   54 +
> >  xen/arch/x86/Makefile   |1 +
> >  xen/arch/x86/hvm/Makefile   |1 +
> >  xen/arch/x86/hvm/dm.c   |   29 +
> >  xen/arch/x86/hvm/irq.c  |   10 +
> >  xen/arch/x86/hvm/vioapic.c  |   36 +
> >  xen/arch/x86/hvm/vmsi.c |   17 +-
> >  xen/arch/x86/hvm/vpt.c  |2 +-
> >  xen/arch/x86/hvm/vvtd.c | 1229 
> > +++
> >  xen/arch/x86/viommu.c   |   40 +
> >  xen/common/Makefile |1 +
> >  xen/common/domain.c |3 +
> >  xen/common/viommu.c |  119 +++
> >  xen/drivers/passthrough/io.c|  183 +++-
> >  xen/drivers/passthrough/vtd/iommu.h |  213 +++-
> >  xen/include/asm-arm/viommu.h|   38 +
> >  xen/include/asm-x86/hvm/vioapic.h   |1 +
> >  xen/include/asm-x86/msi.h   |3 +
> > 

Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-03-29 Thread Chao Gao
On Wed, Mar 29, 2017 at 09:00:58AM +0100, Roger Pau Monné wrote:
>On Tue, Mar 21, 2017 at 01:29:26PM +0800, Lan Tianyu wrote:
>> On 2017年03月21日 10:28, Lan Tianyu wrote:
>> > On 2017年03月20日 22:23, Roger Pau Monné wrote:
>> >> Thanks! So you add all this vIOMMU code, but the maximum number of allowed
>> >> vCPUs for HVM guests is still limited to 128 (HVM_MAX_VCPUS is not 
>> >> touched). Is
>> >> there any missing pieces in order to bump this?
>> > 
>> > To increase vcpu number, we need to change APIC ID rule and now it's
>> > APICID = VCPUID * 2. Andrew's CPUID improvement will change it and so
>> > our following patches of increasing vcpu number will base on Andrew's job.
>> > 
>> > 
>> >>
>> >> Also, have you tested if this series works with PVH guests? Boris added 
>> >> PVH
>> >> support to Linux not long ago, so you should be able to test it just by 
>> >> picking
>> >> the latest Linux kernel.
>> > 
>> > Our patchset just targets hvm guest and it will not work for PV guest. 
>> 
>> New hypercalls introduced by this patchset also can reuse for PVH to
>> enable vIOMMU. This patchset relies on Qemu Xen-vIOMMU device model to
>> create/destroy vIOMMU. If we want to enable DMA translation for hvm
>> guest later, virtual device's DMA request would be passed from Qemu to
>> Xen hypervisor and the device model in Qemu is necessary.
>
>The DMA remapping probably doesn't make sense for PVH because PVH doesn't have
>emulated devices, but in any case it would be good to disentangle all this from
>the QEMU (device model) code. AFAICT the DMA remapping part would still be
>useful when doing PCI-passthrough to a PVH guest, and that doesn't involve
>QEMU.

I agree that we need a DMA remapping function in Hypervisor to handle DMA
remapping of pass through device for both HVM and PVH guest and this is also
in Tianyu's v3 design 
(https://lists.xenproject.org/archives/html/xen-devel/2016-11/msg01391.html).
But this doesn't mean that we don't need the dummy vIOMMU in qemu to handle DMA
remapping of virtual device.

>
>Also, the vIOMMU hypercalls are added as DMOPs, which seems to imply that they
>should be used with/from a device model (and this won't be the case for PVH).

No. When we decided to add vIOMMU hypercalls, we were worry about whether it can
be used by tool stack. We found this:

Privileged toolstack software is permitted to use DMOPs as well as
other hypercalls, of course.  So there is no need to duplicate
functionality between DMOPs and non-stable privileged toolstack
hypercalls.
in https://lists.xenproject.org/archives/html/xen-devel/2016-08/msg00048.html 

I think it just means these interfaces are safe to be used by dm. We needn't
worry a dm will compromise the domain that isn't associated with it. I think
only the interfaces that qemu won't use can be exposed as another format other
than DMOP.

Thank,
Chao

>
>Roger.

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


Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-03-29 Thread Roger Pau Monné
On Tue, Mar 21, 2017 at 01:29:26PM +0800, Lan Tianyu wrote:
> On 2017年03月21日 10:28, Lan Tianyu wrote:
> > On 2017年03月20日 22:23, Roger Pau Monné wrote:
> >> Thanks! So you add all this vIOMMU code, but the maximum number of allowed
> >> vCPUs for HVM guests is still limited to 128 (HVM_MAX_VCPUS is not 
> >> touched). Is
> >> there any missing pieces in order to bump this?
> > 
> > To increase vcpu number, we need to change APIC ID rule and now it's
> > APICID = VCPUID * 2. Andrew's CPUID improvement will change it and so
> > our following patches of increasing vcpu number will base on Andrew's job.
> > 
> > 
> >>
> >> Also, have you tested if this series works with PVH guests? Boris added PVH
> >> support to Linux not long ago, so you should be able to test it just by 
> >> picking
> >> the latest Linux kernel.
> > 
> > Our patchset just targets hvm guest and it will not work for PV guest. 
> 
> New hypercalls introduced by this patchset also can reuse for PVH to
> enable vIOMMU. This patchset relies on Qemu Xen-vIOMMU device model to
> create/destroy vIOMMU. If we want to enable DMA translation for hvm
> guest later, virtual device's DMA request would be passed from Qemu to
> Xen hypervisor and the device model in Qemu is necessary.

The DMA remapping probably doesn't make sense for PVH because PVH doesn't have
emulated devices, but in any case it would be good to disentangle all this from
the QEMU (device model) code. AFAICT the DMA remapping part would still be
useful when doing PCI-passthrough to a PVH guest, and that doesn't involve
QEMU.

Also, the vIOMMU hypercalls are added as DMOPs, which seems to imply that they
should be used with/from a device model (and this won't be the case for PVH).

Roger.

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


Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-03-20 Thread Lan Tianyu
On 2017年03月21日 10:28, Lan Tianyu wrote:
> On 2017年03月20日 22:23, Roger Pau Monné wrote:
>> Thanks! So you add all this vIOMMU code, but the maximum number of allowed
>> vCPUs for HVM guests is still limited to 128 (HVM_MAX_VCPUS is not touched). 
>> Is
>> there any missing pieces in order to bump this?
> 
> To increase vcpu number, we need to change APIC ID rule and now it's
> APICID = VCPUID * 2. Andrew's CPUID improvement will change it and so
> our following patches of increasing vcpu number will base on Andrew's job.
> 
> 
>>
>> Also, have you tested if this series works with PVH guests? Boris added PVH
>> support to Linux not long ago, so you should be able to test it just by 
>> picking
>> the latest Linux kernel.
> 
> Our patchset just targets hvm guest and it will not work for PV guest. 

New hypercalls introduced by this patchset also can reuse for PVH to
enable vIOMMU. This patchset relies on Qemu Xen-vIOMMU device model to
create/destroy vIOMMU. If we want to enable DMA translation for hvm
guest later, virtual device's DMA request would be passed from Qemu to
Xen hypervisor and the device model in Qemu is necessary.

-- 
Best regards
Tianyu Lan

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


Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-03-20 Thread Lan Tianyu
On 2017年03月20日 22:23, Roger Pau Monné wrote:
> Thanks! So you add all this vIOMMU code, but the maximum number of allowed
> vCPUs for HVM guests is still limited to 128 (HVM_MAX_VCPUS is not touched). 
> Is
> there any missing pieces in order to bump this?

To increase vcpu number, we need to change APIC ID rule and now it's
APICID = VCPUID * 2. Andrew's CPUID improvement will change it and so
our following patches of increasing vcpu number will base on Andrew's job.


> 
> Also, have you tested if this series works with PVH guests? Boris added PVH
> support to Linux not long ago, so you should be able to test it just by 
> picking
> the latest Linux kernel.

Our patchset just targets hvm guest and it will not work for PV guest.

-- 
Best regards
Tianyu Lan

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


Re: [Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-03-20 Thread Roger Pau Monné
On Fri, Mar 17, 2017 at 07:27:00PM +0800, Lan Tianyu wrote:
> This patchset is to introduce vIOMMU framework and add virtual VTD's
> interrupt remapping support according "Xen virtual IOMMU high level
> design doc V3"(https://lists.xenproject.org/archives/html/xen-devel/
> 2016-11/msg01391.html).
> 
> - vIOMMU framework
> New framework provides viommu_ops and help functions to abstract
> vIOMMU operations(E,G create, destroy, handle irq remapping request
> and so on). Vendors(Intel, ARM, AMD and son) can implement their
> vIOMMU callbacks.
> 
> - Xen vIOMMU device model in Qemu 
> It's in charge of create/destroy vIOMMU in hypervisor via new vIOMMU
> DMOP hypercalls. It will be required to pass virtual devices DMA
> request to hypervisor when enable IOVA(DMA request without PASID)
> function.
> 
> - Virtual VTD
> In this patchset, we enable irq remapping function and covers both
> MSI and IOAPIC interrupts. Don't support post interrupt mode emulation
> and post interrupt mode enabled on host with virtual VTD. Will add
> later.   
> 
> Chao Gao (19):
>   Tools/libxc: Add viommu operations in libxc
>   Tools/libacpi: Add DMA remapping reporting (DMAR) ACPI table
> structures
>   Tools/libacpi: Add new fields in acpi_config to build DMAR table
>   Tools/libacpi: Add a user configurable parameter to control vIOMMU
> attributes
>   Tools/libxl: Inform device model to create a guest with a vIOMMU
> device
>   x86/hvm: Introduce a emulated VTD for HVM
>   X86/vvtd: Add MMIO handler for VVTD
>   X86/vvtd: Set Interrupt Remapping Table Pointer through GCMD
>   X86/vvtd: Process interrupt remapping request
>   X86/vvtd: decode interrupt attribute from IRTE
>   X86/vioapic: Hook interrupt delivery of vIOAPIC
>   X86/vvtd: Enable Queued Invalidation through GCMD
>   X86/vvtd: Enable Interrupt Remapping through GCMD
>   x86/vpt: Get interrupt vector through a vioapic interface
>   passthrough: move some fields of hvm_gmsi_info to a sub-structure
>   Tools/libxc: Add a new interface to bind msi-ir with pirq
>   X86/vmsi: Hook guest MSI injection
>   X86/vvtd: Handle interrupt translation faults
>   X86/vvtd: Add queued invalidation (QI) support
> 
> Lan Tianyu (4):
>   VIOMMU: Add vIOMMU helper functions to create, destroy and query
> capabilities
>   DMOP: Introduce new DMOP commands for vIOMMU support
>   VIOMMU: Add irq request callback to deal with irq remapping
>   VIOMMU: Add get irq info callback to convert irq remapping request
> 
>  tools/libacpi/acpi2_0.h |   45 +
>  tools/libacpi/build.c   |   58 ++
>  tools/libacpi/libacpi.h |   12 +
>  tools/libs/devicemodel/core.c   |   69 ++
>  tools/libs/devicemodel/include/xendevicemodel.h |   35 +
>  tools/libs/devicemodel/libxendevicemodel.map|3 +
>  tools/libxc/include/xenctrl.h   |   17 +
>  tools/libxc/include/xenctrl_compat.h|5 +
>  tools/libxc/xc_devicemodel_compat.c |   18 +
>  tools/libxc/xc_domain.c |   55 +
>  tools/libxl/libxl_create.c  |   12 +-
>  tools/libxl/libxl_dm.c  |9 +
>  tools/libxl/libxl_dom.c |   85 ++
>  tools/libxl/libxl_types.idl |8 +
>  tools/xl/xl_parse.c |   54 +
>  xen/arch/x86/Makefile   |1 +
>  xen/arch/x86/hvm/Makefile   |1 +
>  xen/arch/x86/hvm/dm.c   |   29 +
>  xen/arch/x86/hvm/irq.c  |   10 +
>  xen/arch/x86/hvm/vioapic.c  |   36 +
>  xen/arch/x86/hvm/vmsi.c |   17 +-
>  xen/arch/x86/hvm/vpt.c  |2 +-
>  xen/arch/x86/hvm/vvtd.c | 1229 
> +++
>  xen/arch/x86/viommu.c   |   40 +
>  xen/common/Makefile |1 +
>  xen/common/domain.c |3 +
>  xen/common/viommu.c |  119 +++
>  xen/drivers/passthrough/io.c|  183 +++-
>  xen/drivers/passthrough/vtd/iommu.h |  213 +++-
>  xen/include/asm-arm/viommu.h|   38 +
>  xen/include/asm-x86/hvm/vioapic.h   |1 +
>  xen/include/asm-x86/msi.h   |3 +
>  xen/include/asm-x86/viommu.h|   68 ++
>  xen/include/public/arch-x86/hvm/save.h  |   19 +
>  xen/include/public/domctl.h |7 +
>  xen/include/public/hvm/dm_op.h  |   39 +
>  xen/include/public/viommu.h |   38 +
>  xen/include/xen/hvm/irq.h   |   20 +-
>  xen/include/xen/sched.h |2 +
>  xen/include/xen/viommu.h|   74 ++
>  40 files changed, 2601 insertions(+), 77 deletions(-)
>  create mode 

[Xen-devel] [RFC PATCH 00/23] xen/vIOMMU: Add vIOMMU support with irq remapping fucntion on Intel platform

2017-03-17 Thread Lan Tianyu
This patchset is to introduce vIOMMU framework and add virtual VTD's
interrupt remapping support according "Xen virtual IOMMU high level
design doc V3"(https://lists.xenproject.org/archives/html/xen-devel/
2016-11/msg01391.html).

- vIOMMU framework
New framework provides viommu_ops and help functions to abstract
vIOMMU operations(E,G create, destroy, handle irq remapping request
and so on). Vendors(Intel, ARM, AMD and son) can implement their
vIOMMU callbacks.

- Xen vIOMMU device model in Qemu 
It's in charge of create/destroy vIOMMU in hypervisor via new vIOMMU
DMOP hypercalls. It will be required to pass virtual devices DMA
request to hypervisor when enable IOVA(DMA request without PASID)
function.

- Virtual VTD
In this patchset, we enable irq remapping function and covers both
MSI and IOAPIC interrupts. Don't support post interrupt mode emulation
and post interrupt mode enabled on host with virtual VTD. Will add
later.   

Chao Gao (19):
  Tools/libxc: Add viommu operations in libxc
  Tools/libacpi: Add DMA remapping reporting (DMAR) ACPI table
structures
  Tools/libacpi: Add new fields in acpi_config to build DMAR table
  Tools/libacpi: Add a user configurable parameter to control vIOMMU
attributes
  Tools/libxl: Inform device model to create a guest with a vIOMMU
device
  x86/hvm: Introduce a emulated VTD for HVM
  X86/vvtd: Add MMIO handler for VVTD
  X86/vvtd: Set Interrupt Remapping Table Pointer through GCMD
  X86/vvtd: Process interrupt remapping request
  X86/vvtd: decode interrupt attribute from IRTE
  X86/vioapic: Hook interrupt delivery of vIOAPIC
  X86/vvtd: Enable Queued Invalidation through GCMD
  X86/vvtd: Enable Interrupt Remapping through GCMD
  x86/vpt: Get interrupt vector through a vioapic interface
  passthrough: move some fields of hvm_gmsi_info to a sub-structure
  Tools/libxc: Add a new interface to bind msi-ir with pirq
  X86/vmsi: Hook guest MSI injection
  X86/vvtd: Handle interrupt translation faults
  X86/vvtd: Add queued invalidation (QI) support

Lan Tianyu (4):
  VIOMMU: Add vIOMMU helper functions to create, destroy and query
capabilities
  DMOP: Introduce new DMOP commands for vIOMMU support
  VIOMMU: Add irq request callback to deal with irq remapping
  VIOMMU: Add get irq info callback to convert irq remapping request

 tools/libacpi/acpi2_0.h |   45 +
 tools/libacpi/build.c   |   58 ++
 tools/libacpi/libacpi.h |   12 +
 tools/libs/devicemodel/core.c   |   69 ++
 tools/libs/devicemodel/include/xendevicemodel.h |   35 +
 tools/libs/devicemodel/libxendevicemodel.map|3 +
 tools/libxc/include/xenctrl.h   |   17 +
 tools/libxc/include/xenctrl_compat.h|5 +
 tools/libxc/xc_devicemodel_compat.c |   18 +
 tools/libxc/xc_domain.c |   55 +
 tools/libxl/libxl_create.c  |   12 +-
 tools/libxl/libxl_dm.c  |9 +
 tools/libxl/libxl_dom.c |   85 ++
 tools/libxl/libxl_types.idl |8 +
 tools/xl/xl_parse.c |   54 +
 xen/arch/x86/Makefile   |1 +
 xen/arch/x86/hvm/Makefile   |1 +
 xen/arch/x86/hvm/dm.c   |   29 +
 xen/arch/x86/hvm/irq.c  |   10 +
 xen/arch/x86/hvm/vioapic.c  |   36 +
 xen/arch/x86/hvm/vmsi.c |   17 +-
 xen/arch/x86/hvm/vpt.c  |2 +-
 xen/arch/x86/hvm/vvtd.c | 1229 +++
 xen/arch/x86/viommu.c   |   40 +
 xen/common/Makefile |1 +
 xen/common/domain.c |3 +
 xen/common/viommu.c |  119 +++
 xen/drivers/passthrough/io.c|  183 +++-
 xen/drivers/passthrough/vtd/iommu.h |  213 +++-
 xen/include/asm-arm/viommu.h|   38 +
 xen/include/asm-x86/hvm/vioapic.h   |1 +
 xen/include/asm-x86/msi.h   |3 +
 xen/include/asm-x86/viommu.h|   68 ++
 xen/include/public/arch-x86/hvm/save.h  |   19 +
 xen/include/public/domctl.h |7 +
 xen/include/public/hvm/dm_op.h  |   39 +
 xen/include/public/viommu.h |   38 +
 xen/include/xen/hvm/irq.h   |   20 +-
 xen/include/xen/sched.h |2 +
 xen/include/xen/viommu.h|   74 ++
 40 files changed, 2601 insertions(+), 77 deletions(-)
 create mode 100644 xen/arch/x86/hvm/vvtd.c
 create mode 100644 xen/arch/x86/viommu.c
 create mode 100644 xen/common/viommu.c
 create mode 100644 xen/include/asm-arm/viommu.h
 create mode 100644 xen/include/asm-x86/viommu.h
 create mode 100644