#define ATOMIC_LONG_INIT(i)    ATOMIC64_INIT(i)
 #define ATOMIC_LONG_PFX(x)     atomic64 ## x
+#define ATOMIC_LONG_TYPE       s64
 
 #else
 
 
 #define ATOMIC_LONG_INIT(i)    ATOMIC_INIT(i)
 #define ATOMIC_LONG_PFX(x)     atomic ## x
+#define ATOMIC_LONG_TYPE       int
 
 #endif
 
 #define atomic_long_cmpxchg(l, old, new) \
        (ATOMIC_LONG_PFX(_cmpxchg)((ATOMIC_LONG_PFX(_t) *)(l), (old), (new)))
 
+
+#define atomic_long_try_cmpxchg_relaxed(l, old, new) \
+       (ATOMIC_LONG_PFX(_try_cmpxchg_relaxed)((ATOMIC_LONG_PFX(_t) *)(l), \
+                                          (ATOMIC_LONG_TYPE *)(old), (ATOMIC_LONG_TYPE)(new)))
+#define atomic_long_try_cmpxchg_acquire(l, old, new) \
+       (ATOMIC_LONG_PFX(_try_cmpxchg_acquire)((ATOMIC_LONG_PFX(_t) *)(l), \
+                                          (ATOMIC_LONG_TYPE *)(old), (ATOMIC_LONG_TYPE)(new)))
+#define atomic_long_try_cmpxchg_release(l, old, new) \
+       (ATOMIC_LONG_PFX(_try_cmpxchg_release)((ATOMIC_LONG_PFX(_t) *)(l), \
+                                          (ATOMIC_LONG_TYPE *)(old), (ATOMIC_LONG_TYPE)(new)))
+#define atomic_long_try_cmpxchg(l, old, new) \
+       (ATOMIC_LONG_PFX(_try_cmpxchg)((ATOMIC_LONG_PFX(_t) *)(l), \
+                                      (ATOMIC_LONG_TYPE *)(old), (ATOMIC_LONG_TYPE)(new)))
+
+
 #define atomic_long_xchg_relaxed(v, new) \
        (ATOMIC_LONG_PFX(_xchg_relaxed)((ATOMIC_LONG_PFX(_t) *)(v), (new)))
 #define atomic_long_xchg_acquire(v, new) \
 
 static __always_inline bool __mutex_trylock_fast(struct mutex *lock)
 {
        unsigned long curr = (unsigned long)current;
+       unsigned long zero = 0UL;
 
-       if (!atomic_long_cmpxchg_acquire(&lock->owner, 0UL, curr))
+       if (atomic_long_try_cmpxchg_acquire(&lock->owner, &zero, curr))
                return true;
 
        return false;