1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 #include "ompi_config.h"
  15 #include "ompi/mca/pml/base/pml_base_request.h"
  16 #include "opal_stdint.h"
  17 
  18 #ifndef __INCLUDE_VPROTOCOL_PESSIMIST_EVENT_H__
  19 #define __INCLUDE_VPROTOCOL_PESSIMIST_EVENT_H__
  20 
  21 BEGIN_C_DECLS
  22 
  23 
  24 typedef uint64_t vprotocol_pessimist_clock_t;
  25 #define PRIpclock PRIx64
  26 
  27 typedef enum {
  28   VPROTOCOL_PESSIMIST_EVENT_TYPE_MATCHING,
  29   VPROTOCOL_PESSIMIST_EVENT_TYPE_DELIVERY
  30 } vprotocol_pessimist_event_type_t;
  31 
  32 typedef struct vprotocol_pessimist_matching_event_t {
  33   vprotocol_pessimist_clock_t reqid;      
  34   int src;                                
  35 } vprotocol_pessimist_matching_event_t;
  36 
  37 typedef struct vprotocol_pessimist_delivery_event_t {
  38   vprotocol_pessimist_clock_t probeid;    
  39   vprotocol_pessimist_clock_t reqid;      
  40 } vprotocol_pessimist_delivery_event_t;
  41 
  42 typedef union vprotocol_pessimist_mem_event_t {
  43     vprotocol_pessimist_matching_event_t e_matching;
  44     vprotocol_pessimist_delivery_event_t e_delivery;
  45 } vprotocol_pessimist_mem_event_t;
  46 
  47 typedef struct mca_vprotocol_pessimist_event_t {
  48   opal_free_list_item_t super;
  49   vprotocol_pessimist_event_type_t type;
  50   mca_pml_base_request_t *req;
  51   vprotocol_pessimist_mem_event_t u_event;
  52 } mca_vprotocol_pessimist_event_t;
  53 
  54 OMPI_DECLSPEC OBJ_CLASS_DECLARATION(mca_vprotocol_pessimist_event_t);
  55 
  56 
  57 #define VPESSIMIST_MATCHING_EVENT_NEW(event)                            \
  58     do {                                                                \
  59         opal_free_list_item_t *item;                                    \
  60         item = opal_free_list_wait (&mca_vprotocol_pessimist.events_pool); \
  61         event = (mca_vprotocol_pessimist_event_t *) item;               \
  62         event->type = VPROTOCOL_PESSIMIST_EVENT_TYPE_MATCHING;          \
  63         event->u_event.e_matching.src = -1;                             \
  64     } while(0)
  65 
  66 #define VPESSIMIST_DELIVERY_EVENT_NEW(event)                            \
  67     do {                                                                \
  68         opal_free_list_item_t *item;                                    \
  69         item = opal_free_list_wait (&mca_vprotocol_pessimist.events_pool); \
  70         event = (mca_vprotocol_pessimist_event_t *) item;               \
  71         event->type = VPROTOCOL_PESSIMIST_EVENT_TYPE_DELIVERY;          \
  72     } while(0)
  73 
  74 #define VPESSIMIST_EVENT_RETURN(event)                                  \
  75     opal_free_list_return (&mca_vprotocol_pessimist.events_pool,        \
  76                            (opal_free_list_item_t *) event)
  77 
  78 END_C_DECLS
  79 
  80 #endif