Merge commit 'v2.6.36-rc7' into perf/core
Conflicts: arch/x86/kernel/module.c Merge reason: Resolve the conflict, pick up fixes. Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
+1
-1
@@ -356,10 +356,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
|
||||
if (IS_ERR(pol))
|
||||
goto fail_nomem_policy;
|
||||
vma_set_policy(tmp, pol);
|
||||
tmp->vm_mm = mm;
|
||||
if (anon_vma_fork(tmp, mpnt))
|
||||
goto fail_nomem_anon_vma_fork;
|
||||
tmp->vm_flags &= ~VM_LOCKED;
|
||||
tmp->vm_mm = mm;
|
||||
tmp->vm_next = tmp->vm_prev = NULL;
|
||||
file = tmp->vm_file;
|
||||
if (file) {
|
||||
|
||||
@@ -365,8 +365,6 @@ static unsigned int setup_sgl(struct __kfifo *fifo, struct scatterlist *sgl,
|
||||
n = setup_sgl_buf(sgl, fifo->data + off, nents, l);
|
||||
n += setup_sgl_buf(sgl + n, fifo->data, nents - n, len - l);
|
||||
|
||||
if (n)
|
||||
sg_mark_end(sgl + n - 1);
|
||||
return n;
|
||||
}
|
||||
|
||||
|
||||
@@ -1538,6 +1538,7 @@ static int __unlink_module(void *_mod)
|
||||
{
|
||||
struct module *mod = _mod;
|
||||
list_del(&mod->list);
|
||||
module_bug_cleanup(mod);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2631,6 +2632,7 @@ static struct module *load_module(void __user *umod,
|
||||
if (err < 0)
|
||||
goto ddebug;
|
||||
|
||||
module_bug_finalize(info.hdr, info.sechdrs, mod);
|
||||
list_add_rcu(&mod->list, &modules);
|
||||
mutex_unlock(&module_mutex);
|
||||
|
||||
@@ -2656,6 +2658,8 @@ static struct module *load_module(void __user *umod,
|
||||
mutex_lock(&module_mutex);
|
||||
/* Unlink carefully: kallsyms could be walking list. */
|
||||
list_del_rcu(&mod->list);
|
||||
module_bug_cleanup(mod);
|
||||
|
||||
ddebug:
|
||||
if (!mod->taints)
|
||||
dynamic_debug_remove(info.debug);
|
||||
|
||||
+14
-3
@@ -365,9 +365,10 @@ call:
|
||||
EXPORT_SYMBOL_GPL(smp_call_function_any);
|
||||
|
||||
/**
|
||||
* __smp_call_function_single(): Run a function on another CPU
|
||||
* __smp_call_function_single(): Run a function on a specific CPU
|
||||
* @cpu: The CPU to run on.
|
||||
* @data: Pre-allocated and setup data structure
|
||||
* @wait: If true, wait until function has completed on specified CPU.
|
||||
*
|
||||
* Like smp_call_function_single(), but allow caller to pass in a
|
||||
* pre-allocated data structure. Useful for embedding @data inside
|
||||
@@ -376,8 +377,10 @@ EXPORT_SYMBOL_GPL(smp_call_function_any);
|
||||
void __smp_call_function_single(int cpu, struct call_single_data *data,
|
||||
int wait)
|
||||
{
|
||||
csd_lock(data);
|
||||
unsigned int this_cpu;
|
||||
unsigned long flags;
|
||||
|
||||
this_cpu = get_cpu();
|
||||
/*
|
||||
* Can deadlock when called with interrupts disabled.
|
||||
* We allow cpu's that are not yet online though, as no one else can
|
||||
@@ -387,7 +390,15 @@ void __smp_call_function_single(int cpu, struct call_single_data *data,
|
||||
WARN_ON_ONCE(cpu_online(smp_processor_id()) && wait && irqs_disabled()
|
||||
&& !oops_in_progress);
|
||||
|
||||
generic_exec_single(cpu, data, wait);
|
||||
if (cpu == this_cpu) {
|
||||
local_irq_save(flags);
|
||||
data->func(data->info);
|
||||
local_irq_restore(flags);
|
||||
} else {
|
||||
csd_lock(data);
|
||||
generic_exec_single(cpu, data, wait);
|
||||
}
|
||||
put_cpu();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user