[Android-virt] [PATCH 10/10] ARM: KVM: arch_timers: Wire the init code and config option

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

 



On Mon, May 14, 2012 at 9:07 AM, Marc Zyngier <marc.zyngier at arm.com> wrote:
> It is now possible to select CONFIG_KVM_ARM_TIMER to enable the
> KVM architected timer support.
>
> Signed-off-by: Marc Zyngier <marc.zyngier at arm.com>
> ---
> ?arch/arm/kvm/Kconfig ?| ? ?7 +++++++
> ?arch/arm/kvm/Makefile | ? ?1 +
> ?arch/arm/kvm/arm.c ? ?| ? 11 +++++++++++
> ?arch/arm/kvm/vgic.c ? | ? ?4 ++++
> ?4 files changed, 23 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/kvm/Kconfig b/arch/arm/kvm/Kconfig
> index b2860fc..b0eb7a3 100644
> --- a/arch/arm/kvm/Kconfig
> +++ b/arch/arm/kvm/Kconfig
> @@ -47,6 +47,13 @@ config KVM_ARM_VGIC
> ? ? ? ?---help---
> ? ? ? ? ?Adds support for a hardware assisted, in-kernel GIC emulation.
>
> +config KVM_ARM_TIMER
> + ? ? ? ?bool "KVM support for Architected Timers"
> + ? ? ? depends on KVM_ARM_VGIC && ARM_ARCH_TIMER
> + ? ? ? select HAVE_KVM_IRQCHIP
> + ? ? ? ---help---
> + ? ? ? ? Adds support for the Architected Timed in virtual machines
> +

What happens if you run a guest without architected timers support and
the support on the KVM host side is enabled?

If nothing, then why do we have a separate config option for this and
not just selecting it as part of KVM_ARM_VGIC?

> ?source drivers/virtio/Kconfig
>
> ?endif # VIRTUALIZATION
> diff --git a/arch/arm/kvm/Makefile b/arch/arm/kvm/Makefile
> index d21c7b7..a2d1534 100644
> --- a/arch/arm/kvm/Makefile
> +++ b/arch/arm/kvm/Makefile
> @@ -16,3 +16,4 @@ kvm-arm-y += arm.o guest.o mmu.o emulate.o
>
> ?obj-$(CONFIG_KVM) += kvm-arm.o
> ?obj-$(CONFIG_KVM_ARM_VGIC) += vgic.o
> +obj-$(CONFIG_KVM_ARM_TIMER) += timer.o
> diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c
> index ccb2c08..49ed283 100644
> --- a/arch/arm/kvm/arm.c
> +++ b/arch/arm/kvm/arm.c
> @@ -231,6 +231,7 @@ void kvm_arch_vcpu_free(struct kvm_vcpu *vcpu)
>
> ?void kvm_arch_vcpu_destroy(struct kvm_vcpu *vcpu)
> ?{
> + ? ? ? kvm_timer_vcpu_terminate(vcpu);
> ? ? ? ?kvm_arch_vcpu_free(vcpu);
> ?}
>
> @@ -263,6 +264,9 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
> ? ? ? ?/* Set up VGIC */
> ? ? ? ?kvm_vgic_vcpu_init(vcpu);
>
> + ? ? ? /* Set up the timer */
> + ? ? ? kvm_timer_vcpu_init(vcpu);
> +
> ? ? ? ?return 0;
> ?}
>
> @@ -785,6 +789,13 @@ static int init_hyp_mode(void)
> ? ? ? ? ? ? ? ?goto out_free_mappings;
>
> ? ? ? ?/*
> + ? ? ? ?* Init HYP architected timer support
> + ? ? ? ?*/
> + ? ? ? err = kvm_timer_hyp_init();
> + ? ? ? if (err)
> + ? ? ? ? ? ? ? goto out_free_mappings;
> +
> + ? ? ? /*
> ? ? ? ? * Set the HVBAR to the virtual kernel address
> ? ? ? ? */
> ? ? ? ?for_each_online_cpu(cpu)
> diff --git a/arch/arm/kvm/vgic.c b/arch/arm/kvm/vgic.c
> index c8bcc9e..e80cd1c 100644
> --- a/arch/arm/kvm/vgic.c
> +++ b/arch/arm/kvm/vgic.c
> @@ -880,5 +880,9 @@ int kvm_vgic_init(struct kvm *kvm)
> ? ? ? ? ? ? ? ?kvm_err("Unable to remap VGIC CPU to VCPU\n");
> ?out:
> ? ? ? ?mutex_unlock(&kvm->lock);
> +
> + ? ? ? if (!ret)
> + ? ? ? ? ? ? ? kvm_timer_init(kvm);
> +
> ? ? ? ?return ret;
> ?}
> --
> 1.7.7.1
>

Thanks,
-Christoffer



[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux