Hello.

To remind, I think that 4c663cfc "wait: fix false timeouts when using
wait_event_timeout()" is not enough, wait(wq, true, 0) still returns
zero.

But to me the main problem is that wait_event* macros duplicate the
same code again and again. Imho it would be nice to create a single
helper. To simplify the review, this is the code after 1/2:

        #define __wait_no_timeout(tout) \
                (__builtin_constant_p(tout) && (tout) == MAX_SCHEDULE_TIMEOUT)

        /* uglified signal_pending_state() optimized for constant state */
        #define __wait_signal_pending(state)                                    
\
                ((state == TASK_INTERRUPTIBLE) ? signal_pending(current) :      
\
                 (state == TASK_KILLABLE) ? fatal_signal_pending(current) :     
\
                  0)

        #define __wait_event_common(wq, condition, state, tout)                 
\
        ({                                                                      
\
                DEFINE_WAIT(__wait);                                            
\
                long __ret = 0, __tout = tout;                                  
\
                                                                                
\
                for (;;) {                                                      
\
                        prepare_to_wait(&wq, &__wait, state);                   
\
                        if (condition) {                                        
\
                                __ret = __wait_no_timeout(tout) ?: __tout ?: 1; 
\
                                break;                                          
\
                        }                                                       
\
                                                                                
\
                        if (__wait_signal_pending(state)) {                     
\
                                __ret = -ERESTARTSYS;                           
\
                                break;                                          
\
                        }                                                       
\
                                                                                
\
                        if (__wait_no_timeout(tout))                            
\
                                schedule();                                     
\
                        else if (__tout)                                        
\
                                __tout = schedule_timeout(__tout);              
\
                        else                                                    
\
                                break;                                          
\
                }                                                               
\
                finish_wait(&wq, &__wait);                                      
\
                __ret;                                                          
\
        })

        #define wait_event_common(wq, condition, state, tout)                   
\
        ({                                                                      
\
                long __ret;                                                     
\
                if (condition)                                                  
\
                        __ret = __wait_no_timeout(tout) ?: (tout) ?: 1;         
\
                else                                                            
\
                        __ret = __wait_event_common(wq, condition, state, 
tout);\
                __ret;                                                          
\
        })

2/2 doesn't look like a cleanup. But personally I think that it makes
sense to shrink .text,

        -       4977769 2930984 10104832        18013585        112dd91 vmlinux
        +       4976847 2930984 10104832        18012663        112d9f7 vmlinux

on my build.

Please comment.

Oleg.

--
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/

Reply via email to