- add nal_cb locking, fix define of state_lock in user space.
wh->wh_object_cookie == PTL_WIRE_HANDLE_NONE.wh_object_cookie);
}
-#ifdef __KERNEL__
#define state_lock(nal,flagsp) \
do { \
CDEBUG(D_PORTALS, "taking state lock\n"); \
CDEBUG(D_PORTALS, "releasing state lock\n"); \
nal->cb_sti(nal, flagsp); \
}
-#else
-/* not needed in user space until we thread there */
-#define state_lock(nal,flagsp) \
-do { \
- CDEBUG(D_PORTALS, "taking state lock\n"); \
- CDEBUG(D_PORTALS, "%p:%p\n", nal, flagsp); \
-} while (0)
-
-#define state_unlock(nal,flagsp) \
-{ \
- CDEBUG(D_PORTALS, "releasing state lock\n"); \
- CDEBUG(D_PORTALS, "%p:%p\n", nal, flagsp); \
-}
-#endif /* __KERNEL__ */
#ifndef PTL_USE_SLAB_CACHE
wh->wh_object_cookie == PTL_WIRE_HANDLE_NONE.wh_object_cookie);
}
-#ifdef __KERNEL__
#define state_lock(nal,flagsp) \
do { \
CDEBUG(D_PORTALS, "taking state lock\n"); \
CDEBUG(D_PORTALS, "releasing state lock\n"); \
nal->cb_sti(nal, flagsp); \
}
-#else
-/* not needed in user space until we thread there */
-#define state_lock(nal,flagsp) \
-do { \
- CDEBUG(D_PORTALS, "taking state lock\n"); \
- CDEBUG(D_PORTALS, "%p:%p\n", nal, flagsp); \
-} while (0)
-
-#define state_unlock(nal,flagsp) \
-{ \
- CDEBUG(D_PORTALS, "releasing state lock\n"); \
- CDEBUG(D_PORTALS, "%p:%p\n", nal, flagsp); \
-}
-#endif /* __KERNEL__ */
#ifndef PTL_USE_SLAB_CACHE
args.nia_nal_type = nal_type;
args.nia_bridge = b;
+ /* init procbridge */
pthread_mutex_init(&p->mutex,0);
pthread_cond_init(&p->cond, 0);
p->nal_flags = 0;
+ pthread_mutex_init(&p->nal_cb_lock, 0);
if (pthread_create(&p->t, NULL, nal_thread, &args)) {
perror("nal_init: pthread_create");
#define NAL_FLAG_STOPPED 4
typedef struct procbridge {
+ /* sync between user threads and nal thread */
pthread_t t;
pthread_cond_t cond;
pthread_mutex_t mutex;
int nal_flags;
+
+ pthread_mutex_t nal_cb_lock;
} *procbridge;
typedef struct nal_init_args {
static void nal_cli(nal_cb_t *nal,
unsigned long *flags)
{
+ bridge b = (bridge) nal->nal_data;
+ procbridge p = (procbridge) b->local;
+
+ pthread_mutex_lock(&p->nal_cb_lock);
}
static void nal_sti(nal_cb_t *nal,
unsigned long *flags)
{
+ bridge b = (bridge)nal->nal_data;
+ procbridge p = (procbridge) b->local;
+
+ pthread_mutex_unlock(&p->nal_cb_lock);
}
args.nia_nal_type = nal_type;
args.nia_bridge = b;
+ /* init procbridge */
pthread_mutex_init(&p->mutex,0);
pthread_cond_init(&p->cond, 0);
p->nal_flags = 0;
+ pthread_mutex_init(&p->nal_cb_lock, 0);
if (pthread_create(&p->t, NULL, nal_thread, &args)) {
perror("nal_init: pthread_create");
#define NAL_FLAG_STOPPED 4
typedef struct procbridge {
+ /* sync between user threads and nal thread */
pthread_t t;
pthread_cond_t cond;
pthread_mutex_t mutex;
int nal_flags;
+
+ pthread_mutex_t nal_cb_lock;
} *procbridge;
typedef struct nal_init_args {
static void nal_cli(nal_cb_t *nal,
unsigned long *flags)
{
+ bridge b = (bridge) nal->nal_data;
+ procbridge p = (procbridge) b->local;
+
+ pthread_mutex_lock(&p->nal_cb_lock);
}
static void nal_sti(nal_cb_t *nal,
unsigned long *flags)
{
+ bridge b = (bridge)nal->nal_data;
+ procbridge p = (procbridge) b->local;
+
+ pthread_mutex_unlock(&p->nal_cb_lock);
}
wh->wh_object_cookie == PTL_WIRE_HANDLE_NONE.wh_object_cookie);
}
-#ifdef __KERNEL__
#define state_lock(nal,flagsp) \
do { \
CDEBUG(D_PORTALS, "taking state lock\n"); \
CDEBUG(D_PORTALS, "releasing state lock\n"); \
nal->cb_sti(nal, flagsp); \
}
-#else
-/* not needed in user space until we thread there */
-#define state_lock(nal,flagsp) \
-do { \
- CDEBUG(D_PORTALS, "taking state lock\n"); \
- CDEBUG(D_PORTALS, "%p:%p\n", nal, flagsp); \
-} while (0)
-
-#define state_unlock(nal,flagsp) \
-{ \
- CDEBUG(D_PORTALS, "releasing state lock\n"); \
- CDEBUG(D_PORTALS, "%p:%p\n", nal, flagsp); \
-}
-#endif /* __KERNEL__ */
#ifndef PTL_USE_SLAB_CACHE
args.nia_nal_type = nal_type;
args.nia_bridge = b;
+ /* init procbridge */
pthread_mutex_init(&p->mutex,0);
pthread_cond_init(&p->cond, 0);
p->nal_flags = 0;
+ pthread_mutex_init(&p->nal_cb_lock, 0);
if (pthread_create(&p->t, NULL, nal_thread, &args)) {
perror("nal_init: pthread_create");
#define NAL_FLAG_STOPPED 4
typedef struct procbridge {
+ /* sync between user threads and nal thread */
pthread_t t;
pthread_cond_t cond;
pthread_mutex_t mutex;
int nal_flags;
+
+ pthread_mutex_t nal_cb_lock;
} *procbridge;
typedef struct nal_init_args {
static void nal_cli(nal_cb_t *nal,
unsigned long *flags)
{
+ bridge b = (bridge) nal->nal_data;
+ procbridge p = (procbridge) b->local;
+
+ pthread_mutex_lock(&p->nal_cb_lock);
}
static void nal_sti(nal_cb_t *nal,
unsigned long *flags)
{
+ bridge b = (bridge)nal->nal_data;
+ procbridge p = (procbridge) b->local;
+
+ pthread_mutex_unlock(&p->nal_cb_lock);
}