Subversion Repositories Kolibri OS

Rev

Rev 3192 | Rev 3391 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3192 Rev 3297
Line 1... Line 1...
1
#ifndef _LINUX_WAIT_H
1
#ifndef _LINUX_WAIT_H
2
#define _LINUX_WAIT_H
2
#define _LINUX_WAIT_H
Line -... Line 3...
-
 
3
 
3
 
4
#include 
Line 4... Line 5...
4
#include 
5
#include 
5
 
6
 
Line 37... Line 38...
37
        finish_wait(&wq, &__wait);                                      \
38
        finish_wait(&wq, &__wait);                                      \
38
} while (0)
39
} while (0)
Line 39... Line -...
39
 
-
 
40
 
40
 
41
 
41
 
42
 
42
 
43
#define wait_event_timeout(wq, condition, timeout)          \
43
#define wait_event_timeout(wq, condition, timeout)          \
44
({                                                          \
44
({                                                          \
45
    long __ret = timeout;                                   \
45
    long __ret = timeout;                                   \
46
do{                                                         \
46
do{                                                         \
47
    wait_queue_t __wait = {                                 \
47
    wait_queue_t __wait = {                                 \
48
        .task_list = LIST_HEAD_INIT(__wait.task_list),      \
48
        .task_list = LIST_HEAD_INIT(__wait.task_list),      \
49
        .evnt      = CreateEvent(NULL, MANUAL_DESTROY),     \
49
        .evnt      = CreateEvent(NULL, MANUAL_DESTROY),     \
50
    };                                                      \
50
    };                                                      \
51
    u32  flags;                                             \
51
    unsigned long flags;                                    \
52
                                                            \
52
                                                            \
53
    spin_lock_irqsave(&wq.lock, flags);                     \
53
    spin_lock_irqsave(&wq.lock, flags);                     \
Line 58... Line 58...
58
    for(;;){                                                \
58
    for(;;){                                                \
59
        if (condition)                                      \
59
        if (condition)                                      \
60
            break;                                          \
60
            break;                                          \
61
        WaitEvent(__wait.evnt);                             \
61
        WaitEvent(__wait.evnt);                             \
62
    };                                                      \
62
    };                                                      \
63
    if (!list_empty_careful(&__wait.task_list)) {           \
63
    if (!list_empty(&__wait.task_list)) {                   \
64
        spin_lock_irqsave(&wq.lock, flags);                 \
64
        spin_lock_irqsave(&wq.lock, flags);                 \
65
        list_del_init(&__wait.task_list);                   \
65
        list_del_init(&__wait.task_list);                   \
66
        spin_unlock_irqrestore(&wq.lock, flags);            \
66
        spin_unlock_irqrestore(&wq.lock, flags);            \
67
    };                                                      \
67
    };                                                      \
68
    DestroyEvent(__wait.evnt);                              \
68
    DestroyEvent(__wait.evnt);                              \
Line 78... Line 78...
78
do{                                                         \
78
do{                                                         \
79
    wait_queue_t __wait = {                                 \
79
    wait_queue_t __wait = {                                 \
80
        .task_list = LIST_HEAD_INIT(__wait.task_list),      \
80
        .task_list = LIST_HEAD_INIT(__wait.task_list),      \
81
        .evnt      = CreateEvent(NULL, MANUAL_DESTROY),     \
81
        .evnt      = CreateEvent(NULL, MANUAL_DESTROY),     \
82
    };                                                      \
82
    };                                                      \
83
    u32  flags;                                             \
83
    unsigned long flags;                                    \
84
                                                            \
84
                                                            \
85
    spin_lock_irqsave(&wq.lock, flags);                     \
85
    spin_lock_irqsave(&wq.lock, flags);                     \
86
    if (list_empty(&__wait.task_list))                      \
86
    if (list_empty(&__wait.task_list))                      \
87
        __add_wait_queue(&wq, &__wait);                     \
87
        __add_wait_queue(&wq, &__wait);                     \
88
    spin_unlock_irqrestore(&wq.lock, flags);                \
88
    spin_unlock_irqrestore(&wq.lock, flags);                \
Line 110... Line 110...
110
    unsigned long flags;
110
    unsigned long flags;
Line 111... Line 111...
111
 
111
 
112
    spin_lock_irqsave(&q->lock, flags);
112
    spin_lock_irqsave(&q->lock, flags);
113
    list_for_each_entry(curr, &q->task_list, task_list)
113
    list_for_each_entry(curr, &q->task_list, task_list)
-
 
114
    {
-
 
115
//        printf("raise event \n");
114
    {
116
 
115
        kevent_t event;
117
        kevent_t event;
116
        event.code = -1;
118
        event.code = -1;
117
        RaiseEvent(curr->evnt, 0, &event);
119
        RaiseEvent(curr->evnt, 0, &event);
118
    }
120
    }