use semaphore instead of spinlock for the adaptor lookup/creation critical
section, this should eliminate the case where the spinlock debug code 
wrong CPU assertion was activated.

Signed-off-by: Or Gerlitz  <[EMAIL PROTECTED]>
Signed-off-by: Dan Bar Dov <[EMAIL PROTECTED]>

Index: ulp/iser/iser_mod.c
===================================================================
--- ulp/iser/iser_mod.c (revision 5032)
+++ ulp/iser/iser_mod.c (revision 5033)
@@ -119,7 +119,7 @@ int init_module(void)
                return -ENOMEM;
 
        /* adaptor init is called only after the first addr resolution */
-       spin_lock_init(&ig.adaptor_list_lock);
+       init_MUTEX(&ig.adaptor_list_sem);
        INIT_LIST_HEAD(&ig.adaptor_list);
        ig.num_adaptors = 0;
 
Index: ulp/iser/iser_verbs.c
===================================================================
--- ulp/iser/iser_verbs.c       (revision 5032)
+++ ulp/iser/iser_verbs.c       (revision 5033)
@@ -235,7 +235,7 @@ struct iser_adaptor *iser_adaptor_find_b
        struct list_head      *p_list;
        struct iser_adaptor   *p_adaptor = NULL;
 
-       spin_lock(&ig.adaptor_list_lock);
+       down(&ig.adaptor_list_sem);
 
        p_list = ig.adaptor_list.next;
        while (p_list != &ig.adaptor_list) {
@@ -257,7 +257,7 @@ struct iser_adaptor *iser_adaptor_find_b
                list_add(&p_adaptor->ig_list, &ig.adaptor_list);
        }
 end:
-       spin_unlock(&ig.adaptor_list_lock);
+       up(&ig.adaptor_list_sem);
        return p_adaptor;
 }
 
Index: ulp/iser/iser.h
===================================================================
--- ulp/iser/iser.h     (revision 5032)
+++ ulp/iser/iser.h     (revision 5033)
@@ -41,6 +41,7 @@
 #include <linux/list.h>
 #include <linux/slab.h>
 #include <linux/dma-mapping.h>
+#include <asm/semaphore.h>
 
 #include <linux/mempool.h>
 #include <linux/uio.h>
@@ -126,8 +127,7 @@ struct iser_adaptor {
  */
 struct iser_global {
        unsigned int num_adaptors;
-
-       spinlock_t        adaptor_list_lock; /*                   */
+       struct semaphore  adaptor_list_sem;  /*                   */
        struct list_head  adaptor_list;      /* all iSER adaptors */
 
        kmem_cache_t *dto_cache;        /* slab for iser_dto */

_______________________________________________
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