ide: fix refcounting in device drivers
[safe/jmp/linux-2.6] / include / asm-frv / system.h
index b400cea..7742ec0 100644 (file)
@@ -87,7 +87,7 @@ do {                                                          \
 } while(0)
 
 #define irqs_disabled() \
-       ({unsigned long flags; local_save_flags(flags); flags; })
+       ({unsigned long flags; local_save_flags(flags); !!flags; })
 
 #define        local_irq_save(flags)                   \
 do {                                           \
@@ -179,19 +179,23 @@ do {                                                      \
 #define mb()                   asm volatile ("membar" : : :"memory")
 #define rmb()                  asm volatile ("membar" : : :"memory")
 #define wmb()                  asm volatile ("membar" : : :"memory")
-#define set_mb(var, value)     do { var = value; mb(); } while (0)
+#define read_barrier_depends() do { } while (0)
 
-#define smp_mb()               mb()
-#define smp_rmb()              rmb()
-#define smp_wmb()              wmb()
-
-#define read_barrier_depends()         do {} while(0)
+#ifdef CONFIG_SMP
+#define smp_mb()                       mb()
+#define smp_rmb()                      rmb()
+#define smp_wmb()                      wmb()
 #define smp_read_barrier_depends()     read_barrier_depends()
-
-#define HARD_RESET_NOW()                       \
-do {                                           \
-       cli();                                  \
-} while(1)
+#define set_mb(var, value) \
+       do { xchg(&var, (value)); } while (0)
+#else
+#define smp_mb()                       barrier()
+#define smp_rmb()                      barrier()
+#define smp_wmb()                      barrier()
+#define smp_read_barrier_depends()     do {} while(0)
+#define set_mb(var, value) \
+       do { var = (value); barrier(); } while (0)
+#endif
 
 extern void die_if_kernel(const char *, ...) __attribute__((format(printf, 1, 2)));
 extern void free_initmem(void);
@@ -234,7 +238,7 @@ extern void free_initmem(void);
                break;                                                          \
                                                                                \
        default:                                                                \
-               __xg_orig = 0;                                                  \
+               __xg_orig = (__typeof__(__xg_orig))0;                           \
                asm volatile("break");                                          \
                break;                                                          \
        }                                                                       \
@@ -259,7 +263,7 @@ extern uint32_t __cmpxchg_32(uint32_t *v, uint32_t test, uint32_t new);
                                         (__force uint32_t)__xg_test,           \
                                         (__force uint32_t)__xg_new); break;    \
        default:                                                                \
-               __xg_orig = 0;                                                  \
+               __xg_orig = (__typeof__(__xg_orig))0;                           \
                asm volatile("break");                                          \
                break;                                                          \
        }                                                                       \