With this patch i can run kdapltest -T T ... -t 4 -w 8 ...
I still see problems but in general this patch helps the stability a lot.

replace spin_lock with spin_lock_irqsave in kdapltest
Signed-off-by: Itamar Rabenstein <[EMAIL PROTECTED]>

Index: test/dapl_transaction_stats.c
===================================================================
--- test/dapl_transaction_stats.c       (revision 2509)
+++ test/dapl_transaction_stats.c       (working copy)
@@ -45,12 +45,13 @@
 DT_transaction_stats_set_ready (DT_Tdep_Print_Head *phead, 
                                Transaction_Stats_t * transaction_stats)
 {
-    DT_Mdep_Lock (&transaction_stats->lock);
+       unsigned long flags;
+    spin_lock_irqsave (&transaction_stats->lock,flags);
     transaction_stats->wait_count--;
 
     DT_Tdep_PT_Debug (1,(phead,"Received Sync Message from server (%d left)\n",
                    transaction_stats->wait_count));
-    DT_Mdep_Unlock (&transaction_stats->lock);
+    spin_unlock_irqrestore (&transaction_stats->lock,flags);
 }
 
 boolean_t
@@ -86,7 +87,8 @@
                       unsigned int bytes_rdma_read,
                       unsigned int bytes_rdma_write)
 {
-    DT_Mdep_Lock (&transaction_stats->lock);
+       unsigned long flags;
+    spin_lock_irqsave (&transaction_stats->lock,flags);
 
     /* look for the longest time... */
     if (time_ms > transaction_stats->time_ms)
@@ -99,5 +101,5 @@
     transaction_stats->bytes_recv += bytes_recv;
     transaction_stats->bytes_rdma_read += bytes_rdma_read;
     transaction_stats->bytes_rdma_write += bytes_rdma_write;
-    DT_Mdep_Unlock (&transaction_stats->lock);
+    spin_unlock_irqrestore (&transaction_stats->lock,flags);
 }
Index: test/dapl_server.c
===================================================================
--- test/dapl_server.c  (revision 2509)
+++ test/dapl_server.c  (working copy)
@@ -49,7 +49,7 @@
     unsigned char       *buffp          = NULL;
     unsigned char       *module         = "DT_cs_Server";
     int                status          = 0;
-
+       unsigned long flags;
     DAT_DTO_COOKIE     dto_cookie;
     struct dat_dto_completion_event_data dto_stat;
     u32          ret;
@@ -616,9 +616,9 @@
 
 
        /* Count this new client and get ready for the next */
-       DT_Mdep_Lock (&ps_ptr->num_clients_lock);
+       spin_lock_irqsave (&ps_ptr->num_clients_lock,flags);
        ps_ptr->num_clients++;
-       DT_Mdep_Unlock (&ps_ptr->num_clients_lock);
+       spin_unlock_irqrestore (&ps_ptr->num_clients_lock,flags);
 
        /* we passed the pt_ptr to the thread and must now 'forget' it */
        pt_ptr = NULL;
