]> granicus.if.org Git - zfs/commitdiff
SLES10 Fixes (part 2):
authorBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 May 2009 17:08:37 +0000 (10:08 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 May 2009 17:08:37 +0000 (10:08 -0700)
- Configure check, the div64_64() function was renamed to
  div64_u64() as of 2.6.26.
- Configure check, the global_page_state() fuction was introduced
  in 2.6.18 kernels.  The earlier 2.6.16 based SLES10 must not try
  and use it, thankfully get_zone_counts() is still available.
- To simplify debugging poison all symbols aquired dynamically
  using spl_kallsyms_lookup_name() with SYMBOL_POISON.
- Add console messages when the user mode helpers fail.
- spl_kmem_init_globals() use bit shifts instead of division.
- When the monotonic clock is unavailable __gethrtime() must perform
  the HZ division as an 'unsigned long long' because the SPL only
  implements __udivdi3(), and not __divdi3() for 'long long' division
  on 32-bit arches.

config/spl-build.m4
configure
configure.ac
include/linux/kallsyms_compat.h
include/sys/vmsystm.h
module/spl/spl-generic.c
module/spl/spl-kmem.c
module/spl/spl-proc.c
module/spl/spl-time.c
module/splat/splat-list.c
spl_config.h.in

index 76fa96ff984505a1ce2a3a41a155554264d77c41..ebc2721f545e8b3f6f2869277420c690de92bdcd 100644 (file)
@@ -706,22 +706,29 @@ AC_DEFUN([SPL_AC_INODE_I_MUTEX], [
 ])
 
 dnl #
-dnl # 2.6.14 API change,
-dnl # check whether 'div64_64()' is available
-dnl #
+dnl # 2.6.22 API change,
+dnl # First introduced 'div64_64()' in lib/div64.c
+dnl 
 AC_DEFUN([SPL_AC_DIV64_64], [
-       AC_MSG_CHECKING([whether div64_64() is available])
-       SPL_LINUX_TRY_COMPILE([
-               #include <asm/div64.h>
-               #include <linux/types.h>
-       ],[
-               uint64_t i = div64_64(1ULL, 1ULL);
-       ],[
-               AC_MSG_RESULT(yes)
-               AC_DEFINE(HAVE_DIV64_64, 1, [div64_64() is available])
-       ],[
-               AC_MSG_RESULT(no)
-       ])
+       SPL_CHECK_SYMBOL_EXPORT(
+               [div64_64],
+               [],
+               [AC_DEFINE(HAVE_DIV64_64, 1,
+               [div64_64() is available])],
+               [])
+])
+
+dnl #
+dnl # 2.6.26 API change,
+dnl # Renamed 'div64_64()' to 'div64_u64' in lib/div64.c
+dnl #
+AC_DEFUN([SPL_AC_DIV64_U64], [
+       SPL_CHECK_SYMBOL_EXPORT(
+               [div64_u64],
+               [],
+               [AC_DEFINE(HAVE_DIV64_U64, 1,
+               [div64_u64() is available])],
+               [])
 ])
 
 dnl #
@@ -836,6 +843,26 @@ AC_DEFUN([SPL_AC_GET_ZONE_COUNTS], [
                [])
 ])
 
+dnl #
+dnl # 2.6.18 API change,
+dnl # First introduced global_page_state() support as an inline.
+dnl #
+AC_DEFUN([SPL_AC_GLOBAL_PAGE_STATE], [
+       AC_MSG_CHECKING([whether global_page_state() is available])
+       SPL_LINUX_TRY_COMPILE([
+               #include <linux/vmstat.h>
+       ],[
+               unsigned long state;
+               state = global_page_state(NR_FREE_PAGES);
+       ],[
+               AC_MSG_RESULT(yes)
+               AC_DEFINE(HAVE_GLOBAL_PAGE_STATE, 1,
+                         [global_page_state() is available])
+       ],[
+               AC_MSG_RESULT(no)
+       ])
+])
+
 dnl #
 dnl # 2.6.21 API change,
 dnl # Public global zone stats now include free/inactive/active page
index f6f164dcaf1d59deb54884f705a5f9bd91d6fcd1..96d9d886ffdb6fb6113cf8248e46c632c9c6f705 100755 (executable)
--- a/configure
+++ b/configure
 
 
 
