Lots of build fixes. This is turning out to be a very good

idea since it forcefully codifing the ABI.  Since the shim
layer is no longer linked at build time in to the test suite
we can;'t cut any corners and get away with it.

Everything is working now with the exception of sorting
setting Module.symvers properly.  This may take a little
Makefile reorg.



git-svn-id: https://outreach.scidac.gov/svn/spl/trunk@5 7e1ea52c-4ff2-0310-8f11-9dd32ca42a1c
This commit is contained in:
behlendo 2008-02-27 19:09:51 +00:00
parent 3d4ea0ced6
commit f1b59d2620
30 changed files with 182 additions and 120 deletions

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_CALLB_H #ifndef _SOLARIS_CALLB_H
#define _LINUX_CALLB_H #define _SOLARIS_CALLB_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux-mutex.h> #include <linux-mutex.h>
#define DEBUG_CALLB #define DEBUG_CALLB
@ -41,5 +42,5 @@ typedef struct callb_cpr {
} }
#endif #endif
#endif /* _LINUX_CALLB_H */ #endif /* _SOLARIS_CALLB_H */

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_CONDVAR_H #ifndef _SOLARIS_CONDVAR_H
#define _LINUX_CONDVAR_H #define _SOLARIS_CONDVAR_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux/wait.h> #include <linux/wait.h>
/* The kcondvar_t struct is protected by mutex taken externally before /* The kcondvar_t struct is protected by mutex taken externally before
@ -198,4 +199,4 @@ cv_broadcast(kcondvar_t *cvp)
if (atomic_read(&cvp->cv_waiters) > 0) if (atomic_read(&cvp->cv_waiters) > 0)
wake_up_all(&cvp->cv_event); wake_up_all(&cvp->cv_event);
} }
#endif /* _LINUX_CONDVAR_H */ #endif /* _SOLARIS_CONDVAR_H */

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_CRED_H #ifndef _SOLARIS_CRED_H
#define _LINUX_CRED_H #define _SOLARIS_CRED_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux/types.h> #include <linux/types.h>
/* XXX - Portions commented out because we really just want to have the type /* XXX - Portions commented out because we really just want to have the type
@ -36,5 +37,5 @@ typedef struct cred {
} }
#endif #endif
#endif /* _LINUX_CRED_H */ #endif /* _SOLARIS_CRED_H */

View File