Index: test/dapl_thread.c
===================================================================
--- test/dapl_thread.c  (revision 2509)
+++ test/dapl_thread.c  (working copy)
@@ -83,6 +83,7 @@
              unsigned int stacksize)
 {
     Thread         *thread_ptr;
+       unsigned long flags;
     thread_ptr = (Thread *) DT_MemListAlloc (pt_ptr, "thread.c", THREAD, 
sizeof (Thread));
     if (thread_ptr == NULL)
     {
@@ -93,9 +94,9 @@
     thread_ptr->thread_handle = 0;
     thread_ptr->stacksize = stacksize;
 
-    DT_Mdep_Lock (&pt_ptr->Thread_counter_lock);
+    spin_lock_irqsave (&pt_ptr->Thread_counter_lock,flags);
     pt_ptr->Thread_counter++;
-    DT_Mdep_Unlock (&pt_ptr->Thread_counter_lock);
+    spin_unlock_irqrestore (&pt_ptr->Thread_counter_lock,flags);
 
     DT_Mdep_Thread_Init_Attributes (thread_ptr);
 
@@ -108,11 +109,12 @@
 void
 DT_Thread_Destroy (Thread * thread_ptr, Per_Test_Data_t * pt_ptr)
 {
+       unsigned long flags;
     if (thread_ptr)
     {
-       DT_Mdep_Lock (&pt_ptr->Thread_counter_lock);
+       spin_lock_irqsave (&pt_ptr->Thread_counter_lock,flags);
        pt_ptr->Thread_counter--;
-       DT_Mdep_Unlock (&pt_ptr->Thread_counter_lock);
+       spin_unlock_irqrestore (&pt_ptr->Thread_counter_lock,flags);
 
        DT_Mdep_Thread_Destroy_Attributes (thread_ptr);
        DT_MemListFree (pt_ptr, thread_ptr);
Index: test/dapl_test_data.c
===================================================================
--- test/dapl_test_data.c       (revision 2509)
+++ test/dapl_test_data.c       (working copy)
@@ -27,7 +27,7 @@
 
 #include "dapl_proto.h"
 
-DT_Mdep_LockType     g_PerfTestLock;
+/*DT_Mdep_LockType     g_PerfTestLock;*/
 /*
  * check memory leaking int             alloc_count; DT_Mdep_LockType
  * Alloc_Count_Lock;
Index: test/dapl_transaction_test.c
===================================================================
--- test/dapl_transaction_test.c        (revision 2509)
+++ test/dapl_transaction_test.c        (working copy)
@@ -99,7 +99,7 @@
     unsigned int      i;
     DT_Tdep_Print_Head *phead;
     int status = 0;
-
+       unsigned long flags;
     phead = pt_ptr->Params.phead;
 
     pt_ptr->Countdown_Counter = cmd->num_threads;
@@ -129,9 +129,9 @@
     }
     DT_Thread_Destroy (pt_ptr->thread, pt_ptr);            /* destroy Master 
thread */
 
-    DT_Mdep_Lock (&pt_ptr->ps_ptr->num_clients_lock);
+    spin_lock_irqsave (&pt_ptr->ps_ptr->num_clients_lock,flags);
     pt_ptr->ps_ptr->num_clients--;
-    DT_Mdep_Unlock (&pt_ptr->ps_ptr->num_clients_lock);
+    spin_unlock_irqrestore (&pt_ptr->ps_ptr->num_clients_lock,flags);
 
     /* NB: Server has no pt_ptr->remote_netaddr */
     DT_PrintMemList (pt_ptr);      /* check if we return all space allocated */
@@ -239,7 +239,7 @@
     enum dat_event_number    event_num;
     DT_Tdep_Print_Head *phead;
     int status = 0;
-
+       unsigned long flags;
     pt_ptr = test_ptr->pt_ptr;
     thread = test_ptr->thread;
     phead = pt_ptr->Params.phead;
@@ -502,7 +502,7 @@
      */
     if (pt_ptr->local_is_server)
     {
-       DT_Mdep_Lock (&pt_ptr->Thread_counter_lock);
+       spin_lock_irqsave (&pt_ptr->Thread_counter_lock,flags);
        pt_ptr->Countdown_Counter--;
        /* Deliberate pre-decrement.  Post decrement won't
         * work here, so don't do it.
@@ -512,7 +512,7 @@
            DT_Mdep_wait_object_wakeup (&pt_ptr->synch_wait_object);
        }
 
-       DT_Mdep_Unlock (&pt_ptr->Thread_counter_lock);
+       spin_unlock_irqrestore (&pt_ptr->Thread_counter_lock,flags);
     }
 
     for (i = 0;  i < test_ptr->cmd->eps_per_thread;  i++)
Index: test/dapl_performance_server.c
===================================================================
--- test/dapl_performance_server.c      (revision 2509)
+++ test/dapl_performance_server.c      (working copy)
@@ -36,7 +36,7 @@
     Performance_Test_t                 *test_ptr = NULL;
     DT_Tdep_Print_Head         *phead;
     int                         status = 0;
-
+       unsigned long flags;
     phead = pt_ptr->Params.phead;
     DT_Tdep_PT_Debug (1,(phead,"Server: Starting performance test\n"));
 
@@ -75,9 +75,9 @@
     DT_Mdep_Thread_Detach (DT_Mdep_Thread_SELF ());     /* AMM */
     DT_Thread_Destroy (pt_ptr->thread, pt_ptr);            /* destroy Master 
thread */
 
-    DT_Mdep_Lock (&pt_ptr->ps_ptr->num_clients_lock);
+    spin_lock_irqsave (&pt_ptr->ps_ptr->num_clients_lock,flags);
     pt_ptr->ps_ptr->num_clients--;
-    DT_Mdep_Unlock (&pt_ptr->ps_ptr->num_clients_lock);
+    spin_unlock_irqrestore (&pt_ptr->ps_ptr->num_clients_lock,flags);
 
     DT_PrintMemList (pt_ptr);      /* check if we return all space allocated */
     DT_Mdep_LockDestroy (&pt_ptr->Thread_counter_lock);
Index: test/dapl_memlist.c
===================================================================
--- test/dapl_memlist.c (revision 2509)
+++ test/dapl_memlist.c (working copy)
@@ -42,6 +42,7 @@
 {
     void           *buffptr;
     MemListEntry_t *entry_ptr;
+       unsigned long flags;
     buffptr = NULL;
     entry_ptr = NULL;
 
@@ -64,10 +65,10 @@
     entry_ptr->MemType = t;
     entry_ptr->mem_ptr = buffptr;
 
-    DT_Mdep_Lock (&pt_ptr->MemListLock);
+    spin_lock_irqsave (&pt_ptr->MemListLock,flags);
     entry_ptr->next = pt_ptr->MemListHead;
     pt_ptr->MemListHead = entry_ptr;
-    DT_Mdep_Unlock (&pt_ptr->MemListLock);
+    spin_unlock_irqrestore (&pt_ptr->MemListLock,flags);
 
     return buffptr;
 }
@@ -76,12 +77,13 @@
 DT_MemListFree (Per_Test_Data_t * pt_ptr, void *ptr)
 {
     MemListEntry_t *pre, *cur;
+       unsigned long flags;
     if (pt_ptr == 0)         /* not use mem_list */
     {
        DT_Mdep_Free (ptr);
        return;
     }
-    DT_Mdep_Lock (&pt_ptr->MemListLock);
+    spin_lock_irqsave (&pt_ptr->MemListLock,flags);
     pre = NULL;
     cur = pt_ptr->MemListHead;
     while (cur)
@@ -106,7 +108,7 @@
        cur = cur->next;
     }
 unlock_and_return:
-    DT_Mdep_Unlock (&pt_ptr->MemListLock);
+    spin_unlock_irqrestore (&pt_ptr->MemListLock,flags);
 }
 
 void
@@ -119,9 +121,9 @@
     };
     DT_Tdep_Print_Head *phead;
     MemListEntry_t *cur;
-
+       unsigned long flags;
     phead = pt_ptr->Params.phead;
-    DT_Mdep_Lock (&pt_ptr->MemListLock);
+    spin_lock_irqsave (&pt_ptr->MemListLock,flags);
     cur = pt_ptr->MemListHead;
     if (cur != 0)
     {
@@ -133,5 +135,5 @@
                    cur->filename, type[cur->MemType]);
        cur = cur->next;
     }
-    DT_Mdep_Unlock (&pt_ptr->MemListLock);
+    spin_unlock_irqrestore (&pt_ptr->MemListLock,flags);
 }
Index: include/dapl_test_data.h
===================================================================
--- include/dapl_test_data.h    (revision 2509)
+++ include/dapl_test_data.h    (working copy)
@@ -42,7 +42,7 @@
  * problems on the server side occasionally
  * the server will reject connections.
  */
-extern         DT_Mdep_LockType    g_PerfTestLock;
+/*extern               DT_Mdep_LockType    g_PerfTestLock; */
 
 /*
  * check memory leaking extern int              alloc_count ; extern
Index: kdapl/kdapl_module.c
===================================================================
--- kdapl/kdapl_module.c        (revision 2509)
+++ kdapl/kdapl_module.c        (working copy)
@@ -95,10 +95,10 @@
                                break;
                        }
 
-                       DT_Mdep_Lock(&kdapltest_lock);
+                       spin_lock_irq(&kdapltest_lock);
                        kdapltest_num++;
                        instance = kdapltest_num;
-                       DT_Mdep_Unlock(&kdapltest_lock);
+                       spin_unlock_irq(&kdapltest_lock);
 
                        local_params->phead = KDT_Print_Alloc(instance);
                        if (!local_params->phead) {
@@ -201,7 +201,7 @@
 static __init int kdapltest_init(void)
 {
 
-       DT_Mdep_LockInit(&g_PerfTestLock);      /* For uDAPL, this is done in 
Tdep_init() */
+   /* DT_Mdep_LockInit(&g_PerfTestLock);        For uDAPL, this is done in 
Tdep_init() */
        kdapltest_major = register_chrdev(0, "kdapltest", &kdapltest_fops);
        DT_Mdep_LockInit(&kdapltest_lock);
        kdapltest_num = 0;
@@ -218,7 +218,7 @@
        KDT_Print_Destroy();
        KDT_Evd_Destroy();
        DT_Mdep_LockDestroy(&kdapltest_lock);
-       DT_Mdep_LockDestroy(&g_PerfTestLock);   /* For uDAPL, this is done in 
Tdep_end() */
+   /* DT_Mdep_LockDestroy(&g_PerfTestLock);     For uDAPL, this is done in 
Tdep_end() */  
 }
 
 module_init(kdapltest_init);
