Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler updates from Ingo Molnar: "The main changes in this (fairly busy) cycle were: - There was a class of scheduler bugs related to forgetting to update the rq-clock timestamp which can cause weird and hard to debug problems, so there's a new debug facility for this: which uncovered a whole lot of bugs which convinced us that we want to keep the debug facility. (Peter Zijlstra, Matt Fleming) - Various cputime related updates: eliminate cputime and use u64 nanoseconds directly, simplify and improve the arch interfaces, implement delayed accounting more widely, etc. - (Frederic Weisbecker) - Move code around for better structure plus cleanups (Ingo Molnar) - Move IO schedule accounting deeper into the scheduler plus related changes to improve the situation (Tejun Heo) - ... plus a round of sched/rt and sched/deadline fixes, plus other fixes, updats and cleanups" * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (85 commits) sched/core: Remove unlikely() annotation from sched_move_task() sched/autogroup: Rename auto_group.[ch] to autogroup.[ch] sched/topology: Split out scheduler topology code from core.c into topology.c sched/core: Remove unnecessary #include headers sched/rq_clock: Consolidate the ordering of the rq_clock methods delayacct: Include <uapi/linux/taskstats.h> sched/core: Clean up comments sched/rt: Show the 'sched_rr_timeslice' SCHED_RR timeslice tuning knob in milliseconds sched/clock: Add dummy clear_sched_clock_stable() stub function sched/cputime: Remove generic asm headers sched/cputime: Remove unused nsec_to_cputime() s390, sched/cputime: Remove unused cputime definitions powerpc, sched/cputime: Remove unused cputime definitions s390, sched/cputime: Make arch_cpu_idle_time() to return nsecs ia64, sched/cputime: Remove unused cputime definitions ia64: Convert vtime to use nsec units directly ia64, sched/cputime: Move the nsecs based cputime headers to the last arch using it sched/cputime: Remove jiffies based cputime sched/cputime, vtime: Return nsecs instead of cputime_t to account sched/cputime: Complete nsec conversion of tick based accounting ...
This commit is contained in:
@@ -29,7 +29,6 @@ struct sched_param {
|
||||
|
||||
#include <asm/page.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <linux/cputime.h>
|
||||
|
||||
#include <linux/smp.h>
|
||||
#include <linux/sem.h>
|
||||
@@ -461,12 +460,10 @@ extern signed long schedule_timeout_idle(signed long timeout);
|
||||
asmlinkage void schedule(void);
|
||||
extern void schedule_preempt_disabled(void);
|
||||
|
||||
extern int __must_check io_schedule_prepare(void);
|
||||
extern void io_schedule_finish(int token);
|
||||
extern long io_schedule_timeout(long timeout);
|
||||
|
||||
static inline void io_schedule(void)
|
||||
{
|
||||
io_schedule_timeout(MAX_SCHEDULE_TIMEOUT);
|
||||
}
|
||||
extern void io_schedule(void);
|
||||
|
||||
void __noreturn do_task_dead(void);
|
||||
|
||||
@@ -565,15 +562,13 @@ struct pacct_struct {
|
||||
int ac_flag;
|
||||
long ac_exitcode;
|
||||
unsigned long ac_mem;
|
||||
cputime_t ac_utime, ac_stime;
|
||||
u64 ac_utime, ac_stime;
|
||||
unsigned long ac_minflt, ac_majflt;
|
||||
};
|
||||
|
||||
struct cpu_itimer {
|
||||
cputime_t expires;
|
||||
cputime_t incr;
|
||||
u32 error;
|
||||
u32 incr_error;
|
||||
u64 expires;
|
||||
u64 incr;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -587,8 +582,8 @@ struct cpu_itimer {
|
||||
*/
|
||||
struct prev_cputime {
|
||||
#ifndef CONFIG_VIRT_CPU_ACCOUNTING_NATIVE
|
||||
cputime_t utime;
|
||||
cputime_t stime;
|
||||
u64 utime;
|
||||
u64 stime;
|
||||
raw_spinlock_t lock;
|
||||
#endif
|
||||
};
|
||||
@@ -603,8 +598,8 @@ static inline void prev_cputime_init(struct prev_cputime *prev)
|
||||
|
||||
/**
|
||||
* struct task_cputime - collected CPU time counts
|
||||
* @utime: time spent in user mode, in &cputime_t units
|
||||
* @stime: time spent in kernel mode, in &cputime_t units
|
||||
* @utime: time spent in user mode, in nanoseconds
|
||||
* @stime: time spent in kernel mode, in nanoseconds
|
||||
* @sum_exec_runtime: total time spent on the CPU, in nanoseconds
|
||||
*
|
||||
* This structure groups together three kinds of CPU time that are tracked for
|
||||
@@ -612,8 +607,8 @@ static inline void prev_cputime_init(struct prev_cputime *prev)
|
||||
* these counts together and treat all three of them in parallel.
|
||||
*/
|
||||
struct task_cputime {
|
||||
cputime_t utime;
|
||||
cputime_t stime;
|
||||
u64 utime;
|
||||
u64 stime;
|
||||
unsigned long long sum_exec_runtime;
|
||||
};
|
||||
|
||||
@@ -622,13 +617,6 @@ struct task_cputime {
|
||||
#define prof_exp stime
|
||||
#define sched_exp sum_exec_runtime
|
||||
|
||||
#define INIT_CPUTIME \
|
||||
(struct task_cputime) { \
|
||||
.utime = 0, \
|
||||
.stime = 0, \
|
||||
.sum_exec_runtime = 0, \
|
||||
}
|
||||
|
||||
/*
|
||||
* This is the atomic variant of task_cputime, which can be used for
|
||||
* storing and updating task_cputime statistics without locking.
|
||||
@@ -787,9 +775,9 @@ struct signal_struct {
|
||||
* in __exit_signal, except for the group leader.
|
||||
*/
|
||||
seqlock_t stats_lock;
|
||||
cputime_t utime, stime, cutime, cstime;
|
||||
cputime_t gtime;
|
||||
cputime_t cgtime;
|
||||
u64 utime, stime, cutime, cstime;
|
||||
u64 gtime;
|
||||
u64 cgtime;
|
||||
struct prev_cputime prev_cputime;
|
||||
unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
|
||||
unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
|
||||
@@ -1668,11 +1656,11 @@ struct task_struct {
|
||||
int __user *set_child_tid; /* CLONE_CHILD_SETTID */
|
||||
int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */
|
||||
|
||||
cputime_t utime, stime;
|
||||
u64 utime, stime;
|
||||
#ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME
|
||||
cputime_t utimescaled, stimescaled;
|
||||
u64 utimescaled, stimescaled;
|
||||
#endif
|
||||
cputime_t gtime;
|
||||
u64 gtime;
|
||||
struct prev_cputime prev_cputime;
|
||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
|
||||
seqcount_t vtime_seqcount;
|
||||
@@ -1824,7 +1812,7 @@ struct task_struct {
|
||||
#if defined(CONFIG_TASK_XACCT)
|
||||
u64 acct_rss_mem1; /* accumulated rss usage */
|
||||
u64 acct_vm_mem1; /* accumulated virtual memory usage */
|
||||
cputime_t acct_timexpd; /* stime + utime since last update */
|
||||
u64 acct_timexpd; /* stime + utime since last update */
|
||||
#endif
|
||||
#ifdef CONFIG_CPUSETS
|
||||
nodemask_t mems_allowed; /* Protected by alloc_lock */
|
||||
@@ -2269,17 +2257,17 @@ struct task_struct *try_get_task_struct(struct task_struct **ptask);
|
||||
|
||||
#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
|
||||
extern void task_cputime(struct task_struct *t,
|
||||
cputime_t *utime, cputime_t *stime);
|
||||
extern cputime_t task_gtime(struct task_struct *t);
|
||||
u64 *utime, u64 *stime);
|
||||
extern u64 task_gtime(struct task_struct *t);
|
||||
#else
|
||||
static inline void task_cputime(struct task_struct *t,
|
||||
cputime_t *utime, cputime_t *stime)
|
||||
u64 *utime, u64 *stime)
|
||||
{
|
||||
*utime = t->utime;
|
||||
*stime = t->stime;
|
||||
}
|
||||
|
||||
static inline cputime_t task_gtime(struct task_struct *t)
|
||||
static inline u64 task_gtime(struct task_struct *t)
|
||||
{
|
||||
return t->gtime;
|
||||
}
|
||||
@@ -2287,23 +2275,23 @@ static inline cputime_t task_gtime(struct task_struct *t)
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_SCALED_CPUTIME
|
||||
static inline void task_cputime_scaled(struct task_struct *t,
|
||||
cputime_t *utimescaled,
|
||||
cputime_t *stimescaled)
|
||||
u64 *utimescaled,
|
||||
u64 *stimescaled)
|
||||
{
|
||||
*utimescaled = t->utimescaled;
|
||||
*stimescaled = t->stimescaled;
|
||||
}
|
||||
#else
|
||||
static inline void task_cputime_scaled(struct task_struct *t,
|
||||
cputime_t *utimescaled,
|
||||
cputime_t *stimescaled)
|
||||
u64 *utimescaled,
|
||||
u64 *stimescaled)
|
||||
{
|
||||
task_cputime(t, utimescaled, stimescaled);
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void task_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st);
|
||||
extern void thread_group_cputime_adjusted(struct task_struct *p, cputime_t *ut, cputime_t *st);
|
||||
extern void task_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st);
|
||||
extern void thread_group_cputime_adjusted(struct task_struct *p, u64 *ut, u64 *st);
|
||||
|
||||
/*
|
||||
* Per process flags
|
||||
@@ -2522,10 +2510,18 @@ extern u64 sched_clock_cpu(int cpu);
|
||||
extern void sched_clock_init(void);
|
||||
|
||||
#ifndef CONFIG_HAVE_UNSTABLE_SCHED_CLOCK
|
||||
static inline void sched_clock_init_late(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void sched_clock_tick(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void clear_sched_clock_stable(void)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void sched_clock_idle_sleep_event(void)
|
||||
{
|
||||
}
|
||||
@@ -2544,6 +2540,7 @@ static inline u64 local_clock(void)
|
||||
return sched_clock();
|
||||
}
|
||||
#else
|
||||
extern void sched_clock_init_late(void);
|
||||
/*
|
||||
* Architectures can set this to 1 if they have specified
|
||||
* CONFIG_HAVE_UNSTABLE_SCHED_CLOCK in their arch Kconfig,
|
||||
@@ -2551,7 +2548,6 @@ static inline u64 local_clock(void)
|
||||
* is reliable after all:
|
||||
*/
|
||||
extern int sched_clock_stable(void);
|
||||
extern void set_sched_clock_stable(void);
|
||||
extern void clear_sched_clock_stable(void);
|
||||
|
||||
extern void sched_clock_tick(void);
|
||||
|
Reference in New Issue
Block a user