mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 21:54:34 -04:00
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler changes for v3.4 from Ingo Molnar * 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (27 commits) printk: Make it compile with !CONFIG_PRINTK sched/x86: Fix overflow in cyc2ns_offset sched: Fix nohz load accounting -- again! sched: Update yield() docs printk/sched: Introduce special printk_sched() for those awkward moments sched/nohz: Correctly initialize 'next_balance' in 'nohz' idle balancer sched: Cleanup cpu_active madness sched: Fix load-balance wreckage sched: Clean up parameter passing of proc_sched_autogroup_set_nice() sched: Ditch per cgroup task lists for load-balancing sched: Rename load-balancing fields sched: Move load-balancing arguments into helper struct sched/rt: Do not submit new work when PI-blocked sched/rt: Prevent idle task boosting sched/wait: Add __wake_up_all_locked() API sched/rt: Document scheduler related skip-resched-check sites sched/rt: Use schedule_preempt_disabled() sched/rt: Add schedule_preempt_disabled() sched/rt: Do not throttle when PI boosting sched/rt: Keep period timer ticking when rt throttling is active ...
This commit is contained in:
commit
2ba68940c8
52 changed files with 462 additions and 462 deletions
|
|
@ -149,7 +149,7 @@ extern struct cred init_cred;
|
|||
}, \
|
||||
.rt = { \
|
||||
.run_list = LIST_HEAD_INIT(tsk.rt.run_list), \
|
||||
.time_slice = HZ, \
|
||||
.time_slice = RR_TIMESLICE, \
|
||||
.nr_cpus_allowed = NR_CPUS, \
|
||||
}, \
|
||||
.tasks = LIST_HEAD_INIT(tsk.tasks), \
|
||||
|
|
|
|||
|
|
@ -85,6 +85,19 @@
|
|||
} \
|
||||
)
|
||||
|
||||
/*
|
||||
* Multiplies an integer by a fraction, while avoiding unnecessary
|
||||
* overflow or loss of precision.
|
||||
*/
|
||||
#define mult_frac(x, numer, denom)( \
|
||||
{ \
|
||||
typeof(x) quot = (x) / (denom); \
|
||||
typeof(x) rem = (x) % (denom); \
|
||||
(quot * (numer)) + ((rem * (numer)) / (denom)); \
|
||||
} \
|
||||
)
|
||||
|
||||
|
||||
#define _RET_IP_ (unsigned long)__builtin_return_address(0)
|
||||
#define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; })
|
||||
|
||||
|
|
|
|||
|
|
@ -48,12 +48,14 @@ do { \
|
|||
barrier(); \
|
||||
} while (0)
|
||||
|
||||
#define preempt_enable_no_resched() \
|
||||
#define sched_preempt_enable_no_resched() \
|
||||
do { \
|
||||
barrier(); \
|
||||
dec_preempt_count(); \
|
||||
} while (0)
|
||||
|
||||
#define preempt_enable_no_resched() sched_preempt_enable_no_resched()
|
||||
|
||||
#define preempt_enable() \
|
||||
do { \
|
||||
preempt_enable_no_resched(); \
|
||||
|
|
@ -92,6 +94,7 @@ do { \
|
|||
#else /* !CONFIG_PREEMPT_COUNT */
|
||||
|
||||
#define preempt_disable() do { } while (0)
|
||||
#define sched_preempt_enable_no_resched() do { } while (0)
|
||||
#define preempt_enable_no_resched() do { } while (0)
|
||||
#define preempt_enable() do { } while (0)
|
||||
|
||||
|
|
|
|||
|
|
@ -100,6 +100,11 @@ int vprintk(const char *fmt, va_list args);
|
|||
asmlinkage __printf(1, 2) __cold
|
||||
int printk(const char *fmt, ...);
|
||||
|
||||
/*
|
||||
* Special printk facility for scheduler use only, _DO_NOT_USE_ !
|
||||
*/
|
||||
__printf(1, 2) __cold int printk_sched(const char *fmt, ...);
|
||||
|
||||
/*
|
||||
* Please don't use printk_ratelimit(), because it shares ratelimiting state
|
||||
* with all other unrelated printk_ratelimit() callsites. Instead use
|
||||
|
|
@ -127,6 +132,11 @@ int printk(const char *s, ...)
|
|||
{
|
||||
return 0;
|
||||
}
|
||||
static inline __printf(1, 2) __cold
|
||||
int printk_sched(const char *s, ...)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
static inline int printk_ratelimit(void)
|
||||
{
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -361,6 +361,7 @@ extern signed long schedule_timeout_interruptible(signed long timeout);
|
|||
extern signed long schedule_timeout_killable(signed long timeout);
|
||||
extern signed long schedule_timeout_uninterruptible(signed long timeout);
|
||||
asmlinkage void schedule(void);
|
||||
extern void schedule_preempt_disabled(void);
|
||||
extern int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner);
|
||||
|
||||
struct nsproxy;
|
||||
|
|
@ -905,6 +906,7 @@ struct sched_group_power {
|
|||
* single CPU.
|
||||
*/
|
||||
unsigned int power, power_orig;
|
||||
unsigned long next_update;
|
||||
/*
|
||||
* Number of busy cpus in this group.
|
||||
*/
|
||||
|
|
@ -1052,6 +1054,8 @@ static inline int test_sd_parent(struct sched_domain *sd, int flag)
|
|||
unsigned long default_scale_freq_power(struct sched_domain *sd, int cpu);
|
||||
unsigned long default_scale_smt_power(struct sched_domain *sd, int cpu);
|
||||
|
||||
bool cpus_share_cache(int this_cpu, int that_cpu);
|
||||
|
||||
#else /* CONFIG_SMP */
|
||||
|
||||
struct sched_domain_attr;
|
||||
|
|
@ -1061,6 +1065,12 @@ partition_sched_domains(int ndoms_new, cpumask_var_t doms_new[],
|
|||
struct sched_domain_attr *dattr_new)
|
||||
{
|
||||
}
|
||||
|
||||
static inline bool cpus_share_cache(int this_cpu, int that_cpu)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* !CONFIG_SMP */
|
||||
|
||||
|
||||
|
|
@ -1225,6 +1235,12 @@ struct sched_rt_entity {
|
|||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* default timeslice is 100 msecs (used only for SCHED_RR tasks).
|
||||
* Timeslices get refilled after they expire.
|
||||
*/
|
||||
#define RR_TIMESLICE (100 * HZ / 1000)
|
||||
|
||||
struct rcu_node;
|
||||
|
||||
enum perf_event_task_context {
|
||||
|
|
@ -2047,7 +2063,7 @@ extern void sched_autogroup_fork(struct signal_struct *sig);
|
|||
extern void sched_autogroup_exit(struct signal_struct *sig);
|
||||
#ifdef CONFIG_PROC_FS
|
||||
extern void proc_sched_autogroup_show_task(struct task_struct *p, struct seq_file *m);
|
||||
extern int proc_sched_autogroup_set_nice(struct task_struct *p, int *nice);
|
||||
extern int proc_sched_autogroup_set_nice(struct task_struct *p, int nice);
|
||||
#endif
|
||||
#else
|
||||
static inline void sched_autogroup_create_attach(struct task_struct *p) { }
|
||||
|
|
@ -2064,12 +2080,20 @@ extern unsigned int sysctl_sched_cfs_bandwidth_slice;
|
|||
extern int rt_mutex_getprio(struct task_struct *p);
|
||||
extern void rt_mutex_setprio(struct task_struct *p, int prio);
|
||||
extern void rt_mutex_adjust_pi(struct task_struct *p);
|
||||
static inline bool tsk_is_pi_blocked(struct task_struct *tsk)
|
||||
{
|
||||
return tsk->pi_blocked_on != NULL;
|
||||
}
|
||||
#else
|
||||
static inline int rt_mutex_getprio(struct task_struct *p)
|
||||
{
|
||||
return p->normal_prio;
|
||||
}
|
||||
# define rt_mutex_adjust_pi(p) do { } while (0)
|
||||
static inline bool tsk_is_pi_blocked(struct task_struct *tsk)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
extern bool yield_to(struct task_struct *p, bool preempt);
|
||||
|
|
@ -2388,12 +2412,15 @@ static inline void task_unlock(struct task_struct *p)
|
|||
extern struct sighand_struct *__lock_task_sighand(struct task_struct *tsk,
|
||||
unsigned long *flags);
|
||||
|
||||
#define lock_task_sighand(tsk, flags) \
|
||||
({ struct sighand_struct *__ss; \
|
||||
__cond_lock(&(tsk)->sighand->siglock, \
|
||||
(__ss = __lock_task_sighand(tsk, flags))); \
|
||||
__ss; \
|
||||
}) \
|
||||
static inline struct sighand_struct *lock_task_sighand(struct task_struct *tsk,
|
||||
unsigned long *flags)
|
||||
{
|
||||
struct sighand_struct *ret;
|
||||
|
||||
ret = __lock_task_sighand(tsk, flags);
|
||||
(void)__cond_lock(&tsk->sighand->siglock, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void unlock_task_sighand(struct task_struct *tsk,
|
||||
unsigned long *flags)
|
||||
|
|
|
|||
|
|
@ -157,7 +157,7 @@ void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr, void *key);
|
|||
void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key);
|
||||
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode, int nr,
|
||||
void *key);
|
||||
void __wake_up_locked(wait_queue_head_t *q, unsigned int mode);
|
||||
void __wake_up_locked(wait_queue_head_t *q, unsigned int mode, int nr);
|
||||
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr);
|
||||
void __wake_up_bit(wait_queue_head_t *, void *, int);
|
||||
int __wait_on_bit(wait_queue_head_t *, struct wait_bit_queue *, int (*)(void *), unsigned);
|
||||
|
|
@ -170,7 +170,8 @@ wait_queue_head_t *bit_waitqueue(void *, int);
|
|||
#define wake_up(x) __wake_up(x, TASK_NORMAL, 1, NULL)
|
||||
#define wake_up_nr(x, nr) __wake_up(x, TASK_NORMAL, nr, NULL)
|
||||
#define wake_up_all(x) __wake_up(x, TASK_NORMAL, 0, NULL)
|
||||
#define wake_up_locked(x) __wake_up_locked((x), TASK_NORMAL)
|
||||
#define wake_up_locked(x) __wake_up_locked((x), TASK_NORMAL, 1)
|
||||
#define wake_up_all_locked(x) __wake_up_locked((x), TASK_NORMAL, 0)
|
||||
|
||||
#define wake_up_interruptible(x) __wake_up(x, TASK_INTERRUPTIBLE, 1, NULL)
|
||||
#define wake_up_interruptible_nr(x, nr) __wake_up(x, TASK_INTERRUPTIBLE, nr, NULL)
|
||||
|
|
|
|||
Loading…
Reference in a new issue