On Wed, Aug 30, 2006 at 07:25:07PM +0200, Roman Zippel wrote: > Hi, > > On Wed, 30 Aug 2006, Dipankar Sarma wrote: > > > > > uidhash_lock can be taken from irq context. For example, > > > > delayed_put_task_struct() > > > > does __put_task_struct()->free_uid(). > > > > > > AFAICT it's called via rcu, does that mean anything released via rcu has > > > to be protected against interrupts? > > > > No. You need protection only if you have are using some > > data that can also be used by the RCU callback. For example, > > if your RCU callback just calls kfree(), you don't have to > > do a spin_lock_bh(). > > In this case kfree() does its own interrupt synchronization. I didn't > realize before that rcu had this (IMO serious) limitation. I think there > should be two call_rcu() variants, one that queues the callback in a soft > irq and a second which queues it in a thread context.
How about just using synchronize_rcu() in the second situation? This primitive blocks until the grace period completes, allowing you to do the remaining processing in thread context. As a bonus, RCU code that uses synchronize_rcu() is usually quite a bit simpler than code using call_rcu(). Using synchronize_rcu(): list_del_rcu(p); synchronize_rcu(); kfree(p); Using call_rcu(): static void rcu_callback_func(struct rcu_head *rcu) { struct foo *p = container_of(rcu, struct foo, rcu); kfree(p); } list_del_rcu(p); call_rcu(&p->rcu, rcu_callback_func); Furthermore, the call_rcu() approach requires a struct rcu_head somewhere in the data structure, so use of synchronize_rcu() saves a bit of memory, as well. But if you have a situation where neither synchronize_srcu() nor call_rcu() is working out for you, let's hear it! Thanx, Paul ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ ckrm-tech mailing list https://lists.sourceforge.net/lists/listinfo/ckrm-tech