Improve documentation, improve has_pollin handling.
[~madcoder/pwqr.git] / kernel / pwqr.c
index 233bd7a..6d822ea 100644 (file)
@@ -172,10 +172,13 @@ static inline void __pwqr_sb_update_state(struct pwqr_sb *sb, int running_delta)
        sb->running += running_delta;
 
        if (sb->running < sb->concurrency && sb->waiting == 0 && sb->parked) {
+               sb->has_pollin = 0;
                pwqr_arm_timer(sb, PWQR_STATE_UC, PWQR_UC_DELAY);
        } else if (sb->running > sb->concurrency) {
-               pwqr_arm_timer(sb, PWQR_STATE_OC, PWQR_OC_DELAY);
+               if (!sb->has_pollin)
+                       pwqr_arm_timer(sb, PWQR_STATE_OC, PWQR_OC_DELAY);
        } else {
+               sb->has_pollin = 0;
                sb->state = PWQR_STATE_NONE;
                if (!timer_pending(&sb->timer))
                        del_timer(&sb->timer);