Re: [RFC PATCH 2/3] KVM: ARM: Introduce KVM_SET_DEVICE_ADDRESS ioctl

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 14 October 2012 01:04, Christoffer Dall
<c.dall@xxxxxxxxxxxxxxxxxxxxxx> wrote:
> On ARM (and possibly other architectures) some bits are specific to the
> model being emulated for the guest and user space needs a way to tell
> the kernel about those bits.  An example is mmio device base addresses,
> where KVM must know the base address for a given device to properly
> emulate mmio accesses within a certain address range or directly map a
> device with virtualiation extensions into the guest address space.
>
> We try to make this API slightly more generic than for our specific use,
> but so far only the VGIC uses this feature.
>
> Signed-off-by: Christoffer Dall <c.dall@xxxxxxxxxxxxxxxxxxxxxx>
> ---
>  Documentation/virtual/kvm/api.txt |   30 ++++++++++++++++++++++++++++++
>  arch/arm/include/asm/kvm.h        |   13 +++++++++++++
>  arch/arm/include/asm/kvm_mmu.h    |    1 +
>  arch/arm/include/asm/kvm_vgic.h   |    6 ++++++
>  arch/arm/kvm/arm.c                |   31 ++++++++++++++++++++++++++++++-
>  arch/arm/kvm/vgic.c               |   34 +++++++++++++++++++++++++++++++---
>  include/linux/kvm.h               |    8 ++++++++
>  7 files changed, 119 insertions(+), 4 deletions(-)
>
> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
> index 26e953d..30ddcac 100644
> --- a/Documentation/virtual/kvm/api.txt
> +++ b/Documentation/virtual/kvm/api.txt
> @@ -2118,6 +2118,36 @@ for the emulated platofrm (see KVM_SET_DEVICE_ADDRESS), but before the CPU is
>  initally run.
>
>
> +4.80 KVM_SET_DEVICE_ADDRESS
> +
> +Capability: KVM_CAP_SET_DEVICE_ADDRESS
> +Architectures: arm
> +Type: vm ioctl
> +Parameters: struct kvm_device_address (in)
> +Returns: 0 on success, -1 on error
> +Errors:
> +  ENODEV: The device id is unknwown

"unknown"

> +  ENXIO:  Device not supported in configuration

"in this configuration" ? (I'm guessing this is for "you tried to
map a GIC when this CPU doesn't have a GIC" and similar errors?)

> +  E2BIG:  Address outside of guest physical address space

I would say "outside" rather than "outside of" here.

> +
> +struct kvm_device_address {
> +       __u32 id;
> +       __u64 addr;
> +};
> +
> +Specify a device address in the guest's physical address space where guests
> +can access emulated or directly exposed devices, which the host kernel needs
> +to know about. The id field is an architecture specific identifier for a
> +specific device.
> +
> +ARM divides the id field into two parts, a device ID and an address type id

We should be consistent about whether ID is capitalised or not.

> +specific to the individual device.
> +
> +  bits:  | 31    ...    16 | 15    ...    0 |
> +  field: |     device id   |  addr type id  |

This doesn't say whether userspace is allowed to make this ioctl
multiple times for the same device. This could be any of:
 * undefined behaviour
 * second call fails with some errno
 * second call overrides first one

It also doesn't say that you're supposed to call this after CREATE
and before INIT of the irqchip. (Nor does it say what happens if
you call it at some other time.)

-- PMM
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux