Re: [PATCH] updated low-latency zap_page_range
From: Robert Love <hidden>
Date: 2002-07-25 01:13:20
Also in:
lkml
On Wed, 2002-07-24 at 17:45, Andrew Morton wrote:
Robert Love wrote:quoted
+static inline void cond_resched_lock(spinlock_t * lock) +{ + if (need_resched() && preempt_count() == 1) { + _raw_spin_unlock(lock); + preempt_enable_no_resched(); + __cond_resched(); + spin_lock(lock); + } +}Maybe I'm being thick. How come a simple spin_unlock() in here won't do the right thing?
It will, but we will check need_resched twice. And preempt_count again. My original version just did the "unlock; lock" combo and thus the checking was automatic... but if we want to check before we unlock, we might as well be optimal about it.
And this won't _really_ compile to nothing with CONFIG_PREEMPT=n, will it? It just does nothing because preempt_count() is zero?
I hope it compiles to nothing! There is a false in an if... oh, wait, to preserve possible side-effects gcc will keep the need_resched() call so I guess we should reorder it as: if (preempt_count() == 1 && need_resched()) Then we get "if (0 && ..)" which should hopefully be evaluated away. Then the inline is empty and nothing need be done. Robert Love -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/