x86: corruption-check: fix some style issues
PATCH 1/4 x86: corruption-check: fix some style issues
From: Arjan van de Ven <[email protected]>
Date: Sun, 5 Oct 2008 11:08:10 -0700
Subject: [PATCH] x86: corruption-check: fix some style issues
Before moving the code to it's own file, fix some style issues in the corruption check code.
--- arch/x86/kernel/setup.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
arch/x86/kernel/setup.c +5 -4
@@ -656,7 +656,7 @@ static void __init setup_bios_corruption_check(void) corruption_check_size =round_up (corruption_check_size,PAGE_SIZE ); -while (addr < corruption_check_size && num_scan_areas <MAX_SCAN_AREAS ) { +while (addr < corruption_check_size && num_scan_areas <MAX_SCAN_AREAS ) {u64 size; addr =find_e820_area_size (addr, &size,PAGE_SIZE );
@@ -695,11 +695,11 @@ void check_for_bios_corruption(void)if (!memory_corruption_check)return ; -for (i =0 ; i < num_scan_areas; i++) { +for (i =0 ; i < num_scan_areas; i++) {unsigned long *addr =__va (scan_areas[i].addr);unsigned long size = scan_areas[i].size; -for (; size; addr++, size -=sizeof (unsigned long )) { +for (; size; addr++, size -=sizeof (unsigned long )) {if (!*addr)continue ; printk(KERN_ERR "Corrupted low memory at %p (%lx phys) = %08lx\n",
@@ -715,7 +715,8 @@ void check_for_bios_corruption(void)static void periodic_check_for_corruption (unsigned long data) {check_for_bios_corruption (); -mod_timer (&periodic_check_timer,round_jiffies (jiffies + corruption_check_period*HZ )); +mod_timer (&periodic_check_timer, +round_jiffies (jiffies + corruption_check_period*HZ )); }void start_periodic_check_for_corruption (void )
Signature · 8 lines
1.5.5.1 -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org
PATCH 2/4 x86: corruption check: move the corruption checks into their own file
From: Arjan van de Ven <[email protected]>
Date: Sun, 5 Oct 2008 11:33:42 -0700
Subject: [PATCH] x86: corruption check: move the corruption checks into their own file
The corruption check code is rather sizable and it's likely to grow over time when we add checks for more types of corruptions (there's a few candidates in kerneloops.org that I want to add checks for)... so lets move it to its own file
--- arch/x86/kernel/Makefile | 1 + arch/x86/kernel/check.c | 158 ++++++++++++++++++++++++++++++++++++++++++++++ arch/x86/kernel/setup.c | 152 -------------------------------------------- include/asm-x86/setup.h | 4 + 4 files changed, 163 insertions(+), 152 deletions(-) create mode 100644 arch/x86/kernel/check.c
arch/x86/kernel/Makefile +1 -0
@@ -36,6 +36,7 @@ obj-y += bootflag.o e820.o obj-y += pci-dma.o quirks.o i8237.o topology.o kdebugfs.o obj-y += alternative.o i8253.o pci-nommu.o obj-y += tsc.o io_delay.o rtc.o +obj-y += check.o obj-$(CONFIG_X86_TRAMPOLINE) += trampoline.o obj-y += process.o
arch/x86/kernel/check.c new file +158 -0
158 lines not on this page · raw message
arch/x86/kernel/setup.c +0 -152
158 lines not on this page · raw message
include/asm-x86/setup.h +4 -0
@@ -8,6 +8,10 @@/* Interrupt control for vSMPowered x86_64 systems */ void vsmp_init (void ); + +void setup_bios_corruption_check (void ); + +#ifdef CONFIG_X86_VISWS extern void visws_early_detect (void );extern int is_visws_box (void );
Signature · 7 lines
1.5.5.1 -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org
PATCH 3/4 x86: corruption check: run the corruption checks from a work queue
In reply to Arjan van de VenFrom: Arjan van de Ven <[email protected]>
Date: Mon, 22 Sep 2008 13:42:15 -0700
Subject: [PATCH] x86: corruption check: run the corruption checks from a work queue
the periodic corruption checks are better off run from a work queue; there's nothing time critical about them and this way the amount of interrupt-context work is reduced.
--- arch/x86/kernel/check.c | 27 +++++++++++++++++---------- arch/x86/mm/init_32.c | 2 -- arch/x86/mm/init_64.c | 2 -- include/linux/kernel.h | 5 ----- 4 files changed, 17 insertions(+), 19 deletions(-)
arch/x86/kernel/check.c +17 -10
@@ -1,6 +1,7 @@#include <linux/module.h> #include <linux/sched.h> - +#include <linux/kthread.h> +#include <linux/workqueue.h> #include <asm/e820.h> #include <asm/proto.h>
@@ -108,13 +109,14 @@ void __init setup_bios_corruption_check(void)update_e820 (); } -static struct timer_list periodic_check_timer;void check_for_bios_corruption (void ) {int i;int corruption =0 ; +printk ("dot\n" ); +if (!memory_corruption_check)return ;
@@ -135,24 +137,29 @@ void check_for_bios_corruption(void)WARN (corruption,KERN_ERR "Memory corruption detected in low memory\n" ); } -static void periodic_check_for_corruption (unsigned long data) +static void check_corruption (struct work_struct *dummy); +static DECLARE_DELAYED_WORK(bios_check_work, check_corruption); + +static void check_corruption (struct work_struct *dummy) {check_for_bios_corruption (); -mod_timer (&periodic_check_timer, -round_jiffies (jiffies + corruption_check_period*HZ )); +schedule_delayed_work (&bios_check_work, +round_jiffies_relative (corruption_check_period*HZ )); } -void start_periodic_check_for_corruption (void ) +static int start_periodic_check_for_corruption (void ) {if (!memory_corruption_check || corruption_check_period ==0 ) -return ; +return 0 ;printk (KERN_INFO "Scanning for low memory corruption every %d seconds\n" , corruption_check_period); -init_timer (&periodic_check_timer); - periodic_check_timer.function = &periodic_check_for_corruption; -periodic_check_for_corruption (0 ); +/* First time we run the checks right away */ +schedule_delayed_work (&bios_check_work,0 ); +return 0 ; } + +module_init (start_periodic_check_for_corruption);#endif
arch/x86/mm/init_32.c +0 -2
@@ -970,8 +970,6 @@ void __init mem_init(void)int codesize, reservedpages, datasize, initsize;int tmp; -start_periodic_check_for_corruption (); -#ifdef CONFIG_FLATMEM BUG_ON (!mem_map);#endif
arch/x86/mm/init_64.c +0 -2
@@ -905,8 +905,6 @@ void __init mem_init(void) {long codesize, reservedpages, datasize, initsize; -start_periodic_check_for_corruption (); -pci_iommu_alloc ();/* clear_bss() already clear the empty_zero_page */
include/linux/kernel.h +0 -5
@@ -260,15 +260,10 @@ extern int root_mountflags;* able to scatter it around anywhere in the kernel. */ void check_for_bios_corruption (void ); -void start_periodic_check_for_corruption (void );#else static inline void check_for_bios_corruption (void ) { } - -static inline void start_periodic_check_for_corruption (void ) -{ -}#endif /* Values used for system_state */
Signature · 8 lines
1.5.5.1 -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org
Re: [PATCH 3/4] x86: corruption check: run the corruption checks from a work queue
Quoted 10 lines · Arjan van de Ven
From: Arjan van de Ven <[email protected]>
Date: Mon, 22 Sep 2008 13:42:15 -0700
Subject: [PATCH] x86: corruption check: run the corruption checks from a work queuethe periodic corruption checks are better off run from a work queue; there's nothing time critical about them and this way the amount of interrupt-context work is reduced.
Signed-off-by Arjan van de Ven <[email protected]>
Hi,
Did you figure out what's causing these corruptions yet?
Can't you do so by simply reserving the memory area in question, clearing the present bit for those pages, and letting the page fault handler catch whatever code is accessing it?
Vegard
Signature · 4 lines
"The animistic metaphor of the bug that maliciously sneaked in while the programmer was not looking is intellectually dishonest as it disguises that the error is the programmer's own creation." -- E. W. Dijkstra, EWD1036
PATCH 4/4 x86: corruption-check: some post-move cleanups
In reply to Arjan van de VenFrom: Arjan van de Ven <[email protected]>
Date: Sun, 5 Oct 2008 12:05:30 -0700
Subject: [PATCH] x86: corruption-check: some post-move cleanups
now that the code is moved and converted to a work queue, there's some minor cleanups that can be done.
--- arch/x86/kernel/Makefile | 3 ++- arch/x86/kernel/check.c | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-)
arch/x86/kernel/Makefile +2 -1
@@ -36,7 +36,6 @@ obj-y += bootflag.o e820.o obj-y += pci-dma.o quirks.o i8237.o topology.o kdebugfs.o obj-y += alternative.o i8253.o pci-nommu.o obj-y += tsc.o io_delay.o rtc.o -obj-y += check.o obj-$(CONFIG_X86_TRAMPOLINE) += trampoline.o obj-y += process.o
@@ -106,6 +105,8 @@ microcode-$(CONFIG_MICROCODE_INTEL) += microcode_intel.o microcode-$(CONFIG_MICROCODE_AMD) += microcode_amd.o obj-$(CONFIG_MICROCODE) += microcode.o +obj-$(CONFIG_X86_CHECK_BIOS_CORRUPTION) += check.o + ### # 64 bit specific files ifeq ($(CONFIG_X86_64),y)
arch/x86/kernel/check.c +4 -6
@@ -11,7 +11,6 @@* remaining free memory in that area and fill it with a distinct * pattern. */ -#ifdef CONFIG_X86_CHECK_BIOS_CORRUPTION #define MAX_SCAN_AREAS 8static int __read_mostly memory_corruption_check =-1 ;
@@ -23,7 +22,7 @@ static struct e820entry scan_areas[MAX_SCAN_AREAS];static int num_scan_areas; -static int set_corruption_check (char *arg) +static __init int set_corruption_check (char *arg) {char *end;
@@ -33,7 +32,7 @@ static int set_corruption_check(char *arg) }early_param ("memory_corruption_check" , set_corruption_check); -static int set_corruption_check_period (char *arg) +static __init int set_corruption_check_period (char *arg) {char *end;
@@ -43,7 +42,7 @@ static int set_corruption_check_period(char *arg) }early_param ("memory_corruption_check_period" , set_corruption_check_period); -static int set_corruption_check_size (char *arg) +static __init int set_corruption_check_size (char *arg) {char *end;unsigned size;
@@ -134,7 +133,7 @@ void check_for_bios_corruption(void) } } -WARN (corruption,KERN_ERR "Memory corruption detected in low memory\n" ); +WARN_ONCE (corruption,KERN_ERR "Memory corruption detected in low memory\n" ); }static void check_corruption (struct work_struct *dummy);
@@ -161,5 +160,4 @@ static int start_periodic_check_for_corruption(void) }module_init (start_periodic_check_for_corruption); -#endif
Signature · 8 lines
1.5.5.1 -- Arjan van de Ven Intel Open Source Technology Centre For development, discussion and tips for power savings, visit http://www.lesswatts.org
Ingo Molnar
AppliedQuoted 11 lines · Arjan van de Ven
From: Arjan van de Ven <[email protected]>
Date: Sun, 5 Oct 2008 11:08:10 -0700
Subject: [PATCH] x86: corruption-check: fix some style issuesBefore moving the code to it's own file, fix some style issues in the corruption check code.
Signed-off-by Arjan van de Ven <[email protected]>--- arch/x86/kernel/setup.c | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-)
i've picked up your fixes into tip/x86/corruption-check:
b43d196: x86: corruption-check: some post-move cleanups
304e629: x86: corruption check: run the corruption checks from a work queue 6784f7d: x86: corruption check: move the corruption checks into their own file 04d2aac: x86: corruption-check: fix some style issues
thanks Arjan!
Ingo