Index: kdapl/kdapl_tdep_print.c
===================================================================
--- kdapl/kdapl_tdep_print.c    (revision 2509)
+++ kdapl/kdapl_tdep_print.c    (working copy)
@@ -106,7 +106,7 @@
     va_list            args;
     int                        len;
     Tdep_Print_Entry   *entry;
-
+       unsigned long flags;
     entry = DT_Mdep_Malloc (sizeof (Tdep_Print_Entry));
 
     va_start (args, fmt);
@@ -120,7 +120,7 @@
     }
     entry->next = NULL;
 
-    DT_Mdep_Lock (&phead->lock);
+    spin_lock_irqsave (&phead->lock,flags);
 
     if (phead->head == NULL)
     {
@@ -133,7 +133,7 @@
        phead->tail = entry;
     }
     DT_Mdep_wait_object_wakeup (&phead->wait_object);
-    DT_Mdep_Unlock (&phead->lock);
+    spin_unlock_irqrestore (&phead->lock,flags);
 }
 
 int
@@ -143,10 +143,10 @@
     DT_Tdep_Print_Head  *phead;
     Tdep_Print_Entry    *entry;
     int rc;
-
+       unsigned long flags;
     buffer[0] = '\0';
 
-    DT_Mdep_Lock (&DT_Print_List_Lock);
+    spin_lock_irqsave (&DT_Print_List_Lock,flags);
     phead = DT_Print_List;
     while (phead)
     {
@@ -156,7 +156,7 @@
        }
        phead = phead->next;
     }
