Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753877AbcKSQML (ORCPT ); Sat, 19 Nov 2016 11:12:11 -0500 Received: from mail-wm0-f65.google.com ([74.125.82.65]:34116 "EHLO mail-wm0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753791AbcKSQME (ORCPT ); Sat, 19 Nov 2016 11:12:04 -0500 From: Nicolai Stange To: Thomas Gleixner Cc: John Stultz , linux-kernel@vger.kernel.org, Nicolai Stange Subject: [RFC v8 20/28] clockevents: degrade ->min_delta_ticks to unsigned int Date: Sat, 19 Nov 2016 17:10:28 +0100 Message-Id: <20161119161036.12679-9-nicstange@gmail.com> X-Mailer: git-send-email 2.10.2 In-Reply-To: <20161119160055.12491-1-nicstange@gmail.com> References: <20161119160055.12491-1-nicstange@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4014 Lines: 99 While being of type unsigned long right now, the ->min_delta_ticks and ->min_delta_ticks_adjusted members of struct clock_event_device aren't expected to ever overflow an unsigned int. The latter sits in the first cacheline. For the case of sizeof(long) > sizeof(int), this is a waste of precious space needed by later patches. Degrade the types of ->min_delta_ticks_adjusted and ->min_delta_ticks from unsigned long to unsigned int. Change casts in the clockevents core were needed. Adapt the signature of clockevents_config_and_register() accordingly. Finally, move ->min_delta_ticks farther down the struct in order to allow for alignment with other ints, potentially avoiding padding. Signed-off-by: Nicolai Stange --- include/linux/clockchips.h | 8 ++++---- kernel/time/clockevents.c | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/linux/clockchips.h b/include/linux/clockchips.h index 76fc51b..c8dfc7a 100644 --- a/include/linux/clockchips.h +++ b/include/linux/clockchips.h @@ -92,9 +92,9 @@ enum clock_event_state { * @set_state_shutdown: switch state to shutdown * @tick_resume: resume clkevt device * @broadcast: function to broadcast events - * @min_delta_ticks: minimum delta value in ticks stored for reconfiguration * @max_delta_ticks: maximum delta value in ticks stored for reconfiguration * @name: ptr to clock event name + * @min_delta_ticks: minimum delta value in ticks stored for reconfiguration * @rating: variable to rate clock event devices * @irq: IRQ number (only for non CPU local devices) * @bound_on: Bound on CPU @@ -108,7 +108,7 @@ struct clock_event_device { int (*set_next_ktime)(ktime_t expires, struct clock_event_device *); ktime_t next_event; u64 max_delta_ns; - unsigned long min_delta_ticks_adjusted; + unsigned int min_delta_ticks_adjusted; u32 mult; u32 shift; enum clock_event_state state_use_accessors; @@ -124,10 +124,10 @@ struct clock_event_device { void (*broadcast)(const struct cpumask *mask); void (*suspend)(struct clock_event_device *); void (*resume)(struct clock_event_device *); - unsigned long min_delta_ticks; unsigned long max_delta_ticks; const char *name; + unsigned int min_delta_ticks; int rating; int irq; int bound_on; @@ -189,7 +189,7 @@ extern void clockevents_register_device(struct clock_event_device *dev); extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu); extern void clockevents_config_and_register(struct clock_event_device *dev, - u32 freq, unsigned long min_delta, + u32 freq, unsigned int min_delta, unsigned long max_delta); extern int clockevents_update_freq(struct clock_event_device *ce, u32 freq); diff --git a/kernel/time/clockevents.c b/kernel/time/clockevents.c index 57b00b0..84639a1 100644 --- a/kernel/time/clockevents.c +++ b/kernel/time/clockevents.c @@ -228,7 +228,7 @@ static int clockevents_increase_min_delta(struct clock_event_device *dev) if (min_delta_ns > MIN_DELTA_LIMIT) min_delta_ns = MIN_DELTA_LIMIT; - dev->min_delta_ticks_adjusted = (unsigned long)((min_delta_ns * + dev->min_delta_ticks_adjusted = (unsigned int)((min_delta_ns * dev->mult) >> dev->shift); printk_deferred(KERN_WARNING @@ -451,7 +451,7 @@ static void __clockevents_update_bounds(struct clock_event_device *dev) */ dev->min_delta_ticks_adjusted = max(dev->min_delta_ticks, - (unsigned long)((1000ULL * dev->mult) >> dev->shift)); + (unsigned int)((1000ULL * dev->mult) >> dev->shift)); } /** @@ -514,7 +514,7 @@ static void clockevents_config(struct clock_event_device *dev, u32 freq) * min/max_delta can be 0 for devices which do not support oneshot mode. */ void clockevents_config_and_register(struct clock_event_device *dev, - u32 freq, unsigned long min_delta, + u32 freq, unsigned int min_delta, unsigned long max_delta) { dev->min_delta_ticks = min_delta; -- 2.10.2