提交 180bf812 编写于 作者: J John Stultz

timers: Improve alarmtimer comments and minor fixes

This patch addresses a number of minor comment improvements and
other minor issues from Thomas' review of the alarmtimers code.

CC: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: NJohn Stultz <john.stultz@linaro.org>
上级 9a7adcf5
master alk-4.19.24 alk-4.19.30 alk-4.19.34 alk-4.19.36 alk-4.19.43 alk-4.19.48 alk-4.19.57 ck-4.19.67 ck-4.19.81 ck-4.19.91 github/fork/deepanshu1422/fix-typo-in-comment github/fork/haosdent/fix-typo linux-next v4.19.91 v4.19.90 v4.19.89 v4.19.88 v4.19.87 v4.19.86 v4.19.85 v4.19.84 v4.19.83 v4.19.82 v4.19.81 v4.19.80 v4.19.79 v4.19.78 v4.19.77 v4.19.76 v4.19.75 v4.19.74 v4.19.73 v4.19.72 v4.19.71 v4.19.70 v4.19.69 v4.19.68 v4.19.67 v4.19.66 v4.19.65 v4.19.64 v4.19.63 v4.19.62 v4.19.61 v4.19.60 v4.19.59 v4.19.58 v4.19.57 v4.19.56 v4.19.55 v4.19.54 v4.19.53 v4.19.52 v4.19.51 v4.19.50 v4.19.49 v4.19.48 v4.19.47 v4.19.46 v4.19.45 v4.19.44 v4.19.43 v4.19.42 v4.19.41 v4.19.40 v4.19.39 v4.19.38 v4.19.37 v4.19.36 v4.19.35 v4.19.34 v4.19.33 v4.19.32 v4.19.31 v4.19.30 v4.19.29 v4.19.28 v4.19.27 v4.19.26 v4.19.25 v4.19.24 v4.19.23 v4.19.22 v4.19.21 v4.19.20 v4.19.19 v4.19.18 v4.19.17 v4.19.16 v4.19.15 v4.19.14 v4.19.13 v4.19.12 v4.19.11 v4.19.10 v4.19.9 v4.19.8 v4.19.7 v4.19.6 v4.19.5 v4.19.4 v4.19.3 v4.19.2 v4.19.1 v4.19 v4.19-rc8 v4.19-rc7 v4.19-rc6 v4.19-rc5 v4.19-rc4 v4.19-rc3 v4.19-rc2 v4.19-rc1 ck-release-21 ck-release-20 ck-release-19.2 ck-release-19.1 ck-release-19 ck-release-18 ck-release-17.2 ck-release-17.1 ck-release-17 ck-release-16 ck-release-15.1 ck-release-15 ck-release-14 ck-release-13.2 ck-release-13 ck-release-12 ck-release-11 ck-release-10 ck-release-9 ck-release-7 alk-release-15 alk-release-14 alk-release-13.2 alk-release-13 alk-release-12 alk-release-11 alk-release-10 alk-release-9 alk-release-7
无相关合并请求
...@@ -13,12 +13,22 @@ enum alarmtimer_type { ...@@ -13,12 +13,22 @@ enum alarmtimer_type {
ALARM_NUMTYPE, ALARM_NUMTYPE,
}; };
/**
* struct alarm - Alarm timer structure
* @node: timerqueue node for adding to the event list this value
* also includes the expiration time.
* @period: Period for recuring alarms
* @function: Function pointer to be executed when the timer fires.
* @type: Alarm type (BOOTTIME/REALTIME)
* @enabled: Flag that represents if the alarm is set to fire or not
* @data: Internal data value.
*/
struct alarm { struct alarm {
struct timerqueue_node node; struct timerqueue_node node;
ktime_t period; ktime_t period;
void (*function)(struct alarm *); void (*function)(struct alarm *);
enum alarmtimer_type type; enum alarmtimer_type type;
char enabled; bool enabled;
void *data; void *data;
}; };
......
...@@ -26,7 +26,15 @@ ...@@ -26,7 +26,15 @@
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/freezer.h> #include <linux/freezer.h>
/**
* struct alarm_base - Alarm timer bases
* @lock: Lock for syncrhonized access to the base
* @timerqueue: Timerqueue head managing the list of events
* @timer: hrtimer used to schedule events while running
* @gettime: Function to read the time correlating to the base
* @base_clockid: clockid for the base
* @irqwork Delayed work structure for expiring timers
*/
static struct alarm_base { static struct alarm_base {
spinlock_t lock; spinlock_t lock;
struct timerqueue_head timerqueue; struct timerqueue_head timerqueue;
...@@ -36,18 +44,16 @@ static struct alarm_base { ...@@ -36,18 +44,16 @@ static struct alarm_base {
struct work_struct irqwork; struct work_struct irqwork;
} alarm_bases[ALARM_NUMTYPE]; } alarm_bases[ALARM_NUMTYPE];
/* rtc timer and device for setting alarm wakeups at suspend */
static struct rtc_timer rtctimer; static struct rtc_timer rtctimer;
static struct rtc_device *rtcdev; static struct rtc_device *rtcdev;
/* freezer delta & lock used to handle clock_nanosleep triggered wakeups */
static ktime_t freezer_delta; static ktime_t freezer_delta;
static DEFINE_SPINLOCK(freezer_delta_lock); static DEFINE_SPINLOCK(freezer_delta_lock);
/************************************************************************** /**
* alarmtimer management code
*/
/*
* alarmtimer_enqueue - Adds an alarm timer to an alarm_base timerqueue * alarmtimer_enqueue - Adds an alarm timer to an alarm_base timerqueue
* @base: pointer to the base where the timer is being run * @base: pointer to the base where the timer is being run
* @alarm: pointer to alarm being enqueued. * @alarm: pointer to alarm being enqueued.
...@@ -67,7 +73,7 @@ static void alarmtimer_enqueue(struct alarm_base *base, struct alarm *alarm) ...@@ -67,7 +73,7 @@ static void alarmtimer_enqueue(struct alarm_base *base, struct alarm *alarm)
} }
} }
/* /**
* alarmtimer_remove - Removes an alarm timer from an alarm_base timerqueue * alarmtimer_remove - Removes an alarm timer from an alarm_base timerqueue
* @base: pointer to the base where the timer is running * @base: pointer to the base where the timer is running
* @alarm: pointer to alarm being removed * @alarm: pointer to alarm being removed
...@@ -91,16 +97,16 @@ static void alarmtimer_remove(struct alarm_base *base, struct alarm *alarm) ...@@ -91,16 +97,16 @@ static void alarmtimer_remove(struct alarm_base *base, struct alarm *alarm)
} }
} }
/* /**
* alarmtimer_do_work - Handles alarm being fired. * alarmtimer_do_work - Handles alarm being fired.
* @work: pointer to workqueue being run * @work: pointer to workqueue being run
* *
* When a timer fires, this runs through the timerqueue to see * When a alarm timer fires, this runs through the timerqueue to
* which alarm timers, and run those that expired. If there are * see which alarms expired, and runs those. If there are more alarm
* more alarm timers queued, we set the hrtimer to fire in the * timers queued for the future, we set the hrtimer to fire when
* future. * when the next future alarm timer expires.
*/ */
void alarmtimer_do_work(struct work_struct *work) static void alarmtimer_do_work(struct work_struct *work)
{ {
struct alarm_base *base = container_of(work, struct alarm_base, struct alarm_base *base = container_of(work, struct alarm_base,
irqwork); irqwork);
...@@ -141,7 +147,7 @@ void alarmtimer_do_work(struct work_struct *work) ...@@ -141,7 +147,7 @@ void alarmtimer_do_work(struct work_struct *work)
} }
/* /**
* alarmtimer_fired - Handles alarm hrtimer being fired. * alarmtimer_fired - Handles alarm hrtimer being fired.
* @timer: pointer to hrtimer being run * @timer: pointer to hrtimer being run
* *
...@@ -156,7 +162,7 @@ static enum hrtimer_restart alarmtimer_fired(struct hrtimer *timer) ...@@ -156,7 +162,7 @@ static enum hrtimer_restart alarmtimer_fired(struct hrtimer *timer)
} }
/* /**
* alarmtimer_suspend - Suspend time callback * alarmtimer_suspend - Suspend time callback
* @dev: unused * @dev: unused
* @state: unused * @state: unused
...@@ -230,17 +236,11 @@ static void alarmtimer_freezerset(ktime_t absexp, enum alarmtimer_type type) ...@@ -230,17 +236,11 @@ static void alarmtimer_freezerset(ktime_t absexp, enum alarmtimer_type type)
} }
/************************************************************************** /**
* alarm kernel interface code
*/
/*
* alarm_init - Initialize an alarm structure * alarm_init - Initialize an alarm structure
* @alarm: ptr to alarm to be initialized * @alarm: ptr to alarm to be initialized
* @type: the type of the alarm * @type: the type of the alarm
* @function: callback that is run when the alarm fires * @function: callback that is run when the alarm fires
*
* In-kernel interface to initializes the alarm structure.
*/ */
void alarm_init(struct alarm *alarm, enum alarmtimer_type type, void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
void (*function)(struct alarm *)) void (*function)(struct alarm *))
...@@ -252,13 +252,11 @@ void alarm_init(struct alarm *alarm, enum alarmtimer_type type, ...@@ -252,13 +252,11 @@ void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
alarm->enabled = 0; alarm->enabled = 0;
} }
/* /**
* alarm_start - Sets an alarm to fire * alarm_start - Sets an alarm to fire
* @alarm: ptr to alarm to set * @alarm: ptr to alarm to set
* @start: time to run the alarm * @start: time to run the alarm
* @period: period at which the alarm will recur * @period: period at which the alarm will recur
*
* In-kernel interface set an alarm timer.
*/ */
void alarm_start(struct alarm *alarm, ktime_t start, ktime_t period) void alarm_start(struct alarm *alarm, ktime_t start, ktime_t period)
{ {
...@@ -275,11 +273,9 @@ void alarm_start(struct alarm *alarm, ktime_t start, ktime_t period) ...@@ -275,11 +273,9 @@ void alarm_start(struct alarm *alarm, ktime_t start, ktime_t period)
spin_unlock_irqrestore(&base->lock, flags); spin_unlock_irqrestore(&base->lock, flags);
} }
/* /**
* alarm_cancel - Tries to cancel an alarm timer * alarm_cancel - Tries to cancel an alarm timer
* @alarm: ptr to alarm to be canceled * @alarm: ptr to alarm to be canceled
*
* In-kernel interface to cancel an alarm timer.
*/ */
void alarm_cancel(struct alarm *alarm) void alarm_cancel(struct alarm *alarm)
{ {
...@@ -294,15 +290,9 @@ void alarm_cancel(struct alarm *alarm) ...@@ -294,15 +290,9 @@ void alarm_cancel(struct alarm *alarm)
} }
/************************************************************************** /**
* alarm posix interface code
*/
/*
* clock2alarm - helper that converts from clockid to alarmtypes * clock2alarm - helper that converts from clockid to alarmtypes
* @clockid: clockid. * @clockid: clockid.
*
* Helper function that converts from clockids to alarmtypes
*/ */
static enum alarmtimer_type clock2alarm(clockid_t clockid) static enum alarmtimer_type clock2alarm(clockid_t clockid)
{ {
...@@ -313,7 +303,7 @@ static enum alarmtimer_type clock2alarm(clockid_t clockid) ...@@ -313,7 +303,7 @@ static enum alarmtimer_type clock2alarm(clockid_t clockid)
return -1; return -1;
} }
/* /**
* alarm_handle_timer - Callback for posix timers * alarm_handle_timer - Callback for posix timers
* @alarm: alarm that fired * @alarm: alarm that fired
* *
...@@ -327,7 +317,7 @@ static void alarm_handle_timer(struct alarm *alarm) ...@@ -327,7 +317,7 @@ static void alarm_handle_timer(struct alarm *alarm)
ptr->it_overrun++; ptr->it_overrun++;
} }
/* /**
* alarm_clock_getres - posix getres interface * alarm_clock_getres - posix getres interface
* @which_clock: clockid * @which_clock: clockid
* @tp: timespec to fill * @tp: timespec to fill
...@@ -598,9 +588,6 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags, ...@@ -598,9 +588,6 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
return ret; return ret;
} }
/**************************************************************************
* alarmtimer initialization code
*/
/* Suspend hook structures */ /* Suspend hook structures */
static const struct dev_pm_ops alarmtimer_pm_ops = { static const struct dev_pm_ops alarmtimer_pm_ops = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册
反馈
建议
客服 返回
顶部