Module Name: src Committed By: ozaki-r Date: Thu Nov 5 06:50:51 UTC 2015
Modified Files: src/sys/net: if_llatbl.h Log Message: Improve lock traces and add reference traces To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/sys/net/if_llatbl.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_llatbl.h diff -u src/sys/net/if_llatbl.h:1.4 src/sys/net/if_llatbl.h:1.5 --- src/sys/net/if_llatbl.h:1.4 Fri Oct 9 01:50:09 2015 +++ src/sys/net/if_llatbl.h Thu Nov 5 06:50:51 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: if_llatbl.h,v 1.4 2015/10/09 01:50:09 ozaki-r Exp $ */ +/* $NetBSD: if_llatbl.h,v 1.5 2015/11/05 06:50:51 ozaki-r Exp $ */ /* * Copyright (c) 2004 Luigi Rizzo, Alessandro Cerri. All rights reserved. * Copyright (c) 2004-2008 Qing Li. All rights reserved. @@ -108,26 +108,28 @@ struct llentry { #if 0 -#define LLE_LOCK_TRACE(n) aprint_normal("%s: " #n " line %d\n", __func__, __LINE__) +#define LLE_LOCK_TRACE(t, lle) aprint_normal( \ + "%s:%d: LOCK(" #t "): lle=%p\n", \ + __func__, __LINE__, (lle)) #else -#define LLE_LOCK_TRACE(n) +#define LLE_LOCK_TRACE(t, lle) do {} while (0) #endif #ifdef GATEWAY #define LLE_WLOCK(lle) do { \ - LLE_LOCK_TRACE(WL); \ + LLE_LOCK_TRACE(WL, (lle)); \ mutex_enter(&(lle)->lle_lock); \ } while (0) #define LLE_RLOCK(lle) do { \ - LLE_LOCK_TRACE(RL); \ + LLE_LOCK_TRACE(RL, (lle)); \ mutex_enter(&(lle)->lle_lock); \ } while (0) #define LLE_WUNLOCK(lle) do { \ - LLE_LOCK_TRACE(WU); \ + LLE_LOCK_TRACE(WU, (lle)); \ mutex_exit(&(lle)->lle_lock); \ } while (0) #define LLE_RUNLOCK(lle) do { \ - LLE_LOCK_TRACE(RU); \ + LLE_LOCK_TRACE(RU, (lle)); \ mutex_exit(&(lle)->lle_lock); \ } while (0) #define LLE_DOWNGRADE(lle) do {} while (0) @@ -139,19 +141,19 @@ struct llentry { #else /* GATEWAY */ #define LLE_WLOCK(lle) do { \ - LLE_LOCK_TRACE(WL); \ + LLE_LOCK_TRACE(WL, (lle)); \ rw_enter(&(lle)->lle_lock, RW_WRITER); \ } while (0) #define LLE_RLOCK(lle) do { \ - LLE_LOCK_TRACE(RL); \ + LLE_LOCK_TRACE(RL, (lle)); \ rw_enter(&(lle)->lle_lock, RW_READER); \ } while (0) #define LLE_WUNLOCK(lle) do { \ - LLE_LOCK_TRACE(WU); \ + LLE_LOCK_TRACE(WU, (lle)); \ rw_exit(&(lle)->lle_lock); \ } while (0) #define LLE_RUNLOCK(lle) do { \ - LLE_LOCK_TRACE(RU); \ + LLE_LOCK_TRACE(RU, (lle)); \ rw_exit(&(lle)->lle_lock); \ } while (0) #define LLE_DOWNGRADE(lle) rw_downgrade(&(lle)->lle_lock) @@ -167,8 +169,16 @@ struct llentry { #define LLE_IS_VALID(lle) (((lle) != NULL) && ((lle) != (void *)-1)) +#if 0 +#define LLE_REF_TRACE(t, n) aprint_normal("%s:%d: REF(" #t "): refcnt=%d\n", \ + __func__, __LINE__, (n)) +#else +#define LLE_REF_TRACE(t, n) do {} while (0) +#endif + #define LLE_ADDREF(lle) do { \ LLE_WLOCK_ASSERT(lle); \ + LLE_REF_TRACE(ADD, (lle)->lle_refcnt); \ KASSERTMSG((lle)->lle_refcnt >= 0, \ "negative refcnt %d on lle %p", \ (lle)->lle_refcnt, (lle)); \ @@ -177,10 +187,13 @@ struct llentry { #define LLE_REMREF(lle) do { \ LLE_WLOCK_ASSERT(lle); \ + LLE_REF_TRACE(REM, (lle)->lle_refcnt); \ KASSERTMSG((lle)->lle_refcnt > 0, \ "bogus refcnt %d on lle %p", \ (lle)->lle_refcnt, (lle)); \ (lle)->lle_refcnt--; \ + if ((lle)->lle_refcnt == 0) \ + LLE_REF_TRACE(ZERO, (lle)->lle_refcnt); \ } while (0) #define LLE_FREE_LOCKED(lle) do { \