All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 00/21] xen/arm: Add support for non-pci passthrough
@ 2014-07-31 15:00 Julien Grall
  2014-07-31 15:00 ` [PATCH v2 01/21] xen/common: do not implicitly permit access to mapped I/O memory Julien Grall
                   ` (21 more replies)
  0 siblings, 22 replies; 119+ messages in thread
From: Julien Grall @ 2014-07-31 15:00 UTC (permalink / raw)
  To: xen-devel; +Cc: stefano.stabellini, Julien Grall, tim, ian.campbell

Hello all,

This is the second version of this patch series to add support for platform
device passthrough on ARM.

The user will have to specify the list of device node to passthrough via
the new options "dtdev" in the xl configuration file. Only device protected
by an IOMMU can be passthrough to the guest. This is because the device
can use DMA and will therefore use the wrong address space.
I'm thinking to add an option "force" when the user knows that this device
doesn't use DMA. This might be useful to passthrough serial device.

To avoid adding code in DOM0 to manage platform device deassignment, the
user has to mark the device disabled in the device tree. I can be easily
done via u-boot. For instance, if we want to passthrough the second network
card of the a midway node to the guest. The user will have add the following
line in the u-boot script:

fdt set /soc/ethernet@fff51000 status disabled

Restrictions of this series:
    - If the total amount of MMIO used by device passthrough for a
    single guest is greater than 768MB, the guest won't boot
    - It's not possible to deassign device used by DOM0. This is because
    of lack of reset/deassignment drivers.
    - Only common device properties (interrupts, regs) are written to
    the guest device tree. Device that needs other properties may not work.

I don't plan to handle those restrictions for this version as I don't think
they are important for a first step and the current series is still usable
with simple device. I also like to see this series upstream for Xen 4.5.

This series has been tested on midway by assigning the secondary network card
to a guest.

There is some TODO, mostly related to XSM in different patch (see commit message
or /* TODO: ... */ in the files).

This series is based on stefano's interrupt series [1] and Arianna's memory
mapping series [2]. A working tree can be found here:

git://xenbits.xen.org/people/julieng/xen-unstable.git branch passthrough-v2

Major changes in v2:
    - Drop the patch #1 of the previous version
    - Virtual IRQ are not anymore equal to the physical interrupt
    - Move the hypercall to get DT informations for privcmd to domctl
    - Split the domain creation in 2 two parts to allow per guest VGIC
    configuration (such as the number of SPIs).
    - Bunch of typoes, commit improvement, function renaming.

For all changes see in each patch.

Sincerely yours,

Arianna Avanzini (1):
  xen/common: do not implicitly permit access to mapped I/O memory

Julien Grall (20):
  xen: guestcopy: Provide an helper to safely copy string from guest
  xen/arm: vgic: Rename nr_lines into nr_spis
  xen/arm: vgic: Introduce a function to initialize pending_irq
  xen/arm: follow-up to allow DOM0 manage IRQ and MMIO
  xen/arm: Allow virq != irq
  xen/arm: route_irq_to_guest: Check validity of the IRQ
  xen/arm: Initialize the virtual GIC later
  xen/arm: Release IRQ routed to a domain when it's destroying
  xen/arm: Implement hypercall PHYSDEVOP_{,un}map_pirq
  xen/dts: Use unsigned int for MMIO and IRQ index
  xen/dts: Provide an helper to get a DT node from a path provided by a
    guest
  xen/dts: Add hypercalls to retrieve device node information
  xen/passthrough: Introduce iommu_construct
  xen/passthrough: Call arch_iommu_domain_destroy before calling
    iommu_teardown
  xen/passthrough: iommu_deassign_device_dt: By default reassign device
    to nobody
  xen/iommu: arm: Wire iommu DOMCTL for ARM
  xen/passthrough: dt: Add new domctl XEN_DOMCTL_assign_dt_device
  xen/arm: Reserve region in guest memory for device passthrough
  libxl: Add support for non-PCI passthrough
  xl: Add new option dtdev

 docs/man/xl.cfg.pod.5                 |    5 +
 tools/libxc/xc_domain.c               |  177 +++++++++++++++++++++++++++++++++
 tools/libxc/xenctrl.h                 |   46 +++++++++
 tools/libxl/Makefile                  |    2 +-
 tools/libxl/libxl_arch.h              |    7 +-
 tools/libxl/libxl_arm.c               |  148 ++++++++++++++++++++++++++-
 tools/libxl/libxl_create.c            |   27 +++++
 tools/libxl/libxl_dom.c               |    9 +-
 tools/libxl/libxl_dtdev.c             |  153 ++++++++++++++++++++++++++++
 tools/libxl/libxl_internal.h          |   32 ++++++
 tools/libxl/libxl_types.idl           |    5 +
 tools/libxl/libxl_x86.c               |   11 +-
 tools/libxl/xl_cmdimpl.c              |   21 +++-
 xen/arch/arm/domain.c                 |   28 ++++--
 xen/arch/arm/domain_build.c           |   71 ++++++++-----
 xen/arch/arm/domctl.c                 |   22 +++-
 xen/arch/arm/gic-v2.c                 |    2 -
 xen/arch/arm/gic.c                    |   41 +++++++-
 xen/arch/arm/irq.c                    |  134 ++++++++++++++++++++++---
 xen/arch/arm/physdev.c                |  120 +++++++++++++++++++++-
 xen/arch/arm/setup.c                  |   10 +-
 xen/arch/arm/vgic-v2.c                |    2 +-
 xen/arch/arm/vgic.c                   |  105 +++++++++++++++----
 xen/common/Makefile                   |    1 +
 xen/common/device_tree.c              |  143 +++++++++++++++++++++++++-
 xen/common/domctl.c                   |   46 ++++-----
 xen/common/guestcopy.c                |   29 ++++++
 xen/drivers/passthrough/arm/iommu.c   |    6 ++
 xen/drivers/passthrough/arm/smmu.c    |    7 +-
 xen/drivers/passthrough/device_tree.c |   60 +++++++++--
 xen/drivers/passthrough/iommu.c       |   36 ++++++-
 xen/drivers/passthrough/pci.c         |   12 +--
 xen/include/asm-arm/domain.h          |    9 +-
 xen/include/asm-arm/gic.h             |    7 +-
 xen/include/asm-arm/irq.h             |    8 +-
 xen/include/asm-arm/vgic.h            |   13 ++-
 xen/include/public/arch-arm.h         |    4 +
 xen/include/public/domctl.h           |   64 ++++++++++++
 xen/include/xen/device_tree.h         |   27 ++++-
 xen/include/xen/guest_access.h        |    5 +
 xen/include/xen/iommu.h               |    5 +
 xen/xsm/flask/flask_op.c              |   29 +-----
 xen/xsm/flask/hooks.c                 |    3 +
 xen/xsm/flask/policy/access_vectors   |    2 +
 44 files changed, 1522 insertions(+), 172 deletions(-)
 create mode 100644 tools/libxl/libxl_dtdev.c
 create mode 100644 xen/common/guestcopy.c

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 119+ messages in thread