-       echo "$as_me:$LINENO: checking whether div64_64() is available" >&5
-echo $ECHO_N "checking whether div64_64() is available... $ECHO_C" >&6
-
-
-cat >conftest.c <<_ACEOF
-/* confdefs.h.  */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h.  */
-
-
-               #include <asm/div64.h>
-               #include <linux/types.h>
-
-int
-main (void)
-{
-
-               uint64_t i = div64_64(1ULL, 1ULL);
+       echo "$as_me:$LINENO: checking whether symbol div64_64 is exported" >&5
+echo $ECHO_N "checking whether symbol div64_64 is exported... $ECHO_C" >&6
+       grep -q -E '[[:space:]]div64_64[[:space:]]' $LINUX_OBJ/Module.symvers 2>/dev/null
+       rc=$?
+       if test $rc -ne 0; then
+               export=0
+               for file in ; do
+                       grep -q -E "EXPORT_SYMBOL.*(div64_64)" "$LINUX_OBJ/$file" 2>/dev/null
+                       rc=$?
+                       if test $rc -eq 0; then
+                               export=1
+                               break;
+                       fi
+               done
+               if test $export -eq 0; then
+                       echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
 
-  ;
-  return 0;
-}
+               else
+                       echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
 
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DIV64_64 1
 _ACEOF
 
-
-       rm -Rf build && mkdir -p build
-       echo "obj-m := conftest.o" >build/Makefile
-       if { ac_try='cp conftest.c build && make modules LINUXINCLUDE="-Iinclude -Iinclude2 -I$LINUX/include -include include/linux/autoconf.h" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
-  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
-  (eval $ac_try) 2>&5
-  ac_status=$?
-  echo "$as_me:$LINENO: \$? = $ac_status" >&5
-  (exit $ac_status); }; }; then
-
+               fi
+       else
                echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6
 
@@ -20559,20 +20545,46 @@ cat >>confdefs.h <<\_ACEOF
 #define HAVE_DIV64_64 1
 _ACEOF
 
+       fi
+
 
-else
-  echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
 
-               echo "$as_me:$LINENO: result: no" >&5
+       echo "$as_me:$LINENO: checking whether symbol div64_u64 is exported" >&5
+echo $ECHO_N "checking whether symbol div64_u64 is exported... $ECHO_C" >&6
+       grep -q -E '[[:space:]]div64_u64[[:space:]]' $LINUX_OBJ/Module.symvers 2>/dev/null
+       rc=$?
+       if test $rc -ne 0; then
+               export=0
+               for file in ; do
+                       grep -q -E "EXPORT_SYMBOL.*(div64_u64)" "$LINUX_OBJ/$file" 2>/dev/null
+                       rc=$?
+                       if test $rc -eq 0; then
+                               export=1
+                               break;
+                       fi
+               done
+               if test $export -eq 0; then
+                       echo "$as_me:$LINENO: result: no" >&5
 echo "${ECHO_T}no" >&6
 
+               else
+                       echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
 
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DIV64_U64 1
+_ACEOF
 
-fi
+               fi
+       else
+               echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
 
-       rm -Rf build
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DIV64_U64 1
+_ACEOF
 
+       fi
 
 
 
@@ -20875,6 +20887,72 @@ _ACEOF
 
 
 
