Re: [Android-virt] [PATCH 10/15] ARM: KVM: VGIC: Update KVM API documentation

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

 



I've cc'ed the KVM list to get their early input on this.

On Mon, May 14, 2012 at 9:06 AM, Marc Zyngier <marc.zyngier@xxxxxxx> wrote:
> Reflect the changes in the API due to the introduction of VGIC.
>
> Signed-off-by: Marc Zyngier <marc.zyngier@xxxxxxx>
> ---
>  Documentation/virtual/kvm/api.txt |   24 +++++++++++++++++-------
>  1 files changed, 17 insertions(+), 7 deletions(-)
>
> diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt
> index 8a3628f..5f6b683 100644
> --- a/Documentation/virtual/kvm/api.txt
> +++ b/Documentation/virtual/kvm/api.txt
> @@ -600,7 +600,7 @@ struct kvm_fpu {
>  4.24 KVM_CREATE_IRQCHIP
>
>  Capability: KVM_CAP_IRQCHIP
> -Architectures: x86, ia64
> +Architectures: x86, ia64, ARM
>  Type: vm ioctl
>  Parameters: none
>  Returns: 0 on success, -1 on error
> @@ -608,14 +608,14 @@ Returns: 0 on success, -1 on error
>  Creates an interrupt controller model in the kernel.  On x86, creates a virtual
>  ioapic, a virtual PIC (two PICs, nested), and sets up future vcpus to have a
>  local APIC.  IRQ routing for GSIs 0-15 is set to both PIC and IOAPIC; GSI 16-23
> -only go to the IOAPIC.  On ia64, a IOSAPIC is created.
> -
> +only go to the IOAPIC.  On ia64, a IOSAPIC is created. On ARM, a GIC is
> +created.
>
>  4.25 KVM_IRQ_LINE
>
>  Capability: KVM_CAP_IRQCHIP
>  Architectures: x86, ia64, arm
> -Type: vm ioctl
> +Type: vm ioctl (and vcpu_ioctl on ARM)

so I'm worried about this mixed vcpu/kvm ioctl.

I think we're already signaling specific vcpus through the KVM
interface for non-gic stuff and I have a feeling that VCPU ioctls are
expected to be executed by a vcpu thread (??).

I don't know, either create a new ioctl, embed in the IRQ field or
change the struct (can we even do this?)

>  Parameters: struct kvm_irq_level
>  Returns: 0 on success, -1 on error
>
> @@ -624,9 +624,19 @@ On some architectures it is required that an interrupt controller model has
>  been previously created with KVM_CREATE_IRQCHIP.  Note that edge-triggered
>  interrupts require the level to be set to 1 and then back to 0.
>
> -ARM uses two types of interrupt lines per CPU: IRQ and FIQ.  The value of the
> -irq field should be (vcpu_index << 1) for IRQs and ((vcpu_index << 1) | 1) for
> -FIQs. Level is used to raise/lower the line.
> +ARM can signal an interrupt either at the CPU level, or at the
> +in-kernel irqchip (GIC), with the following convention:
> +
> +- CPU signaling: ARM uses two types of interrupt lines per CPU: IRQ
> +  and FIQ.  The value of the irq field should be (vcpu_index << 1) for
> +  IRQs and ((vcpu_index << 1) | 1) for FIQs. As there's a limit of 8
> +  CPUs, irq is between 0 and 15. This is a vm_ioctl.
> +
> +- GIC signaling: If signaling a PPI, this is a vcpu_ioctl, and irq is
> +  between 16 and 31. If signaling a SPI, this is a vm_ioctl, and irq
> +  is above 31.
> +

I suggest adding a comment that this is without loss of functionality,
as the irq's between 0 and 15 are used for SGIs for VGIC
implementations and these should never be injected from user space
anyhow.

> +In both cases, level is used to raise/lower the line.
>
>  struct kvm_irq_level {
>        union {
> --
> 1.7.7.1
>

Thanks,
-Christoffer
--
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