From f08c191ec706f9f381e992709262650dba07f0f3 Mon Sep 17 00:00:00 2001 From: Alexey Makhalov Date: Tue, 29 Sep 2015 15:58:41 -0700 Subject: [PATCH] clean linux patch set. --- arch/x86/kernel/cpu/perf_event_intel.c | 2 +- arch/x86/kernel/cpu/perf_event_intel_pt.c | 4 ++++ arch/x86/kernel/tsc.c | 3 +++ drivers/tty/sysrq.c | 4 +++- drivers/video/console/fbcon.c | 2 +- include/linux/blkdev.h | 2 +- init/do_mounts.c | 4 +++- kernel/fork.c | 39 ++++++++++++++++++------------- mm/vmstat.c | 2 +- 9 files changed, 40 insertions(+), 22 deletions(-) diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c index 6326ae2..136a14b 100644 --- a/arch/x86/kernel/cpu/perf_event_intel.c +++ b/arch/x86/kernel/cpu/perf_event_intel.c @@ -3338,7 +3338,7 @@ __init int intel_pmu_init(void) */ if (x86_pmu.extra_regs) { for (er = x86_pmu.extra_regs; er->msr; er++) { - er->extra_msr_access = check_msr(er->msr, 0x1ffUL); + er->extra_msr_access = false; /* Disable LBR select mapping */ if ((er->idx == EXTRA_REG_LBR) && !er->extra_msr_access) x86_pmu.lbr_sel_map = NULL; diff --git a/arch/x86/kernel/cpu/perf_event_intel_pt.c b/arch/x86/kernel/cpu/perf_event_intel_pt.c index 183de71..f205baf 100644 --- a/arch/x86/kernel/cpu/perf_event_intel_pt.c +++ b/arch/x86/kernel/cpu/perf_event_intel_pt.c @@ -1060,6 +1060,10 @@ static __init int pt_init(void) { int ret, cpu, prior_warn = 0; + + if (!test_cpu_cap(&boot_cpu_data, X86_FEATURE_INTEL_PT)) + return -ENODEV; + BUILD_BUG_ON(sizeof(struct topa) > PAGE_SIZE); get_online_cpus(); for_each_online_cpu(cpu) { diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 7437b41..c6f2c49 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -1241,6 +1241,9 @@ unsigned long calibrate_delay_is_known(void) if (!tsc_disabled && !cpu_has(&cpu_data(cpu), X86_FEATURE_CONSTANT_TSC)) return 0; + if (cpu != 0) + return cpu_data(0).loops_per_jiffy; + for_each_online_cpu(i) if (cpu_data(i).phys_proc_id == cpu_data(cpu).phys_proc_id) return cpu_data(i).loops_per_jiffy; diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c index b5b4278..ec1bb75 100644 --- a/drivers/tty/sysrq.c +++ b/drivers/tty/sysrq.c @@ -1047,8 +1047,10 @@ static int __sysrq_swap_key_ops(int key, struct sysrq_key_op *insert_op_p, * A concurrent __handle_sysrq either got the old op or the new op. * Wait for it to go away before returning, so the code for an old * op is not freed (eg. on module unload) while it is in use. + * This is only relevant if the old op is not NULL of course. */ - synchronize_rcu(); + if (remove_op_p) + synchronize_rcu(); return retval; } diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 1aaf893..ac6c143 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c @@ -146,7 +146,7 @@ static const struct consw fb_con; static int fbcon_set_origin(struct vc_data *); -static int fbcon_cursor_noblink; +static int fbcon_cursor_noblink = 1; #define divides(a, b) ((!(a) || (b)%(a)) ? 0 : 1) diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index d4068c1..1dfe7ef 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -37,7 +37,7 @@ struct blkcg_gq; struct blk_flush_queue; #define BLKDEV_MIN_RQ 4 -#define BLKDEV_MAX_RQ 128 /* Default maximum */ +#define BLKDEV_MAX_RQ 4096 /* Default maximum */ /* * Maximum number of blkcg policies allowed to be registered concurrently. diff --git a/init/do_mounts.c b/init/do_mounts.c index dea5de9..da84094 100644 --- a/init/do_mounts.c +++ b/init/do_mounts.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -563,7 +564,8 @@ void __init prepare_namespace(void) * For example, it is not atypical to wait 5 seconds here * for the touchpad of a laptop to initialize. */ - wait_for_device_probe(); + //wait_for_device_probe(); + async_synchronize_full(); md_run_setup(); diff --git a/kernel/fork.c b/kernel/fork.c index dbd9b8d..a84f4b5 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -74,6 +74,7 @@ #include #include #include +#include #include #include @@ -685,6 +686,26 @@ void __mmdrop(struct mm_struct *mm) } EXPORT_SYMBOL_GPL(__mmdrop); + +static void mmput_async(void *data, async_cookie_t cookie) +{ + struct mm_struct *mm = data; + uprobe_clear_state(mm); + exit_aio(mm); + ksm_exit(mm); + khugepaged_exit(mm); /* must run before exit_mmap */ + exit_mmap(mm); + set_mm_exe_file(mm, NULL); + if (!list_empty(&mm->mmlist)) { + spin_lock(&mmlist_lock); + list_del(&mm->mmlist); + spin_unlock(&mmlist_lock); + } + if (mm->binfmt) + module_put(mm->binfmt->module); + mmdrop(mm); +} + /* * Decrement the use count and release all resources for an mm. */ @@ -692,22 +713,8 @@ void mmput(struct mm_struct *mm) { might_sleep(); - if (atomic_dec_and_test(&mm->mm_users)) { - uprobe_clear_state(mm); - exit_aio(mm); - ksm_exit(mm); - khugepaged_exit(mm); /* must run before exit_mmap */ - exit_mmap(mm); - set_mm_exe_file(mm, NULL); - if (!list_empty(&mm->mmlist)) { - spin_lock(&mmlist_lock); - list_del(&mm->mmlist); - spin_unlock(&mmlist_lock); - } - if (mm->binfmt) - module_put(mm->binfmt->module); - mmdrop(mm); - } + if (atomic_dec_and_test(&mm->mm_users)) + async_schedule(mmput_async, mm); } EXPORT_SYMBOL_GPL(mmput); diff --git a/mm/vmstat.c b/mm/vmstat.c index 4f5cd97..c176f8b 100644 --- a/mm/vmstat.c +++ b/mm/vmstat.c @@ -1358,7 +1358,7 @@ static const struct file_operations proc_vmstat_file_operations = { #ifdef CONFIG_SMP static DEFINE_PER_CPU(struct delayed_work, vmstat_work); -int sysctl_stat_interval __read_mostly = HZ; +int sysctl_stat_interval __read_mostly = 8 * HZ; static cpumask_var_t cpu_stat_off; static void vmstat_update(struct work_struct *w) -- 1.9.1