Skip to content

Commit 7fcf605

Browse files
giuseppelettierivmaffione
authored andcommitted
improved log for *sync prologues
1 parent 0901c06 commit 7fcf605

1 file changed

Lines changed: 22 additions & 33 deletions

File tree

sys/dev/netmap/netmap.c

Lines changed: 22 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
14921506
u_int
14931507
nm_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

Comments
 (0)