media: msp3400: Use wait_event_freezable_timeout() in msp_sleep()

The msp_sleep() is nearly open-coded wait_event_interruptible_timeout(),
and a freezable kernel thread can enter frozen state during freezing by
either calling try_to_freeze() or using wait_event_freezable() and its
variants. So we can reimplement msp_sleep() to simply invoke
a wait_event_freezable_timeout() and then eliminate a call to
try_to_freeze().

Signed-off-by: Kevin Hao <haokexin@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
Kevin Hao 2023-12-21 10:22:27 +08:00 committed by Hans Verkuil
parent ed917040eb
commit 7c17c55248
2 changed files with 7 additions and 15 deletions

View File

@ -309,23 +309,15 @@ static void msp_wake_thread(struct i2c_client *client)
wake_up_interruptible(&state->wq);
}
int msp_sleep(struct msp_state *state, int timeout)
int msp_sleep(struct msp_state *state, int msec)
{
DECLARE_WAITQUEUE(wait, current);
long timeout;
add_wait_queue(&state->wq, &wait);
if (!kthread_should_stop()) {
if (timeout < 0) {
set_current_state(TASK_INTERRUPTIBLE);
schedule();
} else {
schedule_timeout_interruptible
(msecs_to_jiffies(timeout));
}
}
timeout = msec < 0 ? MAX_SCHEDULE_TIMEOUT : msecs_to_jiffies(msec);
wait_event_freezable_timeout(state->wq, kthread_should_stop() ||
state->restart, timeout);
remove_wait_queue(&state->wq, &wait);
try_to_freeze();
return state->restart;
}

View File

@ -134,7 +134,7 @@ int msp_read_dsp(struct i2c_client *client, int addr);
int msp_reset(struct i2c_client *client);
void msp_set_scart(struct i2c_client *client, int in, int out);
void msp_update_volume(struct msp_state *state);
int msp_sleep(struct msp_state *state, int timeout);
int msp_sleep(struct msp_state *state, int msec);
/* msp3400-kthreads.c */
const char *msp_standard_std_name(int std);