diff --git a/valgrind-3.16.1-epoll.patch b/valgrind-3.16.1-epoll.patch
new file mode 100644
index 0000000..5bb1808
--- /dev/null
+++ b/valgrind-3.16.1-epoll.patch
@@ -0,0 +1,86 @@
+commit f326d68d762edf4b0e9604daa446b6f8ca25725a
+Author: Mark Wielaard <mark@klomp.org>
+Date:   Sun Jul 26 22:40:22 2020 +0200
+
+    epoll_ctl warns for uninitialized padding on non-amd64 64bit arches
+    
+    struct vki_epoll_event is packed on x86_64, but not on other 64bit
+    arches. This means that on 64bit arches there can be padding in the
+    epoll_event struct. Seperately the data field is only used by user
+    space (which might not set the data field if it doesn't need to).
+    
+    Only check the events field on epoll_ctl. But assume both events
+    and data are both written to by epoll_[p]wait (exclude padding).
+    
+    https://bugs.kde.org/show_bug.cgi?id=422623
+
+diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c
+index 5b5b7eee6..929a4d9af 100644
+--- a/coregrind/m_syswrap/syswrap-linux.c
++++ b/coregrind/m_syswrap/syswrap-linux.c
+@@ -2099,8 +2099,29 @@ PRE(sys_epoll_ctl)
+          SARG1, ( ARG2<3 ? epoll_ctl_s[ARG2] : "?" ), SARG3, ARG4);
+    PRE_REG_READ4(long, "epoll_ctl",
+                  int, epfd, int, op, int, fd, struct vki_epoll_event *, event);
+-   if (ARG2 != VKI_EPOLL_CTL_DEL)
+-      PRE_MEM_READ( "epoll_ctl(event)", ARG4, sizeof(struct vki_epoll_event) );
++   if (ARG2 != VKI_EPOLL_CTL_DEL) {
++      /* Just check the events field, the data field is for user space and
++         unused by the kernel.  */
++      struct vki_epoll_event *event = (struct vki_epoll_event *) ARG4;
++      PRE_MEM_READ( "epoll_ctl(event)", (Addr) &event->events,
++                    sizeof(__vki_u32) );
++   }
++}
++
++/* RES event records have been written (exclude padding).  */
++static void epoll_post_helper ( ThreadId tid, SyscallArgs* arrghs,
++                                SyscallStatus* status )
++{
++   vg_assert(SUCCESS);
++   if (RES > 0) {
++      Int i;
++      struct vki_epoll_event **events = (struct vki_epoll_event**)(Addr)ARG2;
++      for (i = 0; i < RES; i++) {
++         /* Assume both events and data are set (data is user space only). */
++         POST_FIELD_WRITE(events[i]->events);
++         POST_FIELD_WRITE(events[i]->data);
++      }
++   }
+ }
+ 
+ PRE(sys_epoll_wait)
+@@ -2111,13 +2132,12 @@ PRE(sys_epoll_wait)
+    PRE_REG_READ4(long, "epoll_wait",
+                  int, epfd, struct vki_epoll_event *, events,
+                  int, maxevents, int, timeout);
++   /* Assume all (maxevents) events records should be (fully) writable. */
+    PRE_MEM_WRITE( "epoll_wait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3);
+ }
+ POST(sys_epoll_wait)
+ {
+-   vg_assert(SUCCESS);
+-   if (RES > 0)
+-      POST_MEM_WRITE( ARG2, sizeof(struct vki_epoll_event)*RES ) ;
++   epoll_post_helper (tid, arrghs, status);
+ }
+ 
+ PRE(sys_epoll_pwait)
+@@ -2130,15 +2150,14 @@ PRE(sys_epoll_pwait)
+                  int, epfd, struct vki_epoll_event *, events,
+                  int, maxevents, int, timeout, vki_sigset_t *, sigmask,
+                  vki_size_t, sigsetsize);
++   /* Assume all (maxevents) events records should be (fully) writable. */
+    PRE_MEM_WRITE( "epoll_pwait(events)", ARG2, sizeof(struct vki_epoll_event)*ARG3);
+    if (ARG5)
+       PRE_MEM_READ( "epoll_pwait(sigmask)", ARG5, sizeof(vki_sigset_t) );
+ }
+ POST(sys_epoll_pwait)
+ {
+-   vg_assert(SUCCESS);
+-   if (RES > 0)
+-      POST_MEM_WRITE( ARG2, sizeof(struct vki_epoll_event)*RES ) ;
++   epoll_post_helper (tid, arrghs, status);
+ }
+ 
+ PRE(sys_eventfd)
diff --git a/valgrind.spec b/valgrind.spec
index 141f77f..0245617 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -96,6 +96,9 @@ Patch6: valgrind-3.16.0-some-Wl-z-now.patch
 # KDE#422174  unhandled instruction bytes: 0x48 0xE9 (REX prefix JMP instr)
 Patch7: valgrind-3.16.1-REX-prefix-JMP.patch
 
+# KDE#422623  epoll_ctl warns for uninit padding on non-amd64 64bit arches
+Patch8: valgrind-3.16.1-epoll.patch
+
 BuildRequires: glibc-devel
 
 %if %{build_openmpi}
@@ -228,6 +231,7 @@ Valgrind User Manual for details.
 %endif
 
 %patch7 -p1
+%patch8 -p1
 
 %build
 # LTO triggers undefined symbols in valgrind.  Valgrind has a --enable-lto
@@ -454,6 +458,7 @@ fi
 %changelog
 * Mon Jul 27 2020 Mark Wielaard <mjw@fedoraproject.org>
 - Add valgrind-3.16.1-REX-prefix-JMP.patch
+- Add valgrind-3.16.1-epoll.patch
 
 * Tue Jul 14 2020 Tom Stellard <tstellar@redhat.com> - 3.16.1-3
 - Use make macros