|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] ring.h notification hold-off question
hi.
trying to understand the idea behind _notify in
#define RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(_r, _notify) do { \
RING_IDX __old = (_r)->sring->req_prod; \
RING_IDX __new = (_r)->req_prod_pvt; \
wmb(); /* back sees requests /before/ updated producer index */ \
(_r)->sring->req_prod = __new; \
mb(); /* back sees new requests /before/ we check req_event */ \
(_notify) = ((RING_IDX)(__new - (_r)->sring->req_event) < \
(RING_IDX)(__new - __old)); \
} while (0)
questions are regarding wrapping the ring indexes.
a) to make sure: ring idx integer-wraps do happen, right?
asking because the only mask operations i can find are those
in the GET_REQUEST/RESPONSE macros.
b) if __old were UINT_MAX, then the consumer side might/would
set req_event to 0 after catching up right? (req_cons(== req_prod)+1)
now assume __new == __old + 2 then we had
req_event [0] < __new [1] < __old [INT_MAX]
i.e.
__new - req_event [1] > __new - __old [-1]
i.e. _notify=false, which i believe skips a wanted notification.
c)
the case
__old < __new < req_event
(no wraps) would always notify. this somewhere contradicts
the statement
in ring.h regarding opportunities to customise FINAL_CHECK for
for larger-than-one batches.
if i'm wrong, then can anybode enlighten me, please?
thanks for patience,
daniel
--
Daniel Stodden
LRR - Lehrstuhl für Rechnertechnik und Rechnerorganisation
Institut für Informatik der TU München D-85748 Garching
http://www.lrr.in.tum.de/~stodden mailto:stodden@xxxxxxxxxx
PGP Fingerprint: F5A4 1575 4C56 E26A 0B33 3D80 457E 82AE B0D8 735B
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] ring.h notification hold-off question,
Daniel Stodden <=
|
|
|
|
|