Messages in this thread Patch in this message | | | Subject | Re: [PATCH] RT: update rcurefs for RT | From | Daniel Walker <> | Date | Thu, 29 Sep 2005 08:20:58 -0700 |
| |
On Thu, 2005-09-29 at 13:42 +0200, Ingo Molnar wrote:
> > + SPIN_LOCK_UNLOCKED(__rcuref_hash[i]); > > what the heck is this doing??? Patch reverted.
How is this ?
Index: linux-2.6.13/kernel/rcupdate.c =================================================================== --- linux-2.6.13.orig/kernel/rcupdate.c +++ linux-2.6.13/kernel/rcupdate.c @@ -96,6 +96,25 @@ static void rcu_torture_init(void); static inline void rcu_torture_init(void) { } #endif +#ifndef __HAVE_ARCH_CMPXCHG +/* + * We use an array of spinlocks for the rcurefs -- similar to ones in sparc + * 32 bit atomic_t implementations, and a hash function similar to that + * for our refcounting needs. + * Can't help multiprocessors which donot have cmpxchg :( + */ +spinlock_t __rcuref_hash[RCUREF_HASH_SIZE]; + +static inline void init_rcurefs(void) +{ + int i; + for (i=0; i < RCUREF_HASH_SIZE; i++) + __rcuref_hash[i] = SPIN_LOCK_UNLOCKED(__rcuref_hash[i]); +} +#else +#define init_rcurefs() do { } while (0) +#endif + #ifndef CONFIG_PREEMPT_RCU /* Definition for rcupdate control block. */ @@ -123,18 +142,6 @@ DEFINE_PER_CPU(struct rcu_data, rcu_bh_d static DEFINE_PER_CPU(struct tasklet_struct, rcu_tasklet) = {NULL}; static int maxbatch = 10; -#ifndef __HAVE_ARCH_CMPXCHG -/* - * We use an array of spinlocks for the rcurefs -- similar to ones in sparc - * 32 bit atomic_t implementations, and a hash function similar to that - * for our refcounting needs. - * Can't help multiprocessors which donot have cmpxchg :( - */ - -spinlock_t __rcuref_hash[RCUREF_HASH_SIZE] = { - [0 ... (RCUREF_HASH_SIZE-1)] = SPIN_LOCK_UNLOCKED -}; -#endif /** * call_rcu - Queue an RCU callback for invocation after a grace period. @@ -487,6 +494,7 @@ static struct notifier_block __devinitda */ void __init rcu_init(void) { + init_rcurefs(); rcu_torture_init(); rcu_cpu_notify(&rcu_nb, CPU_UP_PREPARE, (void *)(long)smp_processor_id()); @@ -824,6 +832,7 @@ rcu_pending(int cpu) void __init rcu_init(void) { + init_rcurefs(); rcu_torture_init(); /*&&&&*/printk("WARNING: experimental RCU implementation.\n"); spin_lock_init(&rcu_data.lock);
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |