diff --git a/.gitignore b/.gitignore
index 25beeff..81b65ec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 /rdma-core-12.tgz
 /rdma-core-12.tar.gz
 /rdma-core-14.tar.gz
+/rdma-core-16.2.tar.gz
diff --git a/rdma-core.spec b/rdma-core.spec
index 7641d8b..c05b477 100644
--- a/rdma-core.spec
+++ b/rdma-core.spec
@@ -1,6 +1,6 @@
 Name: rdma-core
-Version: 14
-Release: 4%{?dist}
+Version: 16.2
+Release: 1%{?dist}
 Summary: RDMA core userspace libraries and daemons
 
 # Almost everything is licensed under the OFA dual GPLv2, 2 Clause BSD license
@@ -22,24 +22,19 @@ BuildRequires: pkgconfig(libnl-route-3.0)
 BuildRequires: valgrind-devel
 %endif
 BuildRequires: systemd
+BuildRequires: systemd-devel
 BuildRequires: python
-BuildRequires: sed
 
-Requires: dracut, kmod, initscripts, systemd
-%if 0%{?fedora} >= 24
-Requires: systemd-udev
-%endif
+Requires: dracut, kmod, systemd, initscripts
 # Red Hat/Fedora previously shipped redhat/ as a stand-alone
 # package called 'rdma', which we're supplanting here.
 Provides: rdma = %{version}-%{release}
 Obsoletes: rdma < %{version}-%{release}
 Provides: rdma-ndd = %{version}-%{release}
 Obsoletes: rdma-ndd < %{version}-%{release}
+Obsoletes: libehca < 1.2.2-7
 # the ndd utility moved from infiniband-diags to rdma-core
 Conflicts: infiniband-diags <= 1.6.7
-Requires: pciutils
-# 32-bit arm is missing required arch-specific memory barriers,
-ExcludeArch: %{arm}
 
 # Since we recommend developers use Ninja, so should packagers, for consistency.
 %define CMAKE_FLAGS %{nil}
@@ -57,9 +52,9 @@ BuildRequires: make
 %endif
 
 %description
-RDMA core userspace infrastructure and documentation, including initscripts,
-kernel driver-specific modprobe override configs, IPoIB network scripts,
-dracut rules, and the rdma-ndd utility.
+RDMA core userspace infrastructure and documentation, including initialization
+scripts, kernel driver-specific modprobe override configs, IPoIB network
+scripts, dracut rules, and the rdma-ndd utility.
 
 %package devel
 Summary: RDMA core development libraries and headers
@@ -113,6 +108,8 @@ RDMA core development libraries and headers.
 
 %package -n libibverbs
 Summary: A library and drivers for direct userspace use of RDMA (InfiniBand/iWARP/RoCE) hardware
+Requires(post): /sbin/ldconfig
+Requires(postun): /sbin/ldconfig
 Requires: %{name}%{?_isa} = %{version}-%{release}
 Provides: libcxgb3 = %{version}-%{release}
 Obsoletes: libcxgb3 < %{version}-%{release}
@@ -177,8 +174,6 @@ displays information about RDMA devices.
 Summary: InfiniBand Communication Manager Assistant
 %{?systemd_requires}
 Requires: %{name}%{?_isa} = %{version}-%{release}
-Requires: libibumad%{?_isa} = %{version}-%{release}
-Requires: libibverbs%{?_isa} = %{version}-%{release}
 
 %description -n ibacm
 The ibacm daemon helps reduce the load of managing path record lookups on
@@ -201,8 +196,8 @@ tcp ports through the standard socket interface.
 
 %package -n libibcm
 Summary: Userspace InfiniBand Connection Manager
+ExcludeArch: s390 s390x
 Requires: %{name}%{?_isa} = %{version}-%{release}
-Requires: libibverbs%{?_isa} = %{version}-%{release}
 
 %description -n libibcm
 libibcm provides a userspace library that handles the majority of the low
