X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fsession%2Fsession.c;h=9a4d29bdf29dc7e47359e7d9ce42eb9762ff9820;hb=b46241889;hp=b0a17bbb2145809a3e92f464c3a1ffde71b493c8;hpb=e92c946498f544d6d435353eb06aa07fb20e054e;p=vpp.git diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index b0a17bbb214..9a4d29bdf29 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -78,7 +78,7 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index, int session_send_io_evt_to_thread (svm_fifo_t * f, session_evt_type_t evt_type) { - return session_send_evt_to_thread (&f->master_session_index, 0, + return session_send_evt_to_thread (&f->shr->master_session_index, 0, f->master_thread_index, evt_type); } @@ -436,8 +436,8 @@ session_fifo_tuning (session_t * s, svm_fifo_t * f, { segment_manager_t *sm; sm = segment_manager_get (f->segment_manager); - ASSERT (f->size >= 4096); - ASSERT (f->size <= sm->max_fifo_size); + ASSERT (f->shr->size >= 4096); + ASSERT (f->shr->size <= sm->max_fifo_size); } } } @@ -611,9 +611,9 @@ session_notify_subscribers (u32 app_index, session_t * s, if (!app) return -1; - for (i = 0; i < f->n_subscribers; i++) + for (i = 0; i < f->shr->n_subscribers; i++) { - app_wrk = application_get_worker (app, f->subscribers[i]); + app_wrk = application_get_worker (app, f->shr->subscribers[i]); if (!app_wrk) continue; if (app_worker_lock_and_send_event (app_wrk, s, evt_type)) @@ -723,7 +723,7 @@ session_dequeue_notify (session_t * s) SESSION_IO_EVT_TX))) return -1; - if (PREDICT_FALSE (s->tx_fifo->n_subscribers)) + if (PREDICT_FALSE (s->tx_fifo->shr->n_subscribers)) return session_notify_subscribers (app_wrk->app_index, s, s->tx_fifo, SESSION_IO_EVT_TX); @@ -1505,10 +1505,9 @@ void session_vpp_event_queues_allocate (session_main_t * smm) { u32 evt_q_length = 2048, evt_size = sizeof (session_event_t); - ssvm_private_t *eqs = &smm->evt_qs_segment; + fifo_segment_t *eqs = &smm->evt_qs_segment; uword eqs_size = 64 << 20; pid_t vpp_pid = getpid (); - void *oldheap; int i; if (smm->configured_event_queue_length) @@ -1517,19 +1516,22 @@ session_vpp_event_queues_allocate (session_main_t * smm) if (smm->evt_qs_segment_size) eqs_size = smm->evt_qs_segment_size; - eqs->ssvm_size = eqs_size; - eqs->my_pid = vpp_pid; - eqs->name = format (0, "%s%c", "session: evt-qs-segment", 0); + eqs->ssvm.ssvm_size = eqs_size; + eqs->ssvm.my_pid = vpp_pid; + eqs->ssvm.name = format (0, "%s%c", "session: evt-qs-segment", 0); /* clib_mem_vm_map_shared consumes first page before requested_va */ - eqs->requested_va = smm->session_baseva + clib_mem_get_page_size (); + eqs->ssvm.requested_va = smm->session_baseva + clib_mem_get_page_size (); - if (ssvm_server_init (eqs, SSVM_SEGMENT_MEMFD)) + if (ssvm_server_init (&eqs->ssvm, SSVM_SEGMENT_MEMFD)) { clib_warning ("failed to initialize queue segment"); return; } - oldheap = ssvm_push_heap (eqs->sh); + fifo_segment_init (eqs); + + /* Special fifo segment that's filled only with mqs */ + eqs->h->n_mqs = vec_len (smm->wrk); for (i = 0; i < vec_len (smm->wrk); i++) { @@ -1543,15 +1545,15 @@ session_vpp_event_queues_allocate (session_main_t * smm) cfg->n_rings = 2; cfg->q_nitems = evt_q_length; cfg->ring_cfgs = rc; - smm->wrk[i].vpp_event_queue = svm_msg_q_alloc (cfg); + + smm->wrk[i].vpp_event_queue = fifo_segment_msg_q_alloc (eqs, i, cfg); + if (svm_msg_q_alloc_consumer_eventfd (smm->wrk[i].vpp_event_queue)) clib_warning ("eventfd returned"); } - - ssvm_pop_heap (oldheap); } -ssvm_private_t * +fifo_segment_t * session_main_get_evt_q_segment (void) { return &session_main.evt_qs_segment;