summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/vm/page_retire.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/vm/page_retire.c')
-rw-r--r--usr/src/uts/common/vm/page_retire.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/usr/src/uts/common/vm/page_retire.c b/usr/src/uts/common/vm/page_retire.c
index 1d6512f1b2..8836a18f0c 100644
--- a/usr/src/uts/common/vm/page_retire.c
+++ b/usr/src/uts/common/vm/page_retire.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -138,6 +138,7 @@
#include <sys/mem_config.h>
#include <sys/atomic.h>
#include <sys/callb.h>
+#include <sys/kobj.h>
#include <vm/page.h>
#include <vm/vm_dep.h>
#include <vm/as.h>
@@ -274,6 +275,8 @@ int page_retire_first_ue = 1;
*/
static int pr_enable = 0;
+static void (*memscrub_notify_func)(uint64_t);
+
#ifdef DEBUG
struct page_retire_debug {
int prd_dup1;
@@ -919,6 +922,9 @@ page_retire_init(void)
kstat_install(ksp);
}
+ memscrub_notify_func =
+ (void(*)(uint64_t))kobj_getsymvalue("memscrub_notify", 0);
+
page_capture_register_callback(PC_RETIRE, -1, page_retire_pp_finish);
pr_enable = 1;
}
@@ -1039,6 +1045,10 @@ page_retire(uint64_t pa, uchar_t reason)
return (page_retire_done(pp, PRD_DUPLICATE));
}
+ if (memscrub_notify_func != NULL) {
+ (void) memscrub_notify_func(pa);
+ }
+
if ((reason & PR_UE) && !PP_TOXIC(pp)) {
PR_MESSAGE(CE_NOTE, 1, "Scheduling clearing of error on"
" page 0x%08x.%08x", pa);