mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-16 18:08:20 +00:00
xen/io/ring.h: new macro to detect whether there are too many requests on the ring
Backends may need to protect themselves against an insane number of produced requests stored by a frontend, in case they iterate over requests until reaching the req_prod value. There can't be more requests on the ring than the difference between produced requests and produced (but possibly not yet published) responses. This is a more strict alternative to a patch previously posted by Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>. Signed-off-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
parent
604c499cbb
commit
8d9256906a
@ -188,6 +188,11 @@ struct __name##_back_ring { \
|
|||||||
#define RING_REQUEST_CONS_OVERFLOW(_r, _cons) \
|
#define RING_REQUEST_CONS_OVERFLOW(_r, _cons) \
|
||||||
(((_cons) - (_r)->rsp_prod_pvt) >= RING_SIZE(_r))
|
(((_cons) - (_r)->rsp_prod_pvt) >= RING_SIZE(_r))
|
||||||
|
|
||||||
|
/* Ill-behaved frontend determination: Can there be this many requests? */
|
||||||
|
#define RING_REQUEST_PROD_OVERFLOW(_r, _prod) \
|
||||||
|
(((_prod) - (_r)->rsp_prod_pvt) > RING_SIZE(_r))
|
||||||
|
|
||||||
|
|
||||||
#define RING_PUSH_REQUESTS(_r) do { \
|
#define RING_PUSH_REQUESTS(_r) do { \
|
||||||
wmb(); /* back sees requests /before/ updated producer index */ \
|
wmb(); /* back sees requests /before/ updated producer index */ \
|
||||||
(_r)->sring->req_prod = (_r)->req_prod_pvt; \
|
(_r)->sring->req_prod = (_r)->req_prod_pvt; \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user