@ -1,10 +1,12 @@
#ifndef _LINUX_GENERIC_H #ifndef _SOLARIS_GENERIC_H
#define _LINUX_GENERIC_H #define _SOLARIS_GENERIC_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
/* Missing defines. /* Missing defines.
*/ */
#define INT32_MAX INT_MAX #define INT32_MAX INT_MAX
@ -14,7 +16,7 @@ extern "C" {
#define MAXNAMELEN 256 #define MAXNAMELEN 256
#define MAXPATHLEN PATH_MAX #define MAXPATHLEN PATH_MAX
#define __va_list va_list #define __va_list va_list
#define _KERNEL 1 #define _KERNEL __KERNEL__
#define max_ncpus 64 #define max_ncpus 64
/* 0..MAX_PRIO-1: Process priority /* 0..MAX_PRIO-1: Process priority
@ -63,10 +65,10 @@ extern "C" {
/* Missing globals /* Missing globals
*/ */
static int p0 = 0; extern int p0;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* _LINUX_GENERIC_H */ #endif /* _SOLARIS_GENERIC_H */

View File

@ -1,5 +1,5 @@
#ifndef _LINUX_KMEM_H #ifndef _SOLARIS_KMEM_H
#define _LINUX_KMEM_H #define _SOLARIS_KMEM_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -8,6 +8,7 @@ extern "C" {
#undef DEBUG_KMEM #undef DEBUG_KMEM
#undef DEBUG_KMEM_UNIMPLEMENTED #undef DEBUG_KMEM_UNIMPLEMENTED
#include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
@ -147,15 +148,18 @@ typedef int (*kmem_constructor_t)(void *, void *, int);
typedef void (*kmem_destructor_t)(void *, void *); typedef void (*kmem_destructor_t)(void *, void *);
typedef void (*kmem_reclaim_t)(void *); typedef void (*kmem_reclaim_t)(void *);
kmem_cache_t * extern kmem_cache_t *
__kmem_cache_create(char *name, size_t size, size_t align, __kmem_cache_create(char *name, size_t size, size_t align,
int (*constructor)(void *, void *, int), kmem_constructor_t constructor,
void (*destructor)(void *, void *), kmem_destructor_t destructor,
void (*reclaim)(void *), kmem_reclaim_t reclaim,
void *priv, void *vmp, int flags); void *priv, void *vmp, int flags);
void void
__kmem_cache_destroy(kmem_cache_t *cache); extern __kmem_cache_destroy(kmem_cache_t *cache);
void
extern __kmem_reap(void);
#define kmem_cache_create(name,size,align,ctor,dtor,rclm,priv,vmp,flags) \ #define kmem_cache_create(name,size,align,ctor,dtor,rclm,priv,vmp,flags) \
__kmem_cache_create(name,size,align,ctor,dtor,rclm,priv,vmp,flags) __kmem_cache_create(name,size,align,ctor,dtor,rclm,priv,vmp,flags)
@ -163,11 +167,10 @@ __kmem_cache_destroy(kmem_cache_t *cache);
#define kmem_cache_alloc(cache, flags) kmem_cache_alloc(cache, flags) #define kmem_cache_alloc(cache, flags) kmem_cache_alloc(cache, flags)
#define kmem_cache_free(cache, ptr) kmem_cache_free(cache, ptr) #define kmem_cache_free(cache, ptr) kmem_cache_free(cache, ptr)
#define kmem_cache_reap_now(cache) kmem_cache_shrink(cache) #define kmem_cache_reap_now(cache) kmem_cache_shrink(cache)
#define kmem_reap() __kmem_reap() #define kmem_reap() __kmem_reap()
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* _LINUX_KMEM_H */ #endif /* _SOLARIS_KMEM_H */

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_KSTAT_H #ifndef _SOLARIS_KSTAT_H
#define _LINUX_KSTAT_H #define _SOLARIS_KSTAT_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux-types.h> #include <linux-types.h>
/* XXX - The minimum functionality here is stubbed out but nothing works. */ /* XXX - The minimum functionality here is stubbed out but nothing works. */
@ -132,5 +133,5 @@ kstat_delete(kstat_t *ksp)
} }
#endif #endif
#endif /* _LINUX_KSTAT_H */ #endif /* _SOLARIS_KSTAT_H */

View File

@ -1,10 +1,12 @@
#ifndef _LINUX_MUTEX_H #ifndef _SOLARIS_MUTEX_H
#define _LINUX_MUTEX_H #define _SOLARIS_MUTEX_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
/* See the "Big Theory Statement" in solaris mutex.c. /* See the "Big Theory Statement" in solaris mutex.c.
* *
* Spin mutexes apparently aren't needed by zfs so we assert * Spin mutexes apparently aren't needed by zfs so we assert
@ -115,4 +117,4 @@ mutex_owner(kmutex_t *mp)
} }
#endif #endif
#endif /* _LINUX_MUTEX_H */ #endif /* _SOLARIS_MUTEX_H */

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_RANDOM_H #ifndef _SOLARIS_RANDOM_H
#define _LINUX_RANDOM_H #define _SOLARIS_RANDOM_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux/random.h> #include <linux/random.h>
/* FIXME: /* FIXME:
@ -34,4 +35,4 @@ random_get_pseudo_bytes(uint8_t *ptr, size_t len)
} }
#endif #endif
#endif /* _LINUX_RANDOM_H */ #endif /* _SOLARIS_RANDOM_H */

View File

@ -1,6 +1,7 @@
#ifndef _LINUX_RWLOCK_H #ifndef _SOLARIS_RWLOCK_H
#define _LINUX_RWLOCK_H #define _SOLARIS_RWLOCK_H
#include <linux/module.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/rwsem.h> #include <linux/rwsem.h>
#include <asm/current.h> #include <asm/current.h>
@ -32,7 +33,7 @@ typedef struct {
int rw_magic; int rw_magic;
char *rw_name; char *rw_name;
struct rw_semaphore rw_sem; struct rw_semaphore rw_sem;
struct task_struct *rw_owner; /* holder of the write lock */ struct task_struct *rw_owner; /* holder of the write lock */
} krwlock_t; } krwlock_t;
static __inline__ void static __inline__ void
@ -220,4 +221,4 @@ rw_owner(krwlock_t *rwlp)
} }
#endif #endif
#endif /* _LINUX_RWLOCK_H */ #endif /* _SOLARIS_RWLOCK_H */

