Subversion Repositories Kolibri OS

Rev

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

Rev 5347 Rev 6102
Line 80... Line 80...
80
static inline void up_write(struct rw_semaphore *sem)
80
static inline void up_write(struct rw_semaphore *sem)
81
{
81
{
82
    UpWrite(sem);
82
    UpWrite(sem);
83
}
83
}
Line -... Line 84...
-
 
84
 
-
 
85
#define RWSEM_UNLOCKED_VALUE            0x00000000L
-
 
86
#define RWSEM_ACTIVE_BIAS               0x00000001L
-
 
87
#define RWSEM_WAITING_BIAS              (-RWSEM_ACTIVE_MASK-1)
-
 
88
#define RWSEM_ACTIVE_READ_BIAS          RWSEM_ACTIVE_BIAS
-
 
89
#define RWSEM_ACTIVE_WRITE_BIAS         (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
-
 
90
 
-
 
91
static inline int down_read_trylock(struct rw_semaphore *sem)
-
 
92
{
-
 
93
    long result, tmp;
-
 
94
    asm volatile("# beginning __down_read_trylock\n\t"
-
 
95
                 "  mov          %0,%1\n\t"
-
 
96
                 "1:\n\t"
-
 
97
                 "  mov          %1,%2\n\t"
-
 
98
                 "  add          %3,%2\n\t"
-
 
99
                 "  jle          2f\n\t"
-
 
100
                 LOCK_PREFIX "  cmpxchg  %2,%0\n\t"
-
 
101
                 "  jnz          1b\n\t"
-
 
102
                 "2:\n\t"
-
 
103
                 "# ending __down_read_trylock\n\t"
-
 
104
                 : "+m" (sem->count), "=&a" (result), "=&r" (tmp)
-
 
105
                 : "i" (RWSEM_ACTIVE_READ_BIAS)
-
 
106
                 : "memory", "cc");
-
 
107
    return result >= 0 ? 1 : 0;
-
 
108
}
-
 
109
 
84
 
110
 
85
#endif /* __KERNEL__ */
111
#endif /* __KERNEL__ */