X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Fthreads.c;h=1ce4dc15613bf1f1be05d58012a549203a3aee35;hb=2c8e0023f91882e53f06eb99c901b97fe013f981;hp=d9d781070a37d0e2b3820511d00e72c9343aa457;hpb=4c9599574929f624a218b963d268d97799289945;p=vpp.git diff --git a/src/vlib/threads.c b/src/vlib/threads.c index d9d781070a3..1ce4dc15613 100644 --- a/src/vlib/threads.c +++ b/src/vlib/threads.c @@ -255,6 +255,21 @@ vlib_thread_init (vlib_main_t * vm) } avail_cpu = clib_bitmap_set (avail_cpu, tm->main_lcore, 0); + /* + * Determine if the number of workers is greater than 0. + * If so, mark CPU 0 unavailable so workers will be numbered after main. + */ + u32 n_workers = 0; + uword *p = hash_get_mem (tm->thread_registrations_by_name, "workers"); + if (p != 0) + { + vlib_thread_registration_t *tr = (vlib_thread_registration_t *) p[0]; + int worker_thread_count = tr->count; + n_workers = worker_thread_count; + } + if (tm->skip_cores == 0 && n_workers) + avail_cpu = clib_bitmap_set (avail_cpu, 0, 0); + /* assume that there is socket 0 only if there is no data from sysfs */ if (!tm->cpu_socket_bitmap) tm->cpu_socket_bitmap = clib_bitmap_set (0, 0, 1); @@ -727,15 +742,8 @@ start_workers (vlib_main_t * vm) vec_add2 (vlib_worker_threads, w, 1); /* Currently unused, may not really work */ if (tr->mheap_size) - { -#if USE_DLMALLOC == 0 - w->thread_mheap = - mheap_alloc (0 /* use VM */ , tr->mheap_size); -#else - w->thread_mheap = create_mspace (tr->mheap_size, - 0 /* unlocked */ ); -#endif - } + w->thread_mheap = create_mspace (tr->mheap_size, + 0 /* unlocked */ ); else w->thread_mheap = main_heap; @@ -899,13 +907,8 @@ start_workers (vlib_main_t * vm) vec_add2 (vlib_worker_threads, w, 1); if (tr->mheap_size) { -#if USE_DLMALLOC == 0 - w->thread_mheap = - mheap_alloc (0 /* use VM */ , tr->mheap_size); -#else w->thread_mheap = create_mspace (tr->mheap_size, 0 /* locked */ ); -#endif } else w->thread_mheap = main_heap;