View File

@ -1,5 +1,5 @@
#ifndef _LINUX_TASKQ_H #ifndef _SOLARIS_TASKQ_H
#define _LINUX_TASKQ_H #define _SOLARIS_TASKQ_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -19,6 +19,7 @@ extern "C" {
* forces us to implement dynamic workqueues. Which is all very doable * forces us to implement dynamic workqueues. Which is all very doable
* with a little effort. * with a little effort.
*/ */
#include <linux/module.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/gfp.h> #include <linux/gfp.h>
#include <linux/slab.h> #include <linux/slab.h>
@ -83,4 +84,4 @@ extern taskq_t *__taskq_create(const char *, int, pri_t, int, int, uint_t);
} }
#endif #endif
#endif /* _LINUX_TASKQ_H */ #endif /* _SOLARIS_TASKQ_H */

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_THREAD_H #ifndef _SOLARIS_THREAD_H
#define _LINUX_THREAD_H #define _SOLARIS_THREAD_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux-types.h> #include <linux-types.h>
@ -35,14 +36,15 @@ typedef struct proc_s {
int foo; int foo;
} proc_t; } proc_t;
kthread_t * __thread_create(caddr_t stk, size_t stksize, extern kthread_t *__thread_create(caddr_t stk, size_t stksize,
void (*proc)(void *), void *args, void (*proc)(void *), void *args,
size_t len, proc_t *pp, int state, size_t len, proc_t *pp, int state,
pri_t pri); pri_t pri);
extern void __thread_exit(void);
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif /* _LINUX_THREAD_H */ #endif /* _SOLARIS_THREAD_H */

View File

@ -1,7 +1,5 @@
#ifndef _TIME_H #ifndef _SOLARIS_TIME_H
#define _TIME_H #define _SOLARIS_TIME_H
#pragma ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.16 */
/* /*
* Structure returned by gettimeofday(2) system call, * Structure returned by gettimeofday(2) system call,
@ -12,6 +10,7 @@
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux/time.h> #include <linux/time.h>
#include <linux-types.h> #include <linux-types.h>
@ -61,4 +60,4 @@ gethrestime_sec(void)
} }
#endif #endif
#endif /* _TIME_H */ #endif /* _SOLARIS_TIME_H */

View File

@ -1,10 +1,11 @@
#ifndef _LINUX_TIMER_H #ifndef _SOLARIS_TIMER_H
#define _LINUX_TIMER_H #define _SOLARIS_TIMER_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/timer.h> #include <linux/timer.h>
@ -17,5 +18,5 @@ extern "C" {
} }
#endif #endif
#endif /* _LINUX_TIMER_H */ #endif /* _SOLARIS_TIMER_H */

View File

@ -1,5 +1,5 @@
#ifndef _LINUX_TYPES_H #ifndef _SOLARIS_TYPES_H
#define _LINUX_TYPES_H #define _SOLARIS_TYPES_H
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -24,4 +24,4 @@ typedef short pri_t;
} }
#endif #endif
#endif /* _LINUX_TYPES_H */ #endif /* _SOLARIS_TYPES_H */

View File

