From dbc0f57200d60962103b3cf68faaaa43bdbea066 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Mon, 30 Oct 2017 15:26:15 -0700 Subject: [PATCH] staging: vc04_services: Convert timers to use timer_setup() In preparation for unconditionally passing the struct timer_list pointer to all timer callbacks, switch to using the new timer_setup() and from_timer() to pass the timer pointer explicitly. Additionally removes invalid NULL check, as pointed out by Dan Carpenter. Cc: Greg Kroah-Hartman Cc: Eric Anholt Cc: Stefan Wahren Cc: Michael Zoran Cc: Keerthi Reddy Cc: linux-rpi-kernel@lists.infradead.org Cc: linux-arm-kernel@lists.infradead.org Cc: devel@driverdev.osuosl.org Signed-off-by: Kees Cook Tested-by: Stefan Wahren Signed-off-by: Greg Kroah-Hartman --- .../interface/vchiq_arm/vchiq_arm.c | 17 +++++++---------- .../interface/vchiq_arm/vchiq_arm.h | 1 + 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c index 6fcc62603580..411539f8ff8c 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.c @@ -109,7 +109,7 @@ static const char *const resume_state_names[] = { * requested */ #define FORCE_SUSPEND_TIMEOUT_MS 200 -static void suspend_timer_callback(unsigned long context); +static void suspend_timer_callback(struct timer_list *t); typedef struct user_service_struct { VCHIQ_SERVICE_T *service; @@ -2184,8 +2184,9 @@ vchiq_arm_init_state(VCHIQ_STATE_T *state, VCHIQ_ARM_STATE_T *arm_state) arm_state->suspend_timer_timeout = SUSPEND_TIMER_TIMEOUT_MS; arm_state->suspend_timer_running = 0; - setup_timer(&arm_state->suspend_timer, suspend_timer_callback, - (unsigned long)(state)); + arm_state->state = state; + timer_setup(&arm_state->suspend_timer, suspend_timer_callback, + 0); arm_state->first_connect = 0; @@ -3017,18 +3018,14 @@ vchiq_instance_set_trace(VCHIQ_INSTANCE_T instance, int trace) instance->trace = (trace != 0); } -static void suspend_timer_callback(unsigned long context) +static void suspend_timer_callback(struct timer_list *t) { - VCHIQ_STATE_T *state = (VCHIQ_STATE_T *)context; - VCHIQ_ARM_STATE_T *arm_state = vchiq_platform_get_arm_state(state); + VCHIQ_ARM_STATE_T *arm_state = from_timer(arm_state, t, suspend_timer); + VCHIQ_STATE_T *state = arm_state->state; - if (!arm_state) - goto out; vchiq_log_info(vchiq_susp_log_level, "%s - suspend timer expired - check suspend", __func__); vchiq_check_suspend(state); -out: - return; } VCHIQ_STATUS_T diff --git a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h index a4cc0db899be..40bb0c63b1a9 100644 --- a/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h +++ b/drivers/staging/vc04_services/interface/vchiq_arm/vchiq_arm.h @@ -83,6 +83,7 @@ typedef struct vchiq_arm_state_struct { unsigned int wake_address; + VCHIQ_STATE_T *state; struct timer_list suspend_timer; int suspend_timer_timeout; int suspend_timer_running; -- 2.30.2