Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752049AbcCIDYO (ORCPT ); Tue, 8 Mar 2016 22:24:14 -0500 Received: from mail-pa0-f52.google.com ([209.85.220.52]:33645 "EHLO mail-pa0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751227AbcCIDX7 (ORCPT ); Tue, 8 Mar 2016 22:23:59 -0500 Date: Tue, 8 Mar 2016 19:23:43 -0800 From: Christoffer Dall To: Julien Grall Cc: kvmarm@lists.cs.columbia.edu, marc.zyngier@arm.com, fu.wei@linaro.org, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, wei@redhat.com, al.stone@linaro.org, Daniel Lezcano , Thomas Gleixner Subject: Re: [PATCH v3 1/9] clocksource: arm_arch_timer: Gather KVM specific information in a structure Message-ID: <20160309032343.GE26583@lvm> References: <1457436573-6180-1-git-send-email-julien.grall@arm.com> <1457436573-6180-2-git-send-email-julien.grall@arm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1457436573-6180-2-git-send-email-julien.grall@arm.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3322 Lines: 99 On Tue, Mar 08, 2016 at 11:29:25AM +0000, 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. > > A stub for the new helper isn't introduced because KVM requires the arch > timer for both ARM64 and ARM32. > > The function arch_timer_get_timecounter is kept for the time being and > will be dropped in a subsequent patch. > > Signed-off-by: Julien Grall > > --- > Cc: Daniel Lezcano > Cc: Thomas Gleixner > Cc: Marc Zyngier > > Changes in v3: > - Rename the patch > - Move the KVM changes and removal of arch_timer_get_timecounter > in separate patches. > --- > drivers/clocksource/arm_arch_timer.c | 12 +++++++++--- > include/clocksource/arm_arch_timer.h | 5 +++++ > 2 files changed, 14 insertions(+), 3 deletions(-) > > diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c > index ffe9d1c..b7ab588 100644 > --- a/drivers/clocksource/arm_arch_timer.c > +++ b/drivers/clocksource/arm_arch_timer.c > @@ -456,11 +456,16 @@ static struct cyclecounter cyclecounter = { > .mask = CLOCKSOURCE_MASK(56), > }; > > -static struct timecounter timecounter; > +static struct arch_timer_kvm_info arch_timer_kvm_info; > + > +struct arch_timer_kvm_info *arch_timer_get_kvm_info(void) borderline bikeshedding question: does it make sense that the info the arch timer code exports is labeled to be kvm-specific? In other words, could we imagine another subsystem using this timer info some time and is there a more generic term that would be more appropriate? otherwise it looks fine to me. -Christoffer > +{ > + return &arch_timer_kvm_info; > +} > > struct timecounter *arch_timer_get_timecounter(void) > { > - return &timecounter; > + return &arch_timer_kvm_info.timecounter; > } > > static void __init arch_counter_register(unsigned type) > @@ -488,7 +493,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..9101ed6b 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 > > -- > 1.9.1 >