@ -1,11 +1,40 @@
#ifndef _SPLAT_CTL_H #ifndef _SPLAT_CTL_H
#define _SPLAY_CTL_H #define _SPLAT_CTL_H
#ifdef _KERNEL #ifdef __KERNEL__
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/elf.h>
#include <linux/limits.h>
#include <linux/version.h>
#include <linux/vmalloc.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/list.h>
#include <asm/ioctls.h> #include <asm/ioctls.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <linux/list.h> #include <stdarg.h>
#endif /* _KERNEL */
#include <linux-generic.h>
#include <linux-types.h>
#include <linux-kmem.h>
#include <linux-mutex.h>
#include <linux-condvar.h>
#include <linux-random.h>
#include <linux-thread.h>
#include <linux-taskq.h>
#include <linux-rwlock.h>
#include <linux-timer.h>
#include <linux-time.h>
#include <linux-cred.h>
#include <linux-kstat.h>
#include <linux-callb.h>
#endif /* __KERNEL__ */
#define KZT_VERSION "v1.0" #define KZT_VERSION "v1.0"
#define KZT_VERSION_SIZE 64 #define KZT_VERSION_SIZE 64
@ -70,7 +99,7 @@ typedef struct kzt_cmd {
#define KZT_TEST_UNKNOWN 0xFFF #define KZT_TEST_UNKNOWN 0xFFF
#ifdef _KERNEL #ifdef __KERNEL__
#define KZT_SUBSYSTEM_INIT(type) \ #define KZT_SUBSYSTEM_INIT(type) \
({ kzt_subsystem_t *_sub_; \ ({ kzt_subsystem_t *_sub_; \
\ \
@ -79,7 +108,7 @@ typedef struct kzt_cmd {
printk(KERN_ERR "Error initializing: " #type "\n"); \ printk(KERN_ERR "Error initializing: " #type "\n"); \
} else { \ } else { \
spin_lock(&kzt_module_lock); \ spin_lock(&kzt_module_lock); \
list_add_tail(&(_sub_->subsystem_list), \ list_add_tail(&(_sub_->subsystem_list), \
&kzt_module_list); \ &kzt_module_list); \
spin_unlock(&kzt_module_lock); \ spin_unlock(&kzt_module_lock); \
} \ } \
@ -92,10 +121,10 @@ typedef struct kzt_cmd {
_id_ = kzt_##type##_id(); \ _id_ = kzt_##type##_id(); \
spin_lock(&kzt_module_lock); \ spin_lock(&kzt_module_lock); \
list_for_each_entry_safe(_sub_, _tmp_, &kzt_module_list, \ list_for_each_entry_safe(_sub_, _tmp_, &kzt_module_list, \
subsystem_list) { \ subsystem_list) { \
if (_sub_->desc.id == _id_) { \ if (_sub_->desc.id == _id_) { \
list_del_init(&(_sub_->subsystem_list)); \ list_del_init(&(_sub_->subsystem_list)); \
spin_unlock(&kzt_module_lock); \ spin_unlock(&kzt_module_lock); \
kzt_##type##_fini(_sub_); \ kzt_##type##_fini(_sub_); \
spin_lock(&kzt_module_lock); \ spin_lock(&kzt_module_lock); \
_flag_ = 1; \ _flag_ = 1; \
@ -128,7 +157,7 @@ typedef struct kzt_cmd {
#define KZT_TEST_FINI(sub, tid) \ #define KZT_TEST_FINI(sub, tid) \
({ kzt_test_t *_test_, *_tmp_; \ ({ kzt_test_t *_test_, *_tmp_; \
int _flag_ = 0; \ int _flag_ = 0; \
\ \
spin_lock(&((sub)->test_lock)); \ spin_lock(&((sub)->test_lock)); \
list_for_each_entry_safe(_test_, _tmp_, \ list_for_each_entry_safe(_test_, _tmp_, \
@ -141,7 +170,7 @@ typedef struct kzt_cmd {
spin_unlock(&((sub)->test_lock)); \ spin_unlock(&((sub)->test_lock)); \
\ \
if (!_flag_) \ if (!_flag_) \
printk(KERN_ERR "Error finalizing: " #tid "\n"); \ printk(KERN_ERR "Error finalizing: " #tid "\n"); \
}) })
typedef int (*kzt_test_func_t)(struct file *, void *); typedef int (*kzt_test_func_t)(struct file *, void *);
@ -181,7 +210,7 @@ typedef struct kzt_info {
spin_lock(&_info_->info_lock); \ spin_lock(&_info_->info_lock); \
\ \
/* Don't allow the kernel to start a write in the red zone */ \ /* Don't allow the kernel to start a write in the red zone */ \
if ((int)(_info_->info_head - _info_->info_buffer) > \ if ((int)(_info_->info_head - _info_->info_buffer) > \
(KZT_INFO_BUFFER_SIZE -KZT_INFO_BUFFER_REDZONE)) { \ (KZT_INFO_BUFFER_SIZE -KZT_INFO_BUFFER_REDZONE)) { \
_rc_ = -EOVERFLOW; \ _rc_ = -EOVERFLOW; \
} else { \ } else { \
@ -206,6 +235,24 @@ kzt_subsystem_t * kzt_taskq_init(void);
kzt_subsystem_t * kzt_thread_init(void); kzt_subsystem_t * kzt_thread_init(void);
kzt_subsystem_t * kzt_time_init(void); kzt_subsystem_t * kzt_time_init(void);
#endif /* _KERNEL */ void kzt_condvar_fini(kzt_subsystem_t *);
void kzt_kmem_fini(kzt_subsystem_t *);
void kzt_mutex_fini(kzt_subsystem_t *);
void kzt_krng_fini(kzt_subsystem_t *);
void kzt_rwlock_fini(kzt_subsystem_t *);
void kzt_taskq_fini(kzt_subsystem_t *);
void kzt_thread_fini(kzt_subsystem_t *);
void kzt_time_fini(kzt_subsystem_t *);
#endif /* _SPLAY_CTL_H */ int kzt_condvar_id(void);
int kzt_kmem_id(void);
int kzt_mutex_id(void);
int kzt_krng_id(void);
int kzt_rwlock_id(void);
int kzt_taskq_id(void);
int kzt_thread_id(void);
int kzt_time_id(void);
#endif /* __KERNEL__ */
#endif /* _SPLAT_CTL_H */

View File

@ -2,7 +2,8 @@
MODULES := spl MODULES := spl
DISTFILES = Makefile.in \ DISTFILES = Makefile.in \
linux-kmem.c linux-rwlock.c linux-taskq.c linux-thread.c linux-kmem.c linux-rwlock.c linux-taskq.c \
linux-thread.c linux-generic.c
CPPFLAGS += @KERNELCPPFLAGS@ CPPFLAGS += @KERNELCPPFLAGS@
# Solaris porting layer module # Solaris porting layer module

8
src/spl/linux-generic.c Normal file
View File

@ -0,0 +1,8 @@
#include "linux-generic.h"
/*
* Generic support
*/
int p0 = 0;
EXPORT_SYMBOL(p0);

View File

@ -172,9 +172,9 @@ kmem_cache_generic_shrinker(int nr_to_scan, unsigned int gfp_mask)
kmem_cache_t * kmem_cache_t *
__kmem_cache_create(char *name, size_t size, size_t align, __kmem_cache_create(char *name, size_t size, size_t align,
int (*constructor)(void *, void *, int), kmem_constructor_t constructor,
void (*destructor)(void *, void *), kmem_destructor_t destructor,
void (*reclaim)(void *), kmem_reclaim_t reclaim,
void *priv, void *vmp, int flags) void *priv, void *vmp, int flags)
{ {
kmem_cache_t *cache; kmem_cache_t *cache;
@ -216,6 +216,7 @@ __kmem_cache_create(char *name, size_t size, size_t align,
return cache; return cache;
} }
EXPORT_SYMBOL(__kmem_cache_create);
/* Return codes discarded because Solaris implementation has void return */ /* Return codes discarded because Solaris implementation has void return */
void void
@ -239,6 +240,7 @@ __kmem_cache_destroy(kmem_cache_t *cache)
spin_unlock(&kmem_cache_cb_lock); spin_unlock(&kmem_cache_cb_lock);
} }
EXPORT_SYMBOL(__kmem_cache_destroy);
void void
__kmem_reap(void) { __kmem_reap(void) {
@ -246,4 +248,4 @@ __kmem_reap(void) {
* shrinkers to run we just run the ones registered for this shim */ * shrinkers to run we just run the ones registered for this shim */
kmem_cache_generic_shrinker(KMC_REAP_CHUNK, GFP_KERNEL); kmem_cache_generic_shrinker(KMC_REAP_CHUNK, GFP_KERNEL);
} }
EXPORT_SYMBOL(__kmem_reap);

View File

@ -1,4 +1,4 @@
#include <sys/linux-rwlock.h> #include <linux-rwlock.h>
int int
rw_lock_held(krwlock_t *rwlp) rw_lock_held(krwlock_t *rwlp)

View File

@ -1,4 +1,4 @@
#include <sys/linux-taskq.h> #include <linux-taskq.h>
/* /*
* Task queue interface * Task queue interface
@ -58,6 +58,7 @@ __taskq_dispatch(taskq_t *tq, task_func_t func, void *priv, uint_t flags)
return (taskqid_t)wq; return (taskqid_t)wq;
} }
EXPORT_SYMBOL(__taskq_dispatch);
/* XXX - Most args ignored until we decide if it's worth the effort /* XXX - Most args ignored until we decide if it's worth the effort
* to emulate the solaris notion of dynamic thread pools. For * to emulate the solaris notion of dynamic thread pools. For
@ -76,3 +77,4 @@ __taskq_create(const char *name, int nthreads, pri_t pri,
return create_singlethread_workqueue(name); return create_singlethread_workqueue(name);
} }
EXPORT_SYMBOL(__taskq_create);

View File

@ -15,7 +15,7 @@ typedef struct thread_priv_s {
wait_queue_head_t tp_waitq; /* Syncronization wait queue */ wait_queue_head_t tp_waitq; /* Syncronization wait queue */
} thread_priv_t; } thread_priv_t;
int static int
thread_generic_wrapper(void *arg) thread_generic_wrapper(void *arg)
{ {
thread_priv_t *tp = (thread_priv_t *)arg; thread_priv_t *tp = (thread_priv_t *)arg;
@ -53,6 +53,7 @@ __thread_exit(void)
{ {
return; return;
} }
EXPORT_SYMBOL(__thread_exit);
/* thread_create() may block forever if it cannot create a thread or /* thread_create() may block forever if it cannot create a thread or
* allocate memory. This is preferable to returning a NULL which Solaris * allocate memory. This is preferable to returning a NULL which Solaris
@ -63,7 +64,6 @@ __thread_create(caddr_t stk, size_t stksize, void (*proc)(void *),
{ {
thread_priv_t tp; thread_priv_t tp;
DEFINE_WAIT(wait); DEFINE_WAIT(wait);
kthread_t *task;
long pid; long pid;
/* Option pp is simply ignored */ /* Option pp is simply ignored */
@ -111,3 +111,4 @@ __thread_create(caddr_t stk, size_t stksize, void (*proc)(void *),
return (kthread_t *)tp.tp_task; return (kthread_t *)tp.tp_task;
} }
EXPORT_SYMBOL(__thread_create);

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_CONDVAR 0x0500 #define KZT_SUBSYSTEM_CONDVAR 0x0500
#define KZT_CONDVAR_NAME "condvar" #define KZT_CONDVAR_NAME "condvar"

View File

@ -19,13 +19,7 @@
* Author: Brian Behlendorf * Author: Brian Behlendorf
*/ */
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#include <linux/version.h>
#include <linux/vmalloc.h>
#include <linux/module.h>
#include <linux/device.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
#include <linux/devfs_fs_kernel.h> #include <linux/devfs_fs_kernel.h>
@ -233,7 +227,7 @@ kzt_test_count(kzt_cfg_t *kcfg, unsigned long arg)
{ {
kzt_subsystem_t *sub; kzt_subsystem_t *sub;
kzt_test_t *test; kzt_test_t *test;
int rc, i = 0; int i = 0;
/* Subsystem ID passed as arg1 */ /* Subsystem ID passed as arg1 */
sub = kzt_subsystem_find(kcfg->cfg_arg1); sub = kzt_subsystem_find(kcfg->cfg_arg1);
@ -259,7 +253,7 @@ kzt_test_list(kzt_cfg_t *kcfg, unsigned long arg)
kzt_subsystem_t *sub; kzt_subsystem_t *sub;
kzt_test_t *test; kzt_test_t *test;
kzt_cfg_t *tmp; kzt_cfg_t *tmp;
int size, rc, i = 0; int size, i = 0;
/* Subsystem ID passed as arg1 */ /* Subsystem ID passed as arg1 */
sub = kzt_subsystem_find(kcfg->cfg_arg1); sub = kzt_subsystem_find(kcfg->cfg_arg1);
@ -309,7 +303,6 @@ static int
kzt_validate(struct file *file, kzt_subsystem_t *sub, int cmd, void *arg) kzt_validate(struct file *file, kzt_subsystem_t *sub, int cmd, void *arg)
{ {
kzt_test_t *test; kzt_test_t *test;
int rc = 0;
spin_lock(&(sub->test_lock)); spin_lock(&(sub->test_lock));
list_for_each_entry(test, &(sub->test_list), test_list) { list_for_each_entry(test, &(sub->test_list), test_list) {
@ -432,7 +425,8 @@ static int
kzt_ioctl(struct inode *inode, struct file *file, kzt_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
int minor, rc = 0; unsigned int minor = iminor(file->f_dentry->d_inode);
int rc = 0;
/* Ignore tty ioctls */ /* Ignore tty ioctls */
if ((cmd & 0xffffff00) == ((int)'T') << 8) if ((cmd & 0xffffff00) == ((int)'T') << 8)
@ -588,7 +582,7 @@ static int __init
kzt_init(void) kzt_init(void)
{ {
dev_t dev; dev_t dev;
int i, rc; int rc;
spin_lock_init(&kzt_module_lock); spin_lock_init(&kzt_module_lock);
INIT_LIST_HEAD(&kzt_module_list); INIT_LIST_HEAD(&kzt_module_list);
@ -603,7 +597,7 @@ kzt_init(void)
KZT_SUBSYSTEM_INIT(time); KZT_SUBSYSTEM_INIT(time);
dev = MKDEV(KZT_MAJOR, 0); dev = MKDEV(KZT_MAJOR, 0);
if (rc = register_chrdev_region(dev, KZT_MINORS, "kztctl")) if ((rc = register_chrdev_region(dev, KZT_MINORS, "kztctl")))
goto error; goto error;
/* Support for registering a character driver */ /* Support for registering a character driver */
@ -648,7 +642,6 @@ static void
kzt_fini(void) kzt_fini(void)
{ {
dev_t dev = MKDEV(KZT_MAJOR, 0); dev_t dev = MKDEV(KZT_MAJOR, 0);
int i;
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18)
class_simple_device_remove(dev); class_simple_device_remove(dev);

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_KMEM 0x0100 #define KZT_SUBSYSTEM_KMEM 0x0100
#define KZT_KMEM_NAME "kmem" #define KZT_KMEM_NAME "kmem"
@ -229,7 +228,7 @@ kzt_kmem_test3(struct file *file, void *arg)
out_free: out_free:
if (kcd) if (kcd)
kmem_cache_free(cache, kcd); kmem_cache_free(cache, kcd);
out_destroy:
kmem_cache_destroy(cache); kmem_cache_destroy(cache);
return rc; return rc;
} }
@ -279,7 +278,7 @@ kzt_kmem_test4(struct file *file, void *arg)
kcp.kcp_cache = cache; kcp.kcp_cache = cache;
for (i = 0; i < KZT_KMEM_OBJ_COUNT; i++) { for (i = 0; i < KZT_KMEM_OBJ_COUNT; i++) {
/* All allocations need not succeed */ /* All allocations need not succeed */
kcp.kcp_kcd[i] = kmem_cache_alloc(cache, 0); kcp.kcp_kcd[i] = kmem_cache_alloc(cache, 0);
if (!kcp.kcp_kcd[i]) { if (!kcp.kcp_kcd[i]) {
kzt_vprint(file, KZT_KMEM_TEST4_NAME, kzt_vprint(file, KZT_KMEM_TEST4_NAME,

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_MUTEX 0x0400 #define KZT_SUBSYSTEM_MUTEX 0x0400
#define KZT_MUTEX_NAME "mutex" #define KZT_MUTEX_NAME "mutex"

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_KRNG 0x0300 #define KZT_SUBSYSTEM_KRNG 0x0300
#define KZT_KRNG_NAME "krng" #define KZT_KRNG_NAME "krng"

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_RWLOCK 0x0700 #define KZT_SUBSYSTEM_RWLOCK 0x0700
#define KZT_RWLOCK_NAME "rwlock" #define KZT_RWLOCK_NAME "rwlock"

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_TASKQ 0x0200 #define KZT_SUBSYSTEM_TASKQ 0x0200
#define KZT_TASKQ_NAME "taskq" #define KZT_TASKQ_NAME "taskq"

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_THREAD 0x0600 #define KZT_SUBSYSTEM_THREAD 0x0600
#define KZT_THREAD_NAME "thread" #define KZT_THREAD_NAME "thread"

View File

@ -1,5 +1,4 @@
#include <sys/zfs_context.h> #include <splat-ctl.h>
#include <sys/splat-ctl.h>
#define KZT_SUBSYSTEM_TIME 0x0800 #define KZT_SUBSYSTEM_TIME 0x0800
#define KZT_TIME_NAME "time" #define KZT_TIME_NAME "time"