diff --git a/config/kernel-totalhigh_pages.m4 b/config/kernel-totalhigh_pages.m4
new file mode 100644
index 0000000000..b22e86d4db
--- /dev/null
+++ b/config/kernel-totalhigh_pages.m4
@@ -0,0 +1,19 @@
+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)
+	])
+])
diff --git a/config/kernel.m4 b/config/kernel.m4
index f7d657e0ca..026a5258f9 100644
--- a/config/kernel.m4
+++ b/config/kernel.m4
@@ -164,6 +164,7 @@ AC_DEFUN([ZFS_AC_CONFIG_KERNEL], [
 	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
 
diff --git a/include/spl/sys/vmsystm.h b/include/spl/sys/vmsystm.h
index 6bdfc852ac..5807d960ad 100644
--- a/include/spl/sys/vmsystm.h
+++ b/include/spl/sys/vmsystm.h
@@ -39,6 +39,12 @@
 #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() + \
diff --git a/module/zfs/arc.c b/module/zfs/arc.c
index c724878948..9b500352a4 100644
--- a/module/zfs/arc.c
+++ b/module/zfs/arc.c
@@ -4828,7 +4828,7 @@ arc_all_memory(void)
 {
 #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 */