Re: [patch] reduce IPI noise due to /dev/cdrom open/close

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Jul 4, 2006, at 1:39 AM, Andrew Morton wrote:


I expect raw_smp_processor_id() is used here as a a microoptimisation -
avoid a might_sleep() which obviously will never trigger.

But I think it'd be better to do just a single raw_smp_processor_id() for this entire function:

static void bh_lru_install(struct buffer_head *bh)
{
struct buffer_head *evictee = NULL;
struct bh_lru *lru;
+ int cpu;

check_irqs_on();
bh_lru_lock();
+ cpu = raw_smp_processor_id();
- lru = &__get_cpu_var(bh_lrus);
+ lru = per_cpu(bh_lrus, cpu);


The problem with this style is that it is an disoptimizatoin for architectures who hold their per-cpu data offset in a register, put the smp_processor_id in the per-cpu data (or similar) and per_cpu data offsets in a global lookup.

Do we need a new macro? (what is that gcc macro function syntax?)

#ifdef PER_CPU_IS_SLOW
#define my_cpu_var(bh_lrus, cpu) \
	({ BUG_ON(cpu != smp_processor_id()); 	&__get_cpu_var(bh_lrus); })
#else
#define my_cpu_var(bh_lrus, cpu) \
	({ BUG_ON(cpu != smp_processor_id()); per_cpu(bh_lrus, cpu); })
#endif

(and yes, the BUG_ON would be for debug checking).

milton

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux