mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-28 21:26:49 +00:00
linux: readd ck patch series, disable not working patches
Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
parent
f962e093f6
commit
a763008d60
@ -0,0 +1,20 @@
|
|||||||
|
http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/2.6.37/2.6.37-ck2/patches/
|
||||||
|
|
||||||
|
2.6.37-sched-bfs-363.patch
|
||||||
|
2637-bfs363-nonhotplug_fix.patch
|
||||||
|
sched-add-above-background-load-function.patch
|
||||||
|
mm-zero_swappiness.patch
|
||||||
|
mm-enable_swaptoken_only_when_swap_full.patch
|
||||||
|
mm-drop_swap_cache_aggressively.patch
|
||||||
|
mm-kswapd_inherit_prio-1.patch
|
||||||
|
mm-background_scan.patch
|
||||||
|
mm-idleprio_prio-1.patch
|
||||||
|
mm-lru_cache_add_lru_tail.patch
|
||||||
|
mm-decrease_default_dirty_ratio.patch
|
||||||
|
kconfig-expose_vmsplit_option.patch
|
||||||
|
hz-default_1000.patch
|
||||||
|
hz-no_default_250.patch
|
||||||
|
hz-raise_max.patch
|
||||||
|
preempt-desktop-tune.patch
|
||||||
|
cpufreq-bfs_tweaks.patch
|
||||||
|
ck2-version.patch
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,60 @@
|
|||||||
|
Fix a failure to build if CPU hotplug is disabled with BFS.
|
||||||
|
|
||||||
|
-ck
|
||||||
|
|
||||||
|
---
|
||||||
|
kernel/sched_bfs.c | 34 +++++++++++++++++-----------------
|
||||||
|
1 file changed, 17 insertions(+), 17 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/kernel/sched_bfs.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/kernel/sched_bfs.c 2011-02-14 09:50:24.351252002 +1100
|
||||||
|
+++ linux-2.6.37-ck2/kernel/sched_bfs.c 2011-02-14 09:53:53.820252000 +1100
|
||||||
|
@@ -4812,6 +4812,23 @@
|
||||||
|
grq_unlock_irqrestore(&flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * Ensures that the idle task is using init_mm right before its cpu goes
|
||||||
|
+ * offline.
|
||||||
|
+ */
|
||||||
|
+void idle_task_exit(void)
|
||||||
|
+{
|
||||||
|
+ struct mm_struct *mm = current->active_mm;
|
||||||
|
+
|
||||||
|
+ BUG_ON(cpu_online(smp_processor_id()));
|
||||||
|
+
|
||||||
|
+ if (mm != &init_mm)
|
||||||
|
+ switch_mm(mm, &init_mm, current);
|
||||||
|
+ mmdrop(mm);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+#endif /* CONFIG_HOTPLUG_CPU */
|
||||||
|
+
|
||||||
|
void sched_set_stop_task(int cpu, struct task_struct *stop)
|
||||||
|
{
|
||||||
|
struct sched_param stop_param = { .sched_priority = STOP_PRIO };
|
||||||
|
@@ -4841,23 +4858,6 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
-/*
|
||||||
|
- * Ensures that the idle task is using init_mm right before its cpu goes
|
||||||
|
- * offline.
|
||||||
|
- */
|
||||||
|
-void idle_task_exit(void)
|
||||||
|
-{
|
||||||
|
- struct mm_struct *mm = current->active_mm;
|
||||||
|
-
|
||||||
|
- BUG_ON(cpu_online(smp_processor_id()));
|
||||||
|
-
|
||||||
|
- if (mm != &init_mm)
|
||||||
|
- switch_mm(mm, &init_mm, current);
|
||||||
|
- mmdrop(mm);
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
-#endif /* CONFIG_HOTPLUG_CPU */
|
||||||
|
-
|
||||||
|
#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
|
||||||
|
|
||||||
|
static struct ctl_table sd_ctl_dir[] = {
|
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
Makefile | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/Makefile
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/Makefile 2011-01-06 14:04:07.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/Makefile 2011-02-14 10:11:20.469252000 +1100
|
||||||
|
@@ -10,6 +10,10 @@
|
||||||
|
# Comments in this file are targeted only to the developer, do not
|
||||||
|
# expect to learn how to build the kernel reading this file.
|
||||||
|
|
||||||
|
+CKVERSION = -ck2
|
||||||
|
+CKNAME = BFS Powered
|
||||||
|
+EXTRAVERSION := $(EXTRAVERSION)$(CKVERSION)
|
||||||
|
+
|
||||||
|
# Do not:
|
||||||
|
# o use make's built-in rules and variables
|
||||||
|
# (this increases performance and avoids hard-to-debug behaviour);
|
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
drivers/cpufreq/cpufreq_ondemand.c | 10 +++++-----
|
||||||
|
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/drivers/cpufreq/cpufreq_ondemand.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/drivers/cpufreq/cpufreq_ondemand.c 2011-01-06 14:04:08.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/drivers/cpufreq/cpufreq_ondemand.c 2011-02-14 10:11:11.438252001 +1100
|
||||||
|
@@ -28,12 +28,12 @@
|
||||||
|
* It helps to keep variable names smaller, simpler
|
||||||
|
*/
|
||||||
|
|
||||||
|
-#define DEF_FREQUENCY_DOWN_DIFFERENTIAL (10)
|
||||||
|
-#define DEF_FREQUENCY_UP_THRESHOLD (80)
|
||||||
|
+#define DEF_FREQUENCY_DOWN_DIFFERENTIAL (17)
|
||||||
|
+#define DEF_FREQUENCY_UP_THRESHOLD (63)
|
||||||
|
#define DEF_SAMPLING_DOWN_FACTOR (1)
|
||||||
|
#define MAX_SAMPLING_DOWN_FACTOR (100000)
|
||||||
|
#define MICRO_FREQUENCY_DOWN_DIFFERENTIAL (3)
|
||||||
|
-#define MICRO_FREQUENCY_UP_THRESHOLD (95)
|
||||||
|
+#define MICRO_FREQUENCY_UP_THRESHOLD (80)
|
||||||
|
#define MICRO_FREQUENCY_MIN_SAMPLE_RATE (10000)
|
||||||
|
#define MIN_FREQUENCY_UP_THRESHOLD (11)
|
||||||
|
#define MAX_FREQUENCY_UP_THRESHOLD (100)
|
||||||
|
@@ -513,10 +513,10 @@
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Every sampling_rate, we check, if current idle time is less
|
||||||
|
- * than 20% (default), then we try to increase frequency
|
||||||
|
+ * than 37% (default), then we try to increase frequency
|
||||||
|
* Every sampling_rate, we look for a the lowest
|
||||||
|
* frequency which can sustain the load while keeping idle time over
|
||||||
|
- * 30%. If such a frequency exist, we try to decrease to this frequency.
|
||||||
|
+ * 50%. If such a frequency exist, we try to decrease to this frequency.
|
||||||
|
*
|
||||||
|
* Any frequency increase takes it to the maximum frequency.
|
||||||
|
* Frequency reduction happens at minimum steps of
|
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
kernel/Kconfig.hz | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/kernel/Kconfig.hz
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/kernel/Kconfig.hz 2009-06-10 13:05:27.000000000 +1000
|
||||||
|
+++ linux-2.6.37-ck2/kernel/Kconfig.hz 2011-02-14 10:11:10.474252000 +1100
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Timer frequency"
|
||||||
|
- default HZ_250
|
||||||
|
+ default HZ_1000
|
||||||
|
help
|
||||||
|
Allows the configuration of the timer frequency. It is customary
|
||||||
|
to have the timer interrupt run at 1000 Hz but 100 Hz may be more
|
@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
kernel/Kconfig.hz | 17 ++++++++++-------
|
||||||
|
1 file changed, 10 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/kernel/Kconfig.hz
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/kernel/Kconfig.hz 2011-02-14 10:11:10.474252000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/kernel/Kconfig.hz 2011-02-14 10:11:10.702252000 +1100
|
||||||
|
@@ -23,13 +23,14 @@
|
||||||
|
with lots of processors that may show reduced performance if
|
||||||
|
too many timer interrupts are occurring.
|
||||||
|
|
||||||
|
- config HZ_250
|
||||||
|
+ config HZ_250_NODEFAULT
|
||||||
|
bool "250 HZ"
|
||||||
|
help
|
||||||
|
- 250 Hz is a good compromise choice allowing server performance
|
||||||
|
- while also showing good interactive responsiveness even
|
||||||
|
- on SMP and NUMA systems. If you are going to be using NTSC video
|
||||||
|
- or multimedia, selected 300Hz instead.
|
||||||
|
+ 250 HZ is a lousy compromise choice allowing server interactivity
|
||||||
|
+ while also showing desktop throughput and no extra power saving on
|
||||||
|
+ laptops. No good for anything.
|
||||||
|
+
|
||||||
|
+ Recommend 100 or 1000 instead.
|
||||||
|
|
||||||
|
config HZ_300
|
||||||
|
bool "300 HZ"
|
||||||
|
@@ -43,14 +44,16 @@
|
||||||
|
bool "1000 HZ"
|
||||||
|
help
|
||||||
|
1000 Hz is the preferred choice for desktop systems and other
|
||||||
|
- systems requiring fast interactive responses to events.
|
||||||
|
+ systems requiring fast interactive responses to events. Laptops
|
||||||
|
+ can also benefit from this choice without sacrificing battery life
|
||||||
|
+ if dynticks is also enabled.
|
||||||
|
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config HZ
|
||||||
|
int
|
||||||
|
default 100 if HZ_100
|
||||||
|
- default 250 if HZ_250
|
||||||
|
+ default 250 if HZ_250_NODEFAULT
|
||||||
|
default 300 if HZ_300
|
||||||
|
default 1000 if HZ_1000
|
||||||
|
|
174
packages/linux/patches/linux-2.6.38-rc6-706_hz-raise_max.patch
Normal file
174
packages/linux/patches/linux-2.6.38-rc6-706_hz-raise_max.patch
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
---
|
||||||
|
arch/x86/kernel/cpu/proc.c | 2 -
|
||||||
|
arch/x86/kernel/smpboot.c | 2 -
|
||||||
|
include/linux/nfsd/stats.h | 4 +-
|
||||||
|
include/net/inet_timewait_sock.h | 10 ++++--
|
||||||
|
init/calibrate.c | 2 -
|
||||||
|
kernel/Kconfig.hz | 64 +++++++++++++++++++++++++++++++++++++++
|
||||||
|
6 files changed, 76 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/arch/x86/kernel/cpu/proc.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/arch/x86/kernel/cpu/proc.c 2009-12-03 21:39:58.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/arch/x86/kernel/cpu/proc.c 2011-02-14 10:11:10.919252001 +1100
|
||||||
|
@@ -109,7 +109,7 @@
|
||||||
|
|
||||||
|
seq_printf(m, "\nbogomips\t: %lu.%02lu\n",
|
||||||
|
c->loops_per_jiffy/(500000/HZ),
|
||||||
|
- (c->loops_per_jiffy/(5000/HZ)) % 100);
|
||||||
|
+ (c->loops_per_jiffy * 10 /(50000/HZ)) % 100);
|
||||||
|
|
||||||
|
#ifdef CONFIG_X86_64
|
||||||
|
if (c->x86_tlbsize > 0)
|
||||||
|
Index: linux-2.6.37-ck2/arch/x86/kernel/smpboot.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/arch/x86/kernel/smpboot.c 2011-01-06 14:04:08.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/arch/x86/kernel/smpboot.c 2011-02-14 10:11:10.920252001 +1100
|
||||||
|
@@ -497,7 +497,7 @@
|
||||||
|
"Total of %d processors activated (%lu.%02lu BogoMIPS).\n",
|
||||||
|
num_online_cpus(),
|
||||||
|
bogosum/(500000/HZ),
|
||||||
|
- (bogosum/(5000/HZ))%100);
|
||||||
|
+ (bogosum * 10/(50000/HZ))%100);
|
||||||
|
|
||||||
|
pr_debug("Before bogocount - setting activated=1.\n");
|
||||||
|
}
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/nfsd/stats.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/nfsd/stats.h 2009-06-10 13:05:27.000000000 +1000
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/nfsd/stats.h 2011-02-14 10:11:10.920252001 +1100
|
||||||
|
@@ -11,8 +11,8 @@
|
||||||
|
|
||||||
|
#include <linux/nfs4.h>
|
||||||
|
|
||||||
|
-/* thread usage wraps very million seconds (approx one fortnight) */
|
||||||
|
-#define NFSD_USAGE_WRAP (HZ*1000000)
|
||||||
|
+/* thread usage wraps every one hundred thousand seconds (approx one day) */
|
||||||
|
+#define NFSD_USAGE_WRAP (HZ*100000)
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/include/net/inet_timewait_sock.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/net/inet_timewait_sock.h 2010-08-02 11:12:25.000000000 +1000
|
||||||
|
+++ linux-2.6.37-ck2/include/net/inet_timewait_sock.h 2011-02-14 10:11:10.920252001 +1100
|
||||||
|
@@ -39,8 +39,8 @@
|
||||||
|
* If time > 4sec, it is "slow" path, no recycling is required,
|
||||||
|
* so that we select tick to get range about 4 seconds.
|
||||||
|
*/
|
||||||
|
-#if HZ <= 16 || HZ > 4096
|
||||||
|
-# error Unsupported: HZ <= 16 or HZ > 4096
|
||||||
|
+#if HZ <= 16 || HZ > 16384
|
||||||
|
+# error Unsupported: HZ <= 16 or HZ > 16384
|
||||||
|
#elif HZ <= 32
|
||||||
|
# define INET_TWDR_RECYCLE_TICK (5 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||||
|
#elif HZ <= 64
|
||||||
|
@@ -55,8 +55,12 @@
|
||||||
|
# define INET_TWDR_RECYCLE_TICK (10 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||||
|
#elif HZ <= 2048
|
||||||
|
# define INET_TWDR_RECYCLE_TICK (11 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||||
|
-#else
|
||||||
|
+#elif HZ <= 4096
|
||||||
|
# define INET_TWDR_RECYCLE_TICK (12 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||||
|
+#elif HZ <= 8192
|
||||||
|
+# define INET_TWDR_RECYCLE_TICK (13 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||||
|
+#else
|
||||||
|
+# define INET_TWDR_RECYCLE_TICK (14 + 2 - INET_TWDR_RECYCLE_SLOTS_LOG)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* TIME_WAIT reaping mechanism. */
|
||||||
|
Index: linux-2.6.37-ck2/init/calibrate.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/init/calibrate.c 2010-02-25 21:51:52.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/init/calibrate.c 2011-02-14 10:11:10.921252001 +1100
|
||||||
|
@@ -176,7 +176,7 @@
|
||||||
|
if (!printed)
|
||||||
|
pr_cont("%lu.%02lu BogoMIPS (lpj=%lu)\n",
|
||||||
|
loops_per_jiffy/(500000/HZ),
|
||||||
|
- (loops_per_jiffy/(5000/HZ)) % 100, loops_per_jiffy);
|
||||||
|
+ (loops_per_jiffy * 10 /(50000/HZ)) % 100, loops_per_jiffy);
|
||||||
|
|
||||||
|
printed = true;
|
||||||
|
}
|
||||||
|
Index: linux-2.6.37-ck2/kernel/Kconfig.hz
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/kernel/Kconfig.hz 2011-02-14 10:11:10.702252000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/kernel/Kconfig.hz 2011-02-14 10:11:10.921252001 +1100
|
||||||
|
@@ -48,6 +48,63 @@
|
||||||
|
can also benefit from this choice without sacrificing battery life
|
||||||
|
if dynticks is also enabled.
|
||||||
|
|
||||||
|
+ config HZ_1500
|
||||||
|
+ bool "1500 HZ"
|
||||||
|
+ help
|
||||||
|
+ 1500 Hz is an insane value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+ config HZ_2000
|
||||||
|
+ bool "2000 HZ"
|
||||||
|
+ help
|
||||||
|
+ 2000 Hz is an insane value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+ config HZ_3000
|
||||||
|
+ bool "3000 HZ"
|
||||||
|
+ help
|
||||||
|
+ 3000 Hz is an insane value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+ config HZ_4000
|
||||||
|
+ bool "4000 HZ"
|
||||||
|
+ help
|
||||||
|
+ 4000 Hz is an insane value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+ config HZ_5000
|
||||||
|
+ bool "5000 HZ"
|
||||||
|
+ help
|
||||||
|
+ 5000 Hz is an obscene value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+ config HZ_7500
|
||||||
|
+ bool "7500 HZ"
|
||||||
|
+ help
|
||||||
|
+ 7500 Hz is an obscene value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+ config HZ_10000
|
||||||
|
+ bool "10000 HZ"
|
||||||
|
+ help
|
||||||
|
+ 10000 Hz is an obscene value to use to run broken software that is Hz
|
||||||
|
+ limited.
|
||||||
|
+
|
||||||
|
+ Being over 1000, driver breakage is likely.
|
||||||
|
+
|
||||||
|
+
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config HZ
|
||||||
|
@@ -56,6 +113,13 @@
|
||||||
|
default 250 if HZ_250_NODEFAULT
|
||||||
|
default 300 if HZ_300
|
||||||
|
default 1000 if HZ_1000
|
||||||
|
+ default 1500 if HZ_1500
|
||||||
|
+ default 2000 if HZ_2000
|
||||||
|
+ default 3000 if HZ_3000
|
||||||
|
+ default 4000 if HZ_4000
|
||||||
|
+ default 5000 if HZ_5000
|
||||||
|
+ default 7500 if HZ_7500
|
||||||
|
+ default 10000 if HZ_10000
|
||||||
|
|
||||||
|
config SCHED_HRTICK
|
||||||
|
def_bool HIGH_RES_TIMERS && (!SMP || USE_GENERIC_SMP_HELPERS)
|
@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
arch/x86/Kconfig | 12 ++++++------
|
||||||
|
1 file changed, 6 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/arch/x86/Kconfig
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/arch/x86/Kconfig 2011-01-06 14:04:08.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/arch/x86/Kconfig 2011-02-14 10:11:10.260252001 +1100
|
||||||
|
@@ -1046,7 +1046,7 @@
|
||||||
|
|
||||||
|
choice
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
- prompt "Memory split" if EMBEDDED
|
||||||
|
+ prompt "Memory split"
|
||||||
|
default VMSPLIT_3G
|
||||||
|
depends on X86_32
|
||||||
|
---help---
|
||||||
|
@@ -1066,17 +1066,17 @@
|
||||||
|
option alone!
|
||||||
|
|
||||||
|
config VMSPLIT_3G
|
||||||
|
- bool "3G/1G user/kernel split"
|
||||||
|
+ bool "Default 896MB lowmem (3G/1G user/kernel split)"
|
||||||
|
config VMSPLIT_3G_OPT
|
||||||
|
depends on !X86_PAE
|
||||||
|
- bool "3G/1G user/kernel split (for full 1G low memory)"
|
||||||
|
+ bool "1GB lowmem (3G/1G user/kernel split)"
|
||||||
|
config VMSPLIT_2G
|
||||||
|
- bool "2G/2G user/kernel split"
|
||||||
|
+ bool "2GB lowmem (2G/2G user/kernel split)"
|
||||||
|
config VMSPLIT_2G_OPT
|
||||||
|
depends on !X86_PAE
|
||||||
|
- bool "2G/2G user/kernel split (for full 2G low memory)"
|
||||||
|
+ bool "2GB lowmem (2G/2G user/kernel split)"
|
||||||
|
config VMSPLIT_1G
|
||||||
|
- bool "1G/3G user/kernel split"
|
||||||
|
+ bool "3GB lowmem (1G/3G user/kernel split)"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config PAGE_OFFSET
|
@ -0,0 +1,69 @@
|
|||||||
|
---
|
||||||
|
mm/vmscan.c | 33 ++++++++++++++++++++++++++++++++-
|
||||||
|
1 file changed, 32 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/mm/vmscan.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/vmscan.c 2011-02-14 10:11:00.986252001 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/vmscan.c 2011-02-14 10:11:01.254252001 +1100
|
||||||
|
@@ -1855,6 +1855,33 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
+ * Helper functions to adjust nice level of kswapd, based on the priority of
|
||||||
|
+ * the task (p) that called it. If it is already higher priority we do not
|
||||||
|
+ * demote its nice level since it is still working on behalf of a higher
|
||||||
|
+ * priority task. With kernel threads we leave it at nice 0.
|
||||||
|
+ *
|
||||||
|
+ * We don't ever run kswapd real time, so if a real time task calls kswapd we
|
||||||
|
+ * set it to highest SCHED_NORMAL priority.
|
||||||
|
+ */
|
||||||
|
+static inline int effective_sc_prio(struct task_struct *p)
|
||||||
|
+{
|
||||||
|
+ if (likely(p->mm)) {
|
||||||
|
+ if (rt_task(p))
|
||||||
|
+ return -20;
|
||||||
|
+ return task_nice(p);
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void set_kswapd_nice(struct task_struct *kswapd, int active)
|
||||||
|
+{
|
||||||
|
+ long nice = effective_sc_prio(current);
|
||||||
|
+
|
||||||
|
+ if (task_nice(kswapd) > nice || !active)
|
||||||
|
+ set_user_nice(kswapd, nice);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
* This is the direct reclaim path, for page-allocating processes. We only
|
||||||
|
* try to reclaim pages from zones which will satisfy the caller's allocation
|
||||||
|
* request.
|
||||||
|
@@ -2457,6 +2484,7 @@
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ set_user_nice(tsk, 0);
|
||||||
|
order = pgdat->kswapd_max_order;
|
||||||
|
}
|
||||||
|
finish_wait(&pgdat->kswapd_wait, &wait);
|
||||||
|
@@ -2483,6 +2511,7 @@
|
||||||
|
void wakeup_kswapd(struct zone *zone, int order)
|
||||||
|
{
|
||||||
|
pg_data_t *pgdat;
|
||||||
|
+ int active;
|
||||||
|
|
||||||
|
if (!populated_zone(zone))
|
||||||
|
return;
|
||||||
|
@@ -2495,7 +2524,9 @@
|
||||||
|
trace_mm_vmscan_wakeup_kswapd(pgdat->node_id, zone_idx(zone), order);
|
||||||
|
if (!cpuset_zone_allowed_hardwall(zone, GFP_KERNEL))
|
||||||
|
return;
|
||||||
|
- if (!waitqueue_active(&pgdat->kswapd_wait))
|
||||||
|
+ active = waitqueue_active(&pgdat->kswapd_wait);
|
||||||
|
+ set_kswapd_nice(pgdat->kswapd, active);
|
||||||
|
+ if (!active)
|
||||||
|
return;
|
||||||
|
wake_up_interruptible(&pgdat->kswapd_wait);
|
||||||
|
}
|
@ -0,0 +1,34 @@
|
|||||||
|
The default dirty ratio is chosen to be a compromise between throughput and
|
||||||
|
overall system latency. On a desktop, if an application writes to disk a lot,
|
||||||
|
that application should be the one to slow down rather than the desktop as a
|
||||||
|
whole. At higher dirty ratio settings, an application could write a lot to
|
||||||
|
disk and then happily use lots of CPU time after that while the rest of the
|
||||||
|
system is busy waiting on that naughty applications disk writes to complete
|
||||||
|
before anything else happening.
|
||||||
|
|
||||||
|
Lower ratios mean that the application that do a lot of disk writes end up
|
||||||
|
being responsible for their own actions and they're the ones that slow down
|
||||||
|
rather than the system in general.
|
||||||
|
|
||||||
|
This does decrease overall write throughput slightly, but to the benefit of
|
||||||
|
the latency of the system as a whole.
|
||||||
|
|
||||||
|
-ck
|
||||||
|
|
||||||
|
---
|
||||||
|
mm/page-writeback.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/mm/page-writeback.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/page-writeback.c 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/page-writeback.c 2011-02-14 10:11:10.037252000 +1100
|
||||||
|
@@ -78,7 +78,7 @@
|
||||||
|
/*
|
||||||
|
* The generator of dirty data starts writeback at this percentage
|
||||||
|
*/
|
||||||
|
-int vm_dirty_ratio = 20;
|
||||||
|
+int vm_dirty_ratio = 5;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vm_dirty_bytes starts at 0 (disabled) so that it is a function of
|
@ -0,0 +1,87 @@
|
|||||||
|
---
|
||||||
|
include/linux/swap.h | 2 +-
|
||||||
|
mm/memory.c | 2 +-
|
||||||
|
mm/swapfile.c | 9 ++++-----
|
||||||
|
mm/vmscan.c | 2 +-
|
||||||
|
4 files changed, 7 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/swap.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/swap.h 2011-02-14 10:11:00.763252001 +1100
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/swap.h 2011-02-14 10:11:00.982252001 +1100
|
||||||
|
@@ -192,7 +192,7 @@
|
||||||
|
int next; /* swapfile to be used next */
|
||||||
|
};
|
||||||
|
|
||||||
|
-/* Swap 50% full? Release swapcache more aggressively.. */
|
||||||
|
+/* Swap 50% full? */
|
||||||
|
#define vm_swap_full() (nr_swap_pages*2 < total_swap_pages)
|
||||||
|
|
||||||
|
/* linux/mm/page_alloc.c */
|
||||||
|
Index: linux-2.6.37-ck2/mm/memory.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/memory.c 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/memory.c 2011-02-14 10:11:00.984252001 +1100
|
||||||
|
@@ -2754,7 +2754,7 @@
|
||||||
|
mem_cgroup_commit_charge_swapin(page, ptr);
|
||||||
|
|
||||||
|
swap_free(entry);
|
||||||
|
- if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
|
||||||
|
+ if ((vma->vm_flags & VM_LOCKED) || PageMlocked(page))
|
||||||
|
try_to_free_swap(page);
|
||||||
|
unlock_page(page);
|
||||||
|
if (swapcache) {
|
||||||
|
Index: linux-2.6.37-ck2/mm/swapfile.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/swapfile.c 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/swapfile.c 2011-02-14 10:11:00.985252001 +1100
|
||||||
|
@@ -321,7 +321,7 @@
|
||||||
|
scan_base = offset = si->lowest_bit;
|
||||||
|
|
||||||
|
/* reuse swap entry of cache-only swap if not busy. */
|
||||||
|
- if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
|
||||||
|
+ if (si->swap_map[offset] == SWAP_HAS_CACHE) {
|
||||||
|
int swap_was_freed;
|
||||||
|
spin_unlock(&swap_lock);
|
||||||
|
swap_was_freed = __try_to_reclaim_swap(si, offset);
|
||||||
|
@@ -410,7 +410,7 @@
|
||||||
|
spin_lock(&swap_lock);
|
||||||
|
goto checks;
|
||||||
|
}
|
||||||
|
- if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
|
||||||
|
+ if (si->swap_map[offset] == SWAP_HAS_CACHE) {
|
||||||
|
spin_lock(&swap_lock);
|
||||||
|
goto checks;
|
||||||
|
}
|
||||||
|
@@ -425,7 +425,7 @@
|
||||||
|
spin_lock(&swap_lock);
|
||||||
|
goto checks;
|
||||||
|
}
|
||||||
|
- if (vm_swap_full() && si->swap_map[offset] == SWAP_HAS_CACHE) {
|
||||||
|
+ if (si->swap_map[offset] == SWAP_HAS_CACHE) {
|
||||||
|
spin_lock(&swap_lock);
|
||||||
|
goto checks;
|
||||||
|
}
|
||||||
|
@@ -739,8 +739,7 @@
|
||||||
|
* Not mapped elsewhere, or swap space full? Free it!
|
||||||
|
* Also recheck PageSwapCache now page is locked (above).
|
||||||
|
*/
|
||||||
|
- if (PageSwapCache(page) && !PageWriteback(page) &&
|
||||||
|
- (!page_mapped(page) || vm_swap_full())) {
|
||||||
|
+ if (PageSwapCache(page) && !PageWriteback(page)) {
|
||||||
|
delete_from_swap_cache(page);
|
||||||
|
SetPageDirty(page);
|
||||||
|
}
|
||||||
|
Index: linux-2.6.37-ck2/mm/vmscan.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/vmscan.c 2011-02-14 10:11:00.536252000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/vmscan.c 2011-02-14 10:11:00.986252001 +1100
|
||||||
|
@@ -900,7 +900,7 @@
|
||||||
|
|
||||||
|
activate_locked:
|
||||||
|
/* Not a candidate for swapping, so reclaim swap space. */
|
||||||
|
- if (PageSwapCache(page) && vm_swap_full())
|
||||||
|
+ if (PageSwapCache(page))
|
||||||
|
try_to_free_swap(page);
|
||||||
|
VM_BUG_ON(PageActive(page));
|
||||||
|
SetPageActive(page);
|
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
include/linux/swap.h | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/swap.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/swap.h 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/swap.h 2011-02-14 10:11:00.763252001 +1100
|
||||||
|
@@ -348,9 +348,10 @@
|
||||||
|
extern void grab_swap_token(struct mm_struct *);
|
||||||
|
extern void __put_swap_token(struct mm_struct *);
|
||||||
|
|
||||||
|
+/* Only allow swap token to have effect if swap is full */
|
||||||
|
static inline int has_swap_token(struct mm_struct *mm)
|
||||||
|
{
|
||||||
|
- return (mm == swap_token_mm);
|
||||||
|
+ return (mm == swap_token_mm && vm_swap_full());
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void put_swap_token(struct mm_struct *mm)
|
@ -0,0 +1,137 @@
|
|||||||
|
---
|
||||||
|
include/linux/mmzone.h | 6 +++++-
|
||||||
|
mm/vmscan.c | 42 ++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 47 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/mmzone.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/mmzone.h 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/mmzone.h 2011-02-14 10:11:01.470252001 +1100
|
||||||
|
@@ -15,6 +15,7 @@
|
||||||
|
#include <linux/seqlock.h>
|
||||||
|
#include <linux/nodemask.h>
|
||||||
|
#include <linux/pageblock-flags.h>
|
||||||
|
+#include <linux/timer.h>
|
||||||
|
#include <generated/bounds.h>
|
||||||
|
#include <asm/atomic.h>
|
||||||
|
#include <asm/page.h>
|
||||||
|
@@ -161,12 +162,14 @@
|
||||||
|
WMARK_MIN,
|
||||||
|
WMARK_LOW,
|
||||||
|
WMARK_HIGH,
|
||||||
|
+ WMARK_LOTS,
|
||||||
|
NR_WMARK
|
||||||
|
};
|
||||||
|
|
||||||
|
#define min_wmark_pages(z) (z->watermark[WMARK_MIN])
|
||||||
|
#define low_wmark_pages(z) (z->watermark[WMARK_LOW])
|
||||||
|
#define high_wmark_pages(z) (z->watermark[WMARK_HIGH])
|
||||||
|
+#define lots_wmark_pages(z) (z->watermark[WMARK_LOTS])
|
||||||
|
|
||||||
|
struct per_cpu_pages {
|
||||||
|
int count; /* number of pages in the list */
|
||||||
|
@@ -343,7 +346,7 @@
|
||||||
|
ZONE_PADDING(_pad1_)
|
||||||
|
|
||||||
|
/* Fields commonly accessed by the page reclaim scanner */
|
||||||
|
- spinlock_t lru_lock;
|
||||||
|
+ spinlock_t lru_lock;
|
||||||
|
struct zone_lru {
|
||||||
|
struct list_head list;
|
||||||
|
} lru[NR_LRU_LISTS];
|
||||||
|
@@ -645,6 +648,7 @@
|
||||||
|
wait_queue_head_t kswapd_wait;
|
||||||
|
struct task_struct *kswapd;
|
||||||
|
int kswapd_max_order;
|
||||||
|
+ struct timer_list watermark_timer;
|
||||||
|
} pg_data_t;
|
||||||
|
|
||||||
|
#define node_present_pages(nid) (NODE_DATA(nid)->node_present_pages)
|
||||||
|
Index: linux-2.6.37-ck2/mm/vmscan.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/vmscan.c 2011-02-14 10:11:01.254252001 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/vmscan.c 2011-02-14 10:11:01.471252001 +1100
|
||||||
|
@@ -36,6 +36,7 @@
|
||||||
|
#include <linux/rwsem.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/kthread.h>
|
||||||
|
+#include <linux/timer.h>
|
||||||
|
#include <linux/freezer.h>
|
||||||
|
#include <linux/memcontrol.h>
|
||||||
|
#include <linux/delayacct.h>
|
||||||
|
@@ -2398,6 +2399,8 @@
|
||||||
|
return sc.nr_reclaimed;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#define WT_EXPIRY (HZ * 5) /* Time to wakeup watermark_timer */
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* The background pageout daemon, started as a kernel thread
|
||||||
|
* from the init process.
|
||||||
|
@@ -2448,6 +2451,8 @@
|
||||||
|
unsigned long new_order;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
+ /* kswapd has been busy so delay watermark_timer */
|
||||||
|
+ mod_timer(&pgdat->watermark_timer, jiffies + WT_EXPIRY);
|
||||||
|
prepare_to_wait(&pgdat->kswapd_wait, &wait, TASK_INTERRUPTIBLE);
|
||||||
|
new_order = pgdat->kswapd_max_order;
|
||||||
|
pgdat->kswapd_max_order = 0;
|
||||||
|
@@ -2632,20 +2637,57 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
+ * We wake up kswapd every WT_EXPIRY till free ram is above pages_lots
|
||||||
|
+ */
|
||||||
|
+static void watermark_wakeup(unsigned long data)
|
||||||
|
+{
|
||||||
|
+ pg_data_t *pgdat = (pg_data_t *)data;
|
||||||
|
+ struct timer_list *wt = &pgdat->watermark_timer;
|
||||||
|
+ int i;
|
||||||
|
+
|
||||||
|
+ if (!waitqueue_active(&pgdat->kswapd_wait) || above_background_load())
|
||||||
|
+ goto out;
|
||||||
|
+ for (i = pgdat->nr_zones - 1; i >= 0; i--) {
|
||||||
|
+ struct zone *z = pgdat->node_zones + i;
|
||||||
|
+
|
||||||
|
+ if (!populated_zone(z) || is_highmem(z)) {
|
||||||
|
+ /* We are better off leaving highmem full */
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if (!zone_watermark_ok(z, 0, lots_wmark_pages(z), 0, 0)) {
|
||||||
|
+ wake_up_interruptible(&pgdat->kswapd_wait);
|
||||||
|
+ goto out;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+out:
|
||||||
|
+ mod_timer(wt, jiffies + WT_EXPIRY);
|
||||||
|
+ return;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
* This kswapd start function will be called by init and node-hot-add.
|
||||||
|
* On node-hot-add, kswapd will moved to proper cpus if cpus are hot-added.
|
||||||
|
*/
|
||||||
|
int kswapd_run(int nid)
|
||||||
|
{
|
||||||
|
pg_data_t *pgdat = NODE_DATA(nid);
|
||||||
|
+ struct timer_list *wt;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
if (pgdat->kswapd)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
+ wt = &pgdat->watermark_timer;
|
||||||
|
+ init_timer(wt);
|
||||||
|
+ wt->data = (unsigned long)pgdat;
|
||||||
|
+ wt->function = watermark_wakeup;
|
||||||
|
+ wt->expires = jiffies + WT_EXPIRY;
|
||||||
|
+ add_timer(wt);
|
||||||
|
+
|
||||||
|
pgdat->kswapd = kthread_run(kswapd, pgdat, "kswapd%d", nid);
|
||||||
|
if (IS_ERR(pgdat->kswapd)) {
|
||||||
|
/* failure at boot is fatal */
|
||||||
|
+ del_timer(wt);
|
||||||
|
BUG_ON(system_state == SYSTEM_BOOTING);
|
||||||
|
printk("Failed to start kswapd on node %d\n",nid);
|
||||||
|
ret = -1;
|
@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
include/linux/sched.h | 2 +-
|
||||||
|
mm/vmscan.c | 2 ++
|
||||||
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck1/include/linux/sched.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck1.orig/include/linux/sched.h 2011-01-06 14:07:19.971048973 +1100
|
||||||
|
+++ linux-2.6.37-ck1/include/linux/sched.h 2011-01-06 14:07:58.442334300 +1100
|
||||||
|
@@ -38,9 +38,9 @@
|
||||||
|
#define SCHED_BATCH 3
|
||||||
|
/* SCHED_ISO: Implemented on BFS only */
|
||||||
|
#define SCHED_IDLE 5
|
||||||
|
+#define SCHED_IDLEPRIO SCHED_IDLE
|
||||||
|
#ifdef CONFIG_SCHED_BFS
|
||||||
|
#define SCHED_ISO 4
|
||||||
|
-#define SCHED_IDLEPRIO SCHED_IDLE
|
||||||
|
#define SCHED_MAX (SCHED_IDLEPRIO)
|
||||||
|
#define SCHED_RANGE(policy) ((policy) <= SCHED_MAX)
|
||||||
|
#endif
|
||||||
|
Index: linux-2.6.37-ck1/mm/vmscan.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck1.orig/mm/vmscan.c 2011-01-06 14:07:58.305326159 +1100
|
||||||
|
+++ linux-2.6.37-ck1/mm/vmscan.c 2011-01-06 14:07:58.443334359 +1100
|
||||||
|
@@ -1874,6 +1874,8 @@ static inline int effective_sc_prio(stru
|
||||||
|
if (likely(p->mm)) {
|
||||||
|
if (rt_task(p))
|
||||||
|
return -20;
|
||||||
|
+ if (p->policy == SCHED_IDLEPRIO)
|
||||||
|
+ return 19;
|
||||||
|
return task_nice(p);
|
||||||
|
}
|
||||||
|
return 0;
|
@ -0,0 +1,250 @@
|
|||||||
|
---
|
||||||
|
include/linux/mm_inline.h | 14 +++++++++++-
|
||||||
|
include/linux/swap.h | 8 ++++++-
|
||||||
|
mm/filemap.c | 50 +++++++++++++++++++++++++++++++++++++++-------
|
||||||
|
mm/swap.c | 30 ++++++++++++++++++++++-----
|
||||||
|
4 files changed, 86 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/mm_inline.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/mm_inline.h 2009-12-03 21:40:09.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/mm_inline.h 2011-02-14 10:11:09.770252000 +1100
|
||||||
|
@@ -20,14 +20,24 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
-add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l)
|
||||||
|
+__add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l, int tail)
|
||||||
|
{
|
||||||
|
- list_add(&page->lru, &zone->lru[l].list);
|
||||||
|
+ /* See if this should be added to the tail of this lru list */
|
||||||
|
+ if (tail)
|
||||||
|
+ list_add_tail(&page->lru, &zone->lru[l].list);
|
||||||
|
+ else
|
||||||
|
+ list_add(&page->lru, &zone->lru[l].list);
|
||||||
|
__inc_zone_state(zone, NR_LRU_BASE + l);
|
||||||
|
mem_cgroup_add_lru_list(page, l);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
+add_page_to_lru_list(struct zone *zone, struct page *page, enum lru_list l)
|
||||||
|
+{
|
||||||
|
+ __add_page_to_lru_list(zone, page, l, 0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static inline void
|
||||||
|
del_page_from_lru_list(struct zone *zone, struct page *page, enum lru_list l)
|
||||||
|
{
|
||||||
|
list_del(&page->lru);
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/swap.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/swap.h 2011-02-14 10:11:00.982252001 +1100
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/swap.h 2011-02-14 10:11:09.770252000 +1100
|
||||||
|
@@ -206,6 +206,7 @@
|
||||||
|
|
||||||
|
|
||||||
|
/* linux/mm/swap.c */
|
||||||
|
+extern void ____lru_cache_add(struct page *, enum lru_list lru, int tail);
|
||||||
|
extern void __lru_cache_add(struct page *, enum lru_list lru);
|
||||||
|
extern void lru_cache_add_lru(struct page *, enum lru_list lru);
|
||||||
|
extern void activate_page(struct page *);
|
||||||
|
@@ -226,9 +227,14 @@
|
||||||
|
__lru_cache_add(page, LRU_INACTIVE_ANON);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline void lru_cache_add_file_tail(struct page *page, int tail)
|
||||||
|
+{
|
||||||
|
+ ____lru_cache_add(page, LRU_INACTIVE_FILE, tail);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static inline void lru_cache_add_file(struct page *page)
|
||||||
|
{
|
||||||
|
- __lru_cache_add(page, LRU_INACTIVE_FILE);
|
||||||
|
+ ____lru_cache_add(page, LRU_INACTIVE_FILE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* LRU Isolation modes. */
|
||||||
|
Index: linux-2.6.37-ck2/mm/filemap.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/filemap.c 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/filemap.c 2011-02-14 10:11:09.772252000 +1100
|
||||||
|
@@ -439,8 +439,8 @@
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(add_to_page_cache_locked);
|
||||||
|
|
||||||
|
-int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
|
||||||
|
- pgoff_t offset, gfp_t gfp_mask)
|
||||||
|
+int __add_to_page_cache_lru(struct page *page, struct address_space *mapping,
|
||||||
|
+ pgoff_t offset, gfp_t gfp_mask, int tail)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
@@ -456,12 +456,18 @@
|
||||||
|
ret = add_to_page_cache(page, mapping, offset, gfp_mask);
|
||||||
|
if (ret == 0) {
|
||||||
|
if (page_is_file_cache(page))
|
||||||
|
- lru_cache_add_file(page);
|
||||||
|
+ lru_cache_add_file_tail(page, tail);
|
||||||
|
else
|
||||||
|
lru_cache_add_anon(page);
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+int add_to_page_cache_lru(struct page *page, struct address_space *mapping,
|
||||||
|
+ pgoff_t offset, gfp_t gfp_mask)
|
||||||
|
+{
|
||||||
|
+ return __add_to_page_cache_lru(page, mapping, offset, gfp_mask, 0);
|
||||||
|
+}
|
||||||
|
EXPORT_SYMBOL_GPL(add_to_page_cache_lru);
|
||||||
|
|
||||||
|
#ifdef CONFIG_NUMA
|
||||||
|
@@ -968,6 +974,28 @@
|
||||||
|
ra->ra_pages /= 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline int nr_mapped(void)
|
||||||
|
+{
|
||||||
|
+ return global_page_state(NR_FILE_MAPPED) +
|
||||||
|
+ global_page_state(NR_ANON_PAGES);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+/*
|
||||||
|
+ * This examines how large in pages a file size is and returns 1 if it is
|
||||||
|
+ * more than half the unmapped ram. Avoid doing read_page_state which is
|
||||||
|
+ * expensive unless we already know it is likely to be large enough.
|
||||||
|
+ */
|
||||||
|
+static int large_isize(unsigned long nr_pages)
|
||||||
|
+{
|
||||||
|
+ if (nr_pages * 6 > vm_total_pages) {
|
||||||
|
+ unsigned long unmapped_ram = vm_total_pages - nr_mapped();
|
||||||
|
+
|
||||||
|
+ if (nr_pages * 2 > unmapped_ram)
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* do_generic_file_read - generic file read routine
|
||||||
|
* @filp: the file to read
|
||||||
|
@@ -992,7 +1020,7 @@
|
||||||
|
pgoff_t prev_index;
|
||||||
|
unsigned long offset; /* offset into pagecache page */
|
||||||
|
unsigned int prev_offset;
|
||||||
|
- int error;
|
||||||
|
+ int error, tail = 0;
|
||||||
|
|
||||||
|
index = *ppos >> PAGE_CACHE_SHIFT;
|
||||||
|
prev_index = ra->prev_pos >> PAGE_CACHE_SHIFT;
|
||||||
|
@@ -1003,7 +1031,7 @@
|
||||||
|
for (;;) {
|
||||||
|
struct page *page;
|
||||||
|
pgoff_t end_index;
|
||||||
|
- loff_t isize;
|
||||||
|
+ loff_t isize = 0;
|
||||||
|
unsigned long nr, ret;
|
||||||
|
|
||||||
|
cond_resched();
|
||||||
|
@@ -1177,8 +1205,16 @@
|
||||||
|
desc->error = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
- error = add_to_page_cache_lru(page, mapping,
|
||||||
|
- index, GFP_KERNEL);
|
||||||
|
+ /*
|
||||||
|
+ * If we know the file is large we add the pages read to the
|
||||||
|
+ * end of the lru as we're unlikely to be able to cache the
|
||||||
|
+ * whole file in ram so make those pages the first to be
|
||||||
|
+ * dropped if not referenced soon.
|
||||||
|
+ */
|
||||||
|
+ if (large_isize(end_index))
|
||||||
|
+ tail = 1;
|
||||||
|
+ error = __add_to_page_cache_lru(page, mapping,
|
||||||
|
+ index, GFP_KERNEL, tail);
|
||||||
|
if (error) {
|
||||||
|
page_cache_release(page);
|
||||||
|
if (error == -EEXIST)
|
||||||
|
Index: linux-2.6.37-ck2/mm/swap.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/swap.c 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/swap.c 2011-02-14 10:11:09.772252000 +1100
|
||||||
|
@@ -215,15 +215,23 @@
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(mark_page_accessed);
|
||||||
|
|
||||||
|
-void __lru_cache_add(struct page *page, enum lru_list lru)
|
||||||
|
+void ______pagevec_lru_add(struct pagevec *pvec, enum lru_list lru, int tail);
|
||||||
|
+
|
||||||
|
+void ____lru_cache_add(struct page *page, enum lru_list lru, int tail)
|
||||||
|
{
|
||||||
|
struct pagevec *pvec = &get_cpu_var(lru_add_pvecs)[lru];
|
||||||
|
|
||||||
|
page_cache_get(page);
|
||||||
|
if (!pagevec_add(pvec, page))
|
||||||
|
- ____pagevec_lru_add(pvec, lru);
|
||||||
|
+ ______pagevec_lru_add(pvec, lru, tail);
|
||||||
|
put_cpu_var(lru_add_pvecs);
|
||||||
|
}
|
||||||
|
+EXPORT_SYMBOL(____lru_cache_add);
|
||||||
|
+
|
||||||
|
+void __lru_cache_add(struct page *page, enum lru_list lru)
|
||||||
|
+{
|
||||||
|
+ ____lru_cache_add(page, lru, 0);
|
||||||
|
+}
|
||||||
|
EXPORT_SYMBOL(__lru_cache_add);
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -231,7 +239,7 @@
|
||||||
|
* @page: the page to be added to the LRU.
|
||||||
|
* @lru: the LRU list to which the page is added.
|
||||||
|
*/
|
||||||
|
-void lru_cache_add_lru(struct page *page, enum lru_list lru)
|
||||||
|
+void __lru_cache_add_lru(struct page *page, enum lru_list lru, int tail)
|
||||||
|
{
|
||||||
|
if (PageActive(page)) {
|
||||||
|
VM_BUG_ON(PageUnevictable(page));
|
||||||
|
@@ -242,7 +250,12 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
VM_BUG_ON(PageLRU(page) || PageActive(page) || PageUnevictable(page));
|
||||||
|
- __lru_cache_add(page, lru);
|
||||||
|
+ ____lru_cache_add(page, lru, tail);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void lru_cache_add_lru(struct page *page, enum lru_list lru)
|
||||||
|
+{
|
||||||
|
+ __lru_cache_add_lru(page, lru, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -403,7 +416,7 @@
|
||||||
|
* Add the passed pages to the LRU, then drop the caller's refcount
|
||||||
|
* on them. Reinitialises the caller's pagevec.
|
||||||
|
*/
|
||||||
|
-void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru)
|
||||||
|
+void ______pagevec_lru_add(struct pagevec *pvec, enum lru_list lru, int tail)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
struct zone *zone = NULL;
|
||||||
|
@@ -431,7 +444,7 @@
|
||||||
|
if (active)
|
||||||
|
SetPageActive(page);
|
||||||
|
update_page_reclaim_stat(zone, page, file, active);
|
||||||
|
- add_page_to_lru_list(zone, page, lru);
|
||||||
|
+ __add_page_to_lru_list(zone, page, lru, tail);
|
||||||
|
}
|
||||||
|
if (zone)
|
||||||
|
spin_unlock_irq(&zone->lru_lock);
|
||||||
|
@@ -439,6 +452,11 @@
|
||||||
|
pagevec_reinit(pvec);
|
||||||
|
}
|
||||||
|
|
||||||
|
+void ____pagevec_lru_add(struct pagevec *pvec, enum lru_list lru)
|
||||||
|
+{
|
||||||
|
+ ______pagevec_lru_add(pvec, lru, 0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
EXPORT_SYMBOL(____pagevec_lru_add);
|
||||||
|
|
||||||
|
/*
|
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
mm/vmscan.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/mm/vmscan.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/mm/vmscan.c 2011-01-06 14:04:10.000000000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/mm/vmscan.c 2011-02-14 10:11:00.536252000 +1100
|
||||||
|
@@ -133,7 +133,7 @@
|
||||||
|
/*
|
||||||
|
* From 0 .. 100. Higher means more swappy.
|
||||||
|
*/
|
||||||
|
-int vm_swappiness = 60;
|
||||||
|
+int vm_swappiness;
|
||||||
|
long vm_total_pages; /* The total number of pages which the VM controls */
|
||||||
|
|
||||||
|
static LIST_HEAD(shrinker_list);
|
@ -0,0 +1,36 @@
|
|||||||
|
---
|
||||||
|
kernel/Kconfig.preempt | 7 ++++---
|
||||||
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/kernel/Kconfig.preempt
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/kernel/Kconfig.preempt 2009-06-10 13:05:27.000000000 +1000
|
||||||
|
+++ linux-2.6.37-ck2/kernel/Kconfig.preempt 2011-02-14 10:11:11.217252001 +1100
|
||||||
|
@@ -1,7 +1,7 @@
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Preemption Model"
|
||||||
|
- default PREEMPT_NONE
|
||||||
|
+ default PREEMPT
|
||||||
|
|
||||||
|
config PREEMPT_NONE
|
||||||
|
bool "No Forced Preemption (Server)"
|
||||||
|
@@ -17,7 +17,7 @@
|
||||||
|
latencies.
|
||||||
|
|
||||||
|
config PREEMPT_VOLUNTARY
|
||||||
|
- bool "Voluntary Kernel Preemption (Desktop)"
|
||||||
|
+ bool "Voluntary Kernel Preemption (Nothing)"
|
||||||
|
help
|
||||||
|
This option reduces the latency of the kernel by adding more
|
||||||
|
"explicit preemption points" to the kernel code. These new
|
||||||
|
@@ -31,7 +31,8 @@
|
||||||
|
applications to run more 'smoothly' even when the system is
|
||||||
|
under load.
|
||||||
|
|
||||||
|
- Select this if you are building a kernel for a desktop system.
|
||||||
|
+ Select this for no system in particular (choose Preemptible
|
||||||
|
+ instead on a desktop if you know what's good for you).
|
||||||
|
|
||||||
|
config PREEMPT
|
||||||
|
bool "Preemptible Kernel (Low-Latency Desktop)"
|
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
include/linux/sched.h | 7 +++++++
|
||||||
|
kernel/sched_bfs.c | 20 ++++++++++++++++++++
|
||||||
|
2 files changed, 27 insertions(+)
|
||||||
|
|
||||||
|
Index: linux-2.6.37-ck2/include/linux/sched.h
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/include/linux/sched.h 2011-02-14 09:47:50.988252000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/include/linux/sched.h 2011-02-14 10:11:00.292251999 +1100
|
||||||
|
@@ -1558,6 +1558,7 @@
|
||||||
|
return (p->policy == SCHED_ISO);
|
||||||
|
}
|
||||||
|
extern void remove_cpu(unsigned long cpu);
|
||||||
|
+extern int above_background_load(void);
|
||||||
|
#else /* CFS */
|
||||||
|
extern int runqueue_is_locked(int cpu);
|
||||||
|
#define tsk_seruntime(t) ((t)->se.sum_exec_runtime)
|
||||||
|
@@ -1581,6 +1582,12 @@
|
||||||
|
static inline void remove_cpu(unsigned long cpu)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+/* Anyone feel like implementing this? */
|
||||||
|
+static inline int above_background_load(void)
|
||||||
|
+{
|
||||||
|
+ return 1;
|
||||||
|
+}
|
||||||
|
#endif /* CONFIG_SCHED_BFS */
|
||||||
|
|
||||||
|
/* Future-safe accessor for struct task_struct's cpus_allowed. */
|
||||||
|
Index: linux-2.6.37-ck2/kernel/sched_bfs.c
|
||||||
|
===================================================================
|
||||||
|
--- linux-2.6.37-ck2.orig/kernel/sched_bfs.c 2011-02-14 09:53:53.820252000 +1100
|
||||||
|
+++ linux-2.6.37-ck2/kernel/sched_bfs.c 2011-02-14 10:11:00.294252001 +1100
|
||||||
|
@@ -559,6 +559,26 @@
|
||||||
|
grq_unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
+/*
|
||||||
|
+ * Look for any tasks *anywhere* that are running nice 0 or better. We do
|
||||||
|
+ * this lockless for overhead reasons since the occasional wrong result
|
||||||
|
+ * is harmless.
|
||||||
|
+ */
|
||||||
|
+int above_background_load(void)
|
||||||
|
+{
|
||||||
|
+ struct task_struct *cpu_curr;
|
||||||
|
+ unsigned long cpu;
|
||||||
|
+
|
||||||
|
+ for_each_online_cpu(cpu) {
|
||||||
|
+ cpu_curr = cpu_rq(cpu)->curr;
|
||||||
|
+ if (unlikely(!cpu_curr))
|
||||||
|
+ continue;
|
||||||
|
+ if (PRIO_TO_NICE(cpu_curr->static_prio) < 1)
|
||||||
|
+ return 1;
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#ifndef __ARCH_WANT_UNLOCKED_CTXSW
|
||||||
|
static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
|
||||||
|
{
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux/i386 2.6.38-rc6 Kernel Configuration
|
# Linux/i386 2.6.38-rc6-ck2 Kernel Configuration
|
||||||
#
|
#
|
||||||
# CONFIG_64BIT is not set
|
# CONFIG_64BIT is not set
|
||||||
CONFIG_X86_32=y
|
CONFIG_X86_32=y
|
||||||
@ -402,9 +402,16 @@ CONFIG_EFI=y
|
|||||||
CONFIG_SECCOMP=y
|
CONFIG_SECCOMP=y
|
||||||
# CONFIG_CC_STACKPROTECTOR is not set
|
# CONFIG_CC_STACKPROTECTOR is not set
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250_NODEFAULT is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
CONFIG_HZ_1000=y
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1500 is not set
|
||||||
|
# CONFIG_HZ_2000 is not set
|
||||||
|
# CONFIG_HZ_3000 is not set
|
||||||
|
# CONFIG_HZ_4000 is not set
|
||||||
|
# CONFIG_HZ_5000 is not set
|
||||||
|
# CONFIG_HZ_7500 is not set
|
||||||
|
# CONFIG_HZ_10000 is not set
|
||||||
CONFIG_HZ=1000
|
CONFIG_HZ=1000
|
||||||
CONFIG_SCHED_HRTICK=y
|
CONFIG_SCHED_HRTICK=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux/i386 2.6.38-rc6 Kernel Configuration
|
# Linux/i386 2.6.38-rc6-ck2 Kernel Configuration
|
||||||
#
|
#
|
||||||
# CONFIG_64BIT is not set
|
# CONFIG_64BIT is not set
|
||||||
CONFIG_X86_32=y
|
CONFIG_X86_32=y
|
||||||
@ -389,9 +389,16 @@ CONFIG_ARCH_USES_PG_UNCACHED=y
|
|||||||
CONFIG_SECCOMP=y
|
CONFIG_SECCOMP=y
|
||||||
CONFIG_CC_STACKPROTECTOR=y
|
CONFIG_CC_STACKPROTECTOR=y
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250_NODEFAULT is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
CONFIG_HZ_1000=y
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1500 is not set
|
||||||
|
# CONFIG_HZ_2000 is not set
|
||||||
|
# CONFIG_HZ_3000 is not set
|
||||||
|
# CONFIG_HZ_4000 is not set
|
||||||
|
# CONFIG_HZ_5000 is not set
|
||||||
|
# CONFIG_HZ_7500 is not set
|
||||||
|
# CONFIG_HZ_10000 is not set
|
||||||
CONFIG_HZ=1000
|
CONFIG_HZ=1000
|
||||||
CONFIG_SCHED_HRTICK=y
|
CONFIG_SCHED_HRTICK=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux/i386 2.6.38-rc6 Kernel Configuration
|
# Linux/i386 2.6.38-rc6-ck2 Kernel Configuration
|
||||||
#
|
#
|
||||||
# CONFIG_64BIT is not set
|
# CONFIG_64BIT is not set
|
||||||
CONFIG_X86_32=y
|
CONFIG_X86_32=y
|
||||||
@ -388,9 +388,16 @@ CONFIG_ARCH_USES_PG_UNCACHED=y
|
|||||||
CONFIG_SECCOMP=y
|
CONFIG_SECCOMP=y
|
||||||
CONFIG_CC_STACKPROTECTOR=y
|
CONFIG_CC_STACKPROTECTOR=y
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250_NODEFAULT is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
CONFIG_HZ_1000=y
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1500 is not set
|
||||||
|
# CONFIG_HZ_2000 is not set
|
||||||
|
# CONFIG_HZ_3000 is not set
|
||||||
|
# CONFIG_HZ_4000 is not set
|
||||||
|
# CONFIG_HZ_5000 is not set
|
||||||
|
# CONFIG_HZ_7500 is not set
|
||||||
|
# CONFIG_HZ_10000 is not set
|
||||||
CONFIG_HZ=1000
|
CONFIG_HZ=1000
|
||||||
CONFIG_SCHED_HRTICK=y
|
CONFIG_SCHED_HRTICK=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux/x86_64 2.6.38-rc6 Kernel Configuration
|
# Linux/x86_64 2.6.38-rc6-ck2 Kernel Configuration
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
# CONFIG_X86_32 is not set
|
# CONFIG_X86_32 is not set
|
||||||
@ -352,9 +352,16 @@ CONFIG_ARCH_USES_PG_UNCACHED=y
|
|||||||
CONFIG_SECCOMP=y
|
CONFIG_SECCOMP=y
|
||||||
CONFIG_CC_STACKPROTECTOR=y
|
CONFIG_CC_STACKPROTECTOR=y
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250_NODEFAULT is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
CONFIG_HZ_1000=y
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1500 is not set
|
||||||
|
# CONFIG_HZ_2000 is not set
|
||||||
|
# CONFIG_HZ_3000 is not set
|
||||||
|
# CONFIG_HZ_4000 is not set
|
||||||
|
# CONFIG_HZ_5000 is not set
|
||||||
|
# CONFIG_HZ_7500 is not set
|
||||||
|
# CONFIG_HZ_10000 is not set
|
||||||
CONFIG_HZ=1000
|
CONFIG_HZ=1000
|
||||||
CONFIG_SCHED_HRTICK=y
|
CONFIG_SCHED_HRTICK=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux/i386 2.6.38-rc6 Kernel Configuration
|
# Linux/i386 2.6.38-rc6-ck2 Kernel Configuration
|
||||||
#
|
#
|
||||||
# CONFIG_64BIT is not set
|
# CONFIG_64BIT is not set
|
||||||
CONFIG_X86_32=y
|
CONFIG_X86_32=y
|
||||||
@ -389,9 +389,16 @@ CONFIG_ARCH_USES_PG_UNCACHED=y
|
|||||||
CONFIG_SECCOMP=y
|
CONFIG_SECCOMP=y
|
||||||
CONFIG_CC_STACKPROTECTOR=y
|
CONFIG_CC_STACKPROTECTOR=y
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250_NODEFAULT is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
CONFIG_HZ_1000=y
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1500 is not set
|
||||||
|
# CONFIG_HZ_2000 is not set
|
||||||
|
# CONFIG_HZ_3000 is not set
|
||||||
|
# CONFIG_HZ_4000 is not set
|
||||||
|
# CONFIG_HZ_5000 is not set
|
||||||
|
# CONFIG_HZ_7500 is not set
|
||||||
|
# CONFIG_HZ_10000 is not set
|
||||||
CONFIG_HZ=1000
|
CONFIG_HZ=1000
|
||||||
CONFIG_SCHED_HRTICK=y
|
CONFIG_SCHED_HRTICK=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux/x86_64 2.6.38-rc6 Kernel Configuration
|
# Linux/x86_64 2.6.38-rc6-ck2 Kernel Configuration
|
||||||
#
|
#
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
# CONFIG_X86_32 is not set
|
# CONFIG_X86_32 is not set
|
||||||
@ -354,9 +354,16 @@ CONFIG_ARCH_USES_PG_UNCACHED=y
|
|||||||
CONFIG_SECCOMP=y
|
CONFIG_SECCOMP=y
|
||||||
CONFIG_CC_STACKPROTECTOR=y
|
CONFIG_CC_STACKPROTECTOR=y
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
# CONFIG_HZ_250 is not set
|
# CONFIG_HZ_250_NODEFAULT is not set
|
||||||
# CONFIG_HZ_300 is not set
|
# CONFIG_HZ_300 is not set
|
||||||
CONFIG_HZ_1000=y
|
CONFIG_HZ_1000=y
|
||||||
|
# CONFIG_HZ_1500 is not set
|
||||||
|
# CONFIG_HZ_2000 is not set
|
||||||
|
# CONFIG_HZ_3000 is not set
|
||||||
|
# CONFIG_HZ_4000 is not set
|
||||||
|
# CONFIG_HZ_5000 is not set
|
||||||
|
# CONFIG_HZ_7500 is not set
|
||||||
|
# CONFIG_HZ_10000 is not set
|
||||||
CONFIG_HZ=1000
|
CONFIG_HZ=1000
|
||||||
CONFIG_SCHED_HRTICK=y
|
CONFIG_SCHED_HRTICK=y
|
||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
Loading…
x
Reference in New Issue
Block a user