diff options
Diffstat (limited to 'usr/src/uts/i86pc/os/memscrub.c')
-rw-r--r-- | usr/src/uts/i86pc/os/memscrub.c | 22 |
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); |