Merge branches 'core-urgent-for-linus', 'perf-urgent-for-linus' and 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'core-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: debugobjects: Fix boot crash when kmemleak and debugobjects enabled * 'perf-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: jump_label: Fix jump_label update for modules oprofile, x86: Fix race in nmi handler while starting counters * 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: sched: Disable (revert) SCHED_LOAD_SCALE increase sched, cgroups: Fix MIN_SHARES on 64-bit boxen
This commit is contained in:
commit
27a3b735b7
5 changed files with 24 additions and 17 deletions
|
@ -112,8 +112,10 @@ static void nmi_cpu_start(void *dummy)
|
|||
static int nmi_start(void)
|
||||
{
|
||||
get_online_cpus();
|
||||
on_each_cpu(nmi_cpu_start, NULL, 1);
|
||||
ctr_running = 1;
|
||||
/* make ctr_running visible to the nmi handler: */
|
||||
smp_mb();
|
||||
on_each_cpu(nmi_cpu_start, NULL, 1);
|
||||
put_online_cpus();
|
||||
return 0;
|
||||
}
|
||||
|
@ -504,15 +506,18 @@ static int nmi_setup(void)
|
|||
|
||||
nmi_enabled = 0;
|
||||
ctr_running = 0;
|
||||
barrier();
|
||||
/* make variables visible to the nmi handler: */
|
||||
smp_mb();
|
||||
err = register_die_notifier(&profile_exceptions_nb);
|
||||
if (err)
|
||||
goto fail;
|
||||
|
||||
get_online_cpus();
|
||||
register_cpu_notifier(&oprofile_cpu_nb);
|
||||
on_each_cpu(nmi_cpu_setup, NULL, 1);
|
||||
nmi_enabled = 1;
|
||||
/* make nmi_enabled visible to the nmi handler: */
|
||||
smp_mb();
|
||||
on_each_cpu(nmi_cpu_setup, NULL, 1);
|
||||
put_online_cpus();
|
||||
|
||||
return 0;
|
||||
|
@ -531,7 +536,8 @@ static void nmi_shutdown(void)
|
|||
nmi_enabled = 0;
|
||||
ctr_running = 0;
|
||||
put_online_cpus();
|
||||
barrier();
|
||||
/* make variables visible to the nmi handler: */
|
||||
smp_mb();
|
||||
unregister_die_notifier(&profile_exceptions_nb);
|
||||
msrs = &get_cpu_var(cpu_msrs);
|
||||
model->shutdown(msrs);
|
||||
|
|
|
@ -808,7 +808,7 @@ enum cpu_idle_type {
|
|||
* when BITS_PER_LONG <= 32 are pretty high and the returns do not justify the
|
||||
* increased costs.
|
||||
*/
|
||||
#if BITS_PER_LONG > 32
|
||||
#if 0 /* BITS_PER_LONG > 32 -- currently broken: it increases power usage under light load */
|
||||
# define SCHED_LOAD_RESOLUTION 10
|
||||
# define scale_load(w) ((w) << SCHED_LOAD_RESOLUTION)
|
||||
# define scale_load_down(w) ((w) >> SCHED_LOAD_RESOLUTION)
|
||||
|
|
|
@ -375,15 +375,19 @@ int jump_label_text_reserved(void *start, void *end)
|
|||
|
||||
static void jump_label_update(struct jump_label_key *key, int enable)
|
||||
{
|
||||
struct jump_entry *entry = key->entries;
|
||||
|
||||
/* if there are no users, entry can be NULL */
|
||||
if (entry)
|
||||
__jump_label_update(key, entry, __stop___jump_table, enable);
|
||||
struct jump_entry *entry = key->entries, *stop = __stop___jump_table;
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
struct module *mod = __module_address((jump_label_t)key);
|
||||
|
||||
__jump_label_mod_update(key, enable);
|
||||
|
||||
if (mod)
|
||||
stop = mod->jump_entries + mod->num_jump_entries;
|
||||
#endif
|
||||
/* if there are no users, entry can be NULL */
|
||||
if (entry)
|
||||
__jump_label_update(key, entry, stop, enable);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -292,8 +292,8 @@ static DEFINE_SPINLOCK(task_group_lock);
|
|||
* (The default weight is 1024 - so there's no practical
|
||||
* limitation from this.)
|
||||
*/
|
||||
#define MIN_SHARES 2
|
||||
#define MAX_SHARES (1UL << (18 + SCHED_LOAD_RESOLUTION))
|
||||
#define MIN_SHARES (1UL << 1)
|
||||
#define MAX_SHARES (1UL << 18)
|
||||
|
||||
static int root_task_group_load = ROOT_TASK_GROUP_LOAD;
|
||||
#endif
|
||||
|
@ -8450,10 +8450,7 @@ int sched_group_set_shares(struct task_group *tg, unsigned long shares)
|
|||
if (!tg->se[0])
|
||||
return -EINVAL;
|
||||
|
||||
if (shares < MIN_SHARES)
|
||||
shares = MIN_SHARES;
|
||||
else if (shares > MAX_SHARES)
|
||||
shares = MAX_SHARES;
|
||||
shares = clamp(shares, scale_load(MIN_SHARES), scale_load(MAX_SHARES));
|
||||
|
||||
mutex_lock(&shares_mutex);
|
||||
if (tg->shares == shares)
|
||||
|
|
|
@ -198,7 +198,7 @@ static void free_object(struct debug_obj *obj)
|
|||
* initialized:
|
||||
*/
|
||||
if (obj_pool_free > ODEBUG_POOL_SIZE && obj_cache)
|
||||
sched = !work_pending(&debug_obj_work);
|
||||
sched = keventd_up() && !work_pending(&debug_obj_work);
|
||||
hlist_add_head(&obj->node, &obj_pool);
|
||||
obj_pool_free++;
|
||||
obj_pool_used--;
|
||||
|
|
Loading…
Reference in a new issue