X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Fselftest%2Ftimer.c;h=aaab0b020e48d25023677401c22c601db531ef51;hb=e089a515efae3391709b997be889ebe0f3306e9d;hp=2b569dc6bc4dfe72f4e4add5b3361139947319d3;hpb=e3a7c58aebafce40323db54bf6056029e5af4a70;p=fs%2Flustre-release.git diff --git a/lnet/selftest/timer.c b/lnet/selftest/timer.c index 2b569dc..aaab0b0 100644 --- a/lnet/selftest/timer.c +++ b/lnet/selftest/timer.c @@ -27,7 +27,7 @@ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * Use is subject to license terms. * - * Copyright (c) 2011, Whamcloud, Inc. + * Copyright (c) 2011, 2012, Intel Corporation. */ /* * This file is part of Lustre, http://www.lustre.org/ @@ -50,31 +50,31 @@ * sorted by increasing expiry time. The number of slots is 2**7 (128), * to cover a time period of 1024 seconds into the future before wrapping. */ -#define STTIMER_MINPOLL 3 /* log2 min poll interval (8 s) */ -#define STTIMER_SLOTTIME (1 << STTIMER_MINPOLL) -#define STTIMER_SLOTTIMEMASK (~(STTIMER_SLOTTIME - 1)) -#define STTIMER_NSLOTS (1 << 7) -#define STTIMER_SLOT(t) (&stt_data.stt_hash[(((t) >> STTIMER_MINPOLL) & \ +#define STTIMER_MINPOLL 3 /* log2 min poll interval (8 s) */ +#define STTIMER_SLOTTIME (1 << STTIMER_MINPOLL) +#define STTIMER_SLOTTIMEMASK (~(STTIMER_SLOTTIME - 1)) +#define STTIMER_NSLOTS (1 << 7) +#define STTIMER_SLOT(t) (&stt_data.stt_hash[(((t) >> STTIMER_MINPOLL) & \ (STTIMER_NSLOTS - 1))]) struct st_timer_data { - cfs_spinlock_t stt_lock; - /* start time of the slot processed previously */ - cfs_time_t stt_prev_slot; - cfs_list_t stt_hash[STTIMER_NSLOTS]; - int stt_shuttingdown; + spinlock_t stt_lock; + /* start time of the slot processed previously */ + cfs_time_t stt_prev_slot; + cfs_list_t stt_hash[STTIMER_NSLOTS]; + int stt_shuttingdown; #ifdef __KERNEL__ - cfs_waitq_t stt_waitq; - int stt_nthreads; + wait_queue_head_t stt_waitq; + int stt_nthreads; #endif } stt_data; void -stt_add_timer (stt_timer_t *timer) +stt_add_timer(stt_timer_t *timer) { - cfs_list_t *pos; + cfs_list_t *pos; - cfs_spin_lock(&stt_data.stt_lock); + spin_lock(&stt_data.stt_lock); #ifdef __KERNEL__ LASSERT (stt_data.stt_nthreads > 0); @@ -93,7 +93,7 @@ stt_add_timer (stt_timer_t *timer) } cfs_list_add(&timer->stt_list, pos); - cfs_spin_unlock(&stt_data.stt_lock); + spin_unlock(&stt_data.stt_lock); } /* @@ -108,9 +108,9 @@ stt_add_timer (stt_timer_t *timer) int stt_del_timer (stt_timer_t *timer) { - int ret = 0; + int ret = 0; - cfs_spin_lock(&stt_data.stt_lock); + spin_lock(&stt_data.stt_lock); #ifdef __KERNEL__ LASSERT (stt_data.stt_nthreads > 0); @@ -122,8 +122,8 @@ stt_del_timer (stt_timer_t *timer) cfs_list_del_init(&timer->stt_list); } - cfs_spin_unlock(&stt_data.stt_lock); - return ret; + spin_unlock(&stt_data.stt_lock); + return ret; } /* called with stt_data.stt_lock held */ @@ -140,15 +140,15 @@ stt_expire_list (cfs_list_t *slot, cfs_time_t now) break; cfs_list_del_init(&timer->stt_list); - cfs_spin_unlock(&stt_data.stt_lock); + spin_unlock(&stt_data.stt_lock); - expired++; - (*timer->stt_func) (timer->stt_data); - - cfs_spin_lock(&stt_data.stt_lock); - } + expired++; + (*timer->stt_func) (timer->stt_data); + + spin_lock(&stt_data.stt_lock); + } - return expired; + return expired; } int @@ -161,16 +161,16 @@ stt_check_timers (cfs_time_t *last) now = cfs_time_current_sec(); this_slot = now & STTIMER_SLOTTIMEMASK; - cfs_spin_lock(&stt_data.stt_lock); + spin_lock(&stt_data.stt_lock); - while (cfs_time_aftereq(this_slot, *last)) { - expired += stt_expire_list(STTIMER_SLOT(this_slot), now); - this_slot = cfs_time_sub(this_slot, STTIMER_SLOTTIME); - } + while (cfs_time_aftereq(this_slot, *last)) { + expired += stt_expire_list(STTIMER_SLOT(this_slot), now); + this_slot = cfs_time_sub(this_slot, STTIMER_SLOTTIME); + } - *last = now & STTIMER_SLOTTIMEMASK; - cfs_spin_unlock(&stt_data.stt_lock); - return expired; + *last = now & STTIMER_SLOTTIMEMASK; + spin_unlock(&stt_data.stt_lock); + return expired; } #ifdef __KERNEL__ @@ -179,43 +179,38 @@ int stt_timer_main (void *arg) { int rc = 0; - UNUSED(arg); - SET_BUT_UNUSED(rc); - - cfs_daemonize("st_timer"); cfs_block_allsigs(); - while (!stt_data.stt_shuttingdown) { - stt_check_timers(&stt_data.stt_prev_slot); + while (!stt_data.stt_shuttingdown) { + stt_check_timers(&stt_data.stt_prev_slot); - cfs_waitq_wait_event_timeout(stt_data.stt_waitq, - stt_data.stt_shuttingdown, - cfs_time_seconds(STTIMER_SLOTTIME), - rc); - } + rc = wait_event_timeout(stt_data.stt_waitq, + stt_data.stt_shuttingdown, + cfs_time_seconds(STTIMER_SLOTTIME)); + } - cfs_spin_lock(&stt_data.stt_lock); - stt_data.stt_nthreads--; - cfs_spin_unlock(&stt_data.stt_lock); - return 0; + spin_lock(&stt_data.stt_lock); + stt_data.stt_nthreads--; + spin_unlock(&stt_data.stt_lock); + return rc; } int stt_start_timer_thread (void) { - long pid; + cfs_task_t *task; - LASSERT (!stt_data.stt_shuttingdown); + LASSERT(!stt_data.stt_shuttingdown); - pid = cfs_create_thread(stt_timer_main, NULL, 0); - if (pid < 0) - return (int)pid; + task = kthread_run(stt_timer_main, NULL, "st_timer"); + if (IS_ERR(task)) + return PTR_ERR(task); - cfs_spin_lock(&stt_data.stt_lock); - stt_data.stt_nthreads++; - cfs_spin_unlock(&stt_data.stt_lock); - return 0; + spin_lock(&stt_data.stt_lock); + stt_data.stt_nthreads++; + spin_unlock(&stt_data.stt_lock); + return 0; } #else /* !__KERNEL__ */ @@ -243,16 +238,16 @@ stt_startup (void) stt_data.stt_shuttingdown = 0; stt_data.stt_prev_slot = cfs_time_current_sec() & STTIMER_SLOTTIMEMASK; - cfs_spin_lock_init(&stt_data.stt_lock); + spin_lock_init(&stt_data.stt_lock); for (i = 0; i < STTIMER_NSLOTS; i++) CFS_INIT_LIST_HEAD(&stt_data.stt_hash[i]); #ifdef __KERNEL__ - stt_data.stt_nthreads = 0; - cfs_waitq_init(&stt_data.stt_waitq); - rc = stt_start_timer_thread(); - if (rc != 0) - CERROR ("Can't spawn timer thread: %d\n", rc); + stt_data.stt_nthreads = 0; + init_waitqueue_head(&stt_data.stt_waitq); + rc = stt_start_timer_thread(); + if (rc != 0) + CERROR ("Can't spawn timer thread: %d\n", rc); #endif return rc; @@ -263,7 +258,7 @@ stt_shutdown (void) { int i; - cfs_spin_lock(&stt_data.stt_lock); + spin_lock(&stt_data.stt_lock); for (i = 0; i < STTIMER_NSLOTS; i++) LASSERT (cfs_list_empty(&stt_data.stt_hash[i])); @@ -271,12 +266,11 @@ stt_shutdown (void) stt_data.stt_shuttingdown = 1; #ifdef __KERNEL__ - cfs_waitq_signal(&stt_data.stt_waitq); - lst_wait_until(stt_data.stt_nthreads == 0, stt_data.stt_lock, - "waiting for %d threads to terminate\n", - stt_data.stt_nthreads); + wake_up(&stt_data.stt_waitq); + lst_wait_until(stt_data.stt_nthreads == 0, stt_data.stt_lock, + "waiting for %d threads to terminate\n", + stt_data.stt_nthreads); #endif - cfs_spin_unlock(&stt_data.stt_lock); - return; + spin_unlock(&stt_data.stt_lock); }