--- /dev/null
+From: Seth Forshee <seth.forshee@canonical.com>
+Date: Tue, 22 Aug 2017 07:59:11 -0500
+Subject: Linux: Include linux/uaccess.h rather than asm/uaccess.h if present
+
+Starting with Linux 4.12 there is a module build error on s390
+due to asm/uaccess.h using a macro defined in the common header.
+The common header has been around since 2.6.18 and has always
+included asm/uaccess.h, so switch to using the common header
+whenever it is present.
+
+Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
+Reviewed-on: https://gerrit.openafs.org/12714
+Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+(cherry picked from commit 962f4838dc461567d896304f617a0923745d13d5)
+
+Reviewed-on: https://gerrit.openafs.org/12718
+Tested-by: BuildBot <buildbot@rampaginggeek.com>
+Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
+Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
+Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
+(cherry picked from commit 7073408688da021864bba59c592e8924e05adb91)
+
+Change-Id: Ie58cfcf48aa80c18f19cbfc65f87363b154e96ee
+---
+ acinclude.m4 | 1 +
+ src/afs/LINUX/osi_machdep.h | 4 ++++
+ src/afs/sysincludes.h | 6 +++++-
+ src/rx/LINUX/rx_knet.c | 4 ++++
+ 4 files changed, 14 insertions(+), 1 deletion(-)
+
+diff --git a/acinclude.m4 b/acinclude.m4
+index ee40b4109a..d80cacd780 100644
+--- a/acinclude.m4
++++ b/acinclude.m4
+@@ -877,6 +877,7 @@ case $AFS_SYSNAME in *_linux* | *_umlinux*)
+ AC_CHECK_LINUX_HEADER([semaphore.h])
+ AC_CHECK_LINUX_HEADER([seq_file.h])
+ AC_CHECK_LINUX_HEADER([sched/signal.h])
++ AC_CHECK_LINUX_HEADER([uaccess.h])
+
+ dnl Type existence checks
+ AC_CHECK_LINUX_TYPE([struct vfs_path], [dcache.h])
+diff --git a/src/afs/LINUX/osi_machdep.h b/src/afs/LINUX/osi_machdep.h
+index 9008f7732e..ce8cabf6ee 100644
+--- a/src/afs/LINUX/osi_machdep.h
++++ b/src/afs/LINUX/osi_machdep.h
+@@ -123,7 +123,11 @@ wakeup(void *event)
+ #define IsAfsVnode(V) ((V)->i_sb == afs_globalVFS) /* test superblock instead */
+ #define SetAfsVnode(V) /* unnecessary */
+
++#if defined(HAVE_LINUX_UACCESS_H)
++#include <linux/uaccess.h>
++#else
+ #include <asm/uaccess.h>
++#endif
+
+ #define copyin(F, T, C) (copy_from_user ((char*)(T), (char*)(F), (C)) > 0 ? EFAULT : 0)
+ static inline long copyinstr(char *from, char *to, int count, int *length) {
+diff --git a/src/afs/sysincludes.h b/src/afs/sysincludes.h
+index c2abb373a3..1898e1e28c 100644
+--- a/src/afs/sysincludes.h
++++ b/src/afs/sysincludes.h
+@@ -151,7 +151,11 @@ struct coda_inode_info {
+ struct xfs_inode_info {
+ };
+ # endif
+-# include <asm/uaccess.h>
++# if defined(HAVE_LINUX_UACCESS_H)
++# include <linux/uaccess.h>
++# else
++# include <asm/uaccess.h>
++# endif
+ # include <linux/list.h>
+ # include <linux/dcache.h>
+ # include <linux/mount.h>
+diff --git a/src/rx/LINUX/rx_knet.c b/src/rx/LINUX/rx_knet.c
+index 1a5cfdefa0..29e73a1422 100644
+--- a/src/rx/LINUX/rx_knet.c
++++ b/src/rx/LINUX/rx_knet.c
+@@ -18,7 +18,11 @@
+
+ #include <linux/version.h>
+ #include "rx/rx_kcommon.h"
++#if defined(HAVE_LINUX_UACCESS_H)
++#include <linux/uaccess.h>
++#else
+ #include <asm/uaccess.h>
++#endif
+ #ifdef ADAPT_PMTU
+ #include <linux/errqueue.h>
+ #include <linux/icmp.h>
+--
+2.14.1
+