Whamcloud - gitweb
[tcpnal]:
authorericm <ericm>
Wed, 20 Aug 2003 08:46:12 +0000 (08:46 +0000)
committerericm <ericm>
Wed, 20 Aug 2003 08:46:12 +0000 (08:46 +0000)
  - add nal_cb locking, fix define of state_lock in user space.

12 files changed:
lnet/include/lnet/lib-lnet.h
lnet/include/lnet/lib-p30.h
lnet/ulnds/procapi.c
lnet/ulnds/procbridge.h
lnet/ulnds/proclib.c
lnet/ulnds/socklnd/procapi.c
lnet/ulnds/socklnd/procbridge.h
lnet/ulnds/socklnd/proclib.c
lustre/portals/include/portals/lib-p30.h
lustre/portals/unals/procapi.c
lustre/portals/unals/procbridge.h
lustre/portals/unals/proclib.c

index 2401f22..55fd720 100644 (file)
@@ -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
 
index 2401f22..55fd720 100644 (file)
@@ -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
 
index 724ee74..aa0df62 100644 (file)
@@ -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");
index f65b3bf..317e22f 100644 (file)
 #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 {
index 38bbf28..57aeaad 100644 (file)
@@ -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);
 }
 
 
index 724ee74..aa0df62 100644 (file)
@@ -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");
index f65b3bf..317e22f 100644 (file)
 #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 {
index 38bbf28..57aeaad 100644 (file)
@@ -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);
 }
 
 
index 2401f22..55fd720 100644 (file)
@@ -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
 
index 724ee74..aa0df62 100644 (file)
@@ -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");
index f65b3bf..317e22f 100644 (file)
 #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 {
index 38bbf28..57aeaad 100644 (file)
@@ -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);
 }