end of thread, other threads:[~2015-01-12 16:34 UTC | newest]

Thread overview: 119+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-07-31 15:00 [PATCH v2 00/21] xen/arm: Add support for non-pci passthrough Julien Grall
2014-07-31 15:00 ` [PATCH v2 01/21] xen/common: do not implicitly permit access to mapped I/O memory Julien Grall
2014-07-31 15:22   ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 02/21] xen: guestcopy: Provide an helper to safely copy string from guest Julien Grall
2014-08-01  8:40   ` Jan Beulich
2014-08-06 14:18     ` Julien Grall
2014-09-09 12:52     ` Ian Campbell
2014-09-09 13:17       ` Jan Beulich
2014-09-09 13:40         ` Ian Campbell
2014-08-06 13:56   ` Stefano Stabellini
2014-08-06 14:22     ` Julien Grall
2014-08-06 16:06   ` Daniel De Graaf
2014-07-31 15:00 ` [PATCH v2 03/21] xen/arm: vgic: Rename nr_lines into nr_spis Julien Grall
2014-08-06 13:58   ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 04/21] xen/arm: vgic: Introduce a function to initialize pending_irq Julien Grall
2014-08-06 14:06   ` Stefano Stabellini
2014-08-06 14:52     ` Julien Grall
2014-08-06 14:57       ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 05/21] xen/arm: follow-up to allow DOM0 manage IRQ and MMIO Julien Grall
2014-09-09 13:07   ` Ian Campbell
2014-09-11 22:32     ` Julien Grall
2014-09-12 10:13       ` Ian Campbell
2014-09-12 19:04         ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 06/21] xen/arm: Allow virq != irq Julien Grall
2014-08-06 14:50   ` Stefano Stabellini
2014-08-06 15:07     ` Julien Grall
2014-08-06 16:48       ` Stefano Stabellini
2014-09-09 13:29   ` Ian Campbell
2014-09-09 18:42     ` Julien Grall
2014-09-11 22:50       ` Julien Grall
2014-09-12 10:13         ` Ian Campbell
2014-09-12 10:19         ` Ian Campbell
2014-07-31 15:00 ` [PATCH v2 07/21] xen/arm: route_irq_to_guest: Check validity of the IRQ Julien Grall
2014-08-06 14:56   ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 08/21] xen/arm: Initialize the virtual GIC later Julien Grall
2014-08-06 15:35   ` Stefano Stabellini
2014-09-09 13:35     ` Ian Campbell
2014-09-09 18:57       ` Julien Grall
2014-09-10 10:08         ` Ian Campbell
2014-09-11 23:01     ` Julien Grall
2014-09-12 10:14       ` Ian Campbell
2014-08-06 17:06   ` Daniel De Graaf
2014-08-29 13:09   ` Andrii Tseglytskyi
2014-08-29 18:57     ` Julien Grall
2014-08-29 19:49       ` Andrii Tseglytskyi
2014-08-29 20:04         ` Julien Grall
2014-08-29 20:14           ` Andrii Tseglytskyi
2014-09-09 13:33           ` Ian Campbell
2014-09-09 19:11             ` Julien Grall
2014-09-10  9:45               ` Andrii Tseglytskyi
2014-09-09 13:37   ` Ian Campbell
     [not found]   ` <CAAHg+HhhsZonrEDdHET93dy=dR1+YF-VPGJ=VwB20RRxWqdSYA@mail.gmail.com>
2014-10-06 16:04     ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 09/21] xen/arm: Release IRQ routed to a domain when it's destroying Julien Grall
2014-08-06 15:49   ` Stefano Stabellini
2014-08-06 16:01     ` Julien Grall
2014-08-06 16:53       ` Stefano Stabellini
2014-08-06 17:09         ` Julien Grall
2014-08-07 15:36           ` Stefano Stabellini
2014-08-07 15:40             ` Julien Grall
2014-08-07 16:31               ` Stefano Stabellini
2014-08-07 16:35                 ` Julien Grall
2014-08-07 16:39                   ` Stefano Stabellini
2014-09-09 13:53                     ` Ian Campbell
2014-09-09 22:29                       ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 10/21] xen/arm: Implement hypercall PHYSDEVOP_{, un}map_pirq Julien Grall
2014-08-06 16:10   ` Stefano Stabellini
2014-08-29 12:34   ` Andrii Tseglytskyi
2014-08-29 19:08     ` Julien Grall
2014-08-29 19:44       ` Andrii Tseglytskyi
2014-07-31 15:00 ` [PATCH v2 11/21] xen/dts: Use unsigned int for MMIO and IRQ index Julien Grall
2014-08-06 16:12   ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 12/21] xen/dts: Provide an helper to get a DT node from a path provided by a guest Julien Grall
2014-09-09 13:55   ` Ian Campbell
2014-07-31 15:00 ` [PATCH v2 13/21] xen/dts: Add hypercalls to retrieve device node information Julien Grall
2014-08-01  8:50   ` Jan Beulich
2014-08-06 15:17     ` Julien Grall
2014-08-06 15:47       ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 14/21] xen/passthrough: Introduce iommu_construct Julien Grall
2014-08-01  8:55   ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 15/21] xen/passthrough: Call arch_iommu_domain_destroy before calling iommu_teardown Julien Grall
2014-08-01  9:00   ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 16/21] xen/passthrough: iommu_deassign_device_dt: By default reassign device to nobody Julien Grall
2014-08-06 16:23   ` Stefano Stabellini
2015-01-12 16:33     ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 17/21] xen/iommu: arm: Wire iommu DOMCTL for ARM Julien Grall
2014-08-06 16:24   ` Stefano Stabellini
2014-07-31 15:00 ` [PATCH v2 18/21] xen/passthrough: dt: Add new domctl XEN_DOMCTL_assign_dt_device Julien Grall
2014-08-01  9:05   ` Jan Beulich
2014-07-31 15:00 ` [PATCH v2 19/21] xen/arm: Reserve region in guest memory for device passthrough Julien Grall
2014-08-06 16:27   ` Stefano Stabellini
2014-08-06 16:33     ` Julien Grall
2014-08-06 16:44       ` Stefano Stabellini
2014-08-06 16:45         ` Stefano Stabellini
2014-08-06 16:55           ` Julien Grall
2014-08-06 16:57             ` Stefano Stabellini
2014-08-06 16:47         ` Julien Grall
2014-07-31 15:00 ` [PATCH v2 20/21] libxl: Add support for non-PCI passthrough Julien Grall
2014-08-06 16:44   ` Stefano Stabellini
2014-08-06 16:50     ` Julien Grall
2014-08-06 16:58       ` Stefano Stabellini
2014-08-08 14:15         ` Julien Grall
2014-09-09 19:12         ` Julien Grall
2014-09-10 10:08           ` Ian Campbell
2014-07-31 15:00 ` [PATCH v2 21/21] xl: Add new option dtdev Julien Grall
2014-09-09 14:34 ` [PATCH v2 00/21] xen/arm: Add support for non-pci passthrough Ian Campbell
2014-09-09 19:34   ` Julien Grall
2014-09-10  9:22     ` Christoffer Dall
2014-09-10 10:51       ` Ian Campbell
2014-09-10 11:45         ` Christoffer Dall
2014-09-10 12:05           ` Ian Campbell
2014-09-10 22:03           ` Stefano Stabellini
2014-09-11  4:03             ` Christoffer Dall
2014-09-11  8:56               ` Ian Campbell
2014-09-12 19:16         ` Julien Grall
2014-09-10 10:11     ` Ian Campbell
2014-09-10 18:45       ` Julien Grall
2014-09-11  8:58         ` Ian Campbell
2014-09-11 19:11           ` Julien Grall
2014-09-12 10:16             ` Ian Campbell

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.