memdebug: more detailed error report

This commit is contained in:
Balazs Gerofi
2017-07-07 07:46:50 +09:00
parent 209748d913
commit da7421e8ee

View File

@@ -258,6 +258,15 @@ void _ihk_mc_free_pages(void *ptr, int npages, char *file, int line)
} }
if (addr_entry) { if (addr_entry) {
if (npages > addr_entry->npages) {
kprintf("%s: ERROR: trying to deallocate %d pages"
" for a %d pages allocation at %s:%d\n",
__FUNCTION__,
npages, addr_entry->npages,
file, line);
panic("invalid deallocation");
}
if (addr_entry->npages > npages) { if (addr_entry->npages > npages) {
addr_entry->addr += (npages * PAGE_SIZE); addr_entry->addr += (npages * PAGE_SIZE);
addr_entry->npages -= npages; addr_entry->npages -= npages;
@@ -300,9 +309,9 @@ void _ihk_mc_free_pages(void *ptr, int npages, char *file, int line)
/* Still not? Invalid deallocation */ /* Still not? Invalid deallocation */
if (!addr_entry) { if (!addr_entry) {
kprintf("%s: ERROR: invalid deallocation @ %s:%d\n", kprintf("%s: ERROR: invalid deallocation for addr: 0x%lx @ %s:%d\n",
__FUNCTION__, file, line); __FUNCTION__, ptr, file, line);
panic("invalid deallocation"); panic("panic: invalid deallocation");
} }
dkprintf("%s: found covering addr_entry: 0x%lx:%d\n", __FUNCTION__, dkprintf("%s: found covering addr_entry: 0x%lx:%d\n", __FUNCTION__,
@@ -1719,6 +1728,10 @@ void _kfree(void *ptr, char *file, int line)
struct kmalloc_track_addr_entry *addr_entry_iter, *addr_entry = NULL; struct kmalloc_track_addr_entry *addr_entry_iter, *addr_entry = NULL;
int hash; int hash;
if (!ptr) {
return;
}
if (!memdebug) { if (!memdebug) {
goto out; goto out;
} }
@@ -1739,7 +1752,8 @@ void _kfree(void *ptr, char *file, int line)
ihk_mc_spinlock_unlock(&kmalloc_addr_hash_locks[hash], irqflags); ihk_mc_spinlock_unlock(&kmalloc_addr_hash_locks[hash], irqflags);
if (!addr_entry) { if (!addr_entry) {
kprintf("%s: ERROR: kfree()ing invalid pointer\n", __FUNCTION__); kprintf("%s: ERROR: kfree()ing invalid pointer at %s:%d\n",
__FUNCTION__, file, line);
panic("panic"); panic("panic");
} }