mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Ingo Molnar: "A fix for an abs()/abs64() bug that caused too slow NTP convergence on 32-bit kernels, plus a removal of an obsolete clockevents driver facility after all users got converted during the merge window" * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: clockevents: Remove unused set_mode() callback time: Fix timekeeping_freqadjust()'s incorrect use of abs() instead of abs64()
This commit is contained in:
commit
1345df21ac
@ -18,15 +18,6 @@
|
||||
struct clock_event_device;
|
||||
struct module;
|
||||
|
||||
/* Clock event mode commands for legacy ->set_mode(): OBSOLETE */
|
||||
enum clock_event_mode {
|
||||
CLOCK_EVT_MODE_UNUSED,
|
||||
CLOCK_EVT_MODE_SHUTDOWN,
|
||||
CLOCK_EVT_MODE_PERIODIC,
|
||||
CLOCK_EVT_MODE_ONESHOT,
|
||||
CLOCK_EVT_MODE_RESUME,
|
||||
};
|
||||
|
||||
/*
|
||||
* Possible states of a clock event device.
|
||||
*
|
||||
@ -86,16 +77,14 @@ enum clock_event_state {
|
||||
* @min_delta_ns: minimum delta value in ns
|
||||
* @mult: nanosecond to cycles multiplier
|
||||
* @shift: nanoseconds to cycles divisor (power of two)
|
||||
* @mode: operating mode, relevant only to ->set_mode(), OBSOLETE
|
||||
* @state_use_accessors:current state of the device, assigned by the core code
|
||||
* @features: features
|
||||
* @retries: number of forced programming retries
|
||||
* @set_mode: legacy set mode function, only for modes <= CLOCK_EVT_MODE_RESUME.
|
||||
* @set_state_periodic: switch state to periodic, if !set_mode
|
||||
* @set_state_oneshot: switch state to oneshot, if !set_mode
|
||||
* @set_state_oneshot_stopped: switch state to oneshot_stopped, if !set_mode
|
||||
* @set_state_shutdown: switch state to shutdown, if !set_mode
|
||||
* @tick_resume: resume clkevt device, if !set_mode
|
||||
* @set_state_periodic: switch state to periodic
|
||||
* @set_state_oneshot: switch state to oneshot
|
||||
* @set_state_oneshot_stopped: switch state to oneshot_stopped
|
||||
* @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
|
||||
@ -116,18 +105,10 @@ struct clock_event_device {
|
||||
u64 min_delta_ns;
|
||||
u32 mult;
|
||||
u32 shift;
|
||||
enum clock_event_mode mode;
|
||||
enum clock_event_state state_use_accessors;
|
||||
unsigned int features;
|
||||
unsigned long retries;
|
||||
|
||||
/*
|
||||
* State transition callback(s): Only one of the two groups should be
|
||||
* defined:
|
||||
* - set_mode(), only for modes <= CLOCK_EVT_MODE_RESUME.
|
||||
* - set_state_{shutdown|periodic|oneshot|oneshot_stopped}(), tick_resume().
|
||||
*/
|
||||
void (*set_mode)(enum clock_event_mode mode, struct clock_event_device *);
|
||||
int (*set_state_periodic)(struct clock_event_device *);
|
||||
int (*set_state_oneshot)(struct clock_event_device *);
|
||||
int (*set_state_oneshot_stopped)(struct clock_event_device *);
|
||||
|
@ -97,20 +97,6 @@ EXPORT_SYMBOL_GPL(clockevent_delta2ns);
|
||||
static int __clockevents_switch_state(struct clock_event_device *dev,
|
||||
enum clock_event_state state)
|
||||
{
|
||||
/* Transition with legacy set_mode() callback */
|
||||
if (dev->set_mode) {
|
||||
/* Legacy callback doesn't support new modes */
|
||||
if (state > CLOCK_EVT_STATE_ONESHOT)
|
||||
return -ENOSYS;
|
||||
/*
|
||||
* 'clock_event_state' and 'clock_event_mode' have 1-to-1
|
||||
* mapping until *_ONESHOT, and so a simple cast will work.
|
||||
*/
|
||||
dev->set_mode((enum clock_event_mode)state, dev);
|
||||
dev->mode = (enum clock_event_mode)state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dev->features & CLOCK_EVT_FEAT_DUMMY)
|
||||
return 0;
|
||||
|
||||
@ -204,12 +190,8 @@ int clockevents_tick_resume(struct clock_event_device *dev)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (dev->set_mode) {
|
||||
dev->set_mode(CLOCK_EVT_MODE_RESUME, dev);
|
||||
dev->mode = CLOCK_EVT_MODE_RESUME;
|
||||
} else if (dev->tick_resume) {
|
||||
if (dev->tick_resume)
|
||||
ret = dev->tick_resume(dev);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -460,26 +442,6 @@ int clockevents_unbind_device(struct clock_event_device *ced, int cpu)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(clockevents_unbind_device);
|
||||
|
||||
/* Sanity check of state transition callbacks */
|
||||
static int clockevents_sanity_check(struct clock_event_device *dev)
|
||||
{
|
||||
/* Legacy set_mode() callback */
|
||||
if (dev->set_mode) {
|
||||
/* We shouldn't be supporting new modes now */
|
||||
WARN_ON(dev->set_state_periodic || dev->set_state_oneshot ||
|
||||
dev->set_state_shutdown || dev->tick_resume ||
|
||||
dev->set_state_oneshot_stopped);
|
||||
|
||||
BUG_ON(dev->mode != CLOCK_EVT_MODE_UNUSED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (dev->features & CLOCK_EVT_FEAT_DUMMY)
|
||||
return 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* clockevents_register_device - register a clock event device
|
||||
* @dev: device to register
|
||||
@ -488,8 +450,6 @@ void clockevents_register_device(struct clock_event_device *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
BUG_ON(clockevents_sanity_check(dev));
|
||||
|
||||
/* Initialize state to DETACHED */
|
||||
clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED);
|
||||
|
||||
|
@ -398,7 +398,6 @@ void tick_shutdown(unsigned int cpu)
|
||||
* the set mode function!
|
||||
*/
|
||||
clockevent_set_state(dev, CLOCK_EVT_STATE_DETACHED);
|
||||
dev->mode = CLOCK_EVT_MODE_UNUSED;
|
||||
clockevents_exchange_device(dev, NULL);
|
||||
dev->event_handler = clockevents_handle_noop;
|
||||
td->evtdev = NULL;
|
||||
|
@ -1614,7 +1614,7 @@ static __always_inline void timekeeping_freqadjust(struct timekeeper *tk,
|
||||
negative = (tick_error < 0);
|
||||
|
||||
/* Sort out the magnitude of the correction */
|
||||
tick_error = abs(tick_error);
|
||||
tick_error = abs64(tick_error);
|
||||
for (adj = 0; tick_error > interval; adj++)
|
||||
tick_error >>= 1;
|
||||
|
||||
|
@ -225,7 +225,7 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
|
||||
(unsigned long long) dev->min_delta_ns);
|
||||
SEQ_printf(m, " mult: %u\n", dev->mult);
|
||||
SEQ_printf(m, " shift: %u\n", dev->shift);
|
||||
SEQ_printf(m, " mode: %d\n", dev->mode);
|
||||
SEQ_printf(m, " mode: %d\n", clockevent_get_state(dev));
|
||||
SEQ_printf(m, " next_event: %Ld nsecs\n",
|
||||
(unsigned long long) ktime_to_ns(dev->next_event));
|
||||
|
||||
@ -233,40 +233,34 @@ print_tickdevice(struct seq_file *m, struct tick_device *td, int cpu)
|
||||
print_name_offset(m, dev->set_next_event);
|
||||
SEQ_printf(m, "\n");
|
||||
|
||||
if (dev->set_mode) {
|
||||
SEQ_printf(m, " set_mode: ");
|
||||
print_name_offset(m, dev->set_mode);
|
||||
if (dev->set_state_shutdown) {
|
||||
SEQ_printf(m, " shutdown: ");
|
||||
print_name_offset(m, dev->set_state_shutdown);
|
||||
SEQ_printf(m, "\n");
|
||||
} else {
|
||||
if (dev->set_state_shutdown) {
|
||||
SEQ_printf(m, " shutdown: ");
|
||||
print_name_offset(m, dev->set_state_shutdown);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->set_state_periodic) {
|
||||
SEQ_printf(m, " periodic: ");
|
||||
print_name_offset(m, dev->set_state_periodic);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
if (dev->set_state_periodic) {
|
||||
SEQ_printf(m, " periodic: ");
|
||||
print_name_offset(m, dev->set_state_periodic);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
|
||||
if (dev->set_state_oneshot) {
|
||||
SEQ_printf(m, " oneshot: ");
|
||||
print_name_offset(m, dev->set_state_oneshot);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
if (dev->set_state_oneshot) {
|
||||
SEQ_printf(m, " oneshot: ");
|
||||
print_name_offset(m, dev->set_state_oneshot);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
|
||||
if (dev->set_state_oneshot_stopped) {
|
||||
SEQ_printf(m, " oneshot stopped: ");
|
||||
print_name_offset(m, dev->set_state_oneshot_stopped);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
if (dev->set_state_oneshot_stopped) {
|
||||
SEQ_printf(m, " oneshot stopped: ");
|
||||
print_name_offset(m, dev->set_state_oneshot_stopped);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
|
||||
if (dev->tick_resume) {
|
||||
SEQ_printf(m, " resume: ");
|
||||
print_name_offset(m, dev->tick_resume);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
if (dev->tick_resume) {
|
||||
SEQ_printf(m, " resume: ");
|
||||
print_name_offset(m, dev->tick_resume);
|
||||
SEQ_printf(m, "\n");
|
||||
}
|
||||
|
||||
SEQ_printf(m, " event_handler: ");
|
||||
|
Loading…
Reference in New Issue
Block a user