Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer updates from Thomas Gleixner:
"The timer departement delivers:
- more year 2038 rework
- a massive rework of the arm achitected timer
- preparatory patches to allow NTP correction of clock event devices
to avoid early expiry
- the usual pile of fixes and enhancements all over the place"
* 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (91 commits)
timer/sysclt: Restrict timer migration sysctl values to 0 and 1
arm64/arch_timer: Mark errata handlers as __maybe_unused
Clocksource/mips-gic: Remove redundant non devicetree init
MIPS/Malta: Probe gic-timer via devicetree
clocksource: Use GENMASK_ULL in definition of CLOCKSOURCE_MASK
acpi/arm64: Add SBSA Generic Watchdog support in GTDT driver
clocksource: arm_arch_timer: add GTDT support for memory-mapped timer
acpi/arm64: Add memory-mapped timer support in GTDT driver
clocksource: arm_arch_timer: simplify ACPI support code.
acpi/arm64: Add GTDT table parse driver
clocksource: arm_arch_timer: split MMIO timer probing.
clocksource: arm_arch_timer: add structs to describe MMIO timer
clocksource: arm_arch_timer: move arch_timer_needs_of_probing into DT init call
clocksource: arm_arch_timer: refactor arch_timer_needs_probing
clocksource: arm_arch_timer: split dt-only rate handling
x86/uv/time: Set ->min_delta_ticks and ->max_delta_ticks
unicore32/time: Set ->min_delta_ticks and ->max_delta_ticks
um/time: Set ->min_delta_ticks and ->max_delta_ticks
tile/time: Set ->min_delta_ticks and ->max_delta_ticks
score/time: Set ->min_delta_ticks and ->max_delta_ticks
...
This commit is contained in:
commit
174ddfd5df
110 changed files with 2125 additions and 900 deletions
|
|
@ -591,6 +591,13 @@ enum acpi_reconfig_event {
|
|||
int acpi_reconfig_notifier_register(struct notifier_block *nb);
|
||||
int acpi_reconfig_notifier_unregister(struct notifier_block *nb);
|
||||
|
||||
#ifdef CONFIG_ACPI_GTDT
|
||||
int acpi_gtdt_init(struct acpi_table_header *table, int *platform_timer_count);
|
||||
int acpi_gtdt_map_ppi(int type);
|
||||
bool acpi_gtdt_c3stop(int type);
|
||||
int acpi_arch_timer_mem_init(struct arch_timer_mem *timer_mem, int *timer_count);
|
||||
#endif
|
||||
|
||||
#else /* !CONFIG_ACPI */
|
||||
|
||||
#define acpi_disabled 1
|
||||
|
|
|
|||
|
|
@ -182,7 +182,6 @@ extern u64 clockevent_delta2ns(unsigned long latch, struct clock_event_device *e
|
|||
extern void clockevents_register_device(struct clock_event_device *dev);
|
||||
extern int clockevents_unbind_device(struct clock_event_device *ced, int cpu);
|
||||
|
||||
extern void clockevents_config(struct clock_event_device *dev, u32 freq);
|
||||
extern void clockevents_config_and_register(struct clock_event_device *dev,
|
||||
u32 freq, unsigned long min_delta,
|
||||
unsigned long max_delta);
|
||||
|
|
|
|||
|
|
@ -120,7 +120,7 @@ struct clocksource {
|
|||
#define CLOCK_SOURCE_RESELECT 0x100
|
||||
|
||||
/* simplify initialization of mask field */
|
||||
#define CLOCKSOURCE_MASK(bits) (u64)((bits) < 64 ? ((1ULL<<(bits))-1) : -1)
|
||||
#define CLOCKSOURCE_MASK(bits) GENMASK_ULL((bits) - 1, 0)
|
||||
|
||||
static inline u32 clocksource_freq2mult(u32 freq, u32 shift_constant, u64 from)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -276,8 +276,6 @@ static inline int hrtimer_is_hres_active(struct hrtimer *timer)
|
|||
return timer->base->cpu_base->hres_active;
|
||||
}
|
||||
|
||||
extern void hrtimer_peek_ahead_timers(void);
|
||||
|
||||
/*
|
||||
* The resolution of the clocks. The resolution value is returned in
|
||||
* the clock_getres() system call to give application programmers an
|
||||
|
|
@ -300,8 +298,6 @@ extern unsigned int hrtimer_resolution;
|
|||
|
||||
#define hrtimer_resolution (unsigned int)LOW_RES_NSEC
|
||||
|
||||
static inline void hrtimer_peek_ahead_timers(void) { }
|
||||
|
||||
static inline int hrtimer_is_hres_active(struct hrtimer *timer)
|
||||
{
|
||||
return 0;
|
||||
|
|
@ -456,7 +452,7 @@ static inline u64 hrtimer_forward_now(struct hrtimer *timer,
|
|||
}
|
||||
|
||||
/* Precise sleep: */
|
||||
extern long hrtimer_nanosleep(struct timespec *rqtp,
|
||||
extern long hrtimer_nanosleep(struct timespec64 *rqtp,
|
||||
struct timespec __user *rmtp,
|
||||
const enum hrtimer_mode mode,
|
||||
const clockid_t clockid);
|
||||
|
|
|
|||
|
|
@ -258,7 +258,6 @@ extern unsigned int gic_present;
|
|||
extern void gic_init(unsigned long gic_base_addr,
|
||||
unsigned long gic_addrspace_size, unsigned int cpu_vec,
|
||||
unsigned int irqbase);
|
||||
extern void gic_clocksource_init(unsigned int);
|
||||
extern u64 gic_read_count(void);
|
||||
extern unsigned int gic_get_count_width(void);
|
||||
extern u64 gic_read_compare(void);
|
||||
|
|
|
|||
|
|
@ -59,23 +59,23 @@ struct posix_clock_operations {
|
|||
|
||||
int (*clock_adjtime)(struct posix_clock *pc, struct timex *tx);
|
||||
|
||||
int (*clock_gettime)(struct posix_clock *pc, struct timespec *ts);
|
||||
int (*clock_gettime)(struct posix_clock *pc, struct timespec64 *ts);
|
||||
|
||||
int (*clock_getres) (struct posix_clock *pc, struct timespec *ts);
|
||||
int (*clock_getres) (struct posix_clock *pc, struct timespec64 *ts);
|
||||
|
||||
int (*clock_settime)(struct posix_clock *pc,
|
||||
const struct timespec *ts);
|
||||
const struct timespec64 *ts);
|
||||
|
||||
int (*timer_create) (struct posix_clock *pc, struct k_itimer *kit);
|
||||
|
||||
int (*timer_delete) (struct posix_clock *pc, struct k_itimer *kit);
|
||||
|
||||
void (*timer_gettime)(struct posix_clock *pc,
|
||||
struct k_itimer *kit, struct itimerspec *tsp);
|
||||
struct k_itimer *kit, struct itimerspec64 *tsp);
|
||||
|
||||
int (*timer_settime)(struct posix_clock *pc,
|
||||
struct k_itimer *kit, int flags,
|
||||
struct itimerspec *tsp, struct itimerspec *old);
|
||||
struct itimerspec64 *tsp, struct itimerspec64 *old);
|
||||
/*
|
||||
* Optional character device methods:
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -87,22 +87,22 @@ struct k_itimer {
|
|||
};
|
||||
|
||||
struct k_clock {
|
||||
int (*clock_getres) (const clockid_t which_clock, struct timespec *tp);
|
||||
int (*clock_getres) (const clockid_t which_clock, struct timespec64 *tp);
|
||||
int (*clock_set) (const clockid_t which_clock,
|
||||
const struct timespec *tp);
|
||||
int (*clock_get) (const clockid_t which_clock, struct timespec * tp);
|
||||
const struct timespec64 *tp);
|
||||
int (*clock_get) (const clockid_t which_clock, struct timespec64 *tp);
|
||||
int (*clock_adj) (const clockid_t which_clock, struct timex *tx);
|
||||
int (*timer_create) (struct k_itimer *timer);
|
||||
int (*nsleep) (const clockid_t which_clock, int flags,
|
||||
struct timespec *, struct timespec __user *);
|
||||
struct timespec64 *, struct timespec __user *);
|
||||
long (*nsleep_restart) (struct restart_block *restart_block);
|
||||
int (*timer_set) (struct k_itimer * timr, int flags,
|
||||
struct itimerspec * new_setting,
|
||||
struct itimerspec * old_setting);
|
||||
int (*timer_del) (struct k_itimer * timr);
|
||||
int (*timer_set) (struct k_itimer *timr, int flags,
|
||||
struct itimerspec64 *new_setting,
|
||||
struct itimerspec64 *old_setting);
|
||||
int (*timer_del) (struct k_itimer *timr);
|
||||
#define TIMER_RETRY 1
|
||||
void (*timer_get) (struct k_itimer * timr,
|
||||
struct itimerspec * cur_setting);
|
||||
void (*timer_get) (struct k_itimer *timr,
|
||||
struct itimerspec64 *cur_setting);
|
||||
};
|
||||
|
||||
extern struct k_clock clock_posix_cpu;
|
||||
|
|
|
|||
|
|
@ -19,21 +19,6 @@ extern void do_gettimeofday(struct timeval *tv);
|
|||
extern int do_settimeofday64(const struct timespec64 *ts);
|
||||
extern int do_sys_settimeofday64(const struct timespec64 *tv,
|
||||
const struct timezone *tz);
|
||||
static inline int do_sys_settimeofday(const struct timespec *tv,
|
||||
const struct timezone *tz)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
|
||||
if (!tv)
|
||||
return do_sys_settimeofday64(NULL, tz);
|
||||
|
||||
if (!timespec_valid(tv))
|
||||
return -EINVAL;
|
||||
|
||||
ts64 = timespec_to_timespec64(*tv);
|
||||
return do_sys_settimeofday64(&ts64, tz);
|
||||
}
|
||||
|
||||
/*
|
||||
* Kernel time accessors
|
||||
*/
|
||||
|
|
@ -273,6 +258,11 @@ static inline void timekeeping_clocktai(struct timespec *ts)
|
|||
*ts = ktime_to_timespec(ktime_get_clocktai());
|
||||
}
|
||||
|
||||
static inline void timekeeping_clocktai64(struct timespec64 *ts)
|
||||
{
|
||||
*ts = ktime_to_timespec64(ktime_get_clocktai());
|
||||
}
|
||||
|
||||
/*
|
||||
* RTC specific
|
||||
*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue