-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
+ * Copyright (c) 2012, Intel Corporation.
+ *
* Copyright (C) 2006 Myricom, Inc.
*/
/*
for (i = 0; i < npages; i++) {
if (p->mxg_pages[i] != NULL) {
__free_page(p->mxg_pages[i]);
- cfs_spin_lock(&kmxlnd_data.kmx_mem_lock);
- kmxlnd_data.kmx_mem_used -= PAGE_SIZE;
- cfs_spin_unlock(&kmxlnd_data.kmx_mem_lock);
+ spin_lock(&kmxlnd_data.kmx_mem_lock);
+ kmxlnd_data.kmx_mem_used -= PAGE_SIZE;
+ spin_unlock(&kmxlnd_data.kmx_mem_lock);
}
}
mxlnd_free_pages(p);
return -ENOMEM;
}
- cfs_spin_lock(&kmxlnd_data.kmx_mem_lock);
- kmxlnd_data.kmx_mem_used += PAGE_SIZE;
- cfs_spin_unlock(&kmxlnd_data.kmx_mem_lock);
+ spin_lock(&kmxlnd_data.kmx_mem_lock);
+ kmxlnd_data.kmx_mem_used += PAGE_SIZE;
+ spin_unlock(&kmxlnd_data.kmx_mem_lock);
}
*pp = p;
MXLND_MSG_MAGIC, MXLND_CONNECT_TIMEOUT/CFS_HZ*1000,
&kmxlnd_data.kmx_epa);
if (mxret != MX_SUCCESS) {
- CDEBUG(D_NETERROR, "unable to connect to myself (%s)\n", mx_strerror(mxret));
+ CNETERR("unable to connect to myself (%s)\n", mx_strerror(mxret));
goto failed_with_endpoint;
}
* mxlnd_thread_start - spawn a kernel thread with this function
* @fn - function pointer
* @arg - pointer to the parameter data
+ * @name - name of new thread
*
* Returns 0 on success and a negative value on failure
*/
int
-mxlnd_thread_start(int (*fn)(void *arg), void *arg)
+mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
{
- int pid = 0;
+ cfs_task *task;
int i = (int) ((long) arg);
cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
- cfs_init_completion(&kmxlnd_data.kmx_completions[i]);
-
- pid = cfs_kernel_thread (fn, arg, 0);
- if (pid < 0) {
- CERROR("cfs_kernel_thread() failed with %d\n", pid);
- cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
- }
- return pid;
+ init_completion(&kmxlnd_data.kmx_completions[i]);
+
+ task = kthread_run(fn, arg, name);
+ if (IS_ERR(task)) {
+ CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
+ cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
+ }
+ return PTR_ERR(task);
}
/**
{
int i = (int) id;
cfs_atomic_dec (&kmxlnd_data.kmx_nthreads);
- cfs_complete(&kmxlnd_data.kmx_completions[i]);
+ complete(&kmxlnd_data.kmx_completions[i]);
}
/**
/* wakeup request_waitds */
mx_wakeup(kmxlnd_data.kmx_endpt);
- cfs_up(&kmxlnd_data.kmx_tx_queue_sem);
- cfs_up(&kmxlnd_data.kmx_conn_sem);
+ up(&kmxlnd_data.kmx_tx_queue_sem);
+ up(&kmxlnd_data.kmx_conn_sem);
mxlnd_sleep(2 * CFS_HZ);
/* fall through */
CDEBUG(D_NET, "waiting on threads\n");
/* wait for threads to complete */
for (i = 0; i < nthreads; i++) {
- cfs_wait_for_completion(&kmxlnd_data.kmx_completions[i]);
+ wait_for_completion(&kmxlnd_data.kmx_completions[i]);
}
LASSERT(cfs_atomic_read(&kmxlnd_data.kmx_nthreads) == 0);
CDEBUG(D_NET, "freeing completions\n");
MXLND_FREE(kmxlnd_data.kmx_completions,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
/* fall through */
kmxlnd_data.kmx_incarnation = (((__u64)tv.tv_sec) * 1000000) + tv.tv_usec;
CDEBUG(D_NET, "my incarnation is %llu\n", kmxlnd_data.kmx_incarnation);
- cfs_rwlock_init (&kmxlnd_data.kmx_global_lock);
- cfs_spin_lock_init (&kmxlnd_data.kmx_mem_lock);
+ rwlock_init (&kmxlnd_data.kmx_global_lock);
+ spin_lock_init (&kmxlnd_data.kmx_mem_lock);
CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_conn_reqs);
CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_conn_zombies);
CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_orphan_msgs);
- cfs_spin_lock_init (&kmxlnd_data.kmx_conn_lock);
- cfs_sema_init(&kmxlnd_data.kmx_conn_sem, 0);
+ spin_lock_init (&kmxlnd_data.kmx_conn_lock);
+ sema_init(&kmxlnd_data.kmx_conn_sem, 0);
for (i = 0; i < MXLND_HASH_SIZE; i++) {
CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_peers[i]);
}
CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_tx_idle);
- cfs_spin_lock_init (&kmxlnd_data.kmx_tx_idle_lock);
- kmxlnd_data.kmx_tx_next_cookie = 1;
- CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_tx_queue);
- cfs_spin_lock_init (&kmxlnd_data.kmx_tx_queue_lock);
- cfs_sema_init(&kmxlnd_data.kmx_tx_queue_sem, 0);
+ spin_lock_init (&kmxlnd_data.kmx_tx_idle_lock);
+ kmxlnd_data.kmx_tx_next_cookie = 1;
+ CFS_INIT_LIST_HEAD (&kmxlnd_data.kmx_tx_queue);
+ spin_lock_init (&kmxlnd_data.kmx_tx_queue_lock);
+ sema_init(&kmxlnd_data.kmx_tx_queue_sem, 0);
kmxlnd_data.kmx_init = MXLND_INIT_DATA;
/*****************************************************/
/* start threads */
MXLND_ALLOC(kmxlnd_data.kmx_completions,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
if (kmxlnd_data.kmx_completions == NULL) {
CERROR("failed to alloc kmxlnd_data.kmx_completions\n");
goto failed;
}
memset(kmxlnd_data.kmx_completions, 0,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
CDEBUG(D_NET, "using %d %s in mx_wait_any()\n",
*kmxlnd_tunables.kmx_n_waitd,
*kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
+ char name[24];
+ memset(name, 0, sizeof(name));
+ snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
- if (ret < 0) {
- CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
+ if (ret < 0) {
+ CERROR("Starting mxlnd_request_waitd[%d] "
+ "failed with %d\n", i, ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
mx_wakeup(kmxlnd_data.kmx_endpt);
for (--i; i >= 0; i--) {
- cfs_wait_for_completion(&kmxlnd_data.kmx_completions[i]);
+ wait_for_completion(&kmxlnd_data.kmx_completions[i]);
}
LASSERT(cfs_atomic_read(&kmxlnd_data.kmx_nthreads) == 0);
MXLND_FREE(kmxlnd_data.kmx_completions,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
goto failed;
}
}
- ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
+ ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
+ "mxlnd_tx_queued");
if (ret < 0) {
CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
mx_wakeup(kmxlnd_data.kmx_endpt);
for (--i; i >= 0; i--) {
- cfs_wait_for_completion(&kmxlnd_data.kmx_completions[i]);
+ wait_for_completion(&kmxlnd_data.kmx_completions[i]);
}
LASSERT(cfs_atomic_read(&kmxlnd_data.kmx_nthreads) == 0);
MXLND_FREE(kmxlnd_data.kmx_completions,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
goto failed;
}
- ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
+ ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
+ "mxlnd_timeoutd");
if (ret < 0) {
CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
mx_wakeup(kmxlnd_data.kmx_endpt);
- cfs_up(&kmxlnd_data.kmx_tx_queue_sem);
+ up(&kmxlnd_data.kmx_tx_queue_sem);
for (--i; i >= 0; i--) {
- cfs_wait_for_completion(&kmxlnd_data.kmx_completions[i]);
+ wait_for_completion(&kmxlnd_data.kmx_completions[i]);
}
LASSERT(cfs_atomic_read(&kmxlnd_data.kmx_nthreads) == 0);
MXLND_FREE(kmxlnd_data.kmx_completions,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
goto failed;
}
- ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
+ ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
+ "mxlnd_connd");
if (ret < 0) {
CERROR("Starting mxlnd_connd failed with %d\n", ret);
cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
mx_wakeup(kmxlnd_data.kmx_endpt);
- cfs_up(&kmxlnd_data.kmx_tx_queue_sem);
+ up(&kmxlnd_data.kmx_tx_queue_sem);
for (--i; i >= 0; i--) {
- cfs_wait_for_completion(&kmxlnd_data.kmx_completions[i]);
+ wait_for_completion(&kmxlnd_data.kmx_completions[i]);
}
LASSERT(cfs_atomic_read(&kmxlnd_data.kmx_nthreads) == 0);
MXLND_FREE(kmxlnd_data.kmx_completions,
- nthreads * sizeof(cfs_completion_t));
+ nthreads * sizeof(struct completion));
goto failed;
}