Can you try the attached(hackish) patch?
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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[email protected]"