+       echo "$as_me:$LINENO: checking whether global_page_state() is available" >&5
+echo $ECHO_N "checking whether global_page_state() is available... $ECHO_C" >&6
+
+
+cat >conftest.c <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+               #include <linux/vmstat.h>
+
+int
+main (void)
+{
+
+               unsigned long state;
+               state = global_page_state(NR_FREE_PAGES);
+
+  ;
+  return 0;
+}
+
+_ACEOF
+
+
+       rm -Rf build && mkdir -p build
+       echo "obj-m := conftest.o" >build/Makefile
+       if { ac_try='cp conftest.c build && make modules LINUXINCLUDE="-Iinclude -Iinclude2 -I$LINUX/include -include include/linux/autoconf.h" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $ARCH_UM M=$PWD/build'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } >/dev/null && { ac_try='test -s build/conftest.o'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+               echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GLOBAL_PAGE_STATE 1
+_ACEOF
+
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+               echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+
+
+fi
+
+       rm -Rf build
+
+
+
+
        echo "$as_me:$LINENO: checking whether free/inactive/active page state is available" >&5
 echo $ECHO_N "checking whether free/inactive/active page state is available... $ECHO_C" >&6
 
index b6abe7a8c119f0d9fb9eab28b8d4646d889b629d..179dbc1d76c93f5f82cd270d7cd9db990c24d06c 100644 (file)
@@ -68,6 +68,7 @@ SPL_AC_KMALLOC_NODE
 SPL_AC_MONOTONIC_CLOCK
 SPL_AC_INODE_I_MUTEX
 SPL_AC_DIV64_64
+SPL_AC_DIV64_U64
 SPL_AC_3ARGS_ON_EACH_CPU
 SPL_AC_KALLSYMS_LOOKUP_NAME
 SPL_AC_GET_VMALLOC_INFO
@@ -75,6 +76,7 @@ SPL_AC_FIRST_ONLINE_PGDAT
 SPL_AC_NEXT_ONLINE_PGDAT
 SPL_AC_NEXT_ZONE
 SPL_AC_GET_ZONE_COUNTS
+SPL_AC_GLOBAL_PAGE_STATE
 SPL_AC_ZONE_STAT_ITEM_FIA
 
 AC_CONFIG_FILES([
index 82abed41d02a668167bc8acdf1cd532b50da3b66..6cd0a18deb7ea2ef3831a63fc2b3c3cb36d16b56 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef _SPL_KALLSYMS_COMPAT_H
 #define _SPL_KALLSYMS_COMPAT_H
 
+#define SYMBOL_POISON ((void*)0xabcddcba)
+
 #ifdef HAVE_KALLSYMS_LOOKUP_NAME
 
 #include <linux/kallsyms.h>
index 123005e5e0018122dfb26b83daf22d69cc812ccf..71058eef8cb8da0dc4dc555ac996e0c21538a8cd 100644 (file)
@@ -121,15 +121,13 @@ typedef void (*get_zone_counts_t)(unsigned long *, unsigned long *,
                                  unsigned long *);
 extern get_zone_counts_t get_zone_counts_fn;
 # define get_zone_counts(a,i,f)        get_zone_counts_fn(a,i,f)
+# endif /* HAVE_GET_ZONE_COUNTS */
 
 extern unsigned long spl_global_page_state(int);
 /* Defines designed to simulate enum but large enough to ensure no overlap */
 # define NR_FREE_PAGES         0x8001
 # define NR_INACTIVE           0x8002
 # define NR_ACTIVE             0x8003
-# else
-# error "HAVE_ZONE_STAT_ITEM_FIA and HAVE_GET_ZONE_COUNTS unavailable"
-# endif /* HAVE_GET_ZONE_COUNTS */
 #else
 #define spl_global_page_state(item)    global_page_state(item)
 #endif /* HAVE_ZONE_STAT_ITEM_FIA */
index 76a8de472e9630ed58c527656fbe618bccabff19..fe6350079f1b8ce9ac0ebd76e422f2f7108e5458 100644 (file)
@@ -55,7 +55,7 @@ int p0 = 0;
 EXPORT_SYMBOL(p0);
 
 #ifndef HAVE_KALLSYMS_LOOKUP_NAME
-kallsyms_lookup_name_t spl_kallsyms_lookup_name_fn = NULL;
+kallsyms_lookup_name_t spl_kallsyms_lookup_name_fn = SYMBOL_POISON;
 #endif
 
 int
@@ -96,10 +96,12 @@ EXPORT_SYMBOL(highbit);
 #if BITS_PER_LONG == 32
 uint64_t __udivdi3(uint64_t dividend, uint64_t divisor)
 {
-#ifdef HAVE_DIV64_64
+#if defined(HAVE_DIV64_64) /* 2.6.22 - 2.6.25 API */
        return div64_64(dividend, divisor);
+#elif defined(HAVE_DIV64_U64) /* 2.6.26 - 2.6.x API */
+       return div64_u64(dividend, divisor);
 #else
-       /* Taken from a 2.6.24 kernel. */
+       /* Implementation from 2.6.30 kernel */
        uint32_t high, d;
 
        high = divisor >> 32;
@@ -111,10 +113,8 @@ uint64_t __udivdi3(uint64_t dividend, uint64_t divisor)
        } else
                d = divisor;
 
-       do_div(dividend, d);
-
-       return dividend;
-#endif
+       return do_div64(dividend, d);
+#endif /* HAVE_DIV64_64, HAVE_DIV64_U64 */
 }
 EXPORT_SYMBOL(__udivdi3);
 
@@ -126,12 +126,12 @@ uint64_t __umoddi3(uint64_t dividend, uint64_t divisor)
        return dividend - divisor * (dividend / divisor);
 }
 EXPORT_SYMBOL(__umoddi3);
-#endif
+#endif /* BITS_PER_LONG */
 
 /* NOTE: The strtoxx behavior is solely based on my reading of the Solaris
  * ddi_strtol(9F) man page.  I have not verified the behavior of these
  * functions against their Solaris counterparts.  It is possible that I
- * may have misinterpretted the man page or the man page is incorrect.
+ * may have misinterpreted the man page or the man page is incorrect.
  */
 int ddi_strtoul(const char *, char **, int, unsigned long *);
 int ddi_strtol(const char *, char **, int, long *);
@@ -248,14 +248,20 @@ set_hostid(void)
                         "TERM=linux",
                         "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
                         NULL };
