Messages in this thread Patch in this message |  | | From | Nicolai Stange <> | Subject | [RFC v8 20/28] clockevents: degrade ->min_delta_ticks to unsigned int | Date | Sat, 19 Nov 2016 17:10:28 +0100 |
| |
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 <nicstange@gmail.com> --- 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
|  |