Mfp4 CH=177255:

Make VNET_ASSERT() available with either VNET_DEBUG or INVARIANTS.

  Change the syntax to match KASSERT() to allow more flexible panic
  messages rather than having a printf with hardcoded arguments
  before panic.

  Adjust the few assertions we have to the new format (and enhance
  the output).

  Sponsored by: The FreeBSD Foundation
  Sponsored by: CK Software GmbH
  Reviewed by:	jhb

MFC after:	2 weeks
This commit is contained in:
Bjoern A. Zeeb 2011-02-11 13:27:00 +00:00
parent 5d627bb558
commit 0028e52461
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=218559
4 changed files with 26 additions and 16 deletions

View File

@ -437,7 +437,8 @@ sonewconn(struct socket *head, int connstatus)
if (over)
#endif
return (NULL);
VNET_ASSERT(head->so_vnet);
VNET_ASSERT(head->so_vnet != NULL, ("%s:%d so_vnet is NULL, head=%p",
__func__, __LINE__, head));
so = soalloc(head->so_vnet);
if (so == NULL)
return (NULL);

View File

@ -378,8 +378,10 @@ static void
vnet_if_uninit(const void *unused __unused)
{
VNET_ASSERT(TAILQ_EMPTY(&V_ifnet));
VNET_ASSERT(TAILQ_EMPTY(&V_ifg_head));
VNET_ASSERT(TAILQ_EMPTY(&V_ifnet), ("%s:%d tailq &V_ifnet=%p "
"not empty", __func__, __LINE__, &V_ifnet));
VNET_ASSERT(TAILQ_EMPTY(&V_ifg_head), ("%s:%d tailq &V_ifg_head=%p "
"not empty", __func__, __LINE__, &V_ifg_head));
free((caddr_t)V_ifindex_table, M_IFNET);
}

View File

@ -647,7 +647,8 @@ netisr_process_workstream_proto(struct netisr_workstream *nwsp, u_int proto)
if (local_npw.nw_head == NULL)
local_npw.nw_tail = NULL;
local_npw.nw_len--;
VNET_ASSERT(m->m_pkthdr.rcvif != NULL);
VNET_ASSERT(m->m_pkthdr.rcvif != NULL,
("%s:%d rcvif == NULL: m=%p", __func__, __LINE__, m));
CURVNET_SET(m->m_pkthdr.rcvif->if_vnet);
netisr_proto[proto].np_handler(m);
CURVNET_RESTORE();

View File

@ -118,18 +118,23 @@ void vnet_destroy(struct vnet *vnet);
* Various macros -- get and set the current network stack, but also
* assertions.
*/
#if defined(INVARIANTS) || defined(VNET_DEBUG)
#define VNET_ASSERT(exp, msg) do { \
if (!(exp)) \
panic msg; \
} while (0)
#else
#define VNET_ASSERT(exp, msg) do { \
} while (0)
#endif
#ifdef VNET_DEBUG
void vnet_log_recursion(struct vnet *, const char *, int);
#define VNET_ASSERT(condition) \
if (!(condition)) { \
printf("VNET_ASSERT @ %s:%d %s():\n", \
__FILE__, __LINE__, __func__); \
panic(#condition); \
}
#define CURVNET_SET_QUIET(arg) \
VNET_ASSERT((arg)->vnet_magic_n == VNET_MAGIC_N); \
VNET_ASSERT((arg) != NULL && (arg)->vnet_magic_n == VNET_MAGIC_N, \
("CURVNET_SET at %s:%d %s() curvnet=%p vnet=%p", \
__FILE__, __LINE__, __func__, curvnet, (arg))); \
struct vnet *saved_vnet = curvnet; \
const char *saved_vnet_lpush = curthread->td_vnet_lpush; \
curvnet = arg; \
@ -143,12 +148,13 @@ void vnet_log_recursion(struct vnet *, const char *, int);
#define CURVNET_SET(arg) CURVNET_SET_VERBOSE(arg)
#define CURVNET_RESTORE() \
VNET_ASSERT(saved_vnet == NULL || \
saved_vnet->vnet_magic_n == VNET_MAGIC_N); \
VNET_ASSERT(curvnet != NULL && (saved_vnet == NULL || \
saved_vnet->vnet_magic_n == VNET_MAGIC_N), \
("CURVNET_RESTORE at %s:%d %s() curvnet=%p saved_vnet=%p", \
__FILE__, __LINE__, __func__, curvnet, saved_vnet)); \
curvnet = saved_vnet; \
curthread->td_vnet_lpush = saved_vnet_lpush;
#else /* !VNET_DEBUG */
#define VNET_ASSERT(condition)
#define CURVNET_SET(arg) \
struct vnet *saved_vnet = curvnet; \
@ -351,7 +357,7 @@ do { \
*/
#define curvnet NULL
#define VNET_ASSERT(condition)
#define VNET_ASSERT(exp, msg)
#define CURVNET_SET(arg)
#define CURVNET_SET_QUIET(arg)
#define CURVNET_RESTORE()