@@ -220,15 +215,13 @@ are used by the IB diagnostic and management tools, including OpenSM.
 %package -n librdmacm
 Summary: Userspace RDMA Connection Manager
 Requires: %{name}%{?_isa} = %{version}-%{release}
-Requires: libibverbs%{?_isa} = %{version}-%{release}
 
 %description -n librdmacm
-librdmacm provides a userspace RDMA Communication Managment API.
+librdmacm provides a userspace RDMA Communication Management API.
 
 %package -n librdmacm-utils
 Summary: Examples for the librdmacm library
 Requires: librdmacm%{?_isa} = %{version}-%{release}
-Requires: libibverbs%{?_isa} = %{version}-%{release}
 
 %description -n librdmacm-utils
 Example test programs for the librdmacm library.
@@ -240,8 +233,6 @@ Provides: srptools = %{version}-%{release}
 Obsoletes: openib-srptools <= 0.0.6
 %{?systemd_requires}
 Requires: %{name}%{?_isa} = %{version}-%{release}
-Requires: libibumad%{?_isa} = %{version}-%{release}
-Requires: libibverbs%{?_isa} = %{version}-%{release}
 
 %description -n srp_daemon
 In conjunction with the kernel ib_srp driver, srp_daemon allows you to
@@ -298,28 +289,20 @@ install -D -m0644 redhat/rdma.mlx4.conf %{buildroot}/%{_sysconfdir}/rdma/mlx4.co
 install -D -m0755 redhat/rdma.ifup-ib %{buildroot}/%{_sysconfdir}/sysconfig/network-scripts/ifup-ib
 install -D -m0755 redhat/rdma.ifdown-ib %{buildroot}/%{_sysconfdir}/sysconfig/network-scripts/ifdown-ib
 install -D -m0644 redhat/rdma.service %{buildroot}%{_unitdir}/rdma.service
-install -D -m0644 redhat/rdma.udev-ipoib-naming.rules %{buildroot}%{_sysconfdir}/udev/rules.d/70-persistent-ipoib.rules
-install -D -m0644 redhat/rdma.mlx4.user.modprobe %{buildroot}%{_sysconfdir}/modprobe.d/mlx4.conf
 install -D -m0755 redhat/rdma.modules-setup.sh %{buildroot}%{dracutlibdir}/modules.d/05rdma/module-setup.sh
 install -D -m0644 redhat/rdma.udev-rules %{buildroot}%{_udevrulesdir}/98-rdma.rules
 install -D -m0644 redhat/rdma.mlx4.sys.modprobe %{buildroot}%{sysmodprobedir}/libmlx4.conf
-install -D -m0644 redhat/rdma.cxgb3.sys.modprobe %{buildroot}%{sysmodprobedir}/cxgb3.conf
-install -D -m0644 redhat/rdma.cxgb4.sys.modprobe %{buildroot}%{sysmodprobedir}/cxgb4.conf
 install -D -m0755 redhat/rdma.kernel-init %{buildroot}%{_libexecdir}/rdma-init-kernel
 install -D -m0755 redhat/rdma.sriov-init %{buildroot}%{_libexecdir}/rdma-set-sriov-vf
-install -D -m0644 redhat/rdma.fixup-mtrr.awk %{buildroot}%{_libexecdir}/rdma-fixup-mtrr.awk
 install -D -m0755 redhat/rdma.mlx4-setup.sh %{buildroot}%{_libexecdir}/mlx4-setup.sh
 
 # ibacm
 bin/ib_acme -D . -O
-# multi-lib conflict resolution hacks (bug 1429362)
-sed -i -e 's|%{_libdir}|/usr/lib|' %{buildroot}%{_mandir}/man7/ibacm_prov.7
-sed -i -e 's|%{_libdir}|/usr/lib|' ibacm_opts.cfg
 install -D -m0644 ibacm_opts.cfg %{buildroot}%{_sysconfdir}/rdma/
-install -D -m0644 redhat/ibacm.service %{buildroot}%{_unitdir}/
 
 # Delete the package's init.d scripts
 rm -rf %{buildroot}/%{_initrddir}/
