Merge branch 'akpm' (Andrew's patch-bomb)
Merge misc patches from Andrew Morton: "Incoming: - lots of misc stuff - backlight tree updates - lib/ updates - Oleg's percpu-rwsem changes - checkpatch - rtc - aoe - more checkpoint/restart support I still have a pile of MM stuff pending - Pekka should be merging later today after which that is good to go. A number of other things are twiddling thumbs awaiting maintainer merges." * emailed patches from Andrew Morton <akpm@linux-foundation.org>: (180 commits) scatterlist: don't BUG when we can trivially return a proper error. docs: update documentation about /proc/<pid>/fdinfo/<fd> fanotify output fs, fanotify: add @mflags field to fanotify output docs: add documentation about /proc/<pid>/fdinfo/<fd> output fs, notify: add procfs fdinfo helper fs, exportfs: add exportfs_encode_inode_fh() helper fs, exportfs: escape nil dereference if no s_export_op present fs, epoll: add procfs fdinfo helper fs, eventfd: add procfs fdinfo helper procfs: add ability to plug in auxiliary fdinfo providers tools/testing/selftests/kcmp/kcmp_test.c: print reason for failure in kcmp_test breakpoint selftests: print failure status instead of cause make error kcmp selftests: print fail status instead of cause make error kcmp selftests: make run_tests fix mem-hotplug selftests: print failure status instead of cause make error cpu-hotplug selftests: print failure status instead of cause make error mqueue selftests: print failure status instead of cause make error vm selftests: print failure status instead of cause make error ubifs: use prandom_bytes mtd: nandsim: use prandom_bytes ...
This commit is contained in:
commit
848b81415c
185 changed files with 3448 additions and 1340 deletions
|
@ -1333,7 +1333,6 @@ static int cgroup_remount(struct super_block *sb, int *flags, char *data)
|
|||
if (ret)
|
||||
goto out_unlock;
|
||||
|
||||
/* See feature-removal-schedule.txt */
|
||||
if (opts.subsys_mask != root->actual_subsys_mask || opts.release_agent)
|
||||
pr_warning("cgroup: option changes via remount are deprecated (pid=%d comm=%s)\n",
|
||||
task_tgid_nr(current), current->comm);
|
||||
|
|
|
@ -1215,6 +1215,23 @@ compat_sys_sysinfo(struct compat_sysinfo __user *info)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL
|
||||
asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid,
|
||||
struct compat_timespec __user *interval)
|
||||
{
|
||||
struct timespec t;
|
||||
int ret;
|
||||
mm_segment_t old_fs = get_fs();
|
||||
|
||||
set_fs(KERNEL_DS);
|
||||
ret = sys_sched_rr_get_interval(pid, (struct timespec __user *)&t);
|
||||
set_fs(old_fs);
|
||||
if (put_compat_timespec(&t, interval))
|
||||
return -EFAULT;
|
||||
return ret;
|
||||
}
|
||||
#endif /* __ARCH_WANT_COMPAT_SYS_SCHED_RR_GET_INTERVAL */
|
||||
|
||||
/*
|
||||
* Allocate user-space memory for the duration of a single system call,
|
||||
* in order to marshall parameters inside a compat thunk.
|
||||
|
|
|
@ -372,9 +372,6 @@ static bool check_symbol(const struct symsearch *syms,
|
|||
printk(KERN_WARNING "Symbol %s is being used "
|
||||
"by a non-GPL module, which will not "
|
||||
"be allowed in the future\n", fsa->name);
|
||||
printk(KERN_WARNING "Please see the file "
|
||||
"Documentation/feature-removal-schedule.txt "
|
||||
"in the kernel source tree for more details.\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
15
kernel/pid.c
15
kernel/pid.c
|
@ -84,21 +84,6 @@ struct pid_namespace init_pid_ns = {
|
|||
};
|
||||
EXPORT_SYMBOL_GPL(init_pid_ns);
|
||||
|
||||
int is_container_init(struct task_struct *tsk)
|
||||
{
|
||||
int ret = 0;
|
||||
struct pid *pid;
|
||||
|
||||
rcu_read_lock();
|
||||
pid = task_pid(tsk);
|
||||
if (pid != NULL && pid->numbers[pid->level].nr == 1)
|
||||
ret = 1;
|
||||
rcu_read_unlock();
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(is_container_init);
|
||||
|
||||
/*
|
||||
* Note: disable interrupts while the pidmap_lock is held as an
|
||||
* interrupt might come in and do read_lock(&tasklist_lock).
|
||||
|
|
|
@ -747,6 +747,21 @@ void __init setup_log_buf(int early)
|
|||
free, (free * 100) / __LOG_BUF_LEN);
|
||||
}
|
||||
|
||||
static bool __read_mostly ignore_loglevel;
|
||||
|
||||
static int __init ignore_loglevel_setup(char *str)
|
||||
{
|
||||
ignore_loglevel = 1;
|
||||
printk(KERN_INFO "debug: ignoring loglevel setting.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("ignore_loglevel", ignore_loglevel_setup);
|
||||
module_param(ignore_loglevel, bool, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(ignore_loglevel, "ignore loglevel setting, to"
|
||||
"print all kernel messages to the console.");
|
||||
|
||||
#ifdef CONFIG_BOOT_PRINTK_DELAY
|
||||
|
||||
static int boot_delay; /* msecs delay after each printk during bootup */
|
||||
|
@ -770,13 +785,15 @@ static int __init boot_delay_setup(char *str)
|
|||
}
|
||||
__setup("boot_delay=", boot_delay_setup);
|
||||
|
||||
static void boot_delay_msec(void)
|
||||
static void boot_delay_msec(int level)
|
||||
{
|
||||
unsigned long long k;
|
||||
unsigned long timeout;
|
||||
|
||||
if (boot_delay == 0 || system_state != SYSTEM_BOOTING)
|
||||
if ((boot_delay == 0 || system_state != SYSTEM_BOOTING)
|
||||
|| (level >= console_loglevel && !ignore_loglevel)) {
|
||||
return;
|
||||
}
|
||||
|
||||
k = (unsigned long long)loops_per_msec * boot_delay;
|
||||
|
||||
|
@ -795,7 +812,7 @@ static void boot_delay_msec(void)
|
|||
}
|
||||
}
|
||||
#else
|
||||
static inline void boot_delay_msec(void)
|
||||
static inline void boot_delay_msec(int level)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
@ -1238,21 +1255,6 @@ SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len)
|
|||
return do_syslog(type, buf, len, SYSLOG_FROM_CALL);
|
||||
}
|
||||
|
||||
static bool __read_mostly ignore_loglevel;
|
||||
|
||||
static int __init ignore_loglevel_setup(char *str)
|
||||
{
|
||||
ignore_loglevel = 1;
|
||||
printk(KERN_INFO "debug: ignoring loglevel setting.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
early_param("ignore_loglevel", ignore_loglevel_setup);
|
||||
module_param(ignore_loglevel, bool, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(ignore_loglevel, "ignore loglevel setting, to"
|
||||
"print all kernel messages to the console.");
|
||||
|
||||
/*
|
||||
* Call the console drivers, asking them to write out
|
||||
* log_buf[start] to log_buf[end - 1].
|
||||
|
@ -1498,7 +1500,7 @@ asmlinkage int vprintk_emit(int facility, int level,
|
|||
int this_cpu;
|
||||
int printed_len = 0;
|
||||
|
||||
boot_delay_msec();
|
||||
boot_delay_msec(level);
|
||||
printk_delay();
|
||||
|
||||
/* This stops the holder of console_sem just where we want him */
|
||||
|
|
|
@ -463,6 +463,9 @@ void exit_ptrace(struct task_struct *tracer)
|
|||
return;
|
||||
|
||||
list_for_each_entry_safe(p, n, &tracer->ptraced, ptrace_entry) {
|
||||
if (unlikely(p->ptrace & PT_EXITKILL))
|
||||
send_sig_info(SIGKILL, SEND_SIG_FORCED, p);
|
||||
|
||||
if (__ptrace_detach(tracer, p))
|
||||
list_add(&p->ptrace_entry, &ptrace_dead);
|
||||
}
|
||||
|
|
|
@ -2675,12 +2675,12 @@ ftrace_notrace_open(struct inode *inode, struct file *file)
|
|||
}
|
||||
|
||||
loff_t
|
||||
ftrace_regex_lseek(struct file *file, loff_t offset, int origin)
|
||||
ftrace_regex_lseek(struct file *file, loff_t offset, int whence)
|
||||
{
|
||||
loff_t ret;
|
||||
|
||||
if (file->f_mode & FMODE_READ)
|
||||
ret = seq_lseek(file, offset, origin);
|
||||
ret = seq_lseek(file, offset, whence);
|
||||
else
|
||||
file->f_pos = ret = 1;
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/uaccess.h>
|
||||
#include <linux/uprobes.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/string.h>
|
||||
|
||||
#include "trace_probe.h"
|
||||
|
||||
|
@ -263,16 +264,15 @@ static int create_trace_uprobe(int argc, char **argv)
|
|||
|
||||
/* setup a probe */
|
||||
if (!event) {
|
||||
char *tail = strrchr(filename, '/');
|
||||
char *tail;
|
||||
char *ptr;
|
||||
|
||||
ptr = kstrdup((tail ? tail + 1 : filename), GFP_KERNEL);
|
||||
if (!ptr) {
|
||||
tail = kstrdup(kbasename(filename), GFP_KERNEL);
|
||||
if (!tail) {
|
||||
ret = -ENOMEM;
|
||||
goto fail_address_parse;
|
||||
}
|
||||
|
||||
tail = ptr;
|
||||
ptr = strpbrk(tail, ".-_");
|
||||
if (ptr)
|
||||
*ptr = '\0';
|
||||
|
|
|
@ -31,6 +31,7 @@
|
|||
int watchdog_enabled = 1;
|
||||
int __read_mostly watchdog_thresh = 10;
|
||||
static int __read_mostly watchdog_disabled;
|
||||
static u64 __read_mostly sample_period;
|
||||
|
||||
static DEFINE_PER_CPU(unsigned long, watchdog_touch_ts);
|
||||
static DEFINE_PER_CPU(struct task_struct *, softlockup_watchdog);
|
||||
|
@ -116,7 +117,7 @@ static unsigned long get_timestamp(int this_cpu)
|
|||
return cpu_clock(this_cpu) >> 30LL; /* 2^30 ~= 10^9 */
|
||||
}
|
||||
|
||||
static u64 get_sample_period(void)
|
||||
static void set_sample_period(void)
|
||||
{
|
||||
/*
|
||||
* convert watchdog_thresh from seconds to ns
|
||||
|
@ -125,7 +126,7 @@ static u64 get_sample_period(void)
|
|||
* and hard thresholds) to increment before the
|
||||
* hardlockup detector generates a warning
|
||||
*/
|
||||
return get_softlockup_thresh() * ((u64)NSEC_PER_SEC / 5);
|
||||
sample_period = get_softlockup_thresh() * ((u64)NSEC_PER_SEC / 5);
|
||||
}
|
||||
|
||||
/* Commands for resetting the watchdog */
|
||||
|
@ -275,7 +276,7 @@ static enum hrtimer_restart watchdog_timer_fn(struct hrtimer *hrtimer)
|
|||
wake_up_process(__this_cpu_read(softlockup_watchdog));
|
||||
|
||||
/* .. and repeat */
|
||||
hrtimer_forward_now(hrtimer, ns_to_ktime(get_sample_period()));
|
||||
hrtimer_forward_now(hrtimer, ns_to_ktime(sample_period));
|
||||
|
||||
if (touch_ts == 0) {
|
||||
if (unlikely(__this_cpu_read(softlockup_touch_sync))) {
|
||||
|
@ -356,7 +357,7 @@ static void watchdog_enable(unsigned int cpu)
|
|||
hrtimer->function = watchdog_timer_fn;
|
||||
|
||||
/* done here because hrtimer_start can only pin to smp_processor_id() */
|
||||
hrtimer_start(hrtimer, ns_to_ktime(get_sample_period()),
|
||||
hrtimer_start(hrtimer, ns_to_ktime(sample_period),
|
||||
HRTIMER_MODE_REL_PINNED);
|
||||
|
||||
/* initialize timestamp */
|
||||
|
@ -386,7 +387,7 @@ static int watchdog_should_run(unsigned int cpu)
|
|||
/*
|
||||
* The watchdog thread function - touches the timestamp.
|
||||
*
|
||||
* It only runs once every get_sample_period() seconds (4 seconds by
|
||||
* It only runs once every sample_period seconds (4 seconds by
|
||||
* default) to reset the softlockup timestamp. If this gets delayed
|
||||
* for more than 2*watchdog_thresh seconds then the debug-printout
|
||||
* triggers in watchdog_timer_fn().
|
||||
|
@ -519,6 +520,7 @@ int proc_dowatchdog(struct ctl_table *table, int write,
|
|||
if (ret || !write)
|
||||
return ret;
|
||||
|
||||
set_sample_period();
|
||||
if (watchdog_enabled && watchdog_thresh)
|
||||
watchdog_enable_all_cpus();
|
||||
else
|
||||
|
@ -540,6 +542,7 @@ static struct smp_hotplug_thread watchdog_threads = {
|
|||
|
||||
void __init lockup_detector_init(void)
|
||||
{
|
||||
set_sample_period();
|
||||
if (smpboot_register_percpu_thread(&watchdog_threads)) {
|
||||
pr_err("Failed to create watchdog threads, disabled\n");
|
||||
watchdog_disabled = -ENODEV;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue