[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20160309214629.GE19459@potion.brq.redhat.com>
Date: Wed, 9 Mar 2016 22:46:30 +0100
From: Radim Krčmář <rkrcmar@...hat.com>
To: Suravee Suthikulpanit <Suravee.Suthikulpanit@....com>
Cc: pbonzini@...hat.com, joro@...tes.org, bp@...en8.de,
gleb@...nel.org, alex.williamson@...hat.com, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org, wei@...hat.com,
sherry.hurwitz@....com
Subject: Re: [PART1 RFC v2 10/10] svm: Manage vcpu load/unload when enable
AVIC
2016-03-04 14:46-0600, Suravee Suthikulpanit:
> From: Suravee Suthikulpanit <suravee.suthikulpanit@....com>
>
> When a vcpu is loaded/unloaded to a physical core, we need to update
> information in the Physical APIC-ID table accordingly.
>
> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@....com>
> ---
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> @@ -1508,6 +1510,146 @@ static int avic_vcpu_init(struct kvm *kvm, struct vcpu_svm *svm, int id)
> +static inline int
> +avic_update_iommu(struct kvm_vcpu *vcpu, int cpu, phys_addr_t pa, bool r)
> +{
> + if (!kvm_arch_has_assigned_device(vcpu->kvm))
> + return 0;
> +
> + /* TODO: We will hook up with IOMMU API at later time */
(It'd be best to drop avic_update_iommu from this series and introduce
it when merging iommu support.)
> + return 0;
> +}
> +
> +static int avic_vcpu_load(struct kvm_vcpu *vcpu, int cpu, bool is_load)
This function does a lot and there is only one thing that must be done
in svm_vcpu_load: change host physical APIC ID if the CPU changed.
The rest can be done elsewhere:
- is_running when blocking.
- kb_pg_ptr when the pointer changes = only on initialization?
- valid when the kb_pg_ptr is valid = always for existing VCPUs?
> +static int avic_set_running(struct kvm_vcpu *vcpu, bool is_run)
avic_set_running should get address of the entry and write is_run to it.
(No need to touch avic_bk_page, h_phy_apic_id or do bound checks.)
I think you can cache the physical apic id table entry in *vcpu, so both
functions are going to be very simple.
Powered by blists - more mailing lists