+rm -f %{buildroot}/%{_sbindir}/srp_daemon.sh
 
 %post -n libibverbs -p /sbin/ldconfig
 %postun -n libibverbs -p /sbin/ldconfig
@@ -358,26 +341,43 @@ rm -rf %{buildroot}/%{_initrddir}/
 %dir %{_sysconfdir}/rdma
 %dir %{_docdir}/%{name}-%{version}
 %doc %{_docdir}/%{name}-%{version}/README.md
-%config(noreplace) %{_sysconfdir}/rdma/*
+%doc %{_docdir}/%{name}-%{version}/rxe.md
+%doc %{_docdir}/%{name}-%{version}/udev.md
+%doc %{_docdir}/%{name}-%{version}/tag_matching.md
+%config(noreplace) %{_sysconfdir}/rdma/mlx4.conf
+%config(noreplace) %{_sysconfdir}/rdma/modules/infiniband.conf
+%config(noreplace) %{_sysconfdir}/rdma/modules/iwarp.conf
+%config(noreplace) %{_sysconfdir}/rdma/modules/opa.conf
+%config(noreplace) %{_sysconfdir}/rdma/modules/rdma.conf
+%config(noreplace) %{_sysconfdir}/rdma/modules/roce.conf
+%config(noreplace) %{_sysconfdir}/rdma/rdma.conf
+%config(noreplace) %{_sysconfdir}/rdma/sriov-vfs
 %config(noreplace) %{_sysconfdir}/udev/rules.d/*
 %config(noreplace) %{_sysconfdir}/modprobe.d/mlx4.conf
 %config(noreplace) %{_sysconfdir}/modprobe.d/truescale.conf
 %{_sysconfdir}/sysconfig/network-scripts/*
+%{_unitdir}/rdma-hw.target
+%{_unitdir}/rdma-load-modules@.service
 %{_unitdir}/rdma.service
 %dir %{dracutlibdir}/modules.d/05rdma
 %{dracutlibdir}/modules.d/05rdma/module-setup.sh
-%{_udevrulesdir}/*
+%{_udevrulesdir}/60-rdma-ndd.rules
+%{_udevrulesdir}/75-rdma-description.rules
+%{_udevrulesdir}/90-rdma-hw-modules.rules
+%{_udevrulesdir}/90-rdma-ulp-modules.rules
+%{_udevrulesdir}/90-rdma-umad.rules
+%{_udevrulesdir}/98-rdma.rules
 %{sysmodprobedir}/libmlx4.conf
-%{sysmodprobedir}/cxgb3.conf
-%{sysmodprobedir}/cxgb4.conf
 %{_libexecdir}/rdma-init-kernel
 %{_libexecdir}/rdma-set-sriov-vf
-%{_libexecdir}/rdma-fixup-mtrr.awk
 %{_libexecdir}/mlx4-setup.sh
 %{_libexecdir}/truescale-serdes.cmds
+%{_bindir}/rxe_cfg
 %{_sbindir}/rdma-ndd
 %{_unitdir}/rdma-ndd.service
+%{_mandir}/man7/rxe*
 %{_mandir}/man8/rdma-ndd.*
+%{_mandir}/man8/rxe*
 %license COPYING.*
 
 %files devel
@@ -391,11 +391,13 @@ rm -rf %{buildroot}/%{_initrddir}/
 %{_mandir}/man3/rdma*
 %{_mandir}/man3/umad*
 %{_mandir}/man3/*_to_ibv_rate.*
+%{_mandir}/man7/rdma_cm.*
 %ifnarch s390x s390
 %{_mandir}/man3/mlx5dv*
 %{_mandir}/man7/mlx5dv*
 %endif
-%{_mandir}/man7/rdma_cm.*
+%{_mandir}/man3/mlx4dv*
+%{_mandir}/man7/mlx4dv*
 
 %files -n libibverbs
 %dir %{_sysconfdir}/libibverbs.d
@@ -403,17 +405,11 @@ rm -rf %{buildroot}/%{_initrddir}/
 %{_libdir}/libibverbs*.so.*
 %{_libdir}/libibverbs/*.so
 %ifnarch s390x s390
-%{_libdir}/libmlx5.so*
+%{_libdir}/libmlx5.so.*
 %endif
+%{_libdir}/libmlx4.so.*
 %config(noreplace) %{_sysconfdir}/libibverbs.d/*.driver
 %doc %{_docdir}/%{name}-%{version}/libibverbs.md
-%doc %{_docdir}/%{name}-%{version}/rxe.md
-%{_bindir}/rxe_cfg
-%{_mandir}/man7/rxe*
-%ifnarch s390x s390
-%{_mandir}/man7/mlx5dv*
-%endif
-%{_mandir}/man8/rxe*
 
 %files -n libibverbs-utils
 %{_bindir}/ibv_*
@@ -428,15 +424,18 @@ rm -rf %{buildroot}/%{_initrddir}/
 %{_mandir}/man7/ibacm.*
 %{_mandir}/man7/ibacm_prov.*
 %{_unitdir}/ibacm.service
+%{_unitdir}/ibacm.socket
 %dir %{_libdir}/ibacm
 %{_libdir}/ibacm/*
 %doc %{_docdir}/%{name}-%{version}/ibacm.md
 
 %files -n iwpmd
-%{_bindir}/iwpmd
+%{_sbindir}/iwpmd
 %{_unitdir}/iwpmd.service
+%config(noreplace) %{_sysconfdir}/rdma/modules/iwpmd.conf
 %config(noreplace) %{_sysconfdir}/iwpmd.conf
-%{_mandir}/man1/iwpmd.*
+%{_udevrulesdir}/90-iwpmd.rules
+%{_mandir}/man8/iwpmd.*
 %{_mandir}/man5/iwpmd.*
 
 %files -n libibcm
@@ -449,7 +448,7 @@ rm -rf %{buildroot}/%{_initrddir}/
 %files -n librdmacm
 %{_libdir}/librdmacm*.so.*
 %dir %{_libdir}/rsocket
-%{_libdir}/rsocket/librspreload.so*
+%{_libdir}/rsocket/*.so*
 %doc %{_docdir}/%{name}-%{version}/librdmacm.md
 %{_mandir}/man7/rsocket.*
 
@@ -483,15 +482,14 @@ rm -rf %{buildroot}/%{_initrddir}/
 
 %files -n srp_daemon
 %config(noreplace) %{_sysconfdir}/srp_daemon.conf
-%dir %{_libexecdir}/srp_daemon
+%config(noreplace) %{_sysconfdir}/rdma/modules/srp_daemon.conf
 %{_libexecdir}/srp_daemon/start_on_all_ports
 %{_unitdir}/srp_daemon.service
 %{_unitdir}/srp_daemon_port@.service
 %{_sbindir}/ibsrpdm
 %{_sbindir}/srp_daemon
-%{_sbindir}/srp_daemon.sh
 %{_sbindir}/run_srp_daemon
-%{_udevrulesdir}/srp_daemon.rules
+%{_udevrulesdir}/60-srp_daemon.rules
 %{_mandir}/man1/ibsrpdm.1*
 %{_mandir}/man1/srp_daemon.1*
 %{_mandir}/man5/srp_daemon.service.5*
diff --git a/sources b/sources
index b177000..da513eb 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (rdma-core-14.tar.gz) = 8fd988f038573ca3669543659f7f49441e625fe4e0ea4630160b6b54bfceb2124274f93616b4fec1b2bfc7bcf538dd68f0405031f4d7e5d6b922b80d4737b518
+SHA512 (rdma-core-16.2.tar.gz) = 0226bf62f34e5fdefa6863e0c5c1485a35235d147390b5f3e8090a88e968d8ce6aad4b5c799943f55824a93c6a9f8a9982aab228c60dbc0c547e0e3c1570ad97