-    DT_Mdep_Unlock (&DT_Print_List_Lock);
+    spin_unlock_irqrestore (&DT_Print_List_Lock,flags);
 
     if (!phead)
     {
@@ -172,7 +172,7 @@
            return 0;
        }
 
-       DT_Mdep_Lock (&phead->lock);
+       spin_lock_irqsave (&phead->lock,flags);
        entry = phead->head;
        if (entry)
        {
@@ -184,7 +184,7 @@
            strncpy (buffer, entry->buffer, PRINT_MAX);
            DT_Mdep_Free (entry);
        }
-       DT_Mdep_Unlock (&phead->lock);
+       spin_unlock_irqrestore (&phead->lock,flags);
     }
 
     len = strlen (buffer);
Index: kdapl/kdapl_tdep_evd.c
===================================================================
--- kdapl/kdapl_tdep_evd.c      (revision 2509)
+++ kdapl/kdapl_tdep_evd.c      (working copy)
@@ -105,7 +105,7 @@
     u32                dat_status;
     struct dat_upcall_object upcall;
     Tdep_Evd           *evd_ptr;
-
+       unsigned long flags;
     evd_ptr = NULL;
     dat_status = DAT_SUCCESS;
 
@@ -139,10 +139,10 @@
     DT_Mdep_wait_object_init (&evd_ptr->wait_object);
 
     /* add evd_ptr to front of evd list */
