Date: Sun, 12 Sep 2010 14:57:05 -0400 From: Ryan Stone <rysto32@gmail.com> To: Michael Butler <imb@protected-networks.net> Cc: Kostik Belousov <kostikbel@gmail.com>, current@freebsd.org Subject: Re: r212281 breaks KDE Message-ID: <AANLkTi=uLB3W4vC87mWPjdEz6evOY-XD3AhGZ3yX4kdJ@mail.gmail.com> In-Reply-To: <4C8D1ADA.1090004@protected-networks.net> References: <4C8CE6F1.3030400@protected-networks.net> <20100912161901.GD2465@deviant.kiev.zoral.com.ua> <4C8D1ADA.1090004@protected-networks.net>
next in thread | previous in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Can you try the attached(hackish) patch?
[-- Attachment #2 --]
Index: vm_map.c
===================================================================
--- vm_map.c (revision 212479)
+++ vm_map.c (working copy)
@@ -128,7 +128,7 @@
static void vm_map_zfini(void *mem, int size);
static void _vm_map_init(vm_map_t map, pmap_t pmap, vm_offset_t min,
vm_offset_t max);
-static void vm_map_entry_dispose(vm_map_t map, vm_map_entry_t entry);
+void vm_map_entry_dispose(vm_map_t map, vm_map_entry_t entry);
#ifdef INVARIANTS
static void vm_map_zdtor(void *mem, int size, void *arg);
static void vmspace_zdtor(void *mem, int size, void *arg);
@@ -716,7 +716,7 @@
*
* Inverse of vm_map_entry_create.
*/
-static void
+void
vm_map_entry_dispose(vm_map_t map, vm_map_entry_t entry)
{
uma_zfree(map->system_map ? kmapentzone : mapentzone, entry);
Index: vm_mmap.c
===================================================================
--- vm_mmap.c (revision 212479)
+++ vm_mmap.c (working copy)
@@ -123,6 +123,8 @@
static int vm_mmap_shm(struct thread *, vm_size_t, vm_prot_t, vm_prot_t *,
int *, struct shmfd *, vm_ooffset_t, vm_object_t *);
+void vm_map_entry_dispose(vm_map_t map, vm_map_entry_t entry);
+
/*
* MPSAFE
*/
@@ -550,6 +552,8 @@
#ifdef HWPMC_HOOKS
struct pmckern_map_out pkm;
vm_map_entry_t entry;
+ vm_map_entry_t free_entry;
+ vm_object_t object;
#endif
vm_offset_t addr;
vm_size_t size, pageoff;
@@ -596,11 +600,25 @@
vm_map_delete(map, addr, addr + size);
#ifdef HWPMC_HOOKS
+ free_entry = map->deferred_freelist;
+ map->deferred_freelist = NULL;
/* downgrade the lock to prevent a LOR with the pmc-sx lock */
vm_map_lock_downgrade(map);
if (pkm.pm_address != (uintptr_t) NULL)
PMC_CALL_HOOK(td, PMC_FN_MUNMAP, (void *) &pkm);
vm_map_unlock_read(map);
+
+ while (free_entry != NULL) {
+ entry = free_entry;
+ free_entry = free_entry->next;
+
+ if ((entry->eflags & MAP_ENTRY_IS_SUB_MAP) == 0) {
+ object = entry->object.vm_object;
+ vm_object_deallocate(object);
+ }
+
+ vm_map_entry_dispose(map, entry);
+ }
#else
vm_map_unlock(map);
#endif
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?AANLkTi=uLB3W4vC87mWPjdEz6evOY-XD3AhGZ3yX4kdJ>
