x86: corruption check: run the corruption checks from a work queue
Impact: change the implementation of the debug feature 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. Signed-off-by: Arjan van de Ven <arjan@linux.intel.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
6784f7d0a5
commit
304e629bf4
3 changed files with 17 additions and 14 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -879,8 +879,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 */
|
||||
|
|
Loading…
Reference in a new issue