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:
parent
5d627bb558
commit
0028e52461
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=218559
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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()
|
||||
|
Loading…
Reference in New Issue
Block a user