* PATCH: modular out of memory base patch for 2.4.25
@ 2004-03-12 9:56 Tvrtko A. Uršulin
2004-03-12 10:06 ` PATCH: modular out of memory additional modules " Tvrtko A. Uršulin
0 siblings, 1 reply; 2+ messages in thread
From: Tvrtko A. Uršulin @ 2004-03-12 9:56 UTC (permalink / raw)
To: linux-kernel; +Cc: Marcelo Tosatti
[-- Attachment #1: Type: text/plain, Size: 158 bytes --]
Hello!
This patch enables modular oom killer infrastructure. With this base patch,
functionality and behavior is unchanged from vanilla 2.4.25.
Comments?
[-- Attachment #2: moom-2.4.25-base.patch --]
[-- Type: text/x-diff, Size: 27058 bytes --]
diff -Naur linux-2.4.25/arch/alpha/config.in linux-2.4.25-moom/arch/alpha/config.in
--- linux-2.4.25/arch/alpha/config.in 2004-03-12 09:44:27.000000000 +0100
+++ linux-2.4.25-moom/arch/alpha/config.in 2004-03-12 10:27:54.000000000 +0100
@@ -317,6 +317,7 @@
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
tristate 'Kernel support for Linux/Intel ELF binaries' CONFIG_BINFMT_EM86
+source mm/Config.in
source drivers/parport/Config.in
endmenu
diff -Naur linux-2.4.25/arch/alpha/defconfig linux-2.4.25-moom/arch/alpha/defconfig
--- linux-2.4.25/arch/alpha/defconfig 2004-03-12 09:44:27.000000000 +0100
+++ linux-2.4.25-moom/arch/alpha/defconfig 2004-03-12 10:27:54.000000000 +0100
@@ -74,6 +74,8 @@
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_BINFMT_EM86 is not set
+# CONFIG_OOM_KILL is not set
+
#
# Parallel port support
diff -Naur linux-2.4.25/arch/arm/config.in linux-2.4.25-moom/arch/arm/config.in
--- linux-2.4.25/arch/arm/config.in 2004-03-12 09:44:27.000000000 +0100
+++ linux-2.4.25-moom/arch/arm/config.in 2004-03-12 09:59:23.000000000 +0100
@@ -500,6 +500,7 @@
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
dep_bool 'Power Management support (experimental)' CONFIG_PM $CONFIG_EXPERIMENTAL
dep_tristate 'RISC OS personality' CONFIG_ARTHUR $CONFIG_CPU_32
string 'Default kernel command string' CONFIG_CMDLINE ""
diff -Naur linux-2.4.25/arch/arm/defconfig linux-2.4.25-moom/arch/arm/defconfig
--- linux-2.4.25/arch/arm/defconfig 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/arm/defconfig 2004-03-12 10:27:54.000000000 +0100
@@ -93,6 +93,7 @@
CONFIG_LEDS_TIMER=y
CONFIG_LEDS_CPU=y
CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_OOM_KILL is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/cris/config.in linux-2.4.25-moom/arch/cris/config.in
--- linux-2.4.25/arch/cris/config.in 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/cris/config.in 2004-03-12 09:59:36.000000000 +0100
@@ -31,6 +31,7 @@
bool 'Sysctl support' CONFIG_SYSCTL
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
+source mm/Config.in
string 'Kernel command line' CONFIG_ETRAX_CMDLINE "root=/dev/mtdblock3"
diff -Naur linux-2.4.25/arch/cris/defconfig linux-2.4.25-moom/arch/cris/defconfig
--- linux-2.4.25/arch/cris/defconfig 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/cris/defconfig 2004-03-12 10:27:54.000000000 +0100
@@ -20,6 +20,7 @@
CONFIG_BINFMT_ELF=y
# CONFIG_ETRAX_KGDB is not set
# CONFIG_ETRAX_WATCHDOG is not set
+# CONFIG_OOM_KILL is not set
#
# Hardware setup
diff -Naur linux-2.4.25/arch/i386/config.in linux-2.4.25-moom/arch/i386/config.in
--- linux-2.4.25/arch/i386/config.in 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/i386/config.in 2004-03-12 09:56:17.000000000 +0100
@@ -328,7 +328,7 @@
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
bool 'Power Management support' CONFIG_PM
diff -Naur linux-2.4.25/arch/i386/defconfig linux-2.4.25-moom/arch/i386/defconfig
--- linux-2.4.25/arch/i386/defconfig 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/i386/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -83,6 +83,7 @@
# CONFIG_EISA is not set
# CONFIG_MCA is not set
CONFIG_HOTPLUG=y
+# CONFIG_OOM_KILL is not set
#
# PCMCIA/CardBus support
diff -Naur linux-2.4.25/arch/ia64/config.in linux-2.4.25-moom/arch/ia64/config.in
--- linux-2.4.25/arch/ia64/config.in 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/ia64/config.in 2004-03-12 09:59:48.000000000 +0100
@@ -125,6 +125,7 @@
bool 'Sysctl support' CONFIG_SYSCTL
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
if [ "$CONFIG_IA64_HP_SIM" = "n" ]; then
define_bool CONFIG_ACPI y
diff -Naur linux-2.4.25/arch/ia64/defconfig linux-2.4.25-moom/arch/ia64/defconfig
--- linux-2.4.25/arch/ia64/defconfig 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/ia64/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -65,6 +65,7 @@
CONFIG_ACPI_EFI=y
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_KERNEL_CONFIG=y
+# CONFIG_OOM_KILL is not set
#
# ACPI Support
diff -Naur linux-2.4.25/arch/m68k/config.in linux-2.4.25-moom/arch/m68k/config.in
--- linux-2.4.25/arch/m68k/config.in 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/m68k/config.in 2004-03-12 10:00:01.000000000 +0100
@@ -100,6 +100,7 @@
tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
if [ "$CONFIG_AMIGA" = "y" ]; then
bool 'Amiga Zorro (AutoConfig) bus support' CONFIG_ZORRO
diff -Naur linux-2.4.25/arch/m68k/defconfig linux-2.4.25-moom/arch/m68k/defconfig
--- linux-2.4.25/arch/m68k/defconfig 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/m68k/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -53,6 +53,7 @@
CONFIG_PROC_HARDWARE=y
# CONFIG_PARPORT is not set
# CONFIG_PRINTER is not set
+# CONFIG_OOM_KILL is not set
#
# Loadable module support
diff -Naur linux-2.4.25/arch/mips/config-shared.in linux-2.4.25-moom/arch/mips/config-shared.in
--- linux-2.4.25/arch/mips/config-shared.in 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/mips/config-shared.in 2004-03-12 09:56:44.000000000 +0100
@@ -955,7 +955,7 @@
fi
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
if [ "$CONFIG_SOC_AU1X00" = "y" ]; then
bool 'Power Management support' CONFIG_PM
diff -Naur linux-2.4.25/arch/mips/defconfig linux-2.4.25-moom/arch/mips/defconfig
--- linux-2.4.25/arch/mips/defconfig 2004-03-12 09:44:28.000000000 +0100
+++ linux-2.4.25-moom/arch/mips/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -144,7 +144,7 @@
# CONFIG_MIPS32_N32 is not set
# CONFIG_BINFMT_ELF32 is not set
# CONFIG_BINFMT_MISC is not set
-# CONFIG_OOM_KILLER is not set
+# CONFIG_OOM_KILL is not set
#
# Memory Technology Devices (MTD)
diff -Naur linux-2.4.25/arch/mips64/defconfig linux-2.4.25-moom/arch/mips64/defconfig
--- linux-2.4.25/arch/mips64/defconfig 2004-03-12 09:44:29.000000000 +0100
+++ linux-2.4.25-moom/arch/mips64/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -142,7 +142,7 @@
# CONFIG_MIPS32_N32 is not set
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
-# CONFIG_OOM_KILLER is not set
+# CONFIG_OOM_KILL is not set
#
# Memory Technology Devices (MTD)
diff -Naur linux-2.4.25/arch/parisc/config.in linux-2.4.25-moom/arch/parisc/config.in
--- linux-2.4.25/arch/parisc/config.in 2004-03-12 09:44:29.000000000 +0100
+++ linux-2.4.25-moom/arch/parisc/config.in 2004-03-12 10:00:26.000000000 +0100
@@ -91,6 +91,7 @@
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for SOM binaries' CONFIG_BINFMT_SOM
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
# anyone want to get ACPI working on PA/RISC?
define_bool CONFIG_PM n
diff -Naur linux-2.4.25/arch/parisc/defconfig linux-2.4.25-moom/arch/parisc/defconfig
--- linux-2.4.25/arch/parisc/defconfig 2004-03-12 09:44:29.000000000 +0100
+++ linux-2.4.25-moom/arch/parisc/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -45,6 +45,7 @@
CONFIG_IOMMU_SBA=y
CONFIG_SUPERIO=y
CONFIG_PCI_NAMES=y
+# CONFIG_OOM_KILL is not set
#
# General setup
diff -Naur linux-2.4.25/arch/ppc/config.in linux-2.4.25-moom/arch/ppc/config.in
--- linux-2.4.25/arch/ppc/config.in 2004-03-12 09:44:29.000000000 +0100
+++ linux-2.4.25-moom/arch/ppc/config.in 2004-03-12 09:55:34.000000000 +0100
@@ -352,7 +352,7 @@
define_bool CONFIG_BINFMT_ELF y
define_bool CONFIG_KERNEL_ELF y
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
source drivers/pci/Config.in
diff -Naur linux-2.4.25/arch/ppc/defconfig linux-2.4.25-moom/arch/ppc/defconfig
--- linux-2.4.25/arch/ppc/defconfig 2004-03-12 09:44:29.000000000 +0100
+++ linux-2.4.25-moom/arch/ppc/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -60,9 +60,9 @@
CONFIG_BINFMT_ELF=y
CONFIG_KERNEL_ELF=y
CONFIG_BINFMT_MISC=m
-# CONFIG_OOM_KILLER is not set
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG=y
+# CONFIG_OOM_KILL is not set
#
# PCMCIA/CardBus support
diff -Naur linux-2.4.25/arch/ppc64/config.in linux-2.4.25-moom/arch/ppc64/config.in
--- linux-2.4.25/arch/ppc64/config.in 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/ppc64/config.in 2004-03-12 10:00:47.000000000 +0100
@@ -1,4 +1,4 @@
-#
+#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/config-language.txt.
#
@@ -86,6 +86,7 @@
tristate 'Kernel support for 32 bit ELF binaries' CONFIG_BINFMT_ELF32
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
source drivers/pci/Config.in
diff -Naur linux-2.4.25/arch/ppc64/defconfig linux-2.4.25-moom/arch/ppc64/defconfig
--- linux-2.4.25/arch/ppc64/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/ppc64/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -60,6 +60,7 @@
# CONFIG_BINFMT_MISC is not set
CONFIG_PCI_NAMES=y
# CONFIG_HOTPLUG is not set
+# CONFIG_OOM_KILL is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/s390/config.in linux-2.4.25-moom/arch/s390/config.in
--- linux-2.4.25/arch/s390/config.in 2004-03-12 09:44:14.000000000 +0100
+++ linux-2.4.25-moom/arch/s390/config.in 2004-03-12 10:01:03.000000000 +0100
@@ -59,6 +59,7 @@
define_bool CONFIG_KCORE_ELF y
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
bool 'Show crashed user process info' CONFIG_PROCESS_DEBUG
bool 'Pseudo page fault support' CONFIG_PFAULT
bool 'VM shared kernel support' CONFIG_SHARED_KERNEL
diff -Naur linux-2.4.25/arch/s390/defconfig linux-2.4.25-moom/arch/s390/defconfig
--- linux-2.4.25/arch/s390/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/s390/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -50,6 +50,7 @@
# CONFIG_PROCESS_DEBUG is not set
CONFIG_PFAULT=y
# CONFIG_SHARED_KERNEL is not set
+# CONFIG_OOM_KILL is not set
#
# Block device drivers
diff -Naur linux-2.4.25/arch/s390x/config.in linux-2.4.25-moom/arch/s390x/config.in
--- linux-2.4.25/arch/s390x/config.in 2004-03-12 09:44:14.000000000 +0100
+++ linux-2.4.25-moom/arch/s390x/config.in 2004-03-12 10:01:14.000000000 +0100
@@ -62,6 +62,7 @@
define_bool CONFIG_KCORE_ELF y
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
bool 'Show crashed user process info' CONFIG_PROCESS_DEBUG
bool 'Pseudo page fault support' CONFIG_PFAULT
bool 'VM shared kernel support' CONFIG_SHARED_KERNEL
diff -Naur linux-2.4.25/arch/s390x/defconfig linux-2.4.25-moom/arch/s390x/defconfig
--- linux-2.4.25/arch/s390x/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/s390x/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -51,6 +51,7 @@
# CONFIG_PROCESS_DEBUG is not set
CONFIG_PFAULT=y
# CONFIG_SHARED_KERNEL is not set
+# CONFIG_OOM_KILL is not set
#
# Block device drivers
diff -Naur linux-2.4.25/arch/sh/config.in linux-2.4.25-moom/arch/sh/config.in
--- linux-2.4.25/arch/sh/config.in 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sh/config.in 2004-03-12 09:55:46.000000000 +0100
@@ -284,8 +284,7 @@
fi
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
source drivers/parport/Config.in
@@ -492,4 +491,4 @@
endmenu
source crypto/Config.in
-source lib/Config.in
+source lib/Config.in
\ No newline at end of file
diff -Naur linux-2.4.25/arch/sh/defconfig linux-2.4.25-moom/arch/sh/defconfig
--- linux-2.4.25/arch/sh/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sh/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -49,6 +49,7 @@
# CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
+# CONFIG_OOM_KILL is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/sh64/config.in linux-2.4.25-moom/arch/sh64/config.in
--- linux-2.4.25/arch/sh64/config.in 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sh64/config.in 2004-03-12 09:57:18.000000000 +0100
@@ -154,8 +154,7 @@
fi
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
-
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
# source drivers/parport/Config.in
diff -Naur linux-2.4.25/arch/sh64/defconfig linux-2.4.25-moom/arch/sh64/defconfig
--- linux-2.4.25/arch/sh64/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sh64/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -84,6 +84,7 @@
# CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
+# CONFIG_OOM_KILL is not set
#
# Block devices
diff -Naur linux-2.4.25/arch/sparc/config.in linux-2.4.25-moom/arch/sparc/config.in
--- linux-2.4.25/arch/sparc/config.in 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sparc/config.in 2004-03-12 09:57:55.000000000 +0100
@@ -76,7 +76,7 @@
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
bool 'SunOS binary emulation' CONFIG_SUNOS_EMUL
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
source drivers/parport/Config.in
dep_tristate ' Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
endmenu
diff -Naur linux-2.4.25/arch/sparc/defconfig linux-2.4.25-moom/arch/sparc/defconfig
--- linux-2.4.25/arch/sparc/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sparc/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -53,7 +53,7 @@
CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m
CONFIG_SUNOS_EMUL=y
-# CONFIG_OOM_KILLER is not set
+# CONFIG_OOM_KILL is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/sparc64/config.in linux-2.4.25-moom/arch/sparc64/config.in
--- linux-2.4.25/arch/sparc64/config.in 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sparc64/config.in 2004-03-12 09:58:10.000000000 +0100
@@ -82,7 +82,7 @@
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
tristate 'Solaris binary emulation (EXPERIMENTAL)' CONFIG_SOLARIS_EMUL
fi
-bool 'Select task to kill on out of memory condition' CONFIG_OOM_KILLER
+source mm/Config.in
source drivers/parport/Config.in
dep_tristate ' Parallel printer support' CONFIG_PRINTER $CONFIG_PARPORT
if [ "$CONFIG_PCI" = "y" ]; then
diff -Naur linux-2.4.25/arch/sparc64/defconfig linux-2.4.25-moom/arch/sparc64/defconfig
--- linux-2.4.25/arch/sparc64/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/sparc64/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -59,7 +59,7 @@
CONFIG_BINFMT_MISC=m
# CONFIG_SUNOS_EMUL is not set
CONFIG_SOLARIS_EMUL=m
-# CONFIG_OOM_KILLER is not set
+# CONFIG_OOM_KILL is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/x86_64/config.in linux-2.4.25-moom/arch/x86_64/config.in
--- linux-2.4.25/arch/x86_64/config.in 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/x86_64/config.in 2004-03-12 10:01:32.000000000 +0100
@@ -110,6 +110,7 @@
#tristate 'Kernel support for a.out binaries' CONFIG_BINFMT_AOUT
tristate 'Kernel support for ELF binaries' CONFIG_BINFMT_ELF
tristate 'Kernel support for MISC binaries' CONFIG_BINFMT_MISC
+source mm/Config.in
bool 'Power Management support' CONFIG_PM
diff -Naur linux-2.4.25/arch/x86_64/defconfig linux-2.4.25-moom/arch/x86_64/defconfig
--- linux-2.4.25/arch/x86_64/defconfig 2004-03-12 09:44:30.000000000 +0100
+++ linux-2.4.25-moom/arch/x86_64/defconfig 2004-03-12 10:27:55.000000000 +0100
@@ -68,6 +68,7 @@
# CONFIG_BINFMT_MISC is not set
CONFIG_PM=y
CONFIG_IA32_EMULATION=y
+# CONFIG_OOM_KILL is not set
#
# ACPI Support
diff -Naur linux-2.4.25/Documentation/Configure.help linux-2.4.25-moom/Documentation/Configure.help
--- linux-2.4.25/Documentation/Configure.help 2004-03-12 09:44:27.000000000 +0100
+++ linux-2.4.25-moom/Documentation/Configure.help 2004-03-12 10:27:54.000000000 +0100
@@ -412,20 +412,6 @@
Otherwise low memory pages are used as bounce buffers causing a
degrade in performance.
-OOM killer support
-CONFIG_OOM_KILLER
- This option selects the kernel behaviour during total out of memory
- condition.
-
- The default behaviour is to, as soon as no freeable memory and no swap
- space are available, kill the task which tries to allocate memory.
- The default behaviour is very reliable.
-
- If you select this option, as soon as no freeable memory is available,
- the kernel will try to select the "best" task to be killed.
-
- If unsure, say N.
-
Normal floppy disk support
CONFIG_BLK_DEV_FD
If you want to use the floppy disk drive(s) of your PC under Linux,
@@ -440,6 +426,21 @@
The module will be called floppy.o. If you want to compile it as a
module, say M here and read <file:Documentation/modules.txt>.
+Classic out of memory killer
+CONFIG_OOM_KILL
+ This option enables the traditional oom_kill.c mechanism for
+ killing processes in an attempt to recover from an out-of-memory
+ condition.
+
+ The default behaviour is to, as soon as no freeable memory and no swap
+ space are available, kill the task which tries to allocate memory.
+ The default behaviour is very reliable.
+
+ If you select this option, as soon as no freeable memory is available,
+ the kernel will try to select the "best" task to be killed.
+
+ If unsure, say N.
+
iSeries Virtual I/O Disk Support
CONFIG_VIODASD
If you are running on an iSeries system and you want to use
diff -Naur linux-2.4.25/include/linux/mm.h linux-2.4.25-moom/include/linux/mm.h
--- linux-2.4.25/include/linux/mm.h 2004-03-12 09:44:20.000000000 +0100
+++ linux-2.4.25-moom/include/linux/mm.h 2004-03-12 09:52:36.000000000 +0100
@@ -338,6 +338,8 @@
struct zone_struct;
extern struct zone_struct *zone_table[];
+extern int get_nr_swap_pages (void);
+
static inline zone_t *page_zone(struct page *page)
{
return zone_table[page->flags >> ZONE_SHIFT];
diff -Naur linux-2.4.25/include/linux/notifier.h linux-2.4.25-moom/include/linux/notifier.h
--- linux-2.4.25/include/linux/notifier.h 2003-10-07 11:18:07.000000000 +0200
+++ linux-2.4.25-moom/include/linux/notifier.h 2004-03-12 09:52:36.000000000 +0100
@@ -60,5 +60,8 @@
#define NETLINK_URELEASE 0x0001 /* Unicast netlink socket released */
+#define OUT_OF_MEMORY 0x00001 /* Notify of critical memory shortage */
+
+
#endif /* __KERNEL__ */
#endif /* _LINUX_NOTIFIER_H */
diff -Naur linux-2.4.25/include/linux/oom_notifier.h linux-2.4.25-moom/include/linux/oom_notifier.h
--- linux-2.4.25/include/linux/oom_notifier.h 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.25-moom/include/linux/oom_notifier.h 2004-03-12 09:52:36.000000000 +0100
@@ -0,0 +1,40 @@
+#ifndef _LINUX_OOM_NOTIFIER_H
+#define _LINUX_OOM_NOTIFIER_H
+
+
+#ifdef debug
+#undef dbg
+#endif
+#define dbg(format, arg...) \
+do { \
+ printk (KERN_DEBUG "Out of memory: " format "\n", ## arg); \
+} while(0)
+
+#ifdef warn
+#undef warn
+#endif
+#define warn(format, arg...) \
+do { \
+ printk (KERN_WARNING "Out of memory: " format "\n", ## arg); \
+} while(0)
+
+#ifdef info
+#undef info
+#endif
+#define info(format, arg...) \
+do { \
+ printk (KERN_INFO "Out of Memory: " format "\n", ## arg); \
+} while(0)
+
+#ifdef error
+#undef error
+#endif
+#define error(format, arg...) \
+do { \
+ printk (KERN_ERR "Out of Memory: " format "\n", ## arg); \
+} while(0)
+
+int register_oom_notifier(struct notifier_block * nb);
+int unregister_oom_notifier(struct notifier_block * nb);
+
+#endif /* _LINUX_OOM_NOTIFIER_H */
diff -Naur linux-2.4.25/include/linux/sysctl.h linux-2.4.25-moom/include/linux/sysctl.h
--- linux-2.4.25/include/linux/sysctl.h 2004-03-12 09:44:34.000000000 +0100
+++ linux-2.4.25-moom/include/linux/sysctl.h 2004-03-12 10:10:10.000000000 +0100
@@ -156,6 +156,7 @@
VM_MAPPED_RATIO=20, /* amount of unfreeable pages that triggers swapout */
VM_LAPTOP_MODE=21, /* kernel in laptop flush mode */
VM_BLOCK_DUMP=22, /* dump fs activity to log */
+ VM_OOM=23, /* Out of memory */
};
@@ -810,7 +811,7 @@
struct list_head ctl_entry;
};
-struct ctl_table_header * register_sysctl_table(ctl_table * table,
+struct ctl_table_header * register_sysctl_table(ctl_table * table,
int insert_at_head);
void unregister_sysctl_table(struct ctl_table_header * table);
diff -Naur linux-2.4.25/mm/Config.in linux-2.4.25-moom/mm/Config.in
--- linux-2.4.25/mm/Config.in 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.25-moom/mm/Config.in 2004-03-12 10:28:30.000000000 +0100
@@ -0,0 +1,6 @@
+mainmenu_option next_comment
+comment 'Out of memory killer'
+
+tristate 'Classic' CONFIG_OOM_KILL
+
+endmenu
diff -Naur linux-2.4.25/mm/Makefile linux-2.4.25-moom/mm/Makefile
--- linux-2.4.25/mm/Makefile 2002-08-06 09:10:56.000000000 +0200
+++ linux-2.4.25-moom/mm/Makefile 2004-03-12 10:27:54.000000000 +0100
@@ -9,13 +9,15 @@
O_TARGET := mm.o
-export-objs := shmem.o filemap.o memory.o page_alloc.o
+export-objs := shmem.o filemap.o memory.o page_alloc.o oom_notifier.o
obj-y := memory.o mmap.o filemap.o mprotect.o mlock.o mremap.o \
vmalloc.o slab.o bootmem.o swap.o vmscan.o page_io.o \
- page_alloc.o swap_state.o swapfile.o numa.o oom_kill.o \
- shmem.o
+ page_alloc.o swap_state.o swapfile.o numa.o \
+ shmem.o oom_notifier.o
obj-$(CONFIG_HIGHMEM) += highmem.o
+obj-$(CONFIG_OOM_KILL) += oom_kill.o
+
include $(TOPDIR)/Rules.make
diff -Naur linux-2.4.25/mm/oom_kill.c linux-2.4.25-moom/mm/oom_kill.c
--- linux-2.4.25/mm/oom_kill.c 2004-03-12 09:44:34.000000000 +0100
+++ linux-2.4.25-moom/mm/oom_kill.c 2004-03-12 10:27:54.000000000 +0100
@@ -13,16 +13,28 @@
* machine) this file will double as a 'coding guide' and a signpost
* for newbie kernel hackers. It features several pointers to major
* kernel subsystems and hints as to where to find out what things do.
+ *
+ * Modularized by using notifies by --rustyl <rusty@linux.intel.com>
+ * Final modularization (C) 2003,2004 Tvrtko A. Ursulin (tvrtko.ursulin@zg.htnet.hr)
*/
+#include <linux/kernel.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/swap.h>
#include <linux/swapctl.h>
#include <linux/timex.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/notifier.h>
+#include <linux/oom_notifier.h>
/* #define DEBUG */
+#ifndef DEBUG
+#define dbg(format, arg...)
+#endif
+
/**
* int_sqrt - oom_kill.c internal function, rough approximation to sqrt
* @x: integer of which to calculate the sqrt
@@ -105,10 +117,7 @@
*/
if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_RAWIO))
points /= 4;
-#ifdef DEBUG
- printk(KERN_DEBUG "OOMkill: task %d (%s) got %d points\n",
- p->pid, p->comm, points);
-#endif
+ dbg("Task %d (%s) got %d points", p->pid, p->comm, points);
return points;
}
@@ -143,7 +152,7 @@
*/
void oom_kill_task(struct task_struct *p)
{
- printk(KERN_ERR "Out of Memory: Killed process %d (%s).\n", p->pid, p->comm);
+ error("Killed process %d (%s).", p->pid, p->comm);
/*
* We give our sacrificial lamb high priority and access to
@@ -199,7 +208,7 @@
/**
* out_of_memory - is the system out of memory?
*/
-void out_of_memory(void)
+void out_of_memory_killer(void)
{
/*
* oom_lock protects out_of_memory()'s static variables.
@@ -212,7 +221,7 @@
/*
* Enough swap space left? Not OOM.
*/
- if (nr_swap_pages > 0)
+ if ( get_nr_swap_pages() > 0)
return;
spin_lock(&oom_lock);
@@ -270,3 +279,36 @@
out_unlock:
spin_unlock(&oom_lock);
}
+
+static int oom_notify(struct notifier_block * s, unsigned long v, void * d)
+{
+ out_of_memory_killer();
+ return 0;
+}
+
+static struct notifier_block oom_nb = {
+ .notifier_call = oom_notify,
+};
+
+static int __init init_oom_kill(void)
+{
+ int err;
+
+ info("Installing oom_kill handler");
+ err = register_oom_notifier(&oom_nb);
+ if (err)
+ error("Error installing oom_kill handler!");
+
+ return err;
+}
+
+static void __exit exit_oom_kill(void)
+{
+ unregister_oom_notifier(&oom_nb);
+ info("Unregistered oom_kill handler");
+}
+
+MODULE_LICENSE("GPL");
+
+module_init(init_oom_kill);
+module_exit(exit_oom_kill);
diff -Naur linux-2.4.25/mm/oom_notifier.c linux-2.4.25-moom/mm/oom_notifier.c
--- linux-2.4.25/mm/oom_notifier.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.25-moom/mm/oom_notifier.c 2004-03-12 10:27:54.000000000 +0100
@@ -0,0 +1,44 @@
+/*
+ * linux/mm/oom_notifier.c
+ *
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/notifier.h>
+#include <asm/semaphore.h>
+
+static DECLARE_MUTEX(notify_mutex);
+static struct notifier_block * oom_notify_list = 0;
+
+int register_oom_notifier(struct notifier_block * nb)
+{
+ int err;
+
+ down(¬ify_mutex);
+ err = notifier_chain_register(&oom_notify_list, nb);
+ up(¬ify_mutex);
+
+ return err;
+}
+EXPORT_SYMBOL(register_oom_notifier);
+
+int unregister_oom_notifier(struct notifier_block * nb)
+{
+ int err;
+
+ down(¬ify_mutex);
+ err = notifier_chain_unregister(&oom_notify_list, nb);
+ up(¬ify_mutex);
+
+ return err;
+}
+EXPORT_SYMBOL(unregister_oom_notifier);
+
+void out_of_memory(void)
+{
+ down(¬ify_mutex);
+ notifier_call_chain(&oom_notify_list, OUT_OF_MEMORY, 0);
+ up(¬ify_mutex);
+}
+EXPORT_SYMBOL(out_of_memory);
diff -Naur linux-2.4.25/mm/page_alloc.c linux-2.4.25-moom/mm/page_alloc.c
--- linux-2.4.25/mm/page_alloc.c 2004-03-12 09:44:34.000000000 +0100
+++ linux-2.4.25-moom/mm/page_alloc.c 2004-03-12 10:27:54.000000000 +0100
@@ -495,6 +495,15 @@
}
/*
+ * Total amount of swap pages
+ */
+int get_nr_swap_pages (void)
+{
+ return nr_swap_pages;
+}
+EXPORT_SYMBOL(get_nr_swap_pages);
+
+/*
* Amount of free RAM allocatable as buffer memory:
*/
unsigned int nr_free_buffer_pages (void)
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: PATCH: modular out of memory additional modules patch for 2.4.25
2004-03-12 9:56 PATCH: modular out of memory base patch for 2.4.25 Tvrtko A. Uršulin
@ 2004-03-12 10:06 ` Tvrtko A. Uršulin
0 siblings, 0 replies; 2+ messages in thread
From: Tvrtko A. Uršulin @ 2004-03-12 10:06 UTC (permalink / raw)
To: linux-kernel; +Cc: Marcelo Tosatti
[-- Attachment #1: Type: text/plain, Size: 115 bytes --]
These are two additional modules for OOM, oom-panic and oom-parent-kill.
Details can be found in Configure.help.
[-- Attachment #2: moom-2.4.25-modules.patch --]
[-- Type: text/x-diff, Size: 24197 bytes --]
diff -Naur linux-2.4.25/arch/alpha/defconfig linux-2.4.25-moom/arch/alpha/defconfig
--- linux-2.4.25/arch/alpha/defconfig 2004-03-12 10:50:38.682091408 +0100
+++ linux-2.4.25-moom/arch/alpha/defconfig 2004-03-12 10:41:38.000000000 +0100
@@ -75,6 +75,8 @@
# CONFIG_BINFMT_MISC is not set
# CONFIG_BINFMT_EM86 is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
diff -Naur linux-2.4.25/arch/arm/defconfig linux-2.4.25-moom/arch/arm/defconfig
--- linux-2.4.25/arch/arm/defconfig 2004-03-12 10:50:38.701088520 +0100
+++ linux-2.4.25-moom/arch/arm/defconfig 2004-03-12 10:41:38.000000000 +0100
@@ -94,6 +94,8 @@
CONFIG_LEDS_CPU=y
CONFIG_ALIGNMENT_TRAP=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/cris/defconfig linux-2.4.25-moom/arch/cris/defconfig
--- linux-2.4.25/arch/cris/defconfig 2004-03-12 10:50:38.718085936 +0100
+++ linux-2.4.25-moom/arch/cris/defconfig 2004-03-12 10:41:38.000000000 +0100
@@ -21,6 +21,8 @@
# CONFIG_ETRAX_KGDB is not set
# CONFIG_ETRAX_WATCHDOG is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Hardware setup
diff -Naur linux-2.4.25/arch/i386/defconfig linux-2.4.25-moom/arch/i386/defconfig
--- linux-2.4.25/arch/i386/defconfig 2004-03-12 10:50:38.736083200 +0100
+++ linux-2.4.25-moom/arch/i386/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -84,6 +84,8 @@
# CONFIG_MCA is not set
CONFIG_HOTPLUG=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# PCMCIA/CardBus support
diff -Naur linux-2.4.25/arch/ia64/defconfig linux-2.4.25-moom/arch/ia64/defconfig
--- linux-2.4.25/arch/ia64/defconfig 2004-03-12 10:50:38.758079856 +0100
+++ linux-2.4.25-moom/arch/ia64/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -66,6 +66,8 @@
CONFIG_ACPI_INTERPRETER=y
CONFIG_ACPI_KERNEL_CONFIG=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# ACPI Support
diff -Naur linux-2.4.25/arch/m68k/defconfig linux-2.4.25-moom/arch/m68k/defconfig
--- linux-2.4.25/arch/m68k/defconfig 2004-03-12 10:50:38.764078944 +0100
+++ linux-2.4.25-moom/arch/m68k/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -54,6 +54,8 @@
# CONFIG_PARPORT is not set
# CONFIG_PRINTER is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Loadable module support
diff -Naur linux-2.4.25/arch/mips/defconfig linux-2.4.25-moom/arch/mips/defconfig
--- linux-2.4.25/arch/mips/defconfig 2004-03-12 10:50:38.778076816 +0100
+++ linux-2.4.25-moom/arch/mips/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -145,6 +145,8 @@
# CONFIG_BINFMT_ELF32 is not set
# CONFIG_BINFMT_MISC is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Memory Technology Devices (MTD)
diff -Naur linux-2.4.25/arch/mips64/defconfig linux-2.4.25-moom/arch/mips64/defconfig
--- linux-2.4.25/arch/mips64/defconfig 2004-03-12 10:50:38.787075448 +0100
+++ linux-2.4.25-moom/arch/mips64/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -143,6 +143,8 @@
CONFIG_BINFMT_ELF32=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Memory Technology Devices (MTD)
diff -Naur linux-2.4.25/arch/parisc/defconfig linux-2.4.25-moom/arch/parisc/defconfig
--- linux-2.4.25/arch/parisc/defconfig 2004-03-12 10:50:38.801073320 +0100
+++ linux-2.4.25-moom/arch/parisc/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -46,6 +46,8 @@
CONFIG_SUPERIO=y
CONFIG_PCI_NAMES=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# General setup
diff -Naur linux-2.4.25/arch/ppc/defconfig linux-2.4.25-moom/arch/ppc/defconfig
--- linux-2.4.25/arch/ppc/defconfig 2004-03-12 10:50:38.814071344 +0100
+++ linux-2.4.25-moom/arch/ppc/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -63,6 +63,8 @@
CONFIG_PCI_NAMES=y
CONFIG_HOTPLUG=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# PCMCIA/CardBus support
diff -Naur linux-2.4.25/arch/ppc64/defconfig linux-2.4.25-moom/arch/ppc64/defconfig
--- linux-2.4.25/arch/ppc64/defconfig 2004-03-12 10:50:38.830068912 +0100
+++ linux-2.4.25-moom/arch/ppc64/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -61,6 +61,8 @@
CONFIG_PCI_NAMES=y
# CONFIG_HOTPLUG is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/s390/defconfig linux-2.4.25-moom/arch/s390/defconfig
--- linux-2.4.25/arch/s390/defconfig 2004-03-12 10:50:38.834068304 +0100
+++ linux-2.4.25-moom/arch/s390/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -51,6 +51,8 @@
CONFIG_PFAULT=y
# CONFIG_SHARED_KERNEL is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Block device drivers
diff -Naur linux-2.4.25/arch/s390x/defconfig linux-2.4.25-moom/arch/s390x/defconfig
--- linux-2.4.25/arch/s390x/defconfig 2004-03-12 10:50:38.843066936 +0100
+++ linux-2.4.25-moom/arch/s390x/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -52,6 +52,8 @@
CONFIG_PFAULT=y
# CONFIG_SHARED_KERNEL is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Block device drivers
diff -Naur linux-2.4.25/arch/sh/defconfig linux-2.4.25-moom/arch/sh/defconfig
--- linux-2.4.25/arch/sh/defconfig 2004-03-12 10:50:38.860064352 +0100
+++ linux-2.4.25-moom/arch/sh/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -50,6 +50,8 @@
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/sh64/defconfig linux-2.4.25-moom/arch/sh64/defconfig
--- linux-2.4.25/arch/sh64/defconfig 2004-03-12 10:50:38.870062832 +0100
+++ linux-2.4.25-moom/arch/sh64/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -85,6 +85,8 @@
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_MISC is not set
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Block devices
diff -Naur linux-2.4.25/arch/sparc/defconfig linux-2.4.25-moom/arch/sparc/defconfig
--- linux-2.4.25/arch/sparc/defconfig 2004-03-12 10:50:38.880061312 +0100
+++ linux-2.4.25-moom/arch/sparc/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -54,6 +54,8 @@
CONFIG_BINFMT_MISC=m
CONFIG_SUNOS_EMUL=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/sparc64/defconfig linux-2.4.25-moom/arch/sparc64/defconfig
--- linux-2.4.25/arch/sparc64/defconfig 2004-03-12 10:50:38.893059336 +0100
+++ linux-2.4.25-moom/arch/sparc64/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -60,6 +60,8 @@
# CONFIG_SUNOS_EMUL is not set
CONFIG_SOLARIS_EMUL=m
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# Parallel port support
diff -Naur linux-2.4.25/arch/x86_64/defconfig linux-2.4.25-moom/arch/x86_64/defconfig
--- linux-2.4.25/arch/x86_64/defconfig 2004-03-12 10:50:38.908057056 +0100
+++ linux-2.4.25-moom/arch/x86_64/defconfig 2004-03-12 10:41:39.000000000 +0100
@@ -69,6 +69,8 @@
CONFIG_PM=y
CONFIG_IA32_EMULATION=y
# CONFIG_OOM_KILL is not set
+# CONFIG_OOM_KPPID is not set
+# CONFIG_OOM_PANIC is not set
#
# ACPI Support
diff -Naur linux-2.4.25/Documentation/Configure.help linux-2.4.25-moom/Documentation/Configure.help
--- linux-2.4.25/Documentation/Configure.help 2004-03-12 10:50:38.942051888 +0100
+++ linux-2.4.25-moom/Documentation/Configure.help 2004-03-12 10:41:38.000000000 +0100
@@ -441,6 +441,29 @@
If unsure, say N.
+Panic on out of memory conditions
+CONFIG_OOM_PANIC
+ This option enables panic() to be called when a system is out of
+ memory. This feature along with /proc/sys/kernel/panic allows a
+ different behavior on out-of-memory conditions when the standard
+ behavior (killing processes in an attempt to recover) does not
+ make sense.
+
+ If unsure, say N.
+
+Kill parents that keep producing bad children
+CONFIG_OOM_KPPID
+ This option enables an out-of-memory handler that not only attempts
+ to kill bad processes to free up memory, but also kills parents
+ that repeatedly produce bad children.
+
+ Two tunables, oom_parent_max and oom_parent_expire, will be added
+ and to /proc/sys/vm/ to control how many children a parent is
+ allowed to have terminated, and how long between terminated children
+ before a parent is forgiven.
+
+ If unsure, say N.
+
iSeries Virtual I/O Disk Support
CONFIG_VIODASD
If you are running on an iSeries system and you want to use
diff -Naur linux-2.4.25/mm/Config.in linux-2.4.25-moom/mm/Config.in
--- linux-2.4.25/mm/Config.in 2004-03-12 10:50:38.948050976 +0100
+++ linux-2.4.25-moom/mm/Config.in 2004-03-12 10:41:38.000000000 +0100
@@ -2,5 +2,33 @@
comment 'Out of memory killer'
tristate 'Classic' CONFIG_OOM_KILL
+if [ "$CONFIG_OOM_KILL" = "y" ]; then
+ if [ "$CONFIG_OOM_PANIC" = "y" ]; then
+ define_tristate CONFIG_OOM_PANIC m
+ fi
+ if [ "$CONFIG_OOM_KPPID" = "y" ]; then
+ define_tristate CONFIG_OOM_KPPID m
+ fi
+fi
+
+tristate 'Kill parents' CONFIG_OOM_KPPID
+if [ "$CONFIG_OOM_KPPID" = "y" ]; then
+ if [ "$CONFIG_OOM_PANIC" = "y" ]; then
+ define_tristate CONFIG_OOM_PANIC m
+ fi
+ if [ "$CONFIG_OOM_KILL" = "y" ]; then
+ define_tristate CONFIG_OOM_KILL m
+ fi
+fi
+
+tristate 'Panic' CONFIG_OOM_PANIC
+if [ "$CONFIG_OOM_PANIC" = "y" ]; then
+ if [ "$CONFIG_OOM_KILL" = "y" ]; then
+ define_tristate CONFIG_OOM_KILL m
+ fi
+ if [ "$CONFIG_OOM_KPPID" = "y" ]; then
+ define_tristate CONFIG_OOM_KPPID m
+ fi
+fi
endmenu
diff -Naur linux-2.4.25/mm/Makefile linux-2.4.25-moom/mm/Makefile
--- linux-2.4.25/mm/Makefile 2004-03-12 10:50:38.000000000 +0100
+++ linux-2.4.25-moom/mm/Makefile 2004-03-12 10:41:38.000000000 +0100
@@ -19,5 +19,7 @@
obj-$(CONFIG_HIGHMEM) += highmem.o
obj-$(CONFIG_OOM_KILL) += oom_kill.o
+obj-$(CONFIG_OOM_KPPID) += oom_kill_parent.o
+obj-$(CONFIG_OOM_PANIC) += oom_panic.o
include $(TOPDIR)/Rules.make
diff -Naur linux-2.4.25/mm/oom_kill.c linux-2.4.25-moom/mm/oom_kill.c
--- linux-2.4.25/mm/oom_kill.c 2004-03-12 10:50:38.000000000 +0100
+++ linux-2.4.25-moom/mm/oom_kill.c 2004-03-12 10:41:38.000000000 +0100
@@ -15,7 +15,7 @@
* kernel subsystems and hints as to where to find out what things do.
*
* Modularized by using notifies by --rustyl <rusty@linux.intel.com>
- * Final modularization (C) 2003,2004 Tvrtko A. Ursulin (tvrtko.ursulin@zg.htnet.hr)
+ * Final modularization (C) 2003 Tvrtko A. Ursulin (tvrtko.ursulin@zg.htnet.hr)
*/
#include <linux/kernel.h>
diff -Naur linux-2.4.25/mm/oom_kill_parent.c linux-2.4.25-moom/mm/oom_kill_parent.c
--- linux-2.4.25/mm/oom_kill_parent.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.25-moom/mm/oom_kill_parent.c 2004-03-12 10:41:38.000000000 +0100
@@ -0,0 +1,458 @@
+/*
+ * linux/mm/oom_kill_parent.c
+ *
+ * Copyright (C) 1998,2000 Rik van Riel
+ * Thanks go out to Claus Fischer for some serious inspiration and
+ * for goading me into coding this file...
+ *
+ * The routines in this file are used to kill a process when
+ * we're seriously out of memory. This gets called from kswapd()
+ * in linux/mm/vmscan.c when we really run out of memory.
+ *
+ * Since we won't call these routines often (on a well-configured
+ * machine) this file will double as a 'coding guide' and a signpost
+ * for newbie kernel hackers. It features several pointers to major
+ * kernel subsystems and hints as to where to find out what things do.
+ *
+ * Copyright (C) 2003 Tvrtko A. Ursulin (tvrtko.ursulin@zg.htnet.hr)
+ * Extended to keep per parent process statistics and to kill parent processes
+ * which keep producing bad children.
+ * Modularized by using notifies by --rustyl <rusty@linux.intel.com>
+ * Final modularization (C) 2003 Tvrtko A. Ursulin (tvrtko.ursulin@zg.htnet.hr)
+ *
+*/
+
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/sched.h>
+#include <linux/swap.h>
+#include <linux/swapctl.h>
+#include <linux/timex.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/sysctl.h>
+#include <linux/notifier.h>
+#include <linux/oom_notifier.h>
+
+#define OOM_HISTORY_SIZE 32
+
+#define OOM_DEFAULT_VALUE (10)
+#define OOM_DEFAULT_EXPIRE (5*60)
+
+static unsigned int oom_parent_max = OOM_DEFAULT_VALUE;
+static unsigned int oom_parent_expire = OOM_DEFAULT_EXPIRE;
+
+static struct ctl_table_header *oom_root_table_header;
+
+static ctl_table oom_table[] = {
+ {1, "oom_parent_max",
+ &oom_parent_max, sizeof(int), 0644, NULL, &proc_dointvec},
+ {2, "oom_parent_expire",
+ &oom_parent_expire, sizeof(int), 0644, NULL, &proc_dointvec},
+ { 0 }
+};
+
+static ctl_table oom_dir_table[] = {
+ {VM_OOM, "oom", NULL, 0, 0555, oom_table},
+ {0}
+};
+
+static ctl_table oom_root_table[] = {
+ {CTL_VM, "vm", NULL, 0, 0555, oom_dir_table},
+ {0}
+};
+
+struct parent_record
+{
+ pid_t pid;
+ struct task_struct *task;
+ unsigned long last_kill;
+ unsigned long value;
+};
+
+static struct parent_record blacklist[OOM_HISTORY_SIZE];
+
+/* #define DEBUG */
+
+#ifndef DEBUG
+#define dbg(format, arg...)
+#endif
+
+void oom_kill_task(struct task_struct *p);
+
+static void process_blacklist(void)
+{
+ struct parent_record *p;
+ struct task_struct *task;
+
+ unsigned int i;
+
+ for ( i = 0; i < OOM_HISTORY_SIZE; i++ ) {
+ p = &blacklist[i];
+ if ( p->pid ) {
+ task = find_task_by_pid(p->pid);
+ if ( task != p->task ) {
+ dbg("Parent %d (%p) removed from list - does not exist",p->pid, p->task);
+ p->pid = 0;
+ }
+ else if ( abs(jiffies - p->last_kill) >= (oom_parent_expire*HZ) ) {
+ dbg("Parent %d (%p) removed from list - expired",p->pid, p->task);
+ p->pid = 0;
+ }
+ else if ( p->value >= oom_parent_max ) {
+ error("Will kill parent process %d (%s)",p->pid,p->task->comm);
+ p->pid = 0;
+ oom_kill_task(p->task);
+ }
+ }
+ }
+}
+
+static struct parent_record *find_in_blacklist(struct task_struct *task)
+{
+ struct parent_record *p = NULL;
+ unsigned int i;
+
+ if ( !task )
+ return NULL;
+
+ for ( i = 0; i < OOM_HISTORY_SIZE; i++ ) {
+ p = &blacklist[i];
+ if ( p->pid ) {
+ if ( (task->pid == p->pid) && (task == p->task) )
+ return p;
+ }
+ }
+
+ return NULL;
+}
+
+static struct parent_record *blacklist_parent(struct task_struct *task)
+{
+ struct parent_record *p;
+ unsigned int i;
+
+ if ( !task )
+ return NULL;
+
+ for ( i = 0; i < OOM_HISTORY_SIZE; i++ ) {
+ p = &blacklist[i];
+ if ( !p->pid )
+ break;
+ }
+
+ if ( p->pid )
+ return NULL;
+
+ p->pid= task->pid;
+ p->task = task;
+ p->last_kill = jiffies;
+ p->value = 0;
+
+ return p;
+}
+
+/**
+ * int_sqrt - oom_kill.c internal function, rough approximation to sqrt
+ * @x: integer of which to calculate the sqrt
+ *
+ * A very rough approximation to the sqrt() function.
+ */
+static unsigned int int_sqrt(unsigned int x)
+{
+ unsigned int out = x;
+ while (x & ~(unsigned int)1) x >>=2, out >>=1;
+ if (x) out -= out >> 2;
+ return (out ? out : 1);
+}
+
+/**
+ * oom_badness - calculate a numeric value for how bad this task has been
+ * @p: task struct of which task we should calculate
+ *
+ * The formula used is relatively simple and documented inline in the
+ * function. The main rationale is that we want to select a good task
+ * to kill when we run out of memory.
+ *
+ * Good in this context means that:
+ * 1) we lose the minimum amount of work done
+ * 2) we recover a large amount of memory
+ * 3) we don't kill anything innocent of eating tons of memory
+ * 4) we want to kill the minimum amount of processes (one)
+ * 5) we try to kill the process the user expects us to kill, this
+ * algorithm has been meticulously tuned to meet the priniciple
+ * of least surprise ... (be careful when you change it)
+ */
+
+static int badness(struct task_struct *p)
+{
+ int points, cpu_time, run_time;
+
+ if (!p->mm)
+ return 0;
+
+ if (p->flags & PF_MEMDIE)
+ return 0;
+
+ /*
+ * The memory size of the process is the basis for the badness.
+ */
+ points = p->mm->total_vm;
+
+ /*
+ * CPU time is in seconds and run time is in minutes. There is no
+ * particular reason for this other than that it turned out to work
+ * very well in practice. This is not safe against jiffie wraps
+ * but we don't care _that_ much...
+ */
+ cpu_time = (p->times.tms_utime + p->times.tms_stime) >> (SHIFT_HZ + 3);
+ run_time = (jiffies - p->start_time) >> (SHIFT_HZ + 10);
+
+ points /= int_sqrt(cpu_time);
+ points /= int_sqrt(int_sqrt(run_time));
+
+ /*
+ * Niced processes are most likely less important, so double
+ * their badness points.
+ */
+ if (p->nice > 0)
+ points *= 2;
+
+ /*
+ * Superuser processes are usually more important, so we make it
+ * less likely that we kill those.
+ */
+ if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_ADMIN) ||
+ p->uid == 0 || p->euid == 0)
+ points /= 4;
+
+ /*
+ * We don't want to kill a process with direct hardware access.
+ * Not only could that mess up the hardware, but usually users
+ * tend to only have this flag set on applications they think
+ * of as important.
+ */
+ if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_RAWIO))
+ points /= 4;
+ dbg("Task %d (%s) got %d points",p->pid, p->comm, points);
+ return points;
+}
+
+/*
+ * Simple selection loop. We chose the process with the highest
+ * number of 'points'. We expect the caller will lock the tasklist.
+ *
+ * (not docbooked, we don't want this one cluttering up the manual)
+ */
+static struct task_struct * select_bad_process(void)
+{
+ int maxpoints = 0;
+ struct task_struct *p = NULL;
+ struct task_struct *chosen = NULL;
+
+ for_each_task(p) {
+ if (p->pid) {
+ int points = badness(p);
+ if (points > maxpoints) {
+ chosen = p;
+ maxpoints = points;
+ }
+ }
+ }
+ return chosen;
+}
+
+/**
+ * We must be careful though to never send SIGKILL a process with
+ * CAP_SYS_RAW_IO set, send SIGTERM instead (but it's unlikely that
+ * we select a process with CAP_SYS_RAW_IO set).
+ */
+void oom_kill_task(struct task_struct *p)
+{
+ error("Killed process %d (%s).", p->pid, p->comm);
+
+ /*
+ * We give our sacrificial lamb high priority and access to
+ * all the memory it needs. That way it should be able to
+ * exit() and clear out its resources quickly...
+ */
+ p->counter = 5 * HZ;
+ p->flags |= PF_MEMALLOC | PF_MEMDIE;
+
+ /* This process has hardware access, be more careful. */
+ if (cap_t(p->cap_effective) & CAP_TO_MASK(CAP_SYS_RAWIO)) {
+ force_sig(SIGTERM, p);
+ } else {
+ force_sig(SIGKILL, p);
+ }
+}
+
+/**
+ * oom_kill - kill the "best" process when we run out of memory
+ *
+ * If we run out of memory, we have the choice between either
+ * killing a random task (bad), letting the system crash (worse)
+ * OR try to be smart about which process to kill. Note that we
+ * don't have to be perfect here, we just have to be good.
+ */
+static void oom_kill(void)
+{
+ struct task_struct *p, *q;
+ struct parent_record *parent;
+
+ read_lock(&tasklist_lock);
+ p = select_bad_process();
+
+ /* Found nothing?!?! Either we hang forever, or we panic. */
+ if (p == NULL)
+ panic("Out of memory and no killable processes...\n");
+
+ /* Add or update statistics for a parent processs */
+ if ( p->p_opptr->pid > 1 ) {
+ parent = find_in_blacklist(p->p_opptr);
+ if ( !parent ) {
+ dbg("Adding parent (%d) to black list because of %d",p->parent->pid, p->pid);
+ parent = blacklist_parent(p->p_opptr);
+ }
+ else {
+ dbg("Parent (%d) black list value increased to %ld",parent->pid, parent->value);
+ parent->value++;
+ parent->last_kill = jiffies;
+ }
+ }
+
+ /* kill all processes that share the ->mm (i.e. all threads) */
+ for_each_task(q) {
+ if (q->mm == p->mm)
+ oom_kill_task(q);
+ }
+ read_unlock(&tasklist_lock);
+
+ /*
+ * Make kswapd go out of the way, so "p" has a good chance of
+ * killing itself before someone else gets the chance to ask
+ * for more memory.
+ */
+ yield();
+ return;
+}
+
+/**
+ * out_of_memory - is the system out of memory?
+ */
+void out_of_memory_killer(void)
+{
+ static spinlock_t oom_lock = SPIN_LOCK_UNLOCKED;
+ static unsigned long first, last, count, lastkill;
+ unsigned long now, since;
+
+ /*
+ * Process kill history...
+ */
+ process_blacklist();
+
+ /*
+ * Enough swap space left? Not OOM.
+ */
+ if ( get_nr_swap_pages() > 0)
+ return;
+
+ spin_lock(&oom_lock);
+ now = jiffies;
+ since = now - last;
+ last = now;
+
+ /*
+ * If it's been a long time since last failure,
+ * we're not oom.
+ */
+ last = now;
+ if (since > 5*HZ)
+ goto reset;
+
+ /*
+ * If we haven't tried for at least one second,
+ * we're not really oom.
+ */
+ since = now - first;
+ if (since < HZ)
+ goto out_unlock;
+
+ /*
+ * If we have gotten only a few failures,
+ * we're not really oom.
+ */
+ if (++count < 10)
+ goto out_unlock;
+
+ /*
+ * If we just killed a process, wait a while
+ * to give that task a chance to exit. This
+ * avoids killing multiple processes needlessly.
+ */
+ since = now - lastkill;
+ if (since < HZ*5)
+ goto out_unlock;
+
+ /*
+ * Ok, really out of memory. Kill something.
+ */
+ lastkill = now;
+
+ /* oom_kill() can sleep */
+ spin_unlock(&oom_lock);
+ oom_kill();
+ spin_lock(&oom_lock);
+
+reset:
+ first = now;
+ count = 0;
+
+out_unlock:
+ spin_unlock(&oom_lock);
+}
+
+static int oom_notify(struct notifier_block * s, unsigned long v, void * d)
+{
+ out_of_memory_killer();
+ return 0;
+}
+
+static struct notifier_block oom_nb = {
+ .notifier_call = oom_notify,
+};
+
+static int __init init_oom_kill_parent(void)
+{
+ int err;
+
+ info("Installing oom_kill_parent handler");
+
+ err = register_oom_notifier(&oom_nb);
+ if (err)
+ error("Error installing oom_kill_parent handler!");
+
+ oom_root_table_header = register_sysctl_table(oom_root_table, 1);
+ if (!oom_root_table_header)
+ error("Error installing oom sysctl table!");
+
+ return err;
+}
+
+static void __exit exit_oom_kill_parent(void)
+{
+ if (oom_root_table_header)
+ unregister_sysctl_table(oom_root_table_header);
+
+ unregister_oom_notifier(&oom_nb);
+ info("Unregistered oom_kill_parent handler");
+}
+
+MODULE_LICENSE("GPL");
+MODULE_PARM(oom_parent_max, "i");
+MODULE_PARM_DESC(oom_parent_max, "Maximum number of bad childs parent can produce" );
+MODULE_PARM(oom_parent_expire, "i");
+MODULE_PARM_DESC(oom_parent_expire, "Time period in seconds after which parents past sins are forgotten" );
+
+module_init(init_oom_kill_parent);
+module_exit(exit_oom_kill_parent);
diff -Naur linux-2.4.25/mm/oom_panic.c linux-2.4.25-moom/mm/oom_panic.c
--- linux-2.4.25/mm/oom_panic.c 1970-01-01 01:00:00.000000000 +0100
+++ linux-2.4.25-moom/mm/oom_panic.c 2004-03-12 10:41:38.000000000 +0100
@@ -0,0 +1,50 @@
+/*
+ * linux/mm/oom_panic.c
+ *
+ * This is a very simple component that will cause the kernel to
+ * panic on out-of-memory conditions. The behavior of panic can be
+ * further controlled with /proc/sys/kernel/panic.
+ *
+ * --rustyl <rusty@linux.intel.com>
+ *
+ * Final modularization (C) 2003 Tvrtko A. Ursulin (tvrtko.ursulin@zg.htnet.hr)
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/notifier.h>
+#include <linux/oom_notifier.h>
+
+static int oom_notify(struct notifier_block * s, unsigned long v, void * d)
+{
+ panic("Out-Of-Memory");
+ return 0;
+}
+
+static struct notifier_block oom_nb = {
+ .notifier_call = oom_notify,
+};
+
+static int __init init_oom_panic(void)
+{
+ int err;
+
+ info("Installing oom_panic handler");
+ err = register_oom_notifier(&oom_nb);
+ if (err)
+ error("Error installing oom_panic handler!");
+
+ return err;
+}
+
+static void __exit exit_oom_panic(void)
+{
+ unregister_oom_notifier(&oom_nb);
+}
+
+MODULE_LICENSE("GPL");
+
+module_init(init_oom_panic);
+module_exit(exit_oom_panic);
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-03-12 10:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-03-12 9:56 PATCH: modular out of memory base patch for 2.4.25 Tvrtko A. Uršulin
2004-03-12 10:06 ` PATCH: modular out of memory additional modules " Tvrtko A. Uršulin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®