* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2012, Intel Corporation.
+ * Copyright (c) 2011, 2013, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
/*
- * Timers are implemented as a sorted queue of expiry times. The queue
- * is slotted, with each slot holding timers which expire in a
- * 2**STTIMER_MINPOLL (8) second period. The timers in each slot are
+ * Timers are implemented as a sorted queue of expiry times. The queue
+ * is slotted, with each slot holding timers which expire in a
+ * 2**STTIMER_MINPOLL (8) second period. The timers in each slot are
* 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_SLOT(t) (&stt_data.stt_hash[(((t) >> STTIMER_MINPOLL) & \
(STTIMER_NSLOTS - 1))])
-struct st_timer_data {
+static struct st_timer_data {
spinlock_t stt_lock;
/* start time of the slot processed previously */
cfs_time_t stt_prev_slot;
struct list_head stt_hash[STTIMER_NSLOTS];
int stt_shuttingdown;
-#ifdef __KERNEL__
wait_queue_head_t stt_waitq;
int stt_nthreads;
-#endif
} stt_data;
void
spin_lock(&stt_data.stt_lock);
-#ifdef __KERNEL__
LASSERT(stt_data.stt_nthreads > 0);
-#endif
LASSERT(!stt_data.stt_shuttingdown);
LASSERT(timer->stt_func != NULL);
LASSERT(list_empty(&timer->stt_list));
spin_lock(&stt_data.stt_lock);
-#ifdef __KERNEL__
LASSERT(stt_data.stt_nthreads > 0);
-#endif
LASSERT(!stt_data.stt_shuttingdown);
if (!list_empty(&timer->stt_list)) {
}
/* called with stt_data.stt_lock held */
-int
+static int
stt_expire_list(struct list_head *slot, cfs_time_t now)
{
int expired = 0;
return expired;
}
-int
+static int
stt_check_timers (cfs_time_t *last)
{
int expired = 0;
return expired;
}
-#ifdef __KERNEL__
-int
+static int
stt_timer_main (void *arg)
{
int rc = 0;
return rc;
}
-int
+static int
stt_start_timer_thread (void)
{
struct task_struct *task;
return 0;
}
-#else /* !__KERNEL__ */
-
-int
-stt_check_events (void)
-{
- return stt_check_timers(&stt_data.stt_prev_slot);
-}
-
-int
-stt_poll_interval (void)
-{
- return STTIMER_SLOTTIME;
-}
-
-#endif
int
stt_startup (void)
for (i = 0; i < STTIMER_NSLOTS; i++)
INIT_LIST_HEAD(&stt_data.stt_hash[i]);
-#ifdef __KERNEL__
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;
}
stt_data.stt_shuttingdown = 1;
-#ifdef __KERNEL__
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
spin_unlock(&stt_data.stt_lock);
}