Some background here - for the delayed allocation code which I'm
cooking up I need to globally count the number of dirty pages in the
machine. Currently that's done with atomic_inc(&nr_dirty_pages)
But this counter (which is used for when-to-start-writeback decisions)
is unavoidably approximate. It would be nice to make it a per-CPU
array. So on the rare occasions when the dirty-page count is needed,
I can just whizz across the per-cpu counters adding them all up.
But how to increment or decrement a per-cpu counter? The options
This is *probably* OK on all architectures. But there are no
guarantees that the compiler won't play games, and that this
operation is preempt-safe.
- preempt_disable(); per_cpu_counter++; preempt_enable();
A bit heavyweight for add-one-to-i.
A buslocked operation where it is not needed - we only need
a preempt-locked operation here. But it's per-cpu data, and
the buslocked rmw won't be too costly.
I can't believe how piddling this issue is :)
But if there's a general need for such a micro-optimisation
then we need to:
1: Create <linux/atomic.h> (for heavens sake!)
2: In <linux/atomic.h>,
#define atomic_inc_irq atomic_inc
But for now, I suggest we not bother. I'll just use atomic_inc().
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to email@example.com
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/