From 49d0ba0658aa856718f84046df13c58b222e428a Mon Sep 17 00:00:00 2001 From: ericm Date: Wed, 20 Aug 2003 08:46:12 +0000 Subject: [PATCH] [tcpnal]: - add nal_cb locking, fix define of state_lock in user space. --- lnet/include/lnet/lib-lnet.h | 15 --------------- lnet/include/lnet/lib-p30.h | 15 --------------- lnet/ulnds/procapi.c | 2 ++ lnet/ulnds/procbridge.h | 3 +++ lnet/ulnds/proclib.c | 8 ++++++++ lnet/ulnds/socklnd/procapi.c | 2 ++ lnet/ulnds/socklnd/procbridge.h | 3 +++ lnet/ulnds/socklnd/proclib.c | 8 ++++++++ lustre/portals/include/portals/lib-p30.h | 15 --------------- lustre/portals/unals/procapi.c | 2 ++ lustre/portals/unals/procbridge.h | 3 +++ lustre/portals/unals/proclib.c | 8 ++++++++ 12 files changed, 39 insertions(+), 45 deletions(-) diff --git a/lnet/include/lnet/lib-lnet.h b/lnet/include/lnet/lib-lnet.h index 2401f22..55fd720 100644 --- a/lnet/include/lnet/lib-lnet.h +++ b/lnet/include/lnet/lib-lnet.h @@ -30,7 +30,6 @@ static inline int ptl_is_wire_handle_none (ptl_handle_wire_t *wh) 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"); \ @@ -42,20 +41,6 @@ do { \ 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 diff --git a/lnet/include/lnet/lib-p30.h b/lnet/include/lnet/lib-p30.h index 2401f22..55fd720 100644 --- a/lnet/include/lnet/lib-p30.h +++ b/lnet/include/lnet/lib-p30.h @@ -30,7 +30,6 @@ static inline int ptl_is_wire_handle_none (ptl_handle_wire_t *wh) 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"); \ @@ -42,20 +41,6 @@ do { \ 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 diff --git a/lnet/ulnds/procapi.c b/lnet/ulnds/procapi.c index 724ee74..aa0df62 100644 --- a/lnet/ulnds/procapi.c +++ b/lnet/ulnds/procapi.c @@ -189,9 +189,11 @@ nal_t *procbridge_interface(int num_interface, 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"); diff --git a/lnet/ulnds/procbridge.h b/lnet/ulnds/procbridge.h index f65b3bf..317e22f 100644 --- a/lnet/ulnds/procbridge.h +++ b/lnet/ulnds/procbridge.h @@ -20,11 +20,14 @@ #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 { diff --git a/lnet/ulnds/proclib.c b/lnet/ulnds/proclib.c index 38bbf28..57aeaad 100644 --- a/lnet/ulnds/proclib.c +++ b/lnet/ulnds/proclib.c @@ -93,12 +93,20 @@ static void nal_printf(nal_cb_t *nal, 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); } diff --git a/lnet/ulnds/socklnd/procapi.c b/lnet/ulnds/socklnd/procapi.c index 724ee74..aa0df62 100644 --- a/lnet/ulnds/socklnd/procapi.c +++ b/lnet/ulnds/socklnd/procapi.c @@ -189,9 +189,11 @@ nal_t *procbridge_interface(int num_interface, 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"); diff --git a/lnet/ulnds/socklnd/procbridge.h b/lnet/ulnds/socklnd/procbridge.h index f65b3bf..317e22f 100644 --- a/lnet/ulnds/socklnd/procbridge.h +++ b/lnet/ulnds/socklnd/procbridge.h @@ -20,11 +20,14 @@ #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 { diff --git a/lnet/ulnds/socklnd/proclib.c b/lnet/ulnds/socklnd/proclib.c index 38bbf28..57aeaad 100644 --- a/lnet/ulnds/socklnd/proclib.c +++ b/lnet/ulnds/socklnd/proclib.c @@ -93,12 +93,20 @@ static void nal_printf(nal_cb_t *nal, 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); } diff --git a/lustre/portals/include/portals/lib-p30.h b/lustre/portals/include/portals/lib-p30.h index 2401f22..55fd720 100644 --- a/lustre/portals/include/portals/lib-p30.h +++ b/lustre/portals/include/portals/lib-p30.h @@ -30,7 +30,6 @@ static inline int ptl_is_wire_handle_none (ptl_handle_wire_t *wh) 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"); \ @@ -42,20 +41,6 @@ do { \ 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 diff --git a/lustre/portals/unals/procapi.c b/lustre/portals/unals/procapi.c index 724ee74..aa0df62 100644 --- a/lustre/portals/unals/procapi.c +++ b/lustre/portals/unals/procapi.c @@ -189,9 +189,11 @@ nal_t *procbridge_interface(int num_interface, 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"); diff --git a/lustre/portals/unals/procbridge.h b/lustre/portals/unals/procbridge.h index f65b3bf..317e22f 100644 --- a/lustre/portals/unals/procbridge.h +++ b/lustre/portals/unals/procbridge.h @@ -20,11 +20,14 @@ #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 { diff --git a/lustre/portals/unals/proclib.c b/lustre/portals/unals/proclib.c index 38bbf28..57aeaad 100644 --- a/lustre/portals/unals/proclib.c +++ b/lustre/portals/unals/proclib.c @@ -93,12 +93,20 @@ static void nal_printf(nal_cb_t *nal, 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); } -- 1.8.3.1