From 277b62040de863f6a7537c16908fcd69e84f4948 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Fri, 2 Jan 2004 19:29:31 +0000 Subject: [PATCH] Lock the traversal of the vm object list. Use TAILQ_FOREACH consistently. --- sys/compat/linprocfs/linprocfs.c | 2 ++ sys/compat/linux/linux_misc.c | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/compat/linprocfs/linprocfs.c b/sys/compat/linprocfs/linprocfs.c index dd88146ce66..c02a2e8b268 100644 --- a/sys/compat/linprocfs/linprocfs.c +++ b/sys/compat/linprocfs/linprocfs.c @@ -143,9 +143,11 @@ linprocfs_domeminfo(PFS_FILL_ARGS) swapused = j * PAGE_SIZE; swapfree = swaptotal - swapused; memshared = 0; + mtx_lock(&vm_object_list_mtx); TAILQ_FOREACH(object, &vm_object_list, object_list) if (object->shadow_count > 1) memshared += object->resident_page_count; + mtx_unlock(&vm_object_list_mtx); memshared *= PAGE_SIZE; /* * We'd love to be able to write: diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c index 9e61226782a..99387855034 100644 --- a/sys/compat/linux/linux_misc.c +++ b/sys/compat/linux/linux_misc.c @@ -145,10 +145,11 @@ linux_sysinfo(struct thread *td, struct linux_sysinfo_args *args) sysinfo.freeram = sysinfo.totalram - cnt.v_wire_count * PAGE_SIZE; sysinfo.sharedram = 0; - for (object = TAILQ_FIRST(&vm_object_list); object != NULL; - object = TAILQ_NEXT(object, object_list)) + mtx_lock(&vm_object_list_mtx); + TAILQ_FOREACH(object, &vm_object_list, object_list) if (object->shadow_count > 1) sysinfo.sharedram += object->resident_page_count; + mtx_unlock(&vm_object_list_mtx); sysinfo.sharedram *= PAGE_SIZE; sysinfo.bufferram = 0;