Merge branch 'imx/dt' into next/dt
This commit is contained in:
@@ -125,11 +125,10 @@ targets += config_data.gz
|
||||
$(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE
|
||||
$(call if_changed,gzip)
|
||||
|
||||
quiet_cmd_ikconfiggz = IKCFG $@
|
||||
cmd_ikconfiggz = (echo "static const char kernel_config_data[] __used = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;") > $@
|
||||
filechk_ikconfiggz = (echo "static const char kernel_config_data[] __used = MAGIC_START"; cat $< | scripts/bin2c; echo "MAGIC_END;")
|
||||
targets += config_data.h
|
||||
$(obj)/config_data.h: $(obj)/config_data.gz FORCE
|
||||
$(call if_changed,ikconfiggz)
|
||||
$(call filechk,ikconfiggz)
|
||||
|
||||
$(obj)/time.o: $(obj)/timeconst.h
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <asm/types.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
#include <linux/poll.h>
|
||||
#include <linux/flex_array.h> /* used in cgroup_attach_proc */
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
static DEFINE_MUTEX(cgroup_mutex);
|
||||
|
||||
@@ -1697,7 +1697,6 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
|
||||
{
|
||||
char *start;
|
||||
struct dentry *dentry = rcu_dereference_check(cgrp->dentry,
|
||||
rcu_read_lock_held() ||
|
||||
cgroup_lock_is_held());
|
||||
|
||||
if (!dentry || cgrp == dummytop) {
|
||||
@@ -1723,7 +1722,6 @@ int cgroup_path(const struct cgroup *cgrp, char *buf, int buflen)
|
||||
break;
|
||||
|
||||
dentry = rcu_dereference_check(cgrp->dentry,
|
||||
rcu_read_lock_held() ||
|
||||
cgroup_lock_is_held());
|
||||
if (!cgrp->parent)
|
||||
continue;
|
||||
@@ -4814,8 +4812,7 @@ unsigned short css_id(struct cgroup_subsys_state *css)
|
||||
* on this or this is under rcu_read_lock(). Once css->id is allocated,
|
||||
* it's unchanged until freed.
|
||||
*/
|
||||
cssid = rcu_dereference_check(css->id,
|
||||
rcu_read_lock_held() || atomic_read(&css->refcnt));
|
||||
cssid = rcu_dereference_check(css->id, atomic_read(&css->refcnt));
|
||||
|
||||
if (cssid)
|
||||
return cssid->id;
|
||||
@@ -4827,8 +4824,7 @@ unsigned short css_depth(struct cgroup_subsys_state *css)
|
||||
{
|
||||
struct css_id *cssid;
|
||||
|
||||
cssid = rcu_dereference_check(css->id,
|
||||
rcu_read_lock_held() || atomic_read(&css->refcnt));
|
||||
cssid = rcu_dereference_check(css->id, atomic_read(&css->refcnt));
|
||||
|
||||
if (cssid)
|
||||
return cssid->depth;
|
||||
|
||||
@@ -92,8 +92,8 @@ static void __exit ikconfig_cleanup(void)
|
||||
module_init(ikconfig_init);
|
||||
module_exit(ikconfig_cleanup);
|
||||
|
||||
#endif /* CONFIG_IKCONFIG_PROC */
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Randy Dunlap");
|
||||
MODULE_DESCRIPTION("Echo the kernel .config file used to build the kernel");
|
||||
|
||||
#endif /* CONFIG_IKCONFIG_PROC */
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
#include <linux/sort.h>
|
||||
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/cgroup.h>
|
||||
@@ -2460,11 +2460,19 @@ static int cpuset_spread_node(int *rotor)
|
||||
|
||||
int cpuset_mem_spread_node(void)
|
||||
{
|
||||
if (current->cpuset_mem_spread_rotor == NUMA_NO_NODE)
|
||||
current->cpuset_mem_spread_rotor =
|
||||
node_random(¤t->mems_allowed);
|
||||
|
||||
return cpuset_spread_node(¤t->cpuset_mem_spread_rotor);
|
||||
}
|
||||
|
||||
int cpuset_slab_spread_node(void)
|
||||
{
|
||||
if (current->cpuset_slab_spread_rotor == NUMA_NO_NODE)
|
||||
current->cpuset_slab_spread_rotor =
|
||||
node_random(¤t->mems_allowed);
|
||||
|
||||
return cpuset_spread_node(¤t->cpuset_slab_spread_rotor);
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#include "debug_core.h"
|
||||
|
||||
@@ -85,7 +85,6 @@ static void __exit_signal(struct task_struct *tsk)
|
||||
struct tty_struct *uninitialized_var(tty);
|
||||
|
||||
sighand = rcu_dereference_check(tsk->sighand,
|
||||
rcu_read_lock_held() ||
|
||||
lockdep_tasklist_lock_is_held());
|
||||
spin_lock(&sighand->siglock);
|
||||
|
||||
@@ -898,7 +897,6 @@ NORET_TYPE void do_exit(long code)
|
||||
|
||||
profile_task_exit(tsk);
|
||||
|
||||
WARN_ON(atomic_read(&tsk->fs_excl));
|
||||
WARN_ON(blk_needs_flush_plug(tsk));
|
||||
|
||||
if (unlikely(in_interrupt()))
|
||||
@@ -982,6 +980,7 @@ NORET_TYPE void do_exit(long code)
|
||||
trace_sched_process_exit(tsk);
|
||||
|
||||
exit_sem(tsk);
|
||||
exit_shm(tsk);
|
||||
exit_files(tsk);
|
||||
exit_fs(tsk);
|
||||
check_stack_usage();
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
* Protected counters by write_lock_irq(&tasklist_lock)
|
||||
*/
|
||||
unsigned long total_forks; /* Handle normal Linux uptimes. */
|
||||
int nr_threads; /* The idle threads do not count.. */
|
||||
int nr_threads; /* The idle threads do not count.. */
|
||||
|
||||
int max_threads; /* tunable limit on nr_threads */
|
||||
|
||||
@@ -232,7 +232,7 @@ void __init fork_init(unsigned long mempages)
|
||||
/*
|
||||
* we need to allow at least 20 threads to boot a system
|
||||
*/
|
||||
if(max_threads < 20)
|
||||
if (max_threads < 20)
|
||||
max_threads = 20;
|
||||
|
||||
init_task.signal->rlim[RLIMIT_NPROC].rlim_cur = max_threads/2;
|
||||
@@ -268,7 +268,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
err = arch_dup_task_struct(tsk, orig);
|
||||
err = arch_dup_task_struct(tsk, orig);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
@@ -288,9 +288,11 @@ static struct task_struct *dup_task_struct(struct task_struct *orig)
|
||||
tsk->stack_canary = get_random_int();
|
||||
#endif
|
||||
|
||||
/* One for us, one for whoever does the "release_task()" (usually parent) */
|
||||
atomic_set(&tsk->usage,2);
|
||||
atomic_set(&tsk->fs_excl, 0);
|
||||
/*
|
||||
* One for us, one for whoever does the "release_task()" (usually
|
||||
* parent)
|
||||
*/
|
||||
atomic_set(&tsk->usage, 2);
|
||||
#ifdef CONFIG_BLK_DEV_IO_TRACE
|
||||
tsk->btrace_seq = 0;
|
||||
#endif
|
||||
@@ -438,7 +440,7 @@ fail_nomem:
|
||||
goto out;
|
||||
}
|
||||
|
||||
static inline int mm_alloc_pgd(struct mm_struct * mm)
|
||||
static inline int mm_alloc_pgd(struct mm_struct *mm)
|
||||
{
|
||||
mm->pgd = pgd_alloc(mm);
|
||||
if (unlikely(!mm->pgd))
|
||||
@@ -446,7 +448,7 @@ static inline int mm_alloc_pgd(struct mm_struct * mm)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void mm_free_pgd(struct mm_struct * mm)
|
||||
static inline void mm_free_pgd(struct mm_struct *mm)
|
||||
{
|
||||
pgd_free(mm, mm->pgd);
|
||||
}
|
||||
@@ -483,7 +485,7 @@ static void mm_init_aio(struct mm_struct *mm)
|
||||
#endif
|
||||
}
|
||||
|
||||
static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p)
|
||||
static struct mm_struct *mm_init(struct mm_struct *mm, struct task_struct *p)
|
||||
{
|
||||
atomic_set(&mm->mm_users, 1);
|
||||
atomic_set(&mm->mm_count, 1);
|
||||
@@ -514,9 +516,9 @@ static struct mm_struct * mm_init(struct mm_struct * mm, struct task_struct *p)
|
||||
/*
|
||||
* Allocate and initialize an mm_struct.
|
||||
*/
|
||||
struct mm_struct * mm_alloc(void)
|
||||
struct mm_struct *mm_alloc(void)
|
||||
{
|
||||
struct mm_struct * mm;
|
||||
struct mm_struct *mm;
|
||||
|
||||
mm = allocate_mm();
|
||||
if (!mm)
|
||||
@@ -584,7 +586,7 @@ void added_exe_file_vma(struct mm_struct *mm)
|
||||
void removed_exe_file_vma(struct mm_struct *mm)
|
||||
{
|
||||
mm->num_exe_file_vmas--;
|
||||
if ((mm->num_exe_file_vmas == 0) && mm->exe_file){
|
||||
if ((mm->num_exe_file_vmas == 0) && mm->exe_file) {
|
||||
fput(mm->exe_file);
|
||||
mm->exe_file = NULL;
|
||||
}
|
||||
@@ -776,9 +778,9 @@ fail_nocontext:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int copy_mm(unsigned long clone_flags, struct task_struct * tsk)
|
||||
static int copy_mm(unsigned long clone_flags, struct task_struct *tsk)
|
||||
{
|
||||
struct mm_struct * mm, *oldmm;
|
||||
struct mm_struct *mm, *oldmm;
|
||||
int retval;
|
||||
|
||||
tsk->min_flt = tsk->maj_flt = 0;
|
||||
@@ -845,7 +847,7 @@ static int copy_fs(unsigned long clone_flags, struct task_struct *tsk)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int copy_files(unsigned long clone_flags, struct task_struct * tsk)
|
||||
static int copy_files(unsigned long clone_flags, struct task_struct *tsk)
|
||||
{
|
||||
struct files_struct *oldf, *newf;
|
||||
int error = 0;
|
||||
@@ -1167,13 +1169,17 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
cgroup_fork(p);
|
||||
#ifdef CONFIG_NUMA
|
||||
p->mempolicy = mpol_dup(p->mempolicy);
|
||||
if (IS_ERR(p->mempolicy)) {
|
||||
retval = PTR_ERR(p->mempolicy);
|
||||
p->mempolicy = NULL;
|
||||
goto bad_fork_cleanup_cgroup;
|
||||
}
|
||||
if (IS_ERR(p->mempolicy)) {
|
||||
retval = PTR_ERR(p->mempolicy);
|
||||
p->mempolicy = NULL;
|
||||
goto bad_fork_cleanup_cgroup;
|
||||
}
|
||||
mpol_fix_fork_child_flag(p);
|
||||
#endif
|
||||
#ifdef CONFIG_CPUSETS
|
||||
p->cpuset_mem_spread_rotor = NUMA_NO_NODE;
|
||||
p->cpuset_slab_spread_rotor = NUMA_NO_NODE;
|
||||
#endif
|
||||
#ifdef CONFIG_TRACE_IRQFLAGS
|
||||
p->irq_events = 0;
|
||||
#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
|
||||
@@ -1213,25 +1219,33 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
retval = perf_event_init_task(p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_policy;
|
||||
|
||||
if ((retval = audit_alloc(p)))
|
||||
retval = audit_alloc(p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_policy;
|
||||
/* copy all the process information */
|
||||
if ((retval = copy_semundo(clone_flags, p)))
|
||||
retval = copy_semundo(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_audit;
|
||||
if ((retval = copy_files(clone_flags, p)))
|
||||
retval = copy_files(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_semundo;
|
||||
if ((retval = copy_fs(clone_flags, p)))
|
||||
retval = copy_fs(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_files;
|
||||
if ((retval = copy_sighand(clone_flags, p)))
|
||||
retval = copy_sighand(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_fs;
|
||||
if ((retval = copy_signal(clone_flags, p)))
|
||||
retval = copy_signal(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_sighand;
|
||||
if ((retval = copy_mm(clone_flags, p)))
|
||||
retval = copy_mm(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_signal;
|
||||
if ((retval = copy_namespaces(clone_flags, p)))
|
||||
retval = copy_namespaces(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_mm;
|
||||
if ((retval = copy_io(clone_flags, p)))
|
||||
retval = copy_io(clone_flags, p);
|
||||
if (retval)
|
||||
goto bad_fork_cleanup_namespaces;
|
||||
retval = copy_thread(clone_flags, stack_start, stack_size, p, regs);
|
||||
if (retval)
|
||||
@@ -1253,7 +1267,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
/*
|
||||
* Clear TID on mm_release()?
|
||||
*/
|
||||
p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr: NULL;
|
||||
p->clear_child_tid = (clone_flags & CLONE_CHILD_CLEARTID) ? child_tidptr : NULL;
|
||||
#ifdef CONFIG_BLOCK
|
||||
p->plug = NULL;
|
||||
#endif
|
||||
@@ -1321,7 +1335,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
* it's process group.
|
||||
* A fatal signal pending means that current will exit, so the new
|
||||
* thread can't slip out of an OOM kill (or normal SIGKILL).
|
||||
*/
|
||||
*/
|
||||
recalc_sigpending();
|
||||
if (signal_pending(current)) {
|
||||
spin_unlock(¤t->sighand->siglock);
|
||||
@@ -1682,12 +1696,14 @@ SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags)
|
||||
*/
|
||||
if (unshare_flags & (CLONE_NEWIPC|CLONE_SYSVSEM))
|
||||
do_sysvsem = 1;
|
||||
if ((err = unshare_fs(unshare_flags, &new_fs)))
|
||||
err = unshare_fs(unshare_flags, &new_fs);
|
||||
if (err)
|
||||
goto bad_unshare_out;
|
||||
if ((err = unshare_fd(unshare_flags, &new_fd)))
|
||||
err = unshare_fd(unshare_flags, &new_fd);
|
||||
if (err)
|
||||
goto bad_unshare_cleanup_fs;
|
||||
if ((err = unshare_nsproxy_namespaces(unshare_flags, &new_nsproxy,
|
||||
new_fs)))
|
||||
err = unshare_nsproxy_namespaces(unshare_flags, &new_nsproxy, new_fs);
|
||||
if (err)
|
||||
goto bad_unshare_cleanup_fd;
|
||||
|
||||
if (new_fs || new_fd || do_sysvsem || new_nsproxy) {
|
||||
|
||||
@@ -355,8 +355,8 @@ static int fault_in_user_writeable(u32 __user *uaddr)
|
||||
int ret;
|
||||
|
||||
down_read(&mm->mmap_sem);
|
||||
ret = get_user_pages(current, mm, (unsigned long)uaddr,
|
||||
1, 1, 0, NULL, NULL);
|
||||
ret = fixup_user_fault(current, mm, (unsigned long)uaddr,
|
||||
FAULT_FLAG_WRITE);
|
||||
up_read(&mm->mmap_sem);
|
||||
|
||||
return ret < 0 ? ret : 0;
|
||||
|
||||
@@ -3,7 +3,7 @@ menu "GCOV-based kernel profiling"
|
||||
config GCOV_KERNEL
|
||||
bool "Enable gcov-based kernel profiling"
|
||||
depends on DEBUG_FS
|
||||
select CONSTRUCTORS
|
||||
select CONSTRUCTORS if !UML
|
||||
default n
|
||||
---help---
|
||||
This option enables gcov-based code profiling (e.g. for code coverage
|
||||
|
||||
@@ -87,8 +87,8 @@ void devm_free_irq(struct device *dev, unsigned int irq, void *dev_id)
|
||||
{
|
||||
struct irq_devres match_data = { irq, dev_id };
|
||||
|
||||
free_irq(irq, dev_id);
|
||||
WARN_ON(devres_destroy(dev, devm_irq_release, devm_irq_match,
|
||||
&match_data));
|
||||
free_irq(irq, dev_id);
|
||||
}
|
||||
EXPORT_SYMBOL(devm_free_irq);
|
||||
|
||||
@@ -1095,7 +1095,7 @@ size_t crash_get_memory_size(void)
|
||||
size_t size = 0;
|
||||
mutex_lock(&kexec_mutex);
|
||||
if (crashk_res.end != crashk_res.start)
|
||||
size = crashk_res.end - crashk_res.start + 1;
|
||||
size = resource_size(&crashk_res);
|
||||
mutex_unlock(&kexec_mutex);
|
||||
return size;
|
||||
}
|
||||
|
||||
@@ -525,37 +525,6 @@ void srcu_init_notifier_head(struct srcu_notifier_head *nh)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(srcu_init_notifier_head);
|
||||
|
||||
/**
|
||||
* register_reboot_notifier - Register function to be called at reboot time
|
||||
* @nb: Info about notifier function to be called
|
||||
*
|
||||
* Registers a function with the list of functions
|
||||
* to be called at reboot time.
|
||||
*
|
||||
* Currently always returns zero, as blocking_notifier_chain_register()
|
||||
* always returns zero.
|
||||
*/
|
||||
int register_reboot_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return blocking_notifier_chain_register(&reboot_notifier_list, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(register_reboot_notifier);
|
||||
|
||||
/**
|
||||
* unregister_reboot_notifier - Unregister previously registered reboot notifier
|
||||
* @nb: Hook to be unregistered
|
||||
*
|
||||
* Unregisters a previously registered reboot
|
||||
* notifier function.
|
||||
*
|
||||
* Returns zero on success, or %-ENOENT on failure.
|
||||
*/
|
||||
int unregister_reboot_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return blocking_notifier_chain_unregister(&reboot_notifier_list, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(unregister_reboot_notifier);
|
||||
|
||||
static ATOMIC_NOTIFIER_HEAD(die_chain);
|
||||
|
||||
int notrace __kprobes notify_die(enum die_val val, const char *str,
|
||||
|
||||
@@ -119,6 +119,8 @@ NORET_TYPE void panic(const char * fmt, ...)
|
||||
}
|
||||
mdelay(PANIC_TIMER_STEP);
|
||||
}
|
||||
}
|
||||
if (panic_timeout != 0) {
|
||||
/*
|
||||
* This will not be a clean reboot, with everything
|
||||
* shutting down. But if there is a chance of
|
||||
|
||||
@@ -405,7 +405,6 @@ struct task_struct *pid_task(struct pid *pid, enum pid_type type)
|
||||
if (pid) {
|
||||
struct hlist_node *first;
|
||||
first = rcu_dereference_check(hlist_first_rcu(&pid->tasks[type]),
|
||||
rcu_read_lock_held() ||
|
||||
lockdep_tasklist_lock_is_held());
|
||||
if (first)
|
||||
result = hlist_entry(first, struct task_struct, pids[(type)].node);
|
||||
|
||||
@@ -193,8 +193,8 @@ config APM_EMULATION
|
||||
notification of APM "events" (e.g. battery status change).
|
||||
|
||||
In order to use APM, you will need supporting software. For location
|
||||
and more information, read <file:Documentation/power/pm.txt> and the
|
||||
Battery Powered Linux mini-HOWTO, available from
|
||||
and more information, read <file:Documentation/power/apm-acpi.txt>
|
||||
and the Battery Powered Linux mini-HOWTO, available from
|
||||
<http://www.tldp.org/docs.html#howto>.
|
||||
|
||||
This driver does not spin down disk drives (see the hdparm(8)
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/percpu.h>
|
||||
#include <linux/notifier.h>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/completion.h>
|
||||
#include <linux/moduleparam.h>
|
||||
@@ -941,7 +941,6 @@ static void rcu_torture_timer(unsigned long unused)
|
||||
idx = cur_ops->readlock();
|
||||
completed = cur_ops->completed();
|
||||
p = rcu_dereference_check(rcu_torture_current,
|
||||
rcu_read_lock_held() ||
|
||||
rcu_read_lock_bh_held() ||
|
||||
rcu_read_lock_sched_held() ||
|
||||
srcu_read_lock_held(&srcu_ctl));
|
||||
@@ -1002,7 +1001,6 @@ rcu_torture_reader(void *arg)
|
||||
idx = cur_ops->readlock();
|
||||
completed = cur_ops->completed();
|
||||
p = rcu_dereference_check(rcu_torture_current,
|
||||
rcu_read_lock_held() ||
|
||||
rcu_read_lock_bh_held() ||
|
||||
rcu_read_lock_sched_held() ||
|
||||
srcu_read_lock_held(&srcu_ctl));
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include <linux/rcupdate.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/sched.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/completion.h>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <linux/rwsem.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
/*
|
||||
* lock for reading
|
||||
|
||||
@@ -590,7 +590,6 @@ static inline int cpu_of(struct rq *rq)
|
||||
|
||||
#define rcu_dereference_check_sched_domain(p) \
|
||||
rcu_dereference_check((p), \
|
||||
rcu_read_lock_held() || \
|
||||
lockdep_is_held(&sched_domains_mutex))
|
||||
|
||||
/*
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kallsyms.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
/*
|
||||
* Structure to determine completion condition and record errors. May
|
||||
|
||||
32
kernel/sys.c
32
kernel/sys.c
@@ -8,7 +8,6 @@
|
||||
#include <linux/mm.h>
|
||||
#include <linux/utsname.h>
|
||||
#include <linux/mman.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/reboot.h>
|
||||
#include <linux/prctl.h>
|
||||
#include <linux/highuid.h>
|
||||
@@ -319,6 +318,37 @@ void kernel_restart_prepare(char *cmd)
|
||||
syscore_shutdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* register_reboot_notifier - Register function to be called at reboot time
|
||||
* @nb: Info about notifier function to be called
|
||||
*
|
||||
* Registers a function with the list of functions
|
||||
* to be called at reboot time.
|
||||
*
|
||||
* Currently always returns zero, as blocking_notifier_chain_register()
|
||||
* always returns zero.
|
||||
*/
|
||||
int register_reboot_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return blocking_notifier_chain_register(&reboot_notifier_list, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(register_reboot_notifier);
|
||||
|
||||
/**
|
||||
* unregister_reboot_notifier - Unregister previously registered reboot notifier
|
||||
* @nb: Hook to be unregistered
|
||||
*
|
||||
* Unregisters a previously registered reboot
|
||||
* notifier function.
|
||||
*
|
||||
* Returns zero on success, or %-ENOENT on failure.
|
||||
*/
|
||||
int unregister_reboot_notifier(struct notifier_block *nb)
|
||||
{
|
||||
return blocking_notifier_chain_unregister(&reboot_notifier_list, nb);
|
||||
}
|
||||
EXPORT_SYMBOL(unregister_reboot_notifier);
|
||||
|
||||
/**
|
||||
* kernel_restart - reboot the system
|
||||
* @cmd: pointer to buffer containing command to execute for restart
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#include <linux/fs.h>
|
||||
#include <linux/file.h>
|
||||
#include <net/genetlink.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
/*
|
||||
* Maximum length of a cpumask that can be specified in
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define _LINUX_KERNEL_TRACE_H
|
||||
|
||||
#include <linux/fs.h>
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/ring_buffer.h>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/time.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <linux/atomic.h>
|
||||
|
||||
#include "trace.h"
|
||||
#include "trace_output.h"
|
||||
|
||||
Reference in New Issue
Block a user