+       int rc;
 
        /* Doing address resolution in the kernel is tricky and just
         * not a good idea in general.  So to set the proper 'hw_serial'
         * use the usermodehelper support to ask '/bin/sh' to run
         * '/usr/bin/hostid' and redirect the result to /proc/sys/spl/hostid
-        * for us to use.  It's a horific solution but it will do for now.
+        * for us to use.  It's a horrific solution but it will do for now.
         */
-       return call_usermodehelper(sh_path, argv, envp, 1);
+       rc = call_usermodehelper(sh_path, argv, envp, 1);
+       if (rc)
+               printk("SPL: Failed user helper '%s %s %s', rc = %d\n",
+                      argv[0], argv[1], argv[2], rc);
+
+       return rc;
 }
 
 uint32_t
@@ -273,9 +279,7 @@ zone_get_hostid(void *zone)
 }
 EXPORT_SYMBOL(zone_get_hostid);
 
-#ifdef HAVE_KALLSYMS_LOOKUP_NAME
-#define set_kallsyms_lookup_name()     (0)
-#else
+#ifndef HAVE_KALLSYMS_LOOKUP_NAME
 /*
  * Because kallsyms_lookup_name() is no longer exported in the
  * mainline kernel we are forced to resort to somewhat drastic
@@ -303,9 +307,10 @@ set_kallsyms_lookup_name(void)
 
        rc = call_usermodehelper(sh_path, argv, envp, 1);
        if (rc)
-               return rc;
+               printk("SPL: Failed user helper '%s %s %s', rc = %d\n",
+                      argv[0], argv[1], argv[2], rc);
 
-       return spl_kmem_init_kallsyms_lookup();
+       return rc;
 }
 #endif
 
@@ -337,8 +342,13 @@ static int __init spl_init(void)
        if ((rc = set_hostid()))
                GOTO(out7, rc = -EADDRNOTAVAIL);
 
+#ifndef HAVE_KALLSYMS_LOOKUP_NAME
        if ((rc = set_kallsyms_lookup_name()))
                GOTO(out7, rc = -EADDRNOTAVAIL);
+#endif /* HAVE_KALLSYMS_LOOKUP_NAME */
+
+       if ((rc = spl_kmem_init_kallsyms_lookup()))
+               GOTO(out7, rc);
 
        printk("SPL: Loaded Solaris Porting Layer v%s\n", SPL_META_VERSION);
        RETURN(rc);
index 6723dcd0810ee32c8195cea03a9628e4474f1778..7066919299e0502649fa7562f08bf2e24d34b726 100644 (file)
@@ -80,29 +80,30 @@ vmem_t *zio_arena = NULL;
 EXPORT_SYMBOL(zio_arena);
 
 #ifndef HAVE_GET_VMALLOC_INFO
-get_vmalloc_info_t get_vmalloc_info_fn = NULL;
+get_vmalloc_info_t get_vmalloc_info_fn = SYMBOL_POISON;
 EXPORT_SYMBOL(get_vmalloc_info_fn);
 #endif /* HAVE_GET_VMALLOC_INFO */
 
 #ifndef HAVE_FIRST_ONLINE_PGDAT
-first_online_pgdat_t first_online_pgdat_fn = NULL;
+first_online_pgdat_t first_online_pgdat_fn = SYMBOL_POISON;
 EXPORT_SYMBOL(first_online_pgdat_fn);
 #endif /* HAVE_FIRST_ONLINE_PGDAT */
 
 #ifndef HAVE_NEXT_ONLINE_PGDAT
-next_online_pgdat_t next_online_pgdat_fn = NULL;
+next_online_pgdat_t next_online_pgdat_fn = SYMBOL_POISON;
 EXPORT_SYMBOL(next_online_pgdat_fn);
 #endif /* HAVE_NEXT_ONLINE_PGDAT */
 
 #ifndef HAVE_NEXT_ZONE
-next_zone_t next_zone_fn = NULL;
+next_zone_t next_zone_fn = SYMBOL_POISON;
 EXPORT_SYMBOL(next_zone_fn);
 #endif /* HAVE_NEXT_ZONE */
 
 #ifndef HAVE_ZONE_STAT_ITEM_FIA
 # ifndef HAVE_GET_ZONE_COUNTS
-get_zone_counts_t get_zone_counts_fn = NULL;
+get_zone_counts_t get_zone_counts_fn = SYMBOL_POISON;
 EXPORT_SYMBOL(get_zone_counts_fn);
