lib, pimd: Convert timer_wheel to use thread_execute_name

Allow at timer wheel creation time the ability to specify a
name for what we want the 'show thread cpu' to show up as.

Modify pim to note this.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
Donald Sharp 2017-11-29 19:36:26 -05:00
parent b7fb24ce6f
commit c2cfa843b4
3 changed files with 29 additions and 7 deletions

View File

@ -29,7 +29,9 @@ DEFINE_MTYPE_STATIC(LIB, TIMER_WHEEL_LIST, "Timer Wheel Slot List")
static int debug_timer_wheel = 0; static int debug_timer_wheel = 0;
static int wheel_timer_thread(struct thread *t) static int wheel_timer_thread(struct thread *t);
static int wheel_timer_thread_helper(struct thread *t)
{ {
struct listnode *node, *nextnode; struct listnode *node, *nextnode;
unsigned long long curr_slot; unsigned long long curr_slot;
@ -65,15 +67,29 @@ static int wheel_timer_thread(struct thread *t)
return 0; return 0;
} }
static int wheel_timer_thread(struct thread *t)
{
struct timer_wheel *wheel;
wheel = THREAD_ARG(t);
thread_execute_name(wheel->master, wheel_timer_thread_helper,
wheel, 0, wheel->name);
return 0;
}
struct timer_wheel *wheel_init(struct thread_master *master, int period, struct timer_wheel *wheel_init(struct thread_master *master, int period,
size_t slots, unsigned int (*slot_key)(void *), size_t slots, unsigned int (*slot_key)(void *),
void (*slot_run)(void *)) void (*slot_run)(void *),
const char *run_name)
{ {
struct timer_wheel *wheel; struct timer_wheel *wheel;
size_t i; size_t i;
wheel = XCALLOC(MTYPE_TIMER_WHEEL, sizeof(struct timer_wheel)); wheel = XCALLOC(MTYPE_TIMER_WHEEL, sizeof(struct timer_wheel));
wheel->name = XSTRDUP(MTYPE_TIMER_WHEEL, run_name);
wheel->slot_key = slot_key; wheel->slot_key = slot_key;
wheel->slot_run = slot_run; wheel->slot_run = slot_run;
@ -104,6 +120,7 @@ void wheel_delete(struct timer_wheel *wheel)
THREAD_OFF(wheel->timer); THREAD_OFF(wheel->timer);
XFREE(MTYPE_TIMER_WHEEL_LIST, wheel->wheel_slot_lists); XFREE(MTYPE_TIMER_WHEEL_LIST, wheel->wheel_slot_lists);
XFREE(MTYPE_TIMER_WHEEL, wheel->name);
XFREE(MTYPE_TIMER_WHEEL, wheel); XFREE(MTYPE_TIMER_WHEEL, wheel);
} }

View File

@ -21,6 +21,7 @@
#define __WHEEL_H__ #define __WHEEL_H__
struct timer_wheel { struct timer_wheel {
char *name;
struct thread_master *master; struct thread_master *master;
int slots; int slots;
long long curr_slot; long long curr_slot;
@ -76,7 +77,8 @@ struct timer_wheel {
*/ */
struct timer_wheel *wheel_init(struct thread_master *master, int period, struct timer_wheel *wheel_init(struct thread_master *master, int period,
size_t slots, unsigned int (*slot_key)(void *), size_t slots, unsigned int (*slot_key)(void *),
void (*slot_run)(void *)); void (*slot_run)(void *),
const char *run_name);
/* /*
* Delete the specified timer wheel created * Delete the specified timer wheel created

View File

@ -1764,15 +1764,18 @@ void pim_upstream_remove_lhr_star_pimreg(struct pim_instance *pim,
void pim_upstream_init(struct pim_instance *pim) void pim_upstream_init(struct pim_instance *pim)
{ {
char hash_name[64]; char name[64];
snprintf(name, 64, "PIM %s Timer Wheel",
pim->vrf->name);
pim->upstream_sg_wheel = pim->upstream_sg_wheel =
wheel_init(master, 31000, 100, pim_upstream_hash_key, wheel_init(master, 31000, 100, pim_upstream_hash_key,
pim_upstream_sg_running); pim_upstream_sg_running, name);
snprintf(hash_name, 64, "PIM %s Upstream Hash", pim->vrf->name); snprintf(name, 64, "PIM %s Upstream Hash",
pim->vrf->name);
pim->upstream_hash = hash_create_size(8192, pim_upstream_hash_key, pim->upstream_hash = hash_create_size(8192, pim_upstream_hash_key,
pim_upstream_equal, hash_name); pim_upstream_equal, name);
pim->upstream_list = list_new(); pim->upstream_list = list_new();
pim->upstream_list->cmp = pim_upstream_compare; pim->upstream_list->cmp = pim_upstream_compare;