Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.4.6 /lib/brlock.c

Filename:/lib/brlock.c
Lines Added:7
Lines Deleted:4
Also changed in: (Previous) 2.4.6-pre9  2.4.6-pre8  2.4.6-pre7  2.4.6-pre6  2.4.6-pre5  2.4.6-pre4 
(Following) 2.4.12-ac4  2.4.12-ac5  2.4.12-ac6  2.4.13-ac1  2.4.13-ac2  2.4.13-ac3 

Location
[  2.4.6
  [  lib
     o  brlock.c

Patch

diff -u --recursive --new-file v2.4.5/linux/lib/brlock.c linux/lib/brlock.c
--- v2.4.5/linux/lib/brlock.c   Mon Apr 24 13:59:56 2000
+++ linux/lib/brlock.c   Fri Jun 29 19:38:26 2001
@@ -25,7 +25,7 @@
    int i;
 
    for (i = 0; i < smp_num_cpus; i++)
-      write_lock(__brlock_array[idx] + cpu_logical_map(i));
+      write_lock(&__brlock_array[cpu_logical_map(i)][idx]);
 }
 
 void __br_write_unlock (enum brlock_indices idx)
@@ -33,7 +33,7 @@
    int i;
 
    for (i = 0; i < smp_num_cpus; i++)
-      write_unlock(__brlock_array[idx] + cpu_logical_map(i));
+      write_unlock(&__brlock_array[cpu_logical_map(i)][idx]);
 }
 
 #else /* ! __BRLOCK_USE_ATOMICS */
@@ -48,11 +48,14 @@
 {
    int i;
 
-   spin_lock(&__br_write_locks[idx].lock);
 again:
+   spin_lock(&__br_write_locks[idx].lock);
    for (i = 0; i < smp_num_cpus; i++)
-      if (__brlock_array[cpu_logical_map(i)][idx] != 0)
+      if (__brlock_array[cpu_logical_map(i)][idx] != 0) {
+         spin_unlock(&__br_write_locks[idx].lock);
+         barrier();
          goto again;
+      }
 }
 
 void __br_write_unlock (enum brlock_indices idx)


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.