Merge tag 'sh-for-4.9' of git://git.libc.org/linux-sh
[cascardo/linux.git] / include / linux / blockgroup_lock.h
index e44b88b..225bdb7 100644 (file)
 #include <linux/cache.h>
 
 #ifdef CONFIG_SMP
-
-/*
- * We want a power-of-two.  Is there a better way than this?
- */
-
-#if NR_CPUS >= 32
-#define NR_BG_LOCKS    128
-#elif NR_CPUS >= 16
-#define NR_BG_LOCKS    64
-#elif NR_CPUS >= 8
-#define NR_BG_LOCKS    32
-#elif NR_CPUS >= 4
-#define NR_BG_LOCKS    16
-#elif NR_CPUS >= 2
-#define NR_BG_LOCKS    8
+#define NR_BG_LOCKS    (4 << ilog2(NR_CPUS < 32 ? NR_CPUS : 32))
 #else
-#define NR_BG_LOCKS    4
-#endif
-
-#else  /* CONFIG_SMP */
 #define NR_BG_LOCKS    1
-#endif /* CONFIG_SMP */
+#endif
 
 struct bgl_lock {
        spinlock_t lock;
@@ -49,14 +31,10 @@ static inline void bgl_lock_init(struct blockgroup_lock *bgl)
                spin_lock_init(&bgl->locks[i].lock);
 }
 
-/*
- * The accessor is a macro so we can embed a blockgroup_lock into different
- * superblock types
- */
 static inline spinlock_t *
 bgl_lock_ptr(struct blockgroup_lock *bgl, unsigned int block_group)
 {
-       return &bgl->locks[(block_group) & (NR_BG_LOCKS-1)].lock;
+       return &bgl->locks[block_group & (NR_BG_LOCKS-1)].lock;
 }
 
 #endif