x86: Improve __phys_addr performance by making use of carry flags and inlining
[sfrench/cifs-2.6.git] / arch / x86 / include / asm / page_64.h
index 4150999fc20ed017537ab19c6ed080626a2c9b7e..5138174c210161ab0582b0c097e871a94dc57c1f 100644 (file)
@@ -9,7 +9,21 @@
 extern unsigned long max_pfn;
 extern unsigned long phys_base;
 
+static inline unsigned long __phys_addr_nodebug(unsigned long x)
+{
+       unsigned long y = x - __START_KERNEL_map;
+
+       /* use the carry flag to determine if x was < __START_KERNEL_map */
+       x = y + ((x > y) ? phys_base : (__START_KERNEL_map - PAGE_OFFSET));
+
+       return x;
+}
+
+#ifdef CONFIG_DEBUG_VIRTUAL
 extern unsigned long __phys_addr(unsigned long);
+#else
+#define __phys_addr(x)         __phys_addr_nodebug(x)
+#endif
 
 #define __phys_reloc_hide(x)   (x)