smp, irq_work: Continue smp_call_function*() and irq_work*() integration
[sfrench/cifs-2.6.git] / include / linux / bsearch.h
index 8ed53d7524ea6910f83d54c465949eb3205b43bb..e66b711d091e92640e7b96eb62a1c8e58a131d4a 100644 (file)
@@ -4,7 +4,29 @@
 
 #include <linux/types.h>
 
-void *bsearch(const void *key, const void *base, size_t num, size_t size,
-             cmp_func_t cmp);
+static __always_inline
+void *__inline_bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp)
+{
+       const char *pivot;
+       int result;
+
+       while (num > 0) {
+               pivot = base + (num >> 1) * size;
+               result = cmp(key, pivot);
+
+               if (result == 0)
+                       return (void *)pivot;
+
+               if (result > 0) {
+                       base = pivot + size;
+                       num--;
+               }
+               num >>= 1;
+       }
+
+       return NULL;
+}
+
+extern void *bsearch(const void *key, const void *base, size_t num, size_t size, cmp_func_t cmp);
 
 #endif /* _LINUX_BSEARCH_H */