lkml.org 
[lkml]   [2019]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 3/4] xen/interface: re-define FRONT/BACK_RING_ATTACH()
    Date
    Currently these macros are defined to re-initialize a front/back ring
    (respectively) to values read from the shared ring in such a way that any
    requests/responses that are added to the shared ring whilst the front/back
    is detached will be skipped over. This, in general, is not a desirable
    semantic since most frontend implementations will eventually block waiting
    for a response which would either never appear or never be processed.

    Since the macros are currently unused, take this opportunity to re-define
    them to re-initialize a front/back ring using specified values. This also
    allows FRONT/BACK_RING_INIT() to be re-defined in terms of
    FRONT/BACK_RING_ATTACH() using a specified value of 0.

    NOTE: BACK_RING_ATTACH() will be used directly in a subsequent patch.

    Signed-off-by: Paul Durrant <pdurrant@amazon.com>
    ---
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: Stefano Stabellini <sstabellini@kernel.org>

    A patch to add the FRONT/BACK_RING_ATTACH() macros to the canonical
    ring.h in xen.git will be sent once the definitions have been agreed.

    v2:
    - change definitions to take explicit initial index values
    ---
    include/xen/interface/io/ring.h | 29 +++++++++--------------------
    1 file changed, 9 insertions(+), 20 deletions(-)

    diff --git a/include/xen/interface/io/ring.h b/include/xen/interface/io/ring.h
    index 3f40501fc60b..2af7a1cd6658 100644
    --- a/include/xen/interface/io/ring.h
    +++ b/include/xen/interface/io/ring.h
    @@ -125,35 +125,24 @@ struct __name##_back_ring { \
    memset((_s)->pad, 0, sizeof((_s)->pad)); \
    } while(0)

    -#define FRONT_RING_INIT(_r, _s, __size) do { \
    - (_r)->req_prod_pvt = 0; \
    - (_r)->rsp_cons = 0; \
    +#define FRONT_RING_ATTACH(_r, _s, _i, __size) do { \
    + (_r)->req_prod_pvt = (_i); \
    + (_r)->rsp_cons = (_i); \
    (_r)->nr_ents = __RING_SIZE(_s, __size); \
    (_r)->sring = (_s); \
    } while (0)

    -#define BACK_RING_INIT(_r, _s, __size) do { \
    - (_r)->rsp_prod_pvt = 0; \
    - (_r)->req_cons = 0; \
    - (_r)->nr_ents = __RING_SIZE(_s, __size); \
    - (_r)->sring = (_s); \
    -} while (0)
    +#define FRONT_RING_INIT(_r, _s, __size) FRONT_RING_ATTACH(_r, _s, 0, __size)

    -/* Initialize to existing shared indexes -- for recovery */
    -#define FRONT_RING_ATTACH(_r, _s, __size) do { \
    - (_r)->sring = (_s); \
    - (_r)->req_prod_pvt = (_s)->req_prod; \
    - (_r)->rsp_cons = (_s)->rsp_prod; \
    +#define BACK_RING_ATTACH(_r, _s, _i, __size) do { \
    + (_r)->rsp_prod_pvt = (_i); \
    + (_r)->req_cons = (_i); \
    (_r)->nr_ents = __RING_SIZE(_s, __size); \
    -} while (0)
    -
    -#define BACK_RING_ATTACH(_r, _s, __size) do { \
    (_r)->sring = (_s); \
    - (_r)->rsp_prod_pvt = (_s)->rsp_prod; \
    - (_r)->req_cons = (_s)->req_prod; \
    - (_r)->nr_ents = __RING_SIZE(_s, __size); \
    } while (0)

    +#define BACK_RING_INIT(_r, _s, __size) BACK_RING_ATTACH(_r, _s, 0, __size)
    +
    /* How big is this ring? */
    #define RING_SIZE(_r) \
    ((_r)->nr_ents)
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-12-11 16:31    [W:3.284 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site