On Wed, 12 Sep 2007 11:00:54 +0100 Christoph Hellwig <[EMAIL PROTECTED]> wrote:
> This looks nice in general, getting things out of softirq context is > always good. I am preparing a patch to net/ipv4/route.c to migrate rt_check_expire() as well. > > On Tue, Sep 11, 2007 at 02:56:13PM +0200, Eric Dumazet wrote: > > #if RT_CACHE_DEBUG >= 2 > > static atomic_t dst_total = ATOMIC_INIT(0); > > #endif > > -static unsigned long dst_gc_timer_expires; > > -static unsigned long dst_gc_timer_inc = DST_GC_MAX; > > -static void dst_run_gc(unsigned long); > > +static struct { > > + spinlock_t lock; > > + struct dst_entry *list; > > + unsigned long timer_inc; > > + unsigned long timer_expires; > > +} dst_garbage = { > > + .lock = __SPIN_LOCK_UNLOCKED(dst_garbage.lock), > > + .timer_inc = DST_GC_MAX, > > +}; > > Can you please et rid of this useless struct? It just complicates > the code and means we can't use the proper DEFINE_SPINLOCK initializer. When using the standard DEFINE_SPINLOCK initializer, the lock is in the data section, while list is in bss section. This 'useless struct' makes lock/list being on the same cache line, so reduces latency of __dst_free(). I wish more structures in kernel be used instead of relying on random placement of the linker... > > > +DECLARE_DELAYED_WORK(dst_gc_work, dst_gc_task); > > This should be static. Yes I agree - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html