@@ -1476,6 +1476,20 @@ netmap_unget_na(struct netmap_adapter *na, struct ifnet *ifp)
14761476}
14771477
14781478
1479+ #define NM_FAIL_ON (t ) do { \
1480+ if (unlikely(t)) { \
1481+ RD(5, "%s: fail '" #t "' " \
1482+ "h %d c %d t %d " \
1483+ "rh %d rc %d rt %d " \
1484+ "hc %d ht %d", \
1485+ kring->name, \
1486+ head, cur, ring->tail, \
1487+ kring->rhead, kring->rcur, kring->rtail, \
1488+ kring->nr_hwcur, kring->nr_hwtail); \
1489+ return kring->nkr_num_slots; \
1490+ } \
1491+ } while (0)
1492+
14791493/*
14801494 * validate parameters on entry for *_txsync()
14811495 * Returns ring->cur if ok, or something >= kring->nkr_num_slots
@@ -1492,7 +1506,6 @@ netmap_unget_na(struct netmap_adapter *na, struct ifnet *ifp)
14921506u_int
14931507nm_txsync_prologue (struct netmap_kring * kring , struct netmap_ring * ring )
14941508{
1495- #define NM_FAIL_ON (t ) if (t) { D("fail " #t); goto error; }
14961509 u_int head = ring -> head ; /* read only once */
14971510 u_int cur = ring -> cur ; /* read only once */
14981511 u_int n = kring -> nkr_num_slots ;
@@ -1502,9 +1515,8 @@ nm_txsync_prologue(struct netmap_kring *kring, struct netmap_ring *ring)
15021515 kring -> nr_hwcur , kring -> nr_hwtail ,
15031516 ring -> head , ring -> cur , ring -> tail );
15041517#if 1 /* kernel sanity checks; but we can trust the kring. */
1505- if (kring -> nr_hwcur >= n || kring -> rhead >= n ||
1506- kring -> rtail >= n || kring -> nr_hwtail >= n )
1507- goto error ;
1518+ NM_FAIL_ON (kring -> nr_hwcur >= n || kring -> rhead >= n ||
1519+ kring -> rtail >= n || kring -> nr_hwtail >= n );
15081520#endif /* kernel sanity checks */
15091521 /*
15101522 * user sanity checks. We only use head,
@@ -1541,15 +1553,6 @@ nm_txsync_prologue(struct netmap_kring *kring, struct netmap_ring *ring)
15411553 kring -> rhead = head ;
15421554 kring -> rcur = cur ;
15431555 return head ;
1544-
1545- error :
1546- RD (5 , "%s kring error: head %d cur %d tail %d rhead %d rcur %d rtail %d hwcur %d hwtail %d" ,
1547- kring -> name ,
1548- head , cur , ring -> tail ,
1549- kring -> rhead , kring -> rcur , kring -> rtail ,
1550- kring -> nr_hwcur , kring -> nr_hwtail );
1551- return n ;
1552- #undef NM_FAIL_ON
15531556}
15541557
15551558
@@ -1584,30 +1587,24 @@ nm_rxsync_prologue(struct netmap_kring *kring, struct netmap_ring *ring)
15841587 cur = kring -> rcur = ring -> cur ; /* read only once */
15851588 head = kring -> rhead = ring -> head ; /* read only once */
15861589#if 1 /* kernel sanity checks */
1587- if (kring -> nr_hwcur >= n || kring -> nr_hwtail >= n )
1588- goto error ;
1590+ NM_FAIL_ON (kring -> nr_hwcur >= n || kring -> nr_hwtail >= n );
15891591#endif /* kernel sanity checks */
15901592 /* user sanity checks */
15911593 if (kring -> nr_hwtail >= kring -> nr_hwcur ) {
15921594 /* want hwcur <= rhead <= hwtail */
1593- if (head < kring -> nr_hwcur || head > kring -> nr_hwtail )
1594- goto error ;
1595+ NM_FAIL_ON (head < kring -> nr_hwcur || head > kring -> nr_hwtail );
15951596 /* and also rhead <= rcur <= hwtail */
1596- if (cur < head || cur > kring -> nr_hwtail )
1597- goto error ;
1597+ NM_FAIL_ON (cur < head || cur > kring -> nr_hwtail );
15981598 } else {
15991599 /* we need rhead outside hwtail..hwcur */
1600- if (head < kring -> nr_hwcur && head > kring -> nr_hwtail )
1601- goto error ;
1600+ NM_FAIL_ON (head < kring -> nr_hwcur && head > kring -> nr_hwtail );
16021601 /* two cases now: head <= hwtail or head >= hwcur */
16031602 if (head <= kring -> nr_hwtail ) {
16041603 /* want head <= cur <= hwtail */
1605- if (cur < head || cur > kring -> nr_hwtail )
1606- goto error ;
1604+ NM_FAIL_ON (cur < head || cur > kring -> nr_hwtail );
16071605 } else {
16081606 /* cur must be outside hwtail..head */
1609- if (cur < head && cur > kring -> nr_hwtail )
1610- goto error ;
1607+ NM_FAIL_ON (cur < head && cur > kring -> nr_hwtail );
16111608 }
16121609 }
16131610 if (ring -> tail != kring -> rtail ) {
@@ -1617,16 +1614,8 @@ nm_rxsync_prologue(struct netmap_kring *kring, struct netmap_ring *ring)
16171614 ring -> tail = kring -> rtail ;
16181615 }
16191616 return head ;
1620-
1621- error :
1622- RD (5 , "kring error: hwcur %d rcur %d hwtail %d head %d cur %d tail %d" ,
1623- kring -> nr_hwcur ,
1624- kring -> rcur , kring -> nr_hwtail ,
1625- kring -> rhead , kring -> rcur , ring -> tail );
1626- return n ;
16271617}
16281618
1629-
16301619/*
16311620 * Error routine called when txsync/rxsync detects an error.
16321621 * Can't do much more than resetting head =cur = hwcur, tail = hwtail
0 commit comments