Linux kernel commit
ca79b0c211af63fa3276f0e3fd7dd9ada2439839
"mm: convert totalram_pages and totalhigh_pages variables to atomic"
replaced `totalhigh_pages` with an inline function `totalhigh_pages()`.
This broke compilation on IA32, etc, as ZoL uses `totalhigh_pages`
on archs with highmem. Confirmed on Fedora 30 (5.0.9-301.fc30.i686).
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tomohiro Kusumi <kusumi.tomohiro@gmail.com>
Closes #8677
Closes #8701
--- /dev/null
+dnl #
+dnl # 5.0 API change
+dnl #
+dnl # ca79b0c211af mm: convert totalram_pages and totalhigh_pages variables to atomic
+dnl #
+AC_DEFUN([ZFS_AC_KERNEL_TOTALHIGH_PAGES], [
+ AC_MSG_CHECKING([whether totalhigh_pages() exists])
+ ZFS_LINUX_TRY_COMPILE([
+ #include <linux/highmem.h>
+ ],[
+ unsigned long pages __attribute__ ((unused));
+ pages = totalhigh_pages();
+ ],[
+ AC_MSG_RESULT(yes)
+ AC_DEFINE(HAVE_TOTALHIGH_PAGES, 1, [totalhigh_pages() exists])
+ ],[
+ AC_MSG_RESULT(no)
+ ])
+])
ZFS_AC_KERNEL_IN_COMPAT_SYSCALL
ZFS_AC_KERNEL_KTIME_GET_COARSE_REAL_TS64
ZFS_AC_KERNEL_TOTALRAM_PAGES_FUNC
+ ZFS_AC_KERNEL_TOTALHIGH_PAGES
ZFS_AC_KERNEL_BLK_QUEUE_DISCARD
ZFS_AC_KERNEL_BLK_QUEUE_SECURE_ERASE
#define zfs_totalram_pages totalram_pages
#endif
+#ifdef HAVE_TOTALHIGH_PAGES
+#define zfs_totalhigh_pages totalhigh_pages()
+#else
+#define zfs_totalhigh_pages totalhigh_pages
+#endif
+
#define membar_producer() smp_wmb()
#define physmem zfs_totalram_pages
#define freemem (nr_free_pages() + \
{
#ifdef _KERNEL
#ifdef CONFIG_HIGHMEM
- return (ptob(zfs_totalram_pages - totalhigh_pages));
+ return (ptob(zfs_totalram_pages - zfs_totalhigh_pages));
#else
return (ptob(zfs_totalram_pages));
#endif /* CONFIG_HIGHMEM */