+# endif /* HAVE_GET_ZONE_COUNTS */
 
 unsigned long
 spl_global_page_state(int item)
@@ -126,12 +127,13 @@ spl_global_page_state(int item)
                return active;
        }
 
+# ifdef HAVE_GLOBAL_PAGE_STATE
        return global_page_state((enum zone_stat_item)item);
+# else
+       return 0; /* Unsupported */
+# endif /* HAVE_GLOBAL_PAGE_STATE */
 }
 EXPORT_SYMBOL(spl_global_page_state);
-# else
-# error "HAVE_ZONE_STAT_ITEM_FIA and HAVE_GET_ZONE_COUNTS unavailable"
-# endif /* HAVE_GET_ZONE_COUNTS */
 #endif  /* HAVE_ZONE_STAT_ITEM_FIA */
 
 pgcnt_t
@@ -1785,8 +1787,8 @@ spl_kmem_init_globals(void)
        }
 
        /* Solaris default values */
-       swapfs_minfree = MAX(2*1024*1024 / PAGE_SIZE, physmem / 8);
-       swapfs_reserve = MIN(4*1024*1024 / PAGE_SIZE, physmem / 16);
+       swapfs_minfree = MAX(2*1024*1024 >> PAGE_SHIFT, physmem >> 3);
+       swapfs_reserve = MIN(4*1024*1024 >> PAGE_SHIFT, physmem >> 4);
 }
 
 /*
@@ -1839,8 +1841,6 @@ spl_kmem_init_kallsyms_lookup(void)
                printk(KERN_ERR "Error: Unknown symbol get_zone_counts\n");
                return -EFAULT;
        }
-# else
-# error "HAVE_ZONE_STAT_ITEM_FIA and HAVE_GET_ZONE_COUNTS unavailable"
 # endif /* HAVE_GET_ZONE_COUNTS */
 #endif  /* HAVE_ZONE_STAT_ITEM_FIA */
 
index 294948d81957cd0a527a6a9262970131b6d98cf2..5dd7884f62fbfa3769e2c4954eefcca42d825572 100644 (file)
@@ -503,7 +503,7 @@ proc_dokallsyms_lookup_name(struct ctl_table *table, int write,
 
         if (write) {
                /* This may only be set once at module load time */
-               if (spl_kallsyms_lookup_name_fn)
+               if (spl_kallsyms_lookup_name_fn != SYMBOL_POISON)
                        RETURN(-EEXIST);
 
                /* We can't use proc_doulongvec_minmax() in the write
index 88722afe1bfa4466406279c7e1a3c721d84b03e4..1e9671e8394be3d8b34b217cf9cdd36f161c7fd7 100644 (file)
@@ -60,9 +60,9 @@ __gethrtime(void) {
         /* Deal with signed/unsigned mismatch */
         return (hrtime_t)(res & ~(1ULL << 63));
 #else
-        int64_t j = get_jiffies_64();
+        uint64_t j = get_jiffies_64();
 
-        return j * NSEC_PER_SEC / HZ;
+        return (hrtime_t)(j * NSEC_PER_SEC / HZ);
 #endif
 }
 EXPORT_SYMBOL(__gethrtime);
index 5a610cee4c97f22ce12715d2238b28bce0e74674..224eaa63a10c4e8939ad488b28d22a1d45ac7697 100644 (file)
@@ -327,7 +327,7 @@ splat_list_test6(struct file *file, void *arg)
 
        /* Remove all odd items from the queue */
        splat_vprint(file, SPLAT_LIST_TEST6_NAME,
-                    "Removing %d odd items from the list\n", list_size / 2);
+                    "Removing %d odd items from the list\n", list_size >> 1);
        for (li = list_head(&list); li != NULL; li = list_next(&list, li)) {
                if (li->li_data % 2 == 1) {
                        li_prev = list_prev(&list, li);
index 8cfcff5c69825b6fe7ace54839b499f0322cab4d..4369f85b748fafd710a571da3971e838eaf945ed 100644 (file)
@@ -39,6 +39,9 @@
 /* div64_64() is available */
 #undef HAVE_DIV64_64
 
+/* div64_u64() is available */
+#undef HAVE_DIV64_U64
+
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
@@ -60,6 +63,9 @@
 /* get_zone_counts() is available */
 #undef HAVE_GET_ZONE_COUNTS
 
+/* global_page_state() is available */
+#undef HAVE_GLOBAL_PAGE_STATE
+
 /* init_utsname() is available */
 #undef HAVE_INIT_UTSNAME