#include "ptllnd.h"
#ifdef CRAY_XT3
-static struct semaphore ptltrace_mutex;
-static struct semaphore ptltrace_signal;
+static cfs_semaphore_t ptltrace_mutex;
+static cfs_waitq_t ptltrace_debug_ctlwq;
void
kptllnd_ptltrace_to_file(char *filename)
{
static char fname[1024];
- libcfs_daemonize("ptltracedump");
+ libcfs_daemonize("kpt_ptltrace_dump");
/* serialise with other instances of me */
- mutex_down(&ptltrace_mutex);
+ cfs_mutex_down(&ptltrace_mutex);
snprintf(fname, sizeof(fname), "%s.%ld.%ld",
*kptllnd_tunables.kptl_ptltrace_basename,
kptllnd_ptltrace_to_file(fname);
- mutex_up(&ptltrace_mutex);
+ cfs_mutex_up(&ptltrace_mutex);
/* unblock my creator */
- mutex_up(&ptltrace_signal);
-
+ cfs_waitq_signal(&ptltrace_debug_ctlwq);
return 0;
}
void
kptllnd_dump_ptltrace(void)
{
- int rc;
+ int rc;
+ cfs_waitlink_t wait;
+ ENTRY;
- if (!*kptllnd_tunables.kptl_ptltrace_on_timeout)
- return;
+ /* taken from libcfs_debug_dumplog */
+ cfs_waitlink_init(&wait);
+ cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
+ cfs_waitq_add(&ptltrace_debug_ctlwq, &wait);
rc = cfs_kernel_thread(kptllnd_dump_ptltrace_thread,
(void *)(long)cfs_curproc_pid(),
if (rc < 0) {
CERROR("Error %d starting ptltrace dump thread\n", rc);
} else {
- /* block until thread completes */
- mutex_down(&ptltrace_signal);
+ cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
}
-}
-void
-kptllnd_init_ptltrace(void)
-{
- init_mutex(&ptltrace_mutex);
- init_mutex_locked(&ptltrace_signal);
-}
-
-#else
-
-void
-kptllnd_dump_ptltrace(void)
-{
+ /* teardown if cfs_kernel_thread() failed */
+ cfs_waitq_del(&ptltrace_debug_ctlwq, &wait);
+ cfs_set_current_state(CFS_TASK_RUNNING);
+ EXIT;
}
void
kptllnd_init_ptltrace(void)
{
+ cfs_waitq_init(&ptltrace_debug_ctlwq);
+ cfs_init_mutex(&ptltrace_mutex);
}
-
#endif