-    DT_Mdep_Lock (&DT_Evd_Lock);
+    spin_lock_irqsave (&DT_Evd_Lock, flags);
     evd_ptr->evd_next = DT_Evd_List;
     DT_Evd_List = evd_ptr;
-    DT_Mdep_Unlock (&DT_Evd_Lock);
+    spin_unlock_irqrestore (&DT_Evd_Lock, flags);
 
 error:
     if (dat_status != DAT_SUCCESS)
@@ -161,7 +161,7 @@
     u32 dat_status;
     Tdep_Evd   *evd_ptr;    
     Tdep_Event *event;
-
+       unsigned long flags;
     dat_status = DAT_SUCCESS;
 
     /* find the evd_ptr associated with evd_handle */
@@ -181,7 +181,7 @@
                DAT_INTERNAL_ERROR;
     }
     /* Get event */
-    DT_Mdep_Lock (&DT_Evd_Lock);
+    spin_lock_irqsave (&DT_Evd_Lock, flags);
     event = evd_ptr->event_next; /* event present in evd_ptr corresponding to 
the given evd_handle */
     if (event)
     {
@@ -207,7 +207,7 @@
     {
         dat_status = DAT_QUEUE_EMPTY;
     }
-    DT_Mdep_Unlock (&DT_Evd_Lock);
+    spin_unlock_irqrestore (&DT_Evd_Lock, flags);
 
     return dat_status;
 }
@@ -261,7 +261,7 @@
     }
 
     /* Got event */
-    DT_Mdep_Lock (&DT_Evd_Lock);
+    spin_lock_irq (&DT_Evd_Lock);
     event = evd_ptr->event_next;
     if (event)
     {
@@ -286,7 +286,7 @@
        }
     }
 
-    DT_Mdep_Unlock (&DT_Evd_Lock);
+    spin_unlock_irq (&DT_Evd_Lock);
     return dat_status;
 }
 
@@ -297,7 +297,7 @@
     Tdep_Evd   *last;
 
     last = NULL;
-    DT_Mdep_Lock (&DT_Evd_Lock);
+    spin_lock_irq (&DT_Evd_Lock);
     next = DT_Evd_List;
     if (next->evd_handle == evd_handle)
     {
@@ -315,7 +315,7 @@
            last->evd_next = next->evd_next;
        }
     }
-    DT_Mdep_Unlock (&DT_Evd_Lock);
+    spin_unlock_irq (&DT_Evd_Lock);
 
     DT_Mdep_Free (next);
     return dat_evd_free(evd_handle);
@@ -331,7 +331,7 @@
 
     evd_ptr = (Tdep_Evd *) instance_data;
 
-    DT_Mdep_Lock (&DT_Evd_Lock);
+    spin_lock_irq (&DT_Evd_Lock);
     if (DT_Event_Free_List)
     {
        event = DT_Event_Free_List;
@@ -356,6 +356,6 @@
            evd_ptr->event_last = event;
        }
     }
-    DT_Mdep_Unlock (&DT_Evd_Lock);
+    spin_unlock_irq (&DT_Evd_Lock);
     DT_Mdep_wait_object_wakeup (&evd_ptr->wait_object);
 }
-- 
Itamar
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to