Merge tag 'v3.8-rc6' into next/cleanup
Linux 3.8-rc6
This commit is contained in:
@@ -87,12 +87,6 @@ static DEFINE_SEMAPHORE(console_sem);
|
||||
struct console *console_drivers;
|
||||
EXPORT_SYMBOL_GPL(console_drivers);
|
||||
|
||||
#ifdef CONFIG_LOCKDEP
|
||||
static struct lockdep_map console_lock_dep_map = {
|
||||
.name = "console_lock"
|
||||
};
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This is used for debugging the mess that is the VT code by
|
||||
* keeping track if we have the console semaphore held. It's
|
||||
@@ -1924,7 +1918,6 @@ void console_lock(void)
|
||||
return;
|
||||
console_locked = 1;
|
||||
console_may_schedule = 1;
|
||||
mutex_acquire(&console_lock_dep_map, 0, 0, _RET_IP_);
|
||||
}
|
||||
EXPORT_SYMBOL(console_lock);
|
||||
|
||||
@@ -1946,7 +1939,6 @@ int console_trylock(void)
|
||||
}
|
||||
console_locked = 1;
|
||||
console_may_schedule = 0;
|
||||
mutex_acquire(&console_lock_dep_map, 0, 1, _RET_IP_);
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(console_trylock);
|
||||
@@ -2107,7 +2099,6 @@ skip:
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
console_locked = 0;
|
||||
mutex_release(&console_lock_dep_map, 1, _RET_IP_);
|
||||
|
||||
/* Release the exclusive_console once it is used */
|
||||
if (unlikely(exclusive_console))
|
||||
|
13
kernel/smp.c
13
kernel/smp.c
@@ -33,6 +33,7 @@ struct call_function_data {
|
||||
struct call_single_data csd;
|
||||
atomic_t refs;
|
||||
cpumask_var_t cpumask;
|
||||
cpumask_var_t cpumask_ipi;
|
||||
};
|
||||
|
||||
static DEFINE_PER_CPU_SHARED_ALIGNED(struct call_function_data, cfd_data);
|
||||
@@ -56,6 +57,9 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
|
||||
if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
|
||||
cpu_to_node(cpu)))
|
||||
return notifier_from_errno(-ENOMEM);
|
||||
if (!zalloc_cpumask_var_node(&cfd->cpumask_ipi, GFP_KERNEL,
|
||||
cpu_to_node(cpu)))
|
||||
return notifier_from_errno(-ENOMEM);
|
||||
break;
|
||||
|
||||
#ifdef CONFIG_HOTPLUG_CPU
|
||||
@@ -65,6 +69,7 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
|
||||
case CPU_DEAD:
|
||||
case CPU_DEAD_FROZEN:
|
||||
free_cpumask_var(cfd->cpumask);
|
||||
free_cpumask_var(cfd->cpumask_ipi);
|
||||
break;
|
||||
#endif
|
||||
};
|
||||
@@ -526,6 +531,12 @@ void smp_call_function_many(const struct cpumask *mask,
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* After we put an entry into the list, data->cpumask
|
||||
* may be cleared again when another CPU sends another IPI for
|
||||
* a SMP function call, so data->cpumask will be zero.
|
||||
*/
|
||||
cpumask_copy(data->cpumask_ipi, data->cpumask);
|
||||
raw_spin_lock_irqsave(&call_function.lock, flags);
|
||||
/*
|
||||
* Place entry at the _HEAD_ of the list, so that any cpu still
|
||||
@@ -549,7 +560,7 @@ void smp_call_function_many(const struct cpumask *mask,
|
||||
smp_mb();
|
||||
|
||||
/* Send a message to all CPUs in the map */
|
||||
arch_send_call_function_ipi_mask(data->cpumask);
|
||||
arch_send_call_function_ipi_mask(data->cpumask_ipi);
|
||||
|
||||
/* Optionally wait for the CPUs to complete */
|
||||
if (wait)
|
||||
|
Reference in New Issue
Block a user