summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViresh Kumar <viresh.kumar@linaro.org>2014-05-17 15:56:16 +0530
committerSantosh Shukla <sshukla@mvista.com>2014-11-11 18:23:26 +0530
commitf3485ced9399a39720d4bf2c3119e612a4c8b1b6 (patch)
tree90c7fa014bfc3ff4393c83bcdc3d8cb0fae13550
parent16598d8d764cb97e409548544605c1890139a0e8 (diff)
clockevents: misc: migrate to ->set_dev_mode()
Clockevents core now supports ->set_dev_mode() (as a replacement to ->set_mode()), with capability to return error codes. This patch migrates clockevent drivers for all architectures that had a single clockevent driver (in order to limit patch count). Drivers now return -ENOSYS when a unsupported mode is passed to their ->set_dev_mode() callbacks and return 0 on success. Most of the changes are automated with help of Coccinelle (http://coccinelle.lip6.fr/) and the ones left are around the switch block which are handled manually. Some drivers had a WARN()/BUG()/pr_err()/empty-implementation for unsupported modes. These statements and unsupported modes are removed now as proper error handling with a WARN_ON() is done at clockevents core. A simplified version of the semantic patch is: @@ identifier m,c,setmode; @@ -void +int setmode(enum clock_event_mode m, struct clock_event_device *c); @@ identifier setmode; @@ -void +int setmode(enum clock_event_mode, struct clock_event_device *); @fixret@ identifier m,c,setmode; @@ -void +int setmode(enum clock_event_mode m, struct clock_event_device *c) { ... + return 0; } @depends on fixret@ identifier ced; identifier fixret.setmode; @@ ... struct clock_event_device ced = { ..., -.set_mode +.set_dev_mode = setmode, }; @depends on fixret@ expression ced; identifier fixret.setmode; @@ - ced->set_mode + ced->set_dev_mode = setmode @depends on fixret@ identifier fixret.setmode; @@ { . -set_mode +set_dev_mode = setmode } @depends on fixret@ expression ced; identifier fixret.setmode; @@ - ced.set_mode + ced.set_dev_mode = setmode Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> [ Backported viresh branch tick/oneshot-stopped. applied below file manually - arch/powerpc/kernel/time.c ] Signed-off-by: Santosh Shukla <santosh.shukla@linaro.org>
-rw-r--r--arch/alpha/kernel/time.c31
-rw-r--r--arch/arc/kernel/time.c11
-rw-r--r--arch/avr32/kernel/time.c7
-rw-r--r--arch/blackfin/kernel/time-ts.c14
-rw-r--r--arch/c6x/platforms/timer64.c7
-rw-r--r--arch/hexagon/kernel/time.c11
-rw-r--r--arch/m68k/platform/coldfire/pit.c7
-rw-r--r--arch/microblaze/kernel/timer.c7
-rw-r--r--arch/mn10300/kernel/cevt-mn10300.c14
-rw-r--r--arch/openrisc/kernel/time.c7
-rw-r--r--arch/powerpc/kernel/time.c18
-rw-r--r--arch/s390/kernel/time.c14
-rw-r--r--arch/score/kernel/time.c7
-rw-r--r--arch/sh/kernel/localtimer.c15
-rw-r--r--arch/tile/kernel/time.c15
-rw-r--r--arch/um/kernel/time.c7
-rw-r--r--arch/unicore32/kernel/time.c7
-rw-r--r--arch/xtensa/kernel/time.c9
18 files changed, 160 insertions, 48 deletions
diff --git a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c
index ee39cee8064c..bae51cdee967 100644
--- a/arch/alpha/kernel/time.c
+++ b/arch/alpha/kernel/time.c
@@ -104,11 +104,22 @@ rtc_timer_interrupt(int irq, void *dev)
return IRQ_HANDLED;
}
-static void
+static int
rtc_ce_set_mode(enum clock_event_mode mode, struct clock_event_device *ce)
{
/* The mode member of CE is updated in generic code.
Since we only support periodic events, nothing to do. */
+ switch (mode) {
+ case CLOCK_EVT_MODE_PERIODIC:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
+ break;
+
+ default:
+ return -ENOSYS;
+ }
+ return 0;
}
static int
@@ -129,7 +140,7 @@ init_rtc_clockevent(void)
.features = CLOCK_EVT_FEAT_PERIODIC,
.rating = 100,
.cpumask = cpumask_of(cpu),
- .set_mode = rtc_ce_set_mode,
+ .set_dev_mode = rtc_ce_set_mode,
.set_next_event = rtc_ce_set_next_event,
};
@@ -161,12 +172,24 @@ static struct clocksource qemu_cs = {
* The QEMU alarm as a clock_event_device primitive.
*/
-static void
+static int
qemu_ce_set_mode(enum clock_event_mode mode, struct clock_event_device *ce)
{
/* The mode member of CE is updated for us in generic code.
Just make sure that the event is disabled. */
qemu_set_alarm_abs(0);
+
+ switch (mode) {
+ case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
+ break;
+
+ default:
+ return -ENOSYS;
+ }
+ return 0;
}
static int
@@ -197,7 +220,7 @@ init_qemu_clockevent(void)
.features = CLOCK_EVT_FEAT_ONESHOT,
.rating = 400,
.cpumask = cpumask_of(cpu),
- .set_mode = qemu_ce_set_mode,
+ .set_dev_mode = qemu_ce_set_mode,
.set_next_event = qemu_ce_set_next_event,
};
diff --git a/arch/arc/kernel/time.c b/arch/arc/kernel/time.c
index e5f3a837fb35..2b078b643e79 100644
--- a/arch/arc/kernel/time.c
+++ b/arch/arc/kernel/time.c
@@ -179,7 +179,7 @@ static int arc_clkevent_set_next_event(unsigned long delta,
return 0;
}
-static void arc_clkevent_set_mode(enum clock_event_mode mode,
+static int arc_clkevent_set_mode(enum clock_event_mode mode,
struct clock_event_device *dev)
{
switch (mode) {
@@ -187,12 +187,15 @@ static void arc_clkevent_set_mode(enum clock_event_mode mode,
arc_timer_event_setup(arc_get_core_freq() / HZ);
break;
case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
break;
default:
- break;
+ return -ENOSYS;
}
- return;
+ return 0;
}
static DEFINE_PER_CPU(struct clock_event_device, arc_clockevent_device) = {
@@ -202,7 +205,7 @@ static DEFINE_PER_CPU(struct clock_event_device, arc_clockevent_device) = {
.rating = 300,
.irq = TIMER0_IRQ, /* hardwired, no need for resources */
.set_next_event = arc_clkevent_set_next_event,
- .set_mode = arc_clkevent_set_mode,
+ .set_dev_mode = arc_clkevent_set_mode,
};
static irqreturn_t timer_irq_handler(int irq, void *dev_id)
diff --git a/arch/avr32/kernel/time.c b/arch/avr32/kernel/time.c
index d0f771be9e96..3f82011d14c6 100644
--- a/arch/avr32/kernel/time.c
+++ b/arch/avr32/kernel/time.c
@@ -80,7 +80,7 @@ static int comparator_next_event(unsigned long delta,
return 0;
}
-static void comparator_mode(enum clock_event_mode mode,
+static int comparator_mode(enum clock_event_mode mode,
struct clock_event_device *evdev)
{
switch (mode) {
@@ -108,8 +108,9 @@ static void comparator_mode(enum clock_event_mode mode,
}
break;
default:
- BUG();
+ return -ENOSYS;
}
+ return 0;
}
static struct clock_event_device comparator = {
@@ -118,7 +119,7 @@ static struct clock_event_device comparator = {
.shift = 16,
.rating = 50,
.set_next_event = comparator_next_event,
- .set_mode = comparator_mode,
+ .set_dev_mode = comparator_mode,
};
void read_persistent_clock(struct timespec *ts)
diff --git a/arch/blackfin/kernel/time-ts.c b/arch/blackfin/kernel/time-ts.c
index cb0a4845339e..b1592a123597 100644
--- a/arch/blackfin/kernel/time-ts.c
+++ b/arch/blackfin/kernel/time-ts.c
@@ -136,7 +136,7 @@ static int bfin_gptmr0_set_next_event(unsigned long cycles,
return 0;
}
-static void bfin_gptmr0_set_mode(enum clock_event_mode mode,
+static int bfin_gptmr0_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -173,7 +173,10 @@ static void bfin_gptmr0_set_mode(enum clock_event_mode mode,
break;
case CLOCK_EVT_MODE_RESUME:
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
static void bfin_gptmr0_ack(void)
@@ -217,7 +220,7 @@ static struct clock_event_device clockevent_gptmr0 = {
.shift = 32,
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
.set_next_event = bfin_gptmr0_set_next_event,
- .set_mode = bfin_gptmr0_set_mode,
+ .set_dev_mode = bfin_gptmr0_set_mode,
};
static void __init bfin_gptmr0_clockevent_init(struct clock_event_device *evt)
@@ -250,7 +253,7 @@ static int bfin_coretmr_set_next_event(unsigned long cycles,
return 0;
}
-static void bfin_coretmr_set_mode(enum clock_event_mode mode,
+static int bfin_coretmr_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -279,7 +282,10 @@ static void bfin_coretmr_set_mode(enum clock_event_mode mode,
break;
case CLOCK_EVT_MODE_RESUME:
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
void bfin_coretmr_init(void)
@@ -335,7 +341,7 @@ void bfin_coretmr_clockevent_init(void)
evt->shift = 32;
evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
evt->set_next_event = bfin_coretmr_set_next_event;
- evt->set_mode = bfin_coretmr_set_mode;
+ evt->set_dev_mode = bfin_coretmr_set_mode;
clock_tick = get_cclk() / TIME_SCALE;
evt->mult = div_sc(clock_tick, NSEC_PER_SEC, evt->shift);
diff --git a/arch/c6x/platforms/timer64.c b/arch/c6x/platforms/timer64.c
index 3c73d74a4674..3eef8fbb35db 100644
--- a/arch/c6x/platforms/timer64.c
+++ b/arch/c6x/platforms/timer64.c
@@ -126,7 +126,7 @@ static int next_event(unsigned long delta,
return 0;
}
-static void set_clock_mode(enum clock_event_mode mode,
+static int set_clock_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -146,14 +146,17 @@ static void set_clock_mode(enum clock_event_mode mode,
break;
case CLOCK_EVT_MODE_RESUME:
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
static struct clock_event_device t64_clockevent_device = {
.name = "TIMER64_EVT32_TIMER",
.features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC,
.rating = 200,
- .set_mode = set_clock_mode,
+ .set_dev_mode = set_clock_mode,
.set_next_event = next_event,
};
diff --git a/arch/hexagon/kernel/time.c b/arch/hexagon/kernel/time.c
index 9903fad997f3..a3fec3b2f03c 100644
--- a/arch/hexagon/kernel/time.c
+++ b/arch/hexagon/kernel/time.c
@@ -100,15 +100,20 @@ static int set_next_event(unsigned long delta, struct clock_event_device *evt)
/*
* Sets the mode (periodic, shutdown, oneshot, etc) of a timer.
*/
-static void set_mode(enum clock_event_mode mode,
+static int set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
case CLOCK_EVT_MODE_SHUTDOWN:
/* XXX implement me */
- default:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_RESUME:
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
#ifdef CONFIG_SMP
@@ -125,7 +130,7 @@ static struct clock_event_device hexagon_clockevent_dev = {
.rating = 400,
.irq = RTOS_TIMER_INT,
.set_next_event = set_next_event,
- .set_mode = set_mode,
+ .set_dev_mode = set_mode,
#ifdef CONFIG_SMP
.broadcast = broadcast,
#endif
diff --git a/arch/m68k/platform/coldfire/pit.c b/arch/m68k/platform/coldfire/pit.c
index 493b3111d4c1..993561a85fd2 100644
--- a/arch/m68k/platform/coldfire/pit.c
+++ b/arch/m68k/platform/coldfire/pit.c
@@ -42,7 +42,7 @@ static u32 pit_cnt;
* This is also called after resume to bring the PIT into operation again.
*/
-static void init_cf_pit_timer(enum clock_event_mode mode,
+static int init_cf_pit_timer(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -72,7 +72,10 @@ static void init_cf_pit_timer(enum clock_event_mode mode,
case CLOCK_EVT_MODE_RESUME:
/* Nothing to do here */
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
/*
@@ -90,7 +93,7 @@ static int cf_pit_next_event(unsigned long delta,
struct clock_event_device cf_pit_clockevent = {
.name = "pit",
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
- .set_mode = init_cf_pit_timer,
+ .set_dev_mode = init_cf_pit_timer,
.set_next_event = cf_pit_next_event,
.shift = 32,
.irq = MCF_IRQ_PIT1,
diff --git a/arch/microblaze/kernel/timer.c b/arch/microblaze/kernel/timer.c
index fb0c61443f19..35a512f67be2 100644
--- a/arch/microblaze/kernel/timer.c
+++ b/arch/microblaze/kernel/timer.c
@@ -98,7 +98,7 @@ static int xilinx_timer_set_next_event(unsigned long delta,
return 0;
}
-static void xilinx_timer_set_mode(enum clock_event_mode mode,
+static int xilinx_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -119,7 +119,10 @@ static void xilinx_timer_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_RESUME:
pr_info("%s: resume\n", __func__);
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
static struct clock_event_device clockevent_xilinx_timer = {
@@ -128,7 +131,7 @@ static struct clock_event_device clockevent_xilinx_timer = {
.shift = 8,
.rating = 300,
.set_next_event = xilinx_timer_set_next_event,
- .set_mode = xilinx_timer_set_mode,
+ .set_dev_mode = xilinx_timer_set_mode,
};
static inline void timer_ack(void)
diff --git a/arch/mn10300/kernel/cevt-mn10300.c b/arch/mn10300/kernel/cevt-mn10300.c
index ccce35e3e179..a9026a721b44 100644
--- a/arch/mn10300/kernel/cevt-mn10300.c
+++ b/arch/mn10300/kernel/cevt-mn10300.c
@@ -41,10 +41,20 @@ static int next_event(unsigned long delta,
return 0;
}
-static void set_clock_mode(enum clock_event_mode mode,
+static int set_clock_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
+ switch (mode) {
+ case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
/* Nothing to do ... */
+ break;
+ default:
+ return -ENOSYS;
+ }
+ return 0;
}
static DEFINE_PER_CPU(struct clock_event_device, mn10300_clockevent_device);
@@ -108,7 +118,7 @@ int __init init_clockevents(void)
cd->rating = 200;
cd->cpumask = cpumask_of(smp_processor_id());
- cd->set_mode = set_clock_mode;
+ cd->set_dev_mode = set_clock_mode;
cd->event_handler = event_handler;
cd->set_next_event = next_event;
diff --git a/arch/openrisc/kernel/time.c b/arch/openrisc/kernel/time.c
index 7c52e9494a8d..024bc1fe2e14 100644
--- a/arch/openrisc/kernel/time.c
+++ b/arch/openrisc/kernel/time.c
@@ -48,7 +48,7 @@ static int openrisc_timer_set_next_event(unsigned long delta,
return 0;
}
-static void openrisc_timer_set_mode(enum clock_event_mode mode,
+static int openrisc_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -68,7 +68,10 @@ static void openrisc_timer_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_RESUME:
pr_debug(KERN_INFO "%s: resume\n", __func__);
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
/* This is the clock event device based on the OR1K tick timer.
@@ -82,7 +85,7 @@ static struct clock_event_device clockevent_openrisc_timer = {
.features = CLOCK_EVT_FEAT_ONESHOT,
.rating = 300,
.set_next_event = openrisc_timer_set_next_event,
- .set_mode = openrisc_timer_set_mode,
+ .set_dev_mode = openrisc_timer_set_mode,
};
static inline void timer_ack(void)
diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c
index f8b994abb57f..c5930cc76114 100644
--- a/arch/powerpc/kernel/time.c
+++ b/arch/powerpc/kernel/time.c
@@ -97,7 +97,7 @@ static struct clocksource clocksource_timebase = {
static int decrementer_set_next_event(unsigned long evt,
struct clock_event_device *dev);
-static void decrementer_set_mode(enum clock_event_mode mode,
+static int decrementer_set_mode(enum clock_event_mode mode,
struct clock_event_device *dev);
struct clock_event_device decrementer_clockevent = {
@@ -105,7 +105,7 @@ struct clock_event_device decrementer_clockevent = {
.rating = 200,
.irq = 0,
.set_next_event = decrementer_set_next_event,
- .set_mode = decrementer_set_mode,
+ .set_dev_mode = decrementer_set_mode,
.features = CLOCK_EVT_FEAT_ONESHOT,
};
EXPORT_SYMBOL(decrementer_clockevent);
@@ -818,8 +818,20 @@ static int decrementer_set_next_event(unsigned long evt,
static void decrementer_set_mode(enum clock_event_mode mode,
struct clock_event_device *dev)
{
- if (mode != CLOCK_EVT_MODE_ONESHOT)
+ int ret = 0;
+
+ switch (mode) {
+ default:
+ ret = -ENOSYS;
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
decrementer_set_next_event(DECREMENTER_MAX, dev);
+ break;
+ case CLOCK_EVT_MODE_ONESHOT:
+ break;
+ }
+ return ret;
}
static void register_decrementer_clockevent(int cpu)
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index a80190be6e83..acfe5663e912 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -116,9 +116,19 @@ static int s390_next_event(unsigned long delta,
return 0;
}
-static void s390_set_mode(enum clock_event_mode mode,
+static int s390_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
+ switch (mode) {
+ case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
+ break;
+ default:
+ return -ENOSYS;
+ }
+ return 0;
}
/*
@@ -144,7 +154,7 @@ void init_cpu_timer(void)
cd->rating = 400;
cd->cpumask = cpumask_of(cpu);
cd->set_next_event = s390_next_event;
- cd->set_mode = s390_set_mode;
+ cd->set_dev_mode = s390_set_mode;
clockevents_register_device(cd);
diff --git a/arch/score/kernel/time.c b/arch/score/kernel/time.c
index f0a43affb201..e573b60a108d 100644
--- a/arch/score/kernel/time.c
+++ b/arch/score/kernel/time.c
@@ -55,7 +55,7 @@ static int score_timer_set_next_event(unsigned long delta,
return 0;
}
-static void score_timer_set_mode(enum clock_event_mode mode,
+static int score_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evdev)
{
switch (mode) {
@@ -70,8 +70,9 @@ static void score_timer_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_UNUSED:
break;
default:
- BUG();
+ return -ENOSYS;
}
+ return 0;
}
static struct clock_event_device score_clockevent = {
@@ -79,7 +80,7 @@ static struct clock_event_device score_clockevent = {
.features = CLOCK_EVT_FEAT_PERIODIC,
.shift = 16,
.set_next_event = score_timer_set_next_event,
- .set_mode = score_timer_set_mode,
+ .set_dev_mode = score_timer_set_mode,
};
void __init time_init(void)
diff --git a/arch/sh/kernel/localtimer.c b/arch/sh/kernel/localtimer.c
index 8bfc6dfa8b94..7d48435589e3 100644
--- a/arch/sh/kernel/localtimer.c
+++ b/arch/sh/kernel/localtimer.c
@@ -39,9 +39,20 @@ void local_timer_interrupt(void)
irq_exit();
}
-static void dummy_timer_set_mode(enum clock_event_mode mode,
+static int dummy_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *clk)
{
+ switch (mode) {
+ case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_PERIODIC:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
+ break;
+ default:
+ return -ENOSYS;
+ }
+ return 0;
}
void local_timer_setup(unsigned int cpu)
@@ -54,7 +65,7 @@ void local_timer_setup(unsigned int cpu)
CLOCK_EVT_FEAT_DUMMY;
clk->rating = 400;
clk->mult = 1;
- clk->set_mode = dummy_timer_set_mode;
+ clk->set_dev_mode = dummy_timer_set_mode;
clk->broadcast = smp_timer_broadcast;
clk->cpumask = cpumask_of(cpu);
diff --git a/arch/tile/kernel/time.c b/arch/tile/kernel/time.c
index 5d10642db63e..21c1b51a6378 100644
--- a/arch/tile/kernel/time.c
+++ b/arch/tile/kernel/time.c
@@ -140,10 +140,21 @@ static int tile_timer_set_next_event(unsigned long ticks,
* Whenever anyone tries to change modes, we just mask interrupts
* and wait for the next event to get set.
*/
-static void tile_timer_set_mode(enum clock_event_mode mode,
+static int tile_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
arch_local_irq_mask_now(INT_TILE_TIMER);
+
+ switch (mode) {
+ case CLOCK_EVT_MODE_ONESHOT:
+ case CLOCK_EVT_MODE_UNUSED:
+ case CLOCK_EVT_MODE_SHUTDOWN:
+ case CLOCK_EVT_MODE_RESUME:
+ break;
+ default:
+ return -ENOSYS;
+ }
+ return 0;
}
/*
@@ -157,7 +168,7 @@ static DEFINE_PER_CPU(struct clock_event_device, tile_timer) = {
.rating = 100,
.irq = -1,
.set_next_event = tile_timer_set_next_event,
- .set_mode = tile_timer_set_mode,
+ .set_dev_mode = tile_timer_set_mode,
};
void setup_tile_timer(void)
diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c
index 117568d4f64a..fdcd4ebe3bc9 100644
--- a/arch/um/kernel/time.c
+++ b/arch/um/kernel/time.c
@@ -22,7 +22,7 @@ void timer_handler(int sig, struct siginfo *unused_si, struct uml_pt_regs *regs)
local_irq_restore(flags);
}
-static void itimer_set_mode(enum clock_event_mode mode,
+static int itimer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
switch (mode) {
@@ -38,7 +38,10 @@ static void itimer_set_mode(enum clock_event_mode mode,
case CLOCK_EVT_MODE_RESUME:
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
static int itimer_next_event(unsigned long delta,
@@ -52,7 +55,7 @@ static struct clock_event_device itimer_clockevent = {
.rating = 250,
.cpumask = cpu_all_mask,
.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT,
- .set_mode = itimer_set_mode,
+ .set_dev_mode = itimer_set_mode,
.set_next_event = itimer_next_event,
.shift = 32,
.irq = 0,
diff --git a/arch/unicore32/kernel/time.c b/arch/unicore32/kernel/time.c
index d3824b2ff644..2a3f4c3d2096 100644
--- a/arch/unicore32/kernel/time.c
+++ b/arch/unicore32/kernel/time.c
@@ -46,7 +46,7 @@ puv3_osmr0_set_next_event(unsigned long delta, struct clock_event_device *c)
return (signed)(next - oscr) <= MIN_OSCR_DELTA ? -ETIME : 0;
}
-static void
+static int
puv3_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *c)
{
switch (mode) {
@@ -60,7 +60,10 @@ puv3_osmr0_set_mode(enum clock_event_mode mode, struct clock_event_device *c)
case CLOCK_EVT_MODE_RESUME:
case CLOCK_EVT_MODE_PERIODIC:
break;
+ default:
+ return -ENOSYS;
}
+ return 0;
}
static struct clock_event_device ckevt_puv3_osmr0 = {
@@ -68,7 +71,7 @@ static struct clock_event_device ckevt_puv3_osmr0 = {
.features = CLOCK_EVT_FEAT_ONESHOT,
.rating = 200,
.set_next_event = puv3_osmr0_set_next_event,
- .set_mode = puv3_osmr0_set_mode,
+ .set_dev_mode = puv3_osmr0_set_mode,
};
static cycle_t puv3_read_oscr(struct clocksource *cs)
diff --git a/arch/xtensa/kernel/time.c b/arch/xtensa/kernel/time.c
index 2a1823de69cc..529f060ac1da 100644
--- a/arch/xtensa/kernel/time.c
+++ b/arch/xtensa/kernel/time.c
@@ -52,7 +52,7 @@ static struct clocksource ccount_clocksource = {
static int ccount_timer_set_next_event(unsigned long delta,
struct clock_event_device *dev);
-static void ccount_timer_set_mode(enum clock_event_mode mode,
+static int ccount_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt);
struct ccount_timer {
struct clock_event_device evt;
@@ -77,7 +77,7 @@ static int ccount_timer_set_next_event(unsigned long delta,
return ret;
}
-static void ccount_timer_set_mode(enum clock_event_mode mode,
+static int ccount_timer_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
struct ccount_timer *timer =
@@ -104,8 +104,9 @@ static void ccount_timer_set_mode(enum clock_event_mode mode,
timer->irq_enabled = 1;
}
default:
- break;
+ return -ENOSYS;
}
+ return 0;
}
static irqreturn_t timer_interrupt(int irq, void *dev_id);
@@ -126,7 +127,7 @@ void local_timer_setup(unsigned cpu)
clockevent->features = CLOCK_EVT_FEAT_ONESHOT;
clockevent->rating = 300;
clockevent->set_next_event = ccount_timer_set_next_event;
- clockevent->set_mode = ccount_timer_set_mode;
+ clockevent->set_dev_mode = ccount_timer_set_mode;
clockevent->cpumask = cpumask_of(cpu);
clockevent->irq = irq_create_mapping(NULL, LINUX_TIMER_INT);
if (WARN(!clockevent->irq, "error: can't map timer irq"))