summaryrefslogtreecommitdiff
path: root/usr/src/uts/i86pc/os/memscrub.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/i86pc/os/memscrub.c')
-rw-r--r--usr/src/uts/i86pc/os/memscrub.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/usr/src/uts/i86pc/os/memscrub.c b/usr/src/uts/i86pc/os/memscrub.c
index 6dd21e302f..2e73a2a694 100644
--- a/usr/src/uts/i86pc/os/memscrub.c
+++ b/usr/src/uts/i86pc/os/memscrub.c
@@ -19,8 +19,9 @@
*
* CDDL HEADER END
*/
+
/*
- * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -129,6 +130,7 @@ static void *memscrub_pte;
* we can patch these defaults in /etc/system if necessary
*/
uint_t disable_memscrub = 0;
+static uint_t disable_memscrub_quietly = 0;
pgcnt_t memscrub_min_pages = MEMSCRUB_MIN_PAGES;
pgcnt_t memscrub_span_pages = MEMSCRUB_DFL_SPAN_PAGES;
time_t memscrub_period_sec = MEMSCRUB_DFL_PERIOD_SEC;
@@ -150,6 +152,7 @@ static uint_t memscrub_phys_pages;
static kcondvar_t memscrub_cv;
static kmutex_t memscrub_lock;
+
/*
* memscrub_lock protects memscrub_memlist
*/
@@ -199,6 +202,16 @@ memscrub_init()
TS_RUN, memscrub_thread_pri);
}
+/*
+ * Function to cause the software memscrubber to exit quietly if the
+ * platform support has located a hardware scrubber and enabled it.
+ */
+void
+memscrub_disable(void)
+{
+ disable_memscrub_quietly = 1;
+}
+
#ifdef MEMSCRUB_DEBUG
void
memscrub_printmemlist(char *title, struct memlist *listp)
@@ -267,7 +280,7 @@ memscrubber()
deadline = gethrestime_sec() + memscrub_delay_start_sec;
for (;;) {
- if (disable_memscrub)
+ if (disable_memscrub || disable_memscrub_quietly)
break;
mutex_enter(&memscrub_lock);
@@ -317,7 +330,7 @@ memscrubber()
pgcnt_t pages = memscrub_span_pages;
uint64_t address = mlp_next_addr;
- if (disable_memscrub)
+ if (disable_memscrub || disable_memscrub_quietly)
break;
mutex_enter(&memscrub_lock);
@@ -379,7 +392,8 @@ memscrubber()
memscrub_exit:
- cmn_err(CE_NOTE, "memory scrubber exiting.");
+ if (!disable_memscrub_quietly)
+ cmn_err(CE_NOTE, "memory scrubber exiting.");
cv_destroy(&memscrub_cv);