From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757284AbcBSHYN (ORCPT ); Fri, 19 Feb 2016 02:24:13 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57544 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752838AbcBSHYL (ORCPT ); Fri, 19 Feb 2016 02:24:11 -0500 Subject: Re: [PATCH v2 1/6] KVM: arm/arm64: arch_timer: Gather KVM specific information in a structure To: Julien Grall , kvmarm@lists.cs.columbia.edu References: <1455204804-31830-1-git-send-email-julien.grall@arm.com> <1455204804-31830-2-git-send-email-julien.grall@arm.com> Cc: christoffer.dall@linaro.org, marc.zyngier@arm.com, fu.wei@linaro.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, al.stone@linaro.org, Daniel Lezcano , Thomas Gleixner , Gleb Natapov , Paolo Bonzini From: Wei Huang Message-ID: <56C6C318.3000205@redhat.com> Date: Fri, 19 Feb 2016 01:24:08 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.0 MIME-Version: 1.0 In-Reply-To: <1455204804-31830-2-git-send-email-julien.grall@arm.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 02/11/2016 09:33 AM, Julien Grall wrote: > Introduce a structure which are filled up by the arch timer driver and > used by the virtual timer in KVM. > > The first member of this structure will be the timecounter. More members > will be added later. > > This is also dropping arch_timer_get_timecounter as it was only used by > the KVM code. Furthermore, a stub for the new helper hasn't been > introduced because KVM is requiring the arch timer for both ARM64 and > ARM32. > > Signed-off-by: Julien Grall > > --- > Cc: Daniel Lezcano > Cc: Thomas Gleixner > Cc: Christoffer Dall > Cc: Marc Zyngier > Cc: Gleb Natapov > Cc: Paolo Bonzini > --- > drivers/clocksource/arm_arch_timer.c | 9 +++++---- > include/clocksource/arm_arch_timer.h | 12 ++++++------ > virt/kvm/arm/arch_timer.c | 6 +++--- > 3 files changed, 14 insertions(+), 13 deletions(-) > > diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c > index c64d543..6eb2c5d 100644 > --- a/drivers/clocksource/arm_arch_timer.c > +++ b/drivers/clocksource/arm_arch_timer.c > @@ -447,11 +447,11 @@ static struct cyclecounter cyclecounter = { > .mask = CLOCKSOURCE_MASK(56), > }; > > -static struct timecounter timecounter; > +static struct arch_timer_kvm_info arch_timer_kvm_info; > > -struct timecounter *arch_timer_get_timecounter(void) > +struct arch_timer_kvm_info *arch_timer_get_kvm_info(void) > { > - return &timecounter; > + return &arch_timer_kvm_info; > } > > static void __init arch_counter_register(unsigned type) > @@ -479,7 +479,8 @@ static void __init arch_counter_register(unsigned type) > clocksource_register_hz(&clocksource_counter, arch_timer_rate); > cyclecounter.mult = clocksource_counter.mult; > cyclecounter.shift = clocksource_counter.shift; > - timecounter_init(&timecounter, &cyclecounter, start_count); > + timecounter_init(&arch_timer_kvm_info.timecounter, > + &cyclecounter, start_count); > > /* 56 bits minimum, so we assume worst case rollover */ > sched_clock_register(arch_timer_read_counter, 56, arch_timer_rate); > diff --git a/include/clocksource/arm_arch_timer.h b/include/clocksource/arm_arch_timer.h > index 25d0914..4d487f8 100644 > --- a/include/clocksource/arm_arch_timer.h > +++ b/include/clocksource/arm_arch_timer.h > @@ -49,11 +49,16 @@ enum arch_timer_reg { > > #define ARCH_TIMER_EVT_STREAM_FREQ 10000 /* 100us */ > > +struct arch_timer_kvm_info { > + struct timecounter timecounter; > +}; > + > #ifdef CONFIG_ARM_ARCH_TIMER > > extern u32 arch_timer_get_rate(void); > extern u64 (*arch_timer_read_counter)(void); > -extern struct timecounter *arch_timer_get_timecounter(void); > + > +extern struct arch_timer_kvm_info *arch_timer_get_kvm_info(void); > > #else > > @@ -67,11 +72,6 @@ static inline u64 arch_timer_read_counter(void) > return 0; > } > > -static inline struct timecounter *arch_timer_get_timecounter(void) > -{ > - return NULL; > -} > - Most parts are OK. Regarding removing this function from the #else area, is there a possibility to have CONFIG_ARM_ARCH_TIMER=n and CONFIG_KVM=y. If so, will the compilation fails here? -Wei > #endif > > #endif > diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c > index 69bca18..a669c6a 100644 > --- a/virt/kvm/arm/arch_timer.c > +++ b/virt/kvm/arm/arch_timer.c > @@ -385,11 +385,11 @@ int kvm_timer_hyp_init(void) > { > struct device_node *np; > unsigned int ppi; > + struct arch_timer_kvm_info *info; > int err; > > - timecounter = arch_timer_get_timecounter(); > - if (!timecounter) > - return -ENODEV; > + info = arch_timer_get_kvm_info(); > + timecounter = &info->timecounter; > > np = of_find_matching_node(NULL, arch_timer_of_match); > if (!np) { >