Thread (8 messages) 8 messages, 4 authors, 2002-07-25

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/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help