From 7f6aac4ffc7feb6ed143d936f0457edcfc078aa0 Mon Sep 17 00:00:00 2001
From: Alexey Makhalov <amakhalov@vmware.com>
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/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 +-
8 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c
index e2a4300..1abd753 100644
--- a/arch/x86/kernel/cpu/perf_event_intel.c
+++ b/arch/x86/kernel/cpu/perf_event_intel.c
@@ -3604,7 +3604,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, 0x11UL);
+ 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/tsc.c b/arch/x86/kernel/tsc.c
index c7c4d9c..8913f79 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -1253,6 +1253,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 5381a72..6aa6e81 100644
--- a/drivers/tty/sysrq.c
+++ b/drivers/tty/sysrq.c
@@ -1058,8 +1058,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 92f3949..4ff61d7 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 c70e358..72f56a8 100644
--- a/include/linux/blkdev.h
+++ b/include/linux/blkdev.h
@@ -38,7 +38,7 @@ struct blk_flush_queue;
struct pr_ops;
#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 <linux/slab.h>
#include <linux/ramfs.h>
#include <linux/shmem_fs.h>
+#include <linux/async.h>
#include <linux/nfs_fs.h>
#include <linux/nfs_fs_sb.h>
@@ -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 1155eac..3a790cf 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -74,6 +74,7 @@
#include <linux/uprobes.h>
#include <linux/aio.h>
#include <linux/compiler.h>
+#include <linux/async.h>
#include <linux/sysctl.h>
#include <asm/pgtable.h>
@@ -689,6 +690,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.
*/
@@ -696,22 +717,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 c54fd29..f0baa1a 100644
--- a/mm/vmstat.c
+++ b/mm/vmstat.c
@@ -1381,7 +1381,7 @@ static const struct file_operations proc_vmstat_file_operations = {
#ifdef CONFIG_SMP
static struct workqueue_struct *vmstat_wq;
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