Architecture specific change in rpms/wine.git
by githook-noreply@fedoraproject.org
The package rpms/wine.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/wine.git/commit/?id=26cfee826b9c0....
Change:
+%ifarch %{arm}
Thanks.
Full change:
============
commit 26cfee826b9c07438515452bbb4aecbb5a2c0255
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Fri Feb 9 16:21:21 2018 -0600
Wine's ARM float check fails on Fedora
diff --git a/wine.spec b/wine.spec
index 13e42c9..ff6e50c 100644
--- a/wine.spec
+++ b/wine.spec
@@ -694,6 +694,9 @@ export CFLAGS="`echo $TEMP_CFLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//'` -Wno-e
--x-includes=%{_includedir} --x-libraries=%{_libdir} \
--without-hal --with-dbus \
--with-x \
+%ifarch %{arm}
+ --with-float-abi=hard \
+%endif
%ifarch x86_64 aarch64
--enable-win64 \
%endif
commit 95efc85f370ae39cc77b766539b16d464c08e8ec
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Fri Feb 9 12:00:55 2018 -0600
Update to 3.1, disable wine-staging
diff --git a/.gitignore b/.gitignore
index 45c0420..141eb39 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,2 @@
-/wine-2.21.tar.xz
-/wine-2.21.tar.xz.sign
-/wine-staging-2.21.tar.gz
+/wine-3.1.tar.xz
+/wine-3.1.tar.xz.sign
diff --git a/sources b/sources
index a9ee45c..0eea7a1 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
-SHA512 (wine-2.21.tar.xz) = 4e33c463debe637827ed65f1118e692832bb5374491f706f9d251b8a2956e20d2df5d90ceba218b9bc9e946de91b8ba1d96b460453f59cdd9d82f070d07e0c43
-SHA512 (wine-2.21.tar.xz.sign) = 0c31776e2a3eb2356ee3f83f53d911716a7cf4afd2eb1f94561d765e3f51d374a267effd8958bfd211577c543674ab5bbc75f0e83aeca24728450cc752852ac3
-SHA512 (wine-staging-2.21.tar.gz) = 701c6352c8bc5745b8078947bcc3b6209e4e6c387905395cc81d42276402243522d7fa543bb34293c74786adcde9a3c50a2cf4cd57e05e0f4c68991a49a00b41
+SHA512 (wine-3.1.tar.xz) = 49c30d820b8f4028935b4d90dd6251c881cb8cd41bde8833db2782f04111a3d111e24605a87b2d70e419d54cfb6bb42d941f4593f9b381812e3602bf1307c545
+SHA512 (wine-3.1.tar.xz.sign) = 4e3c16c7e60e98cae655e8937e5f9601375b8411b0aa213f95230e9d0ff3afc791a9043901cc73919f16fe52b51741389b1f25afc22638813210e743474f6428
diff --git a/wine.spec b/wine.spec
index f5152f3..13e42c9 100644
--- a/wine.spec
+++ b/wine.spec
@@ -7,9 +7,9 @@
#global _default_patch_fuzz 2
# build with compholio-patches, see: http://www.compholio.com/wine-compholio/
-# uncomment to enable; comment-out to disable.
+# wine-staging appears to be dead
%if 0%{?fedora}
-%global compholio 1
+%global compholio 0
%endif # 0%{?fedora}
# binfmt macros for RHEL
@@ -21,7 +21,7 @@
%endif
Name: wine
-Version: 2.21
+Version: 3.1
Release: 1%{?dist}
Summary: A compatibility layer for windows applications
@@ -69,9 +69,11 @@ Source502: wine-README-tahoma
Patch511: wine-cjk.patch
+%if 0%{?compholio}
# wine compholio patches for wine-staging
# pulseaudio-patch is covered by that patch-set, too.
Source900: https://github.com/compholio/wine-compholio/archive/v%{version}.tar.gz#/w...
+%endif
%if !%{?no64bit}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
@@ -662,9 +664,9 @@ This package adds the opencl driver for wine.
%setup -q -n wine-%{version}
%patch511 -p1 -b.cjk
+%if 0%{?compholio}
# setup and apply wine-staging patches
gzip -dc %{SOURCE900} | tar -xf - --strip-components=1
-%if 0%{?compholio}
# disable shell32-ACE_Viewer patch for now, breaks ARMv7
patches/patchinstall.sh DESTDIR="`pwd`" --all -W shell32-ACE_Viewer
@@ -672,10 +674,6 @@ patches/patchinstall.sh DESTDIR="`pwd`" --all -W shell32-ACE_Viewer
# fix parallelized build
sed -i -e 's!^loader server: libs/port libs/wine tools.*!& include!' Makefile.in
-%else # 0%{?compholio}
-
-rm -rf patches/
-
%endif # 0%{?compholio}
%build
@@ -1107,9 +1105,7 @@ fi
%{_libdir}/wine/expand.exe.so
%{_libdir}/wine/extrac32.exe.so
%{_libdir}/wine/findstr.exe.so
-%if 0%{?compholio}
%{_libdir}/wine/fsutil.exe.so
-%endif
%{_libdir}/wine/hostname.exe.so
%{_libdir}/wine/ipconfig.exe.so
%{_libdir}/wine/winhlp32.exe.so
@@ -1163,12 +1159,15 @@ fi
%{_libdir}/wine/advpack.dll.so
%{_libdir}/wine/amstream.dll.so
%{_libdir}/wine/api-ms-win-appmodel-identity-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-2.dll.so
+%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-appcompat-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-appinit-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-atoms-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-bem-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-com-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-com-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-com-private-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-console-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-console-l2-1-0.dll.so
@@ -1179,6 +1178,7 @@ fi
%{_libdir}/wine/api-ms-win-core-debug-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-debug-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-delayload-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-2.dll.so
@@ -1204,9 +1204,11 @@ fi
%{_libdir}/wine/api-ms-win-core-job-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-job-l2-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-kernel32-private-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-1.dll.so
+%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-1.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-2.dll.so
%{_libdir}/wine/api-ms-win-core-localization-l1-1-0.dll.so
@@ -1238,6 +1240,7 @@ fi
%{_libdir}/wine/api-ms-win-core-psapi-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-psapi-ansi-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-psapi-obsolete-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-realtime-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-registry-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-registry-l2-1-0.dll.so
@@ -1247,6 +1250,7 @@ fi
%{_libdir}/wine/api-ms-win-core-shlwapi-legacy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-2-0.dll.so
+%{_libdir}/wine/api-ms-win-core-shutdown-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-sidebyside-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-string-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-string-l2-1-0.dll.so
@@ -1260,6 +1264,7 @@ fi
%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-0.dll.so
%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-1.dll.so
%{_libdir}/wine/api-ms-win-core-threadpool-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.dll.so
%{_libdir}/wine/api-ms-win-core-threadpool-legacy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-threadpool-private-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-timezone-l1-1-0.dll.so
@@ -1275,8 +1280,10 @@ fi
%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-errorprivate-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-wow64-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-xstate-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-xstate-l2-1-0.dll.so
@@ -1307,6 +1314,7 @@ fi
%{_libdir}/wine/api-ms-win-downlevel-user32-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-downlevel-version-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-dx-d3dkmt-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-eventing-consumer-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-eventing-controller-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-eventing-legacy-l1-1-0.dll.so
@@ -1330,6 +1338,7 @@ fi
%{_libdir}/wine/api-ms-win-security-grouppolicy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-1.dll.so
+%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-1.dll.so
%{_libdir}/wine/api-ms-win-security-lsapolicy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-provider-l1-1-0.dll.so
@@ -1347,16 +1356,6 @@ fi
%{_libdir}/wine/api-ms-win-shell-shellfolders-l1-1-0.dll.so
%if 0%{?compholio}
%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-core-com-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.dll.so
-%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.dll.so
-%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-rtcore-ntuser-draw-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-rtcore-ntuser-window-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-shcore-obsolete-l1-1-0.dll.so
@@ -1422,6 +1421,7 @@ fi
%{_libdir}/wine/ddrawex.dll.so
%{_libdir}/wine/devenum.dll.so
%{_libdir}/wine/dhcpcsvc.dll.so
+%{_libdir}/wine/dhtmled.ocx.so
%{_libdir}/wine/difxapi.dll.so
%{_libdir}/wine/dinput.dll.so
%{_libdir}/wine/dinput8.dll.so
@@ -1469,6 +1469,7 @@ fi
%{_libdir}/wine/ext-ms-win-gdi-draw-l1-1-1.dll.so
%{_libdir}/wine/ext-ms-win-gdi-render-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-kernel32-package-l1-1-1.dll.so
+%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-message-l1-1-1.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-private-l1-1-1.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-rectangle-ext-l1-1-0.dll.so
@@ -1480,14 +1481,13 @@ fi
%{_libdir}/wine/ext-ms-win-rtcore-gdi-rgn-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dc-access-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.dll.so
+%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-security-credui-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-security-cryptui-l1-1-0.dll.so
%if 0%{?compholio}
%{_libdir}/wine/ext-ms-win-appmodel-usercontext-l1-1-0.dll.so
-%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-mouse-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-rtcore-ntuser-syscolors-l1-1-0.dll.so
-%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-uxtheme-themes-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-xaml-pal-l1-1-0.dll.so
%endif
@@ -1544,9 +1544,7 @@ fi
%{_libdir}/wine/jsproxy.dll.so
%{_libdir}/wine/kerberos.dll.so
%{_libdir}/wine/kernel32.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/kernelbase.dll.so
-%endif
%{_libdir}/wine/ksuser.dll.so
%{_libdir}/wine/ktmw32.dll.so
%if 0%{?fedora} > 24
@@ -1718,18 +1716,14 @@ fi
%{_libdir}/wine/serialui.dll.so
%{_libdir}/wine/setupapi.dll.so
%{_libdir}/wine/sfc_os.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/shcore.dll.so
-%endif
%{_libdir}/wine/shdoclc.dll.so
%{_libdir}/wine/shdocvw.dll.so
%{_libdir}/wine/schedsvc.dll.so
%{_libdir}/wine/shell32.dll.so
%{_libdir}/wine/shfolder.dll.so
%{_libdir}/wine/shlwapi.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/shutdown.exe.so
-%endif
%{_libdir}/wine/slbcsp.dll.so
%{_libdir}/wine/slc.dll.so
%{_libdir}/wine/snmpapi.dll.so
@@ -1749,14 +1743,10 @@ fi
%{_libdir}/wine/taskkill.exe.so
%{_libdir}/wine/taskschd.dll.so
%{_libdir}/wine/tdh.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/tdi.sys.so
-%endif
%{_libdir}/wine/traffic.dll.so
%{_libdir}/wine/ucrtbase.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/uiautomationcore.dll.so
-%endif
%{_libdir}/wine/uiribbon.dll.so
%{_libdir}/wine/unicows.dll.so
%{_libdir}/wine/unlodctr.exe.so
@@ -1789,6 +1779,7 @@ fi
%endif
%{_libdir}/wine/wbemdisp.dll.so
%{_libdir}/wine/wbemprox.dll.so
+%{_libdir}/wine/wdscore.dll.so
%{_libdir}/wine/webservices.dll.so
%{_libdir}/wine/wer.dll.so
%{_libdir}/wine/wevtapi.dll.so
@@ -2173,6 +2164,10 @@ fi
%endif
%changelog
+* Fri Feb 09 2018 Michael Cronenworth <mike(a)cchtml.com> 3.1-1
+- version update
+- disable wine-staging
+
* Sat Nov 25 2017 Michael Cronenworth <mike(a)cchtml.com> 2.21-1
- version update
commit 1234bb4c273ecb4b384e817a3df0c842d914c220
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Sat Nov 25 12:35:14 2017 -0600
disable shell32-ACE_Viewer patch for now, breaks ARMv7
diff --git a/wine.spec b/wine.spec
index cc2f375..f5152f3 100644
--- a/wine.spec
+++ b/wine.spec
@@ -666,7 +666,8 @@ This package adds the opencl driver for wine.
gzip -dc %{SOURCE900} | tar -xf - --strip-components=1
%if 0%{?compholio}
-make -C patches DESTDIR="`pwd`" install
+# disable shell32-ACE_Viewer patch for now, breaks ARMv7
+patches/patchinstall.sh DESTDIR="`pwd`" --all -W shell32-ACE_Viewer
# fix parallelized build
sed -i -e 's!^loader server: libs/port libs/wine tools.*!& include!' Makefile.in
6 years, 2 months
Architecture specific change in rpms/wine.git
by githook-noreply@fedoraproject.org
The package rpms/wine.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/wine.git/commit/?id=26cfee826b9c0....
Change:
+%ifarch %{arm}
Thanks.
Full change:
============
commit 26cfee826b9c07438515452bbb4aecbb5a2c0255
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Fri Feb 9 16:21:21 2018 -0600
Wine's ARM float check fails on Fedora
diff --git a/wine.spec b/wine.spec
index 13e42c9..ff6e50c 100644
--- a/wine.spec
+++ b/wine.spec
@@ -694,6 +694,9 @@ export CFLAGS="`echo $TEMP_CFLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//'` -Wno-e
--x-includes=%{_includedir} --x-libraries=%{_libdir} \
--without-hal --with-dbus \
--with-x \
+%ifarch %{arm}
+ --with-float-abi=hard \
+%endif
%ifarch x86_64 aarch64
--enable-win64 \
%endif
commit 95efc85f370ae39cc77b766539b16d464c08e8ec
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Fri Feb 9 12:00:55 2018 -0600
Update to 3.1, disable wine-staging
diff --git a/.gitignore b/.gitignore
index 45c0420..141eb39 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,2 @@
-/wine-2.21.tar.xz
-/wine-2.21.tar.xz.sign
-/wine-staging-2.21.tar.gz
+/wine-3.1.tar.xz
+/wine-3.1.tar.xz.sign
diff --git a/sources b/sources
index a9ee45c..0eea7a1 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
-SHA512 (wine-2.21.tar.xz) = 4e33c463debe637827ed65f1118e692832bb5374491f706f9d251b8a2956e20d2df5d90ceba218b9bc9e946de91b8ba1d96b460453f59cdd9d82f070d07e0c43
-SHA512 (wine-2.21.tar.xz.sign) = 0c31776e2a3eb2356ee3f83f53d911716a7cf4afd2eb1f94561d765e3f51d374a267effd8958bfd211577c543674ab5bbc75f0e83aeca24728450cc752852ac3
-SHA512 (wine-staging-2.21.tar.gz) = 701c6352c8bc5745b8078947bcc3b6209e4e6c387905395cc81d42276402243522d7fa543bb34293c74786adcde9a3c50a2cf4cd57e05e0f4c68991a49a00b41
+SHA512 (wine-3.1.tar.xz) = 49c30d820b8f4028935b4d90dd6251c881cb8cd41bde8833db2782f04111a3d111e24605a87b2d70e419d54cfb6bb42d941f4593f9b381812e3602bf1307c545
+SHA512 (wine-3.1.tar.xz.sign) = 4e3c16c7e60e98cae655e8937e5f9601375b8411b0aa213f95230e9d0ff3afc791a9043901cc73919f16fe52b51741389b1f25afc22638813210e743474f6428
diff --git a/wine.spec b/wine.spec
index f5152f3..13e42c9 100644
--- a/wine.spec
+++ b/wine.spec
@@ -7,9 +7,9 @@
#global _default_patch_fuzz 2
# build with compholio-patches, see: http://www.compholio.com/wine-compholio/
-# uncomment to enable; comment-out to disable.
+# wine-staging appears to be dead
%if 0%{?fedora}
-%global compholio 1
+%global compholio 0
%endif # 0%{?fedora}
# binfmt macros for RHEL
@@ -21,7 +21,7 @@
%endif
Name: wine
-Version: 2.21
+Version: 3.1
Release: 1%{?dist}
Summary: A compatibility layer for windows applications
@@ -69,9 +69,11 @@ Source502: wine-README-tahoma
Patch511: wine-cjk.patch
+%if 0%{?compholio}
# wine compholio patches for wine-staging
# pulseaudio-patch is covered by that patch-set, too.
Source900: https://github.com/compholio/wine-compholio/archive/v%{version}.tar.gz#/w...
+%endif
%if !%{?no64bit}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
@@ -662,9 +664,9 @@ This package adds the opencl driver for wine.
%setup -q -n wine-%{version}
%patch511 -p1 -b.cjk
+%if 0%{?compholio}
# setup and apply wine-staging patches
gzip -dc %{SOURCE900} | tar -xf - --strip-components=1
-%if 0%{?compholio}
# disable shell32-ACE_Viewer patch for now, breaks ARMv7
patches/patchinstall.sh DESTDIR="`pwd`" --all -W shell32-ACE_Viewer
@@ -672,10 +674,6 @@ patches/patchinstall.sh DESTDIR="`pwd`" --all -W shell32-ACE_Viewer
# fix parallelized build
sed -i -e 's!^loader server: libs/port libs/wine tools.*!& include!' Makefile.in
-%else # 0%{?compholio}
-
-rm -rf patches/
-
%endif # 0%{?compholio}
%build
@@ -1107,9 +1105,7 @@ fi
%{_libdir}/wine/expand.exe.so
%{_libdir}/wine/extrac32.exe.so
%{_libdir}/wine/findstr.exe.so
-%if 0%{?compholio}
%{_libdir}/wine/fsutil.exe.so
-%endif
%{_libdir}/wine/hostname.exe.so
%{_libdir}/wine/ipconfig.exe.so
%{_libdir}/wine/winhlp32.exe.so
@@ -1163,12 +1159,15 @@ fi
%{_libdir}/wine/advpack.dll.so
%{_libdir}/wine/amstream.dll.so
%{_libdir}/wine/api-ms-win-appmodel-identity-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-2.dll.so
+%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-appcompat-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-appinit-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-atoms-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-bem-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-com-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-com-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-com-private-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-console-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-console-l2-1-0.dll.so
@@ -1179,6 +1178,7 @@ fi
%{_libdir}/wine/api-ms-win-core-debug-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-debug-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-delayload-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-errorhandling-l1-1-2.dll.so
@@ -1204,9 +1204,11 @@ fi
%{_libdir}/wine/api-ms-win-core-job-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-job-l2-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-kernel32-private-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-1-1.dll.so
+%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-1.dll.so
%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-2.dll.so
%{_libdir}/wine/api-ms-win-core-localization-l1-1-0.dll.so
@@ -1238,6 +1240,7 @@ fi
%{_libdir}/wine/api-ms-win-core-psapi-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-psapi-ansi-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-psapi-obsolete-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-realtime-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-registry-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-registry-l2-1-0.dll.so
@@ -1247,6 +1250,7 @@ fi
%{_libdir}/wine/api-ms-win-core-shlwapi-legacy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-shlwapi-obsolete-l1-2-0.dll.so
+%{_libdir}/wine/api-ms-win-core-shutdown-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-sidebyside-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-string-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-string-l2-1-0.dll.so
@@ -1260,6 +1264,7 @@ fi
%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-0.dll.so
%{_libdir}/wine/api-ms-win-core-sysinfo-l1-2-1.dll.so
%{_libdir}/wine/api-ms-win-core-threadpool-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.dll.so
%{_libdir}/wine/api-ms-win-core-threadpool-legacy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-threadpool-private-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-timezone-l1-1-0.dll.so
@@ -1275,8 +1280,10 @@ fi
%{_libdir}/wine/api-ms-win-core-winrt-error-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-errorprivate-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-roparameterizediid-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-winrt-string-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-wow64-l1-1-1.dll.so
%{_libdir}/wine/api-ms-win-core-xstate-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-core-xstate-l2-1-0.dll.so
@@ -1307,6 +1314,7 @@ fi
%{_libdir}/wine/api-ms-win-downlevel-user32-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-downlevel-version-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-dx-d3dkmt-l1-1-0.dll.so
+%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-eventing-consumer-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-eventing-controller-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-eventing-legacy-l1-1-0.dll.so
@@ -1330,6 +1338,7 @@ fi
%{_libdir}/wine/api-ms-win-security-grouppolicy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-lsalookup-l1-1-1.dll.so
+%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-lsalookup-l2-1-1.dll.so
%{_libdir}/wine/api-ms-win-security-lsapolicy-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-security-provider-l1-1-0.dll.so
@@ -1347,16 +1356,6 @@ fi
%{_libdir}/wine/api-ms-win-shell-shellfolders-l1-1-0.dll.so
%if 0%{?compholio}
%{_libdir}/wine/api-ms-win-appmodel-runtime-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-apiquery-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-core-com-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-delayload-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-kernel32-legacy-l1-1-1.dll.so
-%{_libdir}/wine/api-ms-win-core-libraryloader-l1-2-0.dll.so
-%{_libdir}/wine/api-ms-win-core-quirks-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-core-threadpool-l1-2-0.dll.so
-%{_libdir}/wine/api-ms-win-core-winrt-registration-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-core-wow64-l1-1-0.dll.so
-%{_libdir}/wine/api-ms-win-eventing-classicprovider-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-rtcore-ntuser-draw-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-rtcore-ntuser-window-l1-1-0.dll.so
%{_libdir}/wine/api-ms-win-shcore-obsolete-l1-1-0.dll.so
@@ -1422,6 +1421,7 @@ fi
%{_libdir}/wine/ddrawex.dll.so
%{_libdir}/wine/devenum.dll.so
%{_libdir}/wine/dhcpcsvc.dll.so
+%{_libdir}/wine/dhtmled.ocx.so
%{_libdir}/wine/difxapi.dll.so
%{_libdir}/wine/dinput.dll.so
%{_libdir}/wine/dinput8.dll.so
@@ -1469,6 +1469,7 @@ fi
%{_libdir}/wine/ext-ms-win-gdi-draw-l1-1-1.dll.so
%{_libdir}/wine/ext-ms-win-gdi-render-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-kernel32-package-l1-1-1.dll.so
+%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-message-l1-1-1.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-private-l1-1-1.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-rectangle-ext-l1-1-0.dll.so
@@ -1480,14 +1481,13 @@ fi
%{_libdir}/wine/ext-ms-win-rtcore-gdi-rgn-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dc-access-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-rtcore-ntuser-dpi-l1-1-0.dll.so
+%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-security-credui-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-security-cryptui-l1-1-0.dll.so
%if 0%{?compholio}
%{_libdir}/wine/ext-ms-win-appmodel-usercontext-l1-1-0.dll.so
-%{_libdir}/wine/ext-ms-win-kernel32-package-current-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-ntuser-mouse-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-rtcore-ntuser-syscolors-l1-1-0.dll.so
-%{_libdir}/wine/ext-ms-win-rtcore-ntuser-sysparams-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-uxtheme-themes-l1-1-0.dll.so
%{_libdir}/wine/ext-ms-win-xaml-pal-l1-1-0.dll.so
%endif
@@ -1544,9 +1544,7 @@ fi
%{_libdir}/wine/jsproxy.dll.so
%{_libdir}/wine/kerberos.dll.so
%{_libdir}/wine/kernel32.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/kernelbase.dll.so
-%endif
%{_libdir}/wine/ksuser.dll.so
%{_libdir}/wine/ktmw32.dll.so
%if 0%{?fedora} > 24
@@ -1718,18 +1716,14 @@ fi
%{_libdir}/wine/serialui.dll.so
%{_libdir}/wine/setupapi.dll.so
%{_libdir}/wine/sfc_os.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/shcore.dll.so
-%endif
%{_libdir}/wine/shdoclc.dll.so
%{_libdir}/wine/shdocvw.dll.so
%{_libdir}/wine/schedsvc.dll.so
%{_libdir}/wine/shell32.dll.so
%{_libdir}/wine/shfolder.dll.so
%{_libdir}/wine/shlwapi.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/shutdown.exe.so
-%endif
%{_libdir}/wine/slbcsp.dll.so
%{_libdir}/wine/slc.dll.so
%{_libdir}/wine/snmpapi.dll.so
@@ -1749,14 +1743,10 @@ fi
%{_libdir}/wine/taskkill.exe.so
%{_libdir}/wine/taskschd.dll.so
%{_libdir}/wine/tdh.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/tdi.sys.so
-%endif
%{_libdir}/wine/traffic.dll.so
%{_libdir}/wine/ucrtbase.dll.so
-%if 0%{?compholio}
%{_libdir}/wine/uiautomationcore.dll.so
-%endif
%{_libdir}/wine/uiribbon.dll.so
%{_libdir}/wine/unicows.dll.so
%{_libdir}/wine/unlodctr.exe.so
@@ -1789,6 +1779,7 @@ fi
%endif
%{_libdir}/wine/wbemdisp.dll.so
%{_libdir}/wine/wbemprox.dll.so
+%{_libdir}/wine/wdscore.dll.so
%{_libdir}/wine/webservices.dll.so
%{_libdir}/wine/wer.dll.so
%{_libdir}/wine/wevtapi.dll.so
@@ -2173,6 +2164,10 @@ fi
%endif
%changelog
+* Fri Feb 09 2018 Michael Cronenworth <mike(a)cchtml.com> 3.1-1
+- version update
+- disable wine-staging
+
* Sat Nov 25 2017 Michael Cronenworth <mike(a)cchtml.com> 2.21-1
- version update
commit 1234bb4c273ecb4b384e817a3df0c842d914c220
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Sat Nov 25 12:35:14 2017 -0600
disable shell32-ACE_Viewer patch for now, breaks ARMv7
diff --git a/wine.spec b/wine.spec
index cc2f375..f5152f3 100644
--- a/wine.spec
+++ b/wine.spec
@@ -666,7 +666,8 @@ This package adds the opencl driver for wine.
gzip -dc %{SOURCE900} | tar -xf - --strip-components=1
%if 0%{?compholio}
-make -C patches DESTDIR="`pwd`" install
+# disable shell32-ACE_Viewer patch for now, breaks ARMv7
+patches/patchinstall.sh DESTDIR="`pwd`" --all -W shell32-ACE_Viewer
# fix parallelized build
sed -i -e 's!^loader server: libs/port libs/wine tools.*!& include!' Makefile.in
6 years, 2 months
Architecture specific change in rpms/libnice.git
by githook-noreply@fedoraproject.org
The package rpms/libnice.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/libnice.git/commit/?id=729f8ecea8....
Change:
+%ifarch armv7hl
Thanks.
Full change:
============
commit 63a783842195268faa634e86d09505769c01db10
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 16:46:01 2018 +0100
enable make check again
diff --git a/libnice.spec b/libnice.spec
index f341e45..bb22cea 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -78,15 +78,13 @@ developing applications that use %{name}.
%patch1 -p1
%patch2 -p1
%patch3 -p1
+chmod 0755 scripts/valgrind-test-driver
# disable test-new-dribble that sometimes hangs indefinitely
sed -e 's/test-new-dribble/#&/' -i tests/Makefile.am
autoreconf -fiv
-%check
-#make check
-
%build
export CFLAGS="$RPM_OPT_FLAGS"
@@ -116,6 +114,11 @@ make install DESTDIR=$RPM_BUILD_ROOT
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
+%check
+export LD_LIBRARY_PATH="$PWD/nice/.libs"
+make check
+
+
%post -p /sbin/ldconfig
@@ -151,6 +154,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- enable make check again
- make tests pass in Koji
- disable test-new-dribble that sometimes hangs indefinitely
- make tests compile on i686
commit 8535255eda778d7739e2358b2dac12e94991afe3
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 19:16:26 2018 +0100
make tests pass in Koji
diff --git a/libnice-0.1.14-tests-koji.patch b/libnice-0.1.14-tests-koji.patch
new file mode 100644
index 0000000..f9feb34
--- /dev/null
+++ b/libnice-0.1.14-tests-koji.patch
@@ -0,0 +1,36 @@
+From 527c30ba453753e75d3d31be29a277ea6adc17c0 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka(a)redhat.com>
+Date: Fri, 9 Feb 2018 19:10:20 +0100
+Subject: [PATCH] tests: make the test-suite more verbose
+
+... and skip test-gstreamer if user's home is not /builddir (a heuristic
+to detect mock) because multicast traffic is blocked on Koji buildhosts.
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 16988ad..b7b74fa 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -12,7 +12,7 @@ AC_CANONICAL_TARGET
+
+ AC_CONFIG_SRCDIR([agent/agent.c])
+ AC_CONFIG_HEADERS([config.h])
+-AM_INIT_AUTOMAKE([1.12 -Wall -Wno-portability subdir-objects])
++AM_INIT_AUTOMAKE([1.12 -Wall -Wno-portability subdir-objects serial-tests])
+
+ AC_CONFIG_FILES([
+ Makefile
+@@ -262,7 +262,7 @@ AC_SUBST(gstplugindir)
+ AC_SUBST(gstplugin010dir)
+
+ AM_CONDITIONAL(WITH_GSTREAMER, test "$with_gstreamer" = yes)
+-AM_CONDITIONAL(HAVE_GST_CHECK, test "$have_gst_check" = yes)
++AM_CONDITIONAL(HAVE_GST_CHECK, test "$have_gst_check" = yes -a "$HOME" != /builddir)
+ AM_CONDITIONAL(WITH_GSTREAMER010, test "$with_gstreamer010" = yes)
+
+ GUPNP_IGD_REQUIRED=0.2.4
+--
+2.13.6
+
diff --git a/libnice.spec b/libnice.spec
index e937514..f341e45 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -15,6 +15,9 @@ Patch1: libnice-0.1.14-70-gfb2f1f7.patch
# make tests compile on i686
Patch2: libnice-0.1.14-tests-i686.patch
+# make tests pass in Koji
+Patch3: libnice-0.1.14-tests-koji.patch
+
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: glib2-devel
@@ -74,6 +77,7 @@ developing applications that use %{name}.
%setup -q
%patch1 -p1
%patch2 -p1
+%patch3 -p1
# disable test-new-dribble that sometimes hangs indefinitely
sed -e 's/test-new-dribble/#&/' -i tests/Makefile.am
@@ -147,6 +151,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- make tests pass in Koji
- disable test-new-dribble that sometimes hangs indefinitely
- make tests compile on i686
- make the package build on armv7hl
commit d99a0c0fb4cc3024b35b03a3da993be3eed43630
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 23:03:38 2018 +0100
disable test-new-dribble that sometimes hangs indefinitely
diff --git a/libnice.spec b/libnice.spec
index b8c13cf..e937514 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -74,6 +74,10 @@ developing applications that use %{name}.
%setup -q
%patch1 -p1
%patch2 -p1
+
+# disable test-new-dribble that sometimes hangs indefinitely
+sed -e 's/test-new-dribble/#&/' -i tests/Makefile.am
+
autoreconf -fiv
%check
@@ -143,6 +147,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- disable test-new-dribble that sometimes hangs indefinitely
- make tests compile on i686
- make the package build on armv7hl
- make the package build on Fedora 28
commit 554edd4e12901c7dc91d9601d7d9a673515b26c6
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 18:05:03 2018 +0100
make tests/test-pseudotcp.c compile on i686
diff --git a/libnice-0.1.14-tests-i686.patch b/libnice-0.1.14-tests-i686.patch
new file mode 100644
index 0000000..6558549
--- /dev/null
+++ b/libnice-0.1.14-tests-i686.patch
@@ -0,0 +1,48 @@
+From 3f8364b41207d8c26d3d3be518a7d9ebf4243b92 Mon Sep 17 00:00:00 2001
+From: Kamil Dudka <kdudka(a)redhat.com>
+Date: Fri, 9 Feb 2018 18:01:57 +0100
+Subject: [PATCH] tests: make them compile on i686
+
+---
+ tests/test-pseudotcp-fuzzy.c | 4 ++--
+ tests/test-pseudotcp.c | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/tests/test-pseudotcp-fuzzy.c b/tests/test-pseudotcp-fuzzy.c
+index 4a714e6..030c03f 100644
+--- a/tests/test-pseudotcp-fuzzy.c
++++ b/tests/test-pseudotcp-fuzzy.c
+@@ -129,7 +129,7 @@ write_to_sock (PseudoTcpSocket *sock)
+ total += wlen;
+ total_read += wlen;
+ if (wlen < (gint) len) {
+- g_debug ("seeking %ld from %lu", wlen - len, ftell (in));
++ g_debug ("seeking %ld from %lu", (long) wlen - len, ftell (in));
+ fseek (in, wlen - len, SEEK_CUR);
+ g_assert (!feof (in));
+ g_debug ("Socket queue full after %d bytes written", total);
+@@ -355,7 +355,7 @@ static void adjust_clock (PseudoTcpSocket *sock)
+
+ if (pseudo_tcp_socket_get_next_clock (sock, &timeout)) {
+ timeout -= g_get_monotonic_time () / 1000;
+- g_debug ("Socket %p: Adjusting clock to %ld ms", sock, timeout);
++ g_debug ("Socket %p: Adjusting clock to %ld ms", sock, (long) timeout);
+ if (sock == left) {
+ if (left_clock != 0)
+ g_source_remove (left_clock);
+diff --git a/tests/test-pseudotcp.c b/tests/test-pseudotcp.c
+index 1a8391a..584a0d0 100644
+--- a/tests/test-pseudotcp.c
++++ b/tests/test-pseudotcp.c
+@@ -81,7 +81,7 @@ static void write_to_sock (PseudoTcpSocket *sock)
+ total += wlen;
+ total_read += wlen;
+ if (wlen < (gint) len) {
+- g_debug ("seeking %ld from %lu", wlen - len, ftell (in));
++ g_debug ("seeking %ld from %lu", (long) wlen - len, ftell (in));
+ fseek (in, wlen - len, SEEK_CUR);
+ g_assert (!feof (in));
+ g_debug ("Socket queue full after %d bytes written", total);
+--
+2.13.6
+
diff --git a/libnice.spec b/libnice.spec
index 17156df..b8c13cf 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -12,6 +12,9 @@ URL: https://nice.freedesktop.org/wiki/
Source0: https://nice.freedesktop.org/releases/%{name}-%{version}.tar.gz
Patch1: libnice-0.1.14-70-gfb2f1f7.patch
+# make tests compile on i686
+Patch2: libnice-0.1.14-tests-i686.patch
+
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: glib2-devel
@@ -70,6 +73,7 @@ developing applications that use %{name}.
%prep
%setup -q
%patch1 -p1
+%patch2 -p1
autoreconf -fiv
%check
@@ -139,6 +143,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- make tests compile on i686
- make the package build on armv7hl
- make the package build on Fedora 28
- avoid build failure if gstreamer-plugins-base-devel is installed
commit 729f8ecea839d9dcc79fbc0d2f92ced1c9925396
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 19:13:28 2018 +0100
make the package build on armv7hl
FIXME: The resulting binaries cannot work properly!!!
diff --git a/libnice.spec b/libnice.spec
index b51908b..17156df 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -83,6 +83,10 @@ export CFLAGS="$RPM_OPT_FLAGS"
# cannot work properly!!!
CFLAGS="$CFLAGS -Wno-error=cast-function-type"
%endif
+%ifarch armv7hl
+# FIXME: basically the same problem on armv7hl with both Fedora 27 and 28
+CFLAGS="$CFLAGS -Wno-error=cast-align"
+%endif
%configure --disable-static \
%if %{with gst010}
@@ -135,6 +139,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- make the package build on armv7hl
- make the package build on Fedora 28
- avoid build failure if gstreamer-plugins-base-devel is installed
- move autoreconf invocation to %%prep
commit 6eb057143c035b930de9e99ba8376580f7d6762b
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 17:48:10 2018 +0100
make the package build on Fedora 28
FIXME: The resulting binaries cannot work properly!!!
diff --git a/libnice.spec b/libnice.spec
index 1575942..b51908b 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -77,6 +77,13 @@ autoreconf -fiv
%build
+export CFLAGS="$RPM_OPT_FLAGS"
+%if 0%{?fedora} == 28
+# FIXME: This makes the code compile on Fedora 28 but the resulting binaries
+# cannot work properly!!!
+CFLAGS="$CFLAGS -Wno-error=cast-function-type"
+%endif
+
%configure --disable-static \
%if %{with gst010}
--with-gstreamer-0.10
@@ -128,6 +135,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- make the package build on Fedora 28
- avoid build failure if gstreamer-plugins-base-devel is installed
- move autoreconf invocation to %%prep
- use Name Version Release that explicitly identifies an SCM snapshot (#1541646)
commit 15e5f2042d406591e98abff299951b3c3a562e33
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 16:50:16 2018 +0100
avoid build failure if gstreamer-plugins-base-devel is installed
diff --git a/libnice.spec b/libnice.spec
index d6bb439..1575942 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -77,7 +77,12 @@ autoreconf -fiv
%build
-%configure --disable-static
+%configure --disable-static \
+%if %{with gst010}
+ --with-gstreamer-0.10
+%else
+ --without-gstreamer-0.10
+%endif
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
make %{?_smp_mflags}
@@ -123,6 +128,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- avoid build failure if gstreamer-plugins-base-devel is installed
- move autoreconf invocation to %%prep
- use Name Version Release that explicitly identifies an SCM snapshot (#1541646)
commit 0acfa758ecc36ea8b0049fb6f34507a43e769ab0
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 16:01:32 2018 +0100
move autoreconf invocation to %prep
diff --git a/libnice.spec b/libnice.spec
index a1850c8..d6bb439 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -70,13 +70,13 @@ developing applications that use %{name}.
%prep
%setup -q
%patch1 -p1
+autoreconf -fiv
%check
#make check
%build
-autoreconf -f -i
%configure --disable-static
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
@@ -123,6 +123,7 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- move autoreconf invocation to %%prep
- use Name Version Release that explicitly identifies an SCM snapshot (#1541646)
* Fri Feb 09 2018 Stefan Becker <chemobejk(a)gmail.com> - 0.1.14-3
commit 794e7ad7d94e48b6a20f923c99c68daf642f6095
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 15:59:27 2018 +0100
Related: #1541646 - use Name Version Release that explicitly identifies an SCM snapshot
diff --git a/libnice.spec b/libnice.spec
index 63e60a2..a1850c8 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -3,7 +3,7 @@
Name: libnice
Version: 0.1.14
-Release: 3%{?dist}
+Release: 4.20171128gitfb2f1f7%{?dist}
Summary: GLib ICE implementation
Group: System Environment/Libraries
@@ -122,6 +122,9 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
+* Fri Feb 09 2018 Kamil Dudka <kdudka(a)redhat.com> - 0.1.14-4.20171128gitfb2f1f7
+- use Name Version Release that explicitly identifies an SCM snapshot (#1541646)
+
* Fri Feb 09 2018 Stefan Becker <chemobejk(a)gmail.com> - 0.1.14-3
- update to 0.1.14-70-gfb2f1f7 with alternate server fixes for SIPE
- add autoreconf build step
commit f1ca1fa20f059e7c39e252302c3edb61acb7bf6d
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 15:48:29 2018 +0100
libnice-0.1.14-70-gfb2f1f7.patch: now produced by git format-patch
... so that we are able to easily bisect over the upstream commits
diff --git a/libnice-0.1.14-20171128.patch b/libnice-0.1.14-20171128.patch
deleted file mode 100644
index ff2d2ae..0000000
--- a/libnice-0.1.14-20171128.patch
+++ /dev/null
@@ -1,6711 +0,0 @@
-commit fb2f1f77a31baa91968fc81c205f980b6913f403
-Author: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
-Date: Tue Nov 28 16:05:18 2017 -0500
-
- conncheck: handle alternate-server for turn relays differently
-
- If a relay gives us an alternate-server, we need to cancel and reset
- every candidate discovery attempt that uses the same server, to avoid
- ending up with one component on one server and the other component on
- another server (causing relay candidates with mismatched foundations).
-
-commit 4172d48852ecd1c86cc7bd4665b23697603d1eed
-Author: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
-Date: Tue Nov 28 15:14:11 2017 -0500
-
- discovery: Increase discovery_unsched_items whenever we restart a check
-
- The discovery_unsched_items is decremented every time a DiscoveryCandidate
- goes from non-pending to pending. So if we restart a check by setting
- pending to FALSE, we should re-increase the discovery_unsched_items.
-
-commit 59fcf95d505c3995f858b826d10cd48321ed383e
-Author: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
-Date: Mon Nov 27 17:07:02 2017 -0500
-
- turn: Add support for ALTERNATE_SERVER in OC2007 Compatibility
-
- The MS Office TURN servers will always return the MS_ALTERNATE_SERVER in
- allocation responses, and if they are not handled, we end up using the
- main turn server to send allocation requests that then get sent to the
- alternate server which will return the XOR_MAPPED_ADDRESS containing
- the IP address of the turn server that proxied the message instead of
- our own actual external IP.
-
-commit 17f30e4465efe9533799b02d6f95feeaf0f2748c
-Author: Miguel París <mparisdiaz(a)gmail.com>
-Date: Wed Nov 8 16:26:47 2017 +0000
-
- conncheck: do not require that all streams have a connection check list
-
- One or more streams might not have any connection check list if the
- number of streams differs from the peer agent.
- Differential Revision: https://phabricator.freedesktop.org/D1880
-
-commit c63349894b3fe974494453a883dfb5ad05df5a46
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Thu Nov 23 18:31:31 2017 +0100
-
- Makefile: really enable debug for tests
-
- Differential Revision: https://phabricator.freedesktop.org/D1888
-
-commit 02216a6766caccb652387d5ee19686149eedbc93
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Nov 21 15:12:45 2017 +0100
-
- agent: prevent external role change while conncheck is running
-
- With this patch, we stash the controlling mode property change, and
- apply it safely, when it won't interfere with an ongoing conncheck
- running. According to RFC5245, sect 5.2. "Determining Role", the role
- is determined for a session, and persists unless an ICE is restarted.
-
- Differential Revision: https://phabricator.freedesktop.org/D1887
-
-commit fbdccf0c2787ebdc65fe13ac64bd25c829ea7972
-Author: Philip Withnall <withnall(a)endlessm.com>
-Date: Thu Aug 3 12:20:32 2017 +0100
-
- stun: Fix FD leak in test/utility code
-
- https://phabricator.freedesktop.org/T7798
-
- Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
- Reviewed-by: Olivier Crête <olivier.crete(a)collabora.com>
- Differential Revision: https://phabricator.freedesktop.org/D1819
-
-commit 4c4834ab634f735145c8f758a22cbdd9cab79bac
-Author: Philip Withnall <withnall(a)endlessm.com>
-Date: Tue Sep 12 13:23:53 2017 +0100
-
- tests: Fix agent.h header inclusion in test-gstreamer.c
-
- Spotted by Lukas Gradl on the mailing list.
-
- Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
-
-commit 1a1803a45778000720c93d91060cedeb19124a27
-Author: Philip Withnall <withnall(a)endlessm.com>
-Date: Tue Sep 12 13:23:31 2017 +0100
-
- tests: Fix copyright dates in test-gstreamer.c
-
- This code is not 1000 years old.
-
- Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
-
-commit 14102d44449d2eb4148588ce54fa897fa13b87ad
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Sun Jul 2 16:02:09 2017 +0200
-
- conncheck: change state before updating nominated pairs
-
- When a pair is nominated while in state failed, we first move
- back to state connecting, then we update the selected pair, and
- finally we move to state connected.
-
-commit 72dd26a3368d3506fe8faca7067a02784fb5f0fd
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Wed Jun 28 12:06:48 2017 +0200
-
- conncheck: forgot to put a pair in triggered check list
-
- When a new pair is created from an unknown remote candidate, it
- should be enqueue for a triggered check, to allow it to be marked
- as nominated on response arrival in priv_mark_pair_nominated().
- Creating it in waiting state is not sufficient since the update
- in priv_mark_pair_nominated() from previous commits.
-
- Differential Revision: https://phabricator.freedesktop.org/D1763
-
-commit 6fe64fdbc53ab87dffd79972f492665cff14c0a0
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Jun 27 11:01:14 2017 +0200
-
- conncheck: update the state of triggered checks pairs
-
- With this patch, we fix an ambiguity of some parts of the spec, when
- the document refers to in-progress pairs, that also concern pairs in
- the triggered checks list.
-
- The first cast is in section 7.1.2.5, "Updating the Nominated Flag",
- when the in-progress pair will be nominated on response arrival. This is
- handled in function priv_mark_pair_nominated(), when a pair is put to
- the triggered check list in reaction to a matching inbound stun request.
- Such a pair in priv_mark_pair_nominated() will _always_ be in the
- triggered check list, from the previously called function
- priv_schedule_triggered_check().
-
- The second case is in section 8.1.2, "Updating State" when an in-progress
- pair stops its retransmission when another pair of higher priority is
- already nominated. This is handled by function priv_prune_pending_checks().
-
- Until now, pairs enqueued in the triggered check list move transiently
- to state waiting, according to 7.2.1.4. But this state causes wrong
- decisions in the two previous cases, because such pairs should in fact
- rather be considered "like in-progress", to avoid discarding them
- inadvertantly.
-
- This patch update the state of the triggered check list
- pairs to in-progress. It allows to remove exception handling cited
- above: the code is a bit more simple, and allows some refactoring
- in priv_mark_pair_nominated() between RFC and compatibility modes.
-
- Differential Revision: https://phabricator.freedesktop.org/D1762
-
-commit 36f306f4a95f1c2b3e9c584b5a645a78e231c020
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Jun 26 21:41:44 2017 +0200
-
- conncheck: support several stun requests per pair
-
- This patch should improve the reliabily of the connection check by
- keeping the record of several simultaneous ongoing stun requests per
- pair. A new stun request on an in-progress pair typically is caused by
- in inbound stun request from the peer on this same pair. This is named
- "Triggered Checks" in the spec. When this situation arises, it is fair
- to handle these two stun requests simultaneously, the triggered check,
- and the initial ordinary check, since both can potentially succeed.
-
- Differential Revision: https://phabricator.freedesktop.org/D1761
-
-commit e860948b5fe3a791119957f26045b8f5159baeff
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Jun 26 21:06:36 2017 +0200
-
- conncheck: use stun_timer_remainder less frequently
-
- We try to use stun_timer_remainder() less frequently, particularily
- in the debug messages, and favour of the next_tick value associated
- to the pair.
-
- Differential Revision: https://phabricator.freedesktop.org/D1760
-
-commit ce33747e6fc9ca59ea22d54e3b5a9a67b69d8141
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Jun 26 20:41:49 2017 +0200
-
- conncheck: make debug sentences more accurate
-
- We add a helper function to print the pair state in-extenso.
-
- Differential Revision: https://phabricator.freedesktop.org/D1759
-
-commit 25be00271a4c8c684a2d435d29ae0811dbf5e21c
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Jun 26 20:36:35 2017 +0200
-
- conncheck: reorder some chunks of code
-
- With this patch we simplify the levels of code indentation.
-
- Differential Revision: https://phabricator.freedesktop.org/D1758
-
-commit 5a42089aeb2dbbb52d820cd1b6efdfcfbe9b055e
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Sep 5 14:50:29 2017 -0400
-
- agent: Set error if it isn't set
-
-commit dbaf8f5ccd76089e340883887c7e08e6c04de80a
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 13:22:21 2016 +0200
-
- conncheck: improve role conflict debug
-
- This patch displays explicitely the controlling or controlled
- role of the agent.
-
- Differential Revision: https://phabricator.freedesktop.org/D874
-
-commit 9f800d3597767855accccc592c34bc4e945f5bd5
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Wed Jun 21 20:42:57 2017 -0400
-
- configure: Remove -Wswitch-enum
-
- Creates useless warnings when other libraries change.
-
- https://phabricator.freedesktop.org/T7770
-
-commit 63d273cea42def3567701ad9feab91f63cf9345f
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Thu Feb 11 22:16:48 2016 -0500
-
- component: Use non-GClosure dummy callbacks
-
- GClosures are not that cheap to setup
-
-commit 2c50d73b82f2ec2422a8e0ea393194486c193c64
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Wed Feb 10 23:20:39 2016 -0500
-
- agent: Don't crash if recv cancelled without a GError
-
-commit dcb0d647174416a292492f8deca86f83a2ef124c
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Wed Jun 21 17:07:17 2017 -0400
-
- Repleace UNRELEASED with 0.1.15
-
-commit e3ddaa285e389baf3f26cfb6964919718a8f6a00
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Wed Jun 21 16:55:32 2017 -0400
-
- agent: Adjust the nice_agent_new_full() to use flags
-
- This makes it easier to read and more extensible.
-
-commit c7a5a92b66f9b83baf2aa446966bdfb2cf39ecd1
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Sun Jun 18 10:12:58 2017 +0200
-
- agent: remove spurious newlines
-
- Differential Revision: https://phabricator.freedesktop.org/D1756
-
-commit b4b8d6628c8c5d4f10af0101f846db4938a3f6c4
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Sun May 28 22:20:36 2017 +0200
-
- stun: fix gcc7 implicit fallthrough warning
-
- Differential Revision: https://phabricator.freedesktop.org/D1754
-
-commit 195db6b344fc4f9fadc39419dfeec2fc14b23fac
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Fri Jul 15 23:31:42 2016 +0200
-
- agent: add new pairs only for gathering streams
-
- At the end of the local candidate gathering process, we only create new
- pairs for streams that are in gathering state.
-
- Other stream that may be in ready state for example, due to a
- previously succeeded conncheck process, may have accumulated some
- couples (local,remote) candidates that have not resulted in the creation
- a new pair during this previous conncheck process, and we don't want
- these new pairs to be added now, because it would generate unneeded
- transition changes for a stream unconcerned by this gathering.
-
- Differential Revision: https://phabricator.freedesktop.org/D1755
-
-commit 07366a5bca7e4818b8df29d9c7c220da8f752547
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Jun 21 21:47:42 2016 +0200
-
- conncheck: fix the component failed transition
-
- This patch fixes the transition of a component from connecting to
- failed, that previously occured due to the propagation of the
- keep_timer_going variable, and to the final call to function
- priv_update_check_list_failed_components(), after the global agent
- timer was stopped.
-
- Previously, the code almost never entered to failed state, because the
- timer was going one, as long as the number of nominated pair was not
- enough, and as long as there were valid pairs not yet nominated. Even
- if all pair timers were over.
-
- The definition of the Failed state of a conncheck list is somewhat
- contradictory in the spec, depending on weather you read :
-
- * sect 5.7.4. "Computing States",
- "Failed: In this state, the ICE checks have not completed successfully
- for this media stream."
-
- or
-
- * sect 7.1.3.3. "Check List and Timer State Updates",
- "If all of the pairs in the check list are now either in the Failed or
- Succeeded state: If there is not a pair in the valid list for each
- component of the media stream, the state of the check list is set to
- Failed."
-
- Our understanding of the ICE spec is that, the proper way to enter failed
- state instead in when all connchecks have no longer in-progress pairs.
- All pairs are either in state succeeded, discovered, or failed. No timer
- is still running, and we have no hope that the conncheck list changes
- again, except if an unexpected STUN packet arrives later. All pairs in
- frozen state is a special case, that is handled separately (sect
- 7.1.3.3).
-
- A special grace delay is added before declaring a component in state
- Failed. This delay is not part of the RFC, and it is aimed to limit the
- cases when a conncheck list is reactivated just after it's been declared
- failed, causing a user visible transition from connecting to failed, and
- back from failed to connecting again. This is also required by the test
- suite, that counts exactly the number of time each state is entered, and
- doesn't expect these transcient failed states to happen (frequent due to
- the nature of the testsuite, less frequent in real life).
-
- Differential Revision: https://phabricator.freedesktop.org/D1111
-
-commit 95f8805eb7b77755337e28daf1f134587d42b35f
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Thu Jun 16 17:32:39 2016 +0200
-
- conncheck: remove cancelled pair state
-
- Pairs with the state NICE_CHECK_CANCELLED are the pairs targeted for
- removal after the nomination of a pair with an higher priority,
- described in Section 8.1.2 "Updating States", item 2 of RFC 5245. They
- include also pairs that overflow the conncheck list size, but this is a
- somewhat more marginal situation. So we are mainly interested in the
- first use case of this state.
-
- This state mixes two different situations, that deserve a distinct
- handling : on one side, there are waiting or frozen pairs that must be
- removed, this is an immediate action that doesn't need a dedicated state
- for that. And on the other side, there are in-progress pairs that
- should no longer be retransmitted, because another pair with a higher
- priority has already been nominated.
-
- This patch removes the cancelled state, and adds a flag
- retransmit_on_timeout to deal with this last situation. Note that this
- case should not generate a triggered check, as per described in section
- 7.2.1.4, when the state of the pair is In-Progress or Failed, since this
- pair of lower priority has no hope to replace the nominated one.
-
- Differential Revision: https://phabricator.freedesktop.org/D1114
-
-commit d516fca1b0e0a6606afec797bdc0690104e779a9
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Jun 14 21:32:26 2016 +0200
-
- conncheck: adjust recheck on timeout strategy
-
- The pair recheck on timeout can easily cause repetitive rechecks in
- a ping-pong effect, if both peers with the same behaviour try to
- check the same pair almost simultaneously, and if the network rtt
- is greater than the initial timer rto. The reply to the initial
- stun request may arrive after the in-progress conncheck
- cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
- creates a new stun request, and forgets the initial one.
- The conncheck timer is restarted with the same initial value,
- so the same situation happens again later.
-
- We choose to avoid resetting the timer in such situation. After enough
- retransmissions, the timeout delay, that doubles after each timeout,
- becomes longer than the rtt, and the stun reply can be handled.
-
- Differential Revision: https://phabricator.freedesktop.org/D1115
-
-commit f19d209decac432a1597d84c3d5809d2208f7457
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Jun 14 21:20:49 2016 +0200
-
- conncheck: do not recheck a just succeeded pair
-
- We cancel the potential in-progress transaction cancellation, caused by
- sect 7.2.1.4 "Triggered Checks", when we receive a valid reply before
- transmission timeout, or just after timeout, when the pair is
- temporarily put on the triggered check list on the way to be
- rechecked. This situation is not covered by the RFC 5245.
-
- Differential Revision: https://phabricator.freedesktop.org/D1119
-
-commit 59fe48517c0b7db77b99183d31fdd84b55adb5d4
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Jun 14 21:12:16 2016 +0200
-
- conncheck: fix a state transition case
-
- When a new stun request hits a valid pair, of a failed component, we may
- have a transition from state failed to connected. In this situation, we
- do a logical progression failed -> connecting -> connected, like we do
- in function priv_update_check_list_state_for_ready()
-
- Similarily, when a new stun request hits a failed pair, of a failed
- component, triggering a new conncheck for this pair may also cause the
- component state to move back from failed to connecting state.
-
- Differential Revision: https://phabricator.freedesktop.org/D1118
-
-commit 6a512b6eca9603ce8bf3ed0814fd314684c66ea7
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Jun 14 21:04:49 2016 +0200
-
- conncheck: try to change earlier to state ready
-
- We check if we can move from state connected to ready just
- after a pair expired its retransmission count. This pair
- will be marked failed, and will no longer be in-progress.
- The number of in-progress dropping down to zero is one
- of the conditions needed to make the transition to ready,
- per component (and not globally as it's the case in other
- locations where this check function is called).
-
- Differential Revision: https://phabricator.freedesktop.org/D1117
-
-commit 8fa648a15a6700d08165fe97a09f5c068abae1e6
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Apr 11 13:13:51 2016 +0200
-
- conncheck: dont cancel a pair for triggered check
-
- This patch adds another supplementary "corner" case, not covered by the
- ICE spec, sect 8.1.2, "Updating States". A pair in waiting state and in
- the triggered check list should be considered like an in-progress pair,
- and cancelled only if its priority is lower than the priority of the
- nominated pair. This is required in some aggressive nomination
- situations for both peers to select the same pair, having the highest
- priority.
-
- Differential Revision: https://phabricator.freedesktop.org/D933
-
-commit 11d4e37a030eb144a355dc26c705ef5aa5a975a7
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Fri Apr 1 17:31:44 2016 +0200
-
- conncheck: remove a useless pair recheck
-
- This exception to the ICE spec is no longer needed: when a pair is in
- the succeeded state, there is no needed to recheck it again upon
- reception of an incoming stun request on it.
-
- Differential Revision: https://phabricator.freedesktop.org/D884
-
-commit 25b3eeec70b4e8e3b2154a18cdc8c5604f572012
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 12:56:28 2016 +0200
-
- conncheck: update the pair state in triggered check list
-
- With this patch, we update the state of the pair to waiting when
- it is put in the triggered check queue. We also take care to call
- priv_schedule_triggered_check() before priv_mark_pair_nominated()
- so a pair to be rechecked and put on the triggered check queue
- will have a unique state to be tested in the following call to
- priv_mark_pair_nominated() when evaluating its nomination attributes.
-
- Differential Revision: https://phabricator.freedesktop.org/D883
-
-commit afd8d41bb34afb3864e838ef79026ae4ef15c0d4
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 13:32:49 2016 +0200
-
- conncheck: new pairs never have the nominated flag preset
-
- This patch disables the possibility to set the nominated flag of a
- candidate pair at creation time. This possibility was used when a new
- pair is created from a new peer reflexive remote candidate, when the
- agent is in controlled mode, and an stun request with USE-CANDIDATE is
- received. In this case, since previous commit "conncheck: fix a
- nomination corner case", we set the nominated flag when the stun
- response of this new pair will arrive, and not before. Consequently,
- this flag is no longer required when the pair is created.
-
- Differential Revision: https://phabricator.freedesktop.org/D881
-
-commit 3916b8bcbf7e78e1dcb6b77882075c2c22719b4e
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 13:30:04 2016 +0200
-
- conncheck: fix a nomination corner case
-
- This patch add two supplementary cases, not covered by the ICE spec,
- sect 7.2.1.5 "Updating the Nominated Flag" when a controlled agent
- receives a STUN request with the USE-CANDIDATE flag, for a pair that is
- in the waiting state. We consider that this case is similar to the
- in-progress state, and should be handled in the same way. We also accept
- when the pair is in frozen state. This latter case happens in the
- new-dribble test, when an agent replays incoming early connchecks.
-
- Differential Revision: https://phabricator.freedesktop.org/D880
-
-commit 9103a5f2e184211fc160d1d3070ce4d043c71ff0
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 19 18:16:26 2016 +0200
-
- conncheck: use the right pair when retriggering a check
-
- This patch completes the previous patch by adding a link back from the
- discovered pair, to the parent pair that generated this check. This link
- is needed by the ICE spec, to comply with section 8.1.1.1, "Regular
- nomination", where the check to be retriggered is the initial check that
- caused the discovery of the valid pair. When the valid pair is a
- peer-reflexive pair, the retriggered check must target the succeeded
- pair, and not the valid discovered pair.
-
- Differential Revision: https://phabricator.freedesktop.org/D879
-
-commit 72ee528f7fdf82fb1a44958c18a0d4d5055d2d1a
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 13:25:16 2016 +0200
-
- conncheck: link succeeded and discovered pairs
-
- When the agent has the role of the stun server, is in controlled mode,
- and receives a pair with the "use-candidate" attribute set, it must find
- a matching succeded or discovered pair in its conncheck list. This is
- described in ICE spec 7.2.1.5, "Updating the Nominated Flag", item #1.
- When a matching pair is in succeeded state, the agent must nominate the
- valid pair (a discovered pair) constructed from section 7.1.3.2.2,
- that's been created from this succeeded one. To make this lookup, we
- introduce a new "discovered_pair" member of the CandidateCheckPair
- struct, that links the succeeded pair, and its discovered pair
- if any.
-
- Differential Revision: https://phabricator.freedesktop.org/D878
-
-commit 2fd7808419f459d5f6e97701ca6a350ddee6b7f2
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 19 17:59:27 2016 +0200
-
- conncheck: improve triggered check of in-progress pairs
-
- This patch update the way triggered checks of in-progress pairs are
- handled, according to ICE spec, section 7.2.1.4. Previously the same
- connection check was retransmitted with an updated timeout. This causes
- problems when a controlling role switch occurs in this time frame.
- This is the reason why a new connection check must be generated
- reflecting the updated role. We introduce a new flag "recheck_on_timeout"
- in the pair indicating that the pair must be rechecked at the next timer
- expiration.
-
- Differential Revision: https://phabricator.freedesktop.org/D875
-
-commit ead3453d04fc70865d176ab073636f8b9078cbbc
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 13:20:38 2016 +0200
-
- conncheck: invoke the debug dump in more places
-
- Differential Revision: https://phabricator.freedesktop.org/D1123
-
-commit 15c0546f624113b8c0546a1f883a48bff7020f1b
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 19 17:06:32 2016 +0200
-
- conncheck: improve the selection of the pairs to be checked
-
- This patch aims to implement more closely the algorithm described
- in RFC 5245 indicating how pairs are transitionned from state Frozen
- to Waiting. This is described in 7.1.3.2 when a check succeeded, and
- correspond to modifications in function priv_conn_check_unfreeze_related().
- This is also described in 5.7.4 when defining the initial state of the
- pairs in a conncheck, and correspond to modifications in function
- priv_conn_check_unfreeze_next().
-
- This patch introduces the notion of active and frozen check list. It
- allows us to define the timer restranmission delay as described in 16.1.
-
- Another modification in priv_conn_check_tick_unlocked() is that every
- stream in handled consecutively, and in an independant way. The pacing
- was previously of a single STUN request emitted per callback, it is now
- of a triggered check per callback OR a single STUN per callback AND per
- stream per callback.
-
- The description of ordinary checks per stream in 5.8 is detailled in
- function priv_conn_check_tick_stream(), and a remaining of the code
- used to nominate a pair by the controlling agent is put in a dedicated
- function priv_conn_check_tick_stream_nominate()
-
- Differential Revision: https://phabricator.freedesktop.org/D813
-
-commit 58d061df8f5425dc1add9c6030a2f891ebda4616
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Mar 7 16:35:09 2016 +0100
-
- conncheck: update pair valid property selectively
-
- With this patch, we fix a corner case when the succeeded pair is a
- peer-reflexive candidate pair, that already has been discovered
- previously, In this case, the current pair -p- should not be marked
- valid, because the valid flag is already set on the discovered pair.
-
- Differential Revision: https://phabricator.freedesktop.org/D1124
-
-commit 0636f9addc041cf93c4ff4eaa351b1768d48a32e
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 19 13:12:48 2016 +0200
-
- conncheck: implement ice regular nomination method
-
- This patch implements Regular Nomation as described in RFC5245
- 8.1.1.1. The controlling agent lets valid pairs accumulate, and
- decides which pair to recheck with the use-candidate attribute set.
- priv_mark_pair_nominated() follows 7.2.1.5, to update the nominated
- pair when acting as a STUN server, and
- priv_map_reply_to_conn_check_request() implements 7.1.3.2.4 to
- update the nominated pair when acting as a STUN client. A new
- property is also added to the agent to control the nomination
- mode, which can be regular of aggressive, with default value
- set to aggressive.
-
- Two new flags are introduced in the CandidateCheckPair structure:
-
- - use_candidate_on_next_check indicates the STUN client to add the
- use-candidate attribute when the pair will be checked. At this
- time, the nominated flag has not been set on this pair yet.
-
- - mark_nominated_on_response_arrival indicates the STUN server
- to nominate the pair when its succesfull response to a
- previous triggered check will arrive (7.2.1.5, item #2)
-
- Differential Revision: https://phabricator.freedesktop.org/D811
-
-commit a602ff57aae6a6afdeab843954c48e6fb5d82d31
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 12 13:02:45 2016 +0200
-
- conncheck: fix pair state transition when successful response is received
-
- According the ICE RFC 5245, 7.1.3.2.3, the pair that *generated* a
- successful check should go to state succeeded, not only the valid
- pair built in section 7.1.3.2.2.
-
- Differential Revision: https://phabricator.freedesktop.org/D810
-
-commit 3a58ba6120b188d78c5709e0349c0346bfa21c1a
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Feb 1 11:10:21 2016 +0100
-
- conncheck: peer reflexive candidates are not paired
-
- This patch makes the code compliant with ICE RFC, 7.2.1.3 "Learning
- Peer Reflexive Candidates" and 7.1.3.2.1 "Discovering Peer Reflexive
- Candidates", where discovered candidates do not cause the creation
- of new pairs to be checked.
-
- Differential Revision: https://phabricator.freedesktop.org/D805
-
-commit 7a2c1edf502849a868b6f1026e8e2c343dee4ded
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Mon Jun 6 22:24:50 2016 +0200
-
- conncheck: update selected pair when nominated flag is set
-
- This modifies commit 8f1f615. It is better focused to update the
- selected pair just after its nominated flag has been set. We also keep
- the code homogeneous with other places, where the call to
- priv_update_selected_pair() immediately follows the setting of
- pair->nominated. Moreover in priv_update_check_list_state_for_ready(),
- we would call priv_update_selected_pair() more times that necessary when
- iterating on all nominated pairs.
-
- Differential Revision: https://phabricator.freedesktop.org/D1125
-
-commit 8bb210c5af4bcaf342d7fa4fef6034269e976532
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Thu Jun 9 23:28:43 2016 +0200
-
- stun timer: make properties for stun timer tunables
-
- Three STUN binding request properties should be customisable. RFC 5245
- describes the retransmission timer of the STUN transaction 'RTO', and
- RFC 5389 describes the number of retransmissions to send until a
- response is received 'Rc'. The third property is the 'RTO' when
- a reliable connection is used.
-
- RFC 5389 introduces a supplementary property 'Rm' as a multiplier used
- to compute the final timeout RTO * Rm. However, this property is not
- added in libnice, because this would require breaking the public API for
- STUN. Currently, our STUN implementation hardcodes a division by two for
- this final timeout.
-
- Differential Revision: https://phabricator.freedesktop.org/D1109
-
-commit 80c613699786567fd93db74377138600794a86e0
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Thu Jun 8 16:34:21 2017 -0400
-
- agent: Use base_addr to generate rport in SDP
-
- Reported by Capricornus (zhushengliang)
-
- https://phabricator.freedesktop.org/T7763
-
-commit b4abda09c79e4ce372a3771300abf568c85c7ff5
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Thu Apr 21 18:18:59 2016 +0200
-
- interfaces: ignore predefined network interfaces
-
- Some interfaces, like the one managed by libvirtd to provide a network
- bridge to locally hosted virtual machines, can be completely ignored
- when gathering ICE candidates. The motivation for adding this
- possibility is that, ignoring them doesn't remove capabilities, and
- improves the overall speed of the connection check method, by reducing
- the number of pairs to be tested. This patch adds the possibility to
- define such interfaces in the configuration script.
-
- Differential Revision: https://phabricator.freedesktop.org/D948
-
-commit d5446a72233eab8501be0b3fb9060c8be3ba034b
-Author: Philip Withnall <withnall(a)endlessm.com>
-Date: Mon May 1 08:51:40 2017 +0100
-
- examples: Stop installing the examples
-
- There’s no point in installing them; their benefit is in providing
- example code to developers.
-
- Debian doesn’t package them; Fedora packages them in a separate
- subpackage which will have to disappear.
-
- Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
- Reviewed-by: Olivier Crête <olivier.crete(a)collabora.com>
- Differential Revision: https://phabricator.freedesktop.org/D1737
-
-commit 0a2cb0a9b14a5a1a4b01ba68ab2e5a2aa965f342
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Tue Apr 5 21:32:39 2016 +0200
-
- agent: do not create a GSource for UDP TURN socket
-
- With this patch, we don't create a new GSource for udp-turn socket,
- because it would duplicate the packets already received on the base UDP
- socket, as the underlying GSocket is the same. This is a race condition,
- because an UDP packet arriving on the base socket, may randomly be
- handled by the GSource callback created for the base socket (udp-bsd) of
- the callback created for the udp-turn socket. Moreover this callback
- already knows how to parse UDP datagrams received from a known turn
- server.
-
- This patch also prevents a subtle bug, when a STUN request is received
- directly from a peer, is handled by the udp turn socket. If the agent
- already has a valid permission for this remote candidate, established
- for another pair, it will happily send the STUN reply through the turn
- relay. This generates a source address mismatch on the peer agent, when
- it'll receive the STUN response from the turn relay instead of the
- initial address the request has been sent to.
-
- Differential Revision: https://phabricator.freedesktop.org/D932
-
-commit f6f704c5e8d2193bc67ba2b697c77694e1698c43
-Author: Fabrice Bellet <fabrice(a)bellet.info>
-Date: Thu Jun 9 22:22:33 2016 +0200
-
- stun timer: fix timeout of the last retransmission
-
- According to RFC 5389, section 7.2.1, a special timeout is applied to
- the last retransmission (Rm * RTO), with Rm default value of 16, instead
- of (64 * RTO), 2^6 when the number of transmissions Rc is set to 7.
-
- As spotted by Olivier Crete, stun_timer_* is a public API, that cannot
- be changed, and the initial delay (RTO) is not preserved in the
- stun_timer_s struct. So we use a hack that implicitely guess Rm from the
- number of transmissions Rc, by generalizing the default value of the
- spec for Rm and Rc to other values of Rc passed in stun_timer_start(
-
- According to the spec, with the default value of Rc=7, the last delay
- should be (64 * RTO), and it is instead (16 * RTO). So the last delay
- can be computed by dividing the penultimate delay by two, instead of
- multiplying it by two.
-
- Differential Revision: https://phabricator.freedesktop.org/D1108
-
-commit b0538d8c51f65019867b56a45cf90a70bef38f01
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 11 18:31:21 2017 -0400
-
- agent: Ignore remote candidate of non-accepted types
-
- If we disable ice-tcp or ice-udp, ignore the remote
- candidates for those types.
-
-commit f49ab88f957a3a250ef2ada0c0fab4fbbd3e5da8
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 11 16:42:55 2017 -0400
-
- conncheck: Check the controlling state when the req was sent
-
- It was checking when the pair was created, but the role may have
- already changed when the request is sent.
-
-commit 8fc22b0034d04cbc222e0637152b1cee2879eef3
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Wed Apr 5 17:43:26 2017 -0400
-
- tests_: Add test to verify that only packets from validated addresses pass
-
- https://phabricator.freedesktop.org/T104
-
- Reviewed-by: Philip Withnall <philip.withnall(a)collabora.co.uk>
- Differential Revision: https://phabricator.freedesktop.org/D1717
-
-commit ffc7fddac42728bac6e4753a17bc52e5e610ae8b
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 21:27:39 2017 -0400
-
- agent: Drop packets not from validated addresses
-
- This is required by the WebRTC spec.
-
- Remove test-mainloop as it doesnt even try to do
- a negotiation.
-
- https://phabricator.freedesktop.org/T104
-
- Differential Revision: https://phabricator.freedesktop.org/D1716
-
-commit 1e9e28dbc98b4f6a7cf4bda0ca73b5abc2735ddc
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 14:41:51 2017 -0400
-
- candidate: Add equality check function
-
- Add a function that can check if two candidates point to the same place.
-
- https://phabricator.freedesktop.org/T104
-
- Reviewed-by: Philip Withnall <philip.withnall(a)collabora.co.uk>
- Differential Revision: https://phabricator.freedesktop.org/D1715
-
-commit 10c557f23f8337f1304fff27bd85d2eb713cb249
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Wed Apr 5 17:01:35 2017 -0400
-
- test-credentials: Fix leak
-
-commit ae6d939e48366b80570d713b83334191b0982e71
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 20:34:05 2017 -0400
-
- debug: Use libnice-verbose, not libnice-nice-verbose
-
-commit efc6a9be8cb34c899f0454c32e8a1e62b38df474
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 18:42:57 2017 -0400
-
- tests: Use automake test-driver for valgrind
-
- This fixes the valgrind integration with the new test drivers.
-
-commit 4e605885c9dcaeb3ee443ec902c9c9189b19043f
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 16:16:46 2017 -0400
-
- agent: Remove impossible case
-
-commit e56b910d2d8b70f5677bbd4be579d5b95aff33ad
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 16:16:05 2017 -0400
-
- agent: Separate return from NiceSocket and internal enum
-
- The same variable was used for return values from NiceSocket and
- for the internal enum, but 0 and -1 have different meanings in both.
-
-commit cd255bddc7fa0ddae056b5358a22b380c4eefc42
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 15:24:43 2017 -0400
-
- udp-turn: Add some const to internal APIs
-
-commit db05e8b0fdc713df93cd6a4c3914e5aee38b2391
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 12:30:27 2017 -0400
-
- Make clang-analyzer happy
-
- Various little things, none of which should make a functional difference.
-
-commit 0672758b9621801c8f0d9e3c920370983b267a68
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 12:29:29 2017 -0400
-
- agent: Don't set variable that won't be used
-
- It exits the loop immediately, so no point to set the variable.
- And it makes the clang static analyzer happy.
-
-commit 0de1657e4d15d4f1911ab1fad84ea23e7013070f
-Author: Olivier Crête <olivier.crete(a)collabora.com>
-Date: Tue Apr 4 12:25:50 2017 -0400
-
- conncheck: Use the right test for empty remote_frag
-
- It's now an array, not a pointer, so needs to test to emptyness.
-
- It's a bugfix on the previous commit, 59ce41df
-
-commit 59ce41dfb837adf4222b25490cde2e394384ad15
-Author: Miguel París Díaz <mparisdiaz(a)gmail.com>
-Date: Fri Mar 31 20:20:38 2017 -0400
-
- conncheck: consider answer received when remote credentials are set
-
- Consider that the answer is received when remote credentials
- are set instead of when a remote candidate is set,
- which could not happen or could cause more delay for the
- connection establishment.
-
- Ported to git master by Olivier Crête
-
- Differential Revision: https://phabricator.freedesktop.org/D1704
-diff --git a/agent/Makefile.am b/agent/Makefile.am
-index b585393..915f312 100644
---- a/agent/Makefile.am
-+++ b/agent/Makefile.am
-@@ -22,6 +22,12 @@ if WINDOWS
- AM_CFLAGS += -DWINVER=0x0501 # _WIN32_WINNT_WINXP
- endif
-
-+BUILT_SOURCES = \
-+ agent-enum-types.h \
-+ agent-enum-types.c
-+
-+CLEANFILES += $(BUILT_SOURCES)
-+
- noinst_LTLIBRARIES = libagent.la
-
- libagent_la_SOURCES = \
-@@ -54,6 +60,23 @@ libagent_la_SOURCES = \
- outputstream.c \
- $(BUILT_SOURCES)
-
-+agent-enum-types.h: agent.h Makefile
-+ $(AM_V_GEN)$(GLIB_MKENUMS) \
-+ --fhead "#ifndef __AGENT_ENUM_TYPES_H__\n#define __AGENT_ENUM_TYPES_H__ 1\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
-+ --fprod "/* enumerations from \"@filename@\" */\n" \
-+ --vhead "GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define NICE_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
-+ --ftail "G_END_DECLS\n\n#endif /* !AGENT_ENUM_TYPES_H */" \
-+ $(addprefix $(srcdir)/,agent.h) > $@
-+
-+agent-enum-types.c: agent.h Makefile agent-enum-types.h
-+ $(AM_V_GEN)$(GLIB_MKENUMS) \
-+ --fhead "#include <config.h>\n#include <glib-object.h>\n#include \"agent.h\"\n#include \"agent-enum-types.h\"" \
-+ --fprod "\n/* enumerations from \"@filename@\" */" \
-+ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType type = 0;\n if (!type) {\n static const G@Type@Value values[] = {" \
-+ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
-+ --vtail " { 0, NULL, NULL }\n };\n type = g_@type@_register_static (\"@EnumName@\", values);\n }\n return type;\n}\n\n" \
-+ $(addprefix $(srcdir)/,agent.h) > $@
-+
- libagent_la_LIBADD = \
- $(top_builddir)/random/libnice-random.la \
- $(top_builddir)/socket/libsocket.la \
-diff --git a/agent/agent-priv.h b/agent/agent-priv.h
-index 4d8c9b8..7269be0 100644
---- a/agent/agent-priv.h
-+++ b/agent/agent-priv.h
-@@ -106,7 +106,6 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
-
- #define NICE_AGENT_TIMER_TA_DEFAULT 20 /* timer Ta, msecs (impl. defined) */
- #define NICE_AGENT_TIMER_TR_DEFAULT 25000 /* timer Tr, msecs (impl. defined) */
--#define NICE_AGENT_TIMER_TR_MIN 15000 /* timer Tr, msecs (ICE ID-19) */
- #define NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT 100 /* see spec 5.7.3 (ID-19) */
-
-
-@@ -114,6 +113,27 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
- * MTU and estimated typical sizes of ICE STUN packet */
- #define MAX_STUN_DATAGRAM_PAYLOAD 1300
-
-+#define NICE_COMPONENT_MAX_VALID_CANDIDATES 50 /* maximum number of validates remote candidates to keep, the number is arbitrary but hopefully large enough */
-+
-+/* A convenient macro to test if the agent is compatible with RFC5245
-+ * or OC2007R2. Specifically these two modes share the support
-+ * of the regular or aggressive nomination mode */
-+#define NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2(obj) \
-+ ((obj)->compatibility == NICE_COMPATIBILITY_RFC5245 || \
-+ (obj)->compatibility == NICE_COMPATIBILITY_OC2007R2)
-+
-+/* A grace period before declaring a component as failed, in msecs. This
-+ * delay is added to reduce the chance to see the agent receiving new
-+ * stun activity just after the conncheck list has been declared failed,
-+ * reactiviting conncheck activity, and causing a (valid) state
-+ * transitions like that: connecting -> failed -> connecting ->
-+ * connected -> ready.
-+ * Such transitions are not buggy per-se, but may break the
-+ * test-suite, that counts precisely the number of time each state
-+ * has been set, and doesnt expect these transcient failed states.
-+ */
-+#define NICE_AGENT_MAX_TIMER_GRACE_PERIOD 1000
-+
- struct _NiceAgent
- {
- GObject parent; /* gobject pointer */
-@@ -126,10 +146,14 @@ struct _NiceAgent
- NiceProxyType proxy_type; /* property: Proxy type */
- gchar *proxy_username; /* property: Proxy username */
- gchar *proxy_password; /* property: Proxy password */
-- gboolean controlling_mode; /* property: controlling-mode */
-+ gboolean saved_controlling_mode;/* property: controlling-mode */
- guint timer_ta; /* property: timer Ta */
- guint max_conn_checks; /* property: max connectivity checks */
- gboolean force_relay; /* property: force relay */
-+ guint stun_max_retransmissions; /* property: stun max retransmissions, Rc */
-+ guint stun_initial_timeout; /* property: stun initial timeout, RTO */
-+ guint stun_reliable_timeout; /* property: stun reliable timeout */
-+ NiceNominationMode nomination_mode; /* property: Nomination mode */
-
- GSList *local_addresses; /* list of NiceAddresses for local
- interfaces */
-@@ -164,6 +188,10 @@ struct _NiceAgent
- guint16 rfc4571_expecting_length;
- gboolean use_ice_udp;
- gboolean use_ice_tcp;
-+
-+ guint conncheck_timer_grace_period; /* ongoing delay before timer stop */
-+ gboolean controlling_mode; /* controlling mode used by the
-+ conncheck */
- /* XXX: add pointer to internal data struct for ABI-safe extensions */
- };
-
-diff --git a/agent/agent.c b/agent/agent.c
-index 555fd16..0773c53 100644
---- a/agent/agent.c
-+++ b/agent/agent.c
-@@ -73,6 +73,7 @@
- #include "interfaces.h"
-
- #include "pseudotcp.h"
-+#include "agent-enum-types.h"
-
- /* Maximum size of a UDP packet’s payload, as the packet’s length field is 16b
- * wide. */
-@@ -113,6 +114,10 @@ enum
- PROP_BYTESTREAM_TCP,
- PROP_KEEPALIVE_CONNCHECK,
- PROP_FORCE_RELAY,
-+ PROP_STUN_MAX_RETRANSMISSIONS,
-+ PROP_STUN_INITIAL_TIMEOUT,
-+ PROP_STUN_RELIABLE_TIMEOUT,
-+ PROP_NOMINATION_MODE,
- };
-
-
-@@ -400,6 +405,13 @@ nice_agent_class_init (NiceAgentClass *klass)
- 1, /* not a construct property, ignored */
- G_PARAM_READWRITE));
-
-+ /**
-+ * NiceAgent:controlling-mode:
-+ *
-+ * Whether the agent has the controlling role. This property should
-+ * be modified before gathering candidates, any modification occuring
-+ * later will be hold until ICE is restarted.
-+ */
- g_object_class_install_property (gobject_class, PROP_CONTROLLING_MODE,
- g_param_spec_boolean (
- "controlling-mode",
-@@ -436,6 +448,24 @@ nice_agent_class_init (NiceAgentClass *klass)
- 0, /* default set in init */
- G_PARAM_READWRITE));
-
-+ /**
-+ * NiceAgent:nomination-mode:
-+ *
-+ * The nomination mode used in the ICE specification for describing
-+ * the selection of valid pairs to be used upstream.
-+ * <para> See also: #NiceNominationMode </para>
-+ *
-+ * Since: 0.1.15
-+ */
-+ g_object_class_install_property (gobject_class, PROP_NOMINATION_MODE,
-+ g_param_spec_enum (
-+ "nomination-mode",
-+ "ICE nomination mode",
-+ "Nomination mode used in the ICE specification for describing "
-+ "the selection of valid pairs to be used upstream",
-+ NICE_TYPE_NOMINATION_MODE, NICE_NOMINATION_MODE_AGGRESSIVE,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-+
- /**
- * NiceAgent:proxy-ip:
- *
-@@ -708,6 +738,76 @@ nice_agent_class_init (NiceAgentClass *klass)
- FALSE,
- G_PARAM_READWRITE));
-
-+ /**
-+ * NiceAgent:stun-max-retransmissions
-+ *
-+ * The maximum number of retransmissions of the STUN binding requests
-+ * used in the gathering stage, to find our local candidates, and used
-+ * in the connection check stage, to test the validity of each
-+ * constructed pair. This property is described as 'Rc' in the RFC
-+ * 5389, with a default value of 7. The timeout of each STUN request
-+ * is doubled for each retransmission, so the choice of this value has
-+ * a direct impact on the time needed to move from the CONNECTED state
-+ * to the READY state, and on the time needed to complete the GATHERING
-+ * state.
-+ *
-+ * Since: 0.1.15
-+ */
-+
-+ g_object_class_install_property (gobject_class, PROP_STUN_MAX_RETRANSMISSIONS,
-+ g_param_spec_uint (
-+ "stun-max-retransmissions",
-+ "STUN Max Retransmissions",
-+ "Maximum number of STUN binding requests retransmissions "
-+ "described as 'Rc' in the STUN specification.",
-+ 1, 99,
-+ STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-+
-+ /**
-+ * NiceAgent:stun-initial-timeout
-+ *
-+ * The initial timeout (msecs) of the STUN binding requests
-+ * used in the gathering stage, to find our local candidates.
-+ * This property is described as 'RTO' in the RFC 5389 and RFC 5245.
-+ * This timeout is doubled for each retransmission, until
-+ * #NiceAgent:stun-max-retransmissions have been done,
-+ * with an exception for the last restransmission, where the timeout is
-+ * divided by two instead (RFC 5389 indicates that a customisable
-+ * multiplier 'Rm' to 'RTO' should be used).
-+ *
-+ * Since: 0.1.15
-+ */
-+
-+ g_object_class_install_property (gobject_class, PROP_STUN_INITIAL_TIMEOUT,
-+ g_param_spec_uint (
-+ "stun-initial-timeout",
-+ "STUN Initial Timeout",
-+ "STUN timeout in msecs of the initial binding requests used in the "
-+ "gathering state, described as 'RTO' in the ICE specification.",
-+ 20, 9999,
-+ STUN_TIMER_DEFAULT_TIMEOUT,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-+
-+ /**
-+ * NiceAgent:stun-reliable-timeout
-+ *
-+ * The initial timeout of the STUN binding requests used
-+ * for a reliable timer.
-+ *
-+ * Since: 0.1.15
-+ */
-+
-+ g_object_class_install_property (gobject_class, PROP_STUN_RELIABLE_TIMEOUT,
-+ g_param_spec_uint (
-+ "stun-reliable-timeout",
-+ "STUN Reliable Timeout",
-+ "STUN timeout in msecs of the initial binding requests used for "
-+ "a reliable timer.",
-+ 20, 99999,
-+ STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT,
-+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-+
- /* install signals */
-
- /**
-@@ -1013,6 +1113,47 @@ static void priv_generate_tie_breaker (NiceAgent *agent)
- nice_rng_generate_bytes (agent->rng, 8, (gchar*)&agent->tie_breaker);
- }
-
-+static void
-+priv_update_controlling_mode (NiceAgent *agent, gboolean value)
-+{
-+ gboolean update_controlling_mode;
-+ GSList *i, *j;
-+
-+ agent->saved_controlling_mode = value;
-+ /* It is safe to update the agent controlling mode when all
-+ * components are still in state disconnected. When we leave
-+ * this state, the role must stay under the control of the
-+ * conncheck algorithm exclusively, until the conncheck is
-+ * eventually restarted. See RFC5245, sect 5.2. Determining Role
-+ */
-+ if (agent->controlling_mode != agent->saved_controlling_mode) {
-+ update_controlling_mode = TRUE;
-+ for (i = agent->streams;
-+ i && update_controlling_mode; i = i->next) {
-+ NiceStream *stream = i->data;
-+ for (j = stream->components;
-+ j && update_controlling_mode; j = j->next) {
-+ NiceComponent *component = j->data;
-+ if (component->state > NICE_COMPONENT_STATE_DISCONNECTED)
-+ update_controlling_mode = FALSE;
-+ }
-+ }
-+ if (update_controlling_mode) {
-+ agent->controlling_mode = agent->saved_controlling_mode;
-+ nice_debug ("Agent %p : Property set, changing role to \"%s\".",
-+ agent, agent->controlling_mode ? "controlling" : "controlled");
-+ } else {
-+ nice_debug ("Agent %p : Property set, role switch requested "
-+ "but conncheck already started.", agent);
-+ nice_debug ("Agent %p : Property set, staying with role \"%s\" "
-+ "until restart.", agent,
-+ agent->controlling_mode ? "controlling" : "controlled");
-+ }
-+ } else
-+ nice_debug ("Agent %p : Property set, role is already \"%s\".", agent,
-+ agent->controlling_mode ? "controlling" : "controlled");
-+}
-+
- static void
- nice_agent_init (NiceAgent *agent)
- {
-@@ -1022,7 +1163,9 @@ nice_agent_init (NiceAgent *agent)
- /* set defaults; not construct params, so set here */
- agent->stun_server_port = DEFAULT_STUN_PORT;
- agent->controlling_mode = TRUE;
-+ agent->saved_controlling_mode = TRUE;
- agent->max_conn_checks = NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT;
-+ agent->nomination_mode = NICE_NOMINATION_MODE_AGGRESSIVE;
-
- agent->discovery_list = NULL;
- agent->discovery_unsched_items = 0;
-@@ -1071,6 +1214,24 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat)
- }
-
-
-+NICEAPI_EXPORT NiceAgent *
-+nice_agent_new_full (GMainContext *ctx,
-+ NiceCompatibility compat,
-+ NiceAgentOption flags)
-+{
-+ NiceAgent *agent = g_object_new (NICE_TYPE_AGENT,
-+ "compatibility", compat,
-+ "main-context", ctx,
-+ "reliable", (flags & NICE_AGENT_OPTION_RELIABLE) ? TRUE : FALSE,
-+ "nomination-mode", (flags & NICE_AGENT_OPTION_REGULAR_NOMINATION) ?
-+ NICE_NOMINATION_MODE_REGULAR : NICE_NOMINATION_MODE_AGGRESSIVE,
-+ "full-mode", (flags & NICE_AGENT_OPTION_LITE_MODE) ? FALSE : TRUE,
-+ NULL);
-+
-+ return agent;
-+}
-+
-+
- static void
- nice_agent_get_property (
- GObject *object,
-@@ -1101,7 +1262,7 @@ nice_agent_get_property (
- break;
-
- case PROP_CONTROLLING_MODE:
-- g_value_set_boolean (value, agent->controlling_mode);
-+ g_value_set_boolean (value, agent->saved_controlling_mode);
- break;
-
- case PROP_FULL_MODE:
-@@ -1117,6 +1278,10 @@ nice_agent_get_property (
- /* XXX: should we prune the list of already existing checks? */
- break;
-
-+ case PROP_NOMINATION_MODE:
-+ g_value_set_enum (value, agent->nomination_mode);
-+ break;
-+
- case PROP_PROXY_IP:
- g_value_set_string (value, agent->proxy_ip);
- break;
-@@ -1187,6 +1352,18 @@ nice_agent_get_property (
- g_value_set_boolean (value, agent->force_relay);
- break;
-
-+ case PROP_STUN_MAX_RETRANSMISSIONS:
-+ g_value_set_uint (value, agent->stun_max_retransmissions);
-+ break;
-+
-+ case PROP_STUN_INITIAL_TIMEOUT:
-+ g_value_set_uint (value, agent->stun_initial_timeout);
-+ break;
-+
-+ case PROP_STUN_RELIABLE_TIMEOUT:
-+ g_value_set_uint (value, agent->stun_reliable_timeout);
-+ break;
-+
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-@@ -1294,7 +1471,7 @@ nice_agent_set_property (
- break;
-
- case PROP_CONTROLLING_MODE:
-- agent->controlling_mode = g_value_get_boolean (value);
-+ priv_update_controlling_mode (agent, g_value_get_boolean (value));
- break;
-
- case PROP_FULL_MODE:
-@@ -1309,6 +1486,10 @@ nice_agent_set_property (
- agent->max_conn_checks = g_value_get_uint (value);
- break;
-
-+ case PROP_NOMINATION_MODE:
-+ agent->nomination_mode = g_value_get_enum (value);
-+ break;
-+
- case PROP_PROXY_IP:
- g_free (agent->proxy_ip);
- agent->proxy_ip = g_value_dup_string (value);
-@@ -1374,6 +1555,18 @@ nice_agent_set_property (
- agent->force_relay = g_value_get_boolean (value);
- break;
-
-+ case PROP_STUN_MAX_RETRANSMISSIONS:
-+ agent->stun_max_retransmissions = g_value_get_uint (value);
-+ break;
-+
-+ case PROP_STUN_INITIAL_TIMEOUT:
-+ agent->stun_initial_timeout = g_value_get_uint (value);
-+ break;
-+
-+ case PROP_STUN_RELIABLE_TIMEOUT:
-+ agent->stun_reliable_timeout = g_value_get_uint (value);
-+ break;
-+
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
-@@ -1552,7 +1745,6 @@ pseudo_tcp_socket_recv_messages (PseudoTcpSocket *self,
-
- if (len == 0) {
- /* Reached EOS. */
-- len = 0;
- goto done;
- } else if (len < 0 &&
- pseudo_tcp_socket_get_error (self) == EWOULDBLOCK) {
-@@ -1890,6 +2082,17 @@ void agent_gathering_done (NiceAgent *agent)
-
- for (i = agent->streams; i; i = i->next) {
- NiceStream *stream = i->data;
-+
-+ /* We ignore streams not in gathering state, typically already in
-+ * ready state. Such streams may have couples (local,remote)
-+ * candidates that have not resulted in the creation a new pair
-+ * during a previous conncheck session, and we don't want these new
-+ * pairs to be added now, because it would generate unneeded
-+ * transition changes for a stream unconcerned by this gathering.
-+ */
-+ if (!stream->gathering)
-+ continue;
-+
- for (j = stream->components; j; j = j->next) {
- NiceComponent *component = j->data;
-
-@@ -3113,6 +3316,13 @@ static gboolean priv_add_remote_candidate (
- NiceComponent *component;
- NiceCandidate *candidate;
-
-+ if (transport == NICE_CANDIDATE_TRANSPORT_UDP &&
-+ !agent->use_ice_udp)
-+ return FALSE;
-+ if (transport != NICE_CANDIDATE_TRANSPORT_UDP &&
-+ !agent->use_ice_tcp)
-+ return FALSE;
-+
- if (!agent_find_component (agent, stream_id, component_id, NULL, &component))
- return FALSE;
-
-@@ -3195,6 +3405,19 @@ static gboolean priv_add_remote_candidate (
- username, password, priority);
- }
-
-+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
-+ /* note: If there are TCP candidates for a media stream,
-+ * a controlling agent MUST use the regular selection algorithm,
-+ * RFC 6544, sect 8, "Concluding ICE Processing"
-+ */
-+ if (agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE &&
-+ transport != NICE_CANDIDATE_TRANSPORT_UDP) {
-+ nice_debug ("Agent %p : we have TCP candidates, switching back "
-+ "to regular nomination mode", agent);
-+ agent->nomination_mode = NICE_NOMINATION_MODE_REGULAR;
-+ }
-+ }
-+
- if (base_addr)
- candidate->base_addr = *base_addr;
-
-@@ -3240,6 +3463,8 @@ nice_agent_set_remote_credentials (
- g_strlcpy (stream->remote_ufrag, ufrag, NICE_STREAM_MAX_UFRAG);
- g_strlcpy (stream->remote_password, pwd, NICE_STREAM_MAX_PWD);
-
-+ conn_check_remote_credentials_set(agent, stream);
-+
- ret = TRUE;
- goto done;
- }
-@@ -3342,8 +3567,6 @@ _set_remote_candidates_locked (NiceAgent *agent, NiceStream *stream,
- }
- }
-
-- conn_check_remote_candidates_set(agent, stream, component);
--
- if (added > 0) {
- conn_check_schedule_next (agent);
- }
-@@ -3423,7 +3646,8 @@ agent_recv_message_unlocked (
- {
- NiceAddress from;
- GList *item;
-- gint retval;
-+ RecvStatus retval;
-+ gint sockret;
- gboolean is_turn = FALSE;
-
- /* We need an address for packet parsing, below. */
-@@ -3484,8 +3708,8 @@ agent_recv_message_unlocked (
- local_bufs[i + 1].buffer = message->buffers[i].buffer;
- local_bufs[i + 1].size = message->buffers[i].size;
- }
-- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
-- if (retval == 1) {
-+ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
-+ if (sockret == 1) {
- message->length = ntohs (rfc4571_frame);
- }
- } else {
-@@ -3500,7 +3724,7 @@ agent_recv_message_unlocked (
- _priv_set_socket_tos (agent, new_socket, stream->tos);
- nice_component_attach_socket (component, new_socket);
- }
-- retval = 0;
-+ sockret = 0;
- } else {
- /* In the case of a real ICE-TCP connection, we can use the socket as a
- * bytestream and do the read here with caching of data being read
-@@ -3509,9 +3733,9 @@ agent_recv_message_unlocked (
-
- /* TODO: Support bytestream reads */
- message->length = 0;
-- retval = 0;
-+ sockret = 0;
- if (available <= 0) {
-- retval = available;
-+ sockret = available;
-
- /* If we don't call check_connect_result on an outbound connection,
- * then is_connected will always return FALSE. That's why we check
-@@ -3524,7 +3748,7 @@ agent_recv_message_unlocked (
- * not connected, it means that it failed to connect, so we must
- * return an error to make the socket fail/closed
- */
-- retval = -1;
-+ sockret = -1;
- } else {
- gint flags = G_SOCKET_MSG_PEEK;
-
-@@ -3537,7 +3761,7 @@ agent_recv_message_unlocked (
- */
- if (g_socket_receive_message (nicesock->fileno, NULL,
- NULL, 0, NULL, NULL, &flags, NULL, NULL) == 0)
-- retval = -1;
-+ sockret = -1;
- }
- } else if (agent->rfc4571_expecting_length == 0) {
- if ((gsize) available >= sizeof(guint16)) {
-@@ -3545,8 +3769,8 @@ agent_recv_message_unlocked (
- GInputVector local_buf = { &rfc4571_frame, sizeof(guint16)};
- NiceInputMessage local_message = { &local_buf, 1, message->from, 0};
-
-- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
-- if (retval == 1) {
-+ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
-+ if (sockret == 1) {
- agent->rfc4571_expecting_length = ntohs (rfc4571_frame);
- available = g_socket_get_available_bytes (nicesock->fileno);
- }
-@@ -3590,8 +3814,8 @@ agent_recv_message_unlocked (
- off += local_bufs[i].size;
- }
- }
-- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
-- if (retval == 1) {
-+ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
-+ if (sockret == 1) {
- message->length = local_message.length;
- agent->rfc4571_expecting_length -= local_message.length;
- }
-@@ -3599,23 +3823,26 @@ agent_recv_message_unlocked (
- }
- }
- } else {
-- retval = nice_socket_recv_messages (nicesock, message, 1);
-+ sockret = nice_socket_recv_messages (nicesock, message, 1);
- }
-
-- if (retval == 0) {
-+ if (sockret == 0) {
- retval = RECV_WOULD_BLOCK; /* EWOULDBLOCK */
- nice_debug_verbose ("%s: Agent %p: no message available on read attempt",
- G_STRFUNC, agent);
- goto done;
-- } else if (retval < 0) {
-+ } else if (sockret < 0) {
- nice_debug ("Agent %p: %s returned %d, errno (%d) : %s",
-- agent, G_STRFUNC, retval, errno, g_strerror (errno));
-+ agent, G_STRFUNC, sockret, errno, g_strerror (errno));
-
- retval = RECV_ERROR;
- goto done;
-+ } else {
-+ retval = sockret;
- }
-
-- if (retval == RECV_OOB || message->length == 0) {
-+ g_assert (retval != RECV_OOB);
-+ if (message->length == 0) {
- retval = RECV_OOB;
- nice_debug_verbose ("%s: Agent %p: message handled out-of-band", G_STRFUNC,
- agent);
-@@ -3679,8 +3906,6 @@ agent_recv_message_unlocked (
- if (retval == RECV_OOB)
- goto done;
-
-- agent->media_after_tick = TRUE;
--
- /* If the message’s stated length is equal to its actual length, it’s probably
- * a STUN message; otherwise it’s probably data. */
- if (stun_message_validate_buffer_length_fast (
-@@ -3712,6 +3937,7 @@ agent_recv_message_unlocked (
- nice_debug ("%s: Valid STUN packet received.", G_STRFUNC);
- retval = RECV_OOB;
- g_free (big_buf);
-+ agent->media_after_tick = TRUE;
- goto done;
- }
- }
-@@ -3722,6 +3948,23 @@ agent_recv_message_unlocked (
- g_free (big_buf);
- }
-
-+ if (!nice_component_verify_remote_candidate (component,
-+ message->from, nicesock)) {
-+ if (nice_debug_is_verbose ()) {
-+ gchar str[INET6_ADDRSTRLEN];
-+
-+ nice_address_to_string (message->from, str);
-+ nice_debug_verbose ("Agent %p : %d:%d DROPPING packet from unknown source"
-+ " %s:%d sock-type: %d", agent, stream->id, component->id, str,
-+ nice_address_get_port (message->from), nicesock->type);
-+ }
-+
-+ retval = RECV_OOB;
-+ goto done;
-+ }
-+
-+ agent->media_after_tick = TRUE;
-+
- /* Unhandled STUN; try handling TCP data, then pass to the client. */
- if (message->length > 0 && agent->reliable) {
- if (!nice_socket_is_reliable (nicesock) &&
-@@ -4085,7 +4328,10 @@ static gboolean
- nice_agent_recv_cancelled_cb (GCancellable *cancellable, gpointer user_data)
- {
- GError **error = user_data;
-- return !g_cancellable_set_error_if_cancelled (cancellable, error);
-+
-+ if (error && !*error)
-+ g_cancellable_set_error_if_cancelled (cancellable, error);
-+ return G_SOURCE_REMOVE;
- }
-
- static gint
-@@ -4245,7 +4491,6 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
- "Component removed during call.");
-
- component = NULL;
-- error_reported = TRUE;
-
- goto recv_error;
- }
-@@ -4734,6 +4979,11 @@ nice_agent_restart (
- /* step: regenerate tie-breaker value */
- priv_generate_tie_breaker (agent);
-
-+ /* step: reset controlling mode from the property value */
-+ agent->controlling_mode = agent->saved_controlling_mode;
-+ nice_debug ("Agent %p : ICE restart, reset role to \"%s\".",
-+ agent, agent->controlling_mode ? "controlling" : "controlled");
-+
- for (i = agent->streams; i; i = i->next) {
- NiceStream *stream = i->data;
-
-@@ -5665,7 +5915,7 @@ _generate_candidate_sdp (NiceAgent *agent,
- g_string_append_printf (sdp, " typ %s", _cand_type_to_sdp (candidate->type));
- if (nice_address_is_valid (&candidate->base_addr) &&
- !nice_address_equal (&candidate->addr, &candidate->base_addr)) {
-- port = nice_address_get_port (&candidate->addr);
-+ port = nice_address_get_port (&candidate->base_addr);
- nice_address_to_string (&candidate->base_addr, ip4);
- g_string_append_printf (sdp, " raddr %s rport %d", ip4,
- port == 0 ? 9 : port);
-diff --git a/agent/agent.h b/agent/agent.h
-index 47c4d5a..520c4c5 100644
---- a/agent/agent.h
-+++ b/agent/agent.h
-@@ -377,6 +377,45 @@ typedef enum
- NICE_PROXY_TYPE_LAST = NICE_PROXY_TYPE_HTTP,
- } NiceProxyType;
-
-+/**
-+ * NiceNominationMode:
-+ * @NICE_NOMINATION_MODE_AGGRESSIVE: Aggressive nomination mode
-+ * @NICE_NOMINATION_MODE_REGULAR: Regular nomination mode
-+ *
-+ * An enum to specity the kind of nomination mode to use by
-+ * the agent, as described in RFC 5245. Two modes exists,
-+ * regular and aggressive. They differ by the way the controlling
-+ * agent chooses to put the USE-CANDIDATE attribute in its STUN
-+ * messages. The aggressive mode is supposed to nominate a pair
-+ * faster, than the regular mode, potentially causing the nominated
-+ * pair to change until the connection check completes.
-+ *
-+ * Since: 0.1.15
-+ */
-+typedef enum
-+{
-+ NICE_NOMINATION_MODE_REGULAR = 0,
-+ NICE_NOMINATION_MODE_AGGRESSIVE,
-+} NiceNominationMode;
-+
-+/**
-+ * NiceAgentOption:
-+ * @NICE_AGENT_OPTION_REGULAR_NOMINATION: Enables regular nomination, default
-+ * is aggrssive mode (see #NiceNominationMode).
-+ * @NICE_AGENT_OPTION_RELIABLE: Enables reliable mode, possibly using PseudoTCP, * see nice_agent_new_reliable().
-+ * @NICE_AGENT_OPTION_LITE_MODE: Enable lite mode
-+ *
-+ * These are options that can be passed to nice_agent_new_full(). They set
-+ * various properties on the agent. Not including them sets the property to
-+ * the other value.
-+ *
-+ * Since: 0.1.15
-+ */
-+typedef enum {
-+ NICE_AGENT_OPTION_REGULAR_NOMINATION = 1 << 0,
-+ NICE_AGENT_OPTION_RELIABLE = 1 << 1,
-+ NICE_AGENT_OPTION_LITE_MODE = 1 << 2,
-+} NiceAgentOption;
-
- /**
- * NiceAgentRecvFunc:
-@@ -428,6 +467,26 @@ nice_agent_new (GMainContext *ctx, NiceCompatibility compat);
- NiceAgent *
- nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
-
-+/**
-+ * nice_agent_new_full:
-+ * @ctx: The Glib Mainloop Context to use for timers
-+ * @compat: The compatibility mode of the agent
-+ * @flags: Flags to set the properties
-+ *
-+ * Create a new #NiceAgent with parameters that must be be defined at
-+ * construction time.
-+ * The returned object must be freed with g_object_unref()
-+ * <para> See also: #NiceNominationMode and #NiceAgentOption</para>
-+ *
-+ * Since: 0.1.15
-+ *
-+ * Returns: The new agent GObject
-+ */
-+NiceAgent *
-+nice_agent_new_full (GMainContext *ctx,
-+ NiceCompatibility compat,
-+ NiceAgentOption flags);
-+
- /**
- * nice_agent_add_local_address:
- * @agent: The #NiceAgent Object
-@@ -447,7 +506,6 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
- gboolean
- nice_agent_add_local_address (NiceAgent *agent, NiceAddress *addr);
-
--
- /**
- * nice_agent_add_stream:
- * @agent: The #NiceAgent Object
-diff --git a/agent/candidate.c b/agent/candidate.c
-index 27966ef..85f8f65 100644
---- a/agent/candidate.c
-+++ b/agent/candidate.c
-@@ -360,3 +360,14 @@ nice_candidate_copy (const NiceCandidate *candidate)
-
- return copy;
- }
-+
-+NICEAPI_EXPORT gboolean
-+nice_candidate_equal_target (const NiceCandidate *candidate1,
-+ const NiceCandidate *candidate2)
-+{
-+ g_return_val_if_fail (candidate1 != NULL, FALSE);
-+ g_return_val_if_fail (candidate2 != NULL, FALSE);
-+
-+ return (candidate1->transport == candidate2->transport &&
-+ nice_address_equal (&candidate1->addr, &candidate2->addr));
-+}
-diff --git a/agent/candidate.h b/agent/candidate.h
-index fadfce3..e556c16 100644
---- a/agent/candidate.h
-+++ b/agent/candidate.h
-@@ -230,7 +230,23 @@ nice_candidate_free (NiceCandidate *candidate);
- NiceCandidate *
- nice_candidate_copy (const NiceCandidate *candidate);
-
--GType nice_candidate_get_type (void);
-+/**
-+ * nice_candidate_equal_target:
-+ * @candidate1: A candidate
-+ * @candidate2: A candidate
-+ *
-+ * Verifies that the candidates point to the same place, meaning they have
-+ * the same transport and the same address. It ignores all other aspects.
-+ *
-+ * Returns: %TRUE if the candidates point to the same place
-+ *
-+ * Since: 0.1.15
-+ */
-+gboolean
-+nice_candidate_equal_target (const NiceCandidate *candidate1,
-+ const NiceCandidate *candidate2);
-+
-+ GType nice_candidate_get_type (void);
-
- /**
- * NICE_TYPE_CANDIDATE:
-diff --git a/agent/component.c b/agent/component.c
-index 32f7463..6eee90e 100644
---- a/agent/component.c
-+++ b/agent/component.c
-@@ -105,6 +105,13 @@ socket_source_attach (SocketSource *socket_source, GMainContext *context)
- if (socket_source->socket->fileno == NULL)
- return;
-
-+ /* Do not create a GSource for UDP turn socket, because it
-+ * would duplicate the packets already received on the base
-+ * UDP socket.
-+ */
-+ if (socket_source->socket->type == NICE_SOCKET_TYPE_UDP_TURN)
-+ return;
-+
- /* Create a source. */
- source = g_socket_create_source (socket_source->socket->fileno,
- G_IO_IN, NULL);
-@@ -380,7 +387,7 @@ nice_component_restart (NiceComponent *cmp)
- for (i = cmp->remote_candidates; i; i = i->next) {
- NiceCandidate *candidate = i->data;
-
-- /* note: do not remove the local candidate that is
-+ /* note: do not remove the remote candidate that is
- * currently part of the 'selected pair', see ICE
- * 9.1.1.1. "ICE Restarts" (ID-19) */
- if (candidate == cmp->selected_pair.remote) {
-@@ -435,6 +442,8 @@ nice_component_update_selected_pair (NiceComponent *component, const CandidatePa
- component->selected_pair.remote = pair->remote;
- component->selected_pair.priority = pair->priority;
- component->selected_pair.prflx_priority = pair->prflx_priority;
-+
-+ nice_component_add_valid_candidate (component, pair->remote);
- }
-
- /*
-@@ -514,6 +523,11 @@ nice_component_set_selected_remote_candidate (NiceComponent *component,
- component->selected_pair.remote = remote;
- component->selected_pair.priority = priority;
-
-+ /* Get into fallback mode where packets from any source is accepted once
-+ * this has been called. This is the expected behavior of pre-ICE SIP.
-+ */
-+ component->fallback_mode = TRUE;
-+
- return local;
- }
-
-@@ -991,6 +1005,18 @@ nice_component_class_init (NiceComponentClass *klass)
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
- }
-
-+static gboolean
-+dummy_callback (gpointer data)
-+{
-+ return G_SOURCE_CONTINUE;
-+}
-+
-+static void
-+source_set_dummy_callback (GSource *source)
-+{
-+ g_source_set_callback (source, dummy_callback, NULL, NULL);
-+}
-+
- static void
- nice_component_init (NiceComponent *component)
- {
-@@ -1013,7 +1039,7 @@ nice_component_init (NiceComponent *component)
- component->stop_cancellable = g_cancellable_new ();
- component->stop_cancellable_source =
- g_cancellable_source_new (component->stop_cancellable);
-- g_source_set_dummy_callback (component->stop_cancellable_source);
-+ source_set_dummy_callback (component->stop_cancellable_source);
- g_source_attach (component->stop_cancellable_source, component->own_ctx);
- component->ctx = g_main_context_ref (component->own_ctx);
-
-@@ -1107,6 +1133,9 @@ nice_component_finalize (GObject *obj)
- g_warn_if_fail (cmp->remote_candidates == NULL);
- g_warn_if_fail (cmp->incoming_checks == NULL);
-
-+ g_list_free_full (cmp->valid_candidates,
-+ (GDestroyNotify) nice_candidate_free);
-+
- g_clear_object (&cmp->tcp);
- g_clear_object (&cmp->stop_cancellable);
- g_clear_object (&cmp->iostream);
-@@ -1225,7 +1254,7 @@ component_source_prepare (GSource *source, gint *timeout_)
- child_socket_source->source =
- g_socket_create_source (child_socket_source->socket->fileno, G_IO_IN,
- NULL);
-- g_source_set_dummy_callback (child_socket_source->source);
-+ source_set_dummy_callback (child_socket_source->source);
- g_source_add_child_source (source, child_socket_source->source);
- g_source_unref (child_socket_source->source);
- component_source->socket_sources =
-@@ -1370,7 +1399,7 @@ nice_component_input_source_new (NiceAgent *agent, guint stream_id,
- GSource *cancellable_source;
-
- cancellable_source = g_cancellable_source_new (cancellable);
-- g_source_set_dummy_callback (cancellable_source);
-+ source_set_dummy_callback (cancellable_source);
- g_source_add_child_source ((GSource *) component_source,
- cancellable_source);
- g_source_unref (cancellable_source);
-@@ -1421,3 +1450,83 @@ turn_server_unref (TurnServer *turn)
- g_slice_free (TurnServer, turn);
- }
- }
-+
-+void
-+nice_component_add_valid_candidate (NiceComponent *component,
-+ const NiceCandidate *candidate)
-+{
-+ guint count = 0;
-+ GList *item, *last = NULL;
-+
-+ for (item = component->valid_candidates; item; item = item->next) {
-+ NiceCandidate *cand = item->data;
-+
-+ last = item;
-+ count++;
-+ if (nice_candidate_equal_target (cand, candidate))
-+ return;
-+ }
-+
-+ /* New candidate */
-+
-+ if (nice_debug_is_enabled ()) {
-+ char str[INET6_ADDRSTRLEN];
-+ nice_address_to_string (&candidate->addr, str);
-+ nice_debug ("Agent %p : %d:%d Adding valid source"
-+ " candidate: %s:%d trans: %d", component->agent,
-+ candidate->stream_id, candidate->component_id, str,
-+ nice_address_get_port (&candidate->addr), candidate->transport);
-+ }
-+
-+ component->valid_candidates = g_list_prepend (
-+ component->valid_candidates, nice_candidate_copy (candidate));
-+
-+ /* Delete the last one to make sure we don't have a list that is too long,
-+ * the candidates are not freed on ICE restart as this would be more complex,
-+ * we just keep the list not too long.
-+ */
-+ if (count > NICE_COMPONENT_MAX_VALID_CANDIDATES) {
-+ NiceCandidate *cand = last->data;
-+
-+ component->valid_candidates = g_list_delete_link (
-+ component->valid_candidates, last);
-+ nice_candidate_free (cand);
-+ }
-+}
-+
-+gboolean
-+nice_component_verify_remote_candidate (NiceComponent *component,
-+ const NiceAddress *address, NiceSocket *nicesock)
-+{
-+ GList *item;
-+
-+ if (component->fallback_mode)
-+ return TRUE;
-+
-+ for (item = component->valid_candidates; item; item = item->next) {
-+ NiceCandidate *cand = item->data;
-+
-+ if (((nicesock->type == NICE_SOCKET_TYPE_TCP_BSD &&
-+ (cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE ||
-+ cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE ||
-+ cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_SO)) ||
-+ cand->transport == NICE_CANDIDATE_TRANSPORT_UDP) &&
-+ nice_address_equal (address, &cand->addr)) {
-+ /* fast return if it's already the first */
-+ if (item == component->valid_candidates)
-+ return TRUE;
-+
-+ /* Put the current candidate at the top so that in the normal use-case,
-+ * this function becomes O(1).
-+ */
-+ component->valid_candidates = g_list_remove_link (
-+ component->valid_candidates, item);
-+ component->valid_candidates = g_list_concat (item,
-+ component->valid_candidates);
-+
-+ return TRUE;
-+ }
-+ }
-+
-+ return FALSE;
-+}
-diff --git a/agent/component.h b/agent/component.h
-index 6712794..a8a1222 100644
---- a/agent/component.h
-+++ b/agent/component.h
-@@ -159,12 +159,14 @@ struct _NiceComponent {
- NiceComponentState state;
- GSList *local_candidates; /* list of NiceCandidate objs */
- GSList *remote_candidates; /* list of NiceCandidate objs */
-+ GList *valid_candidates; /* list of owned remote NiceCandidates that are part of valid pairs */
- GSList *socket_sources; /* list of SocketSource objs; must only grow monotonically */
- guint socket_sources_age; /* incremented when socket_sources changes */
- GSList *incoming_checks; /* list of IncomingCheck objs */
- GList *turn_servers; /* List of TurnServer objs */
- CandidatePair selected_pair; /* independent from checklists,
- see ICE 11.1. "Sending Media" (ID-19) */
-+ gboolean fallback_mode; /* in this case, accepts packets from all, ignore candidate validation */
- NiceCandidate *restart_candidate; /* for storing active remote candidate during a restart */
- NiceCandidate *turn_candidate; /* for storing active turn candidate if turn servers have been cleared */
- /* I/O handling. The main context must always be non-NULL, and is used for all
-@@ -301,6 +303,14 @@ turn_server_ref (TurnServer *turn);
- void
- turn_server_unref (TurnServer *turn);
-
-+void
-+nice_component_add_valid_candidate (NiceComponent *component,
-+ const NiceCandidate *candidate);
-+
-+gboolean
-+nice_component_verify_remote_candidate (NiceComponent *component,
-+ const NiceAddress *address, NiceSocket *nicesock);
-+
-
- G_END_DECLS
-
-diff --git a/agent/conncheck.c b/agent/conncheck.c
-index dda2f2f..c8a4edf 100644
---- a/agent/conncheck.c
-+++ b/agent/conncheck.c
-@@ -64,8 +64,8 @@
-
- static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream);
- static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream *stream, NiceComponent *component);
--static guint priv_prune_pending_checks (NiceStream *stream, guint component_id);
--static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand, gboolean use_candidate);
-+static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, guint component_id);
-+static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand);
- static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceCandidate *localcand, NiceCandidate *remotecand);
- static size_t priv_create_username (NiceAgent *agent, NiceStream *stream,
- guint component_id, NiceCandidate *remote, NiceCandidate *local,
-@@ -76,6 +76,8 @@ static void conn_check_free_item (gpointer data);
- static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
- NiceAgent *agent, guint stream_id, NiceComponent *component,
- NiceCandidate *local, NiceCandidate *remote, NiceCheckState initial_state);
-+static gboolean priv_update_selected_pair (NiceAgent *agent,
-+ NiceComponent *component, CandidateCheckPair *pair);
-
- static int priv_timer_expired (GTimeVal *timer, GTimeVal *now)
- {
-@@ -84,6 +86,17 @@ static int priv_timer_expired (GTimeVal *timer, GTimeVal *now)
- now->tv_sec >= timer->tv_sec;
- }
-
-+static unsigned int priv_timer_remainder (GTimeVal *timer, GTimeVal *now)
-+{
-+ unsigned int delay;
-+ if (now->tv_sec > timer->tv_sec ||
-+ (now->tv_sec == timer->tv_sec && now->tv_usec > timer->tv_usec))
-+ return 0;
-+ delay = (timer->tv_sec - now->tv_sec) * 1000;
-+ delay += ((signed long)(timer->tv_usec - now->tv_usec)) / 1000;
-+ return delay;
-+}
-+
- static gchar
- priv_state_to_gchar (NiceCheckState state)
- {
-@@ -98,8 +111,6 @@ priv_state_to_gchar (NiceCheckState state)
- return 'F';
- case NICE_CHECK_FROZEN:
- return 'Z';
-- case NICE_CHECK_CANCELLED:
-- return 'C';
- case NICE_CHECK_DISCOVERED:
- return 'D';
- default:
-@@ -107,6 +118,54 @@ priv_state_to_gchar (NiceCheckState state)
- }
- }
-
-+static const gchar *
-+priv_state_to_string (NiceCheckState state)
-+{
-+ switch (state) {
-+ case NICE_CHECK_WAITING:
-+ return "waiting";
-+ case NICE_CHECK_IN_PROGRESS:
-+ return "in progress";
-+ case NICE_CHECK_SUCCEEDED:
-+ return "succeeded";
-+ case NICE_CHECK_FAILED:
-+ return "failed";
-+ case NICE_CHECK_FROZEN:
-+ return "frozen";
-+ case NICE_CHECK_DISCOVERED:
-+ return "discovered";
-+ default:
-+ g_assert_not_reached ();
-+ }
-+}
-+
-+static const gchar *
-+priv_ice_return_to_string (StunUsageIceReturn ice_return)
-+{
-+ switch (ice_return) {
-+ case STUN_USAGE_ICE_RETURN_SUCCESS:
-+ return "success";
-+ case STUN_USAGE_ICE_RETURN_ERROR:
-+ return "error";
-+ case STUN_USAGE_ICE_RETURN_INVALID:
-+ return "invalid";
-+ case STUN_USAGE_ICE_RETURN_ROLE_CONFLICT:
-+ return "role conflict";
-+ case STUN_USAGE_ICE_RETURN_INVALID_REQUEST:
-+ return "invalid request";
-+ case STUN_USAGE_ICE_RETURN_INVALID_METHOD:
-+ return "invalid method";
-+ case STUN_USAGE_ICE_RETURN_MEMORY_ERROR:
-+ return "memory error";
-+ case STUN_USAGE_ICE_RETURN_INVALID_ADDRESS:
-+ return "invalid address";
-+ case STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS:
-+ return "no mapped address";
-+ default:
-+ g_assert_not_reached ();
-+ }
-+}
-+
- static const gchar *
- priv_candidate_type_to_string (NiceCandidateType type)
- {
-@@ -130,12 +189,15 @@ priv_candidate_type_to_string (NiceCandidateType type)
- static void
- priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *detail)
- {
-- GSList *i, *k;
-- guint j;
-+ GSList *i, *k, *l;
-+ guint j, m;
-+ GTimeVal now;
-
- if (!nice_debug_is_verbose ())
- return;
-
-+ g_get_current_time (&now);
-+
- #define PRIORITY_LEN 32
-
- nice_debug ("Agent %p : *** conncheck list DUMP (called from %s%s)",
-@@ -148,26 +210,34 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
- if (pair->component_id == j) {
- gchar local_addr[INET6_ADDRSTRLEN];
- gchar remote_addr[INET6_ADDRSTRLEN];
-- StunTimer *timer = &pair->timer;
-
- nice_address_to_string (&pair->local->addr, local_addr);
- nice_address_to_string (&pair->remote->addr, remote_addr);
-
- nice_debug ("Agent %p : *** sc=%d/%d : pair %p : "
-- "f=%s t=%s:%s timer=%d/%d %d/%dms "
-- "[%s]:%u > [%s]:%u state=%c%s%s%s",
-+ "f=%s t=%s:%s [%s]:%u > [%s]:%u state=%c%s%s%s",
- agent, pair->stream_id, pair->component_id, pair,
- pair->foundation,
- priv_candidate_type_to_string (pair->local->type),
- priv_candidate_type_to_string (pair->remote->type),
-- timer->retransmissions, timer->max_retransmissions,
-- timer->delay - stun_timer_remainder (timer), timer->delay,
- local_addr, nice_address_get_port (&pair->local->addr),
- remote_addr, nice_address_get_port (&pair->remote->addr),
- priv_state_to_gchar (pair->state),
- pair->valid ? "V" : "",
- pair->nominated ? "N" : "",
- g_slist_find (agent->triggered_check_queue, pair) ? "T" : "");
-+
-+ for (l = pair->stun_transactions, m = 0; l; l = l->next, m++) {
-+ StunTransaction *stun = l->data;
-+ nice_debug ("Agent %p : *** sc=%d/%d : pair %p : "
-+ "stun#=%d timer=%d/%d %d/%dms buf=%p %s",
-+ agent, pair->stream_id, pair->component_id, pair, m,
-+ stun->timer.retransmissions, stun->timer.max_retransmissions,
-+ stun->timer.delay - priv_timer_remainder (&stun->next_tick, &now),
-+ stun->timer.delay,
-+ stun->message.buffer,
-+ (m == 0 && pair->retransmit) ? "(R)" : "");
-+ }
- }
- }
- }
-@@ -181,6 +251,8 @@ priv_add_pair_to_triggered_check_queue (NiceAgent *agent, CandidateCheckPair *pa
- {
- g_assert (pair);
-
-+ pair->state = NICE_CHECK_IN_PROGRESS;
-+ nice_debug ("Agent %p : pair %p state IN_PROGRESS", agent, pair);
- if (agent->triggered_check_queue == NULL ||
- g_slist_find (agent->triggered_check_queue, pair) == NULL)
- agent->triggered_check_queue = g_slist_append (agent->triggered_check_queue, pair);
-@@ -209,6 +281,89 @@ priv_get_pair_from_triggered_check_queue (NiceAgent *agent)
- return pair;
- }
-
-+/*
-+ * Check if the conncheck list if Active according to
-+ * ICE spec, 5.7.4 (Computing States)
-+ *
-+ * note: the ICE spec in unclear about that, but the check list should
-+ * be considered active when there is at least a pair in Waiting state
-+ * OR a pair in In-Progress state.
-+ */
-+static gboolean
-+priv_is_checklist_active (NiceStream *stream)
-+{
-+ GSList *i;
-+
-+ for (i = stream->conncheck_list; i ; i = i->next) {
-+ CandidateCheckPair *p = i->data;
-+ if (p->state == NICE_CHECK_WAITING || p->state == NICE_CHECK_IN_PROGRESS)
-+ return TRUE;
-+ }
-+ return FALSE;
-+}
-+
-+/*
-+ * Check if the conncheck list if Frozen according to
-+ * ICE spec, 5.7.4 (Computing States)
-+ */
-+static gboolean
-+priv_is_checklist_frozen (NiceStream *stream)
-+{
-+ GSList *i;
-+
-+ if (stream->conncheck_list == NULL)
-+ return FALSE;
-+
-+ for (i = stream->conncheck_list; i ; i = i->next) {
-+ CandidateCheckPair *p = i->data;
-+ if (p->state != NICE_CHECK_FROZEN)
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+/*
-+ * Check if all components of the stream have
-+ * a valid pair (used for ICE spec, 7.1.3.2.3, point 2.)
-+ */
-+static gboolean
-+priv_all_components_have_valid_pair (NiceStream *stream)
-+{
-+ guint i;
-+ GSList *j;
-+
-+ for (i = 1; i <= stream->n_components; i++) {
-+ for (j = stream->conncheck_list; j ; j = j->next) {
-+ CandidateCheckPair *p = j->data;
-+ if (p->component_id == i && p->valid)
-+ break;
-+ }
-+ if (j == NULL)
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+/*
-+ * Check if the foundation in parameter matches the foundation
-+ * of a valid pair in the conncheck list [of stream] (used for ICE spec,
-+ * 7.1.3.2.3, point 2.)
-+ */
-+static gboolean
-+priv_foundation_matches_a_valid_pair (const gchar *foundation, NiceStream *stream)
-+{
-+ GSList *i;
-+
-+ for (i = stream->conncheck_list; i ; i = i->next) {
-+ CandidateCheckPair *p = i->data;
-+ if (p->valid &&
-+ strncmp (p->foundation, foundation,
-+ NICE_CANDIDATE_PAIR_MAX_FOUNDATION) == 0)
-+ return TRUE;
-+ }
-+ return FALSE;
-+}
-+
- /*
- * Finds the next connectivity check in WAITING state.
- */
-@@ -218,7 +373,6 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
-
- /* note: list is sorted in priority order to first waiting check has
- * the highest priority */
--
- for (i = conn_check_list; i ; i = i->next) {
- CandidateCheckPair *p = i->data;
- if (p->state == NICE_CHECK_WAITING)
-@@ -228,6 +382,57 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
- return NULL;
- }
-
-+/*
-+ * Finds the next connectivity check in FROZEN state.
-+ */
-+static CandidateCheckPair *
-+priv_conn_check_find_next_frozen (GSList *conn_check_list)
-+{
-+ GSList *i;
-+
-+ /* note: list is sorted in priority order to first frozen check has
-+ * the highest priority */
-+ for (i = conn_check_list; i ; i = i->next) {
-+ CandidateCheckPair *p = i->data;
-+ if (p->state == NICE_CHECK_FROZEN)
-+ return p;
-+ }
-+
-+ return NULL;
-+}
-+
-+/*
-+ * Returns the number of active check lists of the agent
-+ */
-+static guint
-+priv_number_of_active_check_lists (NiceAgent *agent)
-+{
-+ guint n = 0;
-+ GSList *i;
-+
-+ for (i = agent->streams; i ; i = i->next)
-+ if (priv_is_checklist_active (i->data))
-+ n++;
-+ return n;
-+}
-+
-+/*
-+ * Returns the first stream of the agent having a Frozen
-+ * connection check list
-+ */
-+static NiceStream *
-+priv_find_first_frozen_check_list (NiceAgent *agent)
-+{
-+ GSList *i;
-+
-+ for (i = agent->streams; i ; i = i->next) {
-+ NiceStream *stream = i->data;
-+ if (priv_is_checklist_frozen (stream))
-+ return stream;
-+ }
-+ return NULL;
-+}
-+
- /*
- * Initiates a new connectivity check for a ICE candidate pair.
- *
-@@ -235,8 +440,6 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
- */
- static gboolean priv_conn_check_initiate (NiceAgent *agent, CandidateCheckPair *pair)
- {
-- g_get_current_time (&pair->next_tick);
-- g_time_val_add (&pair->next_tick, agent->timer_ta * 1000);
- pair->state = NICE_CHECK_IN_PROGRESS;
- nice_debug ("Agent %p : pair %p state IN_PROGRESS", agent, pair);
- conn_check_send (agent, pair);
-@@ -246,58 +449,55 @@ static gboolean priv_conn_check_initiate (NiceAgent *agent, CandidateCheckPair *
- /*
- * Unfreezes the next connectivity check in the list. Follows the
- * algorithm (2.) defined in 5.7.4 (Computing States) of the ICE spec
-- * (ID-19), with some exceptions (see comments in code).
-+ * (RFC5245)
- *
- * See also sect 7.1.2.2.3 (Updating Pair States), and
- * priv_conn_check_unfreeze_related().
- *
- * @return TRUE on success, and FALSE if no frozen candidates were found.
- */
--static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent)
-+static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent, NiceStream *stream)
- {
-- CandidateCheckPair *pair = NULL;
- GSList *i, *j;
--
-- /* XXX: the unfreezing is implemented a bit differently than in the
-- * current ICE spec, but should still be interoperate:
-- * - checks are not grouped by foundation
-- * - one frozen check is unfrozen (lowest component-id, highest
-- * priority)
-- */
-+ GSList *found_list = NULL;
-+ gboolean result = FALSE;
-
- priv_print_conn_check_lists (agent, G_STRFUNC, NULL);
-
-- for (i = agent->streams; i; i = i->next) {
-- NiceStream *stream = i->data;
-- guint64 max_frozen_priority = 0;
-+ for (i = stream->conncheck_list; i ; i = i->next) {
-+ CandidateCheckPair *p1 = i->data;
-+ CandidateCheckPair *pair = NULL;
-+ guint lowest_component_id = stream->n_components + 1;
-+ guint64 highest_priority = 0;
-
-+ if (g_slist_find_custom (found_list, p1->foundation, (GCompareFunc)strcmp))
-+ continue;
-+ found_list = g_slist_prepend (found_list, p1->foundation);
-
- for (j = stream->conncheck_list; j ; j = j->next) {
-- CandidateCheckPair *p = j->data;
--
-- /* XXX: the prio check could be removed as the pairs are sorted
-- * already */
--
-- if (p->state == NICE_CHECK_FROZEN) {
-- if (p->priority > max_frozen_priority) {
-- max_frozen_priority = p->priority;
-- pair = p;
-- }
-+ CandidateCheckPair *p2 = i->data;
-+ if (strncmp (p2->foundation, p1->foundation,
-+ NICE_CANDIDATE_PAIR_MAX_FOUNDATION) == 0) {
-+ if (p2->component_id < lowest_component_id ||
-+ (p2->component_id == lowest_component_id &&
-+ p2->priority > highest_priority)) {
-+ pair = p2;
-+ lowest_component_id = p2->component_id;
-+ highest_priority = p2->priority;
-+ }
- }
- }
-
-- if (pair)
-- break;
-- }
--
-- if (pair) {
-- nice_debug ("Agent %p : Pair %p with s/c-id %u/%u (%s) unfrozen.", agent, pair, pair->stream_id, pair->component_id, pair->foundation);
-- pair->state = NICE_CHECK_WAITING;
-- nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
-- return TRUE;
-+ if (pair) {
-+ nice_debug ("Agent %p : Pair %p with s/c-id %u/%u (%s) unfrozen.",
-+ agent, pair, pair->stream_id, pair->component_id, pair->foundation);
-+ pair->state = NICE_CHECK_WAITING;
-+ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
-+ result = TRUE;
-+ }
- }
--
-- return FALSE;
-+ g_slist_free (found_list);
-+ return result;
- }
-
- /*
-@@ -314,7 +514,6 @@ static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent)
- static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stream, CandidateCheckPair *ok_check)
- {
- GSList *i, *j;
-- guint unfrozen = 0;
-
- g_assert (ok_check);
- g_assert (ok_check->state == NICE_CHECK_SUCCEEDED);
-@@ -334,60 +533,147 @@ static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stre
- nice_debug ("Agent %p : Unfreezing check %p (after successful check %p).", agent, p, ok_check);
- p->state = NICE_CHECK_WAITING;
- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
-- ++unfrozen;
- }
- }
- }
-
- /* step: perform the step (2) of 'Updating Pair States' */
- stream = agent_find_stream (agent, ok_check->stream_id);
-- if (nice_stream_all_components_ready (stream)) {
-- /* step: unfreeze checks from other streams */
-+ if (priv_all_components_have_valid_pair (stream)) {
- for (i = agent->streams; i ; i = i->next) {
-+ /* the agent examines the check list for each other
-+ * media stream in turn
-+ */
- NiceStream *s = i->data;
-- for (j = stream->conncheck_list; j ; j = j->next) {
-- CandidateCheckPair *p = j->data;
--
-- if (p->stream_id == s->id &&
-- p->stream_id != ok_check->stream_id) {
-- if (p->state == NICE_CHECK_FROZEN &&
-- strcmp (p->foundation, ok_check->foundation) == 0) {
-+ if (s->id == ok_check->stream_id)
-+ continue;
-+ if (priv_is_checklist_active (s)) {
-+ /* checklist is Active
-+ */
-+ for (j = s->conncheck_list; j ; j = j->next) {
-+ CandidateCheckPair *p = j->data;
-+ if (p->state == NICE_CHECK_FROZEN &&
-+ priv_foundation_matches_a_valid_pair (p->foundation, stream)) {
- nice_debug ("Agent %p : Unfreezing check %p from stream %u (after successful check %p).", agent, p, s->id, ok_check);
- p->state = NICE_CHECK_WAITING;
- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
-- ++unfrozen;
--
-- }
-- }
-+ }
-+ }
-+ } else if (priv_is_checklist_frozen (s)) {
-+ /* checklist is Frozen
-+ */
-+ gboolean match_found = FALSE;
-+ /* check if there is one pair in the check list whose
-+ * foundation matches a pair in the valid list under
-+ * consideration
-+ */
-+ for (j = s->conncheck_list; j ; j = j->next) {
-+ CandidateCheckPair *p = j->data;
-+ if (priv_foundation_matches_a_valid_pair (p->foundation, stream)) {
-+ match_found = TRUE;
-+ nice_debug ("Agent %p : Unfreezing check %p from stream %u (after successful check %p).", agent, p, s->id, ok_check);
-+ p->state = NICE_CHECK_WAITING;
-+ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
-+ }
-+ }
-+
-+ if (!match_found) {
-+ /* set the pair with the lowest component ID
-+ * and highest priority to Waiting
-+ */
-+ priv_conn_check_unfreeze_next (agent, s);
-+ }
- }
-- /* note: only unfreeze check from one stream at a time */
-- if (unfrozen)
-- break;
- }
- }
-+}
-
-- if (unfrozen == 0)
-- priv_conn_check_unfreeze_next (agent);
-+/*
-+ * Create a new STUN transaction and add it to the list
-+ * of ongoing stun transactions of a pair.
-+ *
-+ * @pair the pair the new stun transaction should be added to.
-+ * @return the created stun transaction.
-+ */
-+static StunTransaction *
-+priv_add_stun_transaction (CandidateCheckPair *pair)
-+{
-+ StunTransaction *stun = g_slice_new0 (StunTransaction);
-+ pair->stun_transactions = g_slist_prepend (pair->stun_transactions, stun);
-+ pair->retransmit = TRUE;
-+ return stun;
- }
-
-+/*
-+ * Forget a STUN transaction.
-+ *
-+ * @data the stun transaction to be forgotten.
-+ * @user_data the component contained the concerned stun agent.
-+ */
- static void
--candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckPair *p)
-+priv_forget_stun_transaction (gpointer data, gpointer user_data)
- {
-+ StunTransaction *stun = data;
-+ NiceComponent *component = user_data;
- StunTransactionId id;
-+
-+ if (stun->message.buffer != NULL) {
-+ stun_message_id (&stun->message, id);
-+ stun_agent_forget_transaction (&component->stun_agent, id);
-+ }
-+}
-+
-+static void
-+priv_free_stun_transaction (gpointer data)
-+{
-+ g_slice_free (StunTransaction, data);
-+}
-+
-+/*
-+ * Remove a STUN transaction from a pair, and forget it
-+ * from the related component stun agent.
-+ *
-+ * @pair the pair the stun transaction should be removed from.
-+ * @stun the stun transaction to be removed.
-+ * @component the component containing the stun agent used to
-+ * forget the stun transaction.
-+ */
-+static void
-+priv_remove_stun_transaction (CandidateCheckPair *pair,
-+ StunTransaction *stun, NiceComponent *component)
-+{
-+ priv_forget_stun_transaction (stun, component);
-+ pair->stun_transactions = g_slist_remove (pair->stun_transactions, stun);
-+ priv_free_stun_transaction (stun);
-+}
-+
-+/*
-+ * Remove all STUN transactions from a pair, and forget them
-+ * from the related component stun agent.
-+ *
-+ * @pair the pair the stun list should be cleared.
-+ * @component the component containing the stun agent used to
-+ * forget the stun transactions.
-+ */
-+static void
-+priv_free_all_stun_transactions (CandidateCheckPair *pair,
-+ NiceComponent *component)
-+{
-+ if (component)
-+ g_slist_foreach (pair->stun_transactions, priv_forget_stun_transaction, component);
-+ g_slist_free_full (pair->stun_transactions, priv_free_stun_transaction);
-+ pair->stun_transactions = NULL;
-+}
-+
-+static void
-+candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckPair *p)
-+{
- NiceComponent *component;
-
- component = nice_stream_find_component_by_id (stream, p->component_id);
--
- p->state = NICE_CHECK_FAILED;
- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
--
-- if (p->stun_message.buffer != NULL) {
-- stun_message_id (&p->stun_message, id);
-- stun_agent_forget_transaction (&component->stun_agent, id);
-- }
--
-- p->stun_message.buffer = NULL;
-- p->stun_message.buffer_len = 0;
-+ priv_free_all_stun_transactions (p, component);
- }
-
- /*
-@@ -398,78 +684,183 @@ candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckP
- *
- * @return will return FALSE when no more pending timers.
- */
--static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent, GTimeVal *now, gboolean *stun_transmitted)
-+static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent)
- {
- gboolean keep_timer_going = FALSE;
-- guint s_inprogress = 0, s_succeeded = 0, s_discovered = 0,
-- s_nominated = 0, s_waiting_for_nomination = 0, s_valid = 0;
-- guint frozen = 0, waiting = 0;
-- GSList *i, *k;
-+ GSList *i, *j;
-+ CandidateCheckPair *pair;
-+ unsigned int timeout;
-+ GTimeVal now;
-
-+ g_get_current_time (&now);
-+
-+ /* step: process ongoing STUN transactions */
- for (i = stream->conncheck_list; i ; i = i->next) {
- CandidateCheckPair *p = i->data;
-+ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
-+ NiceComponent *component;
-+ StunTransaction *stun;
-
-- if (p->state == NICE_CHECK_IN_PROGRESS) {
-- if (p->stun_message.buffer == NULL) {
-- nice_debug ("Agent %p : STUN connectivity check was cancelled, marking as done.", agent);
-- p->state = NICE_CHECK_FAILED;
-- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
-- } else if (priv_timer_expired (&p->next_tick, now)) {
-- switch (stun_timer_refresh (&p->timer)) {
-- case STUN_USAGE_TIMER_RETURN_TIMEOUT:
-- {
-- /* case: error, abort processing */
-- gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
-- nice_address_to_string (&p->local->addr, tmpbuf1);
-- nice_address_to_string (&p->remote->addr, tmpbuf2);
-- nice_debug ("Agent %p : Retransmissions failed, giving up on connectivity check %p", agent, p);
-- nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
-- tmpbuf1, nice_address_get_port (&p->local->addr),
-- tmpbuf2, nice_address_get_port (&p->remote->addr));
-- candidate_check_pair_fail (stream, agent, p);
-- priv_print_conn_check_lists (agent, G_STRFUNC,
-- ", retransmission failed");
--
-- break;
-- }
-- case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
-- {
-- /* case: not ready, so schedule a new timeout */
-- unsigned int timeout = stun_timer_remainder (&p->timer);
-- nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
-- "(timeout %dms, delay=%dms, retrans=%d).",
-- agent, p, timeout, p->timer.delay, p->timer.retransmissions);
-+ if (p->stun_transactions == NULL)
-+ continue;
-
-- agent_socket_send (p->sockptr, &p->remote->addr,
-- stun_message_length (&p->stun_message),
-- (gchar *)p->stun_buffer);
-+ if (!agent_find_component (agent, p->stream_id, p->component_id,
-+ NULL, &component))
-+ continue;
-
-+ /* The first stun transaction of the list may eventually be
-+ * retransmitted, other stun transactions just have their
-+ * timer updated.
-+ */
-
-- /* note: convert from milli to microseconds for g_time_val_add() */
-- p->next_tick = *now;
-- g_time_val_add (&p->next_tick, timeout * 1000);
-+ j = p->stun_transactions->next;
-
-- *stun_transmitted = TRUE;
-- return TRUE;
-- }
-- case STUN_USAGE_TIMER_RETURN_SUCCESS:
-- {
-- unsigned int timeout = stun_timer_remainder (&p->timer);
-+ /* process all stun transactions except the first one */
-+ while (j) {
-+ StunTransaction *s = j->data;
-+ GSList *next = j->next;
-
-- /* note: convert from milli to microseconds for g_time_val_add() */
-- p->next_tick = *now;
-- g_time_val_add (&p->next_tick, timeout * 1000);
--
-- keep_timer_going = TRUE;
-- break;
-- }
-+ if (priv_timer_expired (&s->next_tick, &now))
-+ switch (stun_timer_refresh (&s->timer)) {
-+ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
-+ priv_remove_stun_transaction (p, s, component);
-+ break;
-+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
-+ timeout = stun_timer_remainder (&s->timer);
-+ s->next_tick = now;
-+ g_time_val_add (&s->next_tick, timeout * 1000);
-+ break;
- default:
-- /* Nothing to do. */
- break;
-- }
- }
-+ j = next;
- }
-
-+ if (p->state != NICE_CHECK_IN_PROGRESS)
-+ continue;
-+
-+ /* process the first stun transaction of the list */
-+ stun = p->stun_transactions->data;
-+ if (!priv_timer_expired (&stun->next_tick, &now))
-+ continue;
-+
-+ switch (stun_timer_refresh (&stun->timer)) {
-+ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
-+timer_return_timeout:
-+ /* case: error, abort processing */
-+ nice_address_to_string (&p->local->addr, tmpbuf1);
-+ nice_address_to_string (&p->remote->addr, tmpbuf2);
-+ nice_debug ("Agent %p : Retransmissions failed, giving up on "
-+ "connectivity check %p", agent, p);
-+ nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
-+ tmpbuf1, nice_address_get_port (&p->local->addr),
-+ tmpbuf2, nice_address_get_port (&p->remote->addr));
-+ candidate_check_pair_fail (stream, agent, p);
-+ priv_print_conn_check_lists (agent, G_STRFUNC,
-+ ", retransmission failed");
-+
-+ /* perform a check if a transition state from connected to
-+ * ready can be performed. This may happen here, when the last
-+ * in-progress pair has expired its retransmission count
-+ * in priv_conn_check_tick_stream(), which is a condition to
-+ * make the transition connected to ready.
-+ */
-+ priv_update_check_list_state_for_ready (agent, stream, component);
-+ break;
-+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
-+ /* case: retransmission stopped, due to the nomination of
-+ * a pair with a higher priority than this in-progress pair,
-+ * ICE spec, sect 8.1.2 "Updating States", item 2.2
-+ */
-+ if (!p->retransmit)
-+ goto timer_return_timeout;
-+
-+ /* case: not ready, so schedule a new timeout */
-+ timeout = stun_timer_remainder (&stun->timer);
-+
-+ nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
-+ "(timer=%d/%d %d/%dms).",
-+ agent, p,
-+ stun->timer.retransmissions, stun->timer.max_retransmissions,
-+ stun->timer.delay - timeout, stun->timer.delay);
-+
-+ agent_socket_send (p->sockptr, &p->remote->addr,
-+ stun_message_length (&stun->message),
-+ (gchar *)stun->buffer);
-+
-+ /* note: convert from milli to microseconds for g_time_val_add() */
-+ stun->next_tick = now;
-+ g_time_val_add (&stun->next_tick, timeout * 1000);
-+
-+ return TRUE;
-+ case STUN_USAGE_TIMER_RETURN_SUCCESS:
-+ timeout = stun_timer_remainder (&stun->timer);
-+
-+ /* note: convert from milli to microseconds for g_time_val_add() */
-+ stun->next_tick = now;
-+ g_time_val_add (&stun->next_tick, timeout * 1000);
-+
-+ keep_timer_going = TRUE;
-+ break;
-+ default:
-+ /* Nothing to do. */
-+ break;
-+ }
-+ }
-+
-+ /* step: perform an ordinary check, ICE spec, 5.8 "Scheduling Checks"
-+ * note: This code is executed when the triggered checks list is
-+ * empty, and when no STUN message has been sent (pacing constraint)
-+ */
-+ pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
-+ if (pair) {
-+ priv_print_conn_check_lists (agent, G_STRFUNC,
-+ ", got a pair in Waiting state");
-+ priv_conn_check_initiate (agent, pair);
-+ return TRUE;
-+ }
-+
-+ /* note: this is unclear in the ICE spec, but a check list in Frozen
-+ * state (where all pairs are in Frozen state) is not supposed to
-+ * change its state by an ordinary check, but only by the success of
-+ * checks in other check lists, in priv_conn_check_unfreeze_related().
-+ * The underlying idea is to concentrate the checks on a single check
-+ * list initially.
-+ */
-+ if (priv_is_checklist_frozen (stream))
-+ return keep_timer_going;
-+
-+ /* step: ordinary check continued, if there's no pair in the waiting
-+ * state, pick a pair in the frozen state
-+ */
-+ pair = priv_conn_check_find_next_frozen (stream->conncheck_list);
-+ if (pair) {
-+ priv_print_conn_check_lists (agent, G_STRFUNC,
-+ ", got a pair in Frozen state");
-+ pair->state = NICE_CHECK_WAITING;
-+ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
-+ priv_conn_check_initiate (agent, pair);
-+ return TRUE;
-+ }
-+ return keep_timer_going;
-+}
-+
-+static gboolean
-+priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
-+{
-+ gboolean keep_timer_going = FALSE;
-+ guint s_inprogress = 0;
-+ guint s_succeeded = 0;
-+ guint s_discovered = 0;
-+ guint s_nominated = 0;
-+ guint s_waiting_for_nomination = 0;
-+ guint s_valid = 0;
-+ guint frozen = 0;
-+ guint waiting = 0;
-+ GSList *i, *k;
-+
-+ for (i = stream->conncheck_list; i ; i = i->next) {
-+ CandidateCheckPair *p = i->data;
- if (p->state == NICE_CHECK_FROZEN)
- ++frozen;
- else if (p->state == NICE_CHECK_IN_PROGRESS)
-@@ -495,12 +886,102 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
- if (s_inprogress)
- keep_timer_going = TRUE;
-
-- /* note: if some components have established connectivity,
-- * but yet no nominated pair, keep timer going */
- if (s_nominated < stream->n_components &&
- s_waiting_for_nomination) {
-- keep_timer_going = TRUE;
-- if (agent->controlling_mode) {
-+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
-+ if (agent->nomination_mode == NICE_NOMINATION_MODE_REGULAR &&
-+ agent->controlling_mode) {
-+#define NICE_MIN_NUMBER_OF_VALID_PAIRS 2
-+ /* ICE 8.1.1.1 Regular nomination
-+ * we choose to nominate the valid pair of a component if
-+ * - there is no pair left frozen, waiting or in-progress, or
-+ * - if there are at least two valid pairs, or
-+ * - if there is at least one valid pair of type HOST-HOST
-+ *
-+ * This is the "stopping criterion" described in 8.1.1.1, and is
-+ * a "local optimization" between accumulating more valid pairs,
-+ * and limiting the time spent waiting for in-progress connections
-+ * checks until they finally fail.
-+ */
-+ GSList *component_item;
-+
-+ for (component_item = stream->components; component_item;
-+ component_item = component_item->next) {
-+ NiceComponent *component = component_item->data;
-+ gboolean already_done = FALSE;
-+ gboolean stopping_criterion = FALSE;
-+ guint p_valid = 0;
-+ guint p_frozen = 0;
-+ guint p_waiting = 0;
-+ guint p_inprogress = 0;
-+ guint p_host_host_valid = 0;
-+
-+ /* verify that the choice of the pair to be nominated
-+ * has not already been done
-+ */
-+ for (k = stream->conncheck_list; k ; k = k->next) {
-+ CandidateCheckPair *p = k->data;
-+ if (p->component_id == component->id) {
-+ if (p->use_candidate_on_next_check)
-+ already_done = TRUE;
-+ if (p->state == NICE_CHECK_FROZEN)
-+ p_frozen++;
-+ else if (p->state == NICE_CHECK_WAITING)
-+ p_waiting++;
-+ else if (p->state == NICE_CHECK_IN_PROGRESS)
-+ p_inprogress++;
-+ if (p->valid)
-+ p_valid++;
-+ if (p->valid &&
-+ p->local->type == NICE_CANDIDATE_TYPE_HOST &&
-+ p->remote->type == NICE_CANDIDATE_TYPE_HOST)
-+ p_host_host_valid++;
-+ }
-+ }
-+
-+ if (already_done)
-+ continue;
-+
-+ stopping_criterion =
-+ (p_host_host_valid > 0 ||
-+ p_valid >= NICE_MIN_NUMBER_OF_VALID_PAIRS ||
-+ (p_waiting == 0 && p_inprogress == 0 && p_frozen == 0));
-+
-+ if (!stopping_criterion)
-+ continue;
-+
-+ /* when the stopping criterion is satisfied, we choose
-+ * a pair to be nominated in the list of valid pairs,
-+ * and add it to the triggered checks list
-+ */
-+ for (k = stream->conncheck_list; k ; k = k->next) {
-+ CandidateCheckPair *p = k->data;
-+ /* note: highest priority item selected (list always sorted) */
-+ if (p->component_id == component->id &&
-+ !p->nominated &&
-+ !p->use_candidate_on_next_check &&
-+ p->valid) {
-+ /* According a ICE spec, sect 8.1.1.1. "Regular
-+ * Nomination", we enqueue the check that produced this
-+ * valid pair. When this pair has been discovered, we want
-+ * to test its parent pair instead.
-+ */
-+ if (p->succeeded_pair != NULL) {
-+ g_assert (p->state == NICE_CHECK_DISCOVERED);
-+ p = p->succeeded_pair;
-+ }
-+ g_assert (p->state == NICE_CHECK_SUCCEEDED);
-+ nice_debug ("Agent %p : restarting check %p with "
-+ "USE-CANDIDATE attrib (regular nomination)", agent, p);
-+ p->use_candidate_on_next_check = TRUE;
-+ priv_add_pair_to_triggered_check_queue (agent, p);
-+ keep_timer_going = TRUE;
-+ break; /* move to the next component */
-+ }
-+ }
-+ }
-+ }
-+ } else if (agent->controlling_mode) {
- GSList *component_item;
-
- for (component_item = stream->components; component_item;
-@@ -515,7 +996,9 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
- p->state == NICE_CHECK_DISCOVERED)) {
- nice_debug ("Agent %p : restarting check %p as the nominated pair.", agent, p);
- p->nominated = TRUE;
-+ priv_update_selected_pair (agent, component, p);
- priv_add_pair_to_triggered_check_queue (agent, p);
-+ keep_timer_going = TRUE;
- break; /* move to the next component */
- }
- }
-@@ -542,6 +1025,7 @@ conn_check_stop (NiceAgent *agent)
- g_source_destroy (agent->conncheck_timer_source);
- g_source_unref (agent->conncheck_timer_source);
- agent->conncheck_timer_source = NULL;
-+ agent->conncheck_timer_grace_period = 0;
- }
-
-
-@@ -557,75 +1041,83 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
- {
- CandidateCheckPair *pair = NULL;
- gboolean keep_timer_going = FALSE;
-- gboolean res;
-- /* note: we try to only generate a single stun transaction per timer
-- * callback, to respect some pacing of STUN transaction, as per
-- * appendix B.1 of ICE spec.
-- */
-- gboolean stun_transmitted = FALSE;
- GSList *i, *j;
-- GTimeVal now;
-
-- /* step: process ongoing STUN transactions */
-- g_get_current_time (&now);
--
-- for (j = agent->streams; j; j = j->next) {
-- NiceStream *stream = j->data;
-- res = priv_conn_check_tick_stream (stream, agent, &now, &stun_transmitted);
-- if (res)
-- keep_timer_going = res;
-- if (stun_transmitted)
-- return TRUE;
-+ /* configure the initial state of the check lists of the agent
-+ * as described in ICE spec, 5.7.4
-+ *
-+ * if all pairs in all check lists are in frozen state, then
-+ * we are in the initial state (5.7.4, point 1.)
-+ */
-+ if (priv_number_of_active_check_lists (agent) == 0) {
-+ /* set some pairs of the first stream in the waiting state
-+ * ICE spec, 5.7.4, point 2.
-+ *
-+ * note: we adapt the ICE spec here, by selecting the first
-+ * frozen check list, which is not necessarily the check
-+ * list of the first stream (the first stream may be completed)
-+ */
-+ NiceStream *stream = priv_find_first_frozen_check_list (agent);
-+ if (stream)
-+ priv_conn_check_unfreeze_next (agent, stream);
- }
-
-- /* step: first initiate a conncheck with a pair from the triggered list */
-+ /* step: perform a test from the triggered checks list,
-+ * ICE spec, 5.8 "Scheduling Checks"
-+ */
- pair = priv_get_pair_from_triggered_check_queue (agent);
-
- if (pair) {
- priv_print_conn_check_lists (agent, G_STRFUNC,
- ", got a pair from triggered check list");
-- priv_conn_check_initiate (agent, pair);
-+ conn_check_send (agent, pair);
- return TRUE;
- }
-
-- /* step: when the triggered list is empty,
-- * find the highest priority waiting check and send it */
-+ /* step: process ongoing STUN transactions and
-+ * perform an ordinary check, ICE spec, 5.8, "Scheduling Checks"
-+ */
- for (i = agent->streams; i ; i = i->next) {
- NiceStream *stream = i->data;
--
-- pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
-- if (pair)
-- break;
-+ if (priv_conn_check_tick_stream (stream, agent))
-+ keep_timer_going = TRUE;
-+ if (priv_conn_check_tick_stream_nominate (stream, agent))
-+ keep_timer_going = TRUE;
- }
-
-- if (pair) {
-- priv_conn_check_initiate (agent, pair);
-- return TRUE;
-+ /* step: if no work left and a conncheck list of a stream is still
-+ * frozen, set the pairs to waiting, according to ICE SPEC, sect
-+ * 7.1.3.3. "Check List and Timer State Updates"
-+ */
-+ if (!keep_timer_going) {
-+ for (i = agent->streams; i ; i = i->next) {
-+ NiceStream *stream = i->data;
-+ if (priv_is_checklist_frozen (stream)) {
-+ nice_debug ("Agent %p : stream %d conncheck list is still "
-+ "frozen, while other lists are completed. Unfreeze it.",
-+ agent, stream->id);
-+ keep_timer_going = priv_conn_check_unfreeze_next (agent, stream);
-+ }
-+ }
- }
-
-- /* step: when there's no pair in the Waiting state,
-- * unfreeze a new pair and check it
-+ /* note: we provide a grace period before declaring a component as
-+ * failed. Components marked connected, and then ready follow another
-+ * code path, and are not concerned by this grace period.
- */
-- res = priv_conn_check_unfreeze_next (agent);
--
-- for (i = agent->streams; i ; i = i->next) {
-- NiceStream *stream = i->data;
-+ if (!keep_timer_going && agent->conncheck_timer_grace_period == 0)
-+ nice_debug ("Agent %p : waiting %d msecs before checking "
-+ "for failed components.", agent, NICE_AGENT_MAX_TIMER_GRACE_PERIOD);
-
-- pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
-- if (pair)
-- break;
-- }
--
-- if (pair) {
-- priv_print_conn_check_lists (agent, G_STRFUNC,
-- ", got a pair in Waiting state");
-- priv_conn_check_initiate (agent, pair);
-- return TRUE;
-- }
-+ if (keep_timer_going)
-+ agent->conncheck_timer_grace_period = 0;
-+ else
-+ agent->conncheck_timer_grace_period += agent->timer_ta;
-
- /* step: stop timer if no work left */
-- if (keep_timer_going != TRUE) {
-- nice_debug ("Agent %p : %s: stopping conncheck timer", agent, G_STRFUNC);
-+ if (!keep_timer_going &&
-+ agent->conncheck_timer_grace_period >= NICE_AGENT_MAX_TIMER_GRACE_PERIOD) {
-+ nice_debug ("Agent %p : checking for failed components now.", agent);
- for (i = agent->streams; i; i = i->next) {
- NiceStream *stream = i->data;
- priv_update_check_list_failed_components (agent, stream);
-@@ -635,6 +1127,7 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
- }
- }
-
-+ nice_debug ("Agent %p : %s: stopping conncheck timer", agent, G_STRFUNC);
- priv_print_conn_check_lists (agent, G_STRFUNC,
- ", conncheck timer stopped");
-
-@@ -645,9 +1138,10 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
-
- /* XXX: what to signal, is all processing now really done? */
- nice_debug ("Agent %p : changing conncheck state to COMPLETED.", agent);
-+ return FALSE;
- }
-
-- return keep_timer_going;
-+ return TRUE;
- }
-
- static gboolean priv_conn_check_tick (gpointer pointer)
-@@ -888,8 +1382,9 @@ static gboolean priv_conn_keepalive_tick_unlocked (NiceAgent *agent)
- agent, buf_len, p->keepalive.stun_message.buffer);
-
- if (buf_len > 0) {
-- stun_timer_start (&p->keepalive.timer, STUN_TIMER_DEFAULT_TIMEOUT,
-- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
-+ stun_timer_start (&p->keepalive.timer,
-+ agent->stun_initial_timeout,
-+ agent->stun_max_retransmissions);
-
- agent->media_after_tick = FALSE;
-
-@@ -1116,8 +1611,9 @@ static void priv_turn_allocate_refresh_tick_unlocked (CandidateRefresh *cand)
- }
-
- if (buffer_len > 0) {
-- stun_timer_start (&cand->timer, STUN_TIMER_DEFAULT_TIMEOUT,
-- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
-+ stun_timer_start (&cand->timer,
-+ cand->agent->stun_initial_timeout,
-+ cand->agent->stun_max_retransmissions);
-
- /* send the refresh */
- agent_socket_send (cand->nicesock, &cand->server,
-@@ -1213,154 +1709,136 @@ static void priv_preprocess_conn_check_pending_data (NiceAgent *agent, NiceStrea
- if (nice_address_equal (&icheck->from, &pair->remote->addr) &&
- icheck->local_socket == pair->sockptr) {
- nice_debug ("Agent %p : Updating check %p with stored early-icheck %p, %p/%u/%u (agent/stream/component).", agent, pair, icheck, agent, stream->id, component->id);
-+ priv_schedule_triggered_check (agent, stream, component,
-+ icheck->local_socket, pair->remote);
- if (icheck->use_candidate)
- priv_mark_pair_nominated (agent, stream, component, pair->local, pair->remote);
-- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, pair->remote, icheck->use_candidate);
- }
- }
- }
-
-
--static GSList *prune_cancelled_conn_check (GSList *conncheck_list)
--{
-- GSList *item = conncheck_list;
--
-- while (item) {
-- CandidateCheckPair *pair = item->data;
-- GSList *next = item->next;
--
-- if (pair->state == NICE_CHECK_CANCELLED) {
-- conn_check_free_item (pair);
-- conncheck_list = g_slist_delete_link (conncheck_list, item);
-- }
--
-- item = next;
-- }
--
-- return conncheck_list;
--}
--
--
- /*
- * Handle any processing steps for connectivity checks after
-- * remote candidates have been set. This function handles
-+ * remote credentials have been set. This function handles
- * the special case where answerer has sent us connectivity
-- * checks before the answer (containing candidate information),
-+ * checks before the answer (containing credentials information),
- * reaches us. The special case is documented in sect 7.2
- * if ICE spec (ID-19).
- */
--void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, NiceComponent *component)
-+void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
- {
-- GSList *j, *k, *l, *m, *n;
-+ GSList *j, *k, *l, *m, *n, *o;
-
- for (j = stream->conncheck_list; j ; j = j->next) {
- CandidateCheckPair *pair = j->data;
-- if (pair->component_id == component->id) {
-- gboolean match = FALSE;
--
-- /* performn delayed processing of spec steps section 7.2.1.4,
-- and section 7.2.1.5 */
-- priv_preprocess_conn_check_pending_data (agent, stream, component, pair);
--
-- for (k = component->incoming_checks; k; k = k->next) {
-- IncomingCheck *icheck = k->data;
-- /* sect 7.2.1.3., "Learning Peer Reflexive Candidates", has to
-- * be handled separately */
-- for (l = component->remote_candidates; l; l = l->next) {
-- NiceCandidate *cand = l->data;
-- if (nice_address_equal (&icheck->from, &cand->addr)) {
-- match = TRUE;
-- break;
-- }
-- }
-- if (match != TRUE) {
-- /* note: we have gotten an incoming connectivity check from
-- * an address that is not a known remote candidate */
--
-- NiceCandidate *local_candidate = NULL;
-- NiceCandidate *remote_candidate = NULL;
--
-- if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
-- agent->compatibility == NICE_COMPATIBILITY_MSN ||
-- agent->compatibility == NICE_COMPATIBILITY_OC2007) {
-- /* We need to find which local candidate was used */
-- uint8_t uname[NICE_STREAM_MAX_UNAME];
-- guint uname_len;
--
-- nice_debug ("Agent %p: We have a peer-reflexive candidate in a "
-- "stored pending check", agent);
--
-- for (m = component->remote_candidates;
-- m != NULL && remote_candidate == NULL; m = m->next) {
-- for (n = component->local_candidates; n; n = n->next) {
-- NiceCandidate *rcand = m->data;
-- NiceCandidate *lcand = n->data;
--
-- uname_len = priv_create_username (agent, stream,
-- component->id, rcand, lcand,
-- uname, sizeof (uname), TRUE);
--
-- stun_debug ("pending check, comparing usernames of len %d and %d, equal=%d",
-- icheck->username_len, uname_len,
-- icheck->username && uname_len == icheck->username_len &&
-- memcmp (uname, icheck->username, icheck->username_len) == 0);
-- stun_debug_bytes (" first username: ",
-- icheck->username,
-- icheck->username? icheck->username_len : 0);
-- stun_debug_bytes (" second username: ", uname, uname_len);
--
-- if (icheck->username &&
-- uname_len == icheck->username_len &&
-- memcmp (uname, icheck->username, icheck->username_len) == 0) {
-- local_candidate = lcand;
-- remote_candidate = rcand;
-- break;
-- }
-- }
-- }
-- } else {
-- for (l = component->local_candidates; l; l = l->next) {
-- NiceCandidate *cand = l->data;
-- if (nice_address_equal (&cand->addr, &icheck->local_socket->addr)) {
-- local_candidate = cand;
-+ NiceComponent *component =
-+ nice_stream_find_component_by_id (stream, pair->component_id);
-+ gboolean match = FALSE;
-+
-+ /* performn delayed processing of spec steps section 7.2.1.4,
-+ and section 7.2.1.5 */
-+ priv_preprocess_conn_check_pending_data (agent, stream, component, pair);
-+
-+ for (k = component->incoming_checks; k; k = k->next) {
-+ IncomingCheck *icheck = k->data;
-+ /* sect 7.2.1.3., "Learning Peer Reflexive Candidates", has to
-+ * be handled separately */
-+ for (l = component->remote_candidates; l; l = l->next) {
-+ NiceCandidate *cand = l->data;
-+ if (nice_address_equal (&icheck->from, &cand->addr)) {
-+ match = TRUE;
-+ break;
-+ }
-+ }
-+ if (match != TRUE) {
-+ /* note: we have gotten an incoming connectivity check from
-+ * an address that is not a known remote candidate */
-+
-+ NiceCandidate *local_candidate = NULL;
-+ NiceCandidate *remote_candidate = NULL;
-+
-+ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
-+ agent->compatibility == NICE_COMPATIBILITY_MSN ||
-+ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
-+ /* We need to find which local candidate was used */
-+ uint8_t uname[NICE_STREAM_MAX_UNAME];
-+ guint uname_len;
-+
-+ nice_debug ("Agent %p: We have a peer-reflexive candidate in a "
-+ "stored pending check", agent);
-+
-+ for (m = component->remote_candidates;
-+ m != NULL && remote_candidate == NULL; m = m->next) {
-+ for (n = component->local_candidates; n; n = n->next) {
-+ NiceCandidate *rcand = m->data;
-+ NiceCandidate *lcand = n->data;
-+
-+ uname_len = priv_create_username (agent, stream,
-+ component->id, rcand, lcand,
-+ uname, sizeof (uname), TRUE);
-+
-+ stun_debug ("pending check, comparing usernames of len %d and %d, equal=%d",
-+ icheck->username_len, uname_len,
-+ icheck->username && uname_len == icheck->username_len &&
-+ memcmp (uname, icheck->username, icheck->username_len) == 0);
-+ stun_debug_bytes (" first username: ",
-+ icheck->username,
-+ icheck->username? icheck->username_len : 0);
-+ stun_debug_bytes (" second username: ", uname, uname_len);
-+
-+ if (icheck->username &&
-+ uname_len == icheck->username_len &&
-+ memcmp (uname, icheck->username, icheck->username_len) == 0) {
-+ local_candidate = lcand;
-+ remote_candidate = rcand;
- break;
- }
- }
- }
--
-- if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE &&
-- local_candidate == NULL) {
-- /* if we couldn't match the username, then the matching remote
-- * candidate hasn't been received yet.. we must wait */
-- nice_debug ("Agent %p : Username check failed. pending check has "
-- "to wait to be processed", agent);
-- } else {
-- NiceCandidate *candidate;
--
-- nice_debug ("Agent %p : Discovered peer reflexive from early i-check",
-- agent);
-- candidate =
-- discovery_learn_remote_peer_reflexive_candidate (agent,
-- stream,
-- component,
-- icheck->priority,
-- &icheck->from,
-- icheck->local_socket,
-- local_candidate, remote_candidate);
-- if (candidate) {
-- if (local_candidate &&
-- local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE)
-- priv_conn_check_add_for_candidate_pair_matched (agent,
-- stream->id, component, local_candidate, candidate, NICE_CHECK_DISCOVERED);
-- else
-- conn_check_add_for_candidate (agent, stream->id, component, candidate);
--
-- if (icheck->use_candidate)
-- priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
-- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, candidate, icheck->use_candidate);
-+ } else {
-+ for (l = component->local_candidates; l; l = l->next) {
-+ NiceCandidate *cand = l->data;
-+ if (nice_address_equal (&cand->addr, &icheck->local_socket->addr)) {
-+ local_candidate = cand;
-+ break;
- }
- }
- }
-+
-+ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE &&
-+ local_candidate == NULL) {
-+ /* if we couldn't match the username, then the matching remote
-+ * candidate hasn't been received yet.. we must wait */
-+ nice_debug ("Agent %p : Username check failed. pending check has "
-+ "to wait to be processed", agent);
-+ } else {
-+ NiceCandidate *candidate;
-+
-+ nice_debug ("Agent %p : Discovered peer reflexive from early i-check",
-+ agent);
-+ candidate =
-+ discovery_learn_remote_peer_reflexive_candidate (agent,
-+ stream,
-+ component,
-+ icheck->priority,
-+ &icheck->from,
-+ icheck->local_socket,
-+ local_candidate, remote_candidate);
-+ if (candidate) {
-+ if (local_candidate &&
-+ local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE)
-+ priv_conn_check_add_for_candidate_pair_matched (agent,
-+ stream->id, component, local_candidate, candidate, NICE_CHECK_DISCOVERED);
-+ else
-+ conn_check_add_for_candidate (agent, stream->id, component, candidate);
-+
-+ priv_schedule_triggered_check (agent, stream, component,
-+ icheck->local_socket, candidate);
-+ if (icheck->use_candidate)
-+ priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
-+ }
-+ }
- }
- }
- }
-@@ -1368,12 +1846,12 @@ void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, Nice
- /* Once we process the pending checks, we should free them to avoid
- * reprocessing them again if a dribble-mode set_remote_candidates
- * is called */
-- g_slist_free_full (component->incoming_checks,
-- (GDestroyNotify) incoming_check_free);
-- component->incoming_checks = NULL;
--
-- stream->conncheck_list =
-- prune_cancelled_conn_check (stream->conncheck_list);
-+ for (o = stream->components; o; o = o->next) {
-+ NiceComponent *component = o->data;
-+ g_slist_free_full (component->incoming_checks,
-+ (GDestroyNotify) incoming_check_free);
-+ component->incoming_checks = NULL;
-+ }
- }
-
- /*
-@@ -1381,7 +1859,7 @@ void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, Nice
- * in ICE spec section 5.7.3 (ID-19). See also
- * conn_check_add_for_candidate().
- */
--static void priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper_limit)
-+static GSList *priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper_limit)
- {
- guint valid = 0;
- guint cancelled = 0;
-@@ -1389,22 +1867,22 @@ static void priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper
-
- while (item) {
- CandidateCheckPair *pair = item->data;
-+ GSList *next = item->next;
-
-- if (pair->state != NICE_CHECK_CANCELLED) {
-- valid++;
-- if (valid > upper_limit) {
-- pair->state = NICE_CHECK_CANCELLED;
-+ valid++;
-+ if (valid > upper_limit) {
-+ conn_check_free_item (pair);
-+ conncheck_list = g_slist_delete_link (conncheck_list, item);
- cancelled++;
-- }
- }
--
-- item = item->next;
-+ item = next;
- }
-
- if (cancelled > 0)
- nice_debug ("Agent : Pruned %d candidates. Conncheck list has %d elements"
- " left. Maximum connchecks allowed : %d", cancelled, valid,
- upper_limit);
-+ return conncheck_list;
- }
-
- /*
-@@ -1444,15 +1922,18 @@ static gboolean priv_update_selected_pair (NiceAgent *agent, NiceComponent *comp
- * Updates the check list state.
- *
- * Implements parts of the algorithm described in
-- * ICE sect 8.1.2. "Updating States" (ID-19): if for any
-+ * ICE sect 8.1.2. "Updating States" (RFC 5245): if for any
- * component, all checks have been completed and have
-- * failed, mark that component's state to NICE_CHECK_FAILED.
-+ * failed to produce a nominated pair, mark that component's
-+ * state to NICE_CHECK_FAILED.
- *
- * Sends a component state changesignal via 'agent'.
- */
- static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream)
- {
- GSList *i;
-+ gboolean completed;
-+ guint nominated;
- /* note: emitting a signal might cause the client
- * to remove the stream, thus the component count
- * must be fetched before entering the loop*/
-@@ -1476,6 +1957,8 @@ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStre
- if (!agent_find_component (agent, stream->id, c+1, NULL, &comp))
- continue;
-
-+ nominated = 0;
-+ completed = TRUE;
- for (i = stream->conncheck_list; i; i = i->next) {
- CandidateCheckPair *p = i->data;
-
-@@ -1483,16 +1966,22 @@ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStre
- g_assert (p->stream_id == stream->id);
-
- if (p->component_id == (c + 1)) {
-- if (p->state != NICE_CHECK_FAILED)
-- break;
-+ if (p->nominated)
-+ ++nominated;
-+ if (p->state != NICE_CHECK_FAILED &&
-+ p->state != NICE_CHECK_SUCCEEDED &&
-+ p->state != NICE_CHECK_DISCOVERED)
-+ completed = FALSE;
- }
- }
-
-- /* note: all checks have failed
-+ /* note: all pairs are either failed or succeeded, and the component
-+ * has not produced a nominated pair.
- * Set the component to FAILED only if it actually had remote candidates
- * that failed.. */
-- if (i == NULL && comp != NULL && comp->remote_candidates != NULL)
-- agent_signal_component_state_change (agent,
-+ if (completed && nominated == 0 &&
-+ comp != NULL && comp->remote_candidates != NULL)
-+ agent_signal_component_state_change (agent,
- stream->id,
- (c + 1), /* component-id */
- NICE_COMPONENT_STATE_FAILED);
-@@ -1525,7 +2014,6 @@ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream
- ++valid;
- if (p->nominated == TRUE) {
- ++nominated;
-- priv_update_selected_pair (agent, component, p);
- }
- }
- }
-@@ -1535,7 +2023,7 @@ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream
- /* Only go to READY if no checks are left in progress. If there are
- * any that are kept, then this function will be called again when the
- * conncheck tick timer finishes them all */
-- if (priv_prune_pending_checks (stream, component->id) == 0) {
-+ if (priv_prune_pending_checks (agent, stream, component->id) == 0) {
- /* Continue through the states to give client code a nice
- * logical progression. See http://phabricator.freedesktop.org/D218 for
- * discussion. */
-@@ -1564,24 +2052,59 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
-
- g_assert (component);
-
-+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent) &&
-+ agent->controlling_mode)
-+ return;
-+
- /* step: search for at least one nominated pair */
- for (i = stream->conncheck_list; i; i = i->next) {
- CandidateCheckPair *pair = i->data;
- if (pair->local == localcand && pair->remote == remotecand) {
-- nice_debug ("Agent %p : marking pair %p (%s) as nominated", agent, pair, pair->foundation);
-- pair->nominated = TRUE;
-+ /* ICE, 7.2.1.5. Updating the Nominated Flag */
-+ /* note: TCP candidates typically produce peer reflexive
-+ * candidate, generating a "discovered" pair that can be
-+ * nominated.
-+ */
-+ if (pair->state == NICE_CHECK_SUCCEEDED &&
-+ pair->discovered_pair != NULL) {
-+ pair = pair->discovered_pair;
-+ g_assert (pair->state == NICE_CHECK_DISCOVERED);
-+ }
-+
-+ /* If the state of this pair is In-Progress, [...] the resulting
-+ * valid pair has its nominated flag set when the response
-+ * arrives.
-+ */
-+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent) &&
-+ pair->state == NICE_CHECK_IN_PROGRESS) {
-+ pair->mark_nominated_on_response_arrival = TRUE;
-+ nice_debug ("Agent %p : pair %p (%s) is in-progress, "
-+ "will be nominated on response receipt.",
-+ agent, pair, pair->foundation);
-+ }
-+
-+ if (pair->valid ||
-+ !NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
-+ nice_debug ("Agent %p : marking pair %p (%s) as nominated",
-+ agent, pair, pair->foundation);
-+ pair->nominated = TRUE;
-+ }
-+
- if (pair->valid) {
-- priv_update_selected_pair (agent, component, pair);
- /* Do not step down to CONNECTED if we're already at state READY*/
-- if (component->state != NICE_COMPONENT_STATE_READY) {
-+ if (component->state == NICE_COMPONENT_STATE_FAILED)
-+ agent_signal_component_state_change (agent,
-+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTING);
-+ priv_update_selected_pair (agent, component, pair);
-+ if (component->state == NICE_COMPONENT_STATE_CONNECTING)
- /* step: notify the client of a new component state (must be done
- * before the possible check list state update step */
- agent_signal_component_state_change (agent,
- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
-- }
--
- }
-- priv_update_check_list_state_for_ready (agent, stream, component);
-+
-+ if (pair->nominated)
-+ priv_update_check_list_state_for_ready (agent, stream, component);
- }
- }
- }
-@@ -1624,7 +2147,7 @@ ensure_unique_priority (NiceComponent *component, guint32 priority)
- */
- static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
- guint stream_id, NiceComponent *component, NiceCandidate *local,
-- NiceCandidate *remote, NiceCheckState initial_state, gboolean use_candidate)
-+ NiceCandidate *remote, NiceCheckState initial_state)
- {
- NiceStream *stream;
- CandidateCheckPair *pair;
-@@ -1662,8 +2185,6 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
- tmpbuf1, nice_address_get_port (&pair->local->addr),
- tmpbuf2, nice_address_get_port (&pair->remote->addr));
- }
-- pair->nominated = use_candidate;
-- pair->controlling = agent->controlling_mode;
- pair->prflx_priority = ensure_unique_priority (component,
- peer_reflexive_candidate_priority (agent, local));
-
-@@ -1675,7 +2196,8 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
- /* implement the hard upper limit for number of
- checks (see sect 5.7.3 ICE ID-19): */
- if (agent->compatibility == NICE_COMPATIBILITY_RFC5245) {
-- priv_limit_conn_check_list_size (stream->conncheck_list, agent->max_conn_checks);
-+ stream->conncheck_list = priv_limit_conn_check_list_size (
-+ stream->conncheck_list, agent->max_conn_checks);
- }
-
- return pair;
-@@ -1709,7 +2231,7 @@ static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
- agent, local->foundation, remote->foundation,
- stream_id, component->id);
- pair = priv_add_new_check_pair (agent, stream_id, component, local, remote,
-- initial_state, FALSE);
-+ initial_state);
- if (component->state == NICE_COMPONENT_STATE_CONNECTED ||
- component->state == NICE_COMPONENT_STATE_READY) {
- agent_signal_component_state_change (agent,
-@@ -1781,6 +2303,15 @@ int conn_check_add_for_candidate (NiceAgent *agent, guint stream_id, NiceCompone
-
- g_assert (remote != NULL);
-
-+ /* note: according to 7.2.1.3, "Learning Peer Reflexive Candidates",
-+ * the agent does not pair this candidate with any local candidates.
-+ */
-+ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245 &&
-+ remote->type == NICE_CANDIDATE_TYPE_PEER_REFLEXIVE)
-+ {
-+ return added;
-+ }
-+
- for (i = component->local_candidates; i ; i = i->next) {
- NiceCandidate *local = i->data;
-
-@@ -1815,6 +2346,18 @@ int conn_check_add_for_local_candidate (NiceAgent *agent, guint stream_id, NiceC
-
- g_assert (local != NULL);
-
-+ /*
-+ * note: according to 7.1.3.2.1 "Discovering Peer Reflexive
-+ * Candidates", the peer reflexive candidate is not paired
-+ * with other remote candidates
-+ */
-+
-+ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245 &&
-+ local->type == NICE_CANDIDATE_TYPE_PEER_REFLEXIVE)
-+ {
-+ return added;
-+ }
-+
- for (i = component->remote_candidates; i ; i = i->next) {
-
- NiceCandidate *remote = i->data;
-@@ -1838,8 +2381,7 @@ static void conn_check_free_item (gpointer data)
-
- if (pair->agent)
- priv_remove_pair_from_triggered_check_queue (pair->agent, pair);
-- pair->stun_message.buffer = NULL;
-- pair->stun_message.buffer_len = 0;
-+ priv_free_all_stun_transactions (pair, NULL);
- g_slice_free (CandidateCheckPair, pair);
- }
-
-@@ -2057,30 +2599,28 @@ size_t priv_get_password (NiceAgent *agent, NiceStream *stream,
-
- /* Implement the computation specific in RFC 5245 section 16 */
-
--static unsigned int priv_compute_conncheck_timer (NiceAgent *agent)
-+static unsigned int priv_compute_conncheck_timer (NiceAgent *agent, NiceStream *stream)
- {
-- GSList *item1, *item2;
-+ GSList *i;
- guint waiting_and_in_progress = 0;
-+ guint n = 0;
- unsigned int rto = 0;
-
--
-- for (item1 = agent->streams; item1; item1 = item1->next) {
-- NiceStream *stream = item1->data;;
-- for (item2 = stream->conncheck_list; item2; item2 = item2->next) {
-- CandidateCheckPair *pair = item2->data;
--
-- if (pair->state == NICE_CHECK_IN_PROGRESS ||
-- pair->state == NICE_CHECK_WAITING)
-- waiting_and_in_progress++;
-- }
-+ for (i = stream->conncheck_list; i ; i = i->next) {
-+ CandidateCheckPair *p = i->data;
-+ if (p->state == NICE_CHECK_IN_PROGRESS ||
-+ p->state == NICE_CHECK_WAITING)
-+ waiting_and_in_progress++;
- }
-
-- rto = agent->timer_ta * waiting_and_in_progress;
-+ n = priv_number_of_active_check_lists (agent);
-+ rto = agent->timer_ta * n * waiting_and_in_progress;
-
- /* We assume non-reliable streams are RTP, so we use 100 as the max */
-- nice_debug ("Agent %p : timer set to %dms (waiting+in_progress=%d)",
-+ nice_debug ("Agent %p : timer set to %dms, "
-+ "waiting+in_progress=%d, nb_active=%d",
- agent, agent->reliable ? MAX (rto, 500) : MAX (rto, 100),
-- waiting_and_in_progress);
-+ waiting_and_in_progress, n);
- if (agent->reliable)
- return MAX (rto, 500);
- else
-@@ -2114,6 +2654,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
- bool cand_use = controlling;
- size_t buffer_len;
- unsigned int timeout;
-+ StunTransaction *stun;
-
- if (!agent_find_component (agent, pair->stream_id, pair->component_id,
- &stream, &component))
-@@ -2135,99 +2676,119 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
- nice_address_to_string (&pair->local->addr, tmpbuf1);
- nice_address_to_string (&pair->remote->addr, tmpbuf2);
- nice_debug ("Agent %p : STUN-CC REQ [%s]:%u --> [%s]:%u, socket=%u, "
-- "pair=%s (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
-- "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, cont=%d.", agent,
-+ "pair=%p (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
-+ "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, %s.", agent,
- tmpbuf1, nice_address_get_port (&pair->local->addr),
- tmpbuf2, nice_address_get_port (&pair->remote->addr),
- pair->sockptr->fileno ? g_socket_get_fd(pair->sockptr->fileno) : -1,
-- pair->foundation, pair->component_id,
-+ pair, pair->component_id,
- (unsigned long long)agent->tie_breaker,
- (int) uname_len, uname, uname_len,
- (int) password_len, password, password_len,
-- pair->prflx_priority, controlling);
-+ pair->prflx_priority,
-+ controlling ? "controlling" : "controlled");
- }
-
-- if (cand_use)
-+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
-+ switch (agent->nomination_mode) {
-+ case NICE_NOMINATION_MODE_REGULAR:
-+ /* We are doing regular nomination, so we set the use-candidate
-+ * attrib, when the controlling agent decided which valid pair to
-+ * resend with this flag in priv_conn_check_tick_stream()
-+ */
-+ cand_use = pair->use_candidate_on_next_check;
-+ nice_debug ("Agent %p : %s: set cand_use=%d "
-+ "(regular nomination).", agent, G_STRFUNC, cand_use);
-+ break;
-+ case NICE_NOMINATION_MODE_AGGRESSIVE:
-+ /* We are doing aggressive nomination, we set the use-candidate
-+ * attrib in every check we send, when we are the controlling
-+ * agent, RFC 5245, 8.1.1.2
-+ */
-+ cand_use = controlling;
-+ nice_debug ("Agent %p : %s: set cand_use=%d "
-+ "(aggressive nomination).", agent, G_STRFUNC, cand_use);
-+ break;
-+ default:
-+ /* Nothing to do. */
-+ break;
-+ }
-+ } else if (cand_use)
- pair->nominated = controlling;
-
-- if (uname_len > 0) {
-- buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
-- &pair->stun_message, pair->stun_buffer, sizeof(pair->stun_buffer),
-- uname, uname_len, password, password_len,
-- cand_use, controlling, pair->prflx_priority,
-- agent->tie_breaker,
-- pair->local->foundation,
-- agent_to_ice_compatibility (agent));
-+ if (uname_len == 0) {
-+ nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
-+ return -1;
-+ }
-
-- nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
-- pair->stun_message.buffer);
-+ stun = priv_add_stun_transaction (pair);
-
-- if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
-- agent->compatibility == NICE_COMPATIBILITY_OC2007) {
-- g_free (password);
-- }
-+ buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
-+ &stun->message, stun->buffer, sizeof(stun->buffer),
-+ uname, uname_len, password, password_len,
-+ cand_use, controlling, pair->prflx_priority,
-+ agent->tie_breaker,
-+ pair->local->foundation,
-+ agent_to_ice_compatibility (agent));
-
-- if (buffer_len > 0) {
-- if (nice_socket_is_reliable(pair->sockptr)) {
-- stun_timer_start_reliable(&pair->timer, STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT);
-- } else {
-- stun_timer_start (&pair->timer,
-- priv_compute_conncheck_timer (agent),
-- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
-- }
-+ nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
-+ stun->message.buffer);
-
-- /* TCP-ACTIVE candidate must create a new socket before sending
-- * by connecting to the peer. The new socket is stored in the candidate
-- * check pair, until we discover a new local peer reflexive */
-- if (pair->sockptr->fileno == NULL &&
-- pair->sockptr->type != NICE_SOCKET_TYPE_UDP_TURN &&
-- pair->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
-- NiceStream *stream2 = NULL;
-- NiceComponent *component2 = NULL;
-- NiceSocket *new_socket;
--
-- if (agent_find_component (agent, pair->stream_id, pair->component_id,
-- &stream2, &component2)) {
-- new_socket = nice_tcp_active_socket_connect (pair->sockptr,
-- &pair->remote->addr);
-- if (new_socket) {
-- pair->sockptr = new_socket;
-- _priv_set_socket_tos (agent, pair->sockptr, stream2->tos);
--
-- if (agent->reliable) {
-- nice_socket_set_writable_callback (pair->sockptr,
-- _tcp_sock_is_writable, component2);
-- }
-+ if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
-+ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
-+ g_free (password);
-+ }
-
-- nice_component_attach_socket (component2, new_socket);
-- }
-- }
-- }
-- /* send the conncheck */
-- agent_socket_send (pair->sockptr, &pair->remote->addr,
-- buffer_len, (gchar *)pair->stun_buffer);
-+ if (buffer_len == 0) {
-+ nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
-+ priv_remove_stun_transaction (pair, stun, component);
-+ return -1;
-+ }
-
-- if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2) {
-- ms_ice2_legacy_conncheck_send (&pair->stun_message, pair->sockptr,
-- &pair->remote->addr);
-- }
-+ if (nice_socket_is_reliable(pair->sockptr)) {
-+ timeout = agent->stun_reliable_timeout;
-+ stun_timer_start_reliable(&stun->timer, timeout);
-+ } else {
-+ timeout = priv_compute_conncheck_timer (agent, stream);
-+ stun_timer_start (&stun->timer, timeout, agent->stun_max_retransmissions);
-+ }
-
-- timeout = stun_timer_remainder (&pair->timer);
-- /* note: convert from milli to microseconds for g_time_val_add() */
-- g_get_current_time (&pair->next_tick);
-- g_time_val_add (&pair->next_tick, timeout * 1000);
-- } else {
-- nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
-- pair->stun_message.buffer = NULL;
-- pair->stun_message.buffer_len = 0;
-- return -1;
-+ g_get_current_time (&stun->next_tick);
-+ g_time_val_add (&stun->next_tick, timeout * 1000);
-+
-+ /* TCP-ACTIVE candidate must create a new socket before sending
-+ * by connecting to the peer. The new socket is stored in the candidate
-+ * check pair, until we discover a new local peer reflexive */
-+ if (pair->sockptr->fileno == NULL &&
-+ pair->sockptr->type != NICE_SOCKET_TYPE_UDP_TURN &&
-+ pair->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
-+ NiceStream *stream2 = NULL;
-+ NiceComponent *component2 = NULL;
-+ NiceSocket *new_socket;
-+
-+ if (agent_find_component (agent, pair->stream_id, pair->component_id,
-+ &stream2, &component2)) {
-+ new_socket = nice_tcp_active_socket_connect (pair->sockptr,
-+ &pair->remote->addr);
-+ if (new_socket) {
-+ pair->sockptr = new_socket;
-+ _priv_set_socket_tos (agent, pair->sockptr, stream2->tos);
-+
-+ if (agent->reliable)
-+ nice_socket_set_writable_callback (pair->sockptr,
-+ _tcp_sock_is_writable, component2);
-+
-+ nice_component_attach_socket (component2, new_socket);
-+ }
- }
-- } else {
-- nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
-- pair->stun_message.buffer = NULL;
-- pair->stun_message.buffer_len = 0;
-- return -1;
- }
-+ /* send the conncheck */
-+ agent_socket_send (pair->sockptr, &pair->remote->addr,
-+ buffer_len, (gchar *)stun->buffer);
-+
-+ if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2)
-+ ms_ice2_legacy_conncheck_send (&stun->message, pair->sockptr,
-+ &pair->remote->addr);
-
- return 0;
- }
-@@ -2238,14 +2799,14 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
- *
- * @see priv_update_check_list_state_failed_components()
- */
--static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
-+static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, guint component_id)
- {
- GSList *i;
- guint64 highest_nominated_priority = 0;
- guint in_progress = 0;
-
-- nice_debug ("Agent XXX: Finding highest priority for component %d",
-- component_id);
-+ nice_debug ("Agent %p: Finding highest priority for component %d",
-+ agent, component_id);
-
- for (i = stream->conncheck_list; i; i = i->next) {
- CandidateCheckPair *p = i->data;
-@@ -2257,37 +2818,40 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
- }
- }
-
-- nice_debug ("Agent XXX: Pruning pending checks. Highest nominated priority "
-- "is %" G_GUINT64_FORMAT, highest_nominated_priority);
-+ nice_debug ("Agent %p: Pruning pending checks. Highest nominated priority "
-+ "is %" G_GUINT64_FORMAT, agent, highest_nominated_priority);
-
- /* step: cancel all FROZEN and WAITING pairs for the component */
-- for (i = stream->conncheck_list; i; i = i->next) {
-+ i = stream->conncheck_list;
-+ while (i) {
- CandidateCheckPair *p = i->data;
-+ GSList *next = i->next;
-+
- if (p->component_id == component_id) {
-- if (p->state == NICE_CHECK_FROZEN ||
-- p->state == NICE_CHECK_WAITING) {
-- p->state = NICE_CHECK_CANCELLED;
-- nice_debug ("Agent XXX : pair %p state CANCELED", p);
-+ if (p->state == NICE_CHECK_FROZEN || p->state == NICE_CHECK_WAITING) {
-+ nice_debug ("Agent %p : pair %p removed.", agent, p);
-+ conn_check_free_item (p);
-+ stream->conncheck_list = g_slist_delete_link(stream->conncheck_list, i);
- }
-
- /* note: a SHOULD level req. in ICE 8.1.2. "Updating States" (ID-19) */
-- if (p->state == NICE_CHECK_IN_PROGRESS) {
-- if (highest_nominated_priority != 0 &&
-- p->priority < highest_nominated_priority) {
-- p->stun_message.buffer = NULL;
-- p->stun_message.buffer_len = 0;
-- p->state = NICE_CHECK_CANCELLED;
-- nice_debug ("Agent XXX : pair %p state CANCELED", p);
-+ else if (p->state == NICE_CHECK_IN_PROGRESS) {
-+ if (p->priority < highest_nominated_priority) {
-+ p->retransmit = FALSE;
-+ nice_debug ("Agent %p : pair %p will not be retransmitted.",
-+ agent, p);
- } else {
- /* We must keep the higher priority pairs running because if a udp
- * packet was lost, we might end up using a bad candidate */
-- nice_debug ("Agent XXX : pair %p kept IN_PROGRESS because priority %"
-+ nice_debug ("Agent %p : pair %p kept IN_PROGRESS because priority %"
- G_GUINT64_FORMAT " is higher than currently nominated pair %"
-- G_GUINT64_FORMAT, p, p->priority, highest_nominated_priority);
-+ G_GUINT64_FORMAT, agent,
-+ p, p->priority, highest_nominated_priority);
- in_progress++;
- }
- }
- }
-+ i = next;
- }
-
- return in_progress;
-@@ -2301,17 +2865,17 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
- * @param component the check is related to
- * @param local_socket socket from which the inbound check was received
- * @param remote_cand remote candidate from which the inbound check was sent
-- * @param use_candidate whether the original check had USE-CANDIDATE attribute set
- */
--static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand, gboolean use_candidate)
-+static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand)
- {
- GSList *i;
- NiceCandidate *local = NULL;
-+ CandidateCheckPair *p;
-
- g_assert (remote_cand != NULL);
-
- for (i = stream->conncheck_list; i ; i = i->next) {
-- CandidateCheckPair *p = i->data;
-+ p = i->data;
- if (p->component_id == component->id &&
- p->remote == remote_cand &&
- ((p->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE &&
-@@ -2322,61 +2886,67 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
- * tcp-active we don't want to retrigger a check on a pair that
- * was FAILED when a peer-reflexive pair was created */
-
-- nice_debug ("Agent %p : Found a matching pair %p for triggered check.", agent, p);
-+ if (p->succeeded_pair != NULL) {
-+ g_assert (p->state == NICE_CHECK_DISCOVERED);
-+ p = p->succeeded_pair;
-+ }
-+
-+ nice_debug ("Agent %p : Found a matching pair %p (%s) (%s) ...",
-+ agent, p, p->foundation, priv_state_to_string (p->state));
-
-- if (p->state == NICE_CHECK_WAITING ||
-- p->state == NICE_CHECK_FROZEN)
-- priv_add_pair_to_triggered_check_queue (agent, p);
-- else if (p->state == NICE_CHECK_IN_PROGRESS) {
-- /* XXX: according to ICE 7.2.1.4 "Triggered Checks" (ID-19),
-- * we should cancel the existing one, instead we reset our timer, so
-- * we'll resend the exiting transactions faster if needed...? :P
-- */
-- nice_debug ("Agent %p : check already in progress, "
-- "restarting the timer again?: %s ..", agent,
-- p->timer_restarted ? "no" : "yes");
-- if (!nice_socket_is_reliable (p->sockptr) && !p->timer_restarted) {
-- stun_timer_start (&p->timer,
-- priv_compute_conncheck_timer (agent),
-- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
-- p->timer_restarted = TRUE;
-- }
-- }
-- else if (p->state == NICE_CHECK_SUCCEEDED ||
-- p->state == NICE_CHECK_DISCOVERED) {
-- nice_debug ("Agent %p : Skipping triggered check, already completed..", agent);
-- /* note: this is a bit unsure corner-case -- let's do the
-- same state update as for processing responses to our own checks */
-- /* note: this update is required by the dribble test, to
-- * ensure the transition ready -> connected -> ready, because
-- * an incoming stun request generates a discovered peer reflexive,
-- * that causes the ready -> connected transition.
-- */
-- priv_update_check_list_state_for_ready (agent, stream, component);
--
-- /* note: this new check is required by the new-dribble test,
-- * when early icheck on the peer controlled agent causes an
-- * incoming stun request to an already succeeded (and
-- * nominated) pair on the controlling agent. If the
-- * controlling agent doesn't retrigger a check with
-- * USE-CANDIDATE=1, the peer agent has no way to nominate it.
-- *
-- * This behavior differs from ICE spec 7.2.1.4
-- */
-- if ((agent->compatibility == NICE_COMPATIBILITY_RFC5245 ||
-- agent->compatibility == NICE_COMPATIBILITY_WLM2009 ||
-- agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
-- agent->controlling_mode) {
-+ switch (p->state) {
-+ case NICE_CHECK_WAITING:
-+ case NICE_CHECK_FROZEN:
-+ nice_debug ("Agent %p : pair %p added for a triggered check.",
-+ agent, p);
- priv_add_pair_to_triggered_check_queue (agent, p);
-- conn_check_schedule_next(agent);
-- }
-- } else if (p->state == NICE_CHECK_FAILED) {
-- /* 7.2.1.4 Triggered Checks
-- * If the state of the pair is Failed, it is changed to Waiting
-- and the agent MUST create a new connectivity check for that
-- pair (representing a new STUN Binding request transaction), by
-- enqueueing the pair in the triggered check queue. */
-- priv_add_pair_to_triggered_check_queue (agent, p);
-+ break;
-+ case NICE_CHECK_IN_PROGRESS:
-+ /* note: according to ICE SPEC sect 7.2.1.4 "Triggered Checks"
-+ * we cancel the in-progress transaction, and after the
-+ * retransmission timeout, we create a new connectivity check
-+ * for that pair. The controlling role of this new check may
-+ * be different from the role of this cancelled check.
-+ *
-+ * note: the flag retransmit unset means that
-+ * another pair, with a higher priority is already nominated,
-+ * so there's no reason to recheck this pair, since it can in
-+ * no way replace the nominated one.
-+ */
-+ if (!nice_socket_is_reliable (p->sockptr) && p->retransmit) {
-+ nice_debug ("Agent %p : pair %p added for a triggered check.",
-+ agent, p);
-+ priv_add_pair_to_triggered_check_queue (agent, p);
-+ }
-+ break;
-+ case NICE_CHECK_FAILED:
-+ if (p->retransmit) {
-+ nice_debug ("Agent %p : pair %p added for a triggered check.",
-+ agent, p);
-+ priv_add_pair_to_triggered_check_queue (agent, p);
-+ /* If the component for this pair is in failed state, move it
-+ * back to connecting, and reinitiate the timers
-+ */
-+ if (component->state == NICE_COMPONENT_STATE_FAILED) {
-+ agent_signal_component_state_change (agent, stream->id,
-+ component->id, NICE_COMPONENT_STATE_CONNECTING);
-+ conn_check_schedule_next (agent);
-+ }
-+ }
-+ break;
-+ case NICE_CHECK_SUCCEEDED:
-+ nice_debug ("Agent %p : nothing to do for pair %p.", agent, p);
-+ /* note: this is a bit unsure corner-case -- let's do the
-+ same state update as for processing responses to our own checks */
-+ /* note: this update is required by the dribble test, to
-+ * ensure the transition ready -> connected -> ready, because
-+ * an incoming stun request generates a discovered peer reflexive,
-+ * that causes the ready -> connected transition.
-+ */
-+ priv_update_check_list_state_for_ready (agent, stream, component);
-+ break;
-+ default:
-+ break;
- }
-
- /* note: the spec says the we SHOULD retransmit in-progress
-@@ -2394,7 +2964,9 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
-
- if (i) {
- nice_debug ("Agent %p : Adding a triggered check to conn.check list (local=%p).", agent, local);
-- priv_add_new_check_pair (agent, stream->id, component, local, remote_cand, NICE_CHECK_WAITING, use_candidate);
-+ p = priv_add_new_check_pair (agent, stream->id, component,
-+ local, remote_cand, NICE_CHECK_WAITING);
-+ priv_add_pair_to_triggered_check_queue (agent, p);
- return TRUE;
- }
- else {
-@@ -2447,9 +3019,7 @@ static void priv_reply_to_conn_check (NiceAgent *agent, NiceStream *stream,
- }
-
- if (rcand) {
-- /* note: upon successful check, make the reserve check immediately */
-- priv_schedule_triggered_check (agent, stream, component, sockptr, rcand, use_candidate);
--
-+ priv_schedule_triggered_check (agent, stream, component, sockptr, rcand);
- if (use_candidate)
- priv_mark_pair_nominated (agent, stream, component, lcand, rcand);
- }
-@@ -2509,6 +3079,8 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
- pair->remote = parent_pair->remote;
- pair->sockptr = local_cand->sockptr;
- pair->state = NICE_CHECK_DISCOVERED;
-+ parent_pair->discovered_pair = pair;
-+ pair->succeeded_pair = parent_pair;
- nice_debug ("Agent %p : new pair %p state DISCOVERED", agent, pair);
- {
- gchar tmpbuf1[INET6_ADDRSTRLEN];
-@@ -2528,7 +3100,6 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
- pair->priority = nice_candidate_pair_priority (pair->remote->priority,
- pair->local->priority);
- pair->nominated = FALSE;
-- pair->controlling = agent->controlling_mode;
- pair->prflx_priority = ensure_unique_priority (component,
- peer_reflexive_candidate_priority (agent, local_cand));
- nice_debug ("Agent %p : added a new peer-discovered pair with foundation of '%s'.", agent, pair->foundation);
-@@ -2567,14 +3138,16 @@ static void priv_check_for_role_conflict (NiceAgent *agent, gboolean control)
- {
- /* role conflict, change mode; wait for a new conn. check */
- if (control != agent->controlling_mode) {
-- nice_debug ("Agent %p : Role conflict, changing agent role to %d.", agent, control);
-+ nice_debug ("Agent %p : Role conflict, changing agent role to \"%s\".",
-+ agent, control ? "controlling" : "controlled");
- agent->controlling_mode = control;
- /* the pair priorities depend on the roles, so recalculation
- * is needed */
- priv_recalculate_pair_priorities (agent);
- }
- else
-- nice_debug ("Agent %p : Role conflict, agent role already changed to %d.", agent, control);
-+ nice_debug ("Agent %p : Role conflict, staying with role \"%s\".",
-+ agent, control ? "controlling" : "controlled");
- }
-
- /*
-@@ -2621,13 +3194,25 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
- }
-
- if (new_pair) {
-+ /* note: when new_pair is distinct from p, it means new_pair is a
-+ * previously discovered peer-reflexive candidate pair, so we don't
-+ * set the valid flag on p in this case, because the valid flag is
-+ * already set on the discovered pair.
-+ */
-+ if (new_pair == p)
-+ p->valid = TRUE;
- p->state = NICE_CHECK_SUCCEEDED;
-+ priv_remove_pair_from_triggered_check_queue (agent, p);
-+ priv_free_all_stun_transactions (p, component);
- nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
-- priv_conn_check_unfreeze_related (agent, stream, p);
-+ nice_component_add_valid_candidate (component, remote_candidate);
- }
- else {
- if (!local_cand) {
-- if (!agent->force_relay)
-+ if (!agent->force_relay) {
-+ /* step: find a new local candidate, see RFC 5245 7.1.3.2.1.
-+ * "Discovering Peer Reflexive Candidates"
-+ */
- local_cand = discovery_add_peer_reflexive_candidate (agent,
- stream->id,
- component->id,
-@@ -2635,8 +3220,9 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
- sockptr,
- local_candidate,
- remote_candidate);
-- p->state = NICE_CHECK_FAILED;
-- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
-+ nice_debug ("Agent %p : added a new peer-reflexive local candidate %p",
-+ agent, local_cand);
-+ }
- }
-
- /* step: add a new discovered pair (see RFC 5245 7.1.3.2.2
-@@ -2644,13 +3230,23 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
- if (local_cand)
- new_pair = priv_add_peer_reflexive_pair (agent, stream->id, component,
- local_cand, p);
-- nice_debug ("Agent %p : conncheck %p FAILED, %p DISCOVERED.", agent, p, new_pair);
-+ /* note: this is same as "adding to VALID LIST" in the spec
-+ text */
-+ if (new_pair)
-+ new_pair->valid = TRUE;
-+ /* step: The agent sets the state of the pair that *generated* the check to
-+ * Succeeded, RFC 5245, 7.1.3.2.3, "Updating Pair States"
-+ */
-+ p->state = NICE_CHECK_SUCCEEDED;
-+ priv_remove_pair_from_triggered_check_queue (agent, p);
-+ priv_free_all_stun_transactions (p, component);
-+ nice_debug ("Agent %p : conncheck %p SUCCEEDED, %p DISCOVERED.",
-+ agent, p, new_pair);
- }
-
-- /* note: this is same as "adding to VALID LIST" in the spec
-- text */
-- if (new_pair)
-- new_pair->valid = TRUE;
-+ if (new_pair && new_pair->valid)
-+ nice_component_add_valid_candidate (component, remote_candidate);
-+
-
- return new_pair;
- }
-@@ -2669,134 +3265,199 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
- struct sockaddr addr;
- } sockaddr;
- socklen_t socklen = sizeof (sockaddr);
-- GSList *i;
-+ GSList *i, *j;
-+ guint k;
- StunUsageIceReturn res;
-- gboolean trans_found = FALSE;
- StunTransactionId discovery_id;
- StunTransactionId response_id;
- stun_message_id (resp, response_id);
-
-- for (i = stream->conncheck_list; i && trans_found != TRUE; i = i->next) {
-+ for (i = stream->conncheck_list; i; i = i->next) {
- CandidateCheckPair *p = i->data;
-
-- if (p->stun_message.buffer) {
-- stun_message_id (&p->stun_message, discovery_id);
--
-- if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)) == 0) {
-- res = stun_usage_ice_conncheck_process (resp,
-- &sockaddr.storage, &socklen,
-- agent_to_ice_compatibility (agent));
-- nice_debug ("Agent %p : stun_bind_process/conncheck for %p res %d "
-- "(controlling=%d).", agent, p, (int)res, agent->controlling_mode);
--
-- if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
-- res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
-- /* case: found a matching connectivity check request */
--
-- CandidateCheckPair *ok_pair = NULL;
--
-- nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
-- p->stun_message.buffer = NULL;
-- p->stun_message.buffer_len = 0;
--
-- /* step: verify that response came from the same IP address we
-- * sent the original request to (see 7.1.2.1. "Failure
-- * Cases") */
-- if (nice_address_equal (from, &p->remote->addr) != TRUE) {
--
-- p->state = NICE_CHECK_FAILED;
-- if (nice_debug_is_enabled ()) {
-- gchar tmpbuf[INET6_ADDRSTRLEN];
-- gchar tmpbuf2[INET6_ADDRSTRLEN];
-- nice_debug ("Agent %p : conncheck %p FAILED"
-- " (mismatch of source address).", agent, p);
-- nice_address_to_string (&p->remote->addr, tmpbuf);
-- nice_address_to_string (from, tmpbuf2);
-- nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
-- tmpbuf, nice_address_get_port (&p->remote->addr),
-- tmpbuf2, nice_address_get_port (from));
-- }
-- trans_found = TRUE;
-- break;
-- }
--
-- /* note: CONNECTED but not yet READY, see docs */
--
-- /* step: handle the possible case of a peer-reflexive
-- * candidate where the mapped-address in response does
-- * not match any local candidate, see 7.1.2.2.1
-- * "Discovering Peer Reflexive Candidates" ICE ID-19) */
--
-- if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
-- /* note: this is same as "adding to VALID LIST" in the spec
-- text */
-- p->state = NICE_CHECK_SUCCEEDED;
-- p->valid = TRUE;
-- g_assert_not_reached ();
-- nice_debug ("Agent %p : Mapped address not found."
-- " conncheck %p SUCCEEDED.", agent, p);
-- priv_conn_check_unfreeze_related (agent, stream, p);
-- } else {
-- ok_pair = priv_process_response_check_for_reflexive (agent,
-- stream, component, p, sockptr, &sockaddr.addr,
-- local_candidate, remote_candidate);
-- }
--
--
-- if (!ok_pair)
-- ok_pair = p;
--
-- /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
-- Nominated Flag" (ID-19) */
-- if (ok_pair->nominated == TRUE) {
-- priv_update_selected_pair (agent, component, ok_pair);
-- priv_print_conn_check_lists (agent, G_STRFUNC,
-- ", got a nominated pair");
-+ for (j = p->stun_transactions, k = 0; j; j = j->next, k++) {
-+ StunTransaction *stun = j->data;
-+
-+ stun_message_id (&stun->message, discovery_id);
-+
-+ if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)))
-+ continue;
-+
-+ res = stun_usage_ice_conncheck_process (resp,
-+ &sockaddr.storage, &socklen,
-+ agent_to_ice_compatibility (agent));
-+ nice_debug ("Agent %p : stun_bind_process/conncheck for %p: "
-+ "%s,res=%s,stun#=%d.",
-+ agent, p,
-+ agent->controlling_mode ? "controlling" : "controlled",
-+ priv_ice_return_to_string (res), k);
-+
-+ if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
-+ res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
-+ /* case: found a matching connectivity check request */
-+
-+ CandidateCheckPair *ok_pair = NULL;
-+
-+ nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
-+ priv_remove_stun_transaction (p, stun, component);
-+
-+ /* step: verify that response came from the same IP address we
-+ * sent the original request to (see 7.1.2.1. "Failure
-+ * Cases") */
-+ if (nice_address_equal (from, &p->remote->addr) == FALSE) {
-+ candidate_check_pair_fail (stream, agent, p);
-+ if (nice_debug_is_enabled ()) {
-+ gchar tmpbuf[INET6_ADDRSTRLEN];
-+ gchar tmpbuf2[INET6_ADDRSTRLEN];
-+ nice_debug ("Agent %p : conncheck %p FAILED"
-+ " (mismatch of source address).", agent, p);
-+ nice_address_to_string (&p->remote->addr, tmpbuf);
-+ nice_address_to_string (from, tmpbuf2);
-+ nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
-+ tmpbuf, nice_address_get_port (&p->remote->addr),
-+ tmpbuf2, nice_address_get_port (from));
-+ }
-+ return TRUE;
-+ }
-
-- /* Do not step down to CONNECTED if we're already at state READY*/
-- if (component->state != NICE_COMPONENT_STATE_READY) {
-- /* step: notify the client of a new component state (must be done
-- * before the possible check list state update step */
-- agent_signal_component_state_change (agent,
-- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
-- }
-- }
-+ /* note: CONNECTED but not yet READY, see docs */
-+
-+ /* step: handle the possible case of a peer-reflexive
-+ * candidate where the mapped-address in response does
-+ * not match any local candidate, see 7.1.2.2.1
-+ * "Discovering Peer Reflexive Candidates" ICE ID-19) */
-+
-+ if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
-+ p->state = NICE_CHECK_SUCCEEDED;
-+ p->valid = TRUE;
-+ nice_debug ("Agent %p : Mapped address not found."
-+ " conncheck %p SUCCEEDED.", agent, p);
-+ nice_component_add_valid_candidate (component, p->remote);
-+ } else
-+ ok_pair = priv_process_response_check_for_reflexive (agent,
-+ stream, component, p, sockptr, &sockaddr.addr,
-+ local_candidate, remote_candidate);
-+
-+ /* note: The success of this check might also
-+ * cause the state of other checks to change as well, ICE
-+ * spec 7.1.3.2.3
-+ */
-+ priv_conn_check_unfreeze_related (agent, stream, p);
-+
-+ /* Note: this assignment helps to reduce the numbers of cases
-+ * to be tested. If ok_pair and p refer to distinct pairs, it
-+ * means that ok_pair is a discovered peer reflexive one,
-+ * caused by the check made on pair p. In that case, the
-+ * flags to be tested are on p, but the nominated flag will be
-+ * set on ok_pair. When there's no discovered pair, p and
-+ * ok_pair refer to the same pair.
-+ * To summarize : p is a SUCCEEDED pair, ok_pair is a
-+ * DISCOVERED, VALID, and eventually NOMINATED pair.
-+ */
-+ if (!ok_pair)
-+ ok_pair = p;
-+
-+ /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
-+ Nominated Flag" (ID-19) */
-+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
-+ nice_debug ("Agent %p : Updating nominated flag (%s): "
-+ "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
-+ agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
-+ "UDP" : "TCP",
-+ ok_pair, ok_pair->use_candidate_on_next_check,
-+ ok_pair->mark_nominated_on_response_arrival,
-+ p, p->use_candidate_on_next_check,
-+ p->mark_nominated_on_response_arrival);
-+
-+ if (agent->controlling_mode) {
-+ switch (agent->nomination_mode) {
-+ case NICE_NOMINATION_MODE_REGULAR:
-+ if (p->use_candidate_on_next_check) {
-+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
-+ "(regular nomination, controlling, "
-+ "use_cand_on_next_check=1).",
-+ agent, ok_pair, ok_pair->foundation);
-+ ok_pair->nominated = TRUE;
-+ }
-+ break;
-+ case NICE_NOMINATION_MODE_AGGRESSIVE:
-+ if (!p->nominated) {
-+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
-+ "(aggressive nomination, controlling).",
-+ agent, ok_pair, ok_pair->foundation);
-+ ok_pair->nominated = TRUE;
-+ }
-+ break;
-+ default:
-+ /* Nothing to do */
-+ break;
-+ }
-+ } else {
-+ if (p->mark_nominated_on_response_arrival) {
-+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
-+ "(%s nomination, controlled, mark_on_response=1).",
-+ agent, ok_pair, ok_pair->foundation,
-+ agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
-+ "aggressive" : "regular");
-+ ok_pair->nominated = TRUE;
-+ }
-+ }
-+ }
-
-- /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
-- states" and 8.1.2 "Updating States", ID-19) */
-- priv_update_check_list_state_for_ready (agent, stream, component);
-+ if (ok_pair->nominated == TRUE) {
-+ priv_update_selected_pair (agent, component, ok_pair);
-+ priv_print_conn_check_lists (agent, G_STRFUNC,
-+ ", got a nominated pair");
-+
-+ /* Do not step down to CONNECTED if we're already at state READY*/
-+ if (component->state != NICE_COMPONENT_STATE_READY)
-+ /* step: notify the client of a new component state (must be done
-+ * before the possible check list state update step */
-+ agent_signal_component_state_change (agent,
-+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
-+ }
-
-- trans_found = TRUE;
-- } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
-- /* case: role conflict error, need to restart with new role */
-- nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
-- /* note: our role might already have changed due to an
-- * incoming request, but if not, change role now;
-- * follows ICE 7.1.2.1 "Failure Cases" (ID-19) */
-- priv_check_for_role_conflict (agent, !p->controlling);
--
-- p->stun_message.buffer = NULL;
-- p->stun_message.buffer_len = 0;
-- p->state = NICE_CHECK_WAITING;
-- priv_add_pair_to_triggered_check_queue (agent, p);
-- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
-- trans_found = TRUE;
-- } else {
-- /* case: STUN error, the check STUN context was freed */
-- nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
-- p->stun_message.buffer = NULL;
-- p->stun_message.buffer_len = 0;
-- trans_found = TRUE;
-- }
-+ /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
-+ states" and 8.1.2 "Updating States", ID-19) */
-+ priv_update_check_list_state_for_ready (agent, stream, component);
-+ } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
-+ guint64 tie;
-+ gboolean controlled_mode;
-+
-+ /* case: role conflict error, need to restart with new role */
-+ nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
-+
-+ /* note: this res value indicates that the role of the peer
-+ * agent has not changed after the tie-breaker comparison, so
-+ * this is our role that must change. see ICE sect. 7.1.3.1
-+ * "Failure Cases". Our role might already have changed due to
-+ * an earlier incoming request, but if not, change role now.
-+ *
-+ * Sect. 7.1.3.1 is not clear on this point, but we choose to
-+ * put the candidate pair in the triggered check list even
-+ * when the agent did not switch its role. The reason for this
-+ * interpretation is that the reception of the stun reply, even
-+ * an error reply, is a good sign that this pair will be
-+ * valid, if we retry the check after the role of both peers
-+ * has been fixed.
-+ */
-+ controlled_mode = (stun_message_find64 (&stun->message,
-+ STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
-+ STUN_MESSAGE_RETURN_SUCCESS);
-+
-+ priv_check_for_role_conflict (agent, controlled_mode);
-+ priv_remove_stun_transaction (p, stun, component);
-+ priv_add_pair_to_triggered_check_queue (agent, p);
-+ } else {
-+ /* case: STUN error, the check STUN context was freed */
-+ nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
-+ candidate_check_pair_fail (stream, agent, p);
- }
-+ return TRUE;
- }
- }
-
--
-- stream->conncheck_list =
-- prune_cancelled_conn_check (stream->conncheck_list);
--
-- return trans_found;
-+ return FALSE;
- }
-
- /*
-@@ -2846,6 +3507,7 @@ static gboolean priv_map_reply_to_discovery_request (NiceAgent *agent, StunMessa
- d->server = niceaddr;
-
- d->pending = FALSE;
-+ agent->discovery_unsched_items++;
- } else if (res == STUN_USAGE_BIND_RETURN_SUCCESS) {
- /* case: successful binding discovery, create a new local candidate */
-
-@@ -2930,6 +3592,41 @@ priv_add_new_turn_refresh (CandidateDiscovery *cdisco, NiceCandidate *relay_cand
- return cand;
- }
-
-+static void priv_handle_turn_alternate_server (NiceAgent *agent,
-+ CandidateDiscovery *disco, NiceAddress server, NiceAddress alternate)
-+{
-+ /* We need to cancel and reset all candidate discovery turn for the same
-+ stream and type if there is an alternate server. Otherwise, we might end up
-+ with two relay components on different servers, creating candidates with
-+ unique foundations that only contain one component.
-+ */
-+ GSList *i;
-+
-+ for (i = agent->discovery_list; i; i = i->next) {
-+ CandidateDiscovery *d = i->data;
-+
-+ if (!d->done &&
-+ d->type == disco->type &&
-+ d->stream == disco->stream &&
-+ d->turn->type == disco->turn->type &&
-+ nice_address_equal (&d->server, &server)) {
-+ gchar ip[INET6_ADDRSTRLEN];
-+ // Cancel the pending request to avoid a race condition with another
-+ // component responding with another altenrate-server
-+ d->stun_message.buffer = NULL;
-+ d->stun_message.buffer_len = 0;
-+
-+ nice_address_to_string (&server, ip);
-+ nice_debug ("Agent %p : Cancelling and setting alternate server %s for "
-+ "CandidateDiscovery %p", agent, ip, d);
-+ d->server = alternate;
-+ d->turn->server = alternate;
-+ d->pending = FALSE;
-+ agent->discovery_unsched_items++;
-+ }
-+ }
-+}
-+
- /*
- * Tries to match STUN reply in 'buf' to an existing STUN discovery
- * transaction. If found, a reply is sent.
-@@ -2982,11 +3679,11 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
- agent, d, (int)res);
-
- if (res == STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER) {
-- /* handle alternate server */
-- nice_address_set_from_sockaddr (&d->server, &alternate.addr);
-- nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
-+ NiceAddress addr;
-
-- d->pending = FALSE;
-+ /* handle alternate server */
-+ nice_address_set_from_sockaddr (&addr, &alternate.addr);
-+ priv_handle_turn_alternate_server (agent, d, d->server, addr);
- } else if (res == STUN_USAGE_TURN_RETURN_RELAY_SUCCESS ||
- res == STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS) {
- /* case: successful allocate, create a new local candidate */
-@@ -3103,6 +3800,17 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
- recv_realm = (uint8_t *) stun_message_find (resp,
- STUN_ATTRIBUTE_REALM, &recv_realm_len);
-
-+ if ((agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
-+ agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
-+ alternatelen != sizeof(alternate)) {
-+ NiceAddress addr;
-+
-+ nice_address_set_from_sockaddr (&addr, &alternate.addr);
-+
-+ if (!nice_address_equal (&addr, &d->server)) {
-+ priv_handle_turn_alternate_server (agent, d, d->server, addr);
-+ }
-+ }
- /* check for unauthorized error response */
- if ((agent->compatibility == NICE_COMPATIBILITY_RFC5245 ||
- agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
-@@ -3123,6 +3831,7 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
- d->stun_resp_msg.buffer = d->stun_resp_buffer;
- d->stun_resp_msg.buffer_len = sizeof(d->stun_resp_buffer);
- d->pending = FALSE;
-+ agent->discovery_unsched_items++;
- } else {
- /* case: a real unauthorized error */
- d->stun_message.buffer = NULL;
-@@ -3619,8 +4328,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
- stun_usage_ice_conncheck_use_candidate (&req);
- uint32_t priority = stun_usage_ice_conncheck_priority (&req);
-
-- if (agent->controlling_mode ||
-- agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
-+ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
- agent->compatibility == NICE_COMPATIBILITY_MSN ||
- agent->compatibility == NICE_COMPATIBILITY_OC2007)
- use_candidate = TRUE;
-@@ -3628,21 +4336,21 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
- if (stream->initial_binding_request_received != TRUE)
- agent_signal_initial_binding_request_received (agent, stream);
-
-- if (component->remote_candidates && remote_candidate == NULL) {
-+ if (remote_candidate == NULL) {
- nice_debug ("Agent %p : No matching remote candidate for incoming check ->"
- "peer-reflexive candidate.", agent);
- remote_candidate = discovery_learn_remote_peer_reflexive_candidate (
- agent, stream, component, priority, from, nicesock,
- local_candidate,
- remote_candidate2 ? remote_candidate2 : remote_candidate);
-- if(remote_candidate) {
-+ if(remote_candidate && stream->remote_ufrag[0]) {
- if (local_candidate &&
- local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE) {
- CandidateCheckPair *pair;
-
- pair = priv_conn_check_add_for_candidate_pair_matched (agent,
- stream->id, component, local_candidate, remote_candidate,
-- NICE_CHECK_DISCOVERED);
-+ NICE_CHECK_SUCCEEDED);
- if (pair) {
- pair->valid = TRUE;
- }
-@@ -3651,13 +4359,15 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
- }
- }
-
-+ nice_component_add_valid_candidate (component, remote_candidate);
-+
- priv_reply_to_conn_check (agent, stream, component, local_candidate,
- remote_candidate, from, nicesock, rbuf_len, &msg, use_candidate);
-
-- if (component->remote_candidates == NULL) {
-+ if (stream->remote_ufrag[0] == 0) {
- /* case: We've got a valid binding request to a local candidate
-- * but we do not yet know remote credentials nor
-- * candidates. As per sect 7.2 of ICE (ID-19), we send a reply
-+ * but we do not yet know remote credentials.
-+ * As per sect 7.2 of ICE (ID-19), we send a reply
- * immediately but postpone all other processing until
- * we get information about the remote candidates */
-
-diff --git a/agent/conncheck.h b/agent/conncheck.h
-index 431c606..e16dc67 100644
---- a/agent/conncheck.h
-+++ b/agent/conncheck.h
-@@ -56,7 +56,6 @@
- * @NICE_CHECK_SUCCEEDED: Connection successfully checked.
- * @NICE_CHECK_FAILED: No connectivity; retransmissions ceased.
- * @NICE_CHECK_FROZEN: Waiting to be scheduled to %NICE_CHECK_WAITING.
-- * @NICE_CHECK_CANCELLED: Check cancelled.
- * @NICE_CHECK_DISCOVERED: A valid candidate pair not on the check list.
- *
- * States for checking a candidate pair.
-@@ -68,11 +67,19 @@ typedef enum
- NICE_CHECK_SUCCEEDED,
- NICE_CHECK_FAILED,
- NICE_CHECK_FROZEN,
-- NICE_CHECK_CANCELLED,
- NICE_CHECK_DISCOVERED,
- } NiceCheckState;
-
- typedef struct _CandidateCheckPair CandidateCheckPair;
-+typedef struct _StunTransaction StunTransaction;
-+
-+struct _StunTransaction
-+{
-+ GTimeVal next_tick; /* next tick timestamp */
-+ StunTimer timer;
-+ uint8_t buffer[STUN_MAX_MESSAGE_SIZE_IPV6];
-+ StunMessage message;
-+};
-
- struct _CandidateCheckPair
- {
-@@ -85,15 +92,15 @@ struct _CandidateCheckPair
- gchar foundation[NICE_CANDIDATE_PAIR_MAX_FOUNDATION];
- NiceCheckState state;
- gboolean nominated;
-- gboolean controlling;
-- gboolean timer_restarted;
- gboolean valid;
-+ gboolean use_candidate_on_next_check;
-+ gboolean mark_nominated_on_response_arrival;
-+ gboolean retransmit; /* if the first stun request must be retransmitted */
-+ CandidateCheckPair *discovered_pair;
-+ CandidateCheckPair *succeeded_pair;
- guint64 priority;
- guint32 prflx_priority;
-- GTimeVal next_tick; /* next tick timestamp */
-- StunTimer timer;
-- uint8_t stun_buffer[STUN_MAX_MESSAGE_SIZE_IPV6];
-- StunMessage stun_message;
-+ GSList *stun_transactions; /* a list of ongoing stun requests */
- };
-
- int conn_check_add_for_candidate (NiceAgent *agent, guint stream_id, NiceComponent *component, NiceCandidate *remote);
-@@ -105,7 +112,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair);
- void conn_check_prune_stream (NiceAgent *agent, NiceStream *stream);
- gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *udp_socket, const NiceAddress *from, gchar *buf, guint len);
- gint conn_check_compare (const CandidateCheckPair *a, const CandidateCheckPair *b);
--void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, NiceComponent *component);
-+void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream);
- NiceCandidateTransport conn_check_match_transport (NiceCandidateTransport transport);
- void
- conn_check_prune_socket (NiceAgent *agent, NiceStream *stream, NiceComponent *component,
-diff --git a/agent/debug.c b/agent/debug.c
-index e1a298c..84fee94 100644
---- a/agent/debug.c
-+++ b/agent/debug.c
-@@ -102,7 +102,7 @@ void nice_debug_init (void)
- flags |= g_parse_debug_string (gflags_string, gkeys, 4);
- if (gflags_string && strstr (gflags_string, "libnice-pseudotcp-verbose"))
- flags |= NICE_DEBUG_PSEUDOTCP_VERBOSE;
-- if (gflags_string && strstr (gflags_string, "libnice-nice-verbose")) {
-+ if (gflags_string && strstr (gflags_string, "libnice-verbose")) {
- flags |= NICE_DEBUG_NICE_VERBOSE;
- }
-
-diff --git a/agent/discovery.c b/agent/discovery.c
-index 7a890a0..4cc99c2 100644
---- a/agent/discovery.c
-+++ b/agent/discovery.c
-@@ -1072,11 +1072,11 @@ static gboolean priv_discovery_tick_unlocked (gpointer pointer)
-
- if (buffer_len > 0) {
- if (nice_socket_is_reliable (cand->nicesock)) {
-- stun_timer_start_reliable (&cand->timer,
-- STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT);
-+ stun_timer_start_reliable (&cand->timer, agent->stun_reliable_timeout);
- } else {
-- stun_timer_start (&cand->timer, 200,
-- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
-+ stun_timer_start (&cand->timer,
-+ agent->stun_initial_timeout,
-+ agent->stun_max_retransmissions);
- }
-
- /* send the conncheck */
-diff --git a/agent/interfaces.c b/agent/interfaces.c
-index 0fa2fd7..a81888e 100644
---- a/agent/interfaces.c
-+++ b/agent/interfaces.c
-@@ -276,6 +276,12 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
- nice_debug ("Ignoring loopback interface");
- g_free (addr_string);
- }
-+#ifdef IGNORED_IFACE_PREFIX
-+ } else if (g_str_has_prefix (ifa->ifa_name, IGNORED_IFACE_PREFIX)) {
-+ nice_debug ("Ignoring interface %s as it matches prefix %s",
-+ ifa->ifa_name, IGNORED_IFACE_PREFIX);
-+ g_free (addr_string);
-+#endif
- } else {
- if (nice_interfaces_is_private_ip (ifa->ifa_addr))
- ips = add_ip_to_list (ips, addr_string, TRUE);
-diff --git a/agent/stream.c b/agent/stream.c
-index 8121e12..533ff15 100644
---- a/agent/stream.c
-+++ b/agent/stream.c
-@@ -103,27 +103,6 @@ nice_stream_find_component_by_id (NiceStream *stream, guint id)
- return NULL;
- }
-
--/*
-- * Returns true if all components of the stream are either
-- * 'CONNECTED' or 'READY' (connected plus nominated).
-- */
--gboolean
--nice_stream_all_components_ready (NiceStream *stream)
--{
-- GSList *i;
--
-- for (i = stream->components; i; i = i->next) {
-- NiceComponent *component = i->data;
-- if (component &&
-- !(component->state == NICE_COMPONENT_STATE_CONNECTED ||
-- component->state == NICE_COMPONENT_STATE_READY))
-- return FALSE;
-- }
--
-- return TRUE;
--}
--
--
- /*
- * Initialized the local crendentials for the stream.
- */
-diff --git a/agent/stream.h b/agent/stream.h
-index f9188cb..954ba66 100644
---- a/agent/stream.h
-+++ b/agent/stream.h
-@@ -103,9 +103,6 @@ nice_stream_new (guint n_components, NiceAgent *agent);
- void
- nice_stream_close (NiceStream *stream);
-
--gboolean
--nice_stream_all_components_ready (NiceStream *stream);
--
- NiceComponent *
- nice_stream_find_component_by_id (NiceStream *stream, guint id);
-
-diff --git a/common.mk b/common.mk
-index e2ca3f4..b16380d 100644
---- a/common.mk
-+++ b/common.mk
-@@ -4,6 +4,8 @@ pkgincludedir = $(includedir)/nice
-
-
- check-valgrind:
-- $(MAKE) TESTS_ENVIRONMENT="sh $$(cd "$(top_srcdir)" && pwd)/scripts/valgrind.sh" check
-+ $(MAKE) TESTS_ENVIRONMENT="USE_VALGRIND=1 " check
-+
-+LOG_DRIVER=$(top_srcdir)/scripts/valgrind-test-driver
-
- .PHONY: check-valgrind
-diff --git a/configure.ac b/configure.ac
-index b39bfe3..16988ad 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -57,6 +57,7 @@ AC_PROG_CC
- AM_PROG_AR
- LT_PREREQ([2.2.6])
- LT_INIT([dlopen win32-dll disable-static])
-+AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
-
- # Check Operating System
- AC_MSG_CHECKING([operating system])
-@@ -153,7 +154,6 @@ AS_IF([test "$enable_compile_warnings" = "yes" -o \
- ])
- AS_IF([test "$enable_compile_warnings" = "maximum" -o \
- "$enable_compile_warnings" = "error"],[
-- NICE_ADD_FLAG([-Wswitch-enum])
- NICE_ADD_FLAG([-Wswitch-default])
- NICE_ADD_FLAG([-Waggregate-return])
- ])
-@@ -354,6 +354,20 @@ AM_CONDITIONAL([ENABLE_GTK_DOC], false)
- # GObject introspection
- GOBJECT_INTROSPECTION_CHECK([1.30.0])
-
-+dnl Ignore a specific network interface name prefix from the connection check
-+AC_MSG_CHECKING([whether to ignore a specific network interface name prefix])
-+AC_ARG_WITH([ignored-network-interface-prefix],
-+ [AS_HELP_STRING([--with-ignored-network-interface-prefix=string],
-+ [Ignore network interfaces whose name starts with "string" from the ICE connection
-+ check algorithm. For example, interfaces "virbr" in the case of the virtual bridge
-+ handled by libvirtd, do not help in finding connectivity.])],
-+ [interface_prefix="$withval"])
-+AS_IF([test -n "$interface_prefix"],
-+ [AC_DEFINE_UNQUOTED([IGNORED_IFACE_PREFIX],["$interface_prefix"],
-+ [Ignore this network interface prefix from the connection check])
-+ AC_MSG_RESULT([yes, $interface_prefix])],
-+ [AC_MSG_RESULT([no])])
-+
- AC_CONFIG_MACRO_DIR(m4)
-
- AC_OUTPUT
-diff --git a/docs/reference/libnice/libnice-docs.xml b/docs/reference/libnice/libnice-docs.xml
-index 53487bc..391be1a 100644
---- a/docs/reference/libnice/libnice-docs.xml
-+++ b/docs/reference/libnice/libnice-docs.xml
-@@ -105,6 +105,10 @@
- <title>Index of new symbols in 0.1.14</title>
- <xi:include href="xml/api-index-0.1.14.xml"><xi:fallback/></xi:include>
- </index>
-+ <index role="0.1.15">
-+ <title>Index of new symbols in 0.1.15</title>
-+ <xi:include href="xml/api-index-0.1.15.xml"><xi:fallback/></xi:include>
-+ </index>
- <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
- </part>
- </book>
-diff --git a/docs/reference/libnice/libnice-sections.txt b/docs/reference/libnice/libnice-sections.txt
-index d377257..a481106 100644
---- a/docs/reference/libnice/libnice-sections.txt
-+++ b/docs/reference/libnice/libnice-sections.txt
-@@ -5,6 +5,7 @@ NiceAgent
- NiceComponentState
- NiceComponentType
- NiceProxyType
-+NiceNominationMode
- NiceCompatibility
- NiceAgentRecvFunc
- NiceInputMessage
-@@ -12,6 +13,7 @@ NiceOutputMessage
- NICE_AGENT_MAX_REMOTE_CANDIDATES
- nice_agent_new
- nice_agent_new_reliable
-+nice_agent_new_full
- nice_agent_add_local_address
- nice_agent_set_port_range
- nice_agent_add_stream
-@@ -76,6 +78,7 @@ NICE_CANDIDATE_MAX_FOUNDATION
- nice_candidate_new
- nice_candidate_free
- nice_candidate_copy
-+nice_candidate_equal_target
- <SUBSECTION Standard>
- NICE_TYPE_CANDIDATE
- nice_candidate_get_type
-diff --git a/examples/Makefile.am b/examples/Makefile.am
-index 1e7decf..9c80854 100644
---- a/examples/Makefile.am
-+++ b/examples/Makefile.am
-@@ -18,7 +18,7 @@ AM_CFLAGS = \
- $(GLIB_CFLAGS) \
- $(GUPNP_CFLAGS)
-
--bin_PROGRAMS = simple-example threaded-example sdp-example
-+noinst_PROGRAMS = simple-example threaded-example sdp-example
-
- simple_example_SOURCES = simple-example.c
- simple_example_LDADD = $(top_builddir)/agent/libagent.la \
-diff --git a/nice/libnice.sym b/nice/libnice.sym
-index b04bb95..1e522ad 100644
---- a/nice/libnice.sym
-+++ b/nice/libnice.sym
-@@ -58,6 +58,7 @@ nice_agent_set_software
- nice_agent_set_stream_name
- nice_agent_set_stream_tos
- nice_candidate_copy
-+nice_candidate_equal_target
- nice_candidate_free
- nice_candidate_new
- nice_component_state_to_string
-diff --git a/scripts/valgrind-test-driver b/scripts/valgrind-test-driver
-new file mode 100755
-index 0000000..5b660ee
---- /dev/null
-+++ b/scripts/valgrind-test-driver
-@@ -0,0 +1,162 @@
-+#! /bin/sh
-+# test-driver - basic testsuite driver script.
-+
-+scriptversion=2017-04-04.22; # UTC
-+
-+# Copyright (C) 2011-2014 Free Software Foundation, Inc.
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2, or (at your option)
-+# any later version.
-+#
-+# This program is distributed in the hope that it will be useful,
-+# but WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+# GNU General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program. If not, see <http://www.gnu.org/licenses/>.
-+
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# This file is maintained in Automake, please report
-+# bugs to <bug-automake(a)gnu.org> or send patches to
-+# <automake-patches(a)gnu.org>.
-+
-+# Make unconditional expansion of undefined variables an error. This
-+# helps a lot in preventing typo-related bugs.
-+set -u
-+
-+usage_error ()
-+{
-+ echo "$0: $*" >&2
-+ print_usage >&2
-+ exit 2
-+}
-+
-+print_usage ()
-+{
-+ cat <<END
-+Usage:
-+ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
-+ [--expect-failure={yes|no}] [--color-tests={yes|no}]
-+ [--enable-hard-errors={yes|no}] [--]
-+ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
-+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
-+END
-+}
-+
-+test_name= # Used for reporting.
-+log_file= # Where to save the output of the test script.
-+trs_file= # Where to save the metadata of the test run.
-+expect_failure=no
-+color_tests=no
-+enable_hard_errors=yes
-+while test $# -gt 0; do
-+ case $1 in
-+ --help) print_usage; exit $?;;
-+ --version) echo "test-driver $scriptversion"; exit $?;;
-+ --test-name) test_name=$2; shift;;
-+ --log-file) log_file=$2; shift;;
-+ --trs-file) trs_file=$2; shift;;
-+ --color-tests) color_tests=$2; shift;;
-+ --expect-failure) expect_failure=$2; shift;;
-+ --enable-hard-errors) enable_hard_errors=$2; shift;;
-+ --) shift; break;;
-+ -*) usage_error "invalid option: '$1'";;
-+ *) break;;
-+ esac
-+ shift
-+done
-+
-+missing_opts=
-+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
-+test x"$log_file" = x && missing_opts="$missing_opts --log-file"
-+test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
-+if test x"$missing_opts" != x; then
-+ usage_error "the following mandatory options are missing:$missing_opts"
-+fi
-+
-+if test $# -eq 0; then
-+ usage_error "missing argument"
-+fi
-+
-+if test $color_tests = yes; then
-+ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
-+ red='[0;31m' # Red.
-+ grn='[0;32m' # Green.
-+ lgn='[1;32m' # Light green.
-+ blu='[1;34m' # Blue.
-+ mgn='[0;35m' # Magenta.
-+ std='[m' # No color.
-+else
-+ red= grn= lgn= blu= mgn= std=
-+fi
-+
-+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
-+trap "st=129; $do_exit" 1
-+trap "st=130; $do_exit" 2
-+trap "st=141; $do_exit" 13
-+trap "st=143; $do_exit" 15
-+
-+# Test script is run here.
-+top_srcdir="`dirname $0`/.."
-+tests_dir="${top_srcdir}/tests"
-+
-+USE_VALGRIND="`printenv USE_VALGRIND`"
-+
-+if test "x${USE_VALGRIND}" = "x1"; then
-+ ${top_srcdir}/libtool --mode=execute valgrind \
-+ --leak-check=full \
-+ --show-reachable=no \
-+ --error-exitcode=1 \
-+ --suppressions=$tests_dir/libnice.supp \
-+ --num-callers=30 "$@" >$log_file 2>&1
-+else
-+ "$@" >$log_file 2>&1
-+fi
-+estatus=$?
-+
-+if test $enable_hard_errors = no && test $estatus -eq 99; then
-+ tweaked_estatus=1
-+else
-+ tweaked_estatus=$estatus
-+fi
-+
-+case $tweaked_estatus:$expect_failure in
-+ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
-+ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
-+ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
-+ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
-+ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
-+ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
-+esac
-+
-+# Report the test outcome and exit status in the logs, so that one can
-+# know whether the test passed or failed simply by looking at the '.log'
-+# file, without the need of also peaking into the corresponding '.trs'
-+# file (automake bug#11814).
-+echo "$res $test_name (exit status: $estatus)" >>$log_file
-+
-+# Report outcome to console.
-+echo "${col}${res}${std}: $test_name"
-+
-+# Register the test result, and other relevant metadata.
-+echo ":test-result: $res" > $trs_file
-+echo ":global-test-result: $res" >> $trs_file
-+echo ":recheck: $recheck" >> $trs_file
-+echo ":copy-in-global-log: $gcopy" >> $trs_file
-+
-+# Local Variables:
-+# mode: shell-script
-+# sh-indentation: 2
-+# eval: (add-hook 'write-file-hooks 'time-stamp)
-+# time-stamp-start: "scriptversion="
-+# time-stamp-format: "%:y-%02m-%02d.%02H"
-+# time-stamp-time-zone: "UTC"
-+# time-stamp-end: "; # UTC"
-+# End:
-diff --git a/scripts/valgrind.sh b/scripts/valgrind.sh
-deleted file mode 100755
-index 2864b6f..0000000
---- a/scripts/valgrind.sh
-+++ /dev/null
-@@ -1,28 +0,0 @@
--#!/bin/sh
--
--export G_SLICE=always-malloc
--export G_DEBUG=gc-friendly
--
--tests_dir="`dirname $0`/../tests"
--
--report=`libtool --mode=execute valgrind \
-- --leak-check=full \
-- --show-reachable=no \
-- --error-exitcode=1 \
-- --suppressions=$tests_dir/libnice.supp \
-- --num-callers=30 \
-- $1 2>&1`
--
--#if echo "$report" | grep -q ==; then
--if test $? != 0; then
-- echo "$report"
-- exit 1
--fi
--
--if echo "$report" | grep -q "definitely lost"; then
-- if ! echo "$report" | grep -q "definitely lost: 0 bytes"; then
-- echo "$report"
-- exit 1
-- fi
--fi
--
-diff --git a/socket/udp-turn.c b/socket/udp-turn.c
-index cc3409b..190a9ea 100644
---- a/socket/udp-turn.c
-+++ b/socket/udp-turn.c
-@@ -174,8 +174,8 @@ priv_send_data_queue_destroy (gpointer user_data)
-
- NiceSocket *
- nice_udp_turn_socket_new (GMainContext *ctx, NiceAddress *addr,
-- NiceSocket *base_socket, NiceAddress *server_addr,
-- gchar *username, gchar *password,
-+ NiceSocket *base_socket, const NiceAddress *server_addr,
-+ const gchar *username, const gchar *password,
- NiceTurnSocketCompatibility compatibility)
- {
- UdpTurnPriv *priv;
-@@ -406,9 +406,8 @@ socket_recv_messages (NiceSocket *sock,
-
- /* Split up the monolithic buffer again into the caller-provided buffers. */
- if (parsed_buffer_length > 0 && allocated_buffer) {
-- parsed_buffer_length =
-- memcpy_buffer_to_input_message (message, buffer,
-- parsed_buffer_length);
-+ memcpy_buffer_to_input_message (message, buffer,
-+ parsed_buffer_length);
- }
-
- if (allocated_buffer)
-@@ -1185,7 +1184,7 @@ nice_udp_turn_socket_parse_recv_message (NiceSocket *sock, NiceSocket **from_soc
- gsize
- nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
- NiceAddress *from, gsize len, guint8 *buf,
-- NiceAddress *recv_from, guint8 *_recv_buf, gsize recv_len)
-+ const NiceAddress *recv_from, const guint8 *_recv_buf, gsize recv_len)
- {
-
- UdpTurnPriv *priv = (UdpTurnPriv *) sock->priv;
-@@ -1195,8 +1194,8 @@ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
- ChannelBinding *binding = NULL;
-
- union {
-- guint8 *u8;
-- guint16 *u16;
-+ const guint8 *u8;
-+ const guint16 *u16;
- } recv_buf;
-
- /* In the case of a reliable UDP-TURN-OVER-TCP (which means MS-TURN)
-diff --git a/socket/udp-turn.h b/socket/udp-turn.h
-index b1eeeb4..df10a1c 100644
---- a/socket/udp-turn.h
-+++ b/socket/udp-turn.h
-@@ -59,15 +59,16 @@ nice_udp_turn_socket_parse_recv_message (NiceSocket *sock, NiceSocket **from_soc
- gsize
- nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
- NiceAddress *from, gsize len, guint8 *buf,
-- NiceAddress *recv_from, guint8 *recv_buf, gsize recv_len);
-+ const NiceAddress *recv_from, const guint8 *recv_buf, gsize recv_len);
-
- gboolean
- nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer);
-
- NiceSocket *
- nice_udp_turn_socket_new (GMainContext *ctx, NiceAddress *addr,
-- NiceSocket *base_socket, NiceAddress *server_addr,
-- gchar *username, gchar *password, NiceTurnSocketCompatibility compatibility);
-+ NiceSocket *base_socket, const NiceAddress *server_addr,
-+ const gchar *username, const gchar *password,
-+ NiceTurnSocketCompatibility compatibility);
-
- void
- nice_udp_turn_socket_set_ms_realm(NiceSocket *sock, StunMessage *msg);
-diff --git a/stun/stunmessage.c b/stun/stunmessage.c
-index e8184c4..4cc3392 100644
---- a/stun/stunmessage.c
-+++ b/stun/stunmessage.c
-@@ -120,6 +120,7 @@ stun_message_find (const StunMessage *msg, StunAttribute type,
- /* Only fingerprint may come after M-I */
- if (type == STUN_ATTRIBUTE_FINGERPRINT)
- break;
-+ return NULL;
-
- case STUN_ATTRIBUTE_FINGERPRINT:
- /* Nothing may come after FPR */
-diff --git a/stun/usages/bind.c b/stun/usages/bind.c
-index 8dd7afc..ee600a0 100644
---- a/stun/usages/bind.c
-+++ b/stun/usages/bind.c
-@@ -479,7 +479,7 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
- size_t len;
- StunUsageTransReturn ret;
- int val;
-- struct sockaddr_storage alternate_server;
-+ struct sockaddr_storage alternate_server = { AF_UNSPEC } ;
- socklen_t alternate_server_len = sizeof (alternate_server);
- StunUsageBindReturn bind_ret;
-
-@@ -491,13 +491,15 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
- ret = stun_trans_create (&trans, SOCK_DGRAM, 0, srv, srvlen);
- if (ret != STUN_USAGE_TRANS_RETURN_SUCCESS) {
- stun_debug ("STUN transaction failed: couldn't create transport.");
-- return STUN_USAGE_BIND_RETURN_ERROR;
-+ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
-+ goto done;
- }
-
- val = stun_trans_send (&trans, req_buf, len);
- if (val < -1) {
- stun_debug ("STUN transaction failed: couldn't send request.");
-- return STUN_USAGE_BIND_RETURN_ERROR;
-+ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
-+ goto done;
- }
-
- stun_timer_start (&timer, STUN_TIMER_DEFAULT_TIMEOUT,
-@@ -514,14 +516,16 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
- switch (stun_timer_refresh (&timer)) {
- case STUN_USAGE_TIMER_RETURN_TIMEOUT:
- stun_debug ("STUN transaction failed: time out.");
-- return STUN_USAGE_BIND_RETURN_TIMEOUT; // fatal error!
-+ bind_ret = STUN_USAGE_BIND_RETURN_TIMEOUT; // fatal error!
-+ goto done;
- case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
- stun_debug ("STUN transaction retransmitted (timeout %dms).",
- stun_timer_remainder (&timer));
- val = stun_trans_send (&trans, req_buf, len);
- if (val < -1) {
- stun_debug ("STUN transaction failed: couldn't resend request.");
-- return STUN_USAGE_BIND_RETURN_ERROR;
-+ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
-+ goto done;
- }
- continue;
- case STUN_USAGE_TIMER_RETURN_SUCCESS:
-@@ -538,7 +542,10 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
-
- valid = stun_agent_validate (&agent, &msg, buf, val, NULL, NULL);
- if (valid == STUN_VALIDATION_UNKNOWN_ATTRIBUTE)
-- return STUN_USAGE_BIND_RETURN_ERROR;
-+ {
-+ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
-+ goto done;
-+ }
-
- if (valid != STUN_VALIDATION_SUCCESS) {
- ret = STUN_USAGE_TRANS_RETURN_RETRY;
-@@ -548,16 +555,22 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
- if (bind_ret == STUN_USAGE_BIND_RETURN_ALTERNATE_SERVER) {
- stun_trans_deinit (&trans);
-
-+ assert (alternate_server.ss_family != AF_UNSPEC);
-+
- ret = stun_trans_create (&trans, SOCK_DGRAM, 0,
- (struct sockaddr *) &alternate_server, alternate_server_len);
-
- if (ret != STUN_USAGE_TRANS_RETURN_SUCCESS) {
-- return STUN_USAGE_BIND_RETURN_ERROR;
-+ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
-+ goto done;
- }
-
- val = stun_trans_send (&trans, req_buf, len);
- if (val < -1)
-- return STUN_USAGE_BIND_RETURN_ERROR;
-+ {
-+ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
-+ goto done;
-+ }
-
- stun_timer_start (&timer, STUN_TIMER_DEFAULT_TIMEOUT,
- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
-@@ -571,5 +584,9 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
- }
- while (ret == STUN_USAGE_TRANS_RETURN_RETRY);
-
-+done:
-+ if (trans.fd != -1)
-+ stun_trans_deinit (&trans);
-+
- return bind_ret;
- }
-diff --git a/stun/usages/timer.c b/stun/usages/timer.c
-index 2862ab8..5370cba 100644
---- a/stun/usages/timer.c
-+++ b/stun/usages/timer.c
-@@ -145,7 +145,11 @@ StunUsageTimerReturn stun_timer_refresh (StunTimer *timer)
- if (timer->retransmissions >= timer->max_retransmissions)
- return STUN_USAGE_TIMER_RETURN_TIMEOUT;
-
-- add_delay (&timer->deadline, timer->delay *= 2);
-+ if (timer->retransmissions == timer->max_retransmissions - 1)
-+ timer->delay = timer->delay / 2;
-+ else
-+ timer->delay = timer->delay * 2;
-+ add_delay (&timer->deadline, timer->delay);
- timer->retransmissions++;
- return STUN_USAGE_TIMER_RETURN_RETRANSMIT;
- }
-diff --git a/stun/usages/timer.h b/stun/usages/timer.h
-index e74353b..097e75b 100644
---- a/stun/usages/timer.h
-+++ b/stun/usages/timer.h
-@@ -132,7 +132,11 @@ struct stun_timer_s {
- * The default intial timeout to use for the timer
- * RFC recommendds 500, but it's ridiculous, 50ms is known to work in most
- * cases as it is also what is used by SIP style VoIP when sending A-Law and
-- * mu-Law audio, so 200ms should be hyper safe.
-+ * mu-Law audio, so 200ms should be hyper safe. With an initial timeout
-+ * of 200ms, a default of 7 transmissions, the last timeout will be
-+ * 16 * 200ms, and we expect to receive a response from the stun server
-+ * before (1 + 2 + 4 + 8 + 16 + 32 + 16) * 200ms = 15200 ms after the initial
-+ * stun request has been sent.
- */
- #define STUN_TIMER_DEFAULT_TIMEOUT 200
-
-diff --git a/stun/usages/turn.c b/stun/usages/turn.c
-index 3b94959..ec12642 100644
---- a/stun/usages/turn.c
-+++ b/stun/usages/turn.c
-@@ -300,6 +300,17 @@ StunUsageTurnReturn stun_usage_turn_process (StunMessage *msg,
- stun_debug (" STUN error message received (code: %d)", code);
-
- /* ALTERNATE-SERVER mechanism */
-+ if (compatibility == STUN_USAGE_TURN_COMPATIBILITY_OC2007 &&
-+ alternate_server && alternate_server_len &&
-+ stun_message_find_addr (msg, STUN_ATTRIBUTE_MS_ALTERNATE_SERVER,
-+ alternate_server,
-+ alternate_server_len) == STUN_MESSAGE_RETURN_SUCCESS) {
-+ stun_debug ("Found alternate server");
-+ /* The ALTERNATE_SERVER will always be returned by the MS turn server.
-+ * We need to check if the ALTERNATE_SERVER is the same as the current
-+ * server to decide whether we need to switch servers or not.
-+ */
-+ }
- if ((code / 100) == 3) {
- if (alternate_server && alternate_server_len) {
- if (stun_message_find_addr (msg, STUN_ATTRIBUTE_ALTERNATE_SERVER,
-diff --git a/stun/usages/turn.h b/stun/usages/turn.h
-index 7a2d4e6..83fa00a 100644
---- a/stun/usages/turn.h
-+++ b/stun/usages/turn.h
-@@ -256,6 +256,10 @@ size_t stun_usage_turn_create_permission (StunAgent *agent, StunMessage *msg,
- * Allocate request, in case the currently used TURN server is requesting the use
- * of an alternate server. This argument will only be filled if the return value
- * of the function is #STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER
-+ * In the case of @STUN_USAGE_TURN_COMPATIBILITY_OC2007 compatibility, the
-+ * @alternate_server could be filled at any time, and should only be considered
-+ * if the request was sent to a different server than the address returned
-+ * in the @alternate_server field
- * @alternate_server_len: The length of @alternate_server
- * @bandwidth: A pointer to fill with the bandwidth the TURN server allocated us
- * @lifetime: A pointer to fill with the lifetime of the allocation
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index 7bfe075..30d6f8e 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -24,7 +24,7 @@ AM_CPPFLAGS = -DG_LOG_DOMAIN=\"libnice-tests\"
-
- AM_TESTS_ENVIRONMENT = \
- G_MESSAGES_DEBUG=all \
-- NICE_DEBUG=all;
-+ NICE_DEBUG=all
-
- COMMON_LDADD = $(top_builddir)/agent/libagent.la $(top_builddir)/socket/libsocket.la $(GLIB_LIBS) $(GUPNP_LIBS)
-
-@@ -45,8 +45,8 @@ check_PROGRAMS = \
- test-send-recv \
- test-socket-is-based-on \
- test-priority \
-- test-mainloop \
- test-fullmode \
-+ test-different-number-streams \
- test-restart \
- test-fallback \
- test-thread \
-@@ -55,7 +55,9 @@ check_PROGRAMS = \
- test-tcp \
- test-icetcp \
- test-credentials \
-- test-turn
-+ test-turn \
-+ test-drop-invalid \
-+ test-nomination
-
- dist_check_SCRIPTS = \
- check-test-fullmode-with-stun.sh \
-@@ -113,6 +115,8 @@ test_mainloop_LDADD = $(COMMON_LDADD)
-
- test_fullmode_LDADD = $(COMMON_LDADD)
-
-+test_different_number_streams_LDADD = $(COMMON_LDADD)
-+
- test_restart_LDADD = $(COMMON_LDADD)
-
- test_fallback_LDADD = $(COMMON_LDADD)
-@@ -129,6 +133,10 @@ test_credentials_LDADD = $(COMMON_LDADD)
-
- test_turn_LDADD = $(COMMON_LDADD)
-
-+test_drop_invalid_LDADD = $(COMMON_LDADD)
-+
-+test_nomination_LDADD = $(COMMON_LDADD)
-+
- test_gstreamer_CFLAGS = $(AM_CFLAGS) $(GST_CHECK_CFLAGS)
- test_gstreamer_LDADD = -lnice -L$(top_builddir)/nice/.libs $(GLIB_LIBS) $(GUPNP_LIBS) $(GST_CHECK_LIBS) $(GST_LIBS)
-
-diff --git a/tests/test-credentials.c b/tests/test-credentials.c
-index 1de4e49..f1ea89d 100644
---- a/tests/test-credentials.c
-+++ b/tests/test-credentials.c
-@@ -184,6 +184,8 @@ int main (void)
- nice_agent_get_local_credentials (lagent, 1, &ufrag, &password);
- g_assert (g_strcmp0("unicorns", ufrag) == 0);
- g_assert (g_strcmp0("awesome", password) == 0);
-+ g_free (ufrag);
-+ g_free (password);
-
- nice_agent_gather_candidates (lagent, 1);
- nice_agent_gather_candidates (ragent, 1);
-diff --git a/tests/test-different-number-streams.c b/tests/test-different-number-streams.c
-new file mode 100644
-index 0000000..7fd4763
---- /dev/null
-+++ b/tests/test-different-number-streams.c
-@@ -0,0 +1,208 @@
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "agent.h"
-+
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#define ADD_2_STREAMS TRUE
-+#define USE_SECOND_STREAM TRUE
-+
-+static GMainLoop *global_mainloop = NULL;
-+
-+static guint global_components_ready = 0;
-+static guint global_components_ready_exit = 0;
-+
-+static gboolean timer_cb (gpointer pointer)
-+{
-+ g_debug ("test-different-number-streams:%s: %p", G_STRFUNC, pointer);
-+
-+ /* signal status via a global variable */
-+
-+ /* note: should not be reached, abort */
-+ g_error ("ERROR: test has got stuck, aborting...");
-+
-+ return FALSE;
-+}
-+
-+static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
-+{
-+ g_debug ("%p: gathering done (stream_id: %u)", agent, stream_id);
-+}
-+
-+static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
-+{
-+ g_debug ("%p: component state changed (stream_id: %u, component_id: %u, state: %s)",
-+ agent, stream_id, component_id, nice_component_state_to_string (state));
-+
-+ if (state == NICE_COMPONENT_STATE_READY) {
-+ global_components_ready++;
-+ }
-+
-+ /* signal status via a global variable */
-+ if (global_components_ready == global_components_ready_exit) {
-+ g_debug ("Components ready/failed achieved. Stopping mailoop");
-+ g_main_loop_quit (global_mainloop);
-+ }
-+}
-+
-+static void set_candidates (NiceAgent *from, guint from_stream,
-+ NiceAgent *to, guint to_stream, guint component)
-+{
-+ GSList *cands = NULL, *i;
-+
-+ cands = nice_agent_get_local_candidates (from, from_stream, component);
-+ nice_agent_set_remote_candidates (to, to_stream, component, cands);
-+
-+ for (i = cands; i; i = i->next)
-+ nice_candidate_free ((NiceCandidate *) i->data);
-+ g_slist_free (cands);
-+}
-+
-+static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
-+{
-+ g_debug ("%p: recv (stream_id: %u, component_id: %u)", agent, stream_id, component_id);
-+}
-+
-+int main (void)
-+{
-+ NiceAgent *lagent, *ragent;
-+ guint timer_id;
-+ guint ls_id, rs_id_1, rs_id_2;
-+ gchar *lufrag = NULL, *lpassword = NULL;
-+ gchar *rufrag1 = NULL, *rpassword1 = NULL, *rufrag2 = NULL, *rpassword2 = NULL;
-+
-+#ifdef G_OS_WIN32
-+ WSADATA w;
-+
-+ WSAStartup(0x0202, &w);
-+#endif
-+
-+ global_mainloop = g_main_loop_new (NULL, FALSE);
-+
-+ /* step: create the agents L and R */
-+ lagent = nice_agent_new (g_main_loop_get_context (global_mainloop),
-+ NICE_COMPATIBILITY_GOOGLE);
-+ g_debug ("lagent: %p", lagent);
-+ nice_agent_set_software (lagent, "test-different-number-streams, Left Agent");
-+ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
-+ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
-+ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
-+ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
-+ G_CALLBACK (cb_candidate_gathering_done), NULL);
-+ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
-+ G_CALLBACK (cb_component_state_changed), NULL);
-+
-+ ragent = nice_agent_new (g_main_loop_get_context (global_mainloop),
-+ NICE_COMPATIBILITY_GOOGLE);
-+ g_debug ("ragent: %p", ragent);
-+ nice_agent_set_software (ragent, "test-different-number-streams, Right Agent");
-+ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
-+ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
-+ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
-+ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
-+ G_CALLBACK (cb_candidate_gathering_done), NULL);
-+ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
-+ G_CALLBACK (cb_component_state_changed), NULL);
-+
-+ /* step: add a timer to catch state changes triggered by signals */
-+ timer_id = g_timeout_add (30000, timer_cb, NULL);
-+
-+ ls_id = nice_agent_add_stream (lagent, 2);
-+ g_assert (ls_id > 0);
-+ nice_agent_get_local_credentials(lagent, ls_id, &lufrag, &lpassword);
-+
-+ /* step: attach to mainloop (needed to register the fds) */
-+ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+
-+ global_components_ready_exit = 4;
-+
-+ if (ADD_2_STREAMS) {
-+ rs_id_1 = nice_agent_add_stream (ragent, 2);
-+ g_assert (rs_id_1 > 0);
-+ nice_agent_get_local_credentials(ragent, rs_id_1, &rufrag1, &rpassword1);
-+
-+ rs_id_2 = nice_agent_add_stream (ragent, 2);
-+ g_assert (rs_id_2 > 0);
-+ nice_agent_get_local_credentials(ragent, rs_id_2, &rufrag2, &rpassword2);
-+
-+ nice_agent_set_remote_credentials (ragent, rs_id_2, lufrag, lpassword);
-+ nice_agent_set_remote_credentials (lagent, ls_id, rufrag2, rpassword2);
-+
-+ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
-+ g_assert (nice_agent_gather_candidates (ragent, rs_id_2) == TRUE);
-+ g_assert (nice_agent_gather_candidates (ragent, rs_id_1) == TRUE);
-+
-+ if (USE_SECOND_STREAM) {
-+ set_candidates (ragent, rs_id_2, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (ragent, rs_id_2, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
-+ set_candidates (lagent, ls_id, ragent, rs_id_2, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (lagent, ls_id, ragent, rs_id_2, NICE_COMPONENT_TYPE_RTCP);
-+ } else {
-+ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
-+ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP);
-+ }
-+
-+ /* step: attach to mainloop (needed to register the fds) */
-+ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+ nice_agent_attach_recv (ragent, rs_id_2, NICE_COMPONENT_TYPE_RTP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+ nice_agent_attach_recv (ragent, rs_id_2, NICE_COMPONENT_TYPE_RTCP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+ } else {
-+ rs_id_1 = nice_agent_add_stream (ragent, 2);
-+ g_assert (rs_id_1 > 0);
-+ nice_agent_get_local_credentials(ragent, rs_id_1, &rufrag1, &rpassword1);
-+
-+ nice_agent_set_remote_credentials (ragent, rs_id_1, lufrag, lpassword);
-+ nice_agent_set_remote_credentials (lagent, ls_id, rufrag1, rpassword1);
-+
-+ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
-+ g_assert (nice_agent_gather_candidates (ragent, rs_id_1) == TRUE);
-+
-+ /* step: attach to mainloop (needed to register the fds) */
-+ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
-+
-+ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
-+ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP);
-+ }
-+
-+ /* step: run the mainloop until connectivity checks succeed
-+ * (see timer_cb() above) */
-+ g_main_loop_run (global_mainloop);
-+
-+ g_free (lufrag);
-+ g_free (lpassword);
-+ g_free (rufrag1);
-+ g_free (rpassword1);
-+ g_free (rufrag2);
-+ g_free (rpassword2);
-+ g_object_unref (lagent);
-+ g_object_unref (ragent);
-+
-+ g_main_loop_unref (global_mainloop);
-+ global_mainloop = NULL;
-+
-+ g_source_remove (timer_id);
-+
-+#ifdef G_OS_WIN32
-+ WSACleanup();
-+#endif
-+
-+ return 0;
-+}
-diff --git a/tests/test-drop-invalid.c b/tests/test-drop-invalid.c
-new file mode 100644
-index 0000000..97e3586
---- /dev/null
-+++ b/tests/test-drop-invalid.c
-@@ -0,0 +1,517 @@
-+/*
-+ * This file is part of the Nice GLib ICE library.
-+ *
-+ * Unit test for ICE full-mode related features.
-+ *
-+ * (C) 2007 Nokia Corporation. All rights reserved.
-+ * Contact: Kai Vehmanen
-+ * (C) 2017 Collabora Ltd
-+ * Contact: Olivier Crete <olivier.crete(a)collabora.com>
-+ *
-+ * The contents of this file are subject to the Mozilla Public License Version
-+ * 1.1 (the "License"); you may not use this file except in compliance with
-+ * the License. You may obtain a copy of the License at
-+ * http://www.mozilla.org/MPL/
-+ *
-+ * Software distributed under the License is distributed on an "AS IS" basis,
-+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-+ * for the specific language governing rights and limitations under the
-+ * License.
-+ *
-+ * The Original Code is the Nice GLib ICE library.
-+ *
-+ * The Initial Developers of the Original Code are Collabora Ltd and Nokia
-+ * Corporation. All Rights Reserved.
-+ *
-+ * Contributors:
-+ * Kai Vehmanen, Nokia
-+ *
-+ * Alternatively, the contents of this file may be used under the terms of the
-+ * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
-+ * case the provisions of LGPL are applicable instead of those above. If you
-+ * wish to allow use of your version of this file only under the terms of the
-+ * LGPL and not to allow others to use your version of this file under the
-+ * MPL, indicate your decision by deleting the provisions above and replace
-+ * them with the notice and other provisions required by the LGPL. If you do
-+ * not delete the provisions above, a recipient may use your version of this
-+ * file under either the MPL or the LGPL.
-+ */
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "agent.h"
-+
-+#include "socket/socket.h"
-+
-+#include <stdlib.h>
-+#include <string.h>
-+
-+
-+
-+static NiceComponentState global_lagent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
-+static NiceComponentState global_ragent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
-+static guint global_components_ready = 0;
-+static guint global_components_ready_exit = 0;
-+static guint global_components_failed = 0;
-+static guint global_components_failed_exit = 0;
-+static GMainLoop *global_mainloop = NULL;
-+static gboolean global_lagent_gathering_done = FALSE;
-+static gboolean global_ragent_gathering_done = FALSE;
-+static gboolean global_lagent_ibr_received = FALSE;
-+static gboolean global_ragent_ibr_received = FALSE;
-+static int global_lagent_cands = 0;
-+static int global_ragent_cands = 0;
-+static gint global_ragent_read = 0;
-+static guint global_exit_when_ibr_received = 0;
-+
-+static void priv_print_global_status (void)
-+{
-+ g_debug ("\tgathering_done=%d", global_lagent_gathering_done && global_ragent_gathering_done);
-+ g_debug ("\tlstate[rtp]=%d [rtcp]=%d", global_lagent_state[0], global_lagent_state[1]);
-+ g_debug ("\trstate[rtp]=%d [rtcp]=%d", global_ragent_state[0], global_ragent_state[1]);
-+ g_debug ("\tL cands=%d R cands=%d", global_lagent_cands, global_ragent_cands);
-+}
-+
-+static gboolean timer_cb (gpointer pointer)
-+{
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, pointer);
-+
-+ /* signal status via a global variable */
-+
-+ /* note: should not be reached, abort */
-+ g_error ("ERROR: test has got stuck, aborting...");
-+
-+ return FALSE;
-+}
-+
-+static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
-+{
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, user_data);
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent; (void)stream_id; (void)component_id; (void)buf;
-+
-+ /* Core of the test
-+ * Assert on any unreleated packet received. This would include anything
-+ * send before the negotiation is over.
-+ */
-+ g_assert (len == 16);
-+ g_assert (strncmp ("1234567812345678", buf, 16) == 0);
-+
-+ if (component_id == 2)
-+ return;
-+
-+ if (GPOINTER_TO_UINT (user_data) == 2) {
-+ g_debug ("right agent received %d bytes, stopping mainloop", len);
-+ global_ragent_read = len;
-+ g_main_loop_quit (global_mainloop);
-+ }
-+}
-+
-+static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
-+{
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1)
-+ global_lagent_gathering_done = TRUE;
-+ else if (GPOINTER_TO_UINT (data) == 2)
-+ global_ragent_gathering_done = TRUE;
-+
-+ if (global_lagent_gathering_done &&
-+ global_ragent_gathering_done)
-+ g_main_loop_quit (global_mainloop);
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent;
-+}
-+
-+static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
-+{
-+ gboolean ready_to_connected = FALSE;
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1) {
-+ if (global_lagent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
-+ state == NICE_COMPONENT_STATE_CONNECTED)
-+ ready_to_connected = TRUE;
-+ global_lagent_state[component_id - 1] = state;
-+ } else if (GPOINTER_TO_UINT (data) == 2) {
-+ if (global_ragent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
-+ state == NICE_COMPONENT_STATE_CONNECTED)
-+ ready_to_connected = TRUE;
-+ global_ragent_state[component_id - 1] = state;
-+ }
-+
-+ if (state == NICE_COMPONENT_STATE_READY)
-+ global_components_ready++;
-+ else if (state == NICE_COMPONENT_STATE_CONNECTED && ready_to_connected)
-+ global_components_ready--;
-+ if (state == NICE_COMPONENT_STATE_FAILED)
-+ global_components_failed++;
-+
-+ g_debug ("test-drop-invalid: checks READY/EXIT-AT %u/%u.", global_components_ready, global_components_ready_exit);
-+ g_debug ("test-drop-invalid: checks FAILED/EXIT-AT %u/%u.", global_components_failed, global_components_failed_exit);
-+
-+ /* signal status via a global variable */
-+ if (global_components_ready == global_components_ready_exit &&
-+ global_components_failed == global_components_failed_exit) {
-+ g_debug ("Components ready/failed achieved. Stopping mailoop");
-+ g_main_loop_quit (global_mainloop);
-+ return;
-+ }
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent; (void)stream_id; (void)data; (void)component_id;
-+}
-+
-+static void cb_new_selected_pair(NiceAgent *agent, guint stream_id, guint component_id,
-+ gchar *lfoundation, gchar* rfoundation, gpointer data)
-+{
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1)
-+ ++global_lagent_cands;
-+ else if (GPOINTER_TO_UINT (data) == 2)
-+ ++global_ragent_cands;
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent; (void)stream_id; (void)component_id; (void)lfoundation; (void)rfoundation;
-+}
-+
-+static void cb_new_candidate(NiceAgent *agent, guint stream_id, guint component_id,
-+ gchar *foundation, gpointer data)
-+{
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent; (void)stream_id; (void)data; (void)component_id; (void)foundation;
-+}
-+
-+static void cb_initial_binding_request_received(NiceAgent *agent, guint stream_id, gpointer data)
-+{
-+ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1)
-+ global_lagent_ibr_received = TRUE;
-+ else if (GPOINTER_TO_UINT (data) == 2)
-+ global_ragent_ibr_received = TRUE;
-+
-+ if (global_exit_when_ibr_received) {
-+ g_debug ("Received initial binding request. Stopping mailoop");
-+ g_main_loop_quit (global_mainloop);
-+ }
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent; (void)stream_id; (void)data;
-+}
-+
-+static void set_candidates (NiceAgent *from, guint from_stream,
-+ NiceAgent *to, guint to_stream, guint component)
-+{
-+ GSList *cands = NULL;
-+ GSList *peer_cands = NULL;
-+ GSList *item1, *item2;
-+
-+ cands = nice_agent_get_local_candidates (from, from_stream, component);
-+ peer_cands = nice_agent_get_local_candidates (to, to_stream, component);
-+
-+ /*
-+ * Core of the test:
-+ *
-+ * Send packets that shoudl be dropped.
-+ */
-+
-+ for (item1 = cands; item1; item1 = item1->next) {
-+ NiceCandidate *cand = item1->data;
-+ NiceSocket *nicesock = cand->sockptr;
-+
-+ g_assert (nicesock);
-+
-+ for (item2 = peer_cands; item2; item2 = item2->next) {
-+ NiceCandidate *target_cand = item2->data;
-+
-+ nice_socket_send (nicesock, &target_cand->addr, 12, "123456789AB");
-+ }
-+
-+ }
-+
-+ nice_agent_set_remote_candidates (to, to_stream, component, cands);
-+
-+ g_slist_free_full (cands, (GDestroyNotify) nice_candidate_free);
-+ g_slist_free_full (peer_cands, (GDestroyNotify) nice_candidate_free);
-+}
-+
-+static void set_credentials (NiceAgent *lagent, guint lstream,
-+ NiceAgent *ragent, guint rstream)
-+{
-+ gchar *ufrag = NULL, *password = NULL;
-+
-+ nice_agent_get_local_credentials(lagent, lstream, &ufrag, &password);
-+ nice_agent_set_remote_credentials (ragent, rstream, ufrag, password);
-+ g_free (ufrag);
-+ g_free (password);
-+ nice_agent_get_local_credentials(ragent, rstream, &ufrag, &password);
-+ nice_agent_set_remote_credentials (lagent, lstream, ufrag, password);
-+ g_free (ufrag);
-+ g_free (password);
-+}
-+
-+static int run_full_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *baseaddr, guint ready, guint failed)
-+{
-+ guint ls_id, rs_id;
-+ gint ret;
-+
-+ /* XXX: dear compiler, this is for you */
-+ (void)baseaddr;
-+
-+ /* step: initialize variables modified by the callbacks */
-+ global_components_ready = 0;
-+ global_components_ready_exit = ready;
-+ global_components_failed = 0;
-+ global_components_failed_exit = failed;
-+ global_lagent_gathering_done = FALSE;
-+ global_ragent_gathering_done = FALSE;
-+ global_lagent_ibr_received =
-+ global_ragent_ibr_received = FALSE;
-+ global_lagent_cands =
-+ global_ragent_cands = 0;
-+
-+ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
-+ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
-+
-+ /* step: add one stream, with RTP+RTCP components, to each agent */
-+ ls_id = nice_agent_add_stream (lagent, 2);
-+
-+ rs_id = nice_agent_add_stream (ragent, 2);
-+ g_assert (ls_id > 0);
-+ g_assert (rs_id > 0);
-+
-+ /* Gather candidates and test nice_agent_set_port_range */
-+ nice_agent_set_port_range (lagent, ls_id, 1, 10000, 10000);
-+ nice_agent_set_port_range (lagent, ls_id, 2, 10001, 10001);
-+ nice_agent_set_port_range (ragent, rs_id, 1, 12345, 12345);
-+ nice_agent_set_port_range (ragent, rs_id, 2, 10000, 10001);
-+ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
-+ g_assert (nice_agent_gather_candidates (ragent, rs_id) == FALSE);
-+ g_assert (nice_agent_get_local_candidates (ragent, rs_id, 1) == NULL);
-+ g_assert (nice_agent_get_local_candidates (ragent, rs_id, 2) == NULL);
-+ nice_agent_set_port_range (ragent, rs_id, 2, 10000, 10002);
-+ g_assert (nice_agent_gather_candidates (ragent, rs_id) == TRUE);
-+
-+ {
-+ GSList *cands = NULL, *i;
-+ NiceCandidate *cand = NULL;
-+
-+ cands = nice_agent_get_local_candidates (lagent, ls_id, 1);
-+ g_assert (g_slist_length (cands) == 1);
-+ cand = cands->data;
-+ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
-+ g_assert (nice_address_get_port (&cand->addr) == 10000);
-+ for (i = cands; i; i = i->next)
-+ nice_candidate_free ((NiceCandidate *) i->data);
-+ g_slist_free (cands);
-+
-+ cands = nice_agent_get_local_candidates (lagent, ls_id, 2);
-+ g_assert (g_slist_length (cands) == 1);
-+ cand = cands->data;
-+ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
-+ g_assert (nice_address_get_port (&cand->addr) == 10001);
-+ for (i = cands; i; i = i->next)
-+ nice_candidate_free ((NiceCandidate *) i->data);
-+ g_slist_free (cands);
-+
-+ cands = nice_agent_get_local_candidates (ragent, rs_id, 1);
-+ g_assert (g_slist_length (cands) == 1);
-+ cand = cands->data;
-+ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
-+ g_assert (nice_address_get_port (&cand->addr) == 12345);
-+ for (i = cands; i; i = i->next)
-+ nice_candidate_free ((NiceCandidate *) i->data);
-+ g_slist_free (cands);
-+
-+ cands = nice_agent_get_local_candidates (ragent, rs_id, 2);
-+ g_assert (g_slist_length (cands) == 1);
-+ cand = cands->data;
-+ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
-+ g_assert (nice_address_get_port (&cand->addr) == 10002);
-+ for (i = cands; i; i = i->next)
-+ nice_candidate_free ((NiceCandidate *) i->data);
-+ g_slist_free (cands);
-+
-+ }
-+
-+ /* step: attach to mainloop (needed to register the fds) */
-+ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv,
-+ GUINT_TO_POINTER (1));
-+ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv,
-+ GUINT_TO_POINTER (1));
-+ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv,
-+ GUINT_TO_POINTER (2));
-+ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP,
-+ g_main_loop_get_context (global_mainloop), cb_nice_recv,
-+ GUINT_TO_POINTER (2));
-+
-+ /* step: run mainloop until local candidates are ready
-+ * (see timer_cb() above) */
-+ if (global_lagent_gathering_done != TRUE ||
-+ global_ragent_gathering_done != TRUE) {
-+ g_debug ("test-drop-invalid: Added streams, running mainloop until 'candidate-gathering-done'...");
-+ g_main_loop_run (global_mainloop);
-+ g_assert (global_lagent_gathering_done == TRUE);
-+ g_assert (global_ragent_gathering_done == TRUE);
-+ }
-+
-+ set_credentials (lagent, ls_id, ragent, rs_id);
-+
-+ /* step: pass the remote candidates to agents */
-+ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
-+ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTCP);
-+
-+ g_debug ("test-drop-invalid: Set properties, next running mainloop until connectivity checks succeed...");
-+
-+ /* step: run the mainloop until connectivity checks succeed
-+ * (see timer_cb() above) */
-+ g_main_loop_run (global_mainloop);
-+
-+ /* note: verify that STUN binding requests were sent */
-+ g_assert (global_lagent_ibr_received == TRUE);
-+ g_assert (global_ragent_ibr_received == TRUE);
-+
-+ /* note: Send a packet from another address */
-+ /* These should also be ignored */
-+ {
-+ NiceCandidate *local_cand = NULL;
-+ NiceCandidate *remote_cand = NULL;
-+ NiceSocket *tmpsock;
-+
-+ g_assert (nice_agent_get_selected_pair (lagent, ls_id, 1, &local_cand,
-+ &remote_cand));
-+ g_assert (local_cand);
-+ g_assert (remote_cand);
-+
-+ tmpsock = nice_udp_bsd_socket_new (NULL);
-+ nice_socket_send (tmpsock, &remote_cand->addr, 4, "ABCD");
-+ nice_socket_send (tmpsock, &local_cand->addr, 5, "ABCDE");
-+ nice_socket_free (tmpsock);
-+ }
-+
-+ /* note: test payload send and receive */
-+ global_ragent_read = 0;
-+ ret = nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678");
-+ g_assert (ret != -1);
-+ g_debug ("Sent %d bytes", ret);
-+ g_assert (ret == 16);
-+ while (global_ragent_read != 16)
-+ g_main_context_iteration (NULL, TRUE);
-+ g_assert (global_ragent_read == 16);
-+
-+ g_debug ("test-drop-invalid: Ran mainloop, removing streams...");
-+
-+ /* step: clean up resources and exit */
-+
-+ nice_agent_remove_stream (lagent, ls_id);
-+ nice_agent_remove_stream (ragent, rs_id);
-+
-+ return 0;
-+}
-+
-+int main (void)
-+{
-+ NiceAgent *lagent, *ragent; /* agent's L and R */
-+ NiceAddress baseaddr;
-+ int result;
-+ guint timer_id;
-+
-+#ifdef G_OS_WIN32
-+ WSADATA w;
-+
-+ WSAStartup(0x0202, &w);
-+#endif
-+
-+ global_mainloop = g_main_loop_new (NULL, FALSE);
-+
-+ /* step: create the agents L and R */
-+ lagent = nice_agent_new (g_main_loop_get_context (global_mainloop),
-+ NICE_COMPATIBILITY_RFC5245);
-+ ragent = nice_agent_new (g_main_loop_get_context (global_mainloop),
-+ NICE_COMPATIBILITY_RFC5245);
-+
-+ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
-+ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
-+
-+
-+ nice_agent_set_software (lagent, "test-drop-invalid, Left Agent");
-+ nice_agent_set_software (ragent, "test-drop-invalid, Right Agent");
-+
-+ /* step: add a timer to catch state changes triggered by signals */
-+ timer_id = g_timeout_add (30000, timer_cb, NULL);
-+
-+ /* step: specify which local interface to use */
-+ if (!nice_address_set_from_string (&baseaddr, "127.0.0.1"))
-+ g_assert_not_reached ();
-+ nice_agent_add_local_address (lagent, &baseaddr);
-+ nice_agent_add_local_address (ragent, &baseaddr);
-+
-+ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
-+ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER(1));
-+ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
-+ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER (2));
-+ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
-+ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (1));
-+ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
-+ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (2));
-+ g_signal_connect (G_OBJECT (lagent), "new-selected-pair",
-+ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER(1));
-+ g_signal_connect (G_OBJECT (ragent), "new-selected-pair",
-+ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER (2));
-+ g_signal_connect (G_OBJECT (lagent), "new-candidate",
-+ G_CALLBACK (cb_new_candidate), GUINT_TO_POINTER (1));
-+ g_signal_connect (G_OBJECT (ragent), "new-candidate",
-+ G_CALLBACK (cb_new_candidate), GUINT_TO_POINTER (2));
-+ g_signal_connect (G_OBJECT (lagent), "initial-binding-request-received",
-+ G_CALLBACK (cb_initial_binding_request_received),
-+ GUINT_TO_POINTER (1));
-+ g_signal_connect (G_OBJECT (ragent), "initial-binding-request-received",
-+ G_CALLBACK (cb_initial_binding_request_received),
-+ GUINT_TO_POINTER (2));
-+
-+ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
-+ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
-+
-+
-+ /* step: run test the first time */
-+ g_debug ("test-drop-invalid: TEST STARTS / running test for the 1st time");
-+ result = run_full_test (lagent, ragent, &baseaddr, 4 ,0);
-+ priv_print_global_status ();
-+ g_assert (result == 0);
-+ g_assert (global_lagent_state[0] == NICE_COMPONENT_STATE_READY);
-+ g_assert (global_lagent_state[1] == NICE_COMPONENT_STATE_READY);
-+ g_assert (global_ragent_state[0] == NICE_COMPONENT_STATE_READY);
-+ g_assert (global_ragent_state[1] == NICE_COMPONENT_STATE_READY);
-+ /* When using TURN, we get peer reflexive candidates for the host cands
-+ that we removed so we can get another new_selected_pair signal later
-+ depending on timing/racing, we could double (or not) the amount we expected
-+ */
-+
-+ /* note: verify that correct number of local candidates were reported */
-+ g_assert (global_lagent_cands == 2);
-+ g_assert (global_ragent_cands == 2);
-+
-+ g_object_unref (lagent);
-+ g_object_unref (ragent);
-+
-+ g_main_loop_unref (global_mainloop);
-+ global_mainloop = NULL;
-+
-+ g_source_remove (timer_id);
-+#ifdef G_OS_WIN32
-+ WSACleanup();
-+#endif
-+ return result;
-+}
-diff --git a/tests/test-gstreamer.c b/tests/test-gstreamer.c
-index 74d7133..f060efc 100644
---- a/tests/test-gstreamer.c
-+++ b/tests/test-gstreamer.c
-@@ -1,7 +1,7 @@
- /*
- * This file is part of the Nice GLib ICE library.
- *
-- * (C) 1015 Kurento.
-+ * (C) 2015 Kurento.
- * Contact: Jose Antonio Santos Cadenas
- *
- * The contents of this file are subject to the Mozilla Public License Version
-@@ -34,7 +34,7 @@
- */
-
- #include <gst/check/gstcheck.h>
--#include <nice/agent.h>
-+#include "agent.h"
-
- #define RTP_HEADER_SIZE 12
- #define RTP_PAYLOAD_SIZE 1024
-diff --git a/tests/test-mainloop.c b/tests/test-mainloop.c
-deleted file mode 100644
-index 7c52daa..0000000
---- a/tests/test-mainloop.c
-+++ /dev/null
-@@ -1,108 +0,0 @@
--/*
-- * This file is part of the Nice GLib ICE library.
-- *
-- * (C) 2006, 2007 Collabora Ltd.
-- * Contact: Dafydd Harries
-- * (C) 2006, 2007 Nokia Corporation. All rights reserved.
-- * Contact: Kai Vehmanen
-- *
-- * The contents of this file are subject to the Mozilla Public License Version
-- * 1.1 (the "License"); you may not use this file except in compliance with
-- * the License. You may obtain a copy of the License at
-- * http://www.mozilla.org/MPL/
-- *
-- * Software distributed under the License is distributed on an "AS IS" basis,
-- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-- * for the specific language governing rights and limitations under the
-- * License.
-- *
-- * The Original Code is the Nice GLib ICE library.
-- *
-- * The Initial Developers of the Original Code are Collabora Ltd and Nokia
-- * Corporation. All Rights Reserved.
-- *
-- * Contributors:
-- * Dafydd Harries, Collabora Ltd.
-- * Kai Vehmanen, Nokia
-- *
-- * Alternatively, the contents of this file may be used under the terms of the
-- * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
-- * case the provisions of LGPL are applicable instead of those above. If you
-- * wish to allow use of your version of this file only under the terms of the
-- * LGPL and not to allow others to use your version of this file under the
-- * MPL, indicate your decision by deleting the provisions above and replace
-- * them with the notice and other provisions required by the LGPL. If you do
-- * not delete the provisions above, a recipient may use your version of this
-- * file under either the MPL or the LGPL.
-- */
--#ifdef HAVE_CONFIG_H
--# include <config.h>
--#endif
--
--#include <string.h>
--
--#include <nice/nice.h>
--#include "socket/socket.h"
--
--static GMainLoop *loop = NULL;
--
--static void
--recv_cb (
-- NiceAgent *agent,
-- guint stream_id,
-- guint component_id,
-- guint len,
-- gchar *buf,
-- gpointer data)
--{
-- g_assert (agent != NULL);
-- g_assert (stream_id == 1);
-- g_assert (component_id == 1);
-- g_assert (len == 6);
-- g_assert (0 == strncmp (buf, "\x80hello", len));
-- g_assert (42 == GPOINTER_TO_UINT (data));
-- g_main_loop_quit (loop);
--}
--
--int
--main (void)
--{
-- NiceAgent *agent;
-- NiceAddress addr;
-- guint stream;
--
-- nice_address_init (&addr);
--
-- loop = g_main_loop_new (NULL, FALSE);
--
-- agent = nice_agent_new (g_main_loop_get_context (loop), NICE_COMPATIBILITY_RFC5245);
-- nice_address_set_ipv4 (&addr, 0x7f000001);
-- nice_agent_add_local_address (agent, &addr);
-- stream = nice_agent_add_stream (agent, 1);
-- nice_agent_gather_candidates (agent, stream);
--
-- // attach to default main context
-- nice_agent_attach_recv (agent, stream, NICE_COMPONENT_TYPE_RTP,
-- g_main_loop_get_context (loop), recv_cb, GUINT_TO_POINTER (42));
--
-- {
-- NiceCandidate *candidate;
-- GSList *candidates, *i;
--
-- candidates = nice_agent_get_local_candidates (agent, 1, 1);
-- candidate = candidates->data;
--
-- nice_socket_send (candidate->sockptr, &(candidate->addr), 6, "\x80hello");
-- for (i = candidates; i; i = i->next)
-- nice_candidate_free ((NiceCandidate *) i->data);
-- g_slist_free (candidates);
-- }
--
-- g_main_loop_run (loop);
--
-- nice_agent_remove_stream (agent, stream);
-- g_object_unref (agent);
--
-- return 0;
--}
--
-diff --git a/tests/test-nomination.c b/tests/test-nomination.c
-new file mode 100644
-index 0000000..bf21557
---- /dev/null
-+++ b/tests/test-nomination.c
-@@ -0,0 +1,263 @@
-+#include <stdlib.h>
-+#include <stdio.h>
-+#include <string.h>
-+
-+#include <gio/gio.h>
-+#include <agent.h>
-+
-+static NiceComponentState global_lagent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
-+static NiceComponentState global_ragent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
-+static guint global_components_ready = 0;
-+static gboolean global_lagent_gathering_done = FALSE;
-+static gboolean global_ragent_gathering_done = FALSE;
-+static int global_lagent_cands = 0;
-+static int global_ragent_cands = 0;
-+
-+static gboolean timer_cb (gpointer pointer)
-+{
-+ g_debug ("test-nomination:%s: %p", G_STRFUNC, pointer);
-+
-+ /* signal status via a global variable */
-+
-+ /* note: should not be reached, abort */
-+ g_error ("ERROR: test has got stuck, aborting...");
-+
-+ return FALSE;
-+}
-+
-+static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
-+{
-+ g_debug ("test-nomination:%s: %p", G_STRFUNC, user_data);
-+
-+ /* XXX: dear compiler, these are for you: */
-+ (void)agent; (void)stream_id; (void)component_id; (void)buf;
-+
-+ /*
-+ * Lets ignore stun packets that got through
-+ */
-+ if (len < 8)
-+ return;
-+ if (strncmp ("12345678", buf, 8))
-+ return;
-+
-+ if (component_id != 1)
-+ return;
-+}
-+
-+static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
-+{
-+ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1)
-+ global_lagent_gathering_done = TRUE;
-+ else if (GPOINTER_TO_UINT (data) == 2)
-+ global_ragent_gathering_done = TRUE;
-+}
-+
-+
-+static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
-+{
-+ gboolean ready_to_connected = FALSE;
-+ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1) {
-+ if (global_lagent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
-+ state == NICE_COMPONENT_STATE_CONNECTED)
-+ ready_to_connected = TRUE;
-+ global_lagent_state[component_id - 1] = state;
-+ } else if (GPOINTER_TO_UINT (data) == 2) {
-+ if (global_ragent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
-+ state == NICE_COMPONENT_STATE_CONNECTED)
-+ ready_to_connected = TRUE;
-+ global_ragent_state[component_id - 1] = state;
-+ }
-+
-+ if (state == NICE_COMPONENT_STATE_READY)
-+ global_components_ready++;
-+ else if (state == NICE_COMPONENT_STATE_CONNECTED && ready_to_connected)
-+ global_components_ready--;
-+ g_assert (state != NICE_COMPONENT_STATE_FAILED);
-+
-+ g_debug ("test-nomination: checks READY %u.", global_components_ready);
-+}
-+
-+static void cb_new_selected_pair(NiceAgent *agent, guint stream_id,
-+ guint component_id, gchar *lfoundation, gchar* rfoundation, gpointer data)
-+{
-+ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
-+
-+ if (GPOINTER_TO_UINT (data) == 1)
-+ ++global_lagent_cands;
-+ else if (GPOINTER_TO_UINT (data) == 2)
-+ ++global_ragent_cands;
-+}
-+
-+static void set_candidates (NiceAgent *from, guint from_stream,
-+ NiceAgent *to, guint to_stream, guint component)
-+{
-+ GSList *cands = NULL, *i;
-+
-+ cands = nice_agent_get_local_candidates (from, from_stream, component);
-+ nice_agent_set_remote_candidates (to, to_stream, component, cands);
-+
-+ for (i = cands; i; i = i->next)
-+ nice_candidate_free ((NiceCandidate *) i->data);
-+ g_slist_free (cands);
-+}
-+
-+static void set_credentials (NiceAgent *lagent, guint lstream,
-+ NiceAgent *ragent, guint rstream)
-+{
-+ gchar *ufrag = NULL, *password = NULL;
-+
-+ nice_agent_get_local_credentials(lagent, lstream, &ufrag, &password);
-+ nice_agent_set_remote_credentials (ragent, rstream, ufrag, password);
-+ g_free (ufrag);
-+ g_free (password);
-+ nice_agent_get_local_credentials(ragent, rstream, &ufrag, &password);
-+ nice_agent_set_remote_credentials (lagent, lstream, ufrag, password);
-+ g_free (ufrag);
-+ g_free (password);
-+}
-+
-+static void
-+run_test(NiceNominationMode l_nomination_mode,
-+ NiceNominationMode r_nomination_mode)
-+{
-+ NiceAgent *lagent, *ragent; /* agent's L and R */
-+ const gchar *localhost;
-+ NiceAddress localaddr;
-+ guint ls_id, rs_id;
-+ gulong timer_id;
-+
-+ localhost = "127.0.0.1";
-+
-+ /* step: initialize variables modified by the callbacks */
-+ global_components_ready = 0;
-+ global_lagent_gathering_done = FALSE;
-+ global_ragent_gathering_done = FALSE;
-+ global_lagent_cands = global_ragent_cands = 0;
-+
-+ lagent = nice_agent_new_full (NULL,
-+ NICE_COMPATIBILITY_RFC5245,
-+ l_nomination_mode == NICE_NOMINATION_MODE_REGULAR ?
-+ NICE_AGENT_OPTION_REGULAR_NOMINATION : 0);
-+
-+ ragent = nice_agent_new_full (NULL,
-+ NICE_COMPATIBILITY_RFC5245,
-+ r_nomination_mode == NICE_NOMINATION_MODE_REGULAR ?
-+ NICE_AGENT_OPTION_REGULAR_NOMINATION : 0);
-+
-+ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
-+ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
-+
-+ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
-+ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
-+ nice_agent_set_software (lagent, "Test-nomination, Left Agent");
-+ nice_agent_set_software (ragent, "Test-nomination, Right Agent");
-+
-+ timer_id = g_timeout_add (30000, timer_cb, NULL);
-+
-+ if (!nice_address_set_from_string (&localaddr, localhost))
-+ g_assert_not_reached ();
-+ nice_agent_add_local_address (lagent, &localaddr);
-+ nice_agent_add_local_address (ragent, &localaddr);
-+
-+ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
-+ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER(1));
-+ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
-+ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER (2));
-+ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
-+ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (1));
-+ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
-+ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (2));
-+ g_signal_connect (G_OBJECT (lagent), "new-selected-pair",
-+ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER(1));
-+ g_signal_connect (G_OBJECT (ragent), "new-selected-pair",
-+ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER (2));
-+
-+ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
-+ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
-+
-+ ls_id = nice_agent_add_stream (lagent, 1);
-+ rs_id = nice_agent_add_stream (ragent, 1);
-+ g_assert (ls_id > 0);
-+ g_assert (rs_id > 0);
-+
-+ /* Gather candidates and test nice_agent_set_port_range */
-+ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
-+ g_assert (nice_agent_gather_candidates (ragent, rs_id) == TRUE);
-+
-+ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
-+ g_main_context_default (), cb_nice_recv, GUINT_TO_POINTER (1));
-+ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
-+ g_main_context_default (), cb_nice_recv, GUINT_TO_POINTER (2));
-+
-+ g_debug ("test-nomination: Added streams, running context until 'candidate-gathering-done'...");
-+ while (!global_lagent_gathering_done)
-+ g_main_context_iteration (NULL, TRUE);
-+ g_assert (global_lagent_gathering_done == TRUE);
-+ while (!global_ragent_gathering_done)
-+ g_main_context_iteration (NULL, TRUE);
-+ g_assert (global_ragent_gathering_done == TRUE);
-+
-+ set_credentials (lagent, ls_id, ragent, rs_id);
-+
-+ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
-+ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTP);
-+
-+ while (global_lagent_state[0] != NICE_COMPONENT_STATE_READY ||
-+ global_ragent_state[0] != NICE_COMPONENT_STATE_READY)
-+ g_main_context_iteration (NULL, TRUE);
-+ g_assert (global_lagent_state[0] == NICE_COMPONENT_STATE_READY);
-+ g_assert (global_ragent_state[0] == NICE_COMPONENT_STATE_READY);
-+
-+ nice_agent_remove_stream (lagent, ls_id);
-+ nice_agent_remove_stream (ragent, rs_id);
-+
-+ g_source_remove (timer_id);
-+
-+ g_clear_object(&lagent);
-+ g_clear_object(&ragent);
-+}
-+
-+static void
-+regular (void)
-+{
-+ run_test(NICE_NOMINATION_MODE_REGULAR, NICE_NOMINATION_MODE_REGULAR);
-+}
-+
-+static void
-+aggressive (void)
-+{
-+ run_test(NICE_NOMINATION_MODE_AGGRESSIVE, NICE_NOMINATION_MODE_AGGRESSIVE);
-+}
-+
-+static void
-+mixed_ra (void)
-+{
-+ run_test(NICE_NOMINATION_MODE_REGULAR, NICE_NOMINATION_MODE_AGGRESSIVE);
-+}
-+
-+static void
-+mixed_ar (void)
-+{
-+ run_test(NICE_NOMINATION_MODE_AGGRESSIVE, NICE_NOMINATION_MODE_REGULAR);
-+}
-+
-+int
-+main (int argc, char **argv)
-+{
-+ int ret;
-+
-+ g_test_init (&argc, &argv, NULL);
-+
-+ g_test_add_func ("/nice/nomination/regular", regular);
-+ g_test_add_func ("/nice/nomination/aggressive", aggressive);
-+ g_test_add_func ("/nice/nomination/mixed_ra", mixed_ra);
-+ g_test_add_func ("/nice/nomination/mixed_ar", mixed_ar);
-+
-+ ret = g_test_run ();
-+
-+ return ret;
-+}
-diff --git a/tests/test-restart.c b/tests/test-restart.c
-index c2cbe9a..afc51b6 100644
---- a/tests/test-restart.c
-+++ b/tests/test-restart.c
-@@ -301,6 +301,11 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
- nice_agent_set_remote_candidates (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP, cands);
- cdes.addr = laddr_rtcp;
- nice_agent_set_remote_candidates (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP, cands);
-+ /* This role switch request will be effective after restart. We test
-+ * here that the role cannot be externally modified after conncheck
-+ * has started. */
-+ g_object_set (G_OBJECT (ragent), "controlling-mode", TRUE, NULL);
-+ g_assert (ragent->controlling_mode == FALSE);
-
- g_debug ("test-restart: Set properties, next running mainloop until connectivity checks succeed...");
-
-@@ -329,10 +334,18 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
- global_ragent_read = 0;
- g_assert (nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678") == 16);
-
-+ /* Both agent have a distinct role at the end of the conncheck */
-+ g_assert (lagent->controlling_mode == TRUE);
-+ g_assert (ragent->controlling_mode == FALSE);
- /* step: restart agents, exchange updated credentials */
- tie_breaker = ragent->tie_breaker;
- nice_agent_restart (ragent);
- g_assert (tie_breaker != ragent->tie_breaker);
-+ /* This role switch of ragent should be done now, and both agents
-+ * have now the same role, which should generate a role conflict
-+ * resolution situation */
-+ g_assert (lagent->controlling_mode == TRUE);
-+ g_assert (ragent->controlling_mode == TRUE);
- nice_agent_restart (lagent);
- {
- gchar *ufrag = NULL, *password = NULL;
-@@ -375,6 +388,8 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
- /* note: verify binding requests were resent after restart */
- g_assert (global_lagent_ibr_received == TRUE);
- g_assert (global_ragent_ibr_received == TRUE);
-+ /* note: verify that a role switch occured for one of the agents */
-+ g_assert (ragent->controlling_mode != lagent->controlling_mode);
-
- g_debug ("test-restart: Ran mainloop, removing streams...");
-
diff --git a/libnice-0.1.14-70-gfb2f1f7.patch b/libnice-0.1.14-70-gfb2f1f7.patch
new file mode 100644
index 0000000..db148cb
--- /dev/null
+++ b/libnice-0.1.14-70-gfb2f1f7.patch
@@ -0,0 +1,10531 @@
+From a4bacb2fe2ff06ccb1a2d7f7c0b62bd41674565b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Mon, 3 Apr 2017 14:30:10 -0400
+Subject: [PATCH 01/70] Version 0.1.14.1
+
+---
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 5fabdb4..b39bfe3 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -5,8 +5,8 @@ dnl Always compile with -Wall; if --enable-compile-warnings=error is passed,
+ dnl also use -Werror. git and pre-releases default to -Werror
+
+ dnl use a three digit version number for releases, and four for cvs/prerelease
+-AC_INIT([libnice],[0.1.14])
+-LIBNICE_RELEASE="yes"
++AC_INIT([libnice],[0.1.14.1])
++LIBNICE_RELEASE="no"
+
+ AC_CANONICAL_TARGET
+
+--
+2.13.6
+
+
+From 59ce41dfb837adf4222b25490cde2e394384ad15 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miguel=20Par=C3=ADs=20D=C3=ADaz?= <mparisdiaz(a)gmail.com>
+Date: Fri, 31 Mar 2017 20:20:38 -0400
+Subject: [PATCH 02/70] conncheck: consider answer received when remote
+ credentials are set
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Consider that the answer is received when remote credentials
+are set instead of when a remote candidate is set,
+which could not happen or could cause more delay for the
+connection establishment.
+
+Ported to git master by Olivier Crête
+
+Differential Revision: https://phabricator.freedesktop.org/D1704
+---
+ agent/agent.c | 4 +-
+ agent/conncheck.c | 225 +++++++++++++++++++++++++++---------------------------
+ agent/conncheck.h | 2 +-
+ 3 files changed, 117 insertions(+), 114 deletions(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 555fd16..4d9381c 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -3240,6 +3240,8 @@ nice_agent_set_remote_credentials (
+ g_strlcpy (stream->remote_ufrag, ufrag, NICE_STREAM_MAX_UFRAG);
+ g_strlcpy (stream->remote_password, pwd, NICE_STREAM_MAX_PWD);
+
++ conn_check_remote_credentials_set(agent, stream);
++
+ ret = TRUE;
+ goto done;
+ }
+@@ -3342,8 +3344,6 @@ _set_remote_candidates_locked (NiceAgent *agent, NiceStream *stream,
+ }
+ }
+
+- conn_check_remote_candidates_set(agent, stream, component);
+-
+ if (added > 0) {
+ conn_check_schedule_next (agent);
+ }
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index dda2f2f..2abbc5e 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -1243,124 +1243,124 @@ static GSList *prune_cancelled_conn_check (GSList *conncheck_list)
+
+ /*
+ * Handle any processing steps for connectivity checks after
+- * remote candidates have been set. This function handles
++ * remote credentials have been set. This function handles
+ * the special case where answerer has sent us connectivity
+- * checks before the answer (containing candidate information),
++ * checks before the answer (containing credentials information),
+ * reaches us. The special case is documented in sect 7.2
+ * if ICE spec (ID-19).
+ */
+-void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, NiceComponent *component)
++void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
+ {
+- GSList *j, *k, *l, *m, *n;
++ GSList *j, *k, *l, *m, *n, *o;
+
+ for (j = stream->conncheck_list; j ; j = j->next) {
+ CandidateCheckPair *pair = j->data;
+- if (pair->component_id == component->id) {
+- gboolean match = FALSE;
+-
+- /* performn delayed processing of spec steps section 7.2.1.4,
+- and section 7.2.1.5 */
+- priv_preprocess_conn_check_pending_data (agent, stream, component, pair);
+-
+- for (k = component->incoming_checks; k; k = k->next) {
+- IncomingCheck *icheck = k->data;
+- /* sect 7.2.1.3., "Learning Peer Reflexive Candidates", has to
+- * be handled separately */
+- for (l = component->remote_candidates; l; l = l->next) {
+- NiceCandidate *cand = l->data;
+- if (nice_address_equal (&icheck->from, &cand->addr)) {
+- match = TRUE;
+- break;
+- }
+- }
+- if (match != TRUE) {
+- /* note: we have gotten an incoming connectivity check from
+- * an address that is not a known remote candidate */
+-
+- NiceCandidate *local_candidate = NULL;
+- NiceCandidate *remote_candidate = NULL;
+-
+- if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
+- agent->compatibility == NICE_COMPATIBILITY_MSN ||
+- agent->compatibility == NICE_COMPATIBILITY_OC2007) {
+- /* We need to find which local candidate was used */
+- uint8_t uname[NICE_STREAM_MAX_UNAME];
+- guint uname_len;
+-
+- nice_debug ("Agent %p: We have a peer-reflexive candidate in a "
+- "stored pending check", agent);
+-
+- for (m = component->remote_candidates;
+- m != NULL && remote_candidate == NULL; m = m->next) {
+- for (n = component->local_candidates; n; n = n->next) {
+- NiceCandidate *rcand = m->data;
+- NiceCandidate *lcand = n->data;
+-
+- uname_len = priv_create_username (agent, stream,
+- component->id, rcand, lcand,
+- uname, sizeof (uname), TRUE);
+-
+- stun_debug ("pending check, comparing usernames of len %d and %d, equal=%d",
+- icheck->username_len, uname_len,
+- icheck->username && uname_len == icheck->username_len &&
+- memcmp (uname, icheck->username, icheck->username_len) == 0);
+- stun_debug_bytes (" first username: ",
+- icheck->username,
+- icheck->username? icheck->username_len : 0);
+- stun_debug_bytes (" second username: ", uname, uname_len);
+-
+- if (icheck->username &&
+- uname_len == icheck->username_len &&
+- memcmp (uname, icheck->username, icheck->username_len) == 0) {
+- local_candidate = lcand;
+- remote_candidate = rcand;
+- break;
+- }
+- }
+- }
+- } else {
+- for (l = component->local_candidates; l; l = l->next) {
+- NiceCandidate *cand = l->data;
+- if (nice_address_equal (&cand->addr, &icheck->local_socket->addr)) {
+- local_candidate = cand;
++ NiceComponent *component =
++ nice_stream_find_component_by_id (stream, pair->component_id);
++ gboolean match = FALSE;
++
++ /* performn delayed processing of spec steps section 7.2.1.4,
++ and section 7.2.1.5 */
++ priv_preprocess_conn_check_pending_data (agent, stream, component, pair);
++
++ for (k = component->incoming_checks; k; k = k->next) {
++ IncomingCheck *icheck = k->data;
++ /* sect 7.2.1.3., "Learning Peer Reflexive Candidates", has to
++ * be handled separately */
++ for (l = component->remote_candidates; l; l = l->next) {
++ NiceCandidate *cand = l->data;
++ if (nice_address_equal (&icheck->from, &cand->addr)) {
++ match = TRUE;
++ break;
++ }
++ }
++ if (match != TRUE) {
++ /* note: we have gotten an incoming connectivity check from
++ * an address that is not a known remote candidate */
++
++ NiceCandidate *local_candidate = NULL;
++ NiceCandidate *remote_candidate = NULL;
++
++ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
++ agent->compatibility == NICE_COMPATIBILITY_MSN ||
++ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
++ /* We need to find which local candidate was used */
++ uint8_t uname[NICE_STREAM_MAX_UNAME];
++ guint uname_len;
++
++ nice_debug ("Agent %p: We have a peer-reflexive candidate in a "
++ "stored pending check", agent);
++
++ for (m = component->remote_candidates;
++ m != NULL && remote_candidate == NULL; m = m->next) {
++ for (n = component->local_candidates; n; n = n->next) {
++ NiceCandidate *rcand = m->data;
++ NiceCandidate *lcand = n->data;
++
++ uname_len = priv_create_username (agent, stream,
++ component->id, rcand, lcand,
++ uname, sizeof (uname), TRUE);
++
++ stun_debug ("pending check, comparing usernames of len %d and %d, equal=%d",
++ icheck->username_len, uname_len,
++ icheck->username && uname_len == icheck->username_len &&
++ memcmp (uname, icheck->username, icheck->username_len) == 0);
++ stun_debug_bytes (" first username: ",
++ icheck->username,
++ icheck->username? icheck->username_len : 0);
++ stun_debug_bytes (" second username: ", uname, uname_len);
++
++ if (icheck->username &&
++ uname_len == icheck->username_len &&
++ memcmp (uname, icheck->username, icheck->username_len) == 0) {
++ local_candidate = lcand;
++ remote_candidate = rcand;
+ break;
+ }
+ }
+ }
+-
+- if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE &&
+- local_candidate == NULL) {
+- /* if we couldn't match the username, then the matching remote
+- * candidate hasn't been received yet.. we must wait */
+- nice_debug ("Agent %p : Username check failed. pending check has "
+- "to wait to be processed", agent);
+- } else {
+- NiceCandidate *candidate;
+-
+- nice_debug ("Agent %p : Discovered peer reflexive from early i-check",
+- agent);
+- candidate =
+- discovery_learn_remote_peer_reflexive_candidate (agent,
+- stream,
+- component,
+- icheck->priority,
+- &icheck->from,
+- icheck->local_socket,
+- local_candidate, remote_candidate);
+- if (candidate) {
+- if (local_candidate &&
+- local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE)
+- priv_conn_check_add_for_candidate_pair_matched (agent,
+- stream->id, component, local_candidate, candidate, NICE_CHECK_DISCOVERED);
+- else
+- conn_check_add_for_candidate (agent, stream->id, component, candidate);
+-
+- if (icheck->use_candidate)
+- priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
+- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, candidate, icheck->use_candidate);
++ } else {
++ for (l = component->local_candidates; l; l = l->next) {
++ NiceCandidate *cand = l->data;
++ if (nice_address_equal (&cand->addr, &icheck->local_socket->addr)) {
++ local_candidate = cand;
++ break;
+ }
+ }
+ }
++
++ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE &&
++ local_candidate == NULL) {
++ /* if we couldn't match the username, then the matching remote
++ * candidate hasn't been received yet.. we must wait */
++ nice_debug ("Agent %p : Username check failed. pending check has "
++ "to wait to be processed", agent);
++ } else {
++ NiceCandidate *candidate;
++
++ nice_debug ("Agent %p : Discovered peer reflexive from early i-check",
++ agent);
++ candidate =
++ discovery_learn_remote_peer_reflexive_candidate (agent,
++ stream,
++ component,
++ icheck->priority,
++ &icheck->from,
++ icheck->local_socket,
++ local_candidate, remote_candidate);
++ if (candidate) {
++ if (local_candidate &&
++ local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE)
++ priv_conn_check_add_for_candidate_pair_matched (agent,
++ stream->id, component, local_candidate, candidate, NICE_CHECK_DISCOVERED);
++ else
++ conn_check_add_for_candidate (agent, stream->id, component, candidate);
++
++ if (icheck->use_candidate)
++ priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
++ priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, candidate, icheck->use_candidate);
++ }
++ }
+ }
+ }
+ }
+@@ -1368,9 +1368,12 @@ void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, Nice
+ /* Once we process the pending checks, we should free them to avoid
+ * reprocessing them again if a dribble-mode set_remote_candidates
+ * is called */
+- g_slist_free_full (component->incoming_checks,
+- (GDestroyNotify) incoming_check_free);
+- component->incoming_checks = NULL;
++ for (o = stream->components; o; o = o->next) {
++ NiceComponent *component = o->data;
++ g_slist_free_full (component->incoming_checks,
++ (GDestroyNotify) incoming_check_free);
++ component->incoming_checks = NULL;
++ }
+
+ stream->conncheck_list =
+ prune_cancelled_conn_check (stream->conncheck_list);
+@@ -3628,14 +3631,14 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ if (stream->initial_binding_request_received != TRUE)
+ agent_signal_initial_binding_request_received (agent, stream);
+
+- if (component->remote_candidates && remote_candidate == NULL) {
++ if (remote_candidate == NULL) {
+ nice_debug ("Agent %p : No matching remote candidate for incoming check ->"
+ "peer-reflexive candidate.", agent);
+ remote_candidate = discovery_learn_remote_peer_reflexive_candidate (
+ agent, stream, component, priority, from, nicesock,
+ local_candidate,
+ remote_candidate2 ? remote_candidate2 : remote_candidate);
+- if(remote_candidate) {
++ if(remote_candidate && stream->remote_ufrag != NULL) {
+ if (local_candidate &&
+ local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE) {
+ CandidateCheckPair *pair;
+@@ -3654,10 +3657,10 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ priv_reply_to_conn_check (agent, stream, component, local_candidate,
+ remote_candidate, from, nicesock, rbuf_len, &msg, use_candidate);
+
+- if (component->remote_candidates == NULL) {
++ if (stream->remote_ufrag == NULL) {
+ /* case: We've got a valid binding request to a local candidate
+- * but we do not yet know remote credentials nor
+- * candidates. As per sect 7.2 of ICE (ID-19), we send a reply
++ * but we do not yet know remote credentials.
++ * As per sect 7.2 of ICE (ID-19), we send a reply
+ * immediately but postpone all other processing until
+ * we get information about the remote candidates */
+
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index 431c606..10319cc 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -105,7 +105,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair);
+ void conn_check_prune_stream (NiceAgent *agent, NiceStream *stream);
+ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *udp_socket, const NiceAddress *from, gchar *buf, guint len);
+ gint conn_check_compare (const CandidateCheckPair *a, const CandidateCheckPair *b);
+-void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, NiceComponent *component);
++void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream);
+ NiceCandidateTransport conn_check_match_transport (NiceCandidateTransport transport);
+ void
+ conn_check_prune_socket (NiceAgent *agent, NiceStream *stream, NiceComponent *component,
+--
+2.13.6
+
+
+From 0de1657e4d15d4f1911ab1fad84ea23e7013070f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 12:25:50 -0400
+Subject: [PATCH 03/70] conncheck: Use the right test for empty remote_frag
+
+It's now an array, not a pointer, so needs to test to emptyness.
+
+It's a bugfix on the previous commit, 59ce41df
+---
+ agent/conncheck.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 2abbc5e..7096b42 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -3638,7 +3638,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ agent, stream, component, priority, from, nicesock,
+ local_candidate,
+ remote_candidate2 ? remote_candidate2 : remote_candidate);
+- if(remote_candidate && stream->remote_ufrag != NULL) {
++ if(remote_candidate && stream->remote_ufrag[0]) {
+ if (local_candidate &&
+ local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE) {
+ CandidateCheckPair *pair;
+@@ -3657,7 +3657,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ priv_reply_to_conn_check (agent, stream, component, local_candidate,
+ remote_candidate, from, nicesock, rbuf_len, &msg, use_candidate);
+
+- if (stream->remote_ufrag == NULL) {
++ if (stream->remote_ufrag[0] == 0) {
+ /* case: We've got a valid binding request to a local candidate
+ * but we do not yet know remote credentials.
+ * As per sect 7.2 of ICE (ID-19), we send a reply
+--
+2.13.6
+
+
+From 0672758b9621801c8f0d9e3c920370983b267a68 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 12:29:29 -0400
+Subject: [PATCH 04/70] agent: Don't set variable that won't be used
+
+It exits the loop immediately, so no point to set the variable.
+And it makes the clang static analyzer happy.
+---
+ agent/agent.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 4d9381c..8ba99bc 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -4245,7 +4245,6 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
+ "Component removed during call.");
+
+ component = NULL;
+- error_reported = TRUE;
+
+ goto recv_error;
+ }
+--
+2.13.6
+
+
+From db05e8b0fdc713df93cd6a4c3914e5aee38b2391 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 12:30:27 -0400
+Subject: [PATCH 05/70] Make clang-analyzer happy
+
+Various little things, none of which should make a functional difference.
+---
+ agent/agent.c | 1 -
+ agent/conncheck.c | 2 +-
+ socket/udp-turn.c | 5 ++---
+ stun/usages/bind.c | 4 +++-
+ 4 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 8ba99bc..28d7ccf 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -1552,7 +1552,6 @@ pseudo_tcp_socket_recv_messages (PseudoTcpSocket *self,
+
+ if (len == 0) {
+ /* Reached EOS. */
+- len = 0;
+ goto done;
+ } else if (len < 0 &&
+ pseudo_tcp_socket_get_error (self) == EWOULDBLOCK) {
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 7096b42..1dc13dd 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -606,7 +606,7 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ /* step: when there's no pair in the Waiting state,
+ * unfreeze a new pair and check it
+ */
+- res = priv_conn_check_unfreeze_next (agent);
++ priv_conn_check_unfreeze_next (agent);
+
+ for (i = agent->streams; i ; i = i->next) {
+ NiceStream *stream = i->data;
+diff --git a/socket/udp-turn.c b/socket/udp-turn.c
+index cc3409b..a9c57e5 100644
+--- a/socket/udp-turn.c
++++ b/socket/udp-turn.c
+@@ -406,9 +406,8 @@ socket_recv_messages (NiceSocket *sock,
+
+ /* Split up the monolithic buffer again into the caller-provided buffers. */
+ if (parsed_buffer_length > 0 && allocated_buffer) {
+- parsed_buffer_length =
+- memcpy_buffer_to_input_message (message, buffer,
+- parsed_buffer_length);
++ memcpy_buffer_to_input_message (message, buffer,
++ parsed_buffer_length);
+ }
+
+ if (allocated_buffer)
+diff --git a/stun/usages/bind.c b/stun/usages/bind.c
+index 8dd7afc..d56790f 100644
+--- a/stun/usages/bind.c
++++ b/stun/usages/bind.c
+@@ -479,7 +479,7 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ size_t len;
+ StunUsageTransReturn ret;
+ int val;
+- struct sockaddr_storage alternate_server;
++ struct sockaddr_storage alternate_server = { AF_UNSPEC } ;
+ socklen_t alternate_server_len = sizeof (alternate_server);
+ StunUsageBindReturn bind_ret;
+
+@@ -548,6 +548,8 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ if (bind_ret == STUN_USAGE_BIND_RETURN_ALTERNATE_SERVER) {
+ stun_trans_deinit (&trans);
+
++ assert (alternate_server.ss_family != AF_UNSPEC);
++
+ ret = stun_trans_create (&trans, SOCK_DGRAM, 0,
+ (struct sockaddr *) &alternate_server, alternate_server_len);
+
+--
+2.13.6
+
+
+From cd255bddc7fa0ddae056b5358a22b380c4eefc42 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 15:24:43 -0400
+Subject: [PATCH 06/70] udp-turn: Add some const to internal APIs
+
+---
+ agent/component.c | 2 +-
+ socket/udp-turn.c | 10 +++++-----
+ socket/udp-turn.h | 7 ++++---
+ 3 files changed, 10 insertions(+), 9 deletions(-)
+
+diff --git a/agent/component.c b/agent/component.c
+index 32f7463..a679b30 100644
+--- a/agent/component.c
++++ b/agent/component.c
+@@ -380,7 +380,7 @@ nice_component_restart (NiceComponent *cmp)
+ for (i = cmp->remote_candidates; i; i = i->next) {
+ NiceCandidate *candidate = i->data;
+
+- /* note: do not remove the local candidate that is
++ /* note: do not remove the remote candidate that is
+ * currently part of the 'selected pair', see ICE
+ * 9.1.1.1. "ICE Restarts" (ID-19) */
+ if (candidate == cmp->selected_pair.remote) {
+diff --git a/socket/udp-turn.c b/socket/udp-turn.c
+index a9c57e5..190a9ea 100644
+--- a/socket/udp-turn.c
++++ b/socket/udp-turn.c
+@@ -174,8 +174,8 @@ priv_send_data_queue_destroy (gpointer user_data)
+
+ NiceSocket *
+ nice_udp_turn_socket_new (GMainContext *ctx, NiceAddress *addr,
+- NiceSocket *base_socket, NiceAddress *server_addr,
+- gchar *username, gchar *password,
++ NiceSocket *base_socket, const NiceAddress *server_addr,
++ const gchar *username, const gchar *password,
+ NiceTurnSocketCompatibility compatibility)
+ {
+ UdpTurnPriv *priv;
+@@ -1184,7 +1184,7 @@ nice_udp_turn_socket_parse_recv_message (NiceSocket *sock, NiceSocket **from_soc
+ gsize
+ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
+ NiceAddress *from, gsize len, guint8 *buf,
+- NiceAddress *recv_from, guint8 *_recv_buf, gsize recv_len)
++ const NiceAddress *recv_from, const guint8 *_recv_buf, gsize recv_len)
+ {
+
+ UdpTurnPriv *priv = (UdpTurnPriv *) sock->priv;
+@@ -1194,8 +1194,8 @@ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
+ ChannelBinding *binding = NULL;
+
+ union {
+- guint8 *u8;
+- guint16 *u16;
++ const guint8 *u8;
++ const guint16 *u16;
+ } recv_buf;
+
+ /* In the case of a reliable UDP-TURN-OVER-TCP (which means MS-TURN)
+diff --git a/socket/udp-turn.h b/socket/udp-turn.h
+index b1eeeb4..df10a1c 100644
+--- a/socket/udp-turn.h
++++ b/socket/udp-turn.h
+@@ -59,15 +59,16 @@ nice_udp_turn_socket_parse_recv_message (NiceSocket *sock, NiceSocket **from_soc
+ gsize
+ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
+ NiceAddress *from, gsize len, guint8 *buf,
+- NiceAddress *recv_from, guint8 *recv_buf, gsize recv_len);
++ const NiceAddress *recv_from, const guint8 *recv_buf, gsize recv_len);
+
+ gboolean
+ nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer);
+
+ NiceSocket *
+ nice_udp_turn_socket_new (GMainContext *ctx, NiceAddress *addr,
+- NiceSocket *base_socket, NiceAddress *server_addr,
+- gchar *username, gchar *password, NiceTurnSocketCompatibility compatibility);
++ NiceSocket *base_socket, const NiceAddress *server_addr,
++ const gchar *username, const gchar *password,
++ NiceTurnSocketCompatibility compatibility);
+
+ void
+ nice_udp_turn_socket_set_ms_realm(NiceSocket *sock, StunMessage *msg);
+--
+2.13.6
+
+
+From e56b910d2d8b70f5677bbd4be579d5b95aff33ad Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 16:16:05 -0400
+Subject: [PATCH 07/70] agent: Separate return from NiceSocket and internal
+ enum
+
+The same variable was used for return values from NiceSocket and
+for the internal enum, but 0 and -1 have different meanings in both.
+---
+ agent/agent.c | 35 +++++++++++++++++++----------------
+ 1 file changed, 19 insertions(+), 16 deletions(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 28d7ccf..7b8a9fc 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -3422,7 +3422,8 @@ agent_recv_message_unlocked (
+ {
+ NiceAddress from;
+ GList *item;
+- gint retval;
++ RecvStatus retval;
++ gint sockret;
+ gboolean is_turn = FALSE;
+
+ /* We need an address for packet parsing, below. */
+@@ -3483,8 +3484,8 @@ agent_recv_message_unlocked (
+ local_bufs[i + 1].buffer = message->buffers[i].buffer;
+ local_bufs[i + 1].size = message->buffers[i].size;
+ }
+- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
+- if (retval == 1) {
++ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
++ if (sockret == 1) {
+ message->length = ntohs (rfc4571_frame);
+ }
+ } else {
+@@ -3499,7 +3500,7 @@ agent_recv_message_unlocked (
+ _priv_set_socket_tos (agent, new_socket, stream->tos);
+ nice_component_attach_socket (component, new_socket);
+ }
+- retval = 0;
++ sockret = 0;
+ } else {
+ /* In the case of a real ICE-TCP connection, we can use the socket as a
+ * bytestream and do the read here with caching of data being read
+@@ -3508,9 +3509,9 @@ agent_recv_message_unlocked (
+
+ /* TODO: Support bytestream reads */
+ message->length = 0;
+- retval = 0;
++ sockret = 0;
+ if (available <= 0) {
+- retval = available;
++ sockret = available;
+
+ /* If we don't call check_connect_result on an outbound connection,
+ * then is_connected will always return FALSE. That's why we check
+@@ -3523,7 +3524,7 @@ agent_recv_message_unlocked (
+ * not connected, it means that it failed to connect, so we must
+ * return an error to make the socket fail/closed
+ */
+- retval = -1;
++ sockret = -1;
+ } else {
+ gint flags = G_SOCKET_MSG_PEEK;
+
+@@ -3536,7 +3537,7 @@ agent_recv_message_unlocked (
+ */
+ if (g_socket_receive_message (nicesock->fileno, NULL,
+ NULL, 0, NULL, NULL, &flags, NULL, NULL) == 0)
+- retval = -1;
++ sockret = -1;
+ }
+ } else if (agent->rfc4571_expecting_length == 0) {
+ if ((gsize) available >= sizeof(guint16)) {
+@@ -3544,8 +3545,8 @@ agent_recv_message_unlocked (
+ GInputVector local_buf = { &rfc4571_frame, sizeof(guint16)};
+ NiceInputMessage local_message = { &local_buf, 1, message->from, 0};
+
+- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
+- if (retval == 1) {
++ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
++ if (sockret == 1) {
+ agent->rfc4571_expecting_length = ntohs (rfc4571_frame);
+ available = g_socket_get_available_bytes (nicesock->fileno);
+ }
+@@ -3589,8 +3590,8 @@ agent_recv_message_unlocked (
+ off += local_bufs[i].size;
+ }
+ }
+- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
+- if (retval == 1) {
++ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
++ if (sockret == 1) {
+ message->length = local_message.length;
+ agent->rfc4571_expecting_length -= local_message.length;
+ }
+@@ -3598,20 +3599,22 @@ agent_recv_message_unlocked (
+ }
+ }
+ } else {
+- retval = nice_socket_recv_messages (nicesock, message, 1);
++ sockret = nice_socket_recv_messages (nicesock, message, 1);
+ }
+
+- if (retval == 0) {
++ if (sockret == 0) {
+ retval = RECV_WOULD_BLOCK; /* EWOULDBLOCK */
+ nice_debug_verbose ("%s: Agent %p: no message available on read attempt",
+ G_STRFUNC, agent);
+ goto done;
+- } else if (retval < 0) {
++ } else if (sockret < 0) {
+ nice_debug ("Agent %p: %s returned %d, errno (%d) : %s",
+- agent, G_STRFUNC, retval, errno, g_strerror (errno));
++ agent, G_STRFUNC, sockret, errno, g_strerror (errno));
+
+ retval = RECV_ERROR;
+ goto done;
++ } else {
++ retval = sockret;
+ }
+
+ if (retval == RECV_OOB || message->length == 0) {
+--
+2.13.6
+
+
+From 4e605885c9dcaeb3ee443ec902c9c9189b19043f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 16:16:46 -0400
+Subject: [PATCH 08/70] agent: Remove impossible case
+
+---
+ agent/agent.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 7b8a9fc..77f27e3 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -3617,7 +3617,8 @@ agent_recv_message_unlocked (
+ retval = sockret;
+ }
+
+- if (retval == RECV_OOB || message->length == 0) {
++ g_assert (retval != RECV_OOB);
++ if (message->length == 0) {
+ retval = RECV_OOB;
+ nice_debug_verbose ("%s: Agent %p: message handled out-of-band", G_STRFUNC,
+ agent);
+--
+2.13.6
+
+
+From efc6a9be8cb34c899f0454c32e8a1e62b38df474 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 18:42:57 -0400
+Subject: [PATCH 09/70] tests: Use automake test-driver for valgrind
+
+This fixes the valgrind integration with the new test drivers.
+---
+ common.mk | 4 +-
+ scripts/valgrind-test-driver | 162 +++++++++++++++++++++++++++++++++++++++++++
+ scripts/valgrind.sh | 28 --------
+ 3 files changed, 165 insertions(+), 29 deletions(-)
+ create mode 100755 scripts/valgrind-test-driver
+ delete mode 100755 scripts/valgrind.sh
+
+diff --git a/common.mk b/common.mk
+index e2ca3f4..b16380d 100644
+--- a/common.mk
++++ b/common.mk
+@@ -4,6 +4,8 @@ pkgincludedir = $(includedir)/nice
+
+
+ check-valgrind:
+- $(MAKE) TESTS_ENVIRONMENT="sh $$(cd "$(top_srcdir)" && pwd)/scripts/valgrind.sh" check
++ $(MAKE) TESTS_ENVIRONMENT="USE_VALGRIND=1 " check
++
++LOG_DRIVER=$(top_srcdir)/scripts/valgrind-test-driver
+
+ .PHONY: check-valgrind
+diff --git a/scripts/valgrind-test-driver b/scripts/valgrind-test-driver
+new file mode 100755
+index 0000000..5b660ee
+--- /dev/null
++++ b/scripts/valgrind-test-driver
+@@ -0,0 +1,162 @@
++#! /bin/sh
++# test-driver - basic testsuite driver script.
++
++scriptversion=2017-04-04.22; # UTC
++
++# Copyright (C) 2011-2014 Free Software Foundation, Inc.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++# This file is maintained in Automake, please report
++# bugs to <bug-automake(a)gnu.org> or send patches to
++# <automake-patches(a)gnu.org>.
++
++# Make unconditional expansion of undefined variables an error. This
++# helps a lot in preventing typo-related bugs.
++set -u
++
++usage_error ()
++{
++ echo "$0: $*" >&2
++ print_usage >&2
++ exit 2
++}
++
++print_usage ()
++{
++ cat <<END
++Usage:
++ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
++ [--expect-failure={yes|no}] [--color-tests={yes|no}]
++ [--enable-hard-errors={yes|no}] [--]
++ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
++The '--test-name', '--log-file' and '--trs-file' options are mandatory.
++END
++}
++
++test_name= # Used for reporting.
++log_file= # Where to save the output of the test script.
++trs_file= # Where to save the metadata of the test run.
++expect_failure=no
++color_tests=no
++enable_hard_errors=yes
++while test $# -gt 0; do
++ case $1 in
++ --help) print_usage; exit $?;;
++ --version) echo "test-driver $scriptversion"; exit $?;;
++ --test-name) test_name=$2; shift;;
++ --log-file) log_file=$2; shift;;
++ --trs-file) trs_file=$2; shift;;
++ --color-tests) color_tests=$2; shift;;
++ --expect-failure) expect_failure=$2; shift;;
++ --enable-hard-errors) enable_hard_errors=$2; shift;;
++ --) shift; break;;
++ -*) usage_error "invalid option: '$1'";;
++ *) break;;
++ esac
++ shift
++done
++
++missing_opts=
++test x"$test_name" = x && missing_opts="$missing_opts --test-name"
++test x"$log_file" = x && missing_opts="$missing_opts --log-file"
++test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
++if test x"$missing_opts" != x; then
++ usage_error "the following mandatory options are missing:$missing_opts"
++fi
++
++if test $# -eq 0; then
++ usage_error "missing argument"
++fi
++
++if test $color_tests = yes; then
++ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
++ red='[0;31m' # Red.
++ grn='[0;32m' # Green.
++ lgn='[1;32m' # Light green.
++ blu='[1;34m' # Blue.
++ mgn='[0;35m' # Magenta.
++ std='[m' # No color.
++else
++ red= grn= lgn= blu= mgn= std=
++fi
++
++do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
++trap "st=129; $do_exit" 1
++trap "st=130; $do_exit" 2
++trap "st=141; $do_exit" 13
++trap "st=143; $do_exit" 15
++
++# Test script is run here.
++top_srcdir="`dirname $0`/.."
++tests_dir="${top_srcdir}/tests"
++
++USE_VALGRIND="`printenv USE_VALGRIND`"
++
++if test "x${USE_VALGRIND}" = "x1"; then
++ ${top_srcdir}/libtool --mode=execute valgrind \
++ --leak-check=full \
++ --show-reachable=no \
++ --error-exitcode=1 \
++ --suppressions=$tests_dir/libnice.supp \
++ --num-callers=30 "$@" >$log_file 2>&1
++else
++ "$@" >$log_file 2>&1
++fi
++estatus=$?
++
++if test $enable_hard_errors = no && test $estatus -eq 99; then
++ tweaked_estatus=1
++else
++ tweaked_estatus=$estatus
++fi
++
++case $tweaked_estatus:$expect_failure in
++ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
++ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
++ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
++ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
++ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
++ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
++esac
++
++# Report the test outcome and exit status in the logs, so that one can
++# know whether the test passed or failed simply by looking at the '.log'
++# file, without the need of also peaking into the corresponding '.trs'
++# file (automake bug#11814).
++echo "$res $test_name (exit status: $estatus)" >>$log_file
++
++# Report outcome to console.
++echo "${col}${res}${std}: $test_name"
++
++# Register the test result, and other relevant metadata.
++echo ":test-result: $res" > $trs_file
++echo ":global-test-result: $res" >> $trs_file
++echo ":recheck: $recheck" >> $trs_file
++echo ":copy-in-global-log: $gcopy" >> $trs_file
++
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+diff --git a/scripts/valgrind.sh b/scripts/valgrind.sh
+deleted file mode 100755
+index 2864b6f..0000000
+--- a/scripts/valgrind.sh
++++ /dev/null
+@@ -1,28 +0,0 @@
+-#!/bin/sh
+-
+-export G_SLICE=always-malloc
+-export G_DEBUG=gc-friendly
+-
+-tests_dir="`dirname $0`/../tests"
+-
+-report=`libtool --mode=execute valgrind \
+- --leak-check=full \
+- --show-reachable=no \
+- --error-exitcode=1 \
+- --suppressions=$tests_dir/libnice.supp \
+- --num-callers=30 \
+- $1 2>&1`
+-
+-#if echo "$report" | grep -q ==; then
+-if test $? != 0; then
+- echo "$report"
+- exit 1
+-fi
+-
+-if echo "$report" | grep -q "definitely lost"; then
+- if ! echo "$report" | grep -q "definitely lost: 0 bytes"; then
+- echo "$report"
+- exit 1
+- fi
+-fi
+-
+--
+2.13.6
+
+
+From ae6d939e48366b80570d713b83334191b0982e71 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 20:34:05 -0400
+Subject: [PATCH 10/70] debug: Use libnice-verbose, not libnice-nice-verbose
+
+---
+ agent/debug.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agent/debug.c b/agent/debug.c
+index e1a298c..84fee94 100644
+--- a/agent/debug.c
++++ b/agent/debug.c
+@@ -102,7 +102,7 @@ void nice_debug_init (void)
+ flags |= g_parse_debug_string (gflags_string, gkeys, 4);
+ if (gflags_string && strstr (gflags_string, "libnice-pseudotcp-verbose"))
+ flags |= NICE_DEBUG_PSEUDOTCP_VERBOSE;
+- if (gflags_string && strstr (gflags_string, "libnice-nice-verbose")) {
++ if (gflags_string && strstr (gflags_string, "libnice-verbose")) {
+ flags |= NICE_DEBUG_NICE_VERBOSE;
+ }
+
+--
+2.13.6
+
+
+From 10c557f23f8337f1304fff27bd85d2eb713cb249 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Wed, 5 Apr 2017 17:01:35 -0400
+Subject: [PATCH 11/70] test-credentials: Fix leak
+
+---
+ tests/test-credentials.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tests/test-credentials.c b/tests/test-credentials.c
+index 1de4e49..f1ea89d 100644
+--- a/tests/test-credentials.c
++++ b/tests/test-credentials.c
+@@ -184,6 +184,8 @@ int main (void)
+ nice_agent_get_local_credentials (lagent, 1, &ufrag, &password);
+ g_assert (g_strcmp0("unicorns", ufrag) == 0);
+ g_assert (g_strcmp0("awesome", password) == 0);
++ g_free (ufrag);
++ g_free (password);
+
+ nice_agent_gather_candidates (lagent, 1);
+ nice_agent_gather_candidates (ragent, 1);
+--
+2.13.6
+
+
+From 1e9e28dbc98b4f6a7cf4bda0ca73b5abc2735ddc Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 14:41:51 -0400
+Subject: [PATCH 12/70] candidate: Add equality check function
+
+Add a function that can check if two candidates point to the same place.
+
+https://phabricator.freedesktop.org/T104
+
+Reviewed-by: Philip Withnall <philip.withnall(a)collabora.co.uk>
+Differential Revision: https://phabricator.freedesktop.org/D1715
+---
+ agent/candidate.c | 11 +++++++++++
+ agent/candidate.h | 18 +++++++++++++++++-
+ docs/reference/libnice/libnice-docs.xml | 4 ++++
+ docs/reference/libnice/libnice-sections.txt | 1 +
+ nice/libnice.sym | 1 +
+ 5 files changed, 34 insertions(+), 1 deletion(-)
+
+diff --git a/agent/candidate.c b/agent/candidate.c
+index 27966ef..85f8f65 100644
+--- a/agent/candidate.c
++++ b/agent/candidate.c
+@@ -360,3 +360,14 @@ nice_candidate_copy (const NiceCandidate *candidate)
+
+ return copy;
+ }
++
++NICEAPI_EXPORT gboolean
++nice_candidate_equal_target (const NiceCandidate *candidate1,
++ const NiceCandidate *candidate2)
++{
++ g_return_val_if_fail (candidate1 != NULL, FALSE);
++ g_return_val_if_fail (candidate2 != NULL, FALSE);
++
++ return (candidate1->transport == candidate2->transport &&
++ nice_address_equal (&candidate1->addr, &candidate2->addr));
++}
+diff --git a/agent/candidate.h b/agent/candidate.h
+index fadfce3..e556c16 100644
+--- a/agent/candidate.h
++++ b/agent/candidate.h
+@@ -230,7 +230,23 @@ nice_candidate_free (NiceCandidate *candidate);
+ NiceCandidate *
+ nice_candidate_copy (const NiceCandidate *candidate);
+
+-GType nice_candidate_get_type (void);
++/**
++ * nice_candidate_equal_target:
++ * @candidate1: A candidate
++ * @candidate2: A candidate
++ *
++ * Verifies that the candidates point to the same place, meaning they have
++ * the same transport and the same address. It ignores all other aspects.
++ *
++ * Returns: %TRUE if the candidates point to the same place
++ *
++ * Since: 0.1.15
++ */
++gboolean
++nice_candidate_equal_target (const NiceCandidate *candidate1,
++ const NiceCandidate *candidate2);
++
++ GType nice_candidate_get_type (void);
+
+ /**
+ * NICE_TYPE_CANDIDATE:
+diff --git a/docs/reference/libnice/libnice-docs.xml b/docs/reference/libnice/libnice-docs.xml
+index 53487bc..391be1a 100644
+--- a/docs/reference/libnice/libnice-docs.xml
++++ b/docs/reference/libnice/libnice-docs.xml
+@@ -105,6 +105,10 @@
+ <title>Index of new symbols in 0.1.14</title>
+ <xi:include href="xml/api-index-0.1.14.xml"><xi:fallback/></xi:include>
+ </index>
++ <index role="0.1.15">
++ <title>Index of new symbols in 0.1.15</title>
++ <xi:include href="xml/api-index-0.1.15.xml"><xi:fallback/></xi:include>
++ </index>
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+ </part>
+ </book>
+diff --git a/docs/reference/libnice/libnice-sections.txt b/docs/reference/libnice/libnice-sections.txt
+index d377257..88a6cd2 100644
+--- a/docs/reference/libnice/libnice-sections.txt
++++ b/docs/reference/libnice/libnice-sections.txt
+@@ -76,6 +76,7 @@ NICE_CANDIDATE_MAX_FOUNDATION
+ nice_candidate_new
+ nice_candidate_free
+ nice_candidate_copy
++nice_candidate_equal_target
+ <SUBSECTION Standard>
+ NICE_TYPE_CANDIDATE
+ nice_candidate_get_type
+diff --git a/nice/libnice.sym b/nice/libnice.sym
+index b04bb95..1e522ad 100644
+--- a/nice/libnice.sym
++++ b/nice/libnice.sym
+@@ -58,6 +58,7 @@ nice_agent_set_software
+ nice_agent_set_stream_name
+ nice_agent_set_stream_tos
+ nice_candidate_copy
++nice_candidate_equal_target
+ nice_candidate_free
+ nice_candidate_new
+ nice_component_state_to_string
+--
+2.13.6
+
+
+From ffc7fddac42728bac6e4753a17bc52e5e610ae8b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 4 Apr 2017 21:27:39 -0400
+Subject: [PATCH 13/70] agent: Drop packets not from validated addresses
+
+This is required by the WebRTC spec.
+
+Remove test-mainloop as it doesnt even try to do
+a negotiation.
+
+https://phabricator.freedesktop.org/T104
+
+Differential Revision: https://phabricator.freedesktop.org/D1716
+---
+ agent/agent-priv.h | 2 +
+ agent/agent.c | 20 +++++++++-
+ agent/component.c | 90 +++++++++++++++++++++++++++++++++++++++++
+ agent/component.h | 10 +++++
+ agent/conncheck.c | 8 +++-
+ tests/Makefile.am | 1 -
+ tests/test-mainloop.c | 108 --------------------------------------------------
+ 7 files changed, 127 insertions(+), 112 deletions(-)
+ delete mode 100644 tests/test-mainloop.c
+
+diff --git a/agent/agent-priv.h b/agent/agent-priv.h
+index 4d8c9b8..ada3630 100644
+--- a/agent/agent-priv.h
++++ b/agent/agent-priv.h
+@@ -114,6 +114,8 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
+ * MTU and estimated typical sizes of ICE STUN packet */
+ #define MAX_STUN_DATAGRAM_PAYLOAD 1300
+
++#define NICE_COMPONENT_MAX_VALID_CANDIDATES 50 /* maximum number of validates remote candidates to keep, the number is arbitrary but hopefully large enough */
++
+ struct _NiceAgent
+ {
+ GObject parent; /* gobject pointer */
+diff --git a/agent/agent.c b/agent/agent.c
+index 77f27e3..eff62f0 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -3682,8 +3682,6 @@ agent_recv_message_unlocked (
+ if (retval == RECV_OOB)
+ goto done;
+
+- agent->media_after_tick = TRUE;
+-
+ /* If the message’s stated length is equal to its actual length, it’s probably
+ * a STUN message; otherwise it’s probably data. */
+ if (stun_message_validate_buffer_length_fast (
+@@ -3715,6 +3713,7 @@ agent_recv_message_unlocked (
+ nice_debug ("%s: Valid STUN packet received.", G_STRFUNC);
+ retval = RECV_OOB;
+ g_free (big_buf);
++ agent->media_after_tick = TRUE;
+ goto done;
+ }
+ }
+@@ -3725,6 +3724,23 @@ agent_recv_message_unlocked (
+ g_free (big_buf);
+ }
+
++ if (!nice_component_verify_remote_candidate (component,
++ message->from, nicesock)) {
++ if (nice_debug_is_verbose ()) {
++ gchar str[INET6_ADDRSTRLEN];
++
++ nice_address_to_string (message->from, str);
++ nice_debug_verbose ("Agent %p : %d:%d DROPPING packet from unknown source"
++ " %s:%d sock-type: %d\n", agent, stream->id, component->id, str,
++ nice_address_get_port (message->from), nicesock->type);
++ }
++
++ retval = RECV_OOB;
++ goto done;
++ }
++
++ agent->media_after_tick = TRUE;
++
+ /* Unhandled STUN; try handling TCP data, then pass to the client. */
+ if (message->length > 0 && agent->reliable) {
+ if (!nice_socket_is_reliable (nicesock) &&
+diff --git a/agent/component.c b/agent/component.c
+index a679b30..ba28ffa 100644
+--- a/agent/component.c
++++ b/agent/component.c
+@@ -435,6 +435,8 @@ nice_component_update_selected_pair (NiceComponent *component, const CandidatePa
+ component->selected_pair.remote = pair->remote;
+ component->selected_pair.priority = pair->priority;
+ component->selected_pair.prflx_priority = pair->prflx_priority;
++
++ nice_component_add_valid_candidate (component, pair->remote);
+ }
+
+ /*
+@@ -514,6 +516,11 @@ nice_component_set_selected_remote_candidate (NiceComponent *component,
+ component->selected_pair.remote = remote;
+ component->selected_pair.priority = priority;
+
++ /* Get into fallback mode where packets from any source is accepted once
++ * this has been called. This is the expected behavior of pre-ICE SIP.
++ */
++ component->fallback_mode = TRUE;
++
+ return local;
+ }
+
+@@ -1107,6 +1114,9 @@ nice_component_finalize (GObject *obj)
+ g_warn_if_fail (cmp->remote_candidates == NULL);
+ g_warn_if_fail (cmp->incoming_checks == NULL);
+
++ g_list_free_full (cmp->valid_candidates,
++ (GDestroyNotify) nice_candidate_free);
++
+ g_clear_object (&cmp->tcp);
+ g_clear_object (&cmp->stop_cancellable);
+ g_clear_object (&cmp->iostream);
+@@ -1421,3 +1431,83 @@ turn_server_unref (TurnServer *turn)
+ g_slice_free (TurnServer, turn);
+ }
+ }
++
++void
++nice_component_add_valid_candidate (NiceComponent *component,
++ const NiceCandidate *candidate)
++{
++ guint count = 0;
++ GList *item, *last = NULL;
++
++ for (item = component->valid_candidates; item; item = item->next) {
++ NiceCandidate *cand = item->data;
++
++ last = item;
++ count++;
++ if (nice_candidate_equal_target (cand, candidate))
++ return;
++ }
++
++ /* New candidate */
++
++ if (nice_debug_is_enabled ()) {
++ char str[INET6_ADDRSTRLEN];
++ nice_address_to_string (&candidate->addr, str);
++ nice_debug ("Agent %p : %d:%d Adding valid source"
++ " candidate: %s:%d trans: %d\n", component->agent,
++ candidate->stream_id, candidate->component_id, str,
++ nice_address_get_port (&candidate->addr), candidate->transport);
++ }
++
++ component->valid_candidates = g_list_prepend (
++ component->valid_candidates, nice_candidate_copy (candidate));
++
++ /* Delete the last one to make sure we don't have a list that is too long,
++ * the candidates are not freed on ICE restart as this would be more complex,
++ * we just keep the list not too long.
++ */
++ if (count > NICE_COMPONENT_MAX_VALID_CANDIDATES) {
++ NiceCandidate *cand = last->data;
++
++ component->valid_candidates = g_list_delete_link (
++ component->valid_candidates, last);
++ nice_candidate_free (cand);
++ }
++}
++
++gboolean
++nice_component_verify_remote_candidate (NiceComponent *component,
++ const NiceAddress *address, NiceSocket *nicesock)
++{
++ GList *item;
++
++ if (component->fallback_mode)
++ return TRUE;
++
++ for (item = component->valid_candidates; item; item = item->next) {
++ NiceCandidate *cand = item->data;
++
++ if (((nicesock->type == NICE_SOCKET_TYPE_TCP_BSD &&
++ (cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE ||
++ cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE ||
++ cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_SO)) ||
++ cand->transport == NICE_CANDIDATE_TRANSPORT_UDP) &&
++ nice_address_equal (address, &cand->addr)) {
++ /* fast return if it's already the first */
++ if (item == component->valid_candidates)
++ return TRUE;
++
++ /* Put the current candidate at the top so that in the normal use-case,
++ * this function becomes O(1).
++ */
++ component->valid_candidates = g_list_remove_link (
++ component->valid_candidates, item);
++ component->valid_candidates = g_list_concat (item,
++ component->valid_candidates);
++
++ return TRUE;
++ }
++ }
++
++ return FALSE;
++}
+diff --git a/agent/component.h b/agent/component.h
+index 6712794..a8a1222 100644
+--- a/agent/component.h
++++ b/agent/component.h
+@@ -159,12 +159,14 @@ struct _NiceComponent {
+ NiceComponentState state;
+ GSList *local_candidates; /* list of NiceCandidate objs */
+ GSList *remote_candidates; /* list of NiceCandidate objs */
++ GList *valid_candidates; /* list of owned remote NiceCandidates that are part of valid pairs */
+ GSList *socket_sources; /* list of SocketSource objs; must only grow monotonically */
+ guint socket_sources_age; /* incremented when socket_sources changes */
+ GSList *incoming_checks; /* list of IncomingCheck objs */
+ GList *turn_servers; /* List of TurnServer objs */
+ CandidatePair selected_pair; /* independent from checklists,
+ see ICE 11.1. "Sending Media" (ID-19) */
++ gboolean fallback_mode; /* in this case, accepts packets from all, ignore candidate validation */
+ NiceCandidate *restart_candidate; /* for storing active remote candidate during a restart */
+ NiceCandidate *turn_candidate; /* for storing active turn candidate if turn servers have been cleared */
+ /* I/O handling. The main context must always be non-NULL, and is used for all
+@@ -301,6 +303,14 @@ turn_server_ref (TurnServer *turn);
+ void
+ turn_server_unref (TurnServer *turn);
+
++void
++nice_component_add_valid_candidate (NiceComponent *component,
++ const NiceCandidate *candidate);
++
++gboolean
++nice_component_verify_remote_candidate (NiceComponent *component,
++ const NiceAddress *address, NiceSocket *nicesock);
++
+
+ G_END_DECLS
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 1dc13dd..7ffa3db 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -2627,6 +2627,7 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ p->state = NICE_CHECK_SUCCEEDED;
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
+ priv_conn_check_unfreeze_related (agent, stream, p);
++ nice_component_add_valid_candidate (component, remote_candidate);
+ }
+ else {
+ if (!local_cand) {
+@@ -2652,8 +2653,10 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+
+ /* note: this is same as "adding to VALID LIST" in the spec
+ text */
+- if (new_pair)
++ if (new_pair) {
+ new_pair->valid = TRUE;
++ nice_component_add_valid_candidate (component, remote_candidate);
++ }
+
+ return new_pair;
+ }
+@@ -2739,6 +2742,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ nice_debug ("Agent %p : Mapped address not found."
+ " conncheck %p SUCCEEDED.", agent, p);
+ priv_conn_check_unfreeze_related (agent, stream, p);
++ nice_component_add_valid_candidate (component, p->remote);
+ } else {
+ ok_pair = priv_process_response_check_for_reflexive (agent,
+ stream, component, p, sockptr, &sockaddr.addr,
+@@ -3654,6 +3658,8 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ }
+ }
+
++ nice_component_add_valid_candidate (component, remote_candidate);
++
+ priv_reply_to_conn_check (agent, stream, component, local_candidate,
+ remote_candidate, from, nicesock, rbuf_len, &msg, use_candidate);
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 7bfe075..d24a2aa 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -45,7 +45,6 @@ check_PROGRAMS = \
+ test-send-recv \
+ test-socket-is-based-on \
+ test-priority \
+- test-mainloop \
+ test-fullmode \
+ test-restart \
+ test-fallback \
+diff --git a/tests/test-mainloop.c b/tests/test-mainloop.c
+deleted file mode 100644
+index 7c52daa..0000000
+--- a/tests/test-mainloop.c
++++ /dev/null
+@@ -1,108 +0,0 @@
+-/*
+- * This file is part of the Nice GLib ICE library.
+- *
+- * (C) 2006, 2007 Collabora Ltd.
+- * Contact: Dafydd Harries
+- * (C) 2006, 2007 Nokia Corporation. All rights reserved.
+- * Contact: Kai Vehmanen
+- *
+- * The contents of this file are subject to the Mozilla Public License Version
+- * 1.1 (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- * http://www.mozilla.org/MPL/
+- *
+- * Software distributed under the License is distributed on an "AS IS" basis,
+- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+- * for the specific language governing rights and limitations under the
+- * License.
+- *
+- * The Original Code is the Nice GLib ICE library.
+- *
+- * The Initial Developers of the Original Code are Collabora Ltd and Nokia
+- * Corporation. All Rights Reserved.
+- *
+- * Contributors:
+- * Dafydd Harries, Collabora Ltd.
+- * Kai Vehmanen, Nokia
+- *
+- * Alternatively, the contents of this file may be used under the terms of the
+- * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
+- * case the provisions of LGPL are applicable instead of those above. If you
+- * wish to allow use of your version of this file only under the terms of the
+- * LGPL and not to allow others to use your version of this file under the
+- * MPL, indicate your decision by deleting the provisions above and replace
+- * them with the notice and other provisions required by the LGPL. If you do
+- * not delete the provisions above, a recipient may use your version of this
+- * file under either the MPL or the LGPL.
+- */
+-#ifdef HAVE_CONFIG_H
+-# include <config.h>
+-#endif
+-
+-#include <string.h>
+-
+-#include <nice/nice.h>
+-#include "socket/socket.h"
+-
+-static GMainLoop *loop = NULL;
+-
+-static void
+-recv_cb (
+- NiceAgent *agent,
+- guint stream_id,
+- guint component_id,
+- guint len,
+- gchar *buf,
+- gpointer data)
+-{
+- g_assert (agent != NULL);
+- g_assert (stream_id == 1);
+- g_assert (component_id == 1);
+- g_assert (len == 6);
+- g_assert (0 == strncmp (buf, "\x80hello", len));
+- g_assert (42 == GPOINTER_TO_UINT (data));
+- g_main_loop_quit (loop);
+-}
+-
+-int
+-main (void)
+-{
+- NiceAgent *agent;
+- NiceAddress addr;
+- guint stream;
+-
+- nice_address_init (&addr);
+-
+- loop = g_main_loop_new (NULL, FALSE);
+-
+- agent = nice_agent_new (g_main_loop_get_context (loop), NICE_COMPATIBILITY_RFC5245);
+- nice_address_set_ipv4 (&addr, 0x7f000001);
+- nice_agent_add_local_address (agent, &addr);
+- stream = nice_agent_add_stream (agent, 1);
+- nice_agent_gather_candidates (agent, stream);
+-
+- // attach to default main context
+- nice_agent_attach_recv (agent, stream, NICE_COMPONENT_TYPE_RTP,
+- g_main_loop_get_context (loop), recv_cb, GUINT_TO_POINTER (42));
+-
+- {
+- NiceCandidate *candidate;
+- GSList *candidates, *i;
+-
+- candidates = nice_agent_get_local_candidates (agent, 1, 1);
+- candidate = candidates->data;
+-
+- nice_socket_send (candidate->sockptr, &(candidate->addr), 6, "\x80hello");
+- for (i = candidates; i; i = i->next)
+- nice_candidate_free ((NiceCandidate *) i->data);
+- g_slist_free (candidates);
+- }
+-
+- g_main_loop_run (loop);
+-
+- nice_agent_remove_stream (agent, stream);
+- g_object_unref (agent);
+-
+- return 0;
+-}
+-
+--
+2.13.6
+
+
+From 8fc22b0034d04cbc222e0637152b1cee2879eef3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Wed, 5 Apr 2017 17:43:26 -0400
+Subject: [PATCH 14/70] tests_: Add test to verify that only packets from
+ validated addresses pass
+
+https://phabricator.freedesktop.org/T104
+
+Reviewed-by: Philip Withnall <philip.withnall(a)collabora.co.uk>
+Differential Revision: https://phabricator.freedesktop.org/D1717
+---
+ tests/Makefile.am | 5 +-
+ tests/test-drop-invalid.c | 517 ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 521 insertions(+), 1 deletion(-)
+ create mode 100644 tests/test-drop-invalid.c
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index d24a2aa..62d5d64 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -54,7 +54,8 @@ check_PROGRAMS = \
+ test-tcp \
+ test-icetcp \
+ test-credentials \
+- test-turn
++ test-turn \
++ test-drop-invalid
+
+ dist_check_SCRIPTS = \
+ check-test-fullmode-with-stun.sh \
+@@ -128,6 +129,8 @@ test_credentials_LDADD = $(COMMON_LDADD)
+
+ test_turn_LDADD = $(COMMON_LDADD)
+
++test_drop_invalid_LDADD = $(COMMON_LDADD)
++
+ test_gstreamer_CFLAGS = $(AM_CFLAGS) $(GST_CHECK_CFLAGS)
+ test_gstreamer_LDADD = -lnice -L$(top_builddir)/nice/.libs $(GLIB_LIBS) $(GUPNP_LIBS) $(GST_CHECK_LIBS) $(GST_LIBS)
+
+diff --git a/tests/test-drop-invalid.c b/tests/test-drop-invalid.c
+new file mode 100644
+index 0000000..97e3586
+--- /dev/null
++++ b/tests/test-drop-invalid.c
+@@ -0,0 +1,517 @@
++/*
++ * This file is part of the Nice GLib ICE library.
++ *
++ * Unit test for ICE full-mode related features.
++ *
++ * (C) 2007 Nokia Corporation. All rights reserved.
++ * Contact: Kai Vehmanen
++ * (C) 2017 Collabora Ltd
++ * Contact: Olivier Crete <olivier.crete(a)collabora.com>
++ *
++ * The contents of this file are subject to the Mozilla Public License Version
++ * 1.1 (the "License"); you may not use this file except in compliance with
++ * the License. You may obtain a copy of the License at
++ * http://www.mozilla.org/MPL/
++ *
++ * Software distributed under the License is distributed on an "AS IS" basis,
++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
++ * for the specific language governing rights and limitations under the
++ * License.
++ *
++ * The Original Code is the Nice GLib ICE library.
++ *
++ * The Initial Developers of the Original Code are Collabora Ltd and Nokia
++ * Corporation. All Rights Reserved.
++ *
++ * Contributors:
++ * Kai Vehmanen, Nokia
++ *
++ * Alternatively, the contents of this file may be used under the terms of the
++ * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
++ * case the provisions of LGPL are applicable instead of those above. If you
++ * wish to allow use of your version of this file only under the terms of the
++ * LGPL and not to allow others to use your version of this file under the
++ * MPL, indicate your decision by deleting the provisions above and replace
++ * them with the notice and other provisions required by the LGPL. If you do
++ * not delete the provisions above, a recipient may use your version of this
++ * file under either the MPL or the LGPL.
++ */
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "agent.h"
++
++#include "socket/socket.h"
++
++#include <stdlib.h>
++#include <string.h>
++
++
++
++static NiceComponentState global_lagent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static NiceComponentState global_ragent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static guint global_components_ready = 0;
++static guint global_components_ready_exit = 0;
++static guint global_components_failed = 0;
++static guint global_components_failed_exit = 0;
++static GMainLoop *global_mainloop = NULL;
++static gboolean global_lagent_gathering_done = FALSE;
++static gboolean global_ragent_gathering_done = FALSE;
++static gboolean global_lagent_ibr_received = FALSE;
++static gboolean global_ragent_ibr_received = FALSE;
++static int global_lagent_cands = 0;
++static int global_ragent_cands = 0;
++static gint global_ragent_read = 0;
++static guint global_exit_when_ibr_received = 0;
++
++static void priv_print_global_status (void)
++{
++ g_debug ("\tgathering_done=%d", global_lagent_gathering_done && global_ragent_gathering_done);
++ g_debug ("\tlstate[rtp]=%d [rtcp]=%d", global_lagent_state[0], global_lagent_state[1]);
++ g_debug ("\trstate[rtp]=%d [rtcp]=%d", global_ragent_state[0], global_ragent_state[1]);
++ g_debug ("\tL cands=%d R cands=%d", global_lagent_cands, global_ragent_cands);
++}
++
++static gboolean timer_cb (gpointer pointer)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, pointer);
++
++ /* signal status via a global variable */
++
++ /* note: should not be reached, abort */
++ g_error ("ERROR: test has got stuck, aborting...");
++
++ return FALSE;
++}
++
++static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, user_data);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)component_id; (void)buf;
++
++ /* Core of the test
++ * Assert on any unreleated packet received. This would include anything
++ * send before the negotiation is over.
++ */
++ g_assert (len == 16);
++ g_assert (strncmp ("1234567812345678", buf, 16) == 0);
++
++ if (component_id == 2)
++ return;
++
++ if (GPOINTER_TO_UINT (user_data) == 2) {
++ g_debug ("right agent received %d bytes, stopping mainloop", len);
++ global_ragent_read = len;
++ g_main_loop_quit (global_mainloop);
++ }
++}
++
++static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ global_lagent_gathering_done = TRUE;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ global_ragent_gathering_done = TRUE;
++
++ if (global_lagent_gathering_done &&
++ global_ragent_gathering_done)
++ g_main_loop_quit (global_mainloop);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent;
++}
++
++static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
++{
++ gboolean ready_to_connected = FALSE;
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1) {
++ if (global_lagent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_lagent_state[component_id - 1] = state;
++ } else if (GPOINTER_TO_UINT (data) == 2) {
++ if (global_ragent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_ragent_state[component_id - 1] = state;
++ }
++
++ if (state == NICE_COMPONENT_STATE_READY)
++ global_components_ready++;
++ else if (state == NICE_COMPONENT_STATE_CONNECTED && ready_to_connected)
++ global_components_ready--;
++ if (state == NICE_COMPONENT_STATE_FAILED)
++ global_components_failed++;
++
++ g_debug ("test-drop-invalid: checks READY/EXIT-AT %u/%u.", global_components_ready, global_components_ready_exit);
++ g_debug ("test-drop-invalid: checks FAILED/EXIT-AT %u/%u.", global_components_failed, global_components_failed_exit);
++
++ /* signal status via a global variable */
++ if (global_components_ready == global_components_ready_exit &&
++ global_components_failed == global_components_failed_exit) {
++ g_debug ("Components ready/failed achieved. Stopping mailoop");
++ g_main_loop_quit (global_mainloop);
++ return;
++ }
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)data; (void)component_id;
++}
++
++static void cb_new_selected_pair(NiceAgent *agent, guint stream_id, guint component_id,
++ gchar *lfoundation, gchar* rfoundation, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ ++global_lagent_cands;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ ++global_ragent_cands;
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)component_id; (void)lfoundation; (void)rfoundation;
++}
++
++static void cb_new_candidate(NiceAgent *agent, guint stream_id, guint component_id,
++ gchar *foundation, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)data; (void)component_id; (void)foundation;
++}
++
++static void cb_initial_binding_request_received(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ global_lagent_ibr_received = TRUE;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ global_ragent_ibr_received = TRUE;
++
++ if (global_exit_when_ibr_received) {
++ g_debug ("Received initial binding request. Stopping mailoop");
++ g_main_loop_quit (global_mainloop);
++ }
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)data;
++}
++
++static void set_candidates (NiceAgent *from, guint from_stream,
++ NiceAgent *to, guint to_stream, guint component)
++{
++ GSList *cands = NULL;
++ GSList *peer_cands = NULL;
++ GSList *item1, *item2;
++
++ cands = nice_agent_get_local_candidates (from, from_stream, component);
++ peer_cands = nice_agent_get_local_candidates (to, to_stream, component);
++
++ /*
++ * Core of the test:
++ *
++ * Send packets that shoudl be dropped.
++ */
++
++ for (item1 = cands; item1; item1 = item1->next) {
++ NiceCandidate *cand = item1->data;
++ NiceSocket *nicesock = cand->sockptr;
++
++ g_assert (nicesock);
++
++ for (item2 = peer_cands; item2; item2 = item2->next) {
++ NiceCandidate *target_cand = item2->data;
++
++ nice_socket_send (nicesock, &target_cand->addr, 12, "123456789AB");
++ }
++
++ }
++
++ nice_agent_set_remote_candidates (to, to_stream, component, cands);
++
++ g_slist_free_full (cands, (GDestroyNotify) nice_candidate_free);
++ g_slist_free_full (peer_cands, (GDestroyNotify) nice_candidate_free);
++}
++
++static void set_credentials (NiceAgent *lagent, guint lstream,
++ NiceAgent *ragent, guint rstream)
++{
++ gchar *ufrag = NULL, *password = NULL;
++
++ nice_agent_get_local_credentials(lagent, lstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (ragent, rstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++ nice_agent_get_local_credentials(ragent, rstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (lagent, lstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++}
++
++static int run_full_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *baseaddr, guint ready, guint failed)
++{
++ guint ls_id, rs_id;
++ gint ret;
++
++ /* XXX: dear compiler, this is for you */
++ (void)baseaddr;
++
++ /* step: initialize variables modified by the callbacks */
++ global_components_ready = 0;
++ global_components_ready_exit = ready;
++ global_components_failed = 0;
++ global_components_failed_exit = failed;
++ global_lagent_gathering_done = FALSE;
++ global_ragent_gathering_done = FALSE;
++ global_lagent_ibr_received =
++ global_ragent_ibr_received = FALSE;
++ global_lagent_cands =
++ global_ragent_cands = 0;
++
++ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
++ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
++
++ /* step: add one stream, with RTP+RTCP components, to each agent */
++ ls_id = nice_agent_add_stream (lagent, 2);
++
++ rs_id = nice_agent_add_stream (ragent, 2);
++ g_assert (ls_id > 0);
++ g_assert (rs_id > 0);
++
++ /* Gather candidates and test nice_agent_set_port_range */
++ nice_agent_set_port_range (lagent, ls_id, 1, 10000, 10000);
++ nice_agent_set_port_range (lagent, ls_id, 2, 10001, 10001);
++ nice_agent_set_port_range (ragent, rs_id, 1, 12345, 12345);
++ nice_agent_set_port_range (ragent, rs_id, 2, 10000, 10001);
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id) == FALSE);
++ g_assert (nice_agent_get_local_candidates (ragent, rs_id, 1) == NULL);
++ g_assert (nice_agent_get_local_candidates (ragent, rs_id, 2) == NULL);
++ nice_agent_set_port_range (ragent, rs_id, 2, 10000, 10002);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id) == TRUE);
++
++ {
++ GSList *cands = NULL, *i;
++ NiceCandidate *cand = NULL;
++
++ cands = nice_agent_get_local_candidates (lagent, ls_id, 1);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 10000);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ cands = nice_agent_get_local_candidates (lagent, ls_id, 2);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 10001);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ cands = nice_agent_get_local_candidates (ragent, rs_id, 1);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 12345);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ cands = nice_agent_get_local_candidates (ragent, rs_id, 2);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 10002);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ }
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (1));
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (1));
++ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (2));
++ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (2));
++
++ /* step: run mainloop until local candidates are ready
++ * (see timer_cb() above) */
++ if (global_lagent_gathering_done != TRUE ||
++ global_ragent_gathering_done != TRUE) {
++ g_debug ("test-drop-invalid: Added streams, running mainloop until 'candidate-gathering-done'...");
++ g_main_loop_run (global_mainloop);
++ g_assert (global_lagent_gathering_done == TRUE);
++ g_assert (global_ragent_gathering_done == TRUE);
++ }
++
++ set_credentials (lagent, ls_id, ragent, rs_id);
++
++ /* step: pass the remote candidates to agents */
++ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTCP);
++
++ g_debug ("test-drop-invalid: Set properties, next running mainloop until connectivity checks succeed...");
++
++ /* step: run the mainloop until connectivity checks succeed
++ * (see timer_cb() above) */
++ g_main_loop_run (global_mainloop);
++
++ /* note: verify that STUN binding requests were sent */
++ g_assert (global_lagent_ibr_received == TRUE);
++ g_assert (global_ragent_ibr_received == TRUE);
++
++ /* note: Send a packet from another address */
++ /* These should also be ignored */
++ {
++ NiceCandidate *local_cand = NULL;
++ NiceCandidate *remote_cand = NULL;
++ NiceSocket *tmpsock;
++
++ g_assert (nice_agent_get_selected_pair (lagent, ls_id, 1, &local_cand,
++ &remote_cand));
++ g_assert (local_cand);
++ g_assert (remote_cand);
++
++ tmpsock = nice_udp_bsd_socket_new (NULL);
++ nice_socket_send (tmpsock, &remote_cand->addr, 4, "ABCD");
++ nice_socket_send (tmpsock, &local_cand->addr, 5, "ABCDE");
++ nice_socket_free (tmpsock);
++ }
++
++ /* note: test payload send and receive */
++ global_ragent_read = 0;
++ ret = nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678");
++ g_assert (ret != -1);
++ g_debug ("Sent %d bytes", ret);
++ g_assert (ret == 16);
++ while (global_ragent_read != 16)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_ragent_read == 16);
++
++ g_debug ("test-drop-invalid: Ran mainloop, removing streams...");
++
++ /* step: clean up resources and exit */
++
++ nice_agent_remove_stream (lagent, ls_id);
++ nice_agent_remove_stream (ragent, rs_id);
++
++ return 0;
++}
++
++int main (void)
++{
++ NiceAgent *lagent, *ragent; /* agent's L and R */
++ NiceAddress baseaddr;
++ int result;
++ guint timer_id;
++
++#ifdef G_OS_WIN32
++ WSADATA w;
++
++ WSAStartup(0x0202, &w);
++#endif
++
++ global_mainloop = g_main_loop_new (NULL, FALSE);
++
++ /* step: create the agents L and R */
++ lagent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_RFC5245);
++ ragent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_RFC5245);
++
++ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
++
++
++ nice_agent_set_software (lagent, "test-drop-invalid, Left Agent");
++ nice_agent_set_software (ragent, "test-drop-invalid, Right Agent");
++
++ /* step: add a timer to catch state changes triggered by signals */
++ timer_id = g_timeout_add (30000, timer_cb, NULL);
++
++ /* step: specify which local interface to use */
++ if (!nice_address_set_from_string (&baseaddr, "127.0.0.1"))
++ g_assert_not_reached ();
++ nice_agent_add_local_address (lagent, &baseaddr);
++ nice_agent_add_local_address (ragent, &baseaddr);
++
++ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "new-candidate",
++ G_CALLBACK (cb_new_candidate), GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "new-candidate",
++ G_CALLBACK (cb_new_candidate), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "initial-binding-request-received",
++ G_CALLBACK (cb_initial_binding_request_received),
++ GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "initial-binding-request-received",
++ G_CALLBACK (cb_initial_binding_request_received),
++ GUINT_TO_POINTER (2));
++
++ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
++
++
++ /* step: run test the first time */
++ g_debug ("test-drop-invalid: TEST STARTS / running test for the 1st time");
++ result = run_full_test (lagent, ragent, &baseaddr, 4 ,0);
++ priv_print_global_status ();
++ g_assert (result == 0);
++ g_assert (global_lagent_state[0] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_lagent_state[1] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_ragent_state[0] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_ragent_state[1] == NICE_COMPONENT_STATE_READY);
++ /* When using TURN, we get peer reflexive candidates for the host cands
++ that we removed so we can get another new_selected_pair signal later
++ depending on timing/racing, we could double (or not) the amount we expected
++ */
++
++ /* note: verify that correct number of local candidates were reported */
++ g_assert (global_lagent_cands == 2);
++ g_assert (global_ragent_cands == 2);
++
++ g_object_unref (lagent);
++ g_object_unref (ragent);
++
++ g_main_loop_unref (global_mainloop);
++ global_mainloop = NULL;
++
++ g_source_remove (timer_id);
++#ifdef G_OS_WIN32
++ WSACleanup();
++#endif
++ return result;
++}
+--
+2.13.6
+
+
+From f49ab88f957a3a250ef2ada0c0fab4fbbd3e5da8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 11 Apr 2017 16:42:55 -0400
+Subject: [PATCH 15/70] conncheck: Check the controlling state when the req was
+ sent
+
+It was checking when the pair was created, but the role may have
+already changed when the request is sent.
+---
+ agent/conncheck.c | 30 +++++++++++++++++++-----------
+ agent/conncheck.h | 1 -
+ 2 files changed, 19 insertions(+), 12 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 7ffa3db..5501c2b 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -1666,7 +1666,6 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ tmpbuf2, nice_address_get_port (&pair->remote->addr));
+ }
+ pair->nominated = use_candidate;
+- pair->controlling = agent->controlling_mode;
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local));
+
+@@ -2531,7 +2530,6 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
+ pair->priority = nice_candidate_pair_priority (pair->remote->priority,
+ pair->local->priority);
+ pair->nominated = FALSE;
+- pair->controlling = agent->controlling_mode;
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local_cand));
+ nice_debug ("Agent %p : added a new peer-discovered pair with foundation of '%s'.", agent, pair->foundation);
+@@ -2777,16 +2775,26 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
+ /* case: role conflict error, need to restart with new role */
+ nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
+- /* note: our role might already have changed due to an
+- * incoming request, but if not, change role now;
+- * follows ICE 7.1.2.1 "Failure Cases" (ID-19) */
+- priv_check_for_role_conflict (agent, !p->controlling);
+
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- p->state = NICE_CHECK_WAITING;
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
++ if (p->stun_message.buffer != NULL) {
++ guint64 tie;
++ gboolean controlled_mode;
++
++ /* note: our role might already have changed due to an
++ * incoming request, but if not, change role now;
++ * follows ICE 7.1.2.1 "Failure Cases" (ID-19) */
++ controlled_mode = (stun_message_find64 (&p->stun_message,
++ STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
++ STUN_MESSAGE_RETURN_SUCCESS);
++
++ priv_check_for_role_conflict (agent, controlled_mode);
++
++ p->stun_message.buffer = NULL;
++ p->stun_message.buffer_len = 0;
++ p->state = NICE_CHECK_WAITING;
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
++ }
+ trans_found = TRUE;
+ } else {
+ /* case: STUN error, the check STUN context was freed */
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index 10319cc..c204475 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -85,7 +85,6 @@ struct _CandidateCheckPair
+ gchar foundation[NICE_CANDIDATE_PAIR_MAX_FOUNDATION];
+ NiceCheckState state;
+ gboolean nominated;
+- gboolean controlling;
+ gboolean timer_restarted;
+ gboolean valid;
+ guint64 priority;
+--
+2.13.6
+
+
+From b0538d8c51f65019867b56a45cf90a70bef38f01 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 11 Apr 2017 18:31:21 -0400
+Subject: [PATCH 16/70] agent: Ignore remote candidate of non-accepted types
+
+If we disable ice-tcp or ice-udp, ignore the remote
+candidates for those types.
+---
+ agent/agent.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index eff62f0..77fb1eb 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -3112,6 +3112,13 @@ static gboolean priv_add_remote_candidate (
+ NiceComponent *component;
+ NiceCandidate *candidate;
+
++ if (transport == NICE_CANDIDATE_TRANSPORT_UDP &&
++ !agent->use_ice_udp)
++ return FALSE;
++ if (transport != NICE_CANDIDATE_TRANSPORT_UDP &&
++ !agent->use_ice_tcp)
++ return FALSE;
++
+ if (!agent_find_component (agent, stream_id, component_id, NULL, &component))
+ return FALSE;
+
+--
+2.13.6
+
+
+From f6f704c5e8d2193bc67ba2b697c77694e1698c43 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu, 9 Jun 2016 22:22:33 +0200
+Subject: [PATCH 17/70] stun timer: fix timeout of the last retransmission
+
+According to RFC 5389, section 7.2.1, a special timeout is applied to
+the last retransmission (Rm * RTO), with Rm default value of 16, instead
+of (64 * RTO), 2^6 when the number of transmissions Rc is set to 7.
+
+As spotted by Olivier Crete, stun_timer_* is a public API, that cannot
+be changed, and the initial delay (RTO) is not preserved in the
+stun_timer_s struct. So we use a hack that implicitely guess Rm from the
+number of transmissions Rc, by generalizing the default value of the
+spec for Rm and Rc to other values of Rc passed in stun_timer_start(
+
+According to the spec, with the default value of Rc=7, the last delay
+should be (64 * RTO), and it is instead (16 * RTO). So the last delay
+can be computed by dividing the penultimate delay by two, instead of
+multiplying it by two.
+
+Differential Revision: https://phabricator.freedesktop.org/D1108
+---
+ stun/usages/timer.c | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/stun/usages/timer.c b/stun/usages/timer.c
+index 2862ab8..5370cba 100644
+--- a/stun/usages/timer.c
++++ b/stun/usages/timer.c
+@@ -145,7 +145,11 @@ StunUsageTimerReturn stun_timer_refresh (StunTimer *timer)
+ if (timer->retransmissions >= timer->max_retransmissions)
+ return STUN_USAGE_TIMER_RETURN_TIMEOUT;
+
+- add_delay (&timer->deadline, timer->delay *= 2);
++ if (timer->retransmissions == timer->max_retransmissions - 1)
++ timer->delay = timer->delay / 2;
++ else
++ timer->delay = timer->delay * 2;
++ add_delay (&timer->deadline, timer->delay);
+ timer->retransmissions++;
+ return STUN_USAGE_TIMER_RETURN_RETRANSMIT;
+ }
+--
+2.13.6
+
+
+From 0a2cb0a9b14a5a1a4b01ba68ab2e5a2aa965f342 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 5 Apr 2016 21:32:39 +0200
+Subject: [PATCH 18/70] agent: do not create a GSource for UDP TURN socket
+
+With this patch, we don't create a new GSource for udp-turn socket,
+because it would duplicate the packets already received on the base UDP
+socket, as the underlying GSocket is the same. This is a race condition,
+because an UDP packet arriving on the base socket, may randomly be
+handled by the GSource callback created for the base socket (udp-bsd) of
+the callback created for the udp-turn socket. Moreover this callback
+already knows how to parse UDP datagrams received from a known turn
+server.
+
+This patch also prevents a subtle bug, when a STUN request is received
+directly from a peer, is handled by the udp turn socket. If the agent
+already has a valid permission for this remote candidate, established
+for another pair, it will happily send the STUN reply through the turn
+relay. This generates a source address mismatch on the peer agent, when
+it'll receive the STUN response from the turn relay instead of the
+initial address the request has been sent to.
+
+Differential Revision: https://phabricator.freedesktop.org/D932
+---
+ agent/component.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/agent/component.c b/agent/component.c
+index ba28ffa..ab665b6 100644
+--- a/agent/component.c
++++ b/agent/component.c
+@@ -105,6 +105,13 @@ socket_source_attach (SocketSource *socket_source, GMainContext *context)
+ if (socket_source->socket->fileno == NULL)
+ return;
+
++ /* Do not create a GSource for UDP turn socket, because it
++ * would duplicate the packets already received on the base
++ * UDP socket.
++ */
++ if (socket_source->socket->type == NICE_SOCKET_TYPE_UDP_TURN)
++ return;
++
+ /* Create a source. */
+ source = g_socket_create_source (socket_source->socket->fileno,
+ G_IO_IN, NULL);
+--
+2.13.6
+
+
+From d5446a72233eab8501be0b3fb9060c8be3ba034b Mon Sep 17 00:00:00 2001
+From: Philip Withnall <withnall(a)endlessm.com>
+Date: Mon, 1 May 2017 08:51:40 +0100
+Subject: [PATCH 19/70] examples: Stop installing the examples
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+There’s no point in installing them; their benefit is in providing
+example code to developers.
+
+Debian doesn’t package them; Fedora packages them in a separate
+subpackage which will have to disappear.
+
+Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+Reviewed-by: Olivier Crête <olivier.crete(a)collabora.com>
+Differential Revision: https://phabricator.freedesktop.org/D1737
+---
+ examples/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/examples/Makefile.am b/examples/Makefile.am
+index 1e7decf..9c80854 100644
+--- a/examples/Makefile.am
++++ b/examples/Makefile.am
+@@ -18,7 +18,7 @@ AM_CFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(GUPNP_CFLAGS)
+
+-bin_PROGRAMS = simple-example threaded-example sdp-example
++noinst_PROGRAMS = simple-example threaded-example sdp-example
+
+ simple_example_SOURCES = simple-example.c
+ simple_example_LDADD = $(top_builddir)/agent/libagent.la \
+--
+2.13.6
+
+
+From b4abda09c79e4ce372a3771300abf568c85c7ff5 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu, 21 Apr 2016 18:18:59 +0200
+Subject: [PATCH 20/70] interfaces: ignore predefined network interfaces
+
+Some interfaces, like the one managed by libvirtd to provide a network
+bridge to locally hosted virtual machines, can be completely ignored
+when gathering ICE candidates. The motivation for adding this
+possibility is that, ignoring them doesn't remove capabilities, and
+improves the overall speed of the connection check method, by reducing
+the number of pairs to be tested. This patch adds the possibility to
+define such interfaces in the configuration script.
+
+Differential Revision: https://phabricator.freedesktop.org/D948
+---
+ agent/interfaces.c | 6 ++++++
+ configure.ac | 14 ++++++++++++++
+ 2 files changed, 20 insertions(+)
+
+diff --git a/agent/interfaces.c b/agent/interfaces.c
+index 0fa2fd7..a81888e 100644
+--- a/agent/interfaces.c
++++ b/agent/interfaces.c
+@@ -276,6 +276,12 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
+ nice_debug ("Ignoring loopback interface");
+ g_free (addr_string);
+ }
++#ifdef IGNORED_IFACE_PREFIX
++ } else if (g_str_has_prefix (ifa->ifa_name, IGNORED_IFACE_PREFIX)) {
++ nice_debug ("Ignoring interface %s as it matches prefix %s",
++ ifa->ifa_name, IGNORED_IFACE_PREFIX);
++ g_free (addr_string);
++#endif
+ } else {
+ if (nice_interfaces_is_private_ip (ifa->ifa_addr))
+ ips = add_ip_to_list (ips, addr_string, TRUE);
+diff --git a/configure.ac b/configure.ac
+index b39bfe3..98bbc08 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -354,6 +354,20 @@ AM_CONDITIONAL([ENABLE_GTK_DOC], false)
+ # GObject introspection
+ GOBJECT_INTROSPECTION_CHECK([1.30.0])
+
++dnl Ignore a specific network interface name prefix from the connection check
++AC_MSG_CHECKING([whether to ignore a specific network interface name prefix])
++AC_ARG_WITH([ignored-network-interface-prefix],
++ [AS_HELP_STRING([--with-ignored-network-interface-prefix=string],
++ [Ignore network interfaces whose name starts with "string" from the ICE connection
++ check algorithm. For example, interfaces "virbr" in the case of the virtual bridge
++ handled by libvirtd, do not help in finding connectivity.])],
++ [interface_prefix="$withval"])
++AS_IF([test -n "$interface_prefix"],
++ [AC_DEFINE_UNQUOTED([IGNORED_IFACE_PREFIX],["$interface_prefix"],
++ [Ignore this network interface prefix from the connection check])
++ AC_MSG_RESULT([yes, $interface_prefix])],
++ [AC_MSG_RESULT([no])])
++
+ AC_CONFIG_MACRO_DIR(m4)
+
+ AC_OUTPUT
+--
+2.13.6
+
+
+From 80c613699786567fd93db74377138600794a86e0 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Thu, 8 Jun 2017 16:34:21 -0400
+Subject: [PATCH 21/70] agent: Use base_addr to generate rport in SDP
+
+Reported by Capricornus (zhushengliang)
+
+https://phabricator.freedesktop.org/T7763
+---
+ agent/agent.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 77fb1eb..1ff09af 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -5690,7 +5690,7 @@ _generate_candidate_sdp (NiceAgent *agent,
+ g_string_append_printf (sdp, " typ %s", _cand_type_to_sdp (candidate->type));
+ if (nice_address_is_valid (&candidate->base_addr) &&
+ !nice_address_equal (&candidate->addr, &candidate->base_addr)) {
+- port = nice_address_get_port (&candidate->addr);
++ port = nice_address_get_port (&candidate->base_addr);
+ nice_address_to_string (&candidate->base_addr, ip4);
+ g_string_append_printf (sdp, " raddr %s rport %d", ip4,
+ port == 0 ? 9 : port);
+--
+2.13.6
+
+
+From 8bb210c5af4bcaf342d7fa4fef6034269e976532 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu, 9 Jun 2016 23:28:43 +0200
+Subject: [PATCH 22/70] stun timer: make properties for stun timer tunables
+
+Three STUN binding request properties should be customisable. RFC 5245
+describes the retransmission timer of the STUN transaction 'RTO', and
+RFC 5389 describes the number of retransmissions to send until a
+response is received 'Rc'. The third property is the 'RTO' when
+a reliable connection is used.
+
+RFC 5389 introduces a supplementary property 'Rm' as a multiplier used
+to compute the final timeout RTO * Rm. However, this property is not
+added in libnice, because this would require breaking the public API for
+STUN. Currently, our STUN implementation hardcodes a division by two for
+this final timeout.
+
+Differential Revision: https://phabricator.freedesktop.org/D1109
+---
+ agent/agent-priv.h | 4 ++-
+ agent/agent.c | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++
+ agent/conncheck.c | 16 +++++----
+ agent/discovery.c | 8 ++---
+ stun/usages/timer.h | 6 +++-
+ 5 files changed, 118 insertions(+), 13 deletions(-)
+
+diff --git a/agent/agent-priv.h b/agent/agent-priv.h
+index ada3630..162ea63 100644
+--- a/agent/agent-priv.h
++++ b/agent/agent-priv.h
+@@ -106,7 +106,6 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
+
+ #define NICE_AGENT_TIMER_TA_DEFAULT 20 /* timer Ta, msecs (impl. defined) */
+ #define NICE_AGENT_TIMER_TR_DEFAULT 25000 /* timer Tr, msecs (impl. defined) */
+-#define NICE_AGENT_TIMER_TR_MIN 15000 /* timer Tr, msecs (ICE ID-19) */
+ #define NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT 100 /* see spec 5.7.3 (ID-19) */
+
+
+@@ -132,6 +131,9 @@ struct _NiceAgent
+ guint timer_ta; /* property: timer Ta */
+ guint max_conn_checks; /* property: max connectivity checks */
+ gboolean force_relay; /* property: force relay */
++ guint stun_max_retransmissions; /* property: stun max retransmissions, Rc */
++ guint stun_initial_timeout; /* property: stun initial timeout, RTO */
++ guint stun_reliable_timeout; /* property: stun reliable timeout */
+
+ GSList *local_addresses; /* list of NiceAddresses for local
+ interfaces */
+diff --git a/agent/agent.c b/agent/agent.c
+index 1ff09af..25d7886 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -113,6 +113,9 @@ enum
+ PROP_BYTESTREAM_TCP,
+ PROP_KEEPALIVE_CONNCHECK,
+ PROP_FORCE_RELAY,
++ PROP_STUN_MAX_RETRANSMISSIONS,
++ PROP_STUN_INITIAL_TIMEOUT,
++ PROP_STUN_RELIABLE_TIMEOUT,
+ };
+
+
+@@ -708,6 +711,76 @@ nice_agent_class_init (NiceAgentClass *klass)
+ FALSE,
+ G_PARAM_READWRITE));
+
++ /**
++ * NiceAgent:stun-max-retransmissions
++ *
++ * The maximum number of retransmissions of the STUN binding requests
++ * used in the gathering stage, to find our local candidates, and used
++ * in the connection check stage, to test the validity of each
++ * constructed pair. This property is described as 'Rc' in the RFC
++ * 5389, with a default value of 7. The timeout of each STUN request
++ * is doubled for each retransmission, so the choice of this value has
++ * a direct impact on the time needed to move from the CONNECTED state
++ * to the READY state, and on the time needed to complete the GATHERING
++ * state.
++ *
++ * Since: UNRELEASED
++ */
++
++ g_object_class_install_property (gobject_class, PROP_STUN_MAX_RETRANSMISSIONS,
++ g_param_spec_uint (
++ "stun-max-retransmissions",
++ "STUN Max Retransmissions",
++ "Maximum number of STUN binding requests retransmissions "
++ "described as 'Rc' in the STUN specification.",
++ 1, 99,
++ STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++
++ /**
++ * NiceAgent:stun-initial-timeout
++ *
++ * The initial timeout (msecs) of the STUN binding requests
++ * used in the gathering stage, to find our local candidates.
++ * This property is described as 'RTO' in the RFC 5389 and RFC 5245.
++ * This timeout is doubled for each retransmission, until
++ * #NiceAgent:stun-max-retransmissions have been done,
++ * with an exception for the last restransmission, where the timeout is
++ * divided by two instead (RFC 5389 indicates that a customisable
++ * multiplier 'Rm' to 'RTO' should be used).
++ *
++ * Since: UNRELEASED
++ */
++
++ g_object_class_install_property (gobject_class, PROP_STUN_INITIAL_TIMEOUT,
++ g_param_spec_uint (
++ "stun-initial-timeout",
++ "STUN Initial Timeout",
++ "STUN timeout in msecs of the initial binding requests used in the "
++ "gathering state, described as 'RTO' in the ICE specification.",
++ 20, 9999,
++ STUN_TIMER_DEFAULT_TIMEOUT,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++
++ /**
++ * NiceAgent:stun-reliable-timeout
++ *
++ * The initial timeout of the STUN binding requests used
++ * for a reliable timer.
++ *
++ * Since: UNRELEASED
++ */
++
++ g_object_class_install_property (gobject_class, PROP_STUN_RELIABLE_TIMEOUT,
++ g_param_spec_uint (
++ "stun-reliable-timeout",
++ "STUN Reliable Timeout",
++ "STUN timeout in msecs of the initial binding requests used for "
++ "a reliable timer.",
++ 20, 99999,
++ STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++
+ /* install signals */
+
+ /**
+@@ -1187,6 +1260,18 @@ nice_agent_get_property (
+ g_value_set_boolean (value, agent->force_relay);
+ break;
+
++ case PROP_STUN_MAX_RETRANSMISSIONS:
++ g_value_set_uint (value, agent->stun_max_retransmissions);
++ break;
++
++ case PROP_STUN_INITIAL_TIMEOUT:
++ g_value_set_uint (value, agent->stun_initial_timeout);
++ break;
++
++ case PROP_STUN_RELIABLE_TIMEOUT:
++ g_value_set_uint (value, agent->stun_reliable_timeout);
++ break;
++
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+@@ -1374,6 +1459,18 @@ nice_agent_set_property (
+ agent->force_relay = g_value_get_boolean (value);
+ break;
+
++ case PROP_STUN_MAX_RETRANSMISSIONS:
++ agent->stun_max_retransmissions = g_value_get_uint (value);
++ break;
++
++ case PROP_STUN_INITIAL_TIMEOUT:
++ agent->stun_initial_timeout = g_value_get_uint (value);
++ break;
++
++ case PROP_STUN_RELIABLE_TIMEOUT:
++ agent->stun_reliable_timeout = g_value_get_uint (value);
++ break;
++
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 5501c2b..14fdcd9 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -888,8 +888,9 @@ static gboolean priv_conn_keepalive_tick_unlocked (NiceAgent *agent)
+ agent, buf_len, p->keepalive.stun_message.buffer);
+
+ if (buf_len > 0) {
+- stun_timer_start (&p->keepalive.timer, STUN_TIMER_DEFAULT_TIMEOUT,
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ stun_timer_start (&p->keepalive.timer,
++ agent->stun_initial_timeout,
++ agent->stun_max_retransmissions);
+
+ agent->media_after_tick = FALSE;
+
+@@ -1116,8 +1117,9 @@ static void priv_turn_allocate_refresh_tick_unlocked (CandidateRefresh *cand)
+ }
+
+ if (buffer_len > 0) {
+- stun_timer_start (&cand->timer, STUN_TIMER_DEFAULT_TIMEOUT,
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ stun_timer_start (&cand->timer,
++ cand->agent->stun_initial_timeout,
++ cand->agent->stun_max_retransmissions);
+
+ /* send the refresh */
+ agent_socket_send (cand->nicesock, &cand->server,
+@@ -2171,11 +2173,11 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+
+ if (buffer_len > 0) {
+ if (nice_socket_is_reliable(pair->sockptr)) {
+- stun_timer_start_reliable(&pair->timer, STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT);
++ stun_timer_start_reliable(&pair->timer, agent->stun_reliable_timeout);
+ } else {
+ stun_timer_start (&pair->timer,
+ priv_compute_conncheck_timer (agent),
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ agent->stun_max_retransmissions);
+ }
+
+ /* TCP-ACTIVE candidate must create a new socket before sending
+@@ -2340,7 +2342,7 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ if (!nice_socket_is_reliable (p->sockptr) && !p->timer_restarted) {
+ stun_timer_start (&p->timer,
+ priv_compute_conncheck_timer (agent),
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ agent->stun_max_retransmissions);
+ p->timer_restarted = TRUE;
+ }
+ }
+diff --git a/agent/discovery.c b/agent/discovery.c
+index 7a890a0..4cc99c2 100644
+--- a/agent/discovery.c
++++ b/agent/discovery.c
+@@ -1072,11 +1072,11 @@ static gboolean priv_discovery_tick_unlocked (gpointer pointer)
+
+ if (buffer_len > 0) {
+ if (nice_socket_is_reliable (cand->nicesock)) {
+- stun_timer_start_reliable (&cand->timer,
+- STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT);
++ stun_timer_start_reliable (&cand->timer, agent->stun_reliable_timeout);
+ } else {
+- stun_timer_start (&cand->timer, 200,
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ stun_timer_start (&cand->timer,
++ agent->stun_initial_timeout,
++ agent->stun_max_retransmissions);
+ }
+
+ /* send the conncheck */
+diff --git a/stun/usages/timer.h b/stun/usages/timer.h
+index e74353b..097e75b 100644
+--- a/stun/usages/timer.h
++++ b/stun/usages/timer.h
+@@ -132,7 +132,11 @@ struct stun_timer_s {
+ * The default intial timeout to use for the timer
+ * RFC recommendds 500, but it's ridiculous, 50ms is known to work in most
+ * cases as it is also what is used by SIP style VoIP when sending A-Law and
+- * mu-Law audio, so 200ms should be hyper safe.
++ * mu-Law audio, so 200ms should be hyper safe. With an initial timeout
++ * of 200ms, a default of 7 transmissions, the last timeout will be
++ * 16 * 200ms, and we expect to receive a response from the stun server
++ * before (1 + 2 + 4 + 8 + 16 + 32 + 16) * 200ms = 15200 ms after the initial
++ * stun request has been sent.
+ */
+ #define STUN_TIMER_DEFAULT_TIMEOUT 200
+
+--
+2.13.6
+
+
+From 7a2c1edf502849a868b6f1026e8e2c343dee4ded Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 6 Jun 2016 22:24:50 +0200
+Subject: [PATCH 23/70] conncheck: update selected pair when nominated flag is
+ set
+
+This modifies commit 8f1f615. It is better focused to update the
+selected pair just after its nominated flag has been set. We also keep
+the code homogeneous with other places, where the call to
+priv_update_selected_pair() immediately follows the setting of
+pair->nominated. Moreover in priv_update_check_list_state_for_ready(),
+we would call priv_update_selected_pair() more times that necessary when
+iterating on all nominated pairs.
+
+Differential Revision: https://phabricator.freedesktop.org/D1125
+---
+ agent/conncheck.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 14fdcd9..8c55269 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -76,6 +76,8 @@ static void conn_check_free_item (gpointer data);
+ static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
+ NiceAgent *agent, guint stream_id, NiceComponent *component,
+ NiceCandidate *local, NiceCandidate *remote, NiceCheckState initial_state);
++static gboolean priv_update_selected_pair (NiceAgent *agent,
++ NiceComponent *component, CandidateCheckPair *pair);
+
+ static int priv_timer_expired (GTimeVal *timer, GTimeVal *now)
+ {
+@@ -515,6 +517,7 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ p->state == NICE_CHECK_DISCOVERED)) {
+ nice_debug ("Agent %p : restarting check %p as the nominated pair.", agent, p);
+ p->nominated = TRUE;
++ priv_update_selected_pair (agent, component, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ break; /* move to the next component */
+ }
+@@ -1530,7 +1533,6 @@ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream
+ ++valid;
+ if (p->nominated == TRUE) {
+ ++nominated;
+- priv_update_selected_pair (agent, component, p);
+ }
+ }
+ }
+--
+2.13.6
+
+
+From 3a58ba6120b188d78c5709e0349c0346bfa21c1a Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 1 Feb 2016 11:10:21 +0100
+Subject: [PATCH 24/70] conncheck: peer reflexive candidates are not paired
+
+This patch makes the code compliant with ICE RFC, 7.2.1.3 "Learning
+Peer Reflexive Candidates" and 7.1.3.2.1 "Discovering Peer Reflexive
+Candidates", where discovered candidates do not cause the creation
+of new pairs to be checked.
+
+Differential Revision: https://phabricator.freedesktop.org/D805
+---
+ agent/conncheck.c | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 8c55269..cdf1025 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -1787,6 +1787,15 @@ int conn_check_add_for_candidate (NiceAgent *agent, guint stream_id, NiceCompone
+
+ g_assert (remote != NULL);
+
++ /* note: according to 7.2.1.3, "Learning Peer Reflexive Candidates",
++ * the agent does not pair this candidate with any local candidates.
++ */
++ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245 &&
++ remote->type == NICE_CANDIDATE_TYPE_PEER_REFLEXIVE)
++ {
++ return added;
++ }
++
+ for (i = component->local_candidates; i ; i = i->next) {
+ NiceCandidate *local = i->data;
+
+@@ -1821,6 +1830,18 @@ int conn_check_add_for_local_candidate (NiceAgent *agent, guint stream_id, NiceC
+
+ g_assert (local != NULL);
+
++ /*
++ * note: according to 7.1.3.2.1 "Discovering Peer Reflexive
++ * Candidates", the peer reflexive candidate is not paired
++ * with other remote candidates
++ */
++
++ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245 &&
++ local->type == NICE_CANDIDATE_TYPE_PEER_REFLEXIVE)
++ {
++ return added;
++ }
++
+ for (i = component->remote_candidates; i ; i = i->next) {
+
+ NiceCandidate *remote = i->data;
+--
+2.13.6
+
+
+From a602ff57aae6a6afdeab843954c48e6fb5d82d31 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 13:02:45 +0200
+Subject: [PATCH 25/70] conncheck: fix pair state transition when successful
+ response is received
+
+According the ICE RFC 5245, 7.1.3.2.3, the pair that *generated* a
+successful check should go to state succeeded, not only the valid
+pair built in section 7.1.3.2.2.
+
+Differential Revision: https://phabricator.freedesktop.org/D810
+---
+ agent/conncheck.c | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index cdf1025..7fc2a1d 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -2654,7 +2654,10 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ }
+ else {
+ if (!local_cand) {
+- if (!agent->force_relay)
++ if (!agent->force_relay) {
++ /* step: find a new local candidate, see RFC 5245 7.1.3.2.1.
++ * "Discovering Peer Reflexive Candidates"
++ */
+ local_cand = discovery_add_peer_reflexive_candidate (agent,
+ stream->id,
+ component->id,
+@@ -2662,8 +2665,9 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ sockptr,
+ local_candidate,
+ remote_candidate);
+- p->state = NICE_CHECK_FAILED;
+- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
++ nice_debug ("Agent %p : added a new peer-reflexive local candidate %p",
++ agent, local_cand);
++ }
+ }
+
+ /* step: add a new discovered pair (see RFC 5245 7.1.3.2.2
+@@ -2671,7 +2675,12 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ if (local_cand)
+ new_pair = priv_add_peer_reflexive_pair (agent, stream->id, component,
+ local_cand, p);
+- nice_debug ("Agent %p : conncheck %p FAILED, %p DISCOVERED.", agent, p, new_pair);
++ /* step: The agent sets the state of the pair that *generated* the check to
++ * Succeeded, RFC 5245, 7.1.3.2.3, "Updating Pair States"
++ */
++ p->state = NICE_CHECK_SUCCEEDED;
++ nice_debug ("Agent %p : conncheck %p SUCCEEDED, %p DISCOVERED.",
++ agent, p, new_pair);
+ }
+
+ /* note: this is same as "adding to VALID LIST" in the spec
+--
+2.13.6
+
+
+From 0636f9addc041cf93c4ff4eaa351b1768d48a32e Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 19 Apr 2016 13:12:48 +0200
+Subject: [PATCH 26/70] conncheck: implement ice regular nomination method
+
+This patch implements Regular Nomation as described in RFC5245
+8.1.1.1. The controlling agent lets valid pairs accumulate, and
+decides which pair to recheck with the use-candidate attribute set.
+priv_mark_pair_nominated() follows 7.2.1.5, to update the nominated
+pair when acting as a STUN server, and
+priv_map_reply_to_conn_check_request() implements 7.1.3.2.4 to
+update the nominated pair when acting as a STUN client. A new
+property is also added to the agent to control the nomination
+mode, which can be regular of aggressive, with default value
+set to aggressive.
+
+Two new flags are introduced in the CandidateCheckPair structure:
+
+- use_candidate_on_next_check indicates the STUN client to add the
+ use-candidate attribute when the pair will be checked. At this
+ time, the nominated flag has not been set on this pair yet.
+
+- mark_nominated_on_response_arrival indicates the STUN server
+ to nominate the pair when its succesfull response to a
+ previous triggered check will arrive (7.2.1.5, item #2)
+
+Differential Revision: https://phabricator.freedesktop.org/D811
+---
+ agent/Makefile.am | 23 ++++
+ agent/agent-priv.h | 8 ++
+ agent/agent.c | 59 +++++++++
+ agent/agent.h | 43 ++++++-
+ agent/conncheck.c | 178 +++++++++++++++++++++++++++-
+ agent/conncheck.h | 2 +
+ configure.ac | 1 +
+ docs/reference/libnice/libnice-sections.txt | 2 +
+ 8 files changed, 309 insertions(+), 7 deletions(-)
+
+diff --git a/agent/Makefile.am b/agent/Makefile.am
+index b585393..915f312 100644
+--- a/agent/Makefile.am
++++ b/agent/Makefile.am
+@@ -22,6 +22,12 @@ if WINDOWS
+ AM_CFLAGS += -DWINVER=0x0501 # _WIN32_WINNT_WINXP
+ endif
+
++BUILT_SOURCES = \
++ agent-enum-types.h \
++ agent-enum-types.c
++
++CLEANFILES += $(BUILT_SOURCES)
++
+ noinst_LTLIBRARIES = libagent.la
+
+ libagent_la_SOURCES = \
+@@ -54,6 +60,23 @@ libagent_la_SOURCES = \
+ outputstream.c \
+ $(BUILT_SOURCES)
+
++agent-enum-types.h: agent.h Makefile
++ $(AM_V_GEN)$(GLIB_MKENUMS) \
++ --fhead "#ifndef __AGENT_ENUM_TYPES_H__\n#define __AGENT_ENUM_TYPES_H__ 1\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
++ --fprod "/* enumerations from \"@filename@\" */\n" \
++ --vhead "GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define NICE_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
++ --ftail "G_END_DECLS\n\n#endif /* !AGENT_ENUM_TYPES_H */" \
++ $(addprefix $(srcdir)/,agent.h) > $@
++
++agent-enum-types.c: agent.h Makefile agent-enum-types.h
++ $(AM_V_GEN)$(GLIB_MKENUMS) \
++ --fhead "#include <config.h>\n#include <glib-object.h>\n#include \"agent.h\"\n#include \"agent-enum-types.h\"" \
++ --fprod "\n/* enumerations from \"@filename@\" */" \
++ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType type = 0;\n if (!type) {\n static const G@Type@Value values[] = {" \
++ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
++ --vtail " { 0, NULL, NULL }\n };\n type = g_@type@_register_static (\"@EnumName@\", values);\n }\n return type;\n}\n\n" \
++ $(addprefix $(srcdir)/,agent.h) > $@
++
+ libagent_la_LIBADD = \
+ $(top_builddir)/random/libnice-random.la \
+ $(top_builddir)/socket/libsocket.la \
+diff --git a/agent/agent-priv.h b/agent/agent-priv.h
+index 162ea63..3384180 100644
+--- a/agent/agent-priv.h
++++ b/agent/agent-priv.h
+@@ -115,6 +115,13 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
+
+ #define NICE_COMPONENT_MAX_VALID_CANDIDATES 50 /* maximum number of validates remote candidates to keep, the number is arbitrary but hopefully large enough */
+
++/* A convenient macro to test if the agent is compatible with RFC5245
++ * or OC2007R2. Specifically these two modes share the support
++ * of the regular or aggressive nomination mode */
++#define NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2(obj) \
++ ((obj)->compatibility == NICE_COMPATIBILITY_RFC5245 || \
++ (obj)->compatibility == NICE_COMPATIBILITY_OC2007R2)
++
+ struct _NiceAgent
+ {
+ GObject parent; /* gobject pointer */
+@@ -134,6 +141,7 @@ struct _NiceAgent
+ guint stun_max_retransmissions; /* property: stun max retransmissions, Rc */
+ guint stun_initial_timeout; /* property: stun initial timeout, RTO */
+ guint stun_reliable_timeout; /* property: stun reliable timeout */
++ NiceNominationMode nomination_mode; /* property: Nomination mode */
+
+ GSList *local_addresses; /* list of NiceAddresses for local
+ interfaces */
+diff --git a/agent/agent.c b/agent/agent.c
+index 25d7886..577a7e0 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -73,6 +73,7 @@
+ #include "interfaces.h"
+
+ #include "pseudotcp.h"
++#include "agent-enum-types.h"
+
+ /* Maximum size of a UDP packet’s payload, as the packet’s length field is 16b
+ * wide. */
+@@ -116,6 +117,7 @@ enum
+ PROP_STUN_MAX_RETRANSMISSIONS,
+ PROP_STUN_INITIAL_TIMEOUT,
+ PROP_STUN_RELIABLE_TIMEOUT,
++ PROP_NOMINATION_MODE,
+ };
+
+
+@@ -440,6 +442,24 @@ nice_agent_class_init (NiceAgentClass *klass)
+ G_PARAM_READWRITE));
+
+ /**
++ * NiceAgent:nomination-mode:
++ *
++ * The nomination mode used in the ICE specification for describing
++ * the selection of valid pairs to be used upstream.
++ * <para> See also: #NiceNominationMode </para>
++ *
++ * Since: UNRELEASED
++ */
++ g_object_class_install_property (gobject_class, PROP_NOMINATION_MODE,
++ g_param_spec_enum (
++ "nomination-mode",
++ "ICE nomination mode",
++ "Nomination mode used in the ICE specification for describing "
++ "the selection of valid pairs to be used upstream",
++ NICE_TYPE_NOMINATION_MODE, NICE_NOMINATION_MODE_AGGRESSIVE,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++
++ /**
+ * NiceAgent:proxy-ip:
+ *
+ * The proxy server IP used to bypass a proxy firewall
+@@ -1096,6 +1116,7 @@ nice_agent_init (NiceAgent *agent)
+ agent->stun_server_port = DEFAULT_STUN_PORT;
+ agent->controlling_mode = TRUE;
+ agent->max_conn_checks = NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT;
++ agent->nomination_mode = NICE_NOMINATION_MODE_AGGRESSIVE;
+
+ agent->discovery_list = NULL;
+ agent->discovery_unsched_items = 0;
+@@ -1144,6 +1165,23 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat)
+ }
+
+
++NICEAPI_EXPORT NiceAgent *
++nice_agent_new_full (GMainContext *ctx,
++ NiceCompatibility compat,
++ gboolean reliable,
++ NiceNominationMode nomination)
++{
++ NiceAgent *agent = g_object_new (NICE_TYPE_AGENT,
++ "compatibility", compat,
++ "main-context", ctx,
++ "reliable", reliable,
++ "nomination-mode", nomination,
++ NULL);
++
++ return agent;
++}
++
++
+ static void
+ nice_agent_get_property (
+ GObject *object,
+@@ -1190,6 +1228,10 @@ nice_agent_get_property (
+ /* XXX: should we prune the list of already existing checks? */
+ break;
+
++ case PROP_NOMINATION_MODE:
++ g_value_set_enum (value, agent->nomination_mode);
++ break;
++
+ case PROP_PROXY_IP:
+ g_value_set_string (value, agent->proxy_ip);
+ break;
+@@ -1394,6 +1436,10 @@ nice_agent_set_property (
+ agent->max_conn_checks = g_value_get_uint (value);
+ break;
+
++ case PROP_NOMINATION_MODE:
++ agent->nomination_mode = g_value_get_enum (value);
++ break;
++
+ case PROP_PROXY_IP:
+ g_free (agent->proxy_ip);
+ agent->proxy_ip = g_value_dup_string (value);
+@@ -3298,6 +3344,19 @@ static gboolean priv_add_remote_candidate (
+ username, password, priority);
+ }
+
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ /* note: If there are TCP candidates for a media stream,
++ * a controlling agent MUST use the regular selection algorithm,
++ * RFC 6544, sect 8, "Concluding ICE Processing"
++ */
++ if (agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE &&
++ transport != NICE_CANDIDATE_TRANSPORT_UDP) {
++ nice_debug ("Agent %p : we have TCP candidates, switching back "
++ "to regular nomination mode", agent);
++ agent->nomination_mode = NICE_NOMINATION_MODE_REGULAR;
++ }
++ }
++
+ if (base_addr)
+ candidate->base_addr = *base_addr;
+
+diff --git a/agent/agent.h b/agent/agent.h
+index 47c4d5a..6e233c6 100644
+--- a/agent/agent.h
++++ b/agent/agent.h
+@@ -377,6 +377,26 @@ typedef enum
+ NICE_PROXY_TYPE_LAST = NICE_PROXY_TYPE_HTTP,
+ } NiceProxyType;
+
++/**
++ * NiceNominationMode:
++ * @NICE_NOMINATION_MODE_AGGRESSIVE: Aggressive nomination mode
++ * @NICE_NOMINATION_MODE_REGULAR: Regular nomination mode
++ *
++ * An enum to specity the kind of nomination mode to use by
++ * the agent, as described in RFC 5245. Two modes exists,
++ * regular and aggressive. They differ by the way the controlling
++ * agent chooses to put the USE-CANDIDATE attribute in its STUN
++ * messages. The aggressive mode is supposed to nominate a pair
++ * faster, than the regular mode, potentially causing the nominated
++ * pair to change until the connection check completes.
++ *
++ * Since: UNRELEASED
++ */
++typedef enum
++{
++ NICE_NOMINATION_MODE_REGULAR = 0,
++ NICE_NOMINATION_MODE_AGGRESSIVE,
++} NiceNominationMode;
+
+ /**
+ * NiceAgentRecvFunc:
+@@ -429,6 +449,28 @@ NiceAgent *
+ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+
+ /**
++ * nice_agent_new_full:
++ * @ctx: The Glib Mainloop Context to use for timers
++ * @compat: The compatibility mode of the agent
++ * @reliable: The reliability mode of the agent
++ * @nomination: The nomination mode of the agent
++ *
++ * Create a new #NiceAgent with parameters that must be be defined at
++ * construction time.
++ * The returned object must be freed with g_object_unref()
++ * <para> See also: #NiceNominationMode </para>
++ *
++ * Since: UNRELEASED
++ *
++ * Returns: The new agent GObject
++ */
++NiceAgent *
++nice_agent_new_full (GMainContext *ctx,
++ NiceCompatibility compat,
++ gboolean reliable,
++ NiceNominationMode nomination);
++
++/**
+ * nice_agent_add_local_address:
+ * @agent: The #NiceAgent Object
+ * @addr: The address to listen to
+@@ -447,7 +489,6 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+ gboolean
+ nice_agent_add_local_address (NiceAgent *agent, NiceAddress *addr);
+
+-
+ /**
+ * nice_agent_add_stream:
+ * @agent: The #NiceAgent Object
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 7fc2a1d..6827e6e 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -502,7 +502,62 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ if (s_nominated < stream->n_components &&
+ s_waiting_for_nomination) {
+ keep_timer_going = TRUE;
+- if (agent->controlling_mode) {
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ if (agent->nomination_mode == NICE_NOMINATION_MODE_REGULAR &&
++ agent->controlling_mode &&
++ ((waiting == 0 && s_inprogress == 0) ||
++ (s_succeeded + s_discovered) >= 5 * stream->n_components)){
++ /* ICE 8.1.1.1 Regular nomination
++ * we choose to nominate the valid pair if
++ * there is no pair left waiting or in-progress or
++ * if there are at least 5 valid pairs per stream on average.
++ *
++ * This is the "stopping criterion" described in 8.1.1.1, and is
++ * a "local optimization" between accumulating more valid pairs,
++ * and limiting the time spent waiting for in-progress connections
++ * checks until they finally fail.
++ */
++ GSList *component_item;
++
++ for (component_item = stream->components; component_item;
++ component_item = component_item->next) {
++ NiceComponent *component = component_item->data;
++ gboolean already_done = FALSE;
++
++ /* verify that the choice of the pair to be nominated
++ * has not already been done
++ */
++ for (k = stream->conncheck_list; k ; k = k->next) {
++ CandidateCheckPair *p = k->data;
++ if (p->component_id == component->id &&
++ p->use_candidate_on_next_check) {
++ already_done = TRUE;
++ break;
++ }
++ }
++
++ /* choose a pair to be nominated in the list of valid
++ * pairs, and add it to the triggered checks list
++ */
++ if (!already_done) {
++ for (k = stream->conncheck_list; k ; k = k->next) {
++ CandidateCheckPair *p = k->data;
++ /* note: highest priority item selected (list always sorted) */
++ if (p->component_id == component->id &&
++ !p->nominated &&
++ !p->use_candidate_on_next_check &&
++ p->valid) {
++ nice_debug ("Agent %p : restarting check %p with "
++ "USE-CANDIDATE attrib (regular nomination)", agent, p);
++ p->use_candidate_on_next_check = TRUE;
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ break; /* move to the next component */
++ }
++ }
++ }
++ }
++ }
++ } else if (agent->controlling_mode) {
+ GSList *component_item;
+
+ for (component_item = stream->components; component_item;
+@@ -1571,10 +1626,40 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+
+ g_assert (component);
+
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent) &&
++ agent->controlling_mode)
++ return;
++
+ /* step: search for at least one nominated pair */
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *pair = i->data;
+- if (pair->local == localcand && pair->remote == remotecand) {
++ if (pair->local == localcand && pair->remote == remotecand &&
++ NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ /* ICE, 7.2.1.5. Updating the Nominated Flag */
++ /* note: TCP candidates typically produce peer reflexive
++ * candidate, generating a "discovered" pair that can be
++ * nominated.
++ */
++ if (pair->valid) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated",
++ agent, pair, pair->foundation);
++ pair->nominated = TRUE;
++ priv_update_selected_pair (agent, component, pair);
++ /* Do not step down to CONNECTED if we're already at state READY*/
++ if (component->state != NICE_COMPONENT_STATE_READY) {
++ /* step: notify the client of a new component state (must be done
++ * before the possible check list state update step */
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
++ }
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ } else if (pair->state == NICE_CHECK_IN_PROGRESS) {
++ pair->mark_nominated_on_response_arrival = TRUE;
++ nice_debug ("Agent %p : pair %p (%s) is in-progress, "
++ "will be nominated on response receipt.",
++ agent, pair, pair->foundation);
++ }
++ } else if (pair->local == localcand && pair->remote == remotecand) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated", agent, pair, pair->foundation);
+ pair->nominated = TRUE;
+ if (pair->valid) {
+@@ -2174,7 +2259,35 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ pair->prflx_priority, controlling);
+ }
+
+- if (cand_use)
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ switch (agent->nomination_mode) {
++ case NICE_NOMINATION_MODE_REGULAR:
++ {
++ /* We are doing regular nomination, so we set the use-candidate
++ * attrib, when the controlling agent decided which valid pair to
++ * resend with this flag in priv_conn_check_tick_stream()
++ */
++ cand_use = pair->use_candidate_on_next_check;
++ nice_debug ("Agent %p : %s: set cand_use=%d "
++ "(regular nomination).", agent, G_STRFUNC, cand_use);
++ break;
++ }
++ case NICE_NOMINATION_MODE_AGGRESSIVE:
++ {
++ /* We are doing aggressive nomination, we set the use-candidate
++ * attrib in every check we send, when we are the controlling
++ * agent, RFC 5245, 8.1.1.2
++ */
++ cand_use = controlling;
++ nice_debug ("Agent %p : %s: set cand_use=%d "
++ "(aggressive nomination).", agent, G_STRFUNC, cand_use);
++ break;
++ }
++ default:
++ /* Nothing to do. */
++ break;
++ }
++ } else if (cand_use)
+ pair->nominated = controlling;
+
+ if (uname_len > 0) {
+@@ -2781,12 +2894,66 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ local_candidate, remote_candidate);
+ }
+
+-
++ /* Note: this assignment helps to reduce the numbers of cases
++ * to be tested. If ok_pair and p refer to distinct pairs, it
++ * means that ok_pair is a discovered peer reflexive one,
++ * caused by the check made on pair p. In that case, the
++ * flags to be tested are on p, but the nominated flag will be
++ * set on ok_pair. When there's no discovered pair, p and
++ * ok_pair refer to the same pair.
++ * To summarize : p is a SUCCEEDED pair, ok_pair is a
++ * DISCOVERED, VALID, and eventually NOMINATED pair.
++ */
+ if (!ok_pair)
+ ok_pair = p;
+
+ /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
+ Nominated Flag" (ID-19) */
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ nice_debug ("Agent %p : Updating nominated flag (%s): "
++ "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
++ agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
++ "UDP" : "TCP",
++ ok_pair, ok_pair->use_candidate_on_next_check,
++ ok_pair->mark_nominated_on_response_arrival,
++ p, p->use_candidate_on_next_check,
++ p->mark_nominated_on_response_arrival);
++
++ if (agent->controlling_mode) {
++ switch (agent->nomination_mode) {
++ case NICE_NOMINATION_MODE_REGULAR:
++ if (p->use_candidate_on_next_check) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(regular nomination, control=1, "
++ "use_cand_on_next_check=1).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
++ }
++ break;
++ case NICE_NOMINATION_MODE_AGGRESSIVE:
++ if (!p->nominated) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(aggressive nomination, control=1).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
++ }
++ break;
++ default:
++ /* Nothing to do */
++ break;
++ }
++ } else {
++ if (p->mark_nominated_on_response_arrival) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(%s nomination, control=0, mark_on_response=1).",
++ agent, ok_pair, ok_pair->foundation,
++ agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
++ "aggressive" : "regular");
++ ok_pair->nominated = TRUE;
++ }
++ }
++ }
++
+ if (ok_pair->nominated == TRUE) {
+ priv_update_selected_pair (agent, component, ok_pair);
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+@@ -3668,8 +3835,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ stun_usage_ice_conncheck_use_candidate (&req);
+ uint32_t priority = stun_usage_ice_conncheck_priority (&req);
+
+- if (agent->controlling_mode ||
+- agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
++ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
+ agent->compatibility == NICE_COMPATIBILITY_MSN ||
+ agent->compatibility == NICE_COMPATIBILITY_OC2007)
+ use_candidate = TRUE;
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index c204475..0f988de 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -87,6 +87,8 @@ struct _CandidateCheckPair
+ gboolean nominated;
+ gboolean timer_restarted;
+ gboolean valid;
++ gboolean use_candidate_on_next_check;
++ gboolean mark_nominated_on_response_arrival;
+ guint64 priority;
+ guint32 prflx_priority;
+ GTimeVal next_tick; /* next tick timestamp */
+diff --git a/configure.ac b/configure.ac
+index 98bbc08..6c106ff 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -57,6 +57,7 @@ AC_PROG_CC
+ AM_PROG_AR
+ LT_PREREQ([2.2.6])
+ LT_INIT([dlopen win32-dll disable-static])
++AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
+
+ # Check Operating System
+ AC_MSG_CHECKING([operating system])
+diff --git a/docs/reference/libnice/libnice-sections.txt b/docs/reference/libnice/libnice-sections.txt
+index 88a6cd2..a481106 100644
+--- a/docs/reference/libnice/libnice-sections.txt
++++ b/docs/reference/libnice/libnice-sections.txt
+@@ -5,6 +5,7 @@ NiceAgent
+ NiceComponentState
+ NiceComponentType
+ NiceProxyType
++NiceNominationMode
+ NiceCompatibility
+ NiceAgentRecvFunc
+ NiceInputMessage
+@@ -12,6 +13,7 @@ NiceOutputMessage
+ NICE_AGENT_MAX_REMOTE_CANDIDATES
+ nice_agent_new
+ nice_agent_new_reliable
++nice_agent_new_full
+ nice_agent_add_local_address
+ nice_agent_set_port_range
+ nice_agent_add_stream
+--
+2.13.6
+
+
+From 4497d9b7afaaea7124db4a2cd13546d9366b5986 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Wed, 22 Jun 2016 15:44:39 +0200
+Subject: [PATCH 27/70] test-nomination: added a new test for the nomination
+ mode
+
+Differential Revision: https://phabricator.freedesktop.org/D1107
+---
+ tests/Makefile.am | 5 +-
+ tests/test-nomination.c | 263 ++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 267 insertions(+), 1 deletion(-)
+ create mode 100644 tests/test-nomination.c
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 62d5d64..b623764 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -55,7 +55,8 @@ check_PROGRAMS = \
+ test-icetcp \
+ test-credentials \
+ test-turn \
+- test-drop-invalid
++ test-drop-invalid \
++ test-nomination
+
+ dist_check_SCRIPTS = \
+ check-test-fullmode-with-stun.sh \
+@@ -131,6 +132,8 @@ test_turn_LDADD = $(COMMON_LDADD)
+
+ test_drop_invalid_LDADD = $(COMMON_LDADD)
+
++test_nomination_LDADD = $(COMMON_LDADD)
++
+ test_gstreamer_CFLAGS = $(AM_CFLAGS) $(GST_CHECK_CFLAGS)
+ test_gstreamer_LDADD = -lnice -L$(top_builddir)/nice/.libs $(GLIB_LIBS) $(GUPNP_LIBS) $(GST_CHECK_LIBS) $(GST_LIBS)
+
+diff --git a/tests/test-nomination.c b/tests/test-nomination.c
+new file mode 100644
+index 0000000..b5a5e5f
+--- /dev/null
++++ b/tests/test-nomination.c
+@@ -0,0 +1,263 @@
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++
++#include <gio/gio.h>
++#include <agent.h>
++
++static NiceComponentState global_lagent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static NiceComponentState global_ragent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static guint global_components_ready = 0;
++static gboolean global_lagent_gathering_done = FALSE;
++static gboolean global_ragent_gathering_done = FALSE;
++static int global_lagent_cands = 0;
++static int global_ragent_cands = 0;
++
++static gboolean timer_cb (gpointer pointer)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, pointer);
++
++ /* signal status via a global variable */
++
++ /* note: should not be reached, abort */
++ g_error ("ERROR: test has got stuck, aborting...");
++
++ return FALSE;
++}
++
++static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, user_data);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)component_id; (void)buf;
++
++ /*
++ * Lets ignore stun packets that got through
++ */
++ if (len < 8)
++ return;
++ if (strncmp ("12345678", buf, 8))
++ return;
++
++ if (component_id != 1)
++ return;
++}
++
++static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ global_lagent_gathering_done = TRUE;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ global_ragent_gathering_done = TRUE;
++}
++
++
++static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
++{
++ gboolean ready_to_connected = FALSE;
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1) {
++ if (global_lagent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_lagent_state[component_id - 1] = state;
++ } else if (GPOINTER_TO_UINT (data) == 2) {
++ if (global_ragent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_ragent_state[component_id - 1] = state;
++ }
++
++ if (state == NICE_COMPONENT_STATE_READY)
++ global_components_ready++;
++ else if (state == NICE_COMPONENT_STATE_CONNECTED && ready_to_connected)
++ global_components_ready--;
++ g_assert (state != NICE_COMPONENT_STATE_FAILED);
++
++ g_debug ("test-nomination: checks READY %u.", global_components_ready);
++}
++
++static void cb_new_selected_pair(NiceAgent *agent, guint stream_id,
++ guint component_id, gchar *lfoundation, gchar* rfoundation, gpointer data)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ ++global_lagent_cands;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ ++global_ragent_cands;
++}
++
++static void set_candidates (NiceAgent *from, guint from_stream,
++ NiceAgent *to, guint to_stream, guint component)
++{
++ GSList *cands = NULL, *i;
++
++ cands = nice_agent_get_local_candidates (from, from_stream, component);
++ nice_agent_set_remote_candidates (to, to_stream, component, cands);
++
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++}
++
++static void set_credentials (NiceAgent *lagent, guint lstream,
++ NiceAgent *ragent, guint rstream)
++{
++ gchar *ufrag = NULL, *password = NULL;
++
++ nice_agent_get_local_credentials(lagent, lstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (ragent, rstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++ nice_agent_get_local_credentials(ragent, rstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (lagent, lstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++}
++
++static void
++run_test(NiceNominationMode l_nomination_mode,
++ NiceNominationMode r_nomination_mode)
++{
++ NiceAgent *lagent, *ragent; /* agent's L and R */
++ const gchar *localhost;
++ NiceAddress localaddr;
++ guint ls_id, rs_id;
++ gulong timer_id;
++
++ localhost = "127.0.0.1";
++
++ /* step: initialize variables modified by the callbacks */
++ global_components_ready = 0;
++ global_lagent_gathering_done = FALSE;
++ global_ragent_gathering_done = FALSE;
++ global_lagent_cands = global_ragent_cands = 0;
++
++ lagent = nice_agent_new_full (NULL,
++ NICE_COMPATIBILITY_RFC5245,
++ FALSE, /* reliable */
++ l_nomination_mode);
++
++ ragent = nice_agent_new_full (NULL,
++ NICE_COMPATIBILITY_RFC5245,
++ FALSE, /* reliable */
++ r_nomination_mode);
++
++ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
++
++ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
++ nice_agent_set_software (lagent, "Test-nomination, Left Agent");
++ nice_agent_set_software (ragent, "Test-nomination, Right Agent");
++
++ timer_id = g_timeout_add (30000, timer_cb, NULL);
++
++ if (!nice_address_set_from_string (&localaddr, localhost))
++ g_assert_not_reached ();
++ nice_agent_add_local_address (lagent, &localaddr);
++ nice_agent_add_local_address (ragent, &localaddr);
++
++ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER (2));
++
++ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
++ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
++
++ ls_id = nice_agent_add_stream (lagent, 1);
++ rs_id = nice_agent_add_stream (ragent, 1);
++ g_assert (ls_id > 0);
++ g_assert (rs_id > 0);
++
++ /* Gather candidates and test nice_agent_set_port_range */
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id) == TRUE);
++
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_context_default (), cb_nice_recv, GUINT_TO_POINTER (1));
++ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_context_default (), cb_nice_recv, GUINT_TO_POINTER (2));
++
++ g_debug ("test-nomination: Added streams, running context until 'candidate-gathering-done'...");
++ while (!global_lagent_gathering_done)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_lagent_gathering_done == TRUE);
++ while (!global_ragent_gathering_done)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_ragent_gathering_done == TRUE);
++
++ set_credentials (lagent, ls_id, ragent, rs_id);
++
++ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTP);
++
++ while (global_lagent_state[0] != NICE_COMPONENT_STATE_READY ||
++ global_ragent_state[0] != NICE_COMPONENT_STATE_READY)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_lagent_state[0] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_ragent_state[0] == NICE_COMPONENT_STATE_READY);
++
++ nice_agent_remove_stream (lagent, ls_id);
++ nice_agent_remove_stream (ragent, rs_id);
++
++ g_source_remove (timer_id);
++
++ g_clear_object(&lagent);
++ g_clear_object(&ragent);
++}
++
++static void
++regular (void)
++{
++ run_test(NICE_NOMINATION_MODE_REGULAR, NICE_NOMINATION_MODE_REGULAR);
++}
++
++static void
++aggressive (void)
++{
++ run_test(NICE_NOMINATION_MODE_AGGRESSIVE, NICE_NOMINATION_MODE_AGGRESSIVE);
++}
++
++static void
++mixed_ra (void)
++{
++ run_test(NICE_NOMINATION_MODE_REGULAR, NICE_NOMINATION_MODE_AGGRESSIVE);
++}
++
++static void
++mixed_ar (void)
++{
++ run_test(NICE_NOMINATION_MODE_AGGRESSIVE, NICE_NOMINATION_MODE_REGULAR);
++}
++
++int
++main (int argc, char **argv)
++{
++ int ret;
++
++ g_test_init (&argc, &argv, NULL);
++
++ g_test_add_func ("/nice/nomination/regular", regular);
++ g_test_add_func ("/nice/nomination/aggressive", aggressive);
++ g_test_add_func ("/nice/nomination/mixed_ra", mixed_ra);
++ g_test_add_func ("/nice/nomination/mixed_ar", mixed_ar);
++
++ ret = g_test_run ();
++
++ return ret;
++}
+--
+2.13.6
+
+
+From 58d061df8f5425dc1add9c6030a2f891ebda4616 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 7 Mar 2016 16:35:09 +0100
+Subject: [PATCH 28/70] conncheck: update pair valid property selectively
+
+With this patch, we fix a corner case when the succeeded pair is a
+peer-reflexive candidate pair, that already has been discovered
+previously, In this case, the current pair -p- should not be marked
+valid, because the valid flag is already set on the discovered pair.
+
+Differential Revision: https://phabricator.freedesktop.org/D1124
+---
+ agent/conncheck.c | 18 +++++++++++++-----
+ 1 file changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 6827e6e..ef8df68 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -2760,6 +2760,13 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ }
+
+ if (new_pair) {
++ /* note: when new_pair is distinct from p, it means new_pair is a
++ * previously discovered peer-reflexive candidate pair, so we don't
++ * set the valid flag on p in this case, because the valid flag is
++ * already set on the discovered pair.
++ */
++ if (new_pair == p)
++ p->valid = TRUE;
+ p->state = NICE_CHECK_SUCCEEDED;
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
+ priv_conn_check_unfreeze_related (agent, stream, p);
+@@ -2788,6 +2795,10 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ if (local_cand)
+ new_pair = priv_add_peer_reflexive_pair (agent, stream->id, component,
+ local_cand, p);
++ /* note: this is same as "adding to VALID LIST" in the spec
++ text */
++ if (new_pair)
++ new_pair->valid = TRUE;
+ /* step: The agent sets the state of the pair that *generated* the check to
+ * Succeeded, RFC 5245, 7.1.3.2.3, "Updating Pair States"
+ */
+@@ -2796,12 +2807,9 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ agent, p, new_pair);
+ }
+
+- /* note: this is same as "adding to VALID LIST" in the spec
+- text */
+- if (new_pair) {
+- new_pair->valid = TRUE;
++ if (new_pair && new_pair->valid)
+ nice_component_add_valid_candidate (component, remote_candidate);
+- }
++
+
+ return new_pair;
+ }
+--
+2.13.6
+
+
+From 15c0546f624113b8c0546a1f883a48bff7020f1b Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 19 Apr 2016 17:06:32 +0200
+Subject: [PATCH 29/70] conncheck: improve the selection of the pairs to be
+ checked
+
+This patch aims to implement more closely the algorithm described
+in RFC 5245 indicating how pairs are transitionned from state Frozen
+to Waiting. This is described in 7.1.3.2 when a check succeeded, and
+correspond to modifications in function priv_conn_check_unfreeze_related().
+This is also described in 5.7.4 when defining the initial state of the
+pairs in a conncheck, and correspond to modifications in function
+priv_conn_check_unfreeze_next().
+
+This patch introduces the notion of active and frozen check list. It
+allows us to define the timer restranmission delay as described in 16.1.
+
+Another modification in priv_conn_check_tick_unlocked() is that every
+stream in handled consecutively, and in an independant way. The pacing
+was previously of a single STUN request emitted per callback, it is now
+of a triggered check per callback OR a single STUN per callback AND per
+stream per callback.
+
+The description of ordinary checks per stream in 5.8 is detailled in
+function priv_conn_check_tick_stream(), and a remaining of the code
+used to nominate a pair by the controlling agent is put in a dedicated
+function priv_conn_check_tick_stream_nominate()
+
+Differential Revision: https://phabricator.freedesktop.org/D813
+---
+ agent/conncheck.c | 535 ++++++++++++++++++++++++++++++++++++++----------------
+ agent/stream.c | 21 ---
+ agent/stream.h | 3 -
+ 3 files changed, 381 insertions(+), 178 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index ef8df68..6b1b7e3 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -212,6 +212,89 @@ priv_get_pair_from_triggered_check_queue (NiceAgent *agent)
+ }
+
+ /*
++ * Check if the conncheck list if Active according to
++ * ICE spec, 5.7.4 (Computing States)
++ *
++ * note: the ICE spec in unclear about that, but the check list should
++ * be considered active when there is at least a pair in Waiting state
++ * OR a pair in In-Progress state.
++ */
++static gboolean
++priv_is_checklist_active (NiceStream *stream)
++{
++ GSList *i;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state == NICE_CHECK_WAITING || p->state == NICE_CHECK_IN_PROGRESS)
++ return TRUE;
++ }
++ return FALSE;
++}
++
++/*
++ * Check if the conncheck list if Frozen according to
++ * ICE spec, 5.7.4 (Computing States)
++ */
++static gboolean
++priv_is_checklist_frozen (NiceStream *stream)
++{
++ GSList *i;
++
++ if (stream->conncheck_list == NULL)
++ return FALSE;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state != NICE_CHECK_FROZEN)
++ return FALSE;
++ }
++ return TRUE;
++}
++
++/*
++ * Check if all components of the stream have
++ * a valid pair (used for ICE spec, 7.1.3.2.3, point 2.)
++ */
++static gboolean
++priv_all_components_have_valid_pair (NiceStream *stream)
++{
++ guint i;
++ GSList *j;
++
++ for (i = 1; i <= stream->n_components; i++) {
++ for (j = stream->conncheck_list; j ; j = j->next) {
++ CandidateCheckPair *p = j->data;
++ if (p->component_id == i && p->valid)
++ break;
++ }
++ if (j == NULL)
++ return FALSE;
++ }
++ return TRUE;
++}
++
++/*
++ * Check if the foundation in parameter matches the foundation
++ * of a valid pair in the conncheck list [of stream] (used for ICE spec,
++ * 7.1.3.2.3, point 2.)
++ */
++static gboolean
++priv_foundation_matches_a_valid_pair (const gchar *foundation, NiceStream *stream)
++{
++ GSList *i;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->valid &&
++ strncmp (p->foundation, foundation,
++ NICE_CANDIDATE_PAIR_MAX_FOUNDATION) == 0)
++ return TRUE;
++ }
++ return FALSE;
++}
++
++/*
+ * Finds the next connectivity check in WAITING state.
+ */
+ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check_list)
+@@ -220,7 +303,6 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
+
+ /* note: list is sorted in priority order to first waiting check has
+ * the highest priority */
+-
+ for (i = conn_check_list; i ; i = i->next) {
+ CandidateCheckPair *p = i->data;
+ if (p->state == NICE_CHECK_WAITING)
+@@ -231,6 +313,74 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
+ }
+
+ /*
++ * Finds the next connectivity check in FROZEN state.
++ */
++static CandidateCheckPair *
++priv_conn_check_find_next_frozen (GSList *conn_check_list)
++{
++ GSList *i;
++
++ /* note: list is sorted in priority order to first frozen check has
++ * the highest priority */
++ for (i = conn_check_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state == NICE_CHECK_FROZEN)
++ return p;
++ }
++
++ return NULL;
++}
++
++/*
++ * Returns the number of check lists of the agent
++ */
++static guint
++priv_number_of_check_lists (NiceAgent *agent)
++{
++ guint n = 0;
++ GSList *i;
++
++ for (i = agent->streams; i ; i = i->next) {
++ NiceStream *stream = i->data;
++ if (stream->conncheck_list != NULL)
++ n++;
++ }
++ return n;
++}
++
++/*
++ * Returns the number of active check lists of the agent
++ */
++static guint
++priv_number_of_active_check_lists (NiceAgent *agent)
++{
++ guint n = 0;
++ GSList *i;
++
++ for (i = agent->streams; i ; i = i->next)
++ if (priv_is_checklist_active (i->data))
++ n++;
++ return n;
++}
++
++/*
++ * Returns the first stream of the agent having a Frozen
++ * connection check list
++ */
++static NiceStream *
++priv_find_first_frozen_check_list (NiceAgent *agent)
++{
++ GSList *i;
++
++ for (i = agent->streams; i ; i = i->next) {
++ NiceStream *stream = i->data;
++ if (priv_is_checklist_frozen (stream))
++ return stream;
++ }
++ return NULL;
++}
++
++/*
+ * Initiates a new connectivity check for a ICE candidate pair.
+ *
+ * @return TRUE on success, FALSE on error
+@@ -248,58 +398,55 @@ static gboolean priv_conn_check_initiate (NiceAgent *agent, CandidateCheckPair *
+ /*
+ * Unfreezes the next connectivity check in the list. Follows the
+ * algorithm (2.) defined in 5.7.4 (Computing States) of the ICE spec
+- * (ID-19), with some exceptions (see comments in code).
++ * (RFC5245)
+ *
+ * See also sect 7.1.2.2.3 (Updating Pair States), and
+ * priv_conn_check_unfreeze_related().
+ *
+ * @return TRUE on success, and FALSE if no frozen candidates were found.
+ */
+-static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent)
++static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent, NiceStream *stream)
+ {
+- CandidateCheckPair *pair = NULL;
+ GSList *i, *j;
+-
+- /* XXX: the unfreezing is implemented a bit differently than in the
+- * current ICE spec, but should still be interoperate:
+- * - checks are not grouped by foundation
+- * - one frozen check is unfrozen (lowest component-id, highest
+- * priority)
+- */
++ GSList *found_list = NULL;
++ gboolean result = FALSE;
+
+ priv_print_conn_check_lists (agent, G_STRFUNC, NULL);
+
+- for (i = agent->streams; i; i = i->next) {
+- NiceStream *stream = i->data;
+- guint64 max_frozen_priority = 0;
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p1 = i->data;
++ CandidateCheckPair *pair = NULL;
++ guint lowest_component_id = stream->n_components + 1;
++ guint64 highest_priority = 0;
+
++ if (g_slist_find_custom (found_list, p1->foundation, (GCompareFunc)strcmp))
++ continue;
++ found_list = g_slist_prepend (found_list, p1->foundation);
+
+ for (j = stream->conncheck_list; j ; j = j->next) {
+- CandidateCheckPair *p = j->data;
+-
+- /* XXX: the prio check could be removed as the pairs are sorted
+- * already */
+-
+- if (p->state == NICE_CHECK_FROZEN) {
+- if (p->priority > max_frozen_priority) {
+- max_frozen_priority = p->priority;
+- pair = p;
+- }
++ CandidateCheckPair *p2 = i->data;
++ if (strncmp (p2->foundation, p1->foundation,
++ NICE_CANDIDATE_PAIR_MAX_FOUNDATION) == 0) {
++ if (p2->component_id < lowest_component_id ||
++ (p2->component_id == lowest_component_id &&
++ p2->priority > highest_priority)) {
++ pair = p2;
++ lowest_component_id = p2->component_id;
++ highest_priority = p2->priority;
++ }
+ }
+ }
+
+- if (pair)
+- break;
+- }
+-
+- if (pair) {
+- nice_debug ("Agent %p : Pair %p with s/c-id %u/%u (%s) unfrozen.", agent, pair, pair->stream_id, pair->component_id, pair->foundation);
+- pair->state = NICE_CHECK_WAITING;
+- nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
+- return TRUE;
++ if (pair) {
++ nice_debug ("Agent %p : Pair %p with s/c-id %u/%u (%s) unfrozen.",
++ agent, pair, pair->stream_id, pair->component_id, pair->foundation);
++ pair->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
++ result = TRUE;
++ }
+ }
+-
+- return FALSE;
++ g_slist_free (found_list);
++ return result;
+ }
+
+ /*
+@@ -316,7 +463,6 @@ static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent)
+ static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stream, CandidateCheckPair *ok_check)
+ {
+ GSList *i, *j;
+- guint unfrozen = 0;
+
+ g_assert (ok_check);
+ g_assert (ok_check->state == NICE_CHECK_SUCCEEDED);
+@@ -336,40 +482,59 @@ static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stre
+ nice_debug ("Agent %p : Unfreezing check %p (after successful check %p).", agent, p, ok_check);
+ p->state = NICE_CHECK_WAITING;
+ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+- ++unfrozen;
+ }
+ }
+ }
+
+ /* step: perform the step (2) of 'Updating Pair States' */
+ stream = agent_find_stream (agent, ok_check->stream_id);
+- if (nice_stream_all_components_ready (stream)) {
+- /* step: unfreeze checks from other streams */
++ if (priv_all_components_have_valid_pair (stream)) {
+ for (i = agent->streams; i ; i = i->next) {
++ /* the agent examines the check list for each other
++ * media stream in turn
++ */
+ NiceStream *s = i->data;
+- for (j = stream->conncheck_list; j ; j = j->next) {
+- CandidateCheckPair *p = j->data;
+-
+- if (p->stream_id == s->id &&
+- p->stream_id != ok_check->stream_id) {
+- if (p->state == NICE_CHECK_FROZEN &&
+- strcmp (p->foundation, ok_check->foundation) == 0) {
++ if (s->id == ok_check->stream_id)
++ continue;
++ if (priv_is_checklist_active (s)) {
++ /* checklist is Active
++ */
++ for (j = s->conncheck_list; j ; j = j->next) {
++ CandidateCheckPair *p = j->data;
++ if (p->state == NICE_CHECK_FROZEN &&
++ priv_foundation_matches_a_valid_pair (p->foundation, stream)) {
+ nice_debug ("Agent %p : Unfreezing check %p from stream %u (after successful check %p).", agent, p, s->id, ok_check);
+ p->state = NICE_CHECK_WAITING;
+ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+- ++unfrozen;
+-
+- }
+- }
++ }
++ }
++ } else if (priv_is_checklist_frozen (s)) {
++ /* checklist is Frozen
++ */
++ gboolean match_found = FALSE;
++ /* check if there is one pair in the check list whose
++ * foundation matches a pair in the valid list under
++ * consideration
++ */
++ for (j = s->conncheck_list; j ; j = j->next) {
++ CandidateCheckPair *p = j->data;
++ if (priv_foundation_matches_a_valid_pair (p->foundation, stream)) {
++ match_found = TRUE;
++ nice_debug ("Agent %p : Unfreezing check %p from stream %u (after successful check %p).", agent, p, s->id, ok_check);
++ p->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
++ }
++ }
++
++ if (!match_found) {
++ /* set the pair with the lowest component ID
++ * and highest priority to Waiting
++ */
++ priv_conn_check_unfreeze_next (agent, s);
++ }
+ }
+- /* note: only unfreeze check from one stream at a time */
+- if (unfrozen)
+- break;
+ }
+ }
+-
+- if (unfrozen == 0)
+- priv_conn_check_unfreeze_next (agent);
+ }
+
+ static void
+@@ -400,14 +565,13 @@ candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckP
+ *
+ * @return will return FALSE when no more pending timers.
+ */
+-static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent, GTimeVal *now, gboolean *stun_transmitted)
++static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent, GTimeVal *now)
+ {
+ gboolean keep_timer_going = FALSE;
+- guint s_inprogress = 0, s_succeeded = 0, s_discovered = 0,
+- s_nominated = 0, s_waiting_for_nomination = 0, s_valid = 0;
+- guint frozen = 0, waiting = 0;
+- GSList *i, *k;
++ GSList *i;
++ CandidateCheckPair *pair;
+
++ /* step: process ongoing STUN transactions */
+ for (i = stream->conncheck_list; i ; i = i->next) {
+ CandidateCheckPair *p = i->data;
+
+@@ -451,7 +615,6 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ p->next_tick = *now;
+ g_time_val_add (&p->next_tick, timeout * 1000);
+
+- *stun_transmitted = TRUE;
+ return TRUE;
+ }
+ case STUN_USAGE_TIMER_RETURN_SUCCESS:
+@@ -471,7 +634,57 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ }
+ }
+ }
++ }
+
++ /* step: perform an ordinary check, ICE spec, 5.8 "Scheduling Checks"
++ * note: This code is executed when the triggered checks list is
++ * empty, and when no STUN message has been sent (pacing constraint)
++ */
++ pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
++ if (pair) {
++ priv_conn_check_initiate (agent, pair);
++ return TRUE;
++ }
++
++ /* note: this is unclear in the ICE spec, but a check list in Frozen
++ * state (where all pairs are in Frozen state) is not supposed to
++ * change its state by an ordinary check, but only by the success of
++ * checks in other check lists, in priv_conn_check_unfreeze_related().
++ * The underlying idea is to concentrate the checks on a single check
++ * list initially.
++ */
++ if (priv_is_checklist_frozen (stream))
++ return keep_timer_going;
++
++ /* step: ordinary check continued, if there's no pair in the waiting
++ * state, pick a pair in the frozen state
++ */
++ pair = priv_conn_check_find_next_frozen (stream->conncheck_list);
++ if (pair) {
++ pair->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
++ priv_conn_check_initiate (agent, pair);
++ return TRUE;
++ }
++ return keep_timer_going;
++}
++
++static gboolean
++priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
++{
++ gboolean keep_timer_going = FALSE;
++ guint s_inprogress = 0;
++ guint s_succeeded = 0;
++ guint s_discovered = 0;
++ guint s_nominated = 0;
++ guint s_waiting_for_nomination = 0;
++ guint s_valid = 0;
++ guint frozen = 0;
++ guint waiting = 0;
++ GSList *i, *k;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
+ if (p->state == NICE_CHECK_FROZEN)
+ ++frozen;
+ else if (p->state == NICE_CHECK_IN_PROGRESS)
+@@ -504,13 +717,13 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ keep_timer_going = TRUE;
+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
+ if (agent->nomination_mode == NICE_NOMINATION_MODE_REGULAR &&
+- agent->controlling_mode &&
+- ((waiting == 0 && s_inprogress == 0) ||
+- (s_succeeded + s_discovered) >= 5 * stream->n_components)){
++ agent->controlling_mode) {
++#define NICE_MIN_NUMBER_OF_VALID_PAIRS 2
+ /* ICE 8.1.1.1 Regular nomination
+- * we choose to nominate the valid pair if
+- * there is no pair left waiting or in-progress or
+- * if there are at least 5 valid pairs per stream on average.
++ * we choose to nominate the valid pair of a component if
++ * - there is no pair left frozen, waiting or in-progress, or
++ * - if there are at least two valid pairs, or
++ * - if there is at least one valid pair of type HOST-HOST
+ *
+ * This is the "stopping criterion" described in 8.1.1.1, and is
+ * a "local optimization" between accumulating more valid pairs,
+@@ -523,36 +736,63 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ component_item = component_item->next) {
+ NiceComponent *component = component_item->data;
+ gboolean already_done = FALSE;
++ gboolean stopping_criterion = FALSE;
++ guint p_valid = 0;
++ guint p_frozen = 0;
++ guint p_waiting = 0;
++ guint p_inprogress = 0;
++ guint p_host_host_valid = 0;
+
+ /* verify that the choice of the pair to be nominated
+ * has not already been done
+ */
+ for (k = stream->conncheck_list; k ; k = k->next) {
+ CandidateCheckPair *p = k->data;
+- if (p->component_id == component->id &&
+- p->use_candidate_on_next_check) {
+- already_done = TRUE;
+- break;
++ if (p->component_id == component->id) {
++ if (p->use_candidate_on_next_check)
++ already_done = TRUE;
++ if (p->state == NICE_CHECK_FROZEN)
++ p_frozen++;
++ else if (p->state == NICE_CHECK_WAITING)
++ p_waiting++;
++ else if (p->state == NICE_CHECK_IN_PROGRESS)
++ p_inprogress++;
++ if (p->valid)
++ p_valid++;
++ if (p->valid &&
++ p->local->type == NICE_CANDIDATE_TYPE_HOST &&
++ p->remote->type == NICE_CANDIDATE_TYPE_HOST)
++ p_host_host_valid++;
+ }
+ }
+
+- /* choose a pair to be nominated in the list of valid
+- * pairs, and add it to the triggered checks list
++ if (already_done)
++ continue;
++
++ stopping_criterion =
++ (p_host_host_valid > 0 ||
++ p_valid >= NICE_MIN_NUMBER_OF_VALID_PAIRS ||
++ (p_waiting == 0 && p_inprogress == 0 && p_frozen == 0));
++
++ if (!stopping_criterion)
++ continue;
++
++ /* when the stopping criterion is satisfied, we choose
++ * a pair to be nominated in the list of valid pairs,
++ * and add it to the triggered checks list
+ */
+- if (!already_done) {
+- for (k = stream->conncheck_list; k ; k = k->next) {
+- CandidateCheckPair *p = k->data;
+- /* note: highest priority item selected (list always sorted) */
+- if (p->component_id == component->id &&
+- !p->nominated &&
+- !p->use_candidate_on_next_check &&
+- p->valid) {
+- nice_debug ("Agent %p : restarting check %p with "
+- "USE-CANDIDATE attrib (regular nomination)", agent, p);
+- p->use_candidate_on_next_check = TRUE;
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- break; /* move to the next component */
+- }
++ for (k = stream->conncheck_list; k ; k = k->next) {
++ CandidateCheckPair *p = k->data;
++ /* note: highest priority item selected (list always sorted) */
++ if (p->component_id == component->id &&
++ !p->nominated &&
++ !p->use_candidate_on_next_check &&
++ p->valid) {
++ nice_debug ("Agent %p : restarting check %p with "
++ "USE-CANDIDATE attrib (regular nomination)", agent, p);
++ p->use_candidate_on_next_check = TRUE;
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ break; /* move to the next component */
+ }
+ }
+ }
+@@ -615,70 +855,55 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ {
+ CandidateCheckPair *pair = NULL;
+ gboolean keep_timer_going = FALSE;
+- gboolean res;
+- /* note: we try to only generate a single stun transaction per timer
+- * callback, to respect some pacing of STUN transaction, as per
+- * appendix B.1 of ICE spec.
+- */
+- gboolean stun_transmitted = FALSE;
+ GSList *i, *j;
+ GTimeVal now;
+
+- /* step: process ongoing STUN transactions */
+ g_get_current_time (&now);
+
+- for (j = agent->streams; j; j = j->next) {
+- NiceStream *stream = j->data;
+- res = priv_conn_check_tick_stream (stream, agent, &now, &stun_transmitted);
+- if (res)
+- keep_timer_going = res;
+- if (stun_transmitted)
+- return TRUE;
+- }
+-
+- /* step: first initiate a conncheck with a pair from the triggered list */
+- pair = priv_get_pair_from_triggered_check_queue (agent);
+-
+- if (pair) {
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", got a pair from triggered check list");
+- priv_conn_check_initiate (agent, pair);
++ /* the conncheck really starts when we have built
++ * a connection check list for each stream
++ */
++ if (priv_number_of_check_lists (agent) < g_slist_length (agent->streams))
+ return TRUE;
+- }
+
+- /* step: when the triggered list is empty,
+- * find the highest priority waiting check and send it */
+- for (i = agent->streams; i ; i = i->next) {
+- NiceStream *stream = i->data;
+-
+- pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+- if (pair)
+- break;
++ /* configure the initial state of the check lists of the agent
++ * as described in ICE spec, 5.7.4
++ *
++ * if all pairs in all check lists are in frozen state, then
++ * we are in the initial state (5.7.4, point 1.)
++ */
++ if (priv_number_of_active_check_lists (agent) == 0) {
++ /* set some pairs of the first stream in the waiting state
++ * ICE spec, 5.7.4, point 2.
++ *
++ * note: we adapt the ICE spec here, by selecting the first
++ * frozen check list, which is not necessarily the check
++ * list of the first stream (the first stream may be completed)
++ */
++ NiceStream *stream = priv_find_first_frozen_check_list (agent);
++ if (stream)
++ priv_conn_check_unfreeze_next (agent, stream);
+ }
+
++ /* step: perform a test from the triggered checks list,
++ * ICE spec, 5.8 "Scheduling Checks"
++ */
++ pair = priv_get_pair_from_triggered_check_queue (agent);
++
+ if (pair) {
+ priv_conn_check_initiate (agent, pair);
+ return TRUE;
+ }
+
+- /* step: when there's no pair in the Waiting state,
+- * unfreeze a new pair and check it
++ /* step: process ongoing STUN transactions and
++ * perform an ordinary check, ICE spec, 5.8, "Scheduling Checks"
+ */
+- priv_conn_check_unfreeze_next (agent);
+-
+ for (i = agent->streams; i ; i = i->next) {
+ NiceStream *stream = i->data;
+-
+- pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+- if (pair)
+- break;
+- }
+-
+- if (pair) {
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", got a pair in Waiting state");
+- priv_conn_check_initiate (agent, pair);
+- return TRUE;
++ if (priv_conn_check_tick_stream (stream, agent, &now))
++ keep_timer_going = TRUE;
++ if (priv_conn_check_tick_stream_nominate (stream, agent))
++ keep_timer_going = TRUE;
+ }
+
+ /* step: stop timer if no work left */
+@@ -2169,30 +2394,28 @@ size_t priv_get_password (NiceAgent *agent, NiceStream *stream,
+
+ /* Implement the computation specific in RFC 5245 section 16 */
+
+-static unsigned int priv_compute_conncheck_timer (NiceAgent *agent)
++static unsigned int priv_compute_conncheck_timer (NiceAgent *agent, NiceStream *stream)
+ {
+- GSList *item1, *item2;
++ GSList *i;
+ guint waiting_and_in_progress = 0;
++ guint n = 0;
+ unsigned int rto = 0;
+
+-
+- for (item1 = agent->streams; item1; item1 = item1->next) {
+- NiceStream *stream = item1->data;;
+- for (item2 = stream->conncheck_list; item2; item2 = item2->next) {
+- CandidateCheckPair *pair = item2->data;
+-
+- if (pair->state == NICE_CHECK_IN_PROGRESS ||
+- pair->state == NICE_CHECK_WAITING)
+- waiting_and_in_progress++;
+- }
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state == NICE_CHECK_IN_PROGRESS ||
++ p->state == NICE_CHECK_WAITING)
++ waiting_and_in_progress++;
+ }
+
+- rto = agent->timer_ta * waiting_and_in_progress;
++ n = priv_number_of_active_check_lists (agent);
++ rto = agent->timer_ta * n * waiting_and_in_progress;
+
+ /* We assume non-reliable streams are RTP, so we use 100 as the max */
+- nice_debug ("Agent %p : timer set to %dms (waiting+in_progress=%d)",
++ nice_debug ("Agent %p : timer set to %dms, "
++ "waiting+in_progress=%d, nb_active=%d",
+ agent, agent->reliable ? MAX (rto, 500) : MAX (rto, 100),
+- waiting_and_in_progress);
++ waiting_and_in_progress, n);
+ if (agent->reliable)
+ return MAX (rto, 500);
+ else
+@@ -2312,7 +2535,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ stun_timer_start_reliable(&pair->timer, agent->stun_reliable_timeout);
+ } else {
+ stun_timer_start (&pair->timer,
+- priv_compute_conncheck_timer (agent),
++ priv_compute_conncheck_timer (agent, stream),
+ agent->stun_max_retransmissions);
+ }
+
+@@ -2477,7 +2700,7 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ p->timer_restarted ? "no" : "yes");
+ if (!nice_socket_is_reliable (p->sockptr) && !p->timer_restarted) {
+ stun_timer_start (&p->timer,
+- priv_compute_conncheck_timer (agent),
++ priv_compute_conncheck_timer (agent, stream),
+ agent->stun_max_retransmissions);
+ p->timer_restarted = TRUE;
+ }
+@@ -2769,7 +2992,6 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ p->valid = TRUE;
+ p->state = NICE_CHECK_SUCCEEDED;
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
+- priv_conn_check_unfreeze_related (agent, stream, p);
+ nice_component_add_valid_candidate (component, remote_candidate);
+ }
+ else {
+@@ -2894,7 +3116,6 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ g_assert_not_reached ();
+ nice_debug ("Agent %p : Mapped address not found."
+ " conncheck %p SUCCEEDED.", agent, p);
+- priv_conn_check_unfreeze_related (agent, stream, p);
+ nice_component_add_valid_candidate (component, p->remote);
+ } else {
+ ok_pair = priv_process_response_check_for_reflexive (agent,
+@@ -2902,6 +3123,12 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ local_candidate, remote_candidate);
+ }
+
++ /* note: The success of this check might also
++ * cause the state of other checks to change as well, ICE
++ * spec 7.1.3.2.3
++ */
++ priv_conn_check_unfreeze_related (agent, stream, p);
++
+ /* Note: this assignment helps to reduce the numbers of cases
+ * to be tested. If ok_pair and p refer to distinct pairs, it
+ * means that ok_pair is a discovered peer reflexive one,
+diff --git a/agent/stream.c b/agent/stream.c
+index 8121e12..533ff15 100644
+--- a/agent/stream.c
++++ b/agent/stream.c
+@@ -104,27 +104,6 @@ nice_stream_find_component_by_id (NiceStream *stream, guint id)
+ }
+
+ /*
+- * Returns true if all components of the stream are either
+- * 'CONNECTED' or 'READY' (connected plus nominated).
+- */
+-gboolean
+-nice_stream_all_components_ready (NiceStream *stream)
+-{
+- GSList *i;
+-
+- for (i = stream->components; i; i = i->next) {
+- NiceComponent *component = i->data;
+- if (component &&
+- !(component->state == NICE_COMPONENT_STATE_CONNECTED ||
+- component->state == NICE_COMPONENT_STATE_READY))
+- return FALSE;
+- }
+-
+- return TRUE;
+-}
+-
+-
+-/*
+ * Initialized the local crendentials for the stream.
+ */
+ void
+diff --git a/agent/stream.h b/agent/stream.h
+index f9188cb..954ba66 100644
+--- a/agent/stream.h
++++ b/agent/stream.h
+@@ -103,9 +103,6 @@ nice_stream_new (guint n_components, NiceAgent *agent);
+ void
+ nice_stream_close (NiceStream *stream);
+
+-gboolean
+-nice_stream_all_components_ready (NiceStream *stream);
+-
+ NiceComponent *
+ nice_stream_find_component_by_id (NiceStream *stream, guint id);
+
+--
+2.13.6
+
+
+From ead3453d04fc70865d176ab073636f8b9078cbbc Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 13:20:38 +0200
+Subject: [PATCH 30/70] conncheck: invoke the debug dump in more places
+
+Differential Revision: https://phabricator.freedesktop.org/D1123
+---
+ agent/conncheck.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 6b1b7e3..2d2224d 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -642,6 +642,8 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ */
+ pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+ if (pair) {
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a pair in Waiting state");
+ priv_conn_check_initiate (agent, pair);
+ return TRUE;
+ }
+@@ -661,6 +663,8 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ */
+ pair = priv_conn_check_find_next_frozen (stream->conncheck_list);
+ if (pair) {
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a pair in Frozen state");
+ pair->state = NICE_CHECK_WAITING;
+ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
+ priv_conn_check_initiate (agent, pair);
+@@ -891,6 +895,8 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ pair = priv_get_pair_from_triggered_check_queue (agent);
+
+ if (pair) {
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a pair from triggered check list");
+ priv_conn_check_initiate (agent, pair);
+ return TRUE;
+ }
+--
+2.13.6
+
+
+From 2fd7808419f459d5f6e97701ca6a350ddee6b7f2 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 19 Apr 2016 17:59:27 +0200
+Subject: [PATCH 31/70] conncheck: improve triggered check of in-progress pairs
+
+This patch update the way triggered checks of in-progress pairs are
+handled, according to ICE spec, section 7.2.1.4. Previously the same
+connection check was retransmitted with an updated timeout. This causes
+problems when a controlling role switch occurs in this time frame.
+This is the reason why a new connection check must be generated
+reflecting the updated role. We introduce a new flag "recheck_on_timeout"
+in the pair indicating that the pair must be rechecked at the next timer
+expiration.
+
+Differential Revision: https://phabricator.freedesktop.org/D875
+---
+ agent/conncheck.c | 88 +++++++++++++++++++++++++++++++++++++++++++++----------
+ agent/conncheck.h | 2 +-
+ 2 files changed, 74 insertions(+), 16 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 2d2224d..3a489fe 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -558,6 +558,37 @@ candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckP
+ }
+
+ /*
++ * Function that resubmits a new connection check, after a previous
++ * check in in-progress state got cancelled due to an incoming stun
++ * request matching this same pair
++ *
++ * @return will return TRUE if the pair is scheduled for recheck
++ */
++static gboolean
++priv_conn_recheck_on_timeout (NiceAgent *agent, CandidateCheckPair *p)
++{
++ if (p->recheck_on_timeout) {
++ g_assert (p->state == NICE_CHECK_IN_PROGRESS);
++ /* this cancelled pair may have the flag 'mark nominated
++ * on response arrival' set, we want to keep it, because
++ * this is needed to nominate this pair in aggressive
++ * nomination, when the agent is in controlled mode.
++ *
++ * this cancelled pair may also have the flag 'use candidate
++ * on next check' set, that we want to preserve too.
++ */
++ nice_debug ("Agent %p : pair %p was cancelled, "
++ "triggering a new connection check", agent, p);
++ p->recheck_on_timeout = FALSE;
++ p->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ return TRUE;
++ }
++ return FALSE;
++}
++
++/*
+ * Helper function for connectivity check timer callback that
+ * runs through the stream specific part of the state machine.
+ *
+@@ -584,8 +615,17 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ switch (stun_timer_refresh (&p->timer)) {
+ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+ {
+- /* case: error, abort processing */
+ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
++
++ /* case: conncheck cancelled due to in-progress incoming
++ * check, requeing the pair, ICE spec, sect 7.2.1.4
++ * "Triggered Checks", "If the state of that pair is
++ * In-Progress..."
++ */
++ if (priv_conn_recheck_on_timeout (agent, p))
++ break;
++
++ /* case: error, abort processing */
+ nice_address_to_string (&p->local->addr, tmpbuf1);
+ nice_address_to_string (&p->remote->addr, tmpbuf2);
+ nice_debug ("Agent %p : Retransmissions failed, giving up on connectivity check %p", agent, p);
+@@ -600,8 +640,17 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ }
+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+ {
+- /* case: not ready, so schedule a new timeout */
+ unsigned int timeout = stun_timer_remainder (&p->timer);
++
++ /* case: conncheck cancelled due to in-progress incoming
++ * check, requeing the pair, ICE spec, sect 7.2.1.4
++ * "Triggered Checks", "If the state of that pair is
++ * In-Progress..."
++ */
++ if (priv_conn_recheck_on_timeout (agent, p))
++ break;
++
++ /* case: not ready, so schedule a new timeout */
+ nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
+ "(timeout %dms, delay=%dms, retrans=%d).",
+ agent, p, timeout, p->timer.delay, p->timer.retransmissions);
+@@ -642,6 +691,12 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ */
+ pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+ if (pair) {
++ /* remove the pair from the triggered check list if needed. This
++ * may happen with the cancelled pair, that's just been added
++ * in state waiting to the triggered check list above in the
++ * same function.
++ */
++ priv_remove_pair_from_triggered_check_queue (agent, pair);
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", got a pair in Waiting state");
+ priv_conn_check_initiate (agent, pair);
+@@ -794,6 +849,7 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ p->valid) {
+ nice_debug ("Agent %p : restarting check %p with "
+ "USE-CANDIDATE attrib (regular nomination)", agent, p);
++ p->recheck_on_timeout = FALSE;
+ p->use_candidate_on_next_check = TRUE;
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ break; /* move to the next component */
+@@ -816,6 +872,7 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ p->state == NICE_CHECK_DISCOVERED)) {
+ nice_debug ("Agent %p : restarting check %p as the nominated pair.", agent, p);
+ p->nominated = TRUE;
++ p->recheck_on_timeout = FALSE;
+ priv_update_selected_pair (agent, component, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ break; /* move to the next component */
+@@ -2697,19 +2754,20 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ p->state == NICE_CHECK_FROZEN)
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ else if (p->state == NICE_CHECK_IN_PROGRESS) {
+- /* XXX: according to ICE 7.2.1.4 "Triggered Checks" (ID-19),
+- * we should cancel the existing one, instead we reset our timer, so
+- * we'll resend the exiting transactions faster if needed...? :P
+- */
+- nice_debug ("Agent %p : check already in progress, "
+- "restarting the timer again?: %s ..", agent,
+- p->timer_restarted ? "no" : "yes");
+- if (!nice_socket_is_reliable (p->sockptr) && !p->timer_restarted) {
+- stun_timer_start (&p->timer,
+- priv_compute_conncheck_timer (agent, stream),
+- agent->stun_max_retransmissions);
+- p->timer_restarted = TRUE;
+- }
++ /* note: according to ICE SPEC sect 7.2.1.4 "Triggered Checks"
++ * we cancel the in-progress transaction, and after the
++ * retransmission timeout, we create a new connectivity check
++ * for that pair. The controlling role of this new check may
++ * be different from the role of this cancelled check.
++ */
++ if (!nice_socket_is_reliable (p->sockptr)) {
++ nice_debug ("Agent %p : check already in progress, "
++ "cancelling this check..", agent);
++ /* this flag will determine the action at the retransmission
++ * timeout of the stun timer
++ */
++ p->recheck_on_timeout = TRUE;
++ }
+ }
+ else if (p->state == NICE_CHECK_SUCCEEDED ||
+ p->state == NICE_CHECK_DISCOVERED) {
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index 0f988de..785a6cd 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -85,10 +85,10 @@ struct _CandidateCheckPair
+ gchar foundation[NICE_CANDIDATE_PAIR_MAX_FOUNDATION];
+ NiceCheckState state;
+ gboolean nominated;
+- gboolean timer_restarted;
+ gboolean valid;
+ gboolean use_candidate_on_next_check;
+ gboolean mark_nominated_on_response_arrival;
++ gboolean recheck_on_timeout;
+ guint64 priority;
+ guint32 prflx_priority;
+ GTimeVal next_tick; /* next tick timestamp */
+--
+2.13.6
+
+
+From 72ee528f7fdf82fb1a44958c18a0d4d5055d2d1a Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 13:25:16 +0200
+Subject: [PATCH 32/70] conncheck: link succeeded and discovered pairs
+
+When the agent has the role of the stun server, is in controlled mode,
+and receives a pair with the "use-candidate" attribute set, it must find
+a matching succeded or discovered pair in its conncheck list. This is
+described in ICE spec 7.2.1.5, "Updating the Nominated Flag", item #1.
+When a matching pair is in succeeded state, the agent must nominate the
+valid pair (a discovered pair) constructed from section 7.1.3.2.2,
+that's been created from this succeeded one. To make this lookup, we
+introduce a new "discovered_pair" member of the CandidateCheckPair
+struct, that links the succeeded pair, and its discovered pair
+if any.
+
+Differential Revision: https://phabricator.freedesktop.org/D878
+---
+ agent/conncheck.c | 7 +++++++
+ agent/conncheck.h | 1 +
+ 2 files changed, 8 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 3a489fe..99cb6d2 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -1928,6 +1928,12 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ * candidate, generating a "discovered" pair that can be
+ * nominated.
+ */
++ if (pair->state == NICE_CHECK_SUCCEEDED &&
++ pair->discovered_pair != NULL) {
++ pair = pair->discovered_pair;
++ g_assert (pair->state == NICE_CHECK_DISCOVERED);
++ }
++
+ if (pair->valid) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated",
+ agent, pair, pair->foundation);
+@@ -2936,6 +2942,7 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
+ pair->remote = parent_pair->remote;
+ pair->sockptr = local_cand->sockptr;
+ pair->state = NICE_CHECK_DISCOVERED;
++ parent_pair->discovered_pair = pair;
+ nice_debug ("Agent %p : new pair %p state DISCOVERED", agent, pair);
+ {
+ gchar tmpbuf1[INET6_ADDRSTRLEN];
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index 785a6cd..dd47ebe 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -89,6 +89,7 @@ struct _CandidateCheckPair
+ gboolean use_candidate_on_next_check;
+ gboolean mark_nominated_on_response_arrival;
+ gboolean recheck_on_timeout;
++ struct _CandidateCheckPair *discovered_pair;
+ guint64 priority;
+ guint32 prflx_priority;
+ GTimeVal next_tick; /* next tick timestamp */
+--
+2.13.6
+
+
+From 9103a5f2e184211fc160d1d3070ce4d043c71ff0 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 19 Apr 2016 18:16:26 +0200
+Subject: [PATCH 33/70] conncheck: use the right pair when retriggering a check
+
+This patch completes the previous patch by adding a link back from the
+discovered pair, to the parent pair that generated this check. This link
+is needed by the ICE spec, to comply with section 8.1.1.1, "Regular
+nomination", where the check to be retriggered is the initial check that
+caused the discovery of the valid pair. When the valid pair is a
+peer-reflexive pair, the retriggered check must target the succeeded
+pair, and not the valid discovered pair.
+
+Differential Revision: https://phabricator.freedesktop.org/D879
+---
+ agent/conncheck.c | 21 ++++++++++++++++++---
+ agent/conncheck.h | 1 +
+ 2 files changed, 19 insertions(+), 3 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 99cb6d2..79685df 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -847,6 +847,16 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ !p->nominated &&
+ !p->use_candidate_on_next_check &&
+ p->valid) {
++ /* According a ICE spec, sect 8.1.1.1. "Regular
++ * Nomination", we enqueue the check that produced this
++ * valid pair. When this pair has been discovered, we want
++ * to test its parent pair instead.
++ */
++ if (p->succeeded_pair != NULL) {
++ g_assert (p->state == NICE_CHECK_DISCOVERED);
++ p = p->succeeded_pair;
++ }
++ g_assert (p->state == NICE_CHECK_SUCCEEDED);
+ nice_debug ("Agent %p : restarting check %p with "
+ "USE-CANDIDATE attrib (regular nomination)", agent, p);
+ p->recheck_on_timeout = FALSE;
+@@ -2754,6 +2764,11 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ * tcp-active we don't want to retrigger a check on a pair that
+ * was FAILED when a peer-reflexive pair was created */
+
++ if (p->succeeded_pair != NULL) {
++ g_assert (p->state == NICE_CHECK_DISCOVERED);
++ p = p->succeeded_pair;
++ }
++
+ nice_debug ("Agent %p : Found a matching pair %p for triggered check.", agent, p);
+
+ if (p->state == NICE_CHECK_WAITING ||
+@@ -2775,8 +2790,7 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ p->recheck_on_timeout = TRUE;
+ }
+ }
+- else if (p->state == NICE_CHECK_SUCCEEDED ||
+- p->state == NICE_CHECK_DISCOVERED) {
++ else if (p->state == NICE_CHECK_SUCCEEDED) {
+ nice_debug ("Agent %p : Skipping triggered check, already completed..", agent);
+ /* note: this is a bit unsure corner-case -- let's do the
+ same state update as for processing responses to our own checks */
+@@ -2943,6 +2957,7 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
+ pair->sockptr = local_cand->sockptr;
+ pair->state = NICE_CHECK_DISCOVERED;
+ parent_pair->discovered_pair = pair;
++ pair->succeeded_pair = parent_pair;
+ nice_debug ("Agent %p : new pair %p state DISCOVERED", agent, pair);
+ {
+ gchar tmpbuf1[INET6_ADDRSTRLEN];
+@@ -4163,7 +4178,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+
+ pair = priv_conn_check_add_for_candidate_pair_matched (agent,
+ stream->id, component, local_candidate, remote_candidate,
+- NICE_CHECK_DISCOVERED);
++ NICE_CHECK_SUCCEEDED);
+ if (pair) {
+ pair->valid = TRUE;
+ }
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index dd47ebe..c07fb22 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -90,6 +90,7 @@ struct _CandidateCheckPair
+ gboolean mark_nominated_on_response_arrival;
+ gboolean recheck_on_timeout;
+ struct _CandidateCheckPair *discovered_pair;
++ struct _CandidateCheckPair *succeeded_pair;
+ guint64 priority;
+ guint32 prflx_priority;
+ GTimeVal next_tick; /* next tick timestamp */
+--
+2.13.6
+
+
+From 3916b8bcbf7e78e1dcb6b77882075c2c22719b4e Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 13:30:04 +0200
+Subject: [PATCH 34/70] conncheck: fix a nomination corner case
+
+This patch add two supplementary cases, not covered by the ICE spec,
+sect 7.2.1.5 "Updating the Nominated Flag" when a controlled agent
+receives a STUN request with the USE-CANDIDATE flag, for a pair that is
+in the waiting state. We consider that this case is similar to the
+in-progress state, and should be handled in the same way. We also accept
+when the pair is in frozen state. This latter case happens in the
+new-dribble test, when an agent replays incoming early connchecks.
+
+Differential Revision: https://phabricator.freedesktop.org/D880
+---
+ agent/conncheck.c | 35 +++++++++++++++++++++++++++++++++--
+ 1 file changed, 33 insertions(+), 2 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 79685df..4f4af40 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -1963,6 +1963,29 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ "will be nominated on response receipt.",
+ agent, pair, pair->foundation);
+ }
++ /* note: this case is not covered by the ICE spec, 7.2.1.5,
++ * "Updating the Nominated Flag", but a pair in waiting state
++ * deserves the same treatment than a pair in-progress.
++ */
++ if (pair->state == NICE_CHECK_WAITING) {
++ pair->mark_nominated_on_response_arrival = TRUE;
++ nice_debug ("Agent %p : pair %p (%s) is waiting, "
++ "will be nominated on response receipt.",
++ agent, pair, pair->foundation);
++ }
++ /* note: this case is not covered by the ICE spec, 7.2.1.5,
++ * "Updating the Nominated Flag" either, but a pair in frozen
++ * state, and in the triggered check list should also be
++ * considered like a pair in-progress. This case happens with
++ * the new-dribble test, when an agent replays incoming early
++ * connchecks.
++ */
++ if (pair->state == NICE_CHECK_FROZEN) {
++ pair->mark_nominated_on_response_arrival = TRUE;
++ nice_debug ("Agent %p : pair %p (%s) is frozen, "
++ "will be nominated on response receipt.",
++ agent, pair, pair->foundation);
++ }
+ } else if (pair->local == localcand && pair->remote == remotecand) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated", agent, pair, pair->foundation);
+ pair->nominated = TRUE;
+@@ -2703,17 +2726,25 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
+ "is %" G_GUINT64_FORMAT, highest_nominated_priority);
+
+ /* step: cancel all FROZEN and WAITING pairs for the component */
++ /* note: this case is not covered by the ICE spec, 8.1.2
++ * "Updating States", but a pair in waiting state which will be
++ * nominated on response receipt should be treated the same way
++ * that an in-progress pair.
++ */
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+ if (p->component_id == component_id) {
+ if (p->state == NICE_CHECK_FROZEN ||
+- p->state == NICE_CHECK_WAITING) {
++ (p->state == NICE_CHECK_WAITING &&
++ !p->mark_nominated_on_response_arrival)) {
+ p->state = NICE_CHECK_CANCELLED;
+ nice_debug ("Agent XXX : pair %p state CANCELED", p);
+ }
+
+ /* note: a SHOULD level req. in ICE 8.1.2. "Updating States" (ID-19) */
+- if (p->state == NICE_CHECK_IN_PROGRESS) {
++ if (p->state == NICE_CHECK_IN_PROGRESS ||
++ (p->state == NICE_CHECK_WAITING &&
++ p->mark_nominated_on_response_arrival)) {
+ if (highest_nominated_priority != 0 &&
+ p->priority < highest_nominated_priority) {
+ p->stun_message.buffer = NULL;
+--
+2.13.6
+
+
+From afd8d41bb34afb3864e838ef79026ae4ef15c0d4 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 13:32:49 +0200
+Subject: [PATCH 35/70] conncheck: new pairs never have the nominated flag
+ preset
+
+This patch disables the possibility to set the nominated flag of a
+candidate pair at creation time. This possibility was used when a new
+pair is created from a new peer reflexive remote candidate, when the
+agent is in controlled mode, and an stun request with USE-CANDIDATE is
+received. In this case, since previous commit "conncheck: fix a
+nomination corner case", we set the nominated flag when the stun
+response of this new pair will arrive, and not before. Consequently,
+this flag is no longer required when the pair is created.
+
+Differential Revision: https://phabricator.freedesktop.org/D881
+---
+ agent/conncheck.c | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 4f4af40..3cd0424 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -65,7 +65,7 @@
+ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream);
+ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream *stream, NiceComponent *component);
+ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id);
+-static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand, gboolean use_candidate);
++static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand);
+ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceCandidate *localcand, NiceCandidate *remotecand);
+ static size_t priv_create_username (NiceAgent *agent, NiceStream *stream,
+ guint component_id, NiceCandidate *remote, NiceCandidate *local,
+@@ -1573,7 +1573,8 @@ static void priv_preprocess_conn_check_pending_data (NiceAgent *agent, NiceStrea
+ nice_debug ("Agent %p : Updating check %p with stored early-icheck %p, %p/%u/%u (agent/stream/component).", agent, pair, icheck, agent, stream->id, component->id);
+ if (icheck->use_candidate)
+ priv_mark_pair_nominated (agent, stream, component, pair->local, pair->remote);
+- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, pair->remote, icheck->use_candidate);
++ priv_schedule_triggered_check (agent, stream, component,
++ icheck->local_socket, pair->remote);
+ }
+ }
+ }
+@@ -1716,7 +1717,8 @@ void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
+
+ if (icheck->use_candidate)
+ priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
+- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, candidate, icheck->use_candidate);
++ priv_schedule_triggered_check (agent, stream, component,
++ icheck->local_socket, candidate);
+ }
+ }
+ }
+@@ -2043,7 +2045,7 @@ ensure_unique_priority (NiceComponent *component, guint32 priority)
+ */
+ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ guint stream_id, NiceComponent *component, NiceCandidate *local,
+- NiceCandidate *remote, NiceCheckState initial_state, gboolean use_candidate)
++ NiceCandidate *remote, NiceCheckState initial_state)
+ {
+ NiceStream *stream;
+ CandidateCheckPair *pair;
+@@ -2081,7 +2083,6 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ tmpbuf1, nice_address_get_port (&pair->local->addr),
+ tmpbuf2, nice_address_get_port (&pair->remote->addr));
+ }
+- pair->nominated = use_candidate;
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local));
+
+@@ -2127,7 +2128,7 @@ static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
+ agent, local->foundation, remote->foundation,
+ stream_id, component->id);
+ pair = priv_add_new_check_pair (agent, stream_id, component, local, remote,
+- initial_state, FALSE);
++ initial_state);
+ if (component->state == NICE_COMPONENT_STATE_CONNECTED ||
+ component->state == NICE_COMPONENT_STATE_READY) {
+ agent_signal_component_state_change (agent,
+@@ -2774,9 +2775,8 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
+ * @param component the check is related to
+ * @param local_socket socket from which the inbound check was received
+ * @param remote_cand remote candidate from which the inbound check was sent
+- * @param use_candidate whether the original check had USE-CANDIDATE attribute set
+ */
+-static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand, gboolean use_candidate)
++static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand)
+ {
+ GSList *i;
+ NiceCandidate *local = NULL;
+@@ -2872,7 +2872,8 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+
+ if (i) {
+ nice_debug ("Agent %p : Adding a triggered check to conn.check list (local=%p).", agent, local);
+- priv_add_new_check_pair (agent, stream->id, component, local, remote_cand, NICE_CHECK_WAITING, use_candidate);
++ priv_add_new_check_pair (agent, stream->id, component,
++ local, remote_cand, NICE_CHECK_WAITING);
+ return TRUE;
+ }
+ else {
+@@ -2926,7 +2927,7 @@ static void priv_reply_to_conn_check (NiceAgent *agent, NiceStream *stream,
+
+ if (rcand) {
+ /* note: upon successful check, make the reserve check immediately */
+- priv_schedule_triggered_check (agent, stream, component, sockptr, rcand, use_candidate);
++ priv_schedule_triggered_check (agent, stream, component, sockptr, rcand);
+
+ if (use_candidate)
+ priv_mark_pair_nominated (agent, stream, component, lcand, rcand);
+--
+2.13.6
+
+
+From 25b3eeec70b4e8e3b2154a18cdc8c5604f572012 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 12:56:28 +0200
+Subject: [PATCH 36/70] conncheck: update the pair state in triggered check
+ list
+
+With this patch, we update the state of the pair to waiting when
+it is put in the triggered check queue. We also take care to call
+priv_schedule_triggered_check() before priv_mark_pair_nominated()
+so a pair to be rechecked and put on the triggered check queue
+will have a unique state to be tested in the following call to
+priv_mark_pair_nominated() when evaluating its nomination attributes.
+
+Differential Revision: https://phabricator.freedesktop.org/D883
+---
+ agent/conncheck.c | 33 +++++++++------------------------
+ 1 file changed, 9 insertions(+), 24 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 3cd0424..9950970 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -183,6 +183,8 @@ priv_add_pair_to_triggered_check_queue (NiceAgent *agent, CandidateCheckPair *pa
+ {
+ g_assert (pair);
+
++ pair->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
+ if (agent->triggered_check_queue == NULL ||
+ g_slist_find (agent->triggered_check_queue, pair) == NULL)
+ agent->triggered_check_queue = g_slist_append (agent->triggered_check_queue, pair);
+@@ -580,8 +582,6 @@ priv_conn_recheck_on_timeout (NiceAgent *agent, CandidateCheckPair *p)
+ nice_debug ("Agent %p : pair %p was cancelled, "
+ "triggering a new connection check", agent, p);
+ p->recheck_on_timeout = FALSE;
+- p->state = NICE_CHECK_WAITING;
+- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ return TRUE;
+ }
+@@ -1571,10 +1571,10 @@ static void priv_preprocess_conn_check_pending_data (NiceAgent *agent, NiceStrea
+ if (nice_address_equal (&icheck->from, &pair->remote->addr) &&
+ icheck->local_socket == pair->sockptr) {
+ nice_debug ("Agent %p : Updating check %p with stored early-icheck %p, %p/%u/%u (agent/stream/component).", agent, pair, icheck, agent, stream->id, component->id);
+- if (icheck->use_candidate)
+- priv_mark_pair_nominated (agent, stream, component, pair->local, pair->remote);
+ priv_schedule_triggered_check (agent, stream, component,
+ icheck->local_socket, pair->remote);
++ if (icheck->use_candidate)
++ priv_mark_pair_nominated (agent, stream, component, pair->local, pair->remote);
+ }
+ }
+ }
+@@ -1715,10 +1715,10 @@ void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
+ else
+ conn_check_add_for_candidate (agent, stream->id, component, candidate);
+
+- if (icheck->use_candidate)
+- priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
+ priv_schedule_triggered_check (agent, stream, component,
+ icheck->local_socket, candidate);
++ if (icheck->use_candidate)
++ priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
+ }
+ }
+ }
+@@ -1967,7 +1967,9 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ }
+ /* note: this case is not covered by the ICE spec, 7.2.1.5,
+ * "Updating the Nominated Flag", but a pair in waiting state
+- * deserves the same treatment than a pair in-progress.
++ * deserves the same treatment than a pair in-progress. A pair
++ * can be in waiting state as the result of being enqueued in
++ * the triggered check list for example.
+ */
+ if (pair->state == NICE_CHECK_WAITING) {
+ pair->mark_nominated_on_response_arrival = TRUE;
+@@ -1975,19 +1977,6 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ "will be nominated on response receipt.",
+ agent, pair, pair->foundation);
+ }
+- /* note: this case is not covered by the ICE spec, 7.2.1.5,
+- * "Updating the Nominated Flag" either, but a pair in frozen
+- * state, and in the triggered check list should also be
+- * considered like a pair in-progress. This case happens with
+- * the new-dribble test, when an agent replays incoming early
+- * connchecks.
+- */
+- if (pair->state == NICE_CHECK_FROZEN) {
+- pair->mark_nominated_on_response_arrival = TRUE;
+- nice_debug ("Agent %p : pair %p (%s) is frozen, "
+- "will be nominated on response receipt.",
+- agent, pair, pair->foundation);
+- }
+ } else if (pair->local == localcand && pair->remote == remotecand) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated", agent, pair, pair->foundation);
+ pair->nominated = TRUE;
+@@ -2926,9 +2915,7 @@ static void priv_reply_to_conn_check (NiceAgent *agent, NiceStream *stream,
+ }
+
+ if (rcand) {
+- /* note: upon successful check, make the reserve check immediately */
+ priv_schedule_triggered_check (agent, stream, component, sockptr, rcand);
+-
+ if (use_candidate)
+ priv_mark_pair_nominated (agent, stream, component, lcand, rcand);
+ }
+@@ -3345,9 +3332,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+
+ p->stun_message.buffer = NULL;
+ p->stun_message.buffer_len = 0;
+- p->state = NICE_CHECK_WAITING;
+ priv_add_pair_to_triggered_check_queue (agent, p);
+- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+ }
+ trans_found = TRUE;
+ } else {
+--
+2.13.6
+
+
+From 11d4e37a030eb144a355dc26c705ef5aa5a975a7 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Fri, 1 Apr 2016 17:31:44 +0200
+Subject: [PATCH 37/70] conncheck: remove a useless pair recheck
+
+This exception to the ICE spec is no longer needed: when a pair is in
+the succeeded state, there is no needed to recheck it again upon
+reception of an incoming stun request on it.
+
+Differential Revision: https://phabricator.freedesktop.org/D884
+---
+ agent/conncheck.c | 17 -----------------
+ 1 file changed, 17 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 9950970..95e2556 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -2820,23 +2820,6 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ * that causes the ready -> connected transition.
+ */
+ priv_update_check_list_state_for_ready (agent, stream, component);
+-
+- /* note: this new check is required by the new-dribble test,
+- * when early icheck on the peer controlled agent causes an
+- * incoming stun request to an already succeeded (and
+- * nominated) pair on the controlling agent. If the
+- * controlling agent doesn't retrigger a check with
+- * USE-CANDIDATE=1, the peer agent has no way to nominate it.
+- *
+- * This behavior differs from ICE spec 7.2.1.4
+- */
+- if ((agent->compatibility == NICE_COMPATIBILITY_RFC5245 ||
+- agent->compatibility == NICE_COMPATIBILITY_WLM2009 ||
+- agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
+- agent->controlling_mode) {
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- conn_check_schedule_next(agent);
+- }
+ } else if (p->state == NICE_CHECK_FAILED) {
+ /* 7.2.1.4 Triggered Checks
+ * If the state of the pair is Failed, it is changed to Waiting
+--
+2.13.6
+
+
+From 8fa648a15a6700d08165fe97a09f5c068abae1e6 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 11 Apr 2016 13:13:51 +0200
+Subject: [PATCH 38/70] conncheck: dont cancel a pair for triggered check
+
+This patch adds another supplementary "corner" case, not covered by the
+ICE spec, sect 8.1.2, "Updating States". A pair in waiting state and in
+the triggered check list should be considered like an in-progress pair,
+and cancelled only if its priority is lower than the priority of the
+nominated pair. This is required in some aggressive nomination
+situations for both peers to select the same pair, having the highest
+priority.
+
+Differential Revision: https://phabricator.freedesktop.org/D933
+---
+ agent/conncheck.c | 48 ++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 32 insertions(+), 16 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 95e2556..79f678a 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -64,7 +64,7 @@
+
+ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream);
+ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream *stream, NiceComponent *component);
+-static guint priv_prune_pending_checks (NiceStream *stream, guint component_id);
++static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, guint component_id);
+ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand);
+ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceCandidate *localcand, NiceCandidate *remotecand);
+ static size_t priv_create_username (NiceAgent *agent, NiceStream *stream,
+@@ -176,6 +176,16 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
+ }
+ }
+
++/* Verify if the pair is in the triggered checks list
++ */
++
++static gboolean
++priv_is_pair_in_triggered_check_queue (NiceAgent *agent, CandidateCheckPair *pair)
++{
++ g_assert (pair);
++ return (g_slist_find (agent->triggered_check_queue, pair) != NULL);
++}
++
+ /* Add the pair to the triggered checks list, if not already present
+ */
+ static void
+@@ -1897,7 +1907,7 @@ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream
+ /* Only go to READY if no checks are left in progress. If there are
+ * any that are kept, then this function will be called again when the
+ * conncheck tick timer finishes them all */
+- if (priv_prune_pending_checks (stream, component->id) == 0) {
++ if (priv_prune_pending_checks (agent, stream, component->id) == 0) {
+ /* Continue through the states to give client code a nice
+ * logical progression. See http://phabricator.freedesktop.org/D218 for
+ * discussion. */
+@@ -2693,14 +2703,14 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ *
+ * @see priv_update_check_list_state_failed_components()
+ */
+-static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
++static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, guint component_id)
+ {
+ GSList *i;
+ guint64 highest_nominated_priority = 0;
+ guint in_progress = 0;
+
+- nice_debug ("Agent XXX: Finding highest priority for component %d",
+- component_id);
++ nice_debug ("Agent %p: Finding highest priority for component %d",
++ agent, component_id);
+
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+@@ -2712,41 +2722,47 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
+ }
+ }
+
+- nice_debug ("Agent XXX: Pruning pending checks. Highest nominated priority "
+- "is %" G_GUINT64_FORMAT, highest_nominated_priority);
++ nice_debug ("Agent %p: Pruning pending checks. Highest nominated priority "
++ "is %" G_GUINT64_FORMAT, agent, highest_nominated_priority);
+
+ /* step: cancel all FROZEN and WAITING pairs for the component */
+ /* note: this case is not covered by the ICE spec, 8.1.2
+ * "Updating States", but a pair in waiting state which will be
+ * nominated on response receipt should be treated the same way
+- * that an in-progress pair.
++ * that an in-progress pair. A pair in waiting state and in
++ * the triggered check list should also be treated like an in-progress
++ * pair.
+ */
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
++
+ if (p->component_id == component_id) {
++ gboolean like_in_progress =
++ p->mark_nominated_on_response_arrival ||
++ priv_is_pair_in_triggered_check_queue (agent, p);
++
+ if (p->state == NICE_CHECK_FROZEN ||
+- (p->state == NICE_CHECK_WAITING &&
+- !p->mark_nominated_on_response_arrival)) {
++ (p->state == NICE_CHECK_WAITING && !like_in_progress)) {
+ p->state = NICE_CHECK_CANCELLED;
+- nice_debug ("Agent XXX : pair %p state CANCELED", p);
++ nice_debug ("Agent %p : pair %p state CANCELED", agent, p);
+ }
+
+ /* note: a SHOULD level req. in ICE 8.1.2. "Updating States" (ID-19) */
+ if (p->state == NICE_CHECK_IN_PROGRESS ||
+- (p->state == NICE_CHECK_WAITING &&
+- p->mark_nominated_on_response_arrival)) {
++ (p->state == NICE_CHECK_WAITING && like_in_progress)) {
+ if (highest_nominated_priority != 0 &&
+ p->priority < highest_nominated_priority) {
+ p->stun_message.buffer = NULL;
+ p->stun_message.buffer_len = 0;
+ p->state = NICE_CHECK_CANCELLED;
+- nice_debug ("Agent XXX : pair %p state CANCELED", p);
++ nice_debug ("Agent %p : pair %p state CANCELED", agent, p);
+ } else {
+ /* We must keep the higher priority pairs running because if a udp
+ * packet was lost, we might end up using a bad candidate */
+- nice_debug ("Agent XXX : pair %p kept IN_PROGRESS because priority %"
++ nice_debug ("Agent %p : pair %p kept IN_PROGRESS because priority %"
+ G_GUINT64_FORMAT " is higher than currently nominated pair %"
+- G_GUINT64_FORMAT, p, p->priority, highest_nominated_priority);
++ G_GUINT64_FORMAT, agent,
++ p, p->priority, highest_nominated_priority);
+ in_progress++;
+ }
+ }
+--
+2.13.6
+
+
+From 6a512b6eca9603ce8bf3ed0814fd314684c66ea7 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 14 Jun 2016 21:04:49 +0200
+Subject: [PATCH 39/70] conncheck: try to change earlier to state ready
+
+We check if we can move from state connected to ready just
+after a pair expired its retransmission count. This pair
+will be marked failed, and will no longer be in-progress.
+The number of in-progress dropping down to zero is one
+of the conditions needed to make the transition to ready,
+per component (and not globally as it's the case in other
+locations where this check function is called).
+
+Differential Revision: https://phabricator.freedesktop.org/D1117
+---
+ agent/conncheck.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 79f678a..d31b77f 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -626,6 +626,7 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+ {
+ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
++ NiceComponent *component;
+
+ /* case: conncheck cancelled due to in-progress incoming
+ * check, requeing the pair, ICE spec, sect 7.2.1.4
+@@ -646,6 +647,16 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", retransmission failed");
+
++ /* perform a check if a transition state from connected to
++ * ready can be performed. This may happen here, when the last
++ * in-progress pair has expired its retransmission count
++ * in priv_conn_check_tick_stream(), which is a condition to
++ * make the transition connected to ready.
++ */
++ if (agent_find_component (agent, p->stream_id, p->component_id,
++ NULL, &component))
++ priv_update_check_list_state_for_ready (agent, stream,
++ component);
+ break;
+ }
+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+--
+2.13.6
+
+
+From 59fe48517c0b7db77b99183d31fdd84b55adb5d4 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 14 Jun 2016 21:12:16 +0200
+Subject: [PATCH 40/70] conncheck: fix a state transition case
+
+When a new stun request hits a valid pair, of a failed component, we may
+have a transition from state failed to connected. In this situation, we
+do a logical progression failed -> connecting -> connected, like we do
+in function priv_update_check_list_state_for_ready()
+
+Similarily, when a new stun request hits a failed pair, of a failed
+component, triggering a new conncheck for this pair may also cause the
+component state to move back from failed to connecting state.
+
+Differential Revision: https://phabricator.freedesktop.org/D1118
+---
+ agent/conncheck.c | 21 ++++++++++++++++-----
+ 1 file changed, 16 insertions(+), 5 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index d31b77f..e1a5cf1 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -1973,12 +1973,14 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ pair->nominated = TRUE;
+ priv_update_selected_pair (agent, component, pair);
+ /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state != NICE_COMPONENT_STATE_READY) {
++ if (component->state == NICE_COMPONENT_STATE_FAILED)
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTING);
++ if (component->state == NICE_COMPONENT_STATE_CONNECTING)
+ /* step: notify the client of a new component state (must be done
+ * before the possible check list state update step */
+ agent_signal_component_state_change (agent,
+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- }
+ priv_update_check_list_state_for_ready (agent, stream, component);
+ } else if (pair->state == NICE_CHECK_IN_PROGRESS) {
+ pair->mark_nominated_on_response_arrival = TRUE;
+@@ -2004,13 +2006,14 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ if (pair->valid) {
+ priv_update_selected_pair (agent, component, pair);
+ /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state != NICE_COMPONENT_STATE_READY) {
++ if (component->state == NICE_COMPONENT_STATE_FAILED)
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTING);
++ if (component->state == NICE_COMPONENT_STATE_CONNECTING)
+ /* step: notify the client of a new component state (must be done
+ * before the possible check list state update step */
+ agent_signal_component_state_change (agent,
+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- }
+-
+ }
+ priv_update_check_list_state_for_ready (agent, stream, component);
+ }
+@@ -2854,6 +2857,14 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ pair (representing a new STUN Binding request transaction), by
+ enqueueing the pair in the triggered check queue. */
+ priv_add_pair_to_triggered_check_queue (agent, p);
++ /* If the component for this pair is in failed state, move it
++ * back to connecting, and reinitiate the timers
++ */
++ if (component->state == NICE_COMPONENT_STATE_FAILED) {
++ agent_signal_component_state_change (agent, stream->id,
++ component->id, NICE_COMPONENT_STATE_CONNECTING);
++ conn_check_schedule_next (agent);
++ }
+ }
+
+ /* note: the spec says the we SHOULD retransmit in-progress
+--
+2.13.6
+
+
+From f19d209decac432a1597d84c3d5809d2208f7457 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 14 Jun 2016 21:20:49 +0200
+Subject: [PATCH 41/70] conncheck: do not recheck a just succeeded pair
+
+We cancel the potential in-progress transaction cancellation, caused by
+sect 7.2.1.4 "Triggered Checks", when we receive a valid reply before
+transmission timeout, or just after timeout, when the pair is
+temporarily put on the triggered check list on the way to be
+rechecked. This situation is not covered by the RFC 5245.
+
+Differential Revision: https://phabricator.freedesktop.org/D1119
+---
+ agent/conncheck.c | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index e1a5cf1..4b785b5 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -3117,6 +3117,16 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ if (new_pair == p)
+ p->valid = TRUE;
+ p->state = NICE_CHECK_SUCCEEDED;
++ /* note: we cancel the potential in-progress transaction
++ * cancellation, caused by sect 7.2.1.4 "Triggered Checks", if
++ * we receive a valid reply before transmission timeout...
++ */
++ p->recheck_on_timeout = FALSE;
++ /* ... or just after the transmission timeout, while the pair is
++ * temporarily put on the triggered check list on the way to be
++ * be rechecked: we remove it from the list too.
++ */
++ priv_remove_pair_from_triggered_check_queue (agent, p);
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
+ nice_component_add_valid_candidate (component, remote_candidate);
+ }
+@@ -3151,6 +3161,8 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ * Succeeded, RFC 5245, 7.1.3.2.3, "Updating Pair States"
+ */
+ p->state = NICE_CHECK_SUCCEEDED;
++ p->recheck_on_timeout = FALSE;
++ priv_remove_pair_from_triggered_check_queue (agent, p);
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED, %p DISCOVERED.",
+ agent, p, new_pair);
+ }
+--
+2.13.6
+
+
+From d516fca1b0e0a6606afec797bdc0690104e779a9 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 14 Jun 2016 21:32:26 +0200
+Subject: [PATCH 42/70] conncheck: adjust recheck on timeout strategy
+
+The pair recheck on timeout can easily cause repetitive rechecks in
+a ping-pong effect, if both peers with the same behaviour try to
+check the same pair almost simultaneously, and if the network rtt
+is greater than the initial timer rto. The reply to the initial
+stun request may arrive after the in-progress conncheck
+cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
+creates a new stun request, and forgets the initial one.
+The conncheck timer is restarted with the same initial value,
+so the same situation happens again later.
+
+We choose to avoid resetting the timer in such situation. After enough
+retransmissions, the timeout delay, that doubles after each timeout,
+becomes longer than the rtt, and the stun reply can be handled.
+
+Differential Revision: https://phabricator.freedesktop.org/D1115
+---
+ agent/conncheck.c | 30 ++++++++++++++++++++++++++----
+ 1 file changed, 26 insertions(+), 4 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 4b785b5..88d2534 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -591,7 +591,6 @@ priv_conn_recheck_on_timeout (NiceAgent *agent, CandidateCheckPair *p)
+ */
+ nice_debug ("Agent %p : pair %p was cancelled, "
+ "triggering a new connection check", agent, p);
+- p->recheck_on_timeout = FALSE;
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ return TRUE;
+ }
+@@ -2650,9 +2649,32 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ if (nice_socket_is_reliable(pair->sockptr)) {
+ stun_timer_start_reliable(&pair->timer, agent->stun_reliable_timeout);
+ } else {
+- stun_timer_start (&pair->timer,
+- priv_compute_conncheck_timer (agent, stream),
+- agent->stun_max_retransmissions);
++ StunTimer *timer = &pair->timer;
++
++ if (pair->recheck_on_timeout)
++ /* The pair recheck on timeout can easily cause repetitive rechecks in
++ * a ping-pong effect, if both peers with the same behaviour try to
++ * check the same pair almost simultaneously, and if the network rtt
++ * is greater than the initial timer rto. The reply to the initial
++ * stun request may arrive after the in-progress conncheck
++ * cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
++ * creates a new stun request, and forgets the initial one.
++ * The conncheck timer is restarted with the same initial value,
++ * so the same situation happens again later.
++ *
++ * We choose to avoid resetting the timer in such situation.
++ * After enough retransmissions, the timeout delay becomes
++ * longer than the rtt, and the stun reply can be handled.
++ */
++ nice_debug("Agent %p : reusing timer of pair %p: %d/%d %d/%dms",
++ agent, pair,
++ timer->retransmissions, timer->max_retransmissions,
++ timer->delay - stun_timer_remainder (timer), timer->delay);
++ else
++ stun_timer_start (timer,
++ priv_compute_conncheck_timer (agent, stream),
++ agent->stun_max_retransmissions);
++ pair->recheck_on_timeout = FALSE;
+ }
+
+ /* TCP-ACTIVE candidate must create a new socket before sending
+--
+2.13.6
+
+
+From 95f8805eb7b77755337e28daf1f134587d42b35f Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu, 16 Jun 2016 17:32:39 +0200
+Subject: [PATCH 43/70] conncheck: remove cancelled pair state
+
+Pairs with the state NICE_CHECK_CANCELLED are the pairs targeted for
+removal after the nomination of a pair with an higher priority,
+described in Section 8.1.2 "Updating States", item 2 of RFC 5245. They
+include also pairs that overflow the conncheck list size, but this is a
+somewhat more marginal situation. So we are mainly interested in the
+first use case of this state.
+
+This state mixes two different situations, that deserve a distinct
+handling : on one side, there are waiting or frozen pairs that must be
+removed, this is an immediate action that doesn't need a dedicated state
+for that. And on the other side, there are in-progress pairs that
+should no longer be retransmitted, because another pair with a higher
+priority has already been nominated.
+
+This patch removes the cancelled state, and adds a flag
+retransmit_on_timeout to deal with this last situation. Note that this
+case should not generate a triggered check, as per described in section
+7.2.1.4, when the state of the pair is In-Progress or Failed, since this
+pair of lower priority has no hope to replace the nominated one.
+
+Differential Revision: https://phabricator.freedesktop.org/D1114
+---
+ agent/conncheck.c | 142 +++++++++++++++++++++++++++++-------------------------
+ agent/conncheck.h | 3 +-
+ 2 files changed, 77 insertions(+), 68 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 88d2534..b0e2222 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -100,8 +100,6 @@ priv_state_to_gchar (NiceCheckState state)
+ return 'F';
+ case NICE_CHECK_FROZEN:
+ return 'Z';
+- case NICE_CHECK_CANCELLED:
+- return 'C';
+ case NICE_CHECK_DISCOVERED:
+ return 'D';
+ default:
+@@ -627,6 +625,7 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
+ NiceComponent *component;
+
++timer_timeout:
+ /* case: conncheck cancelled due to in-progress incoming
+ * check, requeing the pair, ICE spec, sect 7.2.1.4
+ * "Triggered Checks", "If the state of that pair is
+@@ -662,6 +661,13 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ {
+ unsigned int timeout = stun_timer_remainder (&p->timer);
+
++ /* case: retransmission stopped, due to the nomination of
++ * a pair with a higher priority than this in-progress pair,
++ * ICE spec, sect 8.1.2 "Updating States", item 2.2
++ */
++ if (!p->retransmit_on_timeout)
++ goto timer_timeout;
++
+ /* case: conncheck cancelled due to in-progress incoming
+ * check, requeing the pair, ICE spec, sect 7.2.1.4
+ * "Triggered Checks", "If the state of that pair is
+@@ -1600,26 +1606,6 @@ static void priv_preprocess_conn_check_pending_data (NiceAgent *agent, NiceStrea
+ }
+
+
+-static GSList *prune_cancelled_conn_check (GSList *conncheck_list)
+-{
+- GSList *item = conncheck_list;
+-
+- while (item) {
+- CandidateCheckPair *pair = item->data;
+- GSList *next = item->next;
+-
+- if (pair->state == NICE_CHECK_CANCELLED) {
+- conn_check_free_item (pair);
+- conncheck_list = g_slist_delete_link (conncheck_list, item);
+- }
+-
+- item = next;
+- }
+-
+- return conncheck_list;
+-}
+-
+-
+ /*
+ * Handle any processing steps for connectivity checks after
+ * remote credentials have been set. This function handles
+@@ -1754,9 +1740,6 @@ void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
+ (GDestroyNotify) incoming_check_free);
+ component->incoming_checks = NULL;
+ }
+-
+- stream->conncheck_list =
+- prune_cancelled_conn_check (stream->conncheck_list);
+ }
+
+ /*
+@@ -1764,7 +1747,7 @@ void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
+ * in ICE spec section 5.7.3 (ID-19). See also
+ * conn_check_add_for_candidate().
+ */
+-static void priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper_limit)
++static GSList *priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper_limit)
+ {
+ guint valid = 0;
+ guint cancelled = 0;
+@@ -1772,22 +1755,22 @@ static void priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper
+
+ while (item) {
+ CandidateCheckPair *pair = item->data;
++ GSList *next = item->next;
+
+- if (pair->state != NICE_CHECK_CANCELLED) {
+- valid++;
+- if (valid > upper_limit) {
+- pair->state = NICE_CHECK_CANCELLED;
++ valid++;
++ if (valid > upper_limit) {
++ conn_check_free_item (pair);
++ conncheck_list = g_slist_delete_link (conncheck_list, item);
+ cancelled++;
+- }
+ }
+-
+- item = item->next;
++ item = next;
+ }
+
+ if (cancelled > 0)
+ nice_debug ("Agent : Pruned %d candidates. Conncheck list has %d elements"
+ " left. Maximum connchecks allowed : %d", cancelled, valid,
+ upper_limit);
++ return conncheck_list;
+ }
+
+ /*
+@@ -2097,6 +2080,7 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ }
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local));
++ pair->retransmit_on_timeout = TRUE;
+
+ stream->conncheck_list = g_slist_insert_sorted (stream->conncheck_list, pair,
+ (GCompareFunc)conn_check_compare);
+@@ -2106,7 +2090,8 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ /* implement the hard upper limit for number of
+ checks (see sect 5.7.3 ICE ID-19): */
+ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245) {
+- priv_limit_conn_check_list_size (stream->conncheck_list, agent->max_conn_checks);
++ stream->conncheck_list = priv_limit_conn_check_list_size (
++ stream->conncheck_list, agent->max_conn_checks);
+ }
+
+ return pair;
+@@ -2769,8 +2754,10 @@ static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, gu
+ * the triggered check list should also be treated like an in-progress
+ * pair.
+ */
+- for (i = stream->conncheck_list; i; i = i->next) {
++ i = stream->conncheck_list;
++ while (i) {
+ CandidateCheckPair *p = i->data;
++ GSList *next = i->next;
+
+ if (p->component_id == component_id) {
+ gboolean like_in_progress =
+@@ -2779,19 +2766,20 @@ static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, gu
+
+ if (p->state == NICE_CHECK_FROZEN ||
+ (p->state == NICE_CHECK_WAITING && !like_in_progress)) {
+- p->state = NICE_CHECK_CANCELLED;
+- nice_debug ("Agent %p : pair %p state CANCELED", agent, p);
++ nice_debug ("Agent %p : pair %p removed.", agent, p);
++ conn_check_free_item (p);
++ stream->conncheck_list = g_slist_delete_link(stream->conncheck_list, i);
+ }
+
+ /* note: a SHOULD level req. in ICE 8.1.2. "Updating States" (ID-19) */
+- if (p->state == NICE_CHECK_IN_PROGRESS ||
++ else if (p->state == NICE_CHECK_IN_PROGRESS ||
+ (p->state == NICE_CHECK_WAITING && like_in_progress)) {
+ if (highest_nominated_priority != 0 &&
+ p->priority < highest_nominated_priority) {
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- p->state = NICE_CHECK_CANCELLED;
+- nice_debug ("Agent %p : pair %p state CANCELED", agent, p);
++ p->retransmit_on_timeout = FALSE;
++ p->recheck_on_timeout = FALSE;
++ nice_debug ("Agent %p : pair %p will not be retransmitted.",
++ agent, p);
+ } else {
+ /* We must keep the higher priority pairs running because if a udp
+ * packet was lost, we might end up using a bad candidate */
+@@ -2803,6 +2791,7 @@ static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, gu
+ }
+ }
+ }
++ i = next;
+ }
+
+ return in_progress;
+@@ -2841,29 +2830,42 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ p = p->succeeded_pair;
+ }
+
+- nice_debug ("Agent %p : Found a matching pair %p for triggered check.", agent, p);
++ nice_debug ("Agent %p : Found a matching pair %p (%s) (state=%c) ...",
++ agent, p, p->foundation, priv_state_to_gchar (p->state));
+
+ if (p->state == NICE_CHECK_WAITING ||
+- p->state == NICE_CHECK_FROZEN)
++ p->state == NICE_CHECK_FROZEN) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
++ }
+ else if (p->state == NICE_CHECK_IN_PROGRESS) {
+ /* note: according to ICE SPEC sect 7.2.1.4 "Triggered Checks"
+ * we cancel the in-progress transaction, and after the
+ * retransmission timeout, we create a new connectivity check
+ * for that pair. The controlling role of this new check may
+ * be different from the role of this cancelled check.
++ *
++ * note: the flag retransmit_on_timeout unset means that
++ * another pair, with a higher priority is already nominated,
++ * so there's no reason to recheck this pair, since it can in
++ * no way replace the nominated one.
+ */
+ if (!nice_socket_is_reliable (p->sockptr)) {
+- nice_debug ("Agent %p : check already in progress, "
+- "cancelling this check..", agent);
+- /* this flag will determine the action at the retransmission
+- * timeout of the stun timer
+- */
+- p->recheck_on_timeout = TRUE;
++ if (p->retransmit_on_timeout) {
++ nice_debug ("Agent %p : pair %p will be rechecked "
++ "on stun timer timeout.", agent, p);
++ /* this flag will determine the action at the retransmission
++ * timeout of the stun timer
++ */
++ p->recheck_on_timeout = TRUE;
++ } else
++ nice_debug ("Agent %p : pair %p won't be retransmitted.",
++ agent, p);
+ }
+ }
+ else if (p->state == NICE_CHECK_SUCCEEDED) {
+- nice_debug ("Agent %p : Skipping triggered check, already completed..", agent);
++ nice_debug ("Agent %p : nothing to do for pair %p.", agent, p);
+ /* note: this is a bit unsure corner-case -- let's do the
+ same state update as for processing responses to our own checks */
+ /* note: this update is required by the dribble test, to
+@@ -2875,18 +2877,30 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ } else if (p->state == NICE_CHECK_FAILED) {
+ /* 7.2.1.4 Triggered Checks
+ * If the state of the pair is Failed, it is changed to Waiting
+- and the agent MUST create a new connectivity check for that
+- pair (representing a new STUN Binding request transaction), by
+- enqueueing the pair in the triggered check queue. */
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- /* If the component for this pair is in failed state, move it
+- * back to connecting, and reinitiate the timers
++ * and the agent MUST create a new connectivity check for that
++ * pair (representing a new STUN Binding request transaction), by
++ * enqueueing the pair in the triggered check queue.
++ *
++ * note: the flag retransmit_on_timeout unset means that
++ * another pair, with a higher priority is already nominated,
++ * we apply the same strategy than with an in-progress pair
++ * above.
+ */
+- if (component->state == NICE_COMPONENT_STATE_FAILED) {
+- agent_signal_component_state_change (agent, stream->id,
+- component->id, NICE_COMPONENT_STATE_CONNECTING);
+- conn_check_schedule_next (agent);
+- }
++ if (p->retransmit_on_timeout) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ /* If the component for this pair is in failed state, move it
++ * back to connecting, and reinitiate the timers
++ */
++ if (component->state == NICE_COMPONENT_STATE_FAILED) {
++ agent_signal_component_state_change (agent, stream->id,
++ component->id, NICE_COMPONENT_STATE_CONNECTING);
++ conn_check_schedule_next (agent);
++ }
++ } else
++ nice_debug ("Agent %p : pair %p won't be retransmitted.",
++ agent, p);
+ }
+
+ /* note: the spec says the we SHOULD retransmit in-progress
+@@ -3401,10 +3415,6 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ }
+ }
+
+-
+- stream->conncheck_list =
+- prune_cancelled_conn_check (stream->conncheck_list);
+-
+ return trans_found;
+ }
+
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index c07fb22..909d469 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -56,7 +56,6 @@
+ * @NICE_CHECK_SUCCEEDED: Connection successfully checked.
+ * @NICE_CHECK_FAILED: No connectivity; retransmissions ceased.
+ * @NICE_CHECK_FROZEN: Waiting to be scheduled to %NICE_CHECK_WAITING.
+- * @NICE_CHECK_CANCELLED: Check cancelled.
+ * @NICE_CHECK_DISCOVERED: A valid candidate pair not on the check list.
+ *
+ * States for checking a candidate pair.
+@@ -68,7 +67,6 @@ typedef enum
+ NICE_CHECK_SUCCEEDED,
+ NICE_CHECK_FAILED,
+ NICE_CHECK_FROZEN,
+- NICE_CHECK_CANCELLED,
+ NICE_CHECK_DISCOVERED,
+ } NiceCheckState;
+
+@@ -89,6 +87,7 @@ struct _CandidateCheckPair
+ gboolean use_candidate_on_next_check;
+ gboolean mark_nominated_on_response_arrival;
+ gboolean recheck_on_timeout;
++ gboolean retransmit_on_timeout;
+ struct _CandidateCheckPair *discovered_pair;
+ struct _CandidateCheckPair *succeeded_pair;
+ guint64 priority;
+--
+2.13.6
+
+
+From 07366a5bca7e4818b8df29d9c7c220da8f752547 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 21 Jun 2016 21:47:42 +0200
+Subject: [PATCH 44/70] conncheck: fix the component failed transition
+
+This patch fixes the transition of a component from connecting to
+failed, that previously occured due to the propagation of the
+keep_timer_going variable, and to the final call to function
+priv_update_check_list_failed_components(), after the global agent
+timer was stopped.
+
+Previously, the code almost never entered to failed state, because the
+timer was going one, as long as the number of nominated pair was not
+enough, and as long as there were valid pairs not yet nominated. Even
+if all pair timers were over.
+
+The definition of the Failed state of a conncheck list is somewhat
+contradictory in the spec, depending on weather you read :
+
+ * sect 5.7.4. "Computing States",
+ "Failed: In this state, the ICE checks have not completed successfully
+ for this media stream."
+
+ or
+
+ * sect 7.1.3.3. "Check List and Timer State Updates",
+ "If all of the pairs in the check list are now either in the Failed or
+ Succeeded state: If there is not a pair in the valid list for each
+ component of the media stream, the state of the check list is set to
+ Failed."
+
+Our understanding of the ICE spec is that, the proper way to enter failed
+state instead in when all connchecks have no longer in-progress pairs.
+All pairs are either in state succeeded, discovered, or failed. No timer
+is still running, and we have no hope that the conncheck list changes
+again, except if an unexpected STUN packet arrives later. All pairs in
+frozen state is a special case, that is handled separately (sect
+7.1.3.3).
+
+A special grace delay is added before declaring a component in state
+Failed. This delay is not part of the RFC, and it is aimed to limit the
+cases when a conncheck list is reactivated just after it's been declared
+failed, causing a user visible transition from connecting to failed, and
+back from failed to connecting again. This is also required by the test
+suite, that counts exactly the number of time each state is entered, and
+doesn't expect these transcient failed states to happen (frequent due to
+the nature of the testsuite, less frequent in real life).
+
+Differential Revision: https://phabricator.freedesktop.org/D1111
+---
+ agent/agent-priv.h | 14 +++++++++++
+ agent/conncheck.c | 71 +++++++++++++++++++++++++++++++++++++++++++-----------
+ 2 files changed, 71 insertions(+), 14 deletions(-)
+
+diff --git a/agent/agent-priv.h b/agent/agent-priv.h
+index 3384180..714ecff 100644
+--- a/agent/agent-priv.h
++++ b/agent/agent-priv.h
+@@ -122,6 +122,18 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
+ ((obj)->compatibility == NICE_COMPATIBILITY_RFC5245 || \
+ (obj)->compatibility == NICE_COMPATIBILITY_OC2007R2)
+
++/* A grace period before declaring a component as failed, in msecs. This
++ * delay is added to reduce the chance to see the agent receiving new
++ * stun activity just after the conncheck list has been declared failed,
++ * reactiviting conncheck activity, and causing a (valid) state
++ * transitions like that: connecting -> failed -> connecting ->
++ * connected -> ready.
++ * Such transitions are not buggy per-se, but may break the
++ * test-suite, that counts precisely the number of time each state
++ * has been set, and doesnt expect these transcient failed states.
++ */
++#define NICE_AGENT_MAX_TIMER_GRACE_PERIOD 1000
++
+ struct _NiceAgent
+ {
+ GObject parent; /* gobject pointer */
+@@ -176,6 +188,8 @@ struct _NiceAgent
+ guint16 rfc4571_expecting_length;
+ gboolean use_ice_udp;
+ gboolean use_ice_tcp;
++
++ guint conncheck_timer_grace_period; /* ongoing delay before timer stop */
+ /* XXX: add pointer to internal data struct for ABI-safe extensions */
+ };
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index b0e2222..63db471 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -709,7 +709,7 @@ timer_timeout:
+ }
+ }
+ }
+- }
++ }
+
+ /* step: perform an ordinary check, ICE spec, 5.8 "Scheduling Checks"
+ * note: This code is executed when the triggered checks list is
+@@ -795,11 +795,8 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ if (s_inprogress)
+ keep_timer_going = TRUE;
+
+- /* note: if some components have established connectivity,
+- * but yet no nominated pair, keep timer going */
+ if (s_nominated < stream->n_components &&
+ s_waiting_for_nomination) {
+- keep_timer_going = TRUE;
+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
+ if (agent->nomination_mode == NICE_NOMINATION_MODE_REGULAR &&
+ agent->controlling_mode) {
+@@ -888,6 +885,7 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ p->recheck_on_timeout = FALSE;
+ p->use_candidate_on_next_check = TRUE;
+ priv_add_pair_to_triggered_check_queue (agent, p);
++ keep_timer_going = TRUE;
+ break; /* move to the next component */
+ }
+ }
+@@ -911,6 +909,7 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ p->recheck_on_timeout = FALSE;
+ priv_update_selected_pair (agent, component, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
++ keep_timer_going = TRUE;
+ break; /* move to the next component */
+ }
+ }
+@@ -937,6 +936,7 @@ conn_check_stop (NiceAgent *agent)
+ g_source_destroy (agent->conncheck_timer_source);
+ g_source_unref (agent->conncheck_timer_source);
+ agent->conncheck_timer_source = NULL;
++ agent->conncheck_timer_grace_period = 0;
+ }
+
+
+@@ -1005,9 +1005,39 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ keep_timer_going = TRUE;
+ }
+
++ /* step: if no work left and a conncheck list of a stream is still
++ * frozen, set the pairs to waiting, according to ICE SPEC, sect
++ * 7.1.3.3. "Check List and Timer State Updates"
++ */
++ if (!keep_timer_going) {
++ for (i = agent->streams; i ; i = i->next) {
++ NiceStream *stream = i->data;
++ if (priv_is_checklist_frozen (stream)) {
++ nice_debug ("Agent %p : stream %d conncheck list is still "
++ "frozen, while other lists are completed. Unfreeze it.",
++ agent, stream->id);
++ keep_timer_going = priv_conn_check_unfreeze_next (agent, stream);
++ }
++ }
++ }
++
++ /* note: we provide a grace period before declaring a component as
++ * failed. Components marked connected, and then ready follow another
++ * code path, and are not concerned by this grace period.
++ */
++ if (!keep_timer_going && agent->conncheck_timer_grace_period == 0)
++ nice_debug ("Agent %p : waiting %d msecs before checking "
++ "for failed components.", agent, NICE_AGENT_MAX_TIMER_GRACE_PERIOD);
++
++ if (keep_timer_going)
++ agent->conncheck_timer_grace_period = 0;
++ else
++ agent->conncheck_timer_grace_period += agent->timer_ta;
++
+ /* step: stop timer if no work left */
+- if (keep_timer_going != TRUE) {
+- nice_debug ("Agent %p : %s: stopping conncheck timer", agent, G_STRFUNC);
++ if (!keep_timer_going &&
++ agent->conncheck_timer_grace_period >= NICE_AGENT_MAX_TIMER_GRACE_PERIOD) {
++ nice_debug ("Agent %p : checking for failed components now.", agent);
+ for (i = agent->streams; i; i = i->next) {
+ NiceStream *stream = i->data;
+ priv_update_check_list_failed_components (agent, stream);
+@@ -1017,6 +1047,7 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ }
+ }
+
++ nice_debug ("Agent %p : %s: stopping conncheck timer", agent, G_STRFUNC);
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", conncheck timer stopped");
+
+@@ -1027,9 +1058,10 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+
+ /* XXX: what to signal, is all processing now really done? */
+ nice_debug ("Agent %p : changing conncheck state to COMPLETED.", agent);
++ return FALSE;
+ }
+
+- return keep_timer_going;
++ return TRUE;
+ }
+
+ static gboolean priv_conn_check_tick (gpointer pointer)
+@@ -1810,15 +1842,18 @@ static gboolean priv_update_selected_pair (NiceAgent *agent, NiceComponent *comp
+ * Updates the check list state.
+ *
+ * Implements parts of the algorithm described in
+- * ICE sect 8.1.2. "Updating States" (ID-19): if for any
++ * ICE sect 8.1.2. "Updating States" (RFC 5245): if for any
+ * component, all checks have been completed and have
+- * failed, mark that component's state to NICE_CHECK_FAILED.
++ * failed to produce a nominated pair, mark that component's
++ * state to NICE_CHECK_FAILED.
+ *
+ * Sends a component state changesignal via 'agent'.
+ */
+ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream)
+ {
+ GSList *i;
++ gboolean completed;
++ guint nominated;
+ /* note: emitting a signal might cause the client
+ * to remove the stream, thus the component count
+ * must be fetched before entering the loop*/
+@@ -1842,6 +1877,8 @@ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStre
+ if (!agent_find_component (agent, stream->id, c+1, NULL, &comp))
+ continue;
+
++ nominated = 0;
++ completed = TRUE;
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+
+@@ -1849,16 +1886,22 @@ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStre
+ g_assert (p->stream_id == stream->id);
+
+ if (p->component_id == (c + 1)) {
+- if (p->state != NICE_CHECK_FAILED)
+- break;
++ if (p->nominated)
++ ++nominated;
++ if (p->state != NICE_CHECK_FAILED &&
++ p->state != NICE_CHECK_SUCCEEDED &&
++ p->state != NICE_CHECK_DISCOVERED)
++ completed = FALSE;
+ }
+ }
+
+- /* note: all checks have failed
++ /* note: all pairs are either failed or succeeded, and the component
++ * has not produced a nominated pair.
+ * Set the component to FAILED only if it actually had remote candidates
+ * that failed.. */
+- if (i == NULL && comp != NULL && comp->remote_candidates != NULL)
+- agent_signal_component_state_change (agent,
++ if (completed && nominated == 0 &&
++ comp != NULL && comp->remote_candidates != NULL)
++ agent_signal_component_state_change (agent,
+ stream->id,
+ (c + 1), /* component-id */
+ NICE_COMPONENT_STATE_FAILED);
+--
+2.13.6
+
+
+From 195db6b344fc4f9fadc39419dfeec2fc14b23fac Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Fri, 15 Jul 2016 23:31:42 +0200
+Subject: [PATCH 45/70] agent: add new pairs only for gathering streams
+
+At the end of the local candidate gathering process, we only create new
+pairs for streams that are in gathering state.
+
+Other stream that may be in ready state for example, due to a
+previously succeeded conncheck process, may have accumulated some
+couples (local,remote) candidates that have not resulted in the creation
+a new pair during this previous conncheck process, and we don't want
+these new pairs to be added now, because it would generate unneeded
+transition changes for a stream unconcerned by this gathering.
+
+Differential Revision: https://phabricator.freedesktop.org/D1755
+---
+ agent/agent.c | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 577a7e0..e3705ed 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -2032,6 +2032,17 @@ void agent_gathering_done (NiceAgent *agent)
+
+ for (i = agent->streams; i; i = i->next) {
+ NiceStream *stream = i->data;
++
++ /* We ignore streams not in gathering state, typically already in
++ * ready state. Such streams may have couples (local,remote)
++ * candidates that have not resulted in the creation a new pair
++ * during a previous conncheck session, and we don't want these new
++ * pairs to be added now, because it would generate unneeded
++ * transition changes for a stream unconcerned by this gathering.
++ */
++ if (!stream->gathering)
++ continue;
++
+ for (j = stream->components; j; j = j->next) {
+ NiceComponent *component = j->data;
+
+--
+2.13.6
+
+
+From b4b8d6628c8c5d4f10af0101f846db4938a3f6c4 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Sun, 28 May 2017 22:20:36 +0200
+Subject: [PATCH 46/70] stun: fix gcc7 implicit fallthrough warning
+
+Differential Revision: https://phabricator.freedesktop.org/D1754
+---
+ stun/stunmessage.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/stun/stunmessage.c b/stun/stunmessage.c
+index e8184c4..4cc3392 100644
+--- a/stun/stunmessage.c
++++ b/stun/stunmessage.c
+@@ -120,6 +120,7 @@ stun_message_find (const StunMessage *msg, StunAttribute type,
+ /* Only fingerprint may come after M-I */
+ if (type == STUN_ATTRIBUTE_FINGERPRINT)
+ break;
++ return NULL;
+
+ case STUN_ATTRIBUTE_FINGERPRINT:
+ /* Nothing may come after FPR */
+--
+2.13.6
+
+
+From c7a5a92b66f9b83baf2aa446966bdfb2cf39ecd1 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Sun, 18 Jun 2017 10:12:58 +0200
+Subject: [PATCH 47/70] agent: remove spurious newlines
+
+Differential Revision: https://phabricator.freedesktop.org/D1756
+---
+ agent/agent.c | 2 +-
+ agent/component.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index e3705ed..27e6193 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -3905,7 +3905,7 @@ agent_recv_message_unlocked (
+
+ nice_address_to_string (message->from, str);
+ nice_debug_verbose ("Agent %p : %d:%d DROPPING packet from unknown source"
+- " %s:%d sock-type: %d\n", agent, stream->id, component->id, str,
++ " %s:%d sock-type: %d", agent, stream->id, component->id, str,
+ nice_address_get_port (message->from), nicesock->type);
+ }
+
+diff --git a/agent/component.c b/agent/component.c
+index ab665b6..6e207d3 100644
+--- a/agent/component.c
++++ b/agent/component.c
+@@ -1461,7 +1461,7 @@ nice_component_add_valid_candidate (NiceComponent *component,
+ char str[INET6_ADDRSTRLEN];
+ nice_address_to_string (&candidate->addr, str);
+ nice_debug ("Agent %p : %d:%d Adding valid source"
+- " candidate: %s:%d trans: %d\n", component->agent,
++ " candidate: %s:%d trans: %d", component->agent,
+ candidate->stream_id, candidate->component_id, str,
+ nice_address_get_port (&candidate->addr), candidate->transport);
+ }
+--
+2.13.6
+
+
+From e3ddaa285e389baf3f26cfb6964919718a8f6a00 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Wed, 21 Jun 2017 16:55:32 -0400
+Subject: [PATCH 48/70] agent: Adjust the nice_agent_new_full() to use flags
+
+This makes it easier to read and more extensible.
+---
+ agent/agent.c | 9 +++++----
+ agent/agent.h | 27 ++++++++++++++++++++++-----
+ tests/test-nomination.c | 8 ++++----
+ 3 files changed, 31 insertions(+), 13 deletions(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 27e6193..8fd8ead 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -1168,14 +1168,15 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat)
+ NICEAPI_EXPORT NiceAgent *
+ nice_agent_new_full (GMainContext *ctx,
+ NiceCompatibility compat,
+- gboolean reliable,
+- NiceNominationMode nomination)
++ NiceAgentOption flags)
+ {
+ NiceAgent *agent = g_object_new (NICE_TYPE_AGENT,
+ "compatibility", compat,
+ "main-context", ctx,
+- "reliable", reliable,
+- "nomination-mode", nomination,
++ "reliable", (flags & NICE_AGENT_OPTION_RELIABLE) ? TRUE : FALSE,
++ "nomination-mode", (flags & NICE_AGENT_OPTION_REGULAR_NOMINATION) ?
++ NICE_NOMINATION_MODE_REGULAR : NICE_NOMINATION_MODE_AGGRESSIVE,
++ "full-mode", (flags & NICE_AGENT_OPTION_LITE_MODE) ? FALSE : TRUE,
+ NULL);
+
+ return agent;
+diff --git a/agent/agent.h b/agent/agent.h
+index 6e233c6..ed6f6e4 100644
+--- a/agent/agent.h
++++ b/agent/agent.h
+@@ -399,6 +399,25 @@ typedef enum
+ } NiceNominationMode;
+
+ /**
++ * NiceAgentOption:
++ * @NICE_AGENT_OPTION_REGULAR_NOMINATION: Enables regular nomination, default
++ * is aggrssive mode (see #NiceNominationMode).
++ * @NICE_AGENT_OPTION_RELIABLE: Enables reliable mode, possibly using PseudoTCP, * see nice_agent_new_reliable().
++ * @NICE_AGENT_OPTION_LITE_MODE: Enable lite mode
++ *
++ * These are options that can be passed to nice_agent_new_full(). They set
++ * various properties on the agent. Not including them sets the property to
++ * the other value.
++ *
++ * Since: UNRELEASED
++ */
++typedef enum {
++ NICE_AGENT_OPTION_REGULAR_NOMINATION = 1 << 0,
++ NICE_AGENT_OPTION_RELIABLE = 1 << 1,
++ NICE_AGENT_OPTION_LITE_MODE = 1 << 2,
++} NiceAgentOption;
++
++/**
+ * NiceAgentRecvFunc:
+ * @agent: The #NiceAgent Object
+ * @stream_id: The id of the stream
+@@ -452,13 +471,12 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+ * nice_agent_new_full:
+ * @ctx: The Glib Mainloop Context to use for timers
+ * @compat: The compatibility mode of the agent
+- * @reliable: The reliability mode of the agent
+- * @nomination: The nomination mode of the agent
++ * @flags: Flags to set the properties
+ *
+ * Create a new #NiceAgent with parameters that must be be defined at
+ * construction time.
+ * The returned object must be freed with g_object_unref()
+- * <para> See also: #NiceNominationMode </para>
++ * <para> See also: #NiceNominationMode and #NiceAgentOption</para>
+ *
+ * Since: UNRELEASED
+ *
+@@ -467,8 +485,7 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+ NiceAgent *
+ nice_agent_new_full (GMainContext *ctx,
+ NiceCompatibility compat,
+- gboolean reliable,
+- NiceNominationMode nomination);
++ NiceAgentOption flags);
+
+ /**
+ * nice_agent_add_local_address:
+diff --git a/tests/test-nomination.c b/tests/test-nomination.c
+index b5a5e5f..bf21557 100644
+--- a/tests/test-nomination.c
++++ b/tests/test-nomination.c
+@@ -140,13 +140,13 @@ run_test(NiceNominationMode l_nomination_mode,
+
+ lagent = nice_agent_new_full (NULL,
+ NICE_COMPATIBILITY_RFC5245,
+- FALSE, /* reliable */
+- l_nomination_mode);
++ l_nomination_mode == NICE_NOMINATION_MODE_REGULAR ?
++ NICE_AGENT_OPTION_REGULAR_NOMINATION : 0);
+
+ ragent = nice_agent_new_full (NULL,
+ NICE_COMPATIBILITY_RFC5245,
+- FALSE, /* reliable */
+- r_nomination_mode);
++ r_nomination_mode == NICE_NOMINATION_MODE_REGULAR ?
++ NICE_AGENT_OPTION_REGULAR_NOMINATION : 0);
+
+ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
+ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
+--
+2.13.6
+
+
+From dcb0d647174416a292492f8deca86f83a2ef124c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Wed, 21 Jun 2017 17:07:17 -0400
+Subject: [PATCH 49/70] Repleace UNRELEASED with 0.1.15
+
+---
+ agent/agent.c | 8 ++++----
+ agent/agent.h | 6 +++---
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 8fd8ead..15af9ed 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -448,7 +448,7 @@ nice_agent_class_init (NiceAgentClass *klass)
+ * the selection of valid pairs to be used upstream.
+ * <para> See also: #NiceNominationMode </para>
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ */
+ g_object_class_install_property (gobject_class, PROP_NOMINATION_MODE,
+ g_param_spec_enum (
+@@ -744,7 +744,7 @@ nice_agent_class_init (NiceAgentClass *klass)
+ * to the READY state, and on the time needed to complete the GATHERING
+ * state.
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ */
+
+ g_object_class_install_property (gobject_class, PROP_STUN_MAX_RETRANSMISSIONS,
+@@ -769,7 +769,7 @@ nice_agent_class_init (NiceAgentClass *klass)
+ * divided by two instead (RFC 5389 indicates that a customisable
+ * multiplier 'Rm' to 'RTO' should be used).
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ */
+
+ g_object_class_install_property (gobject_class, PROP_STUN_INITIAL_TIMEOUT,
+@@ -788,7 +788,7 @@ nice_agent_class_init (NiceAgentClass *klass)
+ * The initial timeout of the STUN binding requests used
+ * for a reliable timer.
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ */
+
+ g_object_class_install_property (gobject_class, PROP_STUN_RELIABLE_TIMEOUT,
+diff --git a/agent/agent.h b/agent/agent.h
+index ed6f6e4..520c4c5 100644
+--- a/agent/agent.h
++++ b/agent/agent.h
+@@ -390,7 +390,7 @@ typedef enum
+ * faster, than the regular mode, potentially causing the nominated
+ * pair to change until the connection check completes.
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ */
+ typedef enum
+ {
+@@ -409,7 +409,7 @@ typedef enum
+ * various properties on the agent. Not including them sets the property to
+ * the other value.
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ */
+ typedef enum {
+ NICE_AGENT_OPTION_REGULAR_NOMINATION = 1 << 0,
+@@ -478,7 +478,7 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+ * The returned object must be freed with g_object_unref()
+ * <para> See also: #NiceNominationMode and #NiceAgentOption</para>
+ *
+- * Since: UNRELEASED
++ * Since: 0.1.15
+ *
+ * Returns: The new agent GObject
+ */
+--
+2.13.6
+
+
+From 2c50d73b82f2ec2422a8e0ea393194486c193c64 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Wed, 10 Feb 2016 23:20:39 -0500
+Subject: [PATCH 50/70] agent: Don't crash if recv cancelled without a GError
+
+---
+ agent/agent.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 15af9ed..e48d7f3 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -4279,7 +4279,10 @@ static gboolean
+ nice_agent_recv_cancelled_cb (GCancellable *cancellable, gpointer user_data)
+ {
+ GError **error = user_data;
+- return !g_cancellable_set_error_if_cancelled (cancellable, error);
++
++ if (error && *error)
++ g_cancellable_set_error_if_cancelled (cancellable, error);
++ return G_SOURCE_REMOVE;
+ }
+
+ static gint
+--
+2.13.6
+
+
+From 63d273cea42def3567701ad9feab91f63cf9345f Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Thu, 11 Feb 2016 22:16:48 -0500
+Subject: [PATCH 51/70] component: Use non-GClosure dummy callbacks
+
+GClosures are not that cheap to setup
+---
+ agent/component.c | 18 +++++++++++++++---
+ 1 file changed, 15 insertions(+), 3 deletions(-)
+
+diff --git a/agent/component.c b/agent/component.c
+index 6e207d3..6eee90e 100644
+--- a/agent/component.c
++++ b/agent/component.c
+@@ -1005,6 +1005,18 @@ nice_component_class_init (NiceComponentClass *klass)
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ }
+
++static gboolean
++dummy_callback (gpointer data)
++{
++ return G_SOURCE_CONTINUE;
++}
++
++static void
++source_set_dummy_callback (GSource *source)
++{
++ g_source_set_callback (source, dummy_callback, NULL, NULL);
++}
++
+ static void
+ nice_component_init (NiceComponent *component)
+ {
+@@ -1027,7 +1039,7 @@ nice_component_init (NiceComponent *component)
+ component->stop_cancellable = g_cancellable_new ();
+ component->stop_cancellable_source =
+ g_cancellable_source_new (component->stop_cancellable);
+- g_source_set_dummy_callback (component->stop_cancellable_source);
++ source_set_dummy_callback (component->stop_cancellable_source);
+ g_source_attach (component->stop_cancellable_source, component->own_ctx);
+ component->ctx = g_main_context_ref (component->own_ctx);
+
+@@ -1242,7 +1254,7 @@ component_source_prepare (GSource *source, gint *timeout_)
+ child_socket_source->source =
+ g_socket_create_source (child_socket_source->socket->fileno, G_IO_IN,
+ NULL);
+- g_source_set_dummy_callback (child_socket_source->source);
++ source_set_dummy_callback (child_socket_source->source);
+ g_source_add_child_source (source, child_socket_source->source);
+ g_source_unref (child_socket_source->source);
+ component_source->socket_sources =
+@@ -1387,7 +1399,7 @@ nice_component_input_source_new (NiceAgent *agent, guint stream_id,
+ GSource *cancellable_source;
+
+ cancellable_source = g_cancellable_source_new (cancellable);
+- g_source_set_dummy_callback (cancellable_source);
++ source_set_dummy_callback (cancellable_source);
+ g_source_add_child_source ((GSource *) component_source,
+ cancellable_source);
+ g_source_unref (cancellable_source);
+--
+2.13.6
+
+
+From 9f800d3597767855accccc592c34bc4e945f5bd5 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Wed, 21 Jun 2017 20:42:57 -0400
+Subject: [PATCH 52/70] configure: Remove -Wswitch-enum
+
+Creates useless warnings when other libraries change.
+
+https://phabricator.freedesktop.org/T7770
+---
+ configure.ac | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/configure.ac b/configure.ac
+index 6c106ff..16988ad 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -154,7 +154,6 @@ AS_IF([test "$enable_compile_warnings" = "yes" -o \
+ ])
+ AS_IF([test "$enable_compile_warnings" = "maximum" -o \
+ "$enable_compile_warnings" = "error"],[
+- NICE_ADD_FLAG([-Wswitch-enum])
+ NICE_ADD_FLAG([-Wswitch-default])
+ NICE_ADD_FLAG([-Waggregate-return])
+ ])
+--
+2.13.6
+
+
+From dbaf8f5ccd76089e340883887c7e08e6c04de80a Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 12 Apr 2016 13:22:21 +0200
+Subject: [PATCH 53/70] conncheck: improve role conflict debug
+
+This patch displays explicitely the controlling or controlled
+role of the agent.
+
+Differential Revision: https://phabricator.freedesktop.org/D874
+---
+ agent/conncheck.c | 24 +++++++++++++++++++-----
+ 1 file changed, 19 insertions(+), 5 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 63db471..8945e0f 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -3134,14 +3134,16 @@ static void priv_check_for_role_conflict (NiceAgent *agent, gboolean control)
+ {
+ /* role conflict, change mode; wait for a new conn. check */
+ if (control != agent->controlling_mode) {
+- nice_debug ("Agent %p : Role conflict, changing agent role to %d.", agent, control);
++ nice_debug ("Agent %p : Role conflict, changing agent role to \"%s\".",
++ agent, control ? "controlling" : "controlled");
+ agent->controlling_mode = control;
+ /* the pair priorities depend on the roles, so recalculation
+ * is needed */
+ priv_recalculate_pair_priorities (agent);
+ }
+ else
+- nice_debug ("Agent %p : Role conflict, agent role already changed to %d.", agent, control);
++ nice_debug ("Agent %p : Role conflict, staying with role \"%s\".",
++ agent, control ? "controlling" : "controlled");
+ }
+
+ /*
+@@ -3429,13 +3431,25 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ /* case: role conflict error, need to restart with new role */
+ nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
+
++ /* note: this res value indicates that the role of the peer
++ * agent has not changed after the tie-breaker comparison, so
++ * this is our role that must change. see ICE sect. 7.1.3.1
++ * "Failure Cases". Our role might already have changed due to
++ * an earlier incoming request, but if not, change role now.
++ *
++ * Sect. 7.1.3.1 is not clear on this point, but we choose to
++ * put the candidate pair in the triggered check list even
++ * when the agent did not switch its role. The reason for this
++ * interpretation is that the reception of the stun reply, even
++ * an error reply, is a good sign that this pair will be
++ * valid, if we retry the check after the role of both peers
++ * has been fixed.
++ */
++
+ if (p->stun_message.buffer != NULL) {
+ guint64 tie;
+ gboolean controlled_mode;
+
+- /* note: our role might already have changed due to an
+- * incoming request, but if not, change role now;
+- * follows ICE 7.1.2.1 "Failure Cases" (ID-19) */
+ controlled_mode = (stun_message_find64 (&p->stun_message,
+ STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
+ STUN_MESSAGE_RETURN_SUCCESS);
+--
+2.13.6
+
+
+From 5a42089aeb2dbbb52d820cd1b6efdfcfbe9b055e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Olivier=20Cr=C3=AAte?= <olivier.crete(a)collabora.com>
+Date: Tue, 5 Sep 2017 14:50:29 -0400
+Subject: [PATCH 54/70] agent: Set error if it isn't set
+
+---
+ agent/agent.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agent/agent.c b/agent/agent.c
+index e48d7f3..a4dcc0c 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -4280,7 +4280,7 @@ nice_agent_recv_cancelled_cb (GCancellable *cancellable, gpointer user_data)
+ {
+ GError **error = user_data;
+
+- if (error && *error)
++ if (error && !*error)
+ g_cancellable_set_error_if_cancelled (cancellable, error);
+ return G_SOURCE_REMOVE;
+ }
+--
+2.13.6
+
+
+From 25be00271a4c8c684a2d435d29ae0811dbf5e21c Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 26 Jun 2017 20:36:35 +0200
+Subject: [PATCH 55/70] conncheck: reorder some chunks of code
+
+With this patch we simplify the levels of code indentation.
+
+Differential Revision: https://phabricator.freedesktop.org/D1758
+---
+ agent/conncheck.c | 858 +++++++++++++++++++++++++++---------------------------
+ 1 file changed, 422 insertions(+), 436 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 8945e0f..874f7b1 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -608,106 +608,106 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ gboolean keep_timer_going = FALSE;
+ GSList *i;
+ CandidateCheckPair *pair;
++ unsigned int timeout;
+
+ /* step: process ongoing STUN transactions */
+ for (i = stream->conncheck_list; i ; i = i->next) {
+ CandidateCheckPair *p = i->data;
++ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
++ NiceComponent *component;
++
++ if (!agent_find_component (agent, p->stream_id, p->component_id,
++ NULL, &component))
++ continue;
++
++ if (p->state != NICE_CHECK_IN_PROGRESS)
++ continue;
+
+- if (p->state == NICE_CHECK_IN_PROGRESS) {
+- if (p->stun_message.buffer == NULL) {
+- nice_debug ("Agent %p : STUN connectivity check was cancelled, marking as done.", agent);
+- p->state = NICE_CHECK_FAILED;
+- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
+- } else if (priv_timer_expired (&p->next_tick, now)) {
+- switch (stun_timer_refresh (&p->timer)) {
+- case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+- {
+- gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
+- NiceComponent *component;
++ if (p->stun_message.buffer == NULL) {
++ nice_debug ("Agent %p : STUN connectivity check was cancelled, marking as done.", agent);
++ p->state = NICE_CHECK_FAILED;
++ nice_debug ("Agent %p : pair %p state FAILED", agent, p);
++ continue;
++ }
+
++ if (!priv_timer_expired (&p->next_tick, now))
++ continue;
++
++ switch (stun_timer_refresh (&p->timer)) {
++ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+ timer_timeout:
+- /* case: conncheck cancelled due to in-progress incoming
+- * check, requeing the pair, ICE spec, sect 7.2.1.4
+- * "Triggered Checks", "If the state of that pair is
+- * In-Progress..."
+- */
+- if (priv_conn_recheck_on_timeout (agent, p))
+- break;
++ /* case: conncheck cancelled due to in-progress incoming
++ * check, requeing the pair, ICE spec, sect 7.2.1.4
++ * "Triggered Checks", "If the state of that pair is
++ * In-Progress..."
++ */
++ if (priv_conn_recheck_on_timeout (agent, p))
++ break;
+
+- /* case: error, abort processing */
+- nice_address_to_string (&p->local->addr, tmpbuf1);
+- nice_address_to_string (&p->remote->addr, tmpbuf2);
+- nice_debug ("Agent %p : Retransmissions failed, giving up on connectivity check %p", agent, p);
+- nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
+- tmpbuf1, nice_address_get_port (&p->local->addr),
+- tmpbuf2, nice_address_get_port (&p->remote->addr));
+- candidate_check_pair_fail (stream, agent, p);
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", retransmission failed");
+-
+- /* perform a check if a transition state from connected to
+- * ready can be performed. This may happen here, when the last
+- * in-progress pair has expired its retransmission count
+- * in priv_conn_check_tick_stream(), which is a condition to
+- * make the transition connected to ready.
+- */
+- if (agent_find_component (agent, p->stream_id, p->component_id,
+- NULL, &component))
+- priv_update_check_list_state_for_ready (agent, stream,
+- component);
+- break;
+- }
+- case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+- {
+- unsigned int timeout = stun_timer_remainder (&p->timer);
++ /* case: error, abort processing */
++ nice_address_to_string (&p->local->addr, tmpbuf1);
++ nice_address_to_string (&p->remote->addr, tmpbuf2);
++ nice_debug ("Agent %p : Retransmissions failed, giving up on connectivity check %p", agent, p);
++ nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
++ tmpbuf1, nice_address_get_port (&p->local->addr),
++ tmpbuf2, nice_address_get_port (&p->remote->addr));
++ candidate_check_pair_fail (stream, agent, p);
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", retransmission failed");
++
++ /* perform a check if a transition state from connected to
++ * ready can be performed. This may happen here, when the last
++ * in-progress pair has expired its retransmission count
++ * in priv_conn_check_tick_stream(), which is a condition to
++ * make the transition connected to ready.
++ */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ break;
++ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
++ timeout = stun_timer_remainder (&p->timer);
+
+- /* case: retransmission stopped, due to the nomination of
+- * a pair with a higher priority than this in-progress pair,
+- * ICE spec, sect 8.1.2 "Updating States", item 2.2
+- */
+- if (!p->retransmit_on_timeout)
+- goto timer_timeout;
++ /* case: retransmission stopped, due to the nomination of
++ * a pair with a higher priority than this in-progress pair,
++ * ICE spec, sect 8.1.2 "Updating States", item 2.2
++ */
++ if (!p->retransmit_on_timeout)
++ goto timer_timeout;
+
+- /* case: conncheck cancelled due to in-progress incoming
+- * check, requeing the pair, ICE spec, sect 7.2.1.4
+- * "Triggered Checks", "If the state of that pair is
+- * In-Progress..."
+- */
+- if (priv_conn_recheck_on_timeout (agent, p))
+- break;
++ /* case: conncheck cancelled due to in-progress incoming
++ * check, requeing the pair, ICE spec, sect 7.2.1.4
++ * "Triggered Checks", "If the state of that pair is
++ * In-Progress..."
++ */
++ if (priv_conn_recheck_on_timeout (agent, p))
++ break;
+
+- /* case: not ready, so schedule a new timeout */
+- nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
+- "(timeout %dms, delay=%dms, retrans=%d).",
+- agent, p, timeout, p->timer.delay, p->timer.retransmissions);
++ /* case: not ready, so schedule a new timeout */
++ nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
++ "(timeout %dms, delay=%dms, retrans=%d).",
++ agent, p, timeout, p->timer.delay, p->timer.retransmissions);
+
+- agent_socket_send (p->sockptr, &p->remote->addr,
+- stun_message_length (&p->stun_message),
+- (gchar *)p->stun_buffer);
++ agent_socket_send (p->sockptr, &p->remote->addr,
++ stun_message_length (&p->stun_message),
++ (gchar *)p->stun_buffer);
+
+
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = *now;
+- g_time_val_add (&p->next_tick, timeout * 1000);
++ /* note: convert from milli to microseconds for g_time_val_add() */
++ p->next_tick = *now;
++ g_time_val_add (&p->next_tick, timeout * 1000);
+
+- return TRUE;
+- }
+- case STUN_USAGE_TIMER_RETURN_SUCCESS:
+- {
+- unsigned int timeout = stun_timer_remainder (&p->timer);
++ return TRUE;
++ case STUN_USAGE_TIMER_RETURN_SUCCESS:
++ timeout = stun_timer_remainder (&p->timer);
+
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = *now;
+- g_time_val_add (&p->next_tick, timeout * 1000);
++ /* note: convert from milli to microseconds for g_time_val_add() */
++ p->next_tick = *now;
++ g_time_val_add (&p->next_tick, timeout * 1000);
+
+- keep_timer_going = TRUE;
+- break;
+- }
+- default:
+- /* Nothing to do. */
+- break;
+- }
+- }
++ keep_timer_going = TRUE;
++ break;
++ default:
++ /* Nothing to do. */
++ break;
+ }
+ }
+
+@@ -2628,27 +2628,23 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
+ switch (agent->nomination_mode) {
+ case NICE_NOMINATION_MODE_REGULAR:
+- {
+- /* We are doing regular nomination, so we set the use-candidate
+- * attrib, when the controlling agent decided which valid pair to
+- * resend with this flag in priv_conn_check_tick_stream()
+- */
+- cand_use = pair->use_candidate_on_next_check;
+- nice_debug ("Agent %p : %s: set cand_use=%d "
+- "(regular nomination).", agent, G_STRFUNC, cand_use);
+- break;
+- }
++ /* We are doing regular nomination, so we set the use-candidate
++ * attrib, when the controlling agent decided which valid pair to
++ * resend with this flag in priv_conn_check_tick_stream()
++ */
++ cand_use = pair->use_candidate_on_next_check;
++ nice_debug ("Agent %p : %s: set cand_use=%d "
++ "(regular nomination).", agent, G_STRFUNC, cand_use);
++ break;
+ case NICE_NOMINATION_MODE_AGGRESSIVE:
+- {
+- /* We are doing aggressive nomination, we set the use-candidate
+- * attrib in every check we send, when we are the controlling
+- * agent, RFC 5245, 8.1.1.2
+- */
+- cand_use = controlling;
+- nice_debug ("Agent %p : %s: set cand_use=%d "
+- "(aggressive nomination).", agent, G_STRFUNC, cand_use);
+- break;
+- }
++ /* We are doing aggressive nomination, we set the use-candidate
++ * attrib in every check we send, when we are the controlling
++ * agent, RFC 5245, 8.1.1.2
++ */
++ cand_use = controlling;
++ nice_debug ("Agent %p : %s: set cand_use=%d "
++ "(aggressive nomination).", agent, G_STRFUNC, cand_use);
++ break;
+ default:
+ /* Nothing to do. */
+ break;
+@@ -2656,107 +2652,105 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ } else if (cand_use)
+ pair->nominated = controlling;
+
+- if (uname_len > 0) {
+- buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
+- &pair->stun_message, pair->stun_buffer, sizeof(pair->stun_buffer),
+- uname, uname_len, password, password_len,
+- cand_use, controlling, pair->prflx_priority,
+- agent->tie_breaker,
+- pair->local->foundation,
+- agent_to_ice_compatibility (agent));
++ if (uname_len == 0) {
++ nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
++ pair->stun_message.buffer = NULL;
++ pair->stun_message.buffer_len = 0;
++ return -1;
++ }
+
+- nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
+- pair->stun_message.buffer);
++ buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
++ &pair->stun_message, pair->stun_buffer, sizeof(pair->stun_buffer),
++ uname, uname_len, password, password_len,
++ cand_use, controlling, pair->prflx_priority,
++ agent->tie_breaker,
++ pair->local->foundation,
++ agent_to_ice_compatibility (agent));
+
+- if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
+- agent->compatibility == NICE_COMPATIBILITY_OC2007) {
+- g_free (password);
+- }
++ nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
++ pair->stun_message.buffer);
+
+- if (buffer_len > 0) {
+- if (nice_socket_is_reliable(pair->sockptr)) {
+- stun_timer_start_reliable(&pair->timer, agent->stun_reliable_timeout);
+- } else {
+- StunTimer *timer = &pair->timer;
+-
+- if (pair->recheck_on_timeout)
+- /* The pair recheck on timeout can easily cause repetitive rechecks in
+- * a ping-pong effect, if both peers with the same behaviour try to
+- * check the same pair almost simultaneously, and if the network rtt
+- * is greater than the initial timer rto. The reply to the initial
+- * stun request may arrive after the in-progress conncheck
+- * cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
+- * creates a new stun request, and forgets the initial one.
+- * The conncheck timer is restarted with the same initial value,
+- * so the same situation happens again later.
+- *
+- * We choose to avoid resetting the timer in such situation.
+- * After enough retransmissions, the timeout delay becomes
+- * longer than the rtt, and the stun reply can be handled.
+- */
+- nice_debug("Agent %p : reusing timer of pair %p: %d/%d %d/%dms",
+- agent, pair,
+- timer->retransmissions, timer->max_retransmissions,
+- timer->delay - stun_timer_remainder (timer), timer->delay);
+- else
+- stun_timer_start (timer,
+- priv_compute_conncheck_timer (agent, stream),
+- agent->stun_max_retransmissions);
+- pair->recheck_on_timeout = FALSE;
+- }
++ if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
++ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
++ g_free (password);
++ }
+
+- /* TCP-ACTIVE candidate must create a new socket before sending
+- * by connecting to the peer. The new socket is stored in the candidate
+- * check pair, until we discover a new local peer reflexive */
+- if (pair->sockptr->fileno == NULL &&
+- pair->sockptr->type != NICE_SOCKET_TYPE_UDP_TURN &&
+- pair->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
+- NiceStream *stream2 = NULL;
+- NiceComponent *component2 = NULL;
+- NiceSocket *new_socket;
+-
+- if (agent_find_component (agent, pair->stream_id, pair->component_id,
+- &stream2, &component2)) {
+- new_socket = nice_tcp_active_socket_connect (pair->sockptr,
+- &pair->remote->addr);
+- if (new_socket) {
+- pair->sockptr = new_socket;
+- _priv_set_socket_tos (agent, pair->sockptr, stream2->tos);
+-
+- if (agent->reliable) {
+- nice_socket_set_writable_callback (pair->sockptr,
+- _tcp_sock_is_writable, component2);
+- }
++ if (buffer_len == 0) {
++ nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
++ pair->stun_message.buffer = NULL;
++ pair->stun_message.buffer_len = 0;
++ return -1;
++ }
+
+- nice_component_attach_socket (component2, new_socket);
+- }
+- }
+- }
+- /* send the conncheck */
+- agent_socket_send (pair->sockptr, &pair->remote->addr,
+- buffer_len, (gchar *)pair->stun_buffer);
++ if (nice_socket_is_reliable(pair->sockptr))
++ stun_timer_start_reliable(&pair->timer, agent->stun_reliable_timeout);
++ else {
++ StunTimer *timer = &pair->timer;
++
++ if (pair->recheck_on_timeout)
++ /* The pair recheck on timeout can easily cause repetitive rechecks in
++ * a ping-pong effect, if both peers with the same behaviour try to
++ * check the same pair almost simultaneously, and if the network rtt
++ * is greater than the initial timer rto. The reply to the initial
++ * stun request may arrive after the in-progress conncheck
++ * cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
++ * creates a new stun request, and forgets the initial one.
++ * The conncheck timer is restarted with the same initial value,
++ * so the same situation happens again later.
++ *
++ * We choose to avoid resetting the timer in such situation.
++ * After enough retransmissions, the timeout delay becomes
++ * longer than the rtt, and the stun reply can be handled.
++ */
++ nice_debug("Agent %p : reusing timer of pair %p: %d/%d %d/%dms",
++ agent, pair,
++ timer->retransmissions, timer->max_retransmissions,
++ timer->delay - stun_timer_remainder (timer), timer->delay);
++ else
++ stun_timer_start (timer,
++ priv_compute_conncheck_timer (agent, stream),
++ agent->stun_max_retransmissions);
++ pair->recheck_on_timeout = FALSE;
++ }
+
+- if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2) {
+- ms_ice2_legacy_conncheck_send (&pair->stun_message, pair->sockptr,
+- &pair->remote->addr);
++ /* TCP-ACTIVE candidate must create a new socket before sending
++ * by connecting to the peer. The new socket is stored in the candidate
++ * check pair, until we discover a new local peer reflexive */
++ if (pair->sockptr->fileno == NULL &&
++ pair->sockptr->type != NICE_SOCKET_TYPE_UDP_TURN &&
++ pair->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
++ NiceStream *stream2 = NULL;
++ NiceComponent *component2 = NULL;
++ NiceSocket *new_socket;
++
++ if (agent_find_component (agent, pair->stream_id, pair->component_id,
++ &stream2, &component2)) {
++ new_socket = nice_tcp_active_socket_connect (pair->sockptr,
++ &pair->remote->addr);
++ if (new_socket) {
++ pair->sockptr = new_socket;
++ _priv_set_socket_tos (agent, pair->sockptr, stream2->tos);
++
++ if (agent->reliable)
++ nice_socket_set_writable_callback (pair->sockptr,
++ _tcp_sock_is_writable, component2);
++
++ nice_component_attach_socket (component2, new_socket);
+ }
+-
+- timeout = stun_timer_remainder (&pair->timer);
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- g_get_current_time (&pair->next_tick);
+- g_time_val_add (&pair->next_tick, timeout * 1000);
+- } else {
+- nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
+- return -1;
+ }
+- } else {
+- nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
+- return -1;
+ }
++ /* send the conncheck */
++ agent_socket_send (pair->sockptr, &pair->remote->addr,
++ buffer_len, (gchar *)pair->stun_buffer);
++
++ if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2)
++ ms_ice2_legacy_conncheck_send (&pair->stun_message, pair->sockptr,
++ &pair->remote->addr);
++
++ timeout = stun_timer_remainder (&pair->timer);
++ /* note: convert from milli to microseconds for g_time_val_add() */
++ g_get_current_time (&pair->next_tick);
++ g_time_val_add (&pair->next_tick, timeout * 1000);
+
+ return 0;
+ }
+@@ -2876,74 +2870,74 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ nice_debug ("Agent %p : Found a matching pair %p (%s) (state=%c) ...",
+ agent, p, p->foundation, priv_state_to_gchar (p->state));
+
+- if (p->state == NICE_CHECK_WAITING ||
+- p->state == NICE_CHECK_FROZEN) {
+- nice_debug ("Agent %p : pair %p added for a triggered check.",
+- agent, p);
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- }
+- else if (p->state == NICE_CHECK_IN_PROGRESS) {
+- /* note: according to ICE SPEC sect 7.2.1.4 "Triggered Checks"
+- * we cancel the in-progress transaction, and after the
+- * retransmission timeout, we create a new connectivity check
+- * for that pair. The controlling role of this new check may
+- * be different from the role of this cancelled check.
+- *
+- * note: the flag retransmit_on_timeout unset means that
+- * another pair, with a higher priority is already nominated,
+- * so there's no reason to recheck this pair, since it can in
+- * no way replace the nominated one.
+- */
+- if (!nice_socket_is_reliable (p->sockptr)) {
+- if (p->retransmit_on_timeout) {
+- nice_debug ("Agent %p : pair %p will be rechecked "
+- "on stun timer timeout.", agent, p);
+- /* this flag will determine the action at the retransmission
+- * timeout of the stun timer
+- */
+- p->recheck_on_timeout = TRUE;
+- } else
+- nice_debug ("Agent %p : pair %p won't be retransmitted.",
+- agent, p);
+- }
+- }
+- else if (p->state == NICE_CHECK_SUCCEEDED) {
+- nice_debug ("Agent %p : nothing to do for pair %p.", agent, p);
+- /* note: this is a bit unsure corner-case -- let's do the
+- same state update as for processing responses to our own checks */
+- /* note: this update is required by the dribble test, to
+- * ensure the transition ready -> connected -> ready, because
+- * an incoming stun request generates a discovered peer reflexive,
+- * that causes the ready -> connected transition.
+- */
+- priv_update_check_list_state_for_ready (agent, stream, component);
+- } else if (p->state == NICE_CHECK_FAILED) {
+- /* 7.2.1.4 Triggered Checks
+- * If the state of the pair is Failed, it is changed to Waiting
+- * and the agent MUST create a new connectivity check for that
+- * pair (representing a new STUN Binding request transaction), by
+- * enqueueing the pair in the triggered check queue.
+- *
+- * note: the flag retransmit_on_timeout unset means that
+- * another pair, with a higher priority is already nominated,
+- * we apply the same strategy than with an in-progress pair
+- * above.
+- */
+- if (p->retransmit_on_timeout) {
+- nice_debug ("Agent %p : pair %p added for a triggered check.",
++ switch (p->state) {
++ case NICE_CHECK_WAITING:
++ case NICE_CHECK_FROZEN:
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
+ agent, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+- /* If the component for this pair is in failed state, move it
+- * back to connecting, and reinitiate the timers
++ break;
++ case NICE_CHECK_IN_PROGRESS:
++ /* note: according to ICE SPEC sect 7.2.1.4 "Triggered Checks"
++ * we cancel the in-progress transaction, and after the
++ * retransmission timeout, we create a new connectivity check
++ * for that pair. The controlling role of this new check may
++ * be different from the role of this cancelled check.
++ *
++ * note: the flag retransmit_on_timeout unset means that
++ * another pair, with a higher priority is already nominated,
++ * so there's no reason to recheck this pair, since it can in
++ * no way replace the nominated one.
+ */
+- if (component->state == NICE_COMPONENT_STATE_FAILED) {
+- agent_signal_component_state_change (agent, stream->id,
+- component->id, NICE_COMPONENT_STATE_CONNECTING);
+- conn_check_schedule_next (agent);
++ if (!nice_socket_is_reliable (p->sockptr) &&
++ p->retransmit_on_timeout) {
++ nice_debug ("Agent %p : pair %p will be rechecked "
++ "on stun timer timeout.", agent, p);
++ /* this flag will determine the action at the retransmission
++ * timeout of the stun timer
++ */
++ p->recheck_on_timeout = TRUE;
+ }
+- } else
+- nice_debug ("Agent %p : pair %p won't be retransmitted.",
+- agent, p);
++ break;
++ case NICE_CHECK_SUCCEEDED:
++ nice_debug ("Agent %p : nothing to do for pair %p.", agent, p);
++ /* note: this is a bit unsure corner-case -- let's do the
++ same state update as for processing responses to our own checks */
++ /* note: this update is required by the dribble test, to
++ * ensure the transition ready -> connected -> ready, because
++ * an incoming stun request generates a discovered peer reflexive,
++ * that causes the ready -> connected transition.
++ */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ break;
++ case NICE_CHECK_FAILED:
++ /* 7.2.1.4 Triggered Checks
++ * If the state of the pair is Failed, it is changed to Waiting
++ * and the agent MUST create a new connectivity check for that
++ * pair (representing a new STUN Binding request transaction), by
++ * enqueueing the pair in the triggered check queue.
++ *
++ * note: the flag retransmit_on_timeout unset means that
++ * another pair, with a higher priority is already nominated,
++ * we apply the same strategy than with an in-progress pair
++ * above.
++ */
++ if (p->retransmit_on_timeout) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ /* If the component for this pair is in failed state, move it
++ * back to connecting, and reinitiate the timers
++ */
++ if (component->state == NICE_COMPONENT_STATE_FAILED) {
++ agent_signal_component_state_change (agent, stream->id,
++ component->id, NICE_COMPONENT_STATE_CONNECTING);
++ conn_check_schedule_next (agent);
++ }
++ }
++ break;
++ default:
++ break;
+ }
+
+ /* note: the spec says the we SHOULD retransmit in-progress
+@@ -3271,208 +3265,200 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ socklen_t socklen = sizeof (sockaddr);
+ GSList *i;
+ StunUsageIceReturn res;
+- gboolean trans_found = FALSE;
+ StunTransactionId discovery_id;
+ StunTransactionId response_id;
+ stun_message_id (resp, response_id);
+
+- for (i = stream->conncheck_list; i && trans_found != TRUE; i = i->next) {
++ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+
+- if (p->stun_message.buffer) {
+- stun_message_id (&p->stun_message, discovery_id);
++ if (p->stun_message.buffer == NULL)
++ continue;
+
+- if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)) == 0) {
+- res = stun_usage_ice_conncheck_process (resp,
+- &sockaddr.storage, &socklen,
+- agent_to_ice_compatibility (agent));
+- nice_debug ("Agent %p : stun_bind_process/conncheck for %p res %d "
+- "(controlling=%d).", agent, p, (int)res, agent->controlling_mode);
+-
+- if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
+- res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+- /* case: found a matching connectivity check request */
+-
+- CandidateCheckPair *ok_pair = NULL;
+-
+- nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+-
+- /* step: verify that response came from the same IP address we
+- * sent the original request to (see 7.1.2.1. "Failure
+- * Cases") */
+- if (nice_address_equal (from, &p->remote->addr) != TRUE) {
+-
+- p->state = NICE_CHECK_FAILED;
+- if (nice_debug_is_enabled ()) {
+- gchar tmpbuf[INET6_ADDRSTRLEN];
+- gchar tmpbuf2[INET6_ADDRSTRLEN];
+- nice_debug ("Agent %p : conncheck %p FAILED"
+- " (mismatch of source address).", agent, p);
+- nice_address_to_string (&p->remote->addr, tmpbuf);
+- nice_address_to_string (from, tmpbuf2);
+- nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
+- tmpbuf, nice_address_get_port (&p->remote->addr),
+- tmpbuf2, nice_address_get_port (from));
+- }
+- trans_found = TRUE;
+- break;
+- }
++ stun_message_id (&p->stun_message, discovery_id);
+
+- /* note: CONNECTED but not yet READY, see docs */
+-
+- /* step: handle the possible case of a peer-reflexive
+- * candidate where the mapped-address in response does
+- * not match any local candidate, see 7.1.2.2.1
+- * "Discovering Peer Reflexive Candidates" ICE ID-19) */
+-
+- if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+- /* note: this is same as "adding to VALID LIST" in the spec
+- text */
+- p->state = NICE_CHECK_SUCCEEDED;
+- p->valid = TRUE;
+- g_assert_not_reached ();
+- nice_debug ("Agent %p : Mapped address not found."
+- " conncheck %p SUCCEEDED.", agent, p);
+- nice_component_add_valid_candidate (component, p->remote);
+- } else {
+- ok_pair = priv_process_response_check_for_reflexive (agent,
+- stream, component, p, sockptr, &sockaddr.addr,
+- local_candidate, remote_candidate);
+- }
++ if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)))
++ continue;
+
+- /* note: The success of this check might also
+- * cause the state of other checks to change as well, ICE
+- * spec 7.1.3.2.3
+- */
+- priv_conn_check_unfreeze_related (agent, stream, p);
+-
+- /* Note: this assignment helps to reduce the numbers of cases
+- * to be tested. If ok_pair and p refer to distinct pairs, it
+- * means that ok_pair is a discovered peer reflexive one,
+- * caused by the check made on pair p. In that case, the
+- * flags to be tested are on p, but the nominated flag will be
+- * set on ok_pair. When there's no discovered pair, p and
+- * ok_pair refer to the same pair.
+- * To summarize : p is a SUCCEEDED pair, ok_pair is a
+- * DISCOVERED, VALID, and eventually NOMINATED pair.
+- */
+- if (!ok_pair)
+- ok_pair = p;
+-
+- /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
+- Nominated Flag" (ID-19) */
+- if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
+- nice_debug ("Agent %p : Updating nominated flag (%s): "
+- "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
+- agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
+- "UDP" : "TCP",
+- ok_pair, ok_pair->use_candidate_on_next_check,
+- ok_pair->mark_nominated_on_response_arrival,
+- p, p->use_candidate_on_next_check,
+- p->mark_nominated_on_response_arrival);
+-
+- if (agent->controlling_mode) {
+- switch (agent->nomination_mode) {
+- case NICE_NOMINATION_MODE_REGULAR:
+- if (p->use_candidate_on_next_check) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(regular nomination, control=1, "
+- "use_cand_on_next_check=1).",
+- agent, ok_pair, ok_pair->foundation);
+- ok_pair->nominated = TRUE;
+- }
+- break;
+- case NICE_NOMINATION_MODE_AGGRESSIVE:
+- if (!p->nominated) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(aggressive nomination, control=1).",
+- agent, ok_pair, ok_pair->foundation);
+- ok_pair->nominated = TRUE;
+- }
+- break;
+- default:
+- /* Nothing to do */
+- break;
++ res = stun_usage_ice_conncheck_process (resp,
++ &sockaddr.storage, &socklen,
++ agent_to_ice_compatibility (agent));
++ nice_debug ("Agent %p : stun_bind_process/conncheck for %p res %d "
++ "(controlling=%d).", agent, p, (int)res, agent->controlling_mode);
++
++ if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
++ res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
++ /* case: found a matching connectivity check request */
++
++ CandidateCheckPair *ok_pair = NULL;
++
++ nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
++ p->stun_message.buffer = NULL;
++ p->stun_message.buffer_len = 0;
++
++ /* step: verify that response came from the same IP address we
++ * sent the original request to (see 7.1.2.1. "Failure
++ * Cases") */
++ if (nice_address_equal (from, &p->remote->addr) == FALSE) {
++
++ p->state = NICE_CHECK_FAILED;
++ if (nice_debug_is_enabled ()) {
++ gchar tmpbuf[INET6_ADDRSTRLEN];
++ gchar tmpbuf2[INET6_ADDRSTRLEN];
++ nice_debug ("Agent %p : conncheck %p FAILED"
++ " (mismatch of source address).", agent, p);
++ nice_address_to_string (&p->remote->addr, tmpbuf);
++ nice_address_to_string (from, tmpbuf2);
++ nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
++ tmpbuf, nice_address_get_port (&p->remote->addr),
++ tmpbuf2, nice_address_get_port (from));
++ }
++ return TRUE;
++ }
++
++ /* note: CONNECTED but not yet READY, see docs */
++
++ /* step: handle the possible case of a peer-reflexive
++ * candidate where the mapped-address in response does
++ * not match any local candidate, see 7.1.2.2.1
++ * "Discovering Peer Reflexive Candidates" ICE ID-19) */
++
++ if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
++ p->state = NICE_CHECK_SUCCEEDED;
++ p->valid = TRUE;
++ nice_debug ("Agent %p : Mapped address not found."
++ " conncheck %p SUCCEEDED.", agent, p);
++ nice_component_add_valid_candidate (component, p->remote);
++ } else
++ ok_pair = priv_process_response_check_for_reflexive (agent,
++ stream, component, p, sockptr, &sockaddr.addr,
++ local_candidate, remote_candidate);
++
++ /* note: The success of this check might also
++ * cause the state of other checks to change as well, ICE
++ * spec 7.1.3.2.3
++ */
++ priv_conn_check_unfreeze_related (agent, stream, p);
++
++ /* Note: this assignment helps to reduce the numbers of cases
++ * to be tested. If ok_pair and p refer to distinct pairs, it
++ * means that ok_pair is a discovered peer reflexive one,
++ * caused by the check made on pair p. In that case, the
++ * flags to be tested are on p, but the nominated flag will be
++ * set on ok_pair. When there's no discovered pair, p and
++ * ok_pair refer to the same pair.
++ * To summarize : p is a SUCCEEDED pair, ok_pair is a
++ * DISCOVERED, VALID, and eventually NOMINATED pair.
++ */
++ if (!ok_pair)
++ ok_pair = p;
++
++ /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
++ Nominated Flag" (ID-19) */
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ nice_debug ("Agent %p : Updating nominated flag (%s): "
++ "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
++ agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
++ "UDP" : "TCP",
++ ok_pair, ok_pair->use_candidate_on_next_check,
++ ok_pair->mark_nominated_on_response_arrival,
++ p, p->use_candidate_on_next_check,
++ p->mark_nominated_on_response_arrival);
++
++ if (agent->controlling_mode) {
++ switch (agent->nomination_mode) {
++ case NICE_NOMINATION_MODE_REGULAR:
++ if (p->use_candidate_on_next_check) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(regular nomination, control=1, "
++ "use_cand_on_next_check=1).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
+ }
+- } else {
+- if (p->mark_nominated_on_response_arrival) {
++ break;
++ case NICE_NOMINATION_MODE_AGGRESSIVE:
++ if (!p->nominated) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(%s nomination, control=0, mark_on_response=1).",
+- agent, ok_pair, ok_pair->foundation,
+- agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
+- "aggressive" : "regular");
++ "(aggressive nomination, control=1).",
++ agent, ok_pair, ok_pair->foundation);
+ ok_pair->nominated = TRUE;
+ }
+- }
++ break;
++ default:
++ /* Nothing to do */
++ break;
+ }
+-
+- if (ok_pair->nominated == TRUE) {
+- priv_update_selected_pair (agent, component, ok_pair);
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", got a nominated pair");
+-
+- /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state != NICE_COMPONENT_STATE_READY) {
+- /* step: notify the client of a new component state (must be done
+- * before the possible check list state update step */
+- agent_signal_component_state_change (agent,
+- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- }
++ } else {
++ if (p->mark_nominated_on_response_arrival) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(%s nomination, control=0, mark_on_response=1).",
++ agent, ok_pair, ok_pair->foundation,
++ agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
++ "aggressive" : "regular");
++ ok_pair->nominated = TRUE;
+ }
++ }
++ }
+
+- /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
+- states" and 8.1.2 "Updating States", ID-19) */
+- priv_update_check_list_state_for_ready (agent, stream, component);
++ if (ok_pair->nominated == TRUE) {
++ priv_update_selected_pair (agent, component, ok_pair);
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a nominated pair");
+
+- trans_found = TRUE;
+- } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
+- /* case: role conflict error, need to restart with new role */
+- nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
+-
+- /* note: this res value indicates that the role of the peer
+- * agent has not changed after the tie-breaker comparison, so
+- * this is our role that must change. see ICE sect. 7.1.3.1
+- * "Failure Cases". Our role might already have changed due to
+- * an earlier incoming request, but if not, change role now.
+- *
+- * Sect. 7.1.3.1 is not clear on this point, but we choose to
+- * put the candidate pair in the triggered check list even
+- * when the agent did not switch its role. The reason for this
+- * interpretation is that the reception of the stun reply, even
+- * an error reply, is a good sign that this pair will be
+- * valid, if we retry the check after the role of both peers
+- * has been fixed.
+- */
++ /* Do not step down to CONNECTED if we're already at state READY*/
++ if (component->state != NICE_COMPONENT_STATE_READY)
++ /* step: notify the client of a new component state (must be done
++ * before the possible check list state update step */
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
++ }
+
+- if (p->stun_message.buffer != NULL) {
+- guint64 tie;
+- gboolean controlled_mode;
++ /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
++ states" and 8.1.2 "Updating States", ID-19) */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
++ /* case: role conflict error, need to restart with new role */
++ nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
++
++ /* note: this res value indicates that the role of the peer
++ * agent has not changed after the tie-breaker comparison, so
++ * this is our role that must change. see ICE sect. 7.1.3.1
++ * "Failure Cases". Our role might already have changed due to
++ * an earlier incoming request, but if not, change role now.
++ *
++ * Sect. 7.1.3.1 is not clear on this point, but we choose to
++ * put the candidate pair in the triggered check list even
++ * when the agent did not switch its role. The reason for this
++ * interpretation is that the reception of the stun reply, even
++ * an error reply, is a good sign that this pair will be
++ * valid, if we retry the check after the role of both peers
++ * has been fixed.
++ */
+
+- controlled_mode = (stun_message_find64 (&p->stun_message,
+- STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
+- STUN_MESSAGE_RETURN_SUCCESS);
++ if (p->stun_message.buffer != NULL) {
++ guint64 tie;
++ gboolean controlled_mode;
+
+- priv_check_for_role_conflict (agent, controlled_mode);
++ controlled_mode = (stun_message_find64 (&p->stun_message,
++ STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
++ STUN_MESSAGE_RETURN_SUCCESS);
+
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- }
+- trans_found = TRUE;
+- } else {
+- /* case: STUN error, the check STUN context was freed */
+- nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- trans_found = TRUE;
+- }
++ priv_check_for_role_conflict (agent, controlled_mode);
++
++ p->stun_message.buffer = NULL;
++ p->stun_message.buffer_len = 0;
++ priv_add_pair_to_triggered_check_queue (agent, p);
+ }
++ } else {
++ /* case: STUN error, the check STUN context was freed */
++ nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
++ p->stun_message.buffer = NULL;
++ p->stun_message.buffer_len = 0;
+ }
++ return TRUE;
+ }
+
+- return trans_found;
++ return FALSE;
+ }
+
+ /*
+--
+2.13.6
+
+
+From ce33747e6fc9ca59ea22d54e3b5a9a67b69d8141 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 26 Jun 2017 20:41:49 +0200
+Subject: [PATCH 56/70] conncheck: make debug sentences more accurate
+
+We add a helper function to print the pair state in-extenso.
+
+Differential Revision: https://phabricator.freedesktop.org/D1759
+---
+ agent/conncheck.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++-------
+ 1 file changed, 61 insertions(+), 9 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 874f7b1..9517ee1 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -108,6 +108,54 @@ priv_state_to_gchar (NiceCheckState state)
+ }
+
+ static const gchar *
++priv_state_to_string (NiceCheckState state)
++{
++ switch (state) {
++ case NICE_CHECK_WAITING:
++ return "waiting";
++ case NICE_CHECK_IN_PROGRESS:
++ return "in progress";
++ case NICE_CHECK_SUCCEEDED:
++ return "succeeded";
++ case NICE_CHECK_FAILED:
++ return "failed";
++ case NICE_CHECK_FROZEN:
++ return "frozen";
++ case NICE_CHECK_DISCOVERED:
++ return "discovered";
++ default:
++ g_assert_not_reached ();
++ }
++}
++
++static const gchar *
++priv_ice_return_to_string (StunUsageIceReturn ice_return)
++{
++ switch (ice_return) {
++ case STUN_USAGE_ICE_RETURN_SUCCESS:
++ return "success";
++ case STUN_USAGE_ICE_RETURN_ERROR:
++ return "error";
++ case STUN_USAGE_ICE_RETURN_INVALID:
++ return "invalid";
++ case STUN_USAGE_ICE_RETURN_ROLE_CONFLICT:
++ return "role conflict";
++ case STUN_USAGE_ICE_RETURN_INVALID_REQUEST:
++ return "invalid request";
++ case STUN_USAGE_ICE_RETURN_INVALID_METHOD:
++ return "invalid method";
++ case STUN_USAGE_ICE_RETURN_MEMORY_ERROR:
++ return "memory error";
++ case STUN_USAGE_ICE_RETURN_INVALID_ADDRESS:
++ return "invalid address";
++ case STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS:
++ return "no mapped address";
++ default:
++ g_assert_not_reached ();
++ }
++}
++
++static const gchar *
+ priv_candidate_type_to_string (NiceCandidateType type)
+ {
+ switch (type) {
+@@ -2614,7 +2662,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ nice_address_to_string (&pair->remote->addr, tmpbuf2);
+ nice_debug ("Agent %p : STUN-CC REQ [%s]:%u --> [%s]:%u, socket=%u, "
+ "pair=%s (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
+- "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, cont=%d.", agent,
++ "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, %s.", agent,
+ tmpbuf1, nice_address_get_port (&pair->local->addr),
+ tmpbuf2, nice_address_get_port (&pair->remote->addr),
+ pair->sockptr->fileno ? g_socket_get_fd(pair->sockptr->fileno) : -1,
+@@ -2622,7 +2670,8 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ (unsigned long long)agent->tie_breaker,
+ (int) uname_len, uname, uname_len,
+ (int) password_len, password, password_len,
+- pair->prflx_priority, controlling);
++ pair->prflx_priority,
++ controlling ? "controlling" : "controlled");
+ }
+
+ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
+@@ -2867,8 +2916,8 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ p = p->succeeded_pair;
+ }
+
+- nice_debug ("Agent %p : Found a matching pair %p (%s) (state=%c) ...",
+- agent, p, p->foundation, priv_state_to_gchar (p->state));
++ nice_debug ("Agent %p : Found a matching pair %p (%s) (%s) ...",
++ agent, p, p->foundation, priv_state_to_string (p->state));
+
+ switch (p->state) {
+ case NICE_CHECK_WAITING:
+@@ -3283,8 +3332,11 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ res = stun_usage_ice_conncheck_process (resp,
+ &sockaddr.storage, &socklen,
+ agent_to_ice_compatibility (agent));
+- nice_debug ("Agent %p : stun_bind_process/conncheck for %p res %d "
+- "(controlling=%d).", agent, p, (int)res, agent->controlling_mode);
++ nice_debug ("Agent %p : stun_bind_process/conncheck for %p: "
++ "%s,res=%s.",
++ agent, p,
++ agent->controlling_mode ? "controlling" : "controlled",
++ priv_ice_return_to_string (res));
+
+ if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
+ res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+@@ -3370,7 +3422,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ case NICE_NOMINATION_MODE_REGULAR:
+ if (p->use_candidate_on_next_check) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(regular nomination, control=1, "
++ "(regular nomination, controlling, "
+ "use_cand_on_next_check=1).",
+ agent, ok_pair, ok_pair->foundation);
+ ok_pair->nominated = TRUE;
+@@ -3379,7 +3431,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ case NICE_NOMINATION_MODE_AGGRESSIVE:
+ if (!p->nominated) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(aggressive nomination, control=1).",
++ "(aggressive nomination, controlling).",
+ agent, ok_pair, ok_pair->foundation);
+ ok_pair->nominated = TRUE;
+ }
+@@ -3391,7 +3443,7 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ } else {
+ if (p->mark_nominated_on_response_arrival) {
+ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(%s nomination, control=0, mark_on_response=1).",
++ "(%s nomination, controlled, mark_on_response=1).",
+ agent, ok_pair, ok_pair->foundation,
+ agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
+ "aggressive" : "regular");
+--
+2.13.6
+
+
+From e860948b5fe3a791119957f26045b8f5159baeff Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 26 Jun 2017 21:06:36 +0200
+Subject: [PATCH 57/70] conncheck: use stun_timer_remainder less frequently
+
+We try to use stun_timer_remainder() less frequently, particularily
+in the debug messages, and favour of the next_tick value associated
+to the pair.
+
+Differential Revision: https://phabricator.freedesktop.org/D1760
+---
+ agent/conncheck.c | 77 ++++++++++++++++++++++++++++++++++---------------------
+ 1 file changed, 48 insertions(+), 29 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 9517ee1..8075d4f 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -86,6 +86,17 @@ static int priv_timer_expired (GTimeVal *timer, GTimeVal *now)
+ now->tv_sec >= timer->tv_sec;
+ }
+
++static unsigned int priv_timer_remainder (GTimeVal *timer, GTimeVal *now)
++{
++ unsigned int delay;
++ if (now->tv_sec > timer->tv_sec ||
++ (now->tv_sec == timer->tv_sec && now->tv_usec > timer->tv_usec))
++ return 0;
++ delay = (timer->tv_sec - now->tv_sec) * 1000;
++ delay += ((signed long)(timer->tv_usec - now->tv_usec)) / 1000;
++ return delay;
++}
++
+ static gchar
+ priv_state_to_gchar (NiceCheckState state)
+ {
+@@ -180,10 +191,13 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
+ {
+ GSList *i, *k;
+ guint j;
++ GTimeVal now;
+
+ if (!nice_debug_is_verbose ())
+ return;
+
++ g_get_current_time (&now);
++
+ #define PRIORITY_LEN 32
+
+ nice_debug ("Agent %p : *** conncheck list DUMP (called from %s%s)",
+@@ -209,7 +223,8 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
+ priv_candidate_type_to_string (pair->local->type),
+ priv_candidate_type_to_string (pair->remote->type),
+ timer->retransmissions, timer->max_retransmissions,
+- timer->delay - stun_timer_remainder (timer), timer->delay,
++ timer->delay - priv_timer_remainder (&pair->next_tick, &now),
++ timer->delay,
+ local_addr, nice_address_get_port (&pair->local->addr),
+ remote_addr, nice_address_get_port (&pair->remote->addr),
+ priv_state_to_gchar (pair->state),
+@@ -445,8 +460,6 @@ priv_find_first_frozen_check_list (NiceAgent *agent)
+ */
+ static gboolean priv_conn_check_initiate (NiceAgent *agent, CandidateCheckPair *pair)
+ {
+- g_get_current_time (&pair->next_tick);
+- g_time_val_add (&pair->next_tick, agent->timer_ta * 1000);
+ pair->state = NICE_CHECK_IN_PROGRESS;
+ nice_debug ("Agent %p : pair %p state IN_PROGRESS", agent, pair);
+ conn_check_send (agent, pair);
+@@ -651,12 +664,15 @@ priv_conn_recheck_on_timeout (NiceAgent *agent, CandidateCheckPair *p)
+ *
+ * @return will return FALSE when no more pending timers.
+ */
+-static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent, GTimeVal *now)
++static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent)
+ {
+ gboolean keep_timer_going = FALSE;
+ GSList *i;
+ CandidateCheckPair *pair;
+ unsigned int timeout;
++ GTimeVal now;
++
++ g_get_current_time (&now);
+
+ /* step: process ongoing STUN transactions */
+ for (i = stream->conncheck_list; i ; i = i->next) {
+@@ -678,7 +694,7 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ continue;
+ }
+
+- if (!priv_timer_expired (&p->next_tick, now))
++ if (!priv_timer_expired (&p->next_tick, &now))
+ continue;
+
+ switch (stun_timer_refresh (&p->timer)) {
+@@ -712,8 +728,6 @@ timer_timeout:
+ priv_update_check_list_state_for_ready (agent, stream, component);
+ break;
+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+- timeout = stun_timer_remainder (&p->timer);
+-
+ /* case: retransmission stopped, due to the nomination of
+ * a pair with a higher priority than this in-progress pair,
+ * ICE spec, sect 8.1.2 "Updating States", item 2.2
+@@ -730,9 +744,13 @@ timer_timeout:
+ break;
+
+ /* case: not ready, so schedule a new timeout */
++ timeout = stun_timer_remainder (&p->timer);
++
+ nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
+- "(timeout %dms, delay=%dms, retrans=%d).",
+- agent, p, timeout, p->timer.delay, p->timer.retransmissions);
++ "(timer=%d/%d %d/%dms).",
++ agent, p,
++ p->timer.retransmissions, p->timer.max_retransmissions,
++ p->timer.delay - timeout, p->timer.delay);
+
+ agent_socket_send (p->sockptr, &p->remote->addr,
+ stun_message_length (&p->stun_message),
+@@ -740,7 +758,7 @@ timer_timeout:
+
+
+ /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = *now;
++ p->next_tick = now;
+ g_time_val_add (&p->next_tick, timeout * 1000);
+
+ return TRUE;
+@@ -748,7 +766,7 @@ timer_timeout:
+ timeout = stun_timer_remainder (&p->timer);
+
+ /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = *now;
++ p->next_tick = now;
+ g_time_val_add (&p->next_tick, timeout * 1000);
+
+ keep_timer_going = TRUE;
+@@ -1001,9 +1019,6 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ CandidateCheckPair *pair = NULL;
+ gboolean keep_timer_going = FALSE;
+ GSList *i, *j;
+- GTimeVal now;
+-
+- g_get_current_time (&now);
+
+ /* the conncheck really starts when we have built
+ * a connection check list for each stream
+@@ -1047,7 +1062,7 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ */
+ for (i = agent->streams; i ; i = i->next) {
+ NiceStream *stream = i->data;
+- if (priv_conn_check_tick_stream (stream, agent, &now))
++ if (priv_conn_check_tick_stream (stream, agent))
+ keep_timer_going = TRUE;
+ if (priv_conn_check_tick_stream_nominate (stream, agent))
+ keep_timer_going = TRUE;
+@@ -2731,12 +2746,14 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ return -1;
+ }
+
+- if (nice_socket_is_reliable(pair->sockptr))
+- stun_timer_start_reliable(&pair->timer, agent->stun_reliable_timeout);
+- else {
++ if (nice_socket_is_reliable(pair->sockptr)) {
++ timeout = agent->stun_reliable_timeout;
++ stun_timer_start_reliable(&pair->timer, timeout);
++ } else {
+ StunTimer *timer = &pair->timer;
+
+- if (pair->recheck_on_timeout)
++ if (pair->recheck_on_timeout) {
++ GTimeVal now;
+ /* The pair recheck on timeout can easily cause repetitive rechecks in
+ * a ping-pong effect, if both peers with the same behaviour try to
+ * check the same pair almost simultaneously, and if the network rtt
+@@ -2751,17 +2768,24 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ * After enough retransmissions, the timeout delay becomes
+ * longer than the rtt, and the stun reply can be handled.
+ */
++
++ g_get_current_time (&now);
++ timeout = priv_timer_remainder (&pair->next_tick, &now);
+ nice_debug("Agent %p : reusing timer of pair %p: %d/%d %d/%dms",
+ agent, pair,
+ timer->retransmissions, timer->max_retransmissions,
+- timer->delay - stun_timer_remainder (timer), timer->delay);
+- else
+- stun_timer_start (timer,
+- priv_compute_conncheck_timer (agent, stream),
+- agent->stun_max_retransmissions);
++ timer->delay - timeout,
++ timer->delay);
++ } else {
++ timeout = priv_compute_conncheck_timer (agent, stream);
++ stun_timer_start (timer, timeout, agent->stun_max_retransmissions);
++ }
+ pair->recheck_on_timeout = FALSE;
+ }
+
++ g_get_current_time (&pair->next_tick);
++ g_time_val_add (&pair->next_tick, timeout * 1000);
++
+ /* TCP-ACTIVE candidate must create a new socket before sending
+ * by connecting to the peer. The new socket is stored in the candidate
+ * check pair, until we discover a new local peer reflexive */
+@@ -2796,11 +2820,6 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ ms_ice2_legacy_conncheck_send (&pair->stun_message, pair->sockptr,
+ &pair->remote->addr);
+
+- timeout = stun_timer_remainder (&pair->timer);
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- g_get_current_time (&pair->next_tick);
+- g_time_val_add (&pair->next_tick, timeout * 1000);
+-
+ return 0;
+ }
+
+--
+2.13.6
+
+
+From 36f306f4a95f1c2b3e9c584b5a645a78e231c020 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon, 26 Jun 2017 21:41:44 +0200
+Subject: [PATCH 58/70] conncheck: support several stun requests per pair
+
+This patch should improve the reliabily of the connection check by
+keeping the record of several simultaneous ongoing stun requests per
+pair. A new stun request on an in-progress pair typically is caused by
+in inbound stun request from the peer on this same pair. This is named
+"Triggered Checks" in the spec. When this situation arises, it is fair
+to handle these two stun requests simultaneously, the triggered check,
+and the initial ordinary check, since both can potentially succeed.
+
+Differential Revision: https://phabricator.freedesktop.org/D1761
+---
+ agent/conncheck.c | 701 +++++++++++++++++++++++++++---------------------------
+ agent/conncheck.h | 21 +-
+ 2 files changed, 361 insertions(+), 361 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 8075d4f..2a85738 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -189,8 +189,8 @@ priv_candidate_type_to_string (NiceCandidateType type)
+ static void
+ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *detail)
+ {
+- GSList *i, *k;
+- guint j;
++ GSList *i, *k, *l;
++ guint j, m;
+ GTimeVal now;
+
+ if (!nice_debug_is_verbose ())
+@@ -210,27 +210,34 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
+ if (pair->component_id == j) {
+ gchar local_addr[INET6_ADDRSTRLEN];
+ gchar remote_addr[INET6_ADDRSTRLEN];
+- StunTimer *timer = &pair->timer;
+
+ nice_address_to_string (&pair->local->addr, local_addr);
+ nice_address_to_string (&pair->remote->addr, remote_addr);
+
+ nice_debug ("Agent %p : *** sc=%d/%d : pair %p : "
+- "f=%s t=%s:%s timer=%d/%d %d/%dms "
+- "[%s]:%u > [%s]:%u state=%c%s%s%s",
++ "f=%s t=%s:%s [%s]:%u > [%s]:%u state=%c%s%s%s",
+ agent, pair->stream_id, pair->component_id, pair,
+ pair->foundation,
+ priv_candidate_type_to_string (pair->local->type),
+ priv_candidate_type_to_string (pair->remote->type),
+- timer->retransmissions, timer->max_retransmissions,
+- timer->delay - priv_timer_remainder (&pair->next_tick, &now),
+- timer->delay,
+ local_addr, nice_address_get_port (&pair->local->addr),
+ remote_addr, nice_address_get_port (&pair->remote->addr),
+ priv_state_to_gchar (pair->state),
+ pair->valid ? "V" : "",
+ pair->nominated ? "N" : "",
+ g_slist_find (agent->triggered_check_queue, pair) ? "T" : "");
++
++ for (l = pair->stun_transactions, m = 0; l; l = l->next, m++) {
++ StunTransaction *stun = l->data;
++ nice_debug ("Agent %p : *** sc=%d/%d : pair %p : "
++ "stun#=%d timer=%d/%d %d/%dms buf=%p %s",
++ agent, pair->stream_id, pair->component_id, pair, m,
++ stun->timer.retransmissions, stun->timer.max_retransmissions,
++ stun->timer.delay - priv_timer_remainder (&stun->next_tick, &now),
++ stun->timer.delay,
++ stun->message.buffer,
++ (m == 0 && pair->retransmit) ? "(R)" : "");
++ }
+ }
+ }
+ }
+@@ -608,52 +615,92 @@ static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stre
+ }
+ }
+
++/*
++ * Create a new STUN transaction and add it to the list
++ * of ongoing stun transactions of a pair.
++ *
++ * @pair the pair the new stun transaction should be added to.
++ * @return the created stun transaction.
++ */
++static StunTransaction *
++priv_add_stun_transaction (CandidateCheckPair *pair)
++{
++ StunTransaction *stun = g_slice_new0 (StunTransaction);
++ pair->stun_transactions = g_slist_prepend (pair->stun_transactions, stun);
++ pair->retransmit = TRUE;
++ return stun;
++}
++
++/*
++ * Forget a STUN transaction.
++ *
++ * @data the stun transaction to be forgotten.
++ * @user_data the component contained the concerned stun agent.
++ */
+ static void
+-candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckPair *p)
++priv_forget_stun_transaction (gpointer data, gpointer user_data)
+ {
++ StunTransaction *stun = data;
++ NiceComponent *component = user_data;
+ StunTransactionId id;
+- NiceComponent *component;
+-
+- component = nice_stream_find_component_by_id (stream, p->component_id);
+-
+- p->state = NICE_CHECK_FAILED;
+- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
+
+- if (p->stun_message.buffer != NULL) {
+- stun_message_id (&p->stun_message, id);
++ if (stun->message.buffer != NULL) {
++ stun_message_id (&stun->message, id);
+ stun_agent_forget_transaction (&component->stun_agent, id);
+ }
++}
+
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
++static void
++priv_free_stun_transaction (gpointer data)
++{
++ g_slice_free (StunTransaction, data);
+ }
+
+ /*
+- * Function that resubmits a new connection check, after a previous
+- * check in in-progress state got cancelled due to an incoming stun
+- * request matching this same pair
++ * Remove a STUN transaction from a pair, and forget it
++ * from the related component stun agent.
+ *
+- * @return will return TRUE if the pair is scheduled for recheck
++ * @pair the pair the stun transaction should be removed from.
++ * @stun the stun transaction to be removed.
++ * @component the component containing the stun agent used to
++ * forget the stun transaction.
+ */
+-static gboolean
+-priv_conn_recheck_on_timeout (NiceAgent *agent, CandidateCheckPair *p)
++static void
++priv_remove_stun_transaction (CandidateCheckPair *pair,
++ StunTransaction *stun, NiceComponent *component)
+ {
+- if (p->recheck_on_timeout) {
+- g_assert (p->state == NICE_CHECK_IN_PROGRESS);
+- /* this cancelled pair may have the flag 'mark nominated
+- * on response arrival' set, we want to keep it, because
+- * this is needed to nominate this pair in aggressive
+- * nomination, when the agent is in controlled mode.
+- *
+- * this cancelled pair may also have the flag 'use candidate
+- * on next check' set, that we want to preserve too.
+- */
+- nice_debug ("Agent %p : pair %p was cancelled, "
+- "triggering a new connection check", agent, p);
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- return TRUE;
+- }
+- return FALSE;
++ priv_forget_stun_transaction (stun, component);
++ pair->stun_transactions = g_slist_remove (pair->stun_transactions, stun);
++ priv_free_stun_transaction (stun);
++}
++
++/*
++ * Remove all STUN transactions from a pair, and forget them
++ * from the related component stun agent.
++ *
++ * @pair the pair the stun list should be cleared.
++ * @component the component containing the stun agent used to
++ * forget the stun transactions.
++ */
++static void
++priv_free_all_stun_transactions (CandidateCheckPair *pair,
++ NiceComponent *component)
++{
++ if (component)
++ g_slist_foreach (pair->stun_transactions, priv_forget_stun_transaction, component);
++ g_slist_free_full (pair->stun_transactions, priv_free_stun_transaction);
++ pair->stun_transactions = NULL;
++}
++
++static void
++candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckPair *p)
++{
++ NiceComponent *component;
++
++ component = nice_stream_find_component_by_id (stream, p->component_id);
++ p->state = NICE_CHECK_FAILED;
++ nice_debug ("Agent %p : pair %p state FAILED", agent, p);
++ priv_free_all_stun_transactions (p, component);
+ }
+
+ /*
+@@ -667,7 +714,7 @@ priv_conn_recheck_on_timeout (NiceAgent *agent, CandidateCheckPair *p)
+ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent)
+ {
+ gboolean keep_timer_going = FALSE;
+- GSList *i;
++ GSList *i, *j;
+ CandidateCheckPair *pair;
+ unsigned int timeout;
+ GTimeVal now;
+@@ -679,39 +726,59 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ CandidateCheckPair *p = i->data;
+ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
+ NiceComponent *component;
++ StunTransaction *stun;
++
++ if (p->stun_transactions == NULL)
++ continue;
+
+ if (!agent_find_component (agent, p->stream_id, p->component_id,
+ NULL, &component))
+ continue;
+
+- if (p->state != NICE_CHECK_IN_PROGRESS)
+- continue;
++ /* The first stun transaction of the list may eventually be
++ * retransmitted, other stun transactions just have their
++ * timer updated.
++ */
+
+- if (p->stun_message.buffer == NULL) {
+- nice_debug ("Agent %p : STUN connectivity check was cancelled, marking as done.", agent);
+- p->state = NICE_CHECK_FAILED;
+- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
+- continue;
++ j = p->stun_transactions->next;
++
++ /* process all stun transactions except the first one */
++ while (j) {
++ StunTransaction *s = j->data;
++ GSList *next = j->next;
++
++ if (priv_timer_expired (&s->next_tick, &now))
++ switch (stun_timer_refresh (&s->timer)) {
++ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
++ priv_remove_stun_transaction (p, s, component);
++ break;
++ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
++ timeout = stun_timer_remainder (&s->timer);
++ s->next_tick = now;
++ g_time_val_add (&s->next_tick, timeout * 1000);
++ break;
++ default:
++ break;
++ }
++ j = next;
+ }
+
+- if (!priv_timer_expired (&p->next_tick, &now))
++ if (p->state != NICE_CHECK_IN_PROGRESS)
+ continue;
+
+- switch (stun_timer_refresh (&p->timer)) {
+- case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+-timer_timeout:
+- /* case: conncheck cancelled due to in-progress incoming
+- * check, requeing the pair, ICE spec, sect 7.2.1.4
+- * "Triggered Checks", "If the state of that pair is
+- * In-Progress..."
+- */
+- if (priv_conn_recheck_on_timeout (agent, p))
+- break;
++ /* process the first stun transaction of the list */
++ stun = p->stun_transactions->data;
++ if (!priv_timer_expired (&stun->next_tick, &now))
++ continue;
+
++ switch (stun_timer_refresh (&stun->timer)) {
++ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
++timer_return_timeout:
+ /* case: error, abort processing */
+ nice_address_to_string (&p->local->addr, tmpbuf1);
+ nice_address_to_string (&p->remote->addr, tmpbuf2);
+- nice_debug ("Agent %p : Retransmissions failed, giving up on connectivity check %p", agent, p);
++ nice_debug ("Agent %p : Retransmissions failed, giving up on "
++ "connectivity check %p", agent, p);
+ nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
+ tmpbuf1, nice_address_get_port (&p->local->addr),
+ tmpbuf2, nice_address_get_port (&p->remote->addr));
+@@ -732,42 +799,33 @@ timer_timeout:
+ * a pair with a higher priority than this in-progress pair,
+ * ICE spec, sect 8.1.2 "Updating States", item 2.2
+ */
+- if (!p->retransmit_on_timeout)
+- goto timer_timeout;
+-
+- /* case: conncheck cancelled due to in-progress incoming
+- * check, requeing the pair, ICE spec, sect 7.2.1.4
+- * "Triggered Checks", "If the state of that pair is
+- * In-Progress..."
+- */
+- if (priv_conn_recheck_on_timeout (agent, p))
+- break;
++ if (!p->retransmit)
++ goto timer_return_timeout;
+
+ /* case: not ready, so schedule a new timeout */
+- timeout = stun_timer_remainder (&p->timer);
++ timeout = stun_timer_remainder (&stun->timer);
+
+ nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
+ "(timer=%d/%d %d/%dms).",
+ agent, p,
+- p->timer.retransmissions, p->timer.max_retransmissions,
+- p->timer.delay - timeout, p->timer.delay);
++ stun->timer.retransmissions, stun->timer.max_retransmissions,
++ stun->timer.delay - timeout, stun->timer.delay);
+
+ agent_socket_send (p->sockptr, &p->remote->addr,
+- stun_message_length (&p->stun_message),
+- (gchar *)p->stun_buffer);
+-
++ stun_message_length (&stun->message),
++ (gchar *)stun->buffer);
+
+ /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = now;
+- g_time_val_add (&p->next_tick, timeout * 1000);
++ stun->next_tick = now;
++ g_time_val_add (&stun->next_tick, timeout * 1000);
+
+ return TRUE;
+ case STUN_USAGE_TIMER_RETURN_SUCCESS:
+- timeout = stun_timer_remainder (&p->timer);
++ timeout = stun_timer_remainder (&stun->timer);
+
+ /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = now;
+- g_time_val_add (&p->next_tick, timeout * 1000);
++ stun->next_tick = now;
++ g_time_val_add (&stun->next_tick, timeout * 1000);
+
+ keep_timer_going = TRUE;
+ break;
+@@ -948,7 +1006,6 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ g_assert (p->state == NICE_CHECK_SUCCEEDED);
+ nice_debug ("Agent %p : restarting check %p with "
+ "USE-CANDIDATE attrib (regular nomination)", agent, p);
+- p->recheck_on_timeout = FALSE;
+ p->use_candidate_on_next_check = TRUE;
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ keep_timer_going = TRUE;
+@@ -972,7 +1029,6 @@ priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
+ p->state == NICE_CHECK_DISCOVERED)) {
+ nice_debug ("Agent %p : restarting check %p as the nominated pair.", agent, p);
+ p->nominated = TRUE;
+- p->recheck_on_timeout = FALSE;
+ priv_update_selected_pair (agent, component, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+ keep_timer_going = TRUE;
+@@ -2186,7 +2242,6 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ }
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local));
+- pair->retransmit_on_timeout = TRUE;
+
+ stream->conncheck_list = g_slist_insert_sorted (stream->conncheck_list, pair,
+ (GCompareFunc)conn_check_compare);
+@@ -2381,8 +2436,7 @@ static void conn_check_free_item (gpointer data)
+
+ if (pair->agent)
+ priv_remove_pair_from_triggered_check_queue (pair->agent, pair);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
++ priv_free_all_stun_transactions (pair, NULL);
+ g_slice_free (CandidateCheckPair, pair);
+ }
+
+@@ -2655,6 +2709,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ bool cand_use = controlling;
+ size_t buffer_len;
+ unsigned int timeout;
++ StunTransaction *stun;
+
+ if (!agent_find_component (agent, pair->stream_id, pair->component_id,
+ &stream, &component))
+@@ -2718,13 +2773,13 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+
+ if (uname_len == 0) {
+ nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
+ return -1;
+ }
+
++ stun = priv_add_stun_transaction (pair);
++
+ buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
+- &pair->stun_message, pair->stun_buffer, sizeof(pair->stun_buffer),
++ &stun->message, stun->buffer, sizeof(stun->buffer),
+ uname, uname_len, password, password_len,
+ cand_use, controlling, pair->prflx_priority,
+ agent->tie_breaker,
+@@ -2732,7 +2787,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ agent_to_ice_compatibility (agent));
+
+ nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
+- pair->stun_message.buffer);
++ stun->message.buffer);
+
+ if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
+ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
+@@ -2741,50 +2796,20 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+
+ if (buffer_len == 0) {
+ nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
++ priv_remove_stun_transaction (pair, stun, component);
+ return -1;
+ }
+
+ if (nice_socket_is_reliable(pair->sockptr)) {
+ timeout = agent->stun_reliable_timeout;
+- stun_timer_start_reliable(&pair->timer, timeout);
++ stun_timer_start_reliable(&stun->timer, timeout);
+ } else {
+- StunTimer *timer = &pair->timer;
+-
+- if (pair->recheck_on_timeout) {
+- GTimeVal now;
+- /* The pair recheck on timeout can easily cause repetitive rechecks in
+- * a ping-pong effect, if both peers with the same behaviour try to
+- * check the same pair almost simultaneously, and if the network rtt
+- * is greater than the initial timer rto. The reply to the initial
+- * stun request may arrive after the in-progress conncheck
+- * cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
+- * creates a new stun request, and forgets the initial one.
+- * The conncheck timer is restarted with the same initial value,
+- * so the same situation happens again later.
+- *
+- * We choose to avoid resetting the timer in such situation.
+- * After enough retransmissions, the timeout delay becomes
+- * longer than the rtt, and the stun reply can be handled.
+- */
+-
+- g_get_current_time (&now);
+- timeout = priv_timer_remainder (&pair->next_tick, &now);
+- nice_debug("Agent %p : reusing timer of pair %p: %d/%d %d/%dms",
+- agent, pair,
+- timer->retransmissions, timer->max_retransmissions,
+- timer->delay - timeout,
+- timer->delay);
+- } else {
+- timeout = priv_compute_conncheck_timer (agent, stream);
+- stun_timer_start (timer, timeout, agent->stun_max_retransmissions);
+- }
+- pair->recheck_on_timeout = FALSE;
++ timeout = priv_compute_conncheck_timer (agent, stream);
++ stun_timer_start (&stun->timer, timeout, agent->stun_max_retransmissions);
+ }
+
+- g_get_current_time (&pair->next_tick);
+- g_time_val_add (&pair->next_tick, timeout * 1000);
++ g_get_current_time (&stun->next_tick);
++ g_time_val_add (&stun->next_tick, timeout * 1000);
+
+ /* TCP-ACTIVE candidate must create a new socket before sending
+ * by connecting to the peer. The new socket is stored in the candidate
+@@ -2814,10 +2839,10 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ }
+ /* send the conncheck */
+ agent_socket_send (pair->sockptr, &pair->remote->addr,
+- buffer_len, (gchar *)pair->stun_buffer);
++ buffer_len, (gchar *)stun->buffer);
+
+ if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2)
+- ms_ice2_legacy_conncheck_send (&pair->stun_message, pair->sockptr,
++ ms_ice2_legacy_conncheck_send (&stun->message, pair->sockptr,
+ &pair->remote->addr);
+
+ return 0;
+@@ -2881,8 +2906,7 @@ static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, gu
+ (p->state == NICE_CHECK_WAITING && like_in_progress)) {
+ if (highest_nominated_priority != 0 &&
+ p->priority < highest_nominated_priority) {
+- p->retransmit_on_timeout = FALSE;
+- p->recheck_on_timeout = FALSE;
++ p->retransmit = FALSE;
+ nice_debug ("Agent %p : pair %p will not be retransmitted.",
+ agent, p);
+ } else {
+@@ -2938,9 +2962,9 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ nice_debug ("Agent %p : Found a matching pair %p (%s) (%s) ...",
+ agent, p, p->foundation, priv_state_to_string (p->state));
+
+- switch (p->state) {
+- case NICE_CHECK_WAITING:
+- case NICE_CHECK_FROZEN:
++ switch (p->state) {
++ case NICE_CHECK_WAITING:
++ case NICE_CHECK_FROZEN:
+ nice_debug ("Agent %p : pair %p added for a triggered check.",
+ agent, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+@@ -2952,19 +2976,30 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ * for that pair. The controlling role of this new check may
+ * be different from the role of this cancelled check.
+ *
+- * note: the flag retransmit_on_timeout unset means that
++ * note: the flag retransmit unset means that
+ * another pair, with a higher priority is already nominated,
+ * so there's no reason to recheck this pair, since it can in
+ * no way replace the nominated one.
+ */
+- if (!nice_socket_is_reliable (p->sockptr) &&
+- p->retransmit_on_timeout) {
+- nice_debug ("Agent %p : pair %p will be rechecked "
+- "on stun timer timeout.", agent, p);
+- /* this flag will determine the action at the retransmission
+- * timeout of the stun timer
++ if (!nice_socket_is_reliable (p->sockptr) && p->retransmit) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ }
++ break;
++ case NICE_CHECK_FAILED:
++ if (p->retransmit) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ /* If the component for this pair is in failed state, move it
++ * back to connecting, and reinitiate the timers
+ */
+- p->recheck_on_timeout = TRUE;
++ if (component->state == NICE_COMPONENT_STATE_FAILED) {
++ agent_signal_component_state_change (agent, stream->id,
++ component->id, NICE_COMPONENT_STATE_CONNECTING);
++ conn_check_schedule_next (agent);
++ }
+ }
+ break;
+ case NICE_CHECK_SUCCEEDED:
+@@ -2978,32 +3013,6 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ */
+ priv_update_check_list_state_for_ready (agent, stream, component);
+ break;
+- case NICE_CHECK_FAILED:
+- /* 7.2.1.4 Triggered Checks
+- * If the state of the pair is Failed, it is changed to Waiting
+- * and the agent MUST create a new connectivity check for that
+- * pair (representing a new STUN Binding request transaction), by
+- * enqueueing the pair in the triggered check queue.
+- *
+- * note: the flag retransmit_on_timeout unset means that
+- * another pair, with a higher priority is already nominated,
+- * we apply the same strategy than with an in-progress pair
+- * above.
+- */
+- if (p->retransmit_on_timeout) {
+- nice_debug ("Agent %p : pair %p added for a triggered check.",
+- agent, p);
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- /* If the component for this pair is in failed state, move it
+- * back to connecting, and reinitiate the timers
+- */
+- if (component->state == NICE_COMPONENT_STATE_FAILED) {
+- agent_signal_component_state_change (agent, stream->id,
+- component->id, NICE_COMPONENT_STATE_CONNECTING);
+- conn_check_schedule_next (agent);
+- }
+- }
+- break;
+ default:
+ break;
+ }
+@@ -3260,16 +3269,8 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ if (new_pair == p)
+ p->valid = TRUE;
+ p->state = NICE_CHECK_SUCCEEDED;
+- /* note: we cancel the potential in-progress transaction
+- * cancellation, caused by sect 7.2.1.4 "Triggered Checks", if
+- * we receive a valid reply before transmission timeout...
+- */
+- p->recheck_on_timeout = FALSE;
+- /* ... or just after the transmission timeout, while the pair is
+- * temporarily put on the triggered check list on the way to be
+- * be rechecked: we remove it from the list too.
+- */
+ priv_remove_pair_from_triggered_check_queue (agent, p);
++ priv_free_all_stun_transactions (p, component);
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
+ nice_component_add_valid_candidate (component, remote_candidate);
+ }
+@@ -3304,8 +3305,8 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ * Succeeded, RFC 5245, 7.1.3.2.3, "Updating Pair States"
+ */
+ p->state = NICE_CHECK_SUCCEEDED;
+- p->recheck_on_timeout = FALSE;
+ priv_remove_pair_from_triggered_check_queue (agent, p);
++ priv_free_all_stun_transactions (p, component);
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED, %p DISCOVERED.",
+ agent, p, new_pair);
+ }
+@@ -3331,7 +3332,8 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ struct sockaddr addr;
+ } sockaddr;
+ socklen_t socklen = sizeof (sockaddr);
+- GSList *i;
++ GSList *i, *j;
++ guint k;
+ StunUsageIceReturn res;
+ StunTransactionId discovery_id;
+ StunTransactionId response_id;
+@@ -3340,193 +3342,186 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+
+- if (p->stun_message.buffer == NULL)
+- continue;
+-
+- stun_message_id (&p->stun_message, discovery_id);
+-
+- if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)))
+- continue;
+-
+- res = stun_usage_ice_conncheck_process (resp,
+- &sockaddr.storage, &socklen,
+- agent_to_ice_compatibility (agent));
+- nice_debug ("Agent %p : stun_bind_process/conncheck for %p: "
+- "%s,res=%s.",
+- agent, p,
+- agent->controlling_mode ? "controlling" : "controlled",
+- priv_ice_return_to_string (res));
+-
+- if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
+- res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+- /* case: found a matching connectivity check request */
+-
+- CandidateCheckPair *ok_pair = NULL;
+-
+- nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+-
+- /* step: verify that response came from the same IP address we
+- * sent the original request to (see 7.1.2.1. "Failure
+- * Cases") */
+- if (nice_address_equal (from, &p->remote->addr) == FALSE) {
+-
+- p->state = NICE_CHECK_FAILED;
+- if (nice_debug_is_enabled ()) {
+- gchar tmpbuf[INET6_ADDRSTRLEN];
+- gchar tmpbuf2[INET6_ADDRSTRLEN];
+- nice_debug ("Agent %p : conncheck %p FAILED"
+- " (mismatch of source address).", agent, p);
+- nice_address_to_string (&p->remote->addr, tmpbuf);
+- nice_address_to_string (from, tmpbuf2);
+- nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
+- tmpbuf, nice_address_get_port (&p->remote->addr),
+- tmpbuf2, nice_address_get_port (from));
+- }
+- return TRUE;
+- }
+-
+- /* note: CONNECTED but not yet READY, see docs */
+-
+- /* step: handle the possible case of a peer-reflexive
+- * candidate where the mapped-address in response does
+- * not match any local candidate, see 7.1.2.2.1
+- * "Discovering Peer Reflexive Candidates" ICE ID-19) */
+-
+- if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+- p->state = NICE_CHECK_SUCCEEDED;
+- p->valid = TRUE;
+- nice_debug ("Agent %p : Mapped address not found."
+- " conncheck %p SUCCEEDED.", agent, p);
+- nice_component_add_valid_candidate (component, p->remote);
+- } else
+- ok_pair = priv_process_response_check_for_reflexive (agent,
+- stream, component, p, sockptr, &sockaddr.addr,
+- local_candidate, remote_candidate);
+-
+- /* note: The success of this check might also
+- * cause the state of other checks to change as well, ICE
+- * spec 7.1.3.2.3
+- */
+- priv_conn_check_unfreeze_related (agent, stream, p);
+-
+- /* Note: this assignment helps to reduce the numbers of cases
+- * to be tested. If ok_pair and p refer to distinct pairs, it
+- * means that ok_pair is a discovered peer reflexive one,
+- * caused by the check made on pair p. In that case, the
+- * flags to be tested are on p, but the nominated flag will be
+- * set on ok_pair. When there's no discovered pair, p and
+- * ok_pair refer to the same pair.
+- * To summarize : p is a SUCCEEDED pair, ok_pair is a
+- * DISCOVERED, VALID, and eventually NOMINATED pair.
+- */
+- if (!ok_pair)
+- ok_pair = p;
+-
+- /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
+- Nominated Flag" (ID-19) */
+- if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
+- nice_debug ("Agent %p : Updating nominated flag (%s): "
+- "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
+- agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
+- "UDP" : "TCP",
+- ok_pair, ok_pair->use_candidate_on_next_check,
+- ok_pair->mark_nominated_on_response_arrival,
+- p, p->use_candidate_on_next_check,
+- p->mark_nominated_on_response_arrival);
+-
+- if (agent->controlling_mode) {
+- switch (agent->nomination_mode) {
+- case NICE_NOMINATION_MODE_REGULAR:
+- if (p->use_candidate_on_next_check) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(regular nomination, controlling, "
+- "use_cand_on_next_check=1).",
+- agent, ok_pair, ok_pair->foundation);
+- ok_pair->nominated = TRUE;
+- }
+- break;
+- case NICE_NOMINATION_MODE_AGGRESSIVE:
+- if (!p->nominated) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(aggressive nomination, controlling).",
+- agent, ok_pair, ok_pair->foundation);
+- ok_pair->nominated = TRUE;
+- }
+- break;
+- default:
+- /* Nothing to do */
+- break;
+- }
+- } else {
+- if (p->mark_nominated_on_response_arrival) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated "
+- "(%s nomination, controlled, mark_on_response=1).",
+- agent, ok_pair, ok_pair->foundation,
+- agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
+- "aggressive" : "regular");
+- ok_pair->nominated = TRUE;
+- }
+- }
+- }
+-
+- if (ok_pair->nominated == TRUE) {
+- priv_update_selected_pair (agent, component, ok_pair);
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", got a nominated pair");
++ for (j = p->stun_transactions, k = 0; j; j = j->next, k++) {
++ StunTransaction *stun = j->data;
++
++ stun_message_id (&stun->message, discovery_id);
++
++ if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)))
++ continue;
++
++ res = stun_usage_ice_conncheck_process (resp,
++ &sockaddr.storage, &socklen,
++ agent_to_ice_compatibility (agent));
++ nice_debug ("Agent %p : stun_bind_process/conncheck for %p: "
++ "%s,res=%s,stun#=%d.",
++ agent, p,
++ agent->controlling_mode ? "controlling" : "controlled",
++ priv_ice_return_to_string (res), k);
++
++ if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
++ res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
++ /* case: found a matching connectivity check request */
++
++ CandidateCheckPair *ok_pair = NULL;
++
++ nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
++ priv_remove_stun_transaction (p, stun, component);
++
++ /* step: verify that response came from the same IP address we
++ * sent the original request to (see 7.1.2.1. "Failure
++ * Cases") */
++ if (nice_address_equal (from, &p->remote->addr) == FALSE) {
++ candidate_check_pair_fail (stream, agent, p);
++ if (nice_debug_is_enabled ()) {
++ gchar tmpbuf[INET6_ADDRSTRLEN];
++ gchar tmpbuf2[INET6_ADDRSTRLEN];
++ nice_debug ("Agent %p : conncheck %p FAILED"
++ " (mismatch of source address).", agent, p);
++ nice_address_to_string (&p->remote->addr, tmpbuf);
++ nice_address_to_string (from, tmpbuf2);
++ nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
++ tmpbuf, nice_address_get_port (&p->remote->addr),
++ tmpbuf2, nice_address_get_port (from));
++ }
++ return TRUE;
++ }
+
+- /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state != NICE_COMPONENT_STATE_READY)
+- /* step: notify the client of a new component state (must be done
+- * before the possible check list state update step */
+- agent_signal_component_state_change (agent,
+- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- }
++ /* note: CONNECTED but not yet READY, see docs */
++
++ /* step: handle the possible case of a peer-reflexive
++ * candidate where the mapped-address in response does
++ * not match any local candidate, see 7.1.2.2.1
++ * "Discovering Peer Reflexive Candidates" ICE ID-19) */
++
++ if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
++ p->state = NICE_CHECK_SUCCEEDED;
++ p->valid = TRUE;
++ nice_debug ("Agent %p : Mapped address not found."
++ " conncheck %p SUCCEEDED.", agent, p);
++ nice_component_add_valid_candidate (component, p->remote);
++ } else
++ ok_pair = priv_process_response_check_for_reflexive (agent,
++ stream, component, p, sockptr, &sockaddr.addr,
++ local_candidate, remote_candidate);
++
++ /* note: The success of this check might also
++ * cause the state of other checks to change as well, ICE
++ * spec 7.1.3.2.3
++ */
++ priv_conn_check_unfreeze_related (agent, stream, p);
++
++ /* Note: this assignment helps to reduce the numbers of cases
++ * to be tested. If ok_pair and p refer to distinct pairs, it
++ * means that ok_pair is a discovered peer reflexive one,
++ * caused by the check made on pair p. In that case, the
++ * flags to be tested are on p, but the nominated flag will be
++ * set on ok_pair. When there's no discovered pair, p and
++ * ok_pair refer to the same pair.
++ * To summarize : p is a SUCCEEDED pair, ok_pair is a
++ * DISCOVERED, VALID, and eventually NOMINATED pair.
++ */
++ if (!ok_pair)
++ ok_pair = p;
++
++ /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
++ Nominated Flag" (ID-19) */
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ nice_debug ("Agent %p : Updating nominated flag (%s): "
++ "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
++ agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
++ "UDP" : "TCP",
++ ok_pair, ok_pair->use_candidate_on_next_check,
++ ok_pair->mark_nominated_on_response_arrival,
++ p, p->use_candidate_on_next_check,
++ p->mark_nominated_on_response_arrival);
++
++ if (agent->controlling_mode) {
++ switch (agent->nomination_mode) {
++ case NICE_NOMINATION_MODE_REGULAR:
++ if (p->use_candidate_on_next_check) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(regular nomination, controlling, "
++ "use_cand_on_next_check=1).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
++ }
++ break;
++ case NICE_NOMINATION_MODE_AGGRESSIVE:
++ if (!p->nominated) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(aggressive nomination, controlling).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
++ }
++ break;
++ default:
++ /* Nothing to do */
++ break;
++ }
++ } else {
++ if (p->mark_nominated_on_response_arrival) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(%s nomination, controlled, mark_on_response=1).",
++ agent, ok_pair, ok_pair->foundation,
++ agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
++ "aggressive" : "regular");
++ ok_pair->nominated = TRUE;
++ }
++ }
++ }
+
+- /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
+- states" and 8.1.2 "Updating States", ID-19) */
+- priv_update_check_list_state_for_ready (agent, stream, component);
+- } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
+- /* case: role conflict error, need to restart with new role */
+- nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
+-
+- /* note: this res value indicates that the role of the peer
+- * agent has not changed after the tie-breaker comparison, so
+- * this is our role that must change. see ICE sect. 7.1.3.1
+- * "Failure Cases". Our role might already have changed due to
+- * an earlier incoming request, but if not, change role now.
+- *
+- * Sect. 7.1.3.1 is not clear on this point, but we choose to
+- * put the candidate pair in the triggered check list even
+- * when the agent did not switch its role. The reason for this
+- * interpretation is that the reception of the stun reply, even
+- * an error reply, is a good sign that this pair will be
+- * valid, if we retry the check after the role of both peers
+- * has been fixed.
+- */
++ if (ok_pair->nominated == TRUE) {
++ priv_update_selected_pair (agent, component, ok_pair);
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a nominated pair");
++
++ /* Do not step down to CONNECTED if we're already at state READY*/
++ if (component->state != NICE_COMPONENT_STATE_READY)
++ /* step: notify the client of a new component state (must be done
++ * before the possible check list state update step */
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
++ }
+
+- if (p->stun_message.buffer != NULL) {
++ /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
++ states" and 8.1.2 "Updating States", ID-19) */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
+ guint64 tie;
+ gboolean controlled_mode;
+
+- controlled_mode = (stun_message_find64 (&p->stun_message,
++ /* case: role conflict error, need to restart with new role */
++ nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
++
++ /* note: this res value indicates that the role of the peer
++ * agent has not changed after the tie-breaker comparison, so
++ * this is our role that must change. see ICE sect. 7.1.3.1
++ * "Failure Cases". Our role might already have changed due to
++ * an earlier incoming request, but if not, change role now.
++ *
++ * Sect. 7.1.3.1 is not clear on this point, but we choose to
++ * put the candidate pair in the triggered check list even
++ * when the agent did not switch its role. The reason for this
++ * interpretation is that the reception of the stun reply, even
++ * an error reply, is a good sign that this pair will be
++ * valid, if we retry the check after the role of both peers
++ * has been fixed.
++ */
++ controlled_mode = (stun_message_find64 (&stun->message,
+ STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
+ STUN_MESSAGE_RETURN_SUCCESS);
+
+ priv_check_for_role_conflict (agent, controlled_mode);
+-
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
++ priv_remove_stun_transaction (p, stun, component);
+ priv_add_pair_to_triggered_check_queue (agent, p);
++ } else {
++ /* case: STUN error, the check STUN context was freed */
++ nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
++ candidate_check_pair_fail (stream, agent, p);
+ }
+- } else {
+- /* case: STUN error, the check STUN context was freed */
+- nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
++ return TRUE;
+ }
+- return TRUE;
+ }
+
+ return FALSE;
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index 909d469..e16dc67 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -71,6 +71,15 @@ typedef enum
+ } NiceCheckState;
+
+ typedef struct _CandidateCheckPair CandidateCheckPair;
++typedef struct _StunTransaction StunTransaction;
++
++struct _StunTransaction
++{
++ GTimeVal next_tick; /* next tick timestamp */
++ StunTimer timer;
++ uint8_t buffer[STUN_MAX_MESSAGE_SIZE_IPV6];
++ StunMessage message;
++};
+
+ struct _CandidateCheckPair
+ {
+@@ -86,16 +95,12 @@ struct _CandidateCheckPair
+ gboolean valid;
+ gboolean use_candidate_on_next_check;
+ gboolean mark_nominated_on_response_arrival;
+- gboolean recheck_on_timeout;
+- gboolean retransmit_on_timeout;
+- struct _CandidateCheckPair *discovered_pair;
+- struct _CandidateCheckPair *succeeded_pair;
++ gboolean retransmit; /* if the first stun request must be retransmitted */
++ CandidateCheckPair *discovered_pair;
++ CandidateCheckPair *succeeded_pair;
+ guint64 priority;
+ guint32 prflx_priority;
+- GTimeVal next_tick; /* next tick timestamp */
+- StunTimer timer;
+- uint8_t stun_buffer[STUN_MAX_MESSAGE_SIZE_IPV6];
+- StunMessage stun_message;
++ GSList *stun_transactions; /* a list of ongoing stun requests */
+ };
+
+ int conn_check_add_for_candidate (NiceAgent *agent, guint stream_id, NiceComponent *component, NiceCandidate *remote);
+--
+2.13.6
+
+
+From 6fe64fdbc53ab87dffd79972f492665cff14c0a0 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 27 Jun 2017 11:01:14 +0200
+Subject: [PATCH 59/70] conncheck: update the state of triggered checks pairs
+
+With this patch, we fix an ambiguity of some parts of the spec, when
+the document refers to in-progress pairs, that also concern pairs in
+the triggered checks list.
+
+The first cast is in section 7.1.2.5, "Updating the Nominated Flag",
+when the in-progress pair will be nominated on response arrival. This is
+handled in function priv_mark_pair_nominated(), when a pair is put to
+the triggered check list in reaction to a matching inbound stun request.
+Such a pair in priv_mark_pair_nominated() will _always_ be in the
+triggered check list, from the previously called function
+priv_schedule_triggered_check().
+
+The second case is in section 8.1.2, "Updating State" when an in-progress
+pair stops its retransmission when another pair of higher priority is
+already nominated. This is handled by function priv_prune_pending_checks().
+
+Until now, pairs enqueued in the triggered check list move transiently
+to state waiting, according to 7.2.1.4. But this state causes wrong
+decisions in the two previous cases, because such pairs should in fact
+rather be considered "like in-progress", to avoid discarding them
+inadvertantly.
+
+This patch update the state of the triggered check list
+pairs to in-progress. It allows to remove exception handling cited
+above: the code is a bit more simple, and allows some refactoring
+in priv_mark_pair_nominated() between RFC and compatibility modes.
+
+Differential Revision: https://phabricator.freedesktop.org/D1762
+---
+ agent/conncheck.c | 96 +++++++++++++++----------------------------------------
+ 1 file changed, 25 insertions(+), 71 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 2a85738..628c708 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -244,16 +244,6 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
+ }
+ }
+
+-/* Verify if the pair is in the triggered checks list
+- */
+-
+-static gboolean
+-priv_is_pair_in_triggered_check_queue (NiceAgent *agent, CandidateCheckPair *pair)
+-{
+- g_assert (pair);
+- return (g_slist_find (agent->triggered_check_queue, pair) != NULL);
+-}
+-
+ /* Add the pair to the triggered checks list, if not already present
+ */
+ static void
+@@ -261,8 +251,8 @@ priv_add_pair_to_triggered_check_queue (NiceAgent *agent, CandidateCheckPair *pa
+ {
+ g_assert (pair);
+
+- pair->state = NICE_CHECK_WAITING;
+- nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
++ pair->state = NICE_CHECK_IN_PROGRESS;
++ nice_debug ("Agent %p : pair %p state IN_PROGRESS", agent, pair);
+ if (agent->triggered_check_queue == NULL ||
+ g_slist_find (agent->triggered_check_queue, pair) == NULL)
+ agent->triggered_check_queue = g_slist_append (agent->triggered_check_queue, pair);
+@@ -841,12 +831,6 @@ timer_return_timeout:
+ */
+ pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+ if (pair) {
+- /* remove the pair from the triggered check list if needed. This
+- * may happen with the cancelled pair, that's just been added
+- * in state waiting to the triggered check list above in the
+- * same function.
+- */
+- priv_remove_pair_from_triggered_check_queue (agent, pair);
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", got a pair in Waiting state");
+ priv_conn_check_initiate (agent, pair);
+@@ -1109,7 +1093,7 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ if (pair) {
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", got a pair from triggered check list");
+- priv_conn_check_initiate (agent, pair);
++ conn_check_send (agent, pair);
+ return TRUE;
+ }
+
+@@ -2098,8 +2082,7 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ /* step: search for at least one nominated pair */
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *pair = i->data;
+- if (pair->local == localcand && pair->remote == remotecand &&
+- NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ if (pair->local == localcand && pair->remote == remotecand) {
+ /* ICE, 7.2.1.5. Updating the Nominated Flag */
+ /* note: TCP candidates typically produce peer reflexive
+ * candidate, generating a "discovered" pair that can be
+@@ -2111,44 +2094,27 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ g_assert (pair->state == NICE_CHECK_DISCOVERED);
+ }
+
+- if (pair->valid) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated",
+- agent, pair, pair->foundation);
+- pair->nominated = TRUE;
+- priv_update_selected_pair (agent, component, pair);
+- /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state == NICE_COMPONENT_STATE_FAILED)
+- agent_signal_component_state_change (agent,
+- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTING);
+- if (component->state == NICE_COMPONENT_STATE_CONNECTING)
+- /* step: notify the client of a new component state (must be done
+- * before the possible check list state update step */
+- agent_signal_component_state_change (agent,
+- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- priv_update_check_list_state_for_ready (agent, stream, component);
+- } else if (pair->state == NICE_CHECK_IN_PROGRESS) {
++ /* If the state of this pair is In-Progress, [...] the resulting
++ * valid pair has its nominated flag set when the response
++ * arrives.
++ */
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent) &&
++ pair->state == NICE_CHECK_IN_PROGRESS) {
+ pair->mark_nominated_on_response_arrival = TRUE;
+ nice_debug ("Agent %p : pair %p (%s) is in-progress, "
+ "will be nominated on response receipt.",
+ agent, pair, pair->foundation);
+ }
+- /* note: this case is not covered by the ICE spec, 7.2.1.5,
+- * "Updating the Nominated Flag", but a pair in waiting state
+- * deserves the same treatment than a pair in-progress. A pair
+- * can be in waiting state as the result of being enqueued in
+- * the triggered check list for example.
+- */
+- if (pair->state == NICE_CHECK_WAITING) {
+- pair->mark_nominated_on_response_arrival = TRUE;
+- nice_debug ("Agent %p : pair %p (%s) is waiting, "
+- "will be nominated on response receipt.",
++
++ if (pair->valid ||
++ !NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated",
+ agent, pair, pair->foundation);
++ pair->nominated = TRUE;
+ }
+- } else if (pair->local == localcand && pair->remote == remotecand) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated", agent, pair, pair->foundation);
+- pair->nominated = TRUE;
++
+ if (pair->valid) {
+- priv_update_selected_pair (agent, component, pair);
++ priv_update_selected_pair (agent, component, pair);
+ /* Do not step down to CONNECTED if we're already at state READY*/
+ if (component->state == NICE_COMPONENT_STATE_FAILED)
+ agent_signal_component_state_change (agent,
+@@ -2159,7 +2125,9 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ agent_signal_component_state_change (agent,
+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+ }
+- priv_update_check_list_state_for_ready (agent, stream, component);
++
++ if (pair->nominated)
++ priv_update_check_list_state_for_ready (agent, stream, component);
+ }
+ }
+ }
+@@ -2731,12 +2699,12 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ nice_address_to_string (&pair->local->addr, tmpbuf1);
+ nice_address_to_string (&pair->remote->addr, tmpbuf2);
+ nice_debug ("Agent %p : STUN-CC REQ [%s]:%u --> [%s]:%u, socket=%u, "
+- "pair=%s (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
++ "pair=%p (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
+ "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, %s.", agent,
+ tmpbuf1, nice_address_get_port (&pair->local->addr),
+ tmpbuf2, nice_address_get_port (&pair->remote->addr),
+ pair->sockptr->fileno ? g_socket_get_fd(pair->sockptr->fileno) : -1,
+- pair->foundation, pair->component_id,
++ pair, pair->component_id,
+ (unsigned long long)agent->tie_breaker,
+ (int) uname_len, uname, uname_len,
+ (int) password_len, password, password_len,
+@@ -2877,35 +2845,21 @@ static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, gu
+ "is %" G_GUINT64_FORMAT, agent, highest_nominated_priority);
+
+ /* step: cancel all FROZEN and WAITING pairs for the component */
+- /* note: this case is not covered by the ICE spec, 8.1.2
+- * "Updating States", but a pair in waiting state which will be
+- * nominated on response receipt should be treated the same way
+- * that an in-progress pair. A pair in waiting state and in
+- * the triggered check list should also be treated like an in-progress
+- * pair.
+- */
+ i = stream->conncheck_list;
+ while (i) {
+ CandidateCheckPair *p = i->data;
+ GSList *next = i->next;
+
+ if (p->component_id == component_id) {
+- gboolean like_in_progress =
+- p->mark_nominated_on_response_arrival ||
+- priv_is_pair_in_triggered_check_queue (agent, p);
+-
+- if (p->state == NICE_CHECK_FROZEN ||
+- (p->state == NICE_CHECK_WAITING && !like_in_progress)) {
++ if (p->state == NICE_CHECK_FROZEN || p->state == NICE_CHECK_WAITING) {
+ nice_debug ("Agent %p : pair %p removed.", agent, p);
+ conn_check_free_item (p);
+ stream->conncheck_list = g_slist_delete_link(stream->conncheck_list, i);
+ }
+
+ /* note: a SHOULD level req. in ICE 8.1.2. "Updating States" (ID-19) */
+- else if (p->state == NICE_CHECK_IN_PROGRESS ||
+- (p->state == NICE_CHECK_WAITING && like_in_progress)) {
+- if (highest_nominated_priority != 0 &&
+- p->priority < highest_nominated_priority) {
++ else if (p->state == NICE_CHECK_IN_PROGRESS) {
++ if (p->priority < highest_nominated_priority) {
+ p->retransmit = FALSE;
+ nice_debug ("Agent %p : pair %p will not be retransmitted.",
+ agent, p);
+--
+2.13.6
+
+
+From 72dd26a3368d3506fe8faca7067a02784fb5f0fd Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Wed, 28 Jun 2017 12:06:48 +0200
+Subject: [PATCH 60/70] conncheck: forgot to put a pair in triggered check list
+
+When a new pair is created from an unknown remote candidate, it
+should be enqueue for a triggered check, to allow it to be marked
+as nominated on response arrival in priv_mark_pair_nominated().
+Creating it in waiting state is not sufficient since the update
+in priv_mark_pair_nominated() from previous commits.
+
+Differential Revision: https://phabricator.freedesktop.org/D1763
+---
+ agent/conncheck.c | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 628c708..0e3ce88 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -2893,11 +2893,12 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ {
+ GSList *i;
+ NiceCandidate *local = NULL;
++ CandidateCheckPair *p;
+
+ g_assert (remote_cand != NULL);
+
+ for (i = stream->conncheck_list; i ; i = i->next) {
+- CandidateCheckPair *p = i->data;
++ p = i->data;
+ if (p->component_id == component->id &&
+ p->remote == remote_cand &&
+ ((p->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE &&
+@@ -2986,8 +2987,9 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+
+ if (i) {
+ nice_debug ("Agent %p : Adding a triggered check to conn.check list (local=%p).", agent, local);
+- priv_add_new_check_pair (agent, stream->id, component,
++ p = priv_add_new_check_pair (agent, stream->id, component,
+ local, remote_cand, NICE_CHECK_WAITING);
++ priv_add_pair_to_triggered_check_queue (agent, p);
+ return TRUE;
+ }
+ else {
+--
+2.13.6
+
+
+From 14102d44449d2eb4148588ce54fa897fa13b87ad Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Sun, 2 Jul 2017 16:02:09 +0200
+Subject: [PATCH 61/70] conncheck: change state before updating nominated pairs
+
+When a pair is nominated while in state failed, we first move
+back to state connecting, then we update the selected pair, and
+finally we move to state connected.
+---
+ agent/conncheck.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 0e3ce88..e584c0e 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -2114,11 +2114,11 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+ }
+
+ if (pair->valid) {
+- priv_update_selected_pair (agent, component, pair);
+ /* Do not step down to CONNECTED if we're already at state READY*/
+ if (component->state == NICE_COMPONENT_STATE_FAILED)
+ agent_signal_component_state_change (agent,
+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTING);
++ priv_update_selected_pair (agent, component, pair);
+ if (component->state == NICE_COMPONENT_STATE_CONNECTING)
+ /* step: notify the client of a new component state (must be done
+ * before the possible check list state update step */
+--
+2.13.6
+
+
+From 1a1803a45778000720c93d91060cedeb19124a27 Mon Sep 17 00:00:00 2001
+From: Philip Withnall <withnall(a)endlessm.com>
+Date: Tue, 12 Sep 2017 13:23:31 +0100
+Subject: [PATCH 62/70] tests: Fix copyright dates in test-gstreamer.c
+
+This code is not 1000 years old.
+
+Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+---
+ tests/test-gstreamer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test-gstreamer.c b/tests/test-gstreamer.c
+index 74d7133..a0be68e 100644
+--- a/tests/test-gstreamer.c
++++ b/tests/test-gstreamer.c
+@@ -1,7 +1,7 @@
+ /*
+ * This file is part of the Nice GLib ICE library.
+ *
+- * (C) 1015 Kurento.
++ * (C) 2015 Kurento.
+ * Contact: Jose Antonio Santos Cadenas
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+--
+2.13.6
+
+
+From 4c4834ab634f735145c8f758a22cbdd9cab79bac Mon Sep 17 00:00:00 2001
+From: Philip Withnall <withnall(a)endlessm.com>
+Date: Tue, 12 Sep 2017 13:23:53 +0100
+Subject: [PATCH 63/70] tests: Fix agent.h header inclusion in test-gstreamer.c
+
+Spotted by Lukas Gradl on the mailing list.
+
+Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+---
+ tests/test-gstreamer.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/test-gstreamer.c b/tests/test-gstreamer.c
+index a0be68e..f060efc 100644
+--- a/tests/test-gstreamer.c
++++ b/tests/test-gstreamer.c
+@@ -34,7 +34,7 @@
+ */
+
+ #include <gst/check/gstcheck.h>
+-#include <nice/agent.h>
++#include "agent.h"
+
+ #define RTP_HEADER_SIZE 12
+ #define RTP_PAYLOAD_SIZE 1024
+--
+2.13.6
+
+
+From fbdccf0c2787ebdc65fe13ac64bd25c829ea7972 Mon Sep 17 00:00:00 2001
+From: Philip Withnall <withnall(a)endlessm.com>
+Date: Thu, 3 Aug 2017 12:20:32 +0100
+Subject: [PATCH 64/70] stun: Fix FD leak in test/utility code
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+https://phabricator.freedesktop.org/T7798
+
+Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+Reviewed-by: Olivier Crête <olivier.crete(a)collabora.com>
+Differential Revision: https://phabricator.freedesktop.org/D1819
+---
+ stun/usages/bind.c | 29 ++++++++++++++++++++++-------
+ 1 file changed, 22 insertions(+), 7 deletions(-)
+
+diff --git a/stun/usages/bind.c b/stun/usages/bind.c
+index d56790f..ee600a0 100644
+--- a/stun/usages/bind.c
++++ b/stun/usages/bind.c
+@@ -491,13 +491,15 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ ret = stun_trans_create (&trans, SOCK_DGRAM, 0, srv, srvlen);
+ if (ret != STUN_USAGE_TRANS_RETURN_SUCCESS) {
+ stun_debug ("STUN transaction failed: couldn't create transport.");
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+
+ val = stun_trans_send (&trans, req_buf, len);
+ if (val < -1) {
+ stun_debug ("STUN transaction failed: couldn't send request.");
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+
+ stun_timer_start (&timer, STUN_TIMER_DEFAULT_TIMEOUT,
+@@ -514,14 +516,16 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ switch (stun_timer_refresh (&timer)) {
+ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+ stun_debug ("STUN transaction failed: time out.");
+- return STUN_USAGE_BIND_RETURN_TIMEOUT; // fatal error!
++ bind_ret = STUN_USAGE_BIND_RETURN_TIMEOUT; // fatal error!
++ goto done;
+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+ stun_debug ("STUN transaction retransmitted (timeout %dms).",
+ stun_timer_remainder (&timer));
+ val = stun_trans_send (&trans, req_buf, len);
+ if (val < -1) {
+ stun_debug ("STUN transaction failed: couldn't resend request.");
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+ continue;
+ case STUN_USAGE_TIMER_RETURN_SUCCESS:
+@@ -538,7 +542,10 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+
+ valid = stun_agent_validate (&agent, &msg, buf, val, NULL, NULL);
+ if (valid == STUN_VALIDATION_UNKNOWN_ATTRIBUTE)
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ {
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
++ }
+
+ if (valid != STUN_VALIDATION_SUCCESS) {
+ ret = STUN_USAGE_TRANS_RETURN_RETRY;
+@@ -554,12 +561,16 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ (struct sockaddr *) &alternate_server, alternate_server_len);
+
+ if (ret != STUN_USAGE_TRANS_RETURN_SUCCESS) {
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+
+ val = stun_trans_send (&trans, req_buf, len);
+ if (val < -1)
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ {
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
++ }
+
+ stun_timer_start (&timer, STUN_TIMER_DEFAULT_TIMEOUT,
+ STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
+@@ -573,5 +584,9 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ }
+ while (ret == STUN_USAGE_TRANS_RETURN_RETRY);
+
++done:
++ if (trans.fd != -1)
++ stun_trans_deinit (&trans);
++
+ return bind_ret;
+ }
+--
+2.13.6
+
+
+From 02216a6766caccb652387d5ee19686149eedbc93 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue, 21 Nov 2017 15:12:45 +0100
+Subject: [PATCH 65/70] agent: prevent external role change while conncheck is
+ running
+
+With this patch, we stash the controlling mode property change, and
+apply it safely, when it won't interfere with an ongoing conncheck
+running. According to RFC5245, sect 5.2. "Determining Role", the role
+is determined for a session, and persists unless an ICE is restarted.
+
+Differential Revision: https://phabricator.freedesktop.org/D1887
+---
+ agent/agent-priv.h | 4 +++-
+ agent/agent.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--
+ tests/test-restart.c | 15 ++++++++++++++
+ 3 files changed, 74 insertions(+), 3 deletions(-)
+
+diff --git a/agent/agent-priv.h b/agent/agent-priv.h
+index 714ecff..7269be0 100644
+--- a/agent/agent-priv.h
++++ b/agent/agent-priv.h
+@@ -146,7 +146,7 @@ struct _NiceAgent
+ NiceProxyType proxy_type; /* property: Proxy type */
+ gchar *proxy_username; /* property: Proxy username */
+ gchar *proxy_password; /* property: Proxy password */
+- gboolean controlling_mode; /* property: controlling-mode */
++ gboolean saved_controlling_mode;/* property: controlling-mode */
+ guint timer_ta; /* property: timer Ta */
+ guint max_conn_checks; /* property: max connectivity checks */
+ gboolean force_relay; /* property: force relay */
+@@ -190,6 +190,8 @@ struct _NiceAgent
+ gboolean use_ice_tcp;
+
+ guint conncheck_timer_grace_period; /* ongoing delay before timer stop */
++ gboolean controlling_mode; /* controlling mode used by the
++ conncheck */
+ /* XXX: add pointer to internal data struct for ABI-safe extensions */
+ };
+
+diff --git a/agent/agent.c b/agent/agent.c
+index a4dcc0c..0773c53 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -405,6 +405,13 @@ nice_agent_class_init (NiceAgentClass *klass)
+ 1, /* not a construct property, ignored */
+ G_PARAM_READWRITE));
+
++ /**
++ * NiceAgent:controlling-mode:
++ *
++ * Whether the agent has the controlling role. This property should
++ * be modified before gathering candidates, any modification occuring
++ * later will be hold until ICE is restarted.
++ */
+ g_object_class_install_property (gobject_class, PROP_CONTROLLING_MODE,
+ g_param_spec_boolean (
+ "controlling-mode",
+@@ -1107,6 +1114,47 @@ static void priv_generate_tie_breaker (NiceAgent *agent)
+ }
+
+ static void
++priv_update_controlling_mode (NiceAgent *agent, gboolean value)
++{
++ gboolean update_controlling_mode;
++ GSList *i, *j;
++
++ agent->saved_controlling_mode = value;
++ /* It is safe to update the agent controlling mode when all
++ * components are still in state disconnected. When we leave
++ * this state, the role must stay under the control of the
++ * conncheck algorithm exclusively, until the conncheck is
++ * eventually restarted. See RFC5245, sect 5.2. Determining Role
++ */
++ if (agent->controlling_mode != agent->saved_controlling_mode) {
++ update_controlling_mode = TRUE;
++ for (i = agent->streams;
++ i && update_controlling_mode; i = i->next) {
++ NiceStream *stream = i->data;
++ for (j = stream->components;
++ j && update_controlling_mode; j = j->next) {
++ NiceComponent *component = j->data;
++ if (component->state > NICE_COMPONENT_STATE_DISCONNECTED)
++ update_controlling_mode = FALSE;
++ }
++ }
++ if (update_controlling_mode) {
++ agent->controlling_mode = agent->saved_controlling_mode;
++ nice_debug ("Agent %p : Property set, changing role to \"%s\".",
++ agent, agent->controlling_mode ? "controlling" : "controlled");
++ } else {
++ nice_debug ("Agent %p : Property set, role switch requested "
++ "but conncheck already started.", agent);
++ nice_debug ("Agent %p : Property set, staying with role \"%s\" "
++ "until restart.", agent,
++ agent->controlling_mode ? "controlling" : "controlled");
++ }
++ } else
++ nice_debug ("Agent %p : Property set, role is already \"%s\".", agent,
++ agent->controlling_mode ? "controlling" : "controlled");
++}
++
++static void
+ nice_agent_init (NiceAgent *agent)
+ {
+ agent->next_candidate_id = 1;
+@@ -1115,6 +1163,7 @@ nice_agent_init (NiceAgent *agent)
+ /* set defaults; not construct params, so set here */
+ agent->stun_server_port = DEFAULT_STUN_PORT;
+ agent->controlling_mode = TRUE;
++ agent->saved_controlling_mode = TRUE;
+ agent->max_conn_checks = NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT;
+ agent->nomination_mode = NICE_NOMINATION_MODE_AGGRESSIVE;
+
+@@ -1213,7 +1262,7 @@ nice_agent_get_property (
+ break;
+
+ case PROP_CONTROLLING_MODE:
+- g_value_set_boolean (value, agent->controlling_mode);
++ g_value_set_boolean (value, agent->saved_controlling_mode);
+ break;
+
+ case PROP_FULL_MODE:
+@@ -1422,7 +1471,7 @@ nice_agent_set_property (
+ break;
+
+ case PROP_CONTROLLING_MODE:
+- agent->controlling_mode = g_value_get_boolean (value);
++ priv_update_controlling_mode (agent, g_value_get_boolean (value));
+ break;
+
+ case PROP_FULL_MODE:
+@@ -4930,6 +4979,11 @@ nice_agent_restart (
+ /* step: regenerate tie-breaker value */
+ priv_generate_tie_breaker (agent);
+
++ /* step: reset controlling mode from the property value */
++ agent->controlling_mode = agent->saved_controlling_mode;
++ nice_debug ("Agent %p : ICE restart, reset role to \"%s\".",
++ agent, agent->controlling_mode ? "controlling" : "controlled");
++
+ for (i = agent->streams; i; i = i->next) {
+ NiceStream *stream = i->data;
+
+diff --git a/tests/test-restart.c b/tests/test-restart.c
+index c2cbe9a..afc51b6 100644
+--- a/tests/test-restart.c
++++ b/tests/test-restart.c
+@@ -301,6 +301,11 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
+ nice_agent_set_remote_candidates (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP, cands);
+ cdes.addr = laddr_rtcp;
+ nice_agent_set_remote_candidates (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP, cands);
++ /* This role switch request will be effective after restart. We test
++ * here that the role cannot be externally modified after conncheck
++ * has started. */
++ g_object_set (G_OBJECT (ragent), "controlling-mode", TRUE, NULL);
++ g_assert (ragent->controlling_mode == FALSE);
+
+ g_debug ("test-restart: Set properties, next running mainloop until connectivity checks succeed...");
+
+@@ -329,10 +334,18 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
+ global_ragent_read = 0;
+ g_assert (nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678") == 16);
+
++ /* Both agent have a distinct role at the end of the conncheck */
++ g_assert (lagent->controlling_mode == TRUE);
++ g_assert (ragent->controlling_mode == FALSE);
+ /* step: restart agents, exchange updated credentials */
+ tie_breaker = ragent->tie_breaker;
+ nice_agent_restart (ragent);
+ g_assert (tie_breaker != ragent->tie_breaker);
++ /* This role switch of ragent should be done now, and both agents
++ * have now the same role, which should generate a role conflict
++ * resolution situation */
++ g_assert (lagent->controlling_mode == TRUE);
++ g_assert (ragent->controlling_mode == TRUE);
+ nice_agent_restart (lagent);
+ {
+ gchar *ufrag = NULL, *password = NULL;
+@@ -375,6 +388,8 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
+ /* note: verify binding requests were resent after restart */
+ g_assert (global_lagent_ibr_received == TRUE);
+ g_assert (global_ragent_ibr_received == TRUE);
++ /* note: verify that a role switch occured for one of the agents */
++ g_assert (ragent->controlling_mode != lagent->controlling_mode);
+
+ g_debug ("test-restart: Ran mainloop, removing streams...");
+
+--
+2.13.6
+
+
+From c63349894b3fe974494453a883dfb5ad05df5a46 Mon Sep 17 00:00:00 2001
+From: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu, 23 Nov 2017 18:31:31 +0100
+Subject: [PATCH 66/70] Makefile: really enable debug for tests
+
+Differential Revision: https://phabricator.freedesktop.org/D1888
+---
+ tests/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index b623764..e94822d 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -24,7 +24,7 @@ AM_CPPFLAGS = -DG_LOG_DOMAIN=\"libnice-tests\"
+
+ AM_TESTS_ENVIRONMENT = \
+ G_MESSAGES_DEBUG=all \
+- NICE_DEBUG=all;
++ NICE_DEBUG=all
+
+ COMMON_LDADD = $(top_builddir)/agent/libagent.la $(top_builddir)/socket/libsocket.la $(GLIB_LIBS) $(GUPNP_LIBS)
+
+--
+2.13.6
+
+
+From 17f30e4465efe9533799b02d6f95feeaf0f2748c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miguel=20Par=C3=ADs?= <mparisdiaz(a)gmail.com>
+Date: Wed, 8 Nov 2017 16:26:47 +0000
+Subject: [PATCH 67/70] conncheck: do not require that all streams have a
+ connection check list
+
+One or more streams might not have any connection check list if the
+number of streams differs from the peer agent.
+Differential Revision: https://phabricator.freedesktop.org/D1880
+---
+ agent/conncheck.c | 23 ----
+ tests/Makefile.am | 3 +
+ tests/test-different-number-streams.c | 208 ++++++++++++++++++++++++++++++++++
+ 3 files changed, 211 insertions(+), 23 deletions(-)
+ create mode 100644 tests/test-different-number-streams.c
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index e584c0e..beb43c3 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -402,23 +402,6 @@ priv_conn_check_find_next_frozen (GSList *conn_check_list)
+ }
+
+ /*
+- * Returns the number of check lists of the agent
+- */
+-static guint
+-priv_number_of_check_lists (NiceAgent *agent)
+-{
+- guint n = 0;
+- GSList *i;
+-
+- for (i = agent->streams; i ; i = i->next) {
+- NiceStream *stream = i->data;
+- if (stream->conncheck_list != NULL)
+- n++;
+- }
+- return n;
+-}
+-
+-/*
+ * Returns the number of active check lists of the agent
+ */
+ static guint
+@@ -1060,12 +1043,6 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ gboolean keep_timer_going = FALSE;
+ GSList *i, *j;
+
+- /* the conncheck really starts when we have built
+- * a connection check list for each stream
+- */
+- if (priv_number_of_check_lists (agent) < g_slist_length (agent->streams))
+- return TRUE;
+-
+ /* configure the initial state of the check lists of the agent
+ * as described in ICE spec, 5.7.4
+ *
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index e94822d..30d6f8e 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -46,6 +46,7 @@ check_PROGRAMS = \
+ test-socket-is-based-on \
+ test-priority \
+ test-fullmode \
++ test-different-number-streams \
+ test-restart \
+ test-fallback \
+ test-thread \
+@@ -114,6 +115,8 @@ test_mainloop_LDADD = $(COMMON_LDADD)
+
+ test_fullmode_LDADD = $(COMMON_LDADD)
+
++test_different_number_streams_LDADD = $(COMMON_LDADD)
++
+ test_restart_LDADD = $(COMMON_LDADD)
+
+ test_fallback_LDADD = $(COMMON_LDADD)
+diff --git a/tests/test-different-number-streams.c b/tests/test-different-number-streams.c
+new file mode 100644
+index 0000000..7fd4763
+--- /dev/null
++++ b/tests/test-different-number-streams.c
+@@ -0,0 +1,208 @@
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "agent.h"
++
++#include <stdlib.h>
++#include <string.h>
++
++#define ADD_2_STREAMS TRUE
++#define USE_SECOND_STREAM TRUE
++
++static GMainLoop *global_mainloop = NULL;
++
++static guint global_components_ready = 0;
++static guint global_components_ready_exit = 0;
++
++static gboolean timer_cb (gpointer pointer)
++{
++ g_debug ("test-different-number-streams:%s: %p", G_STRFUNC, pointer);
++
++ /* signal status via a global variable */
++
++ /* note: should not be reached, abort */
++ g_error ("ERROR: test has got stuck, aborting...");
++
++ return FALSE;
++}
++
++static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("%p: gathering done (stream_id: %u)", agent, stream_id);
++}
++
++static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
++{
++ g_debug ("%p: component state changed (stream_id: %u, component_id: %u, state: %s)",
++ agent, stream_id, component_id, nice_component_state_to_string (state));
++
++ if (state == NICE_COMPONENT_STATE_READY) {
++ global_components_ready++;
++ }
++
++ /* signal status via a global variable */
++ if (global_components_ready == global_components_ready_exit) {
++ g_debug ("Components ready/failed achieved. Stopping mailoop");
++ g_main_loop_quit (global_mainloop);
++ }
++}
++
++static void set_candidates (NiceAgent *from, guint from_stream,
++ NiceAgent *to, guint to_stream, guint component)
++{
++ GSList *cands = NULL, *i;
++
++ cands = nice_agent_get_local_candidates (from, from_stream, component);
++ nice_agent_set_remote_candidates (to, to_stream, component, cands);
++
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++}
++
++static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
++{
++ g_debug ("%p: recv (stream_id: %u, component_id: %u)", agent, stream_id, component_id);
++}
++
++int main (void)
++{
++ NiceAgent *lagent, *ragent;
++ guint timer_id;
++ guint ls_id, rs_id_1, rs_id_2;
++ gchar *lufrag = NULL, *lpassword = NULL;
++ gchar *rufrag1 = NULL, *rpassword1 = NULL, *rufrag2 = NULL, *rpassword2 = NULL;
++
++#ifdef G_OS_WIN32
++ WSADATA w;
++
++ WSAStartup(0x0202, &w);
++#endif
++
++ global_mainloop = g_main_loop_new (NULL, FALSE);
++
++ /* step: create the agents L and R */
++ lagent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_GOOGLE);
++ g_debug ("lagent: %p", lagent);
++ nice_agent_set_software (lagent, "test-different-number-streams, Left Agent");
++ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
++ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
++ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), NULL);
++ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), NULL);
++
++ ragent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_GOOGLE);
++ g_debug ("ragent: %p", ragent);
++ nice_agent_set_software (ragent, "test-different-number-streams, Right Agent");
++ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
++ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), NULL);
++ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), NULL);
++
++ /* step: add a timer to catch state changes triggered by signals */
++ timer_id = g_timeout_add (30000, timer_cb, NULL);
++
++ ls_id = nice_agent_add_stream (lagent, 2);
++ g_assert (ls_id > 0);
++ nice_agent_get_local_credentials(lagent, ls_id, &lufrag, &lpassword);
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++
++ global_components_ready_exit = 4;
++
++ if (ADD_2_STREAMS) {
++ rs_id_1 = nice_agent_add_stream (ragent, 2);
++ g_assert (rs_id_1 > 0);
++ nice_agent_get_local_credentials(ragent, rs_id_1, &rufrag1, &rpassword1);
++
++ rs_id_2 = nice_agent_add_stream (ragent, 2);
++ g_assert (rs_id_2 > 0);
++ nice_agent_get_local_credentials(ragent, rs_id_2, &rufrag2, &rpassword2);
++
++ nice_agent_set_remote_credentials (ragent, rs_id_2, lufrag, lpassword);
++ nice_agent_set_remote_credentials (lagent, ls_id, rufrag2, rpassword2);
++
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id_2) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id_1) == TRUE);
++
++ if (USE_SECOND_STREAM) {
++ set_candidates (ragent, rs_id_2, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id_2, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id_2, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id_2, NICE_COMPONENT_TYPE_RTCP);
++ } else {
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP);
++ }
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_2, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_2, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ } else {
++ rs_id_1 = nice_agent_add_stream (ragent, 2);
++ g_assert (rs_id_1 > 0);
++ nice_agent_get_local_credentials(ragent, rs_id_1, &rufrag1, &rpassword1);
++
++ nice_agent_set_remote_credentials (ragent, rs_id_1, lufrag, lpassword);
++ nice_agent_set_remote_credentials (lagent, ls_id, rufrag1, rpassword1);
++
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id_1) == TRUE);
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP);
++ }
++
++ /* step: run the mainloop until connectivity checks succeed
++ * (see timer_cb() above) */
++ g_main_loop_run (global_mainloop);
++
++ g_free (lufrag);
++ g_free (lpassword);
++ g_free (rufrag1);
++ g_free (rpassword1);
++ g_free (rufrag2);
++ g_free (rpassword2);
++ g_object_unref (lagent);
++ g_object_unref (ragent);
++
++ g_main_loop_unref (global_mainloop);
++ global_mainloop = NULL;
++
++ g_source_remove (timer_id);
++
++#ifdef G_OS_WIN32
++ WSACleanup();
++#endif
++
++ return 0;
++}
+--
+2.13.6
+
+
+From 59fcf95d505c3995f858b826d10cd48321ed383e Mon Sep 17 00:00:00 2001
+From: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
+Date: Mon, 27 Nov 2017 17:07:02 -0500
+Subject: [PATCH 68/70] turn: Add support for ALTERNATE_SERVER in OC2007
+ Compatibility
+
+The MS Office TURN servers will always return the MS_ALTERNATE_SERVER in
+allocation responses, and if they are not handled, we end up using the
+main turn server to send allocation requests that then get sent to the
+alternate server which will return the XOR_MAPPED_ADDRESS containing
+the IP address of the turn server that proxied the message instead of
+our own actual external IP.
+---
+ agent/conncheck.c | 14 ++++++++++++++
+ stun/usages/turn.c | 11 +++++++++++
+ stun/usages/turn.h | 4 ++++
+ 3 files changed, 29 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index beb43c3..229c8b1 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -3764,6 +3764,20 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ recv_realm = (uint8_t *) stun_message_find (resp,
+ STUN_ATTRIBUTE_REALM, &recv_realm_len);
+
++ if ((agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
++ agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
++ alternatelen != sizeof(alternate)) {
++ NiceAddress alternate_addr;
++
++ nice_address_set_from_sockaddr (&alternate_addr, &alternate.addr);
++
++ if (!nice_address_equal (&alternate_addr, &d->server)) {
++ nice_address_set_from_sockaddr (&d->server, &alternate.addr);
++ nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
++
++ d->pending = FALSE;
++ }
++ }
+ /* check for unauthorized error response */
+ if ((agent->compatibility == NICE_COMPATIBILITY_RFC5245 ||
+ agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
+diff --git a/stun/usages/turn.c b/stun/usages/turn.c
+index 3b94959..ec12642 100644
+--- a/stun/usages/turn.c
++++ b/stun/usages/turn.c
+@@ -300,6 +300,17 @@ StunUsageTurnReturn stun_usage_turn_process (StunMessage *msg,
+ stun_debug (" STUN error message received (code: %d)", code);
+
+ /* ALTERNATE-SERVER mechanism */
++ if (compatibility == STUN_USAGE_TURN_COMPATIBILITY_OC2007 &&
++ alternate_server && alternate_server_len &&
++ stun_message_find_addr (msg, STUN_ATTRIBUTE_MS_ALTERNATE_SERVER,
++ alternate_server,
++ alternate_server_len) == STUN_MESSAGE_RETURN_SUCCESS) {
++ stun_debug ("Found alternate server");
++ /* The ALTERNATE_SERVER will always be returned by the MS turn server.
++ * We need to check if the ALTERNATE_SERVER is the same as the current
++ * server to decide whether we need to switch servers or not.
++ */
++ }
+ if ((code / 100) == 3) {
+ if (alternate_server && alternate_server_len) {
+ if (stun_message_find_addr (msg, STUN_ATTRIBUTE_ALTERNATE_SERVER,
+diff --git a/stun/usages/turn.h b/stun/usages/turn.h
+index 7a2d4e6..83fa00a 100644
+--- a/stun/usages/turn.h
++++ b/stun/usages/turn.h
+@@ -256,6 +256,10 @@ size_t stun_usage_turn_create_permission (StunAgent *agent, StunMessage *msg,
+ * Allocate request, in case the currently used TURN server is requesting the use
+ * of an alternate server. This argument will only be filled if the return value
+ * of the function is #STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER
++ * In the case of @STUN_USAGE_TURN_COMPATIBILITY_OC2007 compatibility, the
++ * @alternate_server could be filled at any time, and should only be considered
++ * if the request was sent to a different server than the address returned
++ * in the @alternate_server field
+ * @alternate_server_len: The length of @alternate_server
+ * @bandwidth: A pointer to fill with the bandwidth the TURN server allocated us
+ * @lifetime: A pointer to fill with the lifetime of the allocation
+--
+2.13.6
+
+
+From 4172d48852ecd1c86cc7bd4665b23697603d1eed Mon Sep 17 00:00:00 2001
+From: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
+Date: Tue, 28 Nov 2017 15:14:11 -0500
+Subject: [PATCH 69/70] discovery: Increase discovery_unsched_items whenever we
+ restart a check
+
+The discovery_unsched_items is decremented every time a DiscoveryCandidate
+goes from non-pending to pending. So if we restart a check by setting
+pending to FALSE, we should re-increase the discovery_unsched_items.
+---
+ agent/conncheck.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 229c8b1..5b08311 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -3507,6 +3507,7 @@ static gboolean priv_map_reply_to_discovery_request (NiceAgent *agent, StunMessa
+ d->server = niceaddr;
+
+ d->pending = FALSE;
++ agent->discovery_unsched_items++;
+ } else if (res == STUN_USAGE_BIND_RETURN_SUCCESS) {
+ /* case: successful binding discovery, create a new local candidate */
+
+@@ -3648,6 +3649,7 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
+
+ d->pending = FALSE;
++ agent->discovery_unsched_items++;
+ } else if (res == STUN_USAGE_TURN_RETURN_RELAY_SUCCESS ||
+ res == STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS) {
+ /* case: successful allocate, create a new local candidate */
+@@ -3776,6 +3778,7 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
+
+ d->pending = FALSE;
++ agent->discovery_unsched_items++;
+ }
+ }
+ /* check for unauthorized error response */
+@@ -3798,6 +3801,7 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ d->stun_resp_msg.buffer = d->stun_resp_buffer;
+ d->stun_resp_msg.buffer_len = sizeof(d->stun_resp_buffer);
+ d->pending = FALSE;
++ agent->discovery_unsched_items++;
+ } else {
+ /* case: a real unauthorized error */
+ d->stun_message.buffer = NULL;
+--
+2.13.6
+
+
+From fb2f1f77a31baa91968fc81c205f980b6913f403 Mon Sep 17 00:00:00 2001
+From: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
+Date: Tue, 28 Nov 2017 16:05:18 -0500
+Subject: [PATCH 70/70] conncheck: handle alternate-server for turn relays
+ differently
+
+If a relay gives us an alternate-server, we need to cancel and reset
+every candidate discovery attempt that uses the same server, to avoid
+ending up with one component on one server and the other component on
+another server (causing relay candidates with mismatched foundations).
+---
+ agent/conncheck.c | 56 ++++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 43 insertions(+), 13 deletions(-)
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index 5b08311..c8a4edf 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -3592,6 +3592,41 @@ priv_add_new_turn_refresh (CandidateDiscovery *cdisco, NiceCandidate *relay_cand
+ return cand;
+ }
+
++static void priv_handle_turn_alternate_server (NiceAgent *agent,
++ CandidateDiscovery *disco, NiceAddress server, NiceAddress alternate)
++{
++ /* We need to cancel and reset all candidate discovery turn for the same
++ stream and type if there is an alternate server. Otherwise, we might end up
++ with two relay components on different servers, creating candidates with
++ unique foundations that only contain one component.
++ */
++ GSList *i;
++
++ for (i = agent->discovery_list; i; i = i->next) {
++ CandidateDiscovery *d = i->data;
++
++ if (!d->done &&
++ d->type == disco->type &&
++ d->stream == disco->stream &&
++ d->turn->type == disco->turn->type &&
++ nice_address_equal (&d->server, &server)) {
++ gchar ip[INET6_ADDRSTRLEN];
++ // Cancel the pending request to avoid a race condition with another
++ // component responding with another altenrate-server
++ d->stun_message.buffer = NULL;
++ d->stun_message.buffer_len = 0;
++
++ nice_address_to_string (&server, ip);
++ nice_debug ("Agent %p : Cancelling and setting alternate server %s for "
++ "CandidateDiscovery %p", agent, ip, d);
++ d->server = alternate;
++ d->turn->server = alternate;
++ d->pending = FALSE;
++ agent->discovery_unsched_items++;
++ }
++ }
++}
++
+ /*
+ * Tries to match STUN reply in 'buf' to an existing STUN discovery
+ * transaction. If found, a reply is sent.
+@@ -3644,12 +3679,11 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ agent, d, (int)res);
+
+ if (res == STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER) {
+- /* handle alternate server */
+- nice_address_set_from_sockaddr (&d->server, &alternate.addr);
+- nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
++ NiceAddress addr;
+
+- d->pending = FALSE;
+- agent->discovery_unsched_items++;
++ /* handle alternate server */
++ nice_address_set_from_sockaddr (&addr, &alternate.addr);
++ priv_handle_turn_alternate_server (agent, d, d->server, addr);
+ } else if (res == STUN_USAGE_TURN_RETURN_RELAY_SUCCESS ||
+ res == STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS) {
+ /* case: successful allocate, create a new local candidate */
+@@ -3769,16 +3803,12 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ if ((agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
+ agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
+ alternatelen != sizeof(alternate)) {
+- NiceAddress alternate_addr;
+-
+- nice_address_set_from_sockaddr (&alternate_addr, &alternate.addr);
++ NiceAddress addr;
+
+- if (!nice_address_equal (&alternate_addr, &d->server)) {
+- nice_address_set_from_sockaddr (&d->server, &alternate.addr);
+- nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
++ nice_address_set_from_sockaddr (&addr, &alternate.addr);
+
+- d->pending = FALSE;
+- agent->discovery_unsched_items++;
++ if (!nice_address_equal (&addr, &d->server)) {
++ priv_handle_turn_alternate_server (agent, d, d->server, addr);
+ }
+ }
+ /* check for unauthorized error response */
+--
+2.13.6
+
diff --git a/libnice.spec b/libnice.spec
index e5944fc..63e60a2 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -10,7 +10,7 @@ Group: System Environment/Libraries
License: LGPLv2 and MPLv1.1
URL: https://nice.freedesktop.org/wiki/
Source0: https://nice.freedesktop.org/releases/%{name}-%{version}.tar.gz
-Patch1: libnice-0.1.14-20171128.patch
+Patch1: libnice-0.1.14-70-gfb2f1f7.patch
BuildRequires: autoconf
BuildRequires: automake
commit 5ecb7654163d99321b6206e83dca01578775405d
Author: Stefan Becker <chemobejk(a)gmail.com>
Date: Mon Jan 29 17:56:32 2018 +0200
update to 0.1.14-70-gfb2f1f7
diff --git a/libnice-0.1.14-20171128.patch b/libnice-0.1.14-20171128.patch
new file mode 100644
index 0000000..ff2d2ae
--- /dev/null
+++ b/libnice-0.1.14-20171128.patch
@@ -0,0 +1,6711 @@
+commit fb2f1f77a31baa91968fc81c205f980b6913f403
+Author: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
+Date: Tue Nov 28 16:05:18 2017 -0500
+
+ conncheck: handle alternate-server for turn relays differently
+
+ If a relay gives us an alternate-server, we need to cancel and reset
+ every candidate discovery attempt that uses the same server, to avoid
+ ending up with one component on one server and the other component on
+ another server (causing relay candidates with mismatched foundations).
+
+commit 4172d48852ecd1c86cc7bd4665b23697603d1eed
+Author: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
+Date: Tue Nov 28 15:14:11 2017 -0500
+
+ discovery: Increase discovery_unsched_items whenever we restart a check
+
+ The discovery_unsched_items is decremented every time a DiscoveryCandidate
+ goes from non-pending to pending. So if we restart a check by setting
+ pending to FALSE, we should re-increase the discovery_unsched_items.
+
+commit 59fcf95d505c3995f858b826d10cd48321ed383e
+Author: Youness Alaoui <kakaroto(a)kakaroto.homelinux.net>
+Date: Mon Nov 27 17:07:02 2017 -0500
+
+ turn: Add support for ALTERNATE_SERVER in OC2007 Compatibility
+
+ The MS Office TURN servers will always return the MS_ALTERNATE_SERVER in
+ allocation responses, and if they are not handled, we end up using the
+ main turn server to send allocation requests that then get sent to the
+ alternate server which will return the XOR_MAPPED_ADDRESS containing
+ the IP address of the turn server that proxied the message instead of
+ our own actual external IP.
+
+commit 17f30e4465efe9533799b02d6f95feeaf0f2748c
+Author: Miguel París <mparisdiaz(a)gmail.com>
+Date: Wed Nov 8 16:26:47 2017 +0000
+
+ conncheck: do not require that all streams have a connection check list
+
+ One or more streams might not have any connection check list if the
+ number of streams differs from the peer agent.
+ Differential Revision: https://phabricator.freedesktop.org/D1880
+
+commit c63349894b3fe974494453a883dfb5ad05df5a46
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu Nov 23 18:31:31 2017 +0100
+
+ Makefile: really enable debug for tests
+
+ Differential Revision: https://phabricator.freedesktop.org/D1888
+
+commit 02216a6766caccb652387d5ee19686149eedbc93
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Nov 21 15:12:45 2017 +0100
+
+ agent: prevent external role change while conncheck is running
+
+ With this patch, we stash the controlling mode property change, and
+ apply it safely, when it won't interfere with an ongoing conncheck
+ running. According to RFC5245, sect 5.2. "Determining Role", the role
+ is determined for a session, and persists unless an ICE is restarted.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1887
+
+commit fbdccf0c2787ebdc65fe13ac64bd25c829ea7972
+Author: Philip Withnall <withnall(a)endlessm.com>
+Date: Thu Aug 3 12:20:32 2017 +0100
+
+ stun: Fix FD leak in test/utility code
+
+ https://phabricator.freedesktop.org/T7798
+
+ Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+ Reviewed-by: Olivier Crête <olivier.crete(a)collabora.com>
+ Differential Revision: https://phabricator.freedesktop.org/D1819
+
+commit 4c4834ab634f735145c8f758a22cbdd9cab79bac
+Author: Philip Withnall <withnall(a)endlessm.com>
+Date: Tue Sep 12 13:23:53 2017 +0100
+
+ tests: Fix agent.h header inclusion in test-gstreamer.c
+
+ Spotted by Lukas Gradl on the mailing list.
+
+ Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+
+commit 1a1803a45778000720c93d91060cedeb19124a27
+Author: Philip Withnall <withnall(a)endlessm.com>
+Date: Tue Sep 12 13:23:31 2017 +0100
+
+ tests: Fix copyright dates in test-gstreamer.c
+
+ This code is not 1000 years old.
+
+ Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+
+commit 14102d44449d2eb4148588ce54fa897fa13b87ad
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Sun Jul 2 16:02:09 2017 +0200
+
+ conncheck: change state before updating nominated pairs
+
+ When a pair is nominated while in state failed, we first move
+ back to state connecting, then we update the selected pair, and
+ finally we move to state connected.
+
+commit 72dd26a3368d3506fe8faca7067a02784fb5f0fd
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Wed Jun 28 12:06:48 2017 +0200
+
+ conncheck: forgot to put a pair in triggered check list
+
+ When a new pair is created from an unknown remote candidate, it
+ should be enqueue for a triggered check, to allow it to be marked
+ as nominated on response arrival in priv_mark_pair_nominated().
+ Creating it in waiting state is not sufficient since the update
+ in priv_mark_pair_nominated() from previous commits.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1763
+
+commit 6fe64fdbc53ab87dffd79972f492665cff14c0a0
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Jun 27 11:01:14 2017 +0200
+
+ conncheck: update the state of triggered checks pairs
+
+ With this patch, we fix an ambiguity of some parts of the spec, when
+ the document refers to in-progress pairs, that also concern pairs in
+ the triggered checks list.
+
+ The first cast is in section 7.1.2.5, "Updating the Nominated Flag",
+ when the in-progress pair will be nominated on response arrival. This is
+ handled in function priv_mark_pair_nominated(), when a pair is put to
+ the triggered check list in reaction to a matching inbound stun request.
+ Such a pair in priv_mark_pair_nominated() will _always_ be in the
+ triggered check list, from the previously called function
+ priv_schedule_triggered_check().
+
+ The second case is in section 8.1.2, "Updating State" when an in-progress
+ pair stops its retransmission when another pair of higher priority is
+ already nominated. This is handled by function priv_prune_pending_checks().
+
+ Until now, pairs enqueued in the triggered check list move transiently
+ to state waiting, according to 7.2.1.4. But this state causes wrong
+ decisions in the two previous cases, because such pairs should in fact
+ rather be considered "like in-progress", to avoid discarding them
+ inadvertantly.
+
+ This patch update the state of the triggered check list
+ pairs to in-progress. It allows to remove exception handling cited
+ above: the code is a bit more simple, and allows some refactoring
+ in priv_mark_pair_nominated() between RFC and compatibility modes.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1762
+
+commit 36f306f4a95f1c2b3e9c584b5a645a78e231c020
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Jun 26 21:41:44 2017 +0200
+
+ conncheck: support several stun requests per pair
+
+ This patch should improve the reliabily of the connection check by
+ keeping the record of several simultaneous ongoing stun requests per
+ pair. A new stun request on an in-progress pair typically is caused by
+ in inbound stun request from the peer on this same pair. This is named
+ "Triggered Checks" in the spec. When this situation arises, it is fair
+ to handle these two stun requests simultaneously, the triggered check,
+ and the initial ordinary check, since both can potentially succeed.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1761
+
+commit e860948b5fe3a791119957f26045b8f5159baeff
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Jun 26 21:06:36 2017 +0200
+
+ conncheck: use stun_timer_remainder less frequently
+
+ We try to use stun_timer_remainder() less frequently, particularily
+ in the debug messages, and favour of the next_tick value associated
+ to the pair.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1760
+
+commit ce33747e6fc9ca59ea22d54e3b5a9a67b69d8141
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Jun 26 20:41:49 2017 +0200
+
+ conncheck: make debug sentences more accurate
+
+ We add a helper function to print the pair state in-extenso.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1759
+
+commit 25be00271a4c8c684a2d435d29ae0811dbf5e21c
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Jun 26 20:36:35 2017 +0200
+
+ conncheck: reorder some chunks of code
+
+ With this patch we simplify the levels of code indentation.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1758
+
+commit 5a42089aeb2dbbb52d820cd1b6efdfcfbe9b055e
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Sep 5 14:50:29 2017 -0400
+
+ agent: Set error if it isn't set
+
+commit dbaf8f5ccd76089e340883887c7e08e6c04de80a
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 13:22:21 2016 +0200
+
+ conncheck: improve role conflict debug
+
+ This patch displays explicitely the controlling or controlled
+ role of the agent.
+
+ Differential Revision: https://phabricator.freedesktop.org/D874
+
+commit 9f800d3597767855accccc592c34bc4e945f5bd5
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Wed Jun 21 20:42:57 2017 -0400
+
+ configure: Remove -Wswitch-enum
+
+ Creates useless warnings when other libraries change.
+
+ https://phabricator.freedesktop.org/T7770
+
+commit 63d273cea42def3567701ad9feab91f63cf9345f
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Thu Feb 11 22:16:48 2016 -0500
+
+ component: Use non-GClosure dummy callbacks
+
+ GClosures are not that cheap to setup
+
+commit 2c50d73b82f2ec2422a8e0ea393194486c193c64
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Wed Feb 10 23:20:39 2016 -0500
+
+ agent: Don't crash if recv cancelled without a GError
+
+commit dcb0d647174416a292492f8deca86f83a2ef124c
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Wed Jun 21 17:07:17 2017 -0400
+
+ Repleace UNRELEASED with 0.1.15
+
+commit e3ddaa285e389baf3f26cfb6964919718a8f6a00
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Wed Jun 21 16:55:32 2017 -0400
+
+ agent: Adjust the nice_agent_new_full() to use flags
+
+ This makes it easier to read and more extensible.
+
+commit c7a5a92b66f9b83baf2aa446966bdfb2cf39ecd1
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Sun Jun 18 10:12:58 2017 +0200
+
+ agent: remove spurious newlines
+
+ Differential Revision: https://phabricator.freedesktop.org/D1756
+
+commit b4b8d6628c8c5d4f10af0101f846db4938a3f6c4
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Sun May 28 22:20:36 2017 +0200
+
+ stun: fix gcc7 implicit fallthrough warning
+
+ Differential Revision: https://phabricator.freedesktop.org/D1754
+
+commit 195db6b344fc4f9fadc39419dfeec2fc14b23fac
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Fri Jul 15 23:31:42 2016 +0200
+
+ agent: add new pairs only for gathering streams
+
+ At the end of the local candidate gathering process, we only create new
+ pairs for streams that are in gathering state.
+
+ Other stream that may be in ready state for example, due to a
+ previously succeeded conncheck process, may have accumulated some
+ couples (local,remote) candidates that have not resulted in the creation
+ a new pair during this previous conncheck process, and we don't want
+ these new pairs to be added now, because it would generate unneeded
+ transition changes for a stream unconcerned by this gathering.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1755
+
+commit 07366a5bca7e4818b8df29d9c7c220da8f752547
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Jun 21 21:47:42 2016 +0200
+
+ conncheck: fix the component failed transition
+
+ This patch fixes the transition of a component from connecting to
+ failed, that previously occured due to the propagation of the
+ keep_timer_going variable, and to the final call to function
+ priv_update_check_list_failed_components(), after the global agent
+ timer was stopped.
+
+ Previously, the code almost never entered to failed state, because the
+ timer was going one, as long as the number of nominated pair was not
+ enough, and as long as there were valid pairs not yet nominated. Even
+ if all pair timers were over.
+
+ The definition of the Failed state of a conncheck list is somewhat
+ contradictory in the spec, depending on weather you read :
+
+ * sect 5.7.4. "Computing States",
+ "Failed: In this state, the ICE checks have not completed successfully
+ for this media stream."
+
+ or
+
+ * sect 7.1.3.3. "Check List and Timer State Updates",
+ "If all of the pairs in the check list are now either in the Failed or
+ Succeeded state: If there is not a pair in the valid list for each
+ component of the media stream, the state of the check list is set to
+ Failed."
+
+ Our understanding of the ICE spec is that, the proper way to enter failed
+ state instead in when all connchecks have no longer in-progress pairs.
+ All pairs are either in state succeeded, discovered, or failed. No timer
+ is still running, and we have no hope that the conncheck list changes
+ again, except if an unexpected STUN packet arrives later. All pairs in
+ frozen state is a special case, that is handled separately (sect
+ 7.1.3.3).
+
+ A special grace delay is added before declaring a component in state
+ Failed. This delay is not part of the RFC, and it is aimed to limit the
+ cases when a conncheck list is reactivated just after it's been declared
+ failed, causing a user visible transition from connecting to failed, and
+ back from failed to connecting again. This is also required by the test
+ suite, that counts exactly the number of time each state is entered, and
+ doesn't expect these transcient failed states to happen (frequent due to
+ the nature of the testsuite, less frequent in real life).
+
+ Differential Revision: https://phabricator.freedesktop.org/D1111
+
+commit 95f8805eb7b77755337e28daf1f134587d42b35f
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu Jun 16 17:32:39 2016 +0200
+
+ conncheck: remove cancelled pair state
+
+ Pairs with the state NICE_CHECK_CANCELLED are the pairs targeted for
+ removal after the nomination of a pair with an higher priority,
+ described in Section 8.1.2 "Updating States", item 2 of RFC 5245. They
+ include also pairs that overflow the conncheck list size, but this is a
+ somewhat more marginal situation. So we are mainly interested in the
+ first use case of this state.
+
+ This state mixes two different situations, that deserve a distinct
+ handling : on one side, there are waiting or frozen pairs that must be
+ removed, this is an immediate action that doesn't need a dedicated state
+ for that. And on the other side, there are in-progress pairs that
+ should no longer be retransmitted, because another pair with a higher
+ priority has already been nominated.
+
+ This patch removes the cancelled state, and adds a flag
+ retransmit_on_timeout to deal with this last situation. Note that this
+ case should not generate a triggered check, as per described in section
+ 7.2.1.4, when the state of the pair is In-Progress or Failed, since this
+ pair of lower priority has no hope to replace the nominated one.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1114
+
+commit d516fca1b0e0a6606afec797bdc0690104e779a9
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Jun 14 21:32:26 2016 +0200
+
+ conncheck: adjust recheck on timeout strategy
+
+ The pair recheck on timeout can easily cause repetitive rechecks in
+ a ping-pong effect, if both peers with the same behaviour try to
+ check the same pair almost simultaneously, and if the network rtt
+ is greater than the initial timer rto. The reply to the initial
+ stun request may arrive after the in-progress conncheck
+ cancellation (described in RFC 5245, sect 7.2.1.4). Cancellation
+ creates a new stun request, and forgets the initial one.
+ The conncheck timer is restarted with the same initial value,
+ so the same situation happens again later.
+
+ We choose to avoid resetting the timer in such situation. After enough
+ retransmissions, the timeout delay, that doubles after each timeout,
+ becomes longer than the rtt, and the stun reply can be handled.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1115
+
+commit f19d209decac432a1597d84c3d5809d2208f7457
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Jun 14 21:20:49 2016 +0200
+
+ conncheck: do not recheck a just succeeded pair
+
+ We cancel the potential in-progress transaction cancellation, caused by
+ sect 7.2.1.4 "Triggered Checks", when we receive a valid reply before
+ transmission timeout, or just after timeout, when the pair is
+ temporarily put on the triggered check list on the way to be
+ rechecked. This situation is not covered by the RFC 5245.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1119
+
+commit 59fe48517c0b7db77b99183d31fdd84b55adb5d4
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Jun 14 21:12:16 2016 +0200
+
+ conncheck: fix a state transition case
+
+ When a new stun request hits a valid pair, of a failed component, we may
+ have a transition from state failed to connected. In this situation, we
+ do a logical progression failed -> connecting -> connected, like we do
+ in function priv_update_check_list_state_for_ready()
+
+ Similarily, when a new stun request hits a failed pair, of a failed
+ component, triggering a new conncheck for this pair may also cause the
+ component state to move back from failed to connecting state.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1118
+
+commit 6a512b6eca9603ce8bf3ed0814fd314684c66ea7
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Jun 14 21:04:49 2016 +0200
+
+ conncheck: try to change earlier to state ready
+
+ We check if we can move from state connected to ready just
+ after a pair expired its retransmission count. This pair
+ will be marked failed, and will no longer be in-progress.
+ The number of in-progress dropping down to zero is one
+ of the conditions needed to make the transition to ready,
+ per component (and not globally as it's the case in other
+ locations where this check function is called).
+
+ Differential Revision: https://phabricator.freedesktop.org/D1117
+
+commit 8fa648a15a6700d08165fe97a09f5c068abae1e6
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Apr 11 13:13:51 2016 +0200
+
+ conncheck: dont cancel a pair for triggered check
+
+ This patch adds another supplementary "corner" case, not covered by the
+ ICE spec, sect 8.1.2, "Updating States". A pair in waiting state and in
+ the triggered check list should be considered like an in-progress pair,
+ and cancelled only if its priority is lower than the priority of the
+ nominated pair. This is required in some aggressive nomination
+ situations for both peers to select the same pair, having the highest
+ priority.
+
+ Differential Revision: https://phabricator.freedesktop.org/D933
+
+commit 11d4e37a030eb144a355dc26c705ef5aa5a975a7
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Fri Apr 1 17:31:44 2016 +0200
+
+ conncheck: remove a useless pair recheck
+
+ This exception to the ICE spec is no longer needed: when a pair is in
+ the succeeded state, there is no needed to recheck it again upon
+ reception of an incoming stun request on it.
+
+ Differential Revision: https://phabricator.freedesktop.org/D884
+
+commit 25b3eeec70b4e8e3b2154a18cdc8c5604f572012
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 12:56:28 2016 +0200
+
+ conncheck: update the pair state in triggered check list
+
+ With this patch, we update the state of the pair to waiting when
+ it is put in the triggered check queue. We also take care to call
+ priv_schedule_triggered_check() before priv_mark_pair_nominated()
+ so a pair to be rechecked and put on the triggered check queue
+ will have a unique state to be tested in the following call to
+ priv_mark_pair_nominated() when evaluating its nomination attributes.
+
+ Differential Revision: https://phabricator.freedesktop.org/D883
+
+commit afd8d41bb34afb3864e838ef79026ae4ef15c0d4
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 13:32:49 2016 +0200
+
+ conncheck: new pairs never have the nominated flag preset
+
+ This patch disables the possibility to set the nominated flag of a
+ candidate pair at creation time. This possibility was used when a new
+ pair is created from a new peer reflexive remote candidate, when the
+ agent is in controlled mode, and an stun request with USE-CANDIDATE is
+ received. In this case, since previous commit "conncheck: fix a
+ nomination corner case", we set the nominated flag when the stun
+ response of this new pair will arrive, and not before. Consequently,
+ this flag is no longer required when the pair is created.
+
+ Differential Revision: https://phabricator.freedesktop.org/D881
+
+commit 3916b8bcbf7e78e1dcb6b77882075c2c22719b4e
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 13:30:04 2016 +0200
+
+ conncheck: fix a nomination corner case
+
+ This patch add two supplementary cases, not covered by the ICE spec,
+ sect 7.2.1.5 "Updating the Nominated Flag" when a controlled agent
+ receives a STUN request with the USE-CANDIDATE flag, for a pair that is
+ in the waiting state. We consider that this case is similar to the
+ in-progress state, and should be handled in the same way. We also accept
+ when the pair is in frozen state. This latter case happens in the
+ new-dribble test, when an agent replays incoming early connchecks.
+
+ Differential Revision: https://phabricator.freedesktop.org/D880
+
+commit 9103a5f2e184211fc160d1d3070ce4d043c71ff0
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 19 18:16:26 2016 +0200
+
+ conncheck: use the right pair when retriggering a check
+
+ This patch completes the previous patch by adding a link back from the
+ discovered pair, to the parent pair that generated this check. This link
+ is needed by the ICE spec, to comply with section 8.1.1.1, "Regular
+ nomination", where the check to be retriggered is the initial check that
+ caused the discovery of the valid pair. When the valid pair is a
+ peer-reflexive pair, the retriggered check must target the succeeded
+ pair, and not the valid discovered pair.
+
+ Differential Revision: https://phabricator.freedesktop.org/D879
+
+commit 72ee528f7fdf82fb1a44958c18a0d4d5055d2d1a
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 13:25:16 2016 +0200
+
+ conncheck: link succeeded and discovered pairs
+
+ When the agent has the role of the stun server, is in controlled mode,
+ and receives a pair with the "use-candidate" attribute set, it must find
+ a matching succeded or discovered pair in its conncheck list. This is
+ described in ICE spec 7.2.1.5, "Updating the Nominated Flag", item #1.
+ When a matching pair is in succeeded state, the agent must nominate the
+ valid pair (a discovered pair) constructed from section 7.1.3.2.2,
+ that's been created from this succeeded one. To make this lookup, we
+ introduce a new "discovered_pair" member of the CandidateCheckPair
+ struct, that links the succeeded pair, and its discovered pair
+ if any.
+
+ Differential Revision: https://phabricator.freedesktop.org/D878
+
+commit 2fd7808419f459d5f6e97701ca6a350ddee6b7f2
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 19 17:59:27 2016 +0200
+
+ conncheck: improve triggered check of in-progress pairs
+
+ This patch update the way triggered checks of in-progress pairs are
+ handled, according to ICE spec, section 7.2.1.4. Previously the same
+ connection check was retransmitted with an updated timeout. This causes
+ problems when a controlling role switch occurs in this time frame.
+ This is the reason why a new connection check must be generated
+ reflecting the updated role. We introduce a new flag "recheck_on_timeout"
+ in the pair indicating that the pair must be rechecked at the next timer
+ expiration.
+
+ Differential Revision: https://phabricator.freedesktop.org/D875
+
+commit ead3453d04fc70865d176ab073636f8b9078cbbc
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 13:20:38 2016 +0200
+
+ conncheck: invoke the debug dump in more places
+
+ Differential Revision: https://phabricator.freedesktop.org/D1123
+
+commit 15c0546f624113b8c0546a1f883a48bff7020f1b
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 19 17:06:32 2016 +0200
+
+ conncheck: improve the selection of the pairs to be checked
+
+ This patch aims to implement more closely the algorithm described
+ in RFC 5245 indicating how pairs are transitionned from state Frozen
+ to Waiting. This is described in 7.1.3.2 when a check succeeded, and
+ correspond to modifications in function priv_conn_check_unfreeze_related().
+ This is also described in 5.7.4 when defining the initial state of the
+ pairs in a conncheck, and correspond to modifications in function
+ priv_conn_check_unfreeze_next().
+
+ This patch introduces the notion of active and frozen check list. It
+ allows us to define the timer restranmission delay as described in 16.1.
+
+ Another modification in priv_conn_check_tick_unlocked() is that every
+ stream in handled consecutively, and in an independant way. The pacing
+ was previously of a single STUN request emitted per callback, it is now
+ of a triggered check per callback OR a single STUN per callback AND per
+ stream per callback.
+
+ The description of ordinary checks per stream in 5.8 is detailled in
+ function priv_conn_check_tick_stream(), and a remaining of the code
+ used to nominate a pair by the controlling agent is put in a dedicated
+ function priv_conn_check_tick_stream_nominate()
+
+ Differential Revision: https://phabricator.freedesktop.org/D813
+
+commit 58d061df8f5425dc1add9c6030a2f891ebda4616
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Mar 7 16:35:09 2016 +0100
+
+ conncheck: update pair valid property selectively
+
+ With this patch, we fix a corner case when the succeeded pair is a
+ peer-reflexive candidate pair, that already has been discovered
+ previously, In this case, the current pair -p- should not be marked
+ valid, because the valid flag is already set on the discovered pair.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1124
+
+commit 0636f9addc041cf93c4ff4eaa351b1768d48a32e
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 19 13:12:48 2016 +0200
+
+ conncheck: implement ice regular nomination method
+
+ This patch implements Regular Nomation as described in RFC5245
+ 8.1.1.1. The controlling agent lets valid pairs accumulate, and
+ decides which pair to recheck with the use-candidate attribute set.
+ priv_mark_pair_nominated() follows 7.2.1.5, to update the nominated
+ pair when acting as a STUN server, and
+ priv_map_reply_to_conn_check_request() implements 7.1.3.2.4 to
+ update the nominated pair when acting as a STUN client. A new
+ property is also added to the agent to control the nomination
+ mode, which can be regular of aggressive, with default value
+ set to aggressive.
+
+ Two new flags are introduced in the CandidateCheckPair structure:
+
+ - use_candidate_on_next_check indicates the STUN client to add the
+ use-candidate attribute when the pair will be checked. At this
+ time, the nominated flag has not been set on this pair yet.
+
+ - mark_nominated_on_response_arrival indicates the STUN server
+ to nominate the pair when its succesfull response to a
+ previous triggered check will arrive (7.2.1.5, item #2)
+
+ Differential Revision: https://phabricator.freedesktop.org/D811
+
+commit a602ff57aae6a6afdeab843954c48e6fb5d82d31
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 12 13:02:45 2016 +0200
+
+ conncheck: fix pair state transition when successful response is received
+
+ According the ICE RFC 5245, 7.1.3.2.3, the pair that *generated* a
+ successful check should go to state succeeded, not only the valid
+ pair built in section 7.1.3.2.2.
+
+ Differential Revision: https://phabricator.freedesktop.org/D810
+
+commit 3a58ba6120b188d78c5709e0349c0346bfa21c1a
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Feb 1 11:10:21 2016 +0100
+
+ conncheck: peer reflexive candidates are not paired
+
+ This patch makes the code compliant with ICE RFC, 7.2.1.3 "Learning
+ Peer Reflexive Candidates" and 7.1.3.2.1 "Discovering Peer Reflexive
+ Candidates", where discovered candidates do not cause the creation
+ of new pairs to be checked.
+
+ Differential Revision: https://phabricator.freedesktop.org/D805
+
+commit 7a2c1edf502849a868b6f1026e8e2c343dee4ded
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Mon Jun 6 22:24:50 2016 +0200
+
+ conncheck: update selected pair when nominated flag is set
+
+ This modifies commit 8f1f615. It is better focused to update the
+ selected pair just after its nominated flag has been set. We also keep
+ the code homogeneous with other places, where the call to
+ priv_update_selected_pair() immediately follows the setting of
+ pair->nominated. Moreover in priv_update_check_list_state_for_ready(),
+ we would call priv_update_selected_pair() more times that necessary when
+ iterating on all nominated pairs.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1125
+
+commit 8bb210c5af4bcaf342d7fa4fef6034269e976532
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu Jun 9 23:28:43 2016 +0200
+
+ stun timer: make properties for stun timer tunables
+
+ Three STUN binding request properties should be customisable. RFC 5245
+ describes the retransmission timer of the STUN transaction 'RTO', and
+ RFC 5389 describes the number of retransmissions to send until a
+ response is received 'Rc'. The third property is the 'RTO' when
+ a reliable connection is used.
+
+ RFC 5389 introduces a supplementary property 'Rm' as a multiplier used
+ to compute the final timeout RTO * Rm. However, this property is not
+ added in libnice, because this would require breaking the public API for
+ STUN. Currently, our STUN implementation hardcodes a division by two for
+ this final timeout.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1109
+
+commit 80c613699786567fd93db74377138600794a86e0
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Thu Jun 8 16:34:21 2017 -0400
+
+ agent: Use base_addr to generate rport in SDP
+
+ Reported by Capricornus (zhushengliang)
+
+ https://phabricator.freedesktop.org/T7763
+
+commit b4abda09c79e4ce372a3771300abf568c85c7ff5
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu Apr 21 18:18:59 2016 +0200
+
+ interfaces: ignore predefined network interfaces
+
+ Some interfaces, like the one managed by libvirtd to provide a network
+ bridge to locally hosted virtual machines, can be completely ignored
+ when gathering ICE candidates. The motivation for adding this
+ possibility is that, ignoring them doesn't remove capabilities, and
+ improves the overall speed of the connection check method, by reducing
+ the number of pairs to be tested. This patch adds the possibility to
+ define such interfaces in the configuration script.
+
+ Differential Revision: https://phabricator.freedesktop.org/D948
+
+commit d5446a72233eab8501be0b3fb9060c8be3ba034b
+Author: Philip Withnall <withnall(a)endlessm.com>
+Date: Mon May 1 08:51:40 2017 +0100
+
+ examples: Stop installing the examples
+
+ There’s no point in installing them; their benefit is in providing
+ example code to developers.
+
+ Debian doesn’t package them; Fedora packages them in a separate
+ subpackage which will have to disappear.
+
+ Signed-off-by: Philip Withnall <withnall(a)endlessm.com>
+ Reviewed-by: Olivier Crête <olivier.crete(a)collabora.com>
+ Differential Revision: https://phabricator.freedesktop.org/D1737
+
+commit 0a2cb0a9b14a5a1a4b01ba68ab2e5a2aa965f342
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Tue Apr 5 21:32:39 2016 +0200
+
+ agent: do not create a GSource for UDP TURN socket
+
+ With this patch, we don't create a new GSource for udp-turn socket,
+ because it would duplicate the packets already received on the base UDP
+ socket, as the underlying GSocket is the same. This is a race condition,
+ because an UDP packet arriving on the base socket, may randomly be
+ handled by the GSource callback created for the base socket (udp-bsd) of
+ the callback created for the udp-turn socket. Moreover this callback
+ already knows how to parse UDP datagrams received from a known turn
+ server.
+
+ This patch also prevents a subtle bug, when a STUN request is received
+ directly from a peer, is handled by the udp turn socket. If the agent
+ already has a valid permission for this remote candidate, established
+ for another pair, it will happily send the STUN reply through the turn
+ relay. This generates a source address mismatch on the peer agent, when
+ it'll receive the STUN response from the turn relay instead of the
+ initial address the request has been sent to.
+
+ Differential Revision: https://phabricator.freedesktop.org/D932
+
+commit f6f704c5e8d2193bc67ba2b697c77694e1698c43
+Author: Fabrice Bellet <fabrice(a)bellet.info>
+Date: Thu Jun 9 22:22:33 2016 +0200
+
+ stun timer: fix timeout of the last retransmission
+
+ According to RFC 5389, section 7.2.1, a special timeout is applied to
+ the last retransmission (Rm * RTO), with Rm default value of 16, instead
+ of (64 * RTO), 2^6 when the number of transmissions Rc is set to 7.
+
+ As spotted by Olivier Crete, stun_timer_* is a public API, that cannot
+ be changed, and the initial delay (RTO) is not preserved in the
+ stun_timer_s struct. So we use a hack that implicitely guess Rm from the
+ number of transmissions Rc, by generalizing the default value of the
+ spec for Rm and Rc to other values of Rc passed in stun_timer_start(
+
+ According to the spec, with the default value of Rc=7, the last delay
+ should be (64 * RTO), and it is instead (16 * RTO). So the last delay
+ can be computed by dividing the penultimate delay by two, instead of
+ multiplying it by two.
+
+ Differential Revision: https://phabricator.freedesktop.org/D1108
+
+commit b0538d8c51f65019867b56a45cf90a70bef38f01
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 11 18:31:21 2017 -0400
+
+ agent: Ignore remote candidate of non-accepted types
+
+ If we disable ice-tcp or ice-udp, ignore the remote
+ candidates for those types.
+
+commit f49ab88f957a3a250ef2ada0c0fab4fbbd3e5da8
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 11 16:42:55 2017 -0400
+
+ conncheck: Check the controlling state when the req was sent
+
+ It was checking when the pair was created, but the role may have
+ already changed when the request is sent.
+
+commit 8fc22b0034d04cbc222e0637152b1cee2879eef3
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Wed Apr 5 17:43:26 2017 -0400
+
+ tests_: Add test to verify that only packets from validated addresses pass
+
+ https://phabricator.freedesktop.org/T104
+
+ Reviewed-by: Philip Withnall <philip.withnall(a)collabora.co.uk>
+ Differential Revision: https://phabricator.freedesktop.org/D1717
+
+commit ffc7fddac42728bac6e4753a17bc52e5e610ae8b
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 21:27:39 2017 -0400
+
+ agent: Drop packets not from validated addresses
+
+ This is required by the WebRTC spec.
+
+ Remove test-mainloop as it doesnt even try to do
+ a negotiation.
+
+ https://phabricator.freedesktop.org/T104
+
+ Differential Revision: https://phabricator.freedesktop.org/D1716
+
+commit 1e9e28dbc98b4f6a7cf4bda0ca73b5abc2735ddc
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 14:41:51 2017 -0400
+
+ candidate: Add equality check function
+
+ Add a function that can check if two candidates point to the same place.
+
+ https://phabricator.freedesktop.org/T104
+
+ Reviewed-by: Philip Withnall <philip.withnall(a)collabora.co.uk>
+ Differential Revision: https://phabricator.freedesktop.org/D1715
+
+commit 10c557f23f8337f1304fff27bd85d2eb713cb249
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Wed Apr 5 17:01:35 2017 -0400
+
+ test-credentials: Fix leak
+
+commit ae6d939e48366b80570d713b83334191b0982e71
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 20:34:05 2017 -0400
+
+ debug: Use libnice-verbose, not libnice-nice-verbose
+
+commit efc6a9be8cb34c899f0454c32e8a1e62b38df474
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 18:42:57 2017 -0400
+
+ tests: Use automake test-driver for valgrind
+
+ This fixes the valgrind integration with the new test drivers.
+
+commit 4e605885c9dcaeb3ee443ec902c9c9189b19043f
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 16:16:46 2017 -0400
+
+ agent: Remove impossible case
+
+commit e56b910d2d8b70f5677bbd4be579d5b95aff33ad
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 16:16:05 2017 -0400
+
+ agent: Separate return from NiceSocket and internal enum
+
+ The same variable was used for return values from NiceSocket and
+ for the internal enum, but 0 and -1 have different meanings in both.
+
+commit cd255bddc7fa0ddae056b5358a22b380c4eefc42
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 15:24:43 2017 -0400
+
+ udp-turn: Add some const to internal APIs
+
+commit db05e8b0fdc713df93cd6a4c3914e5aee38b2391
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 12:30:27 2017 -0400
+
+ Make clang-analyzer happy
+
+ Various little things, none of which should make a functional difference.
+
+commit 0672758b9621801c8f0d9e3c920370983b267a68
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 12:29:29 2017 -0400
+
+ agent: Don't set variable that won't be used
+
+ It exits the loop immediately, so no point to set the variable.
+ And it makes the clang static analyzer happy.
+
+commit 0de1657e4d15d4f1911ab1fad84ea23e7013070f
+Author: Olivier Crête <olivier.crete(a)collabora.com>
+Date: Tue Apr 4 12:25:50 2017 -0400
+
+ conncheck: Use the right test for empty remote_frag
+
+ It's now an array, not a pointer, so needs to test to emptyness.
+
+ It's a bugfix on the previous commit, 59ce41df
+
+commit 59ce41dfb837adf4222b25490cde2e394384ad15
+Author: Miguel París Díaz <mparisdiaz(a)gmail.com>
+Date: Fri Mar 31 20:20:38 2017 -0400
+
+ conncheck: consider answer received when remote credentials are set
+
+ Consider that the answer is received when remote credentials
+ are set instead of when a remote candidate is set,
+ which could not happen or could cause more delay for the
+ connection establishment.
+
+ Ported to git master by Olivier Crête
+
+ Differential Revision: https://phabricator.freedesktop.org/D1704
+diff --git a/agent/Makefile.am b/agent/Makefile.am
+index b585393..915f312 100644
+--- a/agent/Makefile.am
++++ b/agent/Makefile.am
+@@ -22,6 +22,12 @@ if WINDOWS
+ AM_CFLAGS += -DWINVER=0x0501 # _WIN32_WINNT_WINXP
+ endif
+
++BUILT_SOURCES = \
++ agent-enum-types.h \
++ agent-enum-types.c
++
++CLEANFILES += $(BUILT_SOURCES)
++
+ noinst_LTLIBRARIES = libagent.la
+
+ libagent_la_SOURCES = \
+@@ -54,6 +60,23 @@ libagent_la_SOURCES = \
+ outputstream.c \
+ $(BUILT_SOURCES)
+
++agent-enum-types.h: agent.h Makefile
++ $(AM_V_GEN)$(GLIB_MKENUMS) \
++ --fhead "#ifndef __AGENT_ENUM_TYPES_H__\n#define __AGENT_ENUM_TYPES_H__ 1\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \
++ --fprod "/* enumerations from \"@filename@\" */\n" \
++ --vhead "GType @enum_name@_get_type (void) G_GNUC_CONST;\n#define NICE_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \
++ --ftail "G_END_DECLS\n\n#endif /* !AGENT_ENUM_TYPES_H */" \
++ $(addprefix $(srcdir)/,agent.h) > $@
++
++agent-enum-types.c: agent.h Makefile agent-enum-types.h
++ $(AM_V_GEN)$(GLIB_MKENUMS) \
++ --fhead "#include <config.h>\n#include <glib-object.h>\n#include \"agent.h\"\n#include \"agent-enum-types.h\"" \
++ --fprod "\n/* enumerations from \"@filename@\" */" \
++ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType type = 0;\n if (!type) {\n static const G@Type@Value values[] = {" \
++ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \
++ --vtail " { 0, NULL, NULL }\n };\n type = g_@type@_register_static (\"@EnumName@\", values);\n }\n return type;\n}\n\n" \
++ $(addprefix $(srcdir)/,agent.h) > $@
++
+ libagent_la_LIBADD = \
+ $(top_builddir)/random/libnice-random.la \
+ $(top_builddir)/socket/libsocket.la \
+diff --git a/agent/agent-priv.h b/agent/agent-priv.h
+index 4d8c9b8..7269be0 100644
+--- a/agent/agent-priv.h
++++ b/agent/agent-priv.h
+@@ -106,7 +106,6 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
+
+ #define NICE_AGENT_TIMER_TA_DEFAULT 20 /* timer Ta, msecs (impl. defined) */
+ #define NICE_AGENT_TIMER_TR_DEFAULT 25000 /* timer Tr, msecs (impl. defined) */
+-#define NICE_AGENT_TIMER_TR_MIN 15000 /* timer Tr, msecs (ICE ID-19) */
+ #define NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT 100 /* see spec 5.7.3 (ID-19) */
+
+
+@@ -114,6 +113,27 @@ nice_input_message_iter_compare (const NiceInputMessageIter *a,
+ * MTU and estimated typical sizes of ICE STUN packet */
+ #define MAX_STUN_DATAGRAM_PAYLOAD 1300
+
++#define NICE_COMPONENT_MAX_VALID_CANDIDATES 50 /* maximum number of validates remote candidates to keep, the number is arbitrary but hopefully large enough */
++
++/* A convenient macro to test if the agent is compatible with RFC5245
++ * or OC2007R2. Specifically these two modes share the support
++ * of the regular or aggressive nomination mode */
++#define NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2(obj) \
++ ((obj)->compatibility == NICE_COMPATIBILITY_RFC5245 || \
++ (obj)->compatibility == NICE_COMPATIBILITY_OC2007R2)
++
++/* A grace period before declaring a component as failed, in msecs. This
++ * delay is added to reduce the chance to see the agent receiving new
++ * stun activity just after the conncheck list has been declared failed,
++ * reactiviting conncheck activity, and causing a (valid) state
++ * transitions like that: connecting -> failed -> connecting ->
++ * connected -> ready.
++ * Such transitions are not buggy per-se, but may break the
++ * test-suite, that counts precisely the number of time each state
++ * has been set, and doesnt expect these transcient failed states.
++ */
++#define NICE_AGENT_MAX_TIMER_GRACE_PERIOD 1000
++
+ struct _NiceAgent
+ {
+ GObject parent; /* gobject pointer */
+@@ -126,10 +146,14 @@ struct _NiceAgent
+ NiceProxyType proxy_type; /* property: Proxy type */
+ gchar *proxy_username; /* property: Proxy username */
+ gchar *proxy_password; /* property: Proxy password */
+- gboolean controlling_mode; /* property: controlling-mode */
++ gboolean saved_controlling_mode;/* property: controlling-mode */
+ guint timer_ta; /* property: timer Ta */
+ guint max_conn_checks; /* property: max connectivity checks */
+ gboolean force_relay; /* property: force relay */
++ guint stun_max_retransmissions; /* property: stun max retransmissions, Rc */
++ guint stun_initial_timeout; /* property: stun initial timeout, RTO */
++ guint stun_reliable_timeout; /* property: stun reliable timeout */
++ NiceNominationMode nomination_mode; /* property: Nomination mode */
+
+ GSList *local_addresses; /* list of NiceAddresses for local
+ interfaces */
+@@ -164,6 +188,10 @@ struct _NiceAgent
+ guint16 rfc4571_expecting_length;
+ gboolean use_ice_udp;
+ gboolean use_ice_tcp;
++
++ guint conncheck_timer_grace_period; /* ongoing delay before timer stop */
++ gboolean controlling_mode; /* controlling mode used by the
++ conncheck */
+ /* XXX: add pointer to internal data struct for ABI-safe extensions */
+ };
+
+diff --git a/agent/agent.c b/agent/agent.c
+index 555fd16..0773c53 100644
+--- a/agent/agent.c
++++ b/agent/agent.c
+@@ -73,6 +73,7 @@
+ #include "interfaces.h"
+
+ #include "pseudotcp.h"
++#include "agent-enum-types.h"
+
+ /* Maximum size of a UDP packet’s payload, as the packet’s length field is 16b
+ * wide. */
+@@ -113,6 +114,10 @@ enum
+ PROP_BYTESTREAM_TCP,
+ PROP_KEEPALIVE_CONNCHECK,
+ PROP_FORCE_RELAY,
++ PROP_STUN_MAX_RETRANSMISSIONS,
++ PROP_STUN_INITIAL_TIMEOUT,
++ PROP_STUN_RELIABLE_TIMEOUT,
++ PROP_NOMINATION_MODE,
+ };
+
+
+@@ -400,6 +405,13 @@ nice_agent_class_init (NiceAgentClass *klass)
+ 1, /* not a construct property, ignored */
+ G_PARAM_READWRITE));
+
++ /**
++ * NiceAgent:controlling-mode:
++ *
++ * Whether the agent has the controlling role. This property should
++ * be modified before gathering candidates, any modification occuring
++ * later will be hold until ICE is restarted.
++ */
+ g_object_class_install_property (gobject_class, PROP_CONTROLLING_MODE,
+ g_param_spec_boolean (
+ "controlling-mode",
+@@ -436,6 +448,24 @@ nice_agent_class_init (NiceAgentClass *klass)
+ 0, /* default set in init */
+ G_PARAM_READWRITE));
+
++ /**
++ * NiceAgent:nomination-mode:
++ *
++ * The nomination mode used in the ICE specification for describing
++ * the selection of valid pairs to be used upstream.
++ * <para> See also: #NiceNominationMode </para>
++ *
++ * Since: 0.1.15
++ */
++ g_object_class_install_property (gobject_class, PROP_NOMINATION_MODE,
++ g_param_spec_enum (
++ "nomination-mode",
++ "ICE nomination mode",
++ "Nomination mode used in the ICE specification for describing "
++ "the selection of valid pairs to be used upstream",
++ NICE_TYPE_NOMINATION_MODE, NICE_NOMINATION_MODE_AGGRESSIVE,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
++
+ /**
+ * NiceAgent:proxy-ip:
+ *
+@@ -708,6 +738,76 @@ nice_agent_class_init (NiceAgentClass *klass)
+ FALSE,
+ G_PARAM_READWRITE));
+
++ /**
++ * NiceAgent:stun-max-retransmissions
++ *
++ * The maximum number of retransmissions of the STUN binding requests
++ * used in the gathering stage, to find our local candidates, and used
++ * in the connection check stage, to test the validity of each
++ * constructed pair. This property is described as 'Rc' in the RFC
++ * 5389, with a default value of 7. The timeout of each STUN request
++ * is doubled for each retransmission, so the choice of this value has
++ * a direct impact on the time needed to move from the CONNECTED state
++ * to the READY state, and on the time needed to complete the GATHERING
++ * state.
++ *
++ * Since: 0.1.15
++ */
++
++ g_object_class_install_property (gobject_class, PROP_STUN_MAX_RETRANSMISSIONS,
++ g_param_spec_uint (
++ "stun-max-retransmissions",
++ "STUN Max Retransmissions",
++ "Maximum number of STUN binding requests retransmissions "
++ "described as 'Rc' in the STUN specification.",
++ 1, 99,
++ STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++
++ /**
++ * NiceAgent:stun-initial-timeout
++ *
++ * The initial timeout (msecs) of the STUN binding requests
++ * used in the gathering stage, to find our local candidates.
++ * This property is described as 'RTO' in the RFC 5389 and RFC 5245.
++ * This timeout is doubled for each retransmission, until
++ * #NiceAgent:stun-max-retransmissions have been done,
++ * with an exception for the last restransmission, where the timeout is
++ * divided by two instead (RFC 5389 indicates that a customisable
++ * multiplier 'Rm' to 'RTO' should be used).
++ *
++ * Since: 0.1.15
++ */
++
++ g_object_class_install_property (gobject_class, PROP_STUN_INITIAL_TIMEOUT,
++ g_param_spec_uint (
++ "stun-initial-timeout",
++ "STUN Initial Timeout",
++ "STUN timeout in msecs of the initial binding requests used in the "
++ "gathering state, described as 'RTO' in the ICE specification.",
++ 20, 9999,
++ STUN_TIMER_DEFAULT_TIMEOUT,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++
++ /**
++ * NiceAgent:stun-reliable-timeout
++ *
++ * The initial timeout of the STUN binding requests used
++ * for a reliable timer.
++ *
++ * Since: 0.1.15
++ */
++
++ g_object_class_install_property (gobject_class, PROP_STUN_RELIABLE_TIMEOUT,
++ g_param_spec_uint (
++ "stun-reliable-timeout",
++ "STUN Reliable Timeout",
++ "STUN timeout in msecs of the initial binding requests used for "
++ "a reliable timer.",
++ 20, 99999,
++ STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT,
++ G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
++
+ /* install signals */
+
+ /**
+@@ -1013,6 +1113,47 @@ static void priv_generate_tie_breaker (NiceAgent *agent)
+ nice_rng_generate_bytes (agent->rng, 8, (gchar*)&agent->tie_breaker);
+ }
+
++static void
++priv_update_controlling_mode (NiceAgent *agent, gboolean value)
++{
++ gboolean update_controlling_mode;
++ GSList *i, *j;
++
++ agent->saved_controlling_mode = value;
++ /* It is safe to update the agent controlling mode when all
++ * components are still in state disconnected. When we leave
++ * this state, the role must stay under the control of the
++ * conncheck algorithm exclusively, until the conncheck is
++ * eventually restarted. See RFC5245, sect 5.2. Determining Role
++ */
++ if (agent->controlling_mode != agent->saved_controlling_mode) {
++ update_controlling_mode = TRUE;
++ for (i = agent->streams;
++ i && update_controlling_mode; i = i->next) {
++ NiceStream *stream = i->data;
++ for (j = stream->components;
++ j && update_controlling_mode; j = j->next) {
++ NiceComponent *component = j->data;
++ if (component->state > NICE_COMPONENT_STATE_DISCONNECTED)
++ update_controlling_mode = FALSE;
++ }
++ }
++ if (update_controlling_mode) {
++ agent->controlling_mode = agent->saved_controlling_mode;
++ nice_debug ("Agent %p : Property set, changing role to \"%s\".",
++ agent, agent->controlling_mode ? "controlling" : "controlled");
++ } else {
++ nice_debug ("Agent %p : Property set, role switch requested "
++ "but conncheck already started.", agent);
++ nice_debug ("Agent %p : Property set, staying with role \"%s\" "
++ "until restart.", agent,
++ agent->controlling_mode ? "controlling" : "controlled");
++ }
++ } else
++ nice_debug ("Agent %p : Property set, role is already \"%s\".", agent,
++ agent->controlling_mode ? "controlling" : "controlled");
++}
++
+ static void
+ nice_agent_init (NiceAgent *agent)
+ {
+@@ -1022,7 +1163,9 @@ nice_agent_init (NiceAgent *agent)
+ /* set defaults; not construct params, so set here */
+ agent->stun_server_port = DEFAULT_STUN_PORT;
+ agent->controlling_mode = TRUE;
++ agent->saved_controlling_mode = TRUE;
+ agent->max_conn_checks = NICE_AGENT_MAX_CONNECTIVITY_CHECKS_DEFAULT;
++ agent->nomination_mode = NICE_NOMINATION_MODE_AGGRESSIVE;
+
+ agent->discovery_list = NULL;
+ agent->discovery_unsched_items = 0;
+@@ -1071,6 +1214,24 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat)
+ }
+
+
++NICEAPI_EXPORT NiceAgent *
++nice_agent_new_full (GMainContext *ctx,
++ NiceCompatibility compat,
++ NiceAgentOption flags)
++{
++ NiceAgent *agent = g_object_new (NICE_TYPE_AGENT,
++ "compatibility", compat,
++ "main-context", ctx,
++ "reliable", (flags & NICE_AGENT_OPTION_RELIABLE) ? TRUE : FALSE,
++ "nomination-mode", (flags & NICE_AGENT_OPTION_REGULAR_NOMINATION) ?
++ NICE_NOMINATION_MODE_REGULAR : NICE_NOMINATION_MODE_AGGRESSIVE,
++ "full-mode", (flags & NICE_AGENT_OPTION_LITE_MODE) ? FALSE : TRUE,
++ NULL);
++
++ return agent;
++}
++
++
+ static void
+ nice_agent_get_property (
+ GObject *object,
+@@ -1101,7 +1262,7 @@ nice_agent_get_property (
+ break;
+
+ case PROP_CONTROLLING_MODE:
+- g_value_set_boolean (value, agent->controlling_mode);
++ g_value_set_boolean (value, agent->saved_controlling_mode);
+ break;
+
+ case PROP_FULL_MODE:
+@@ -1117,6 +1278,10 @@ nice_agent_get_property (
+ /* XXX: should we prune the list of already existing checks? */
+ break;
+
++ case PROP_NOMINATION_MODE:
++ g_value_set_enum (value, agent->nomination_mode);
++ break;
++
+ case PROP_PROXY_IP:
+ g_value_set_string (value, agent->proxy_ip);
+ break;
+@@ -1187,6 +1352,18 @@ nice_agent_get_property (
+ g_value_set_boolean (value, agent->force_relay);
+ break;
+
++ case PROP_STUN_MAX_RETRANSMISSIONS:
++ g_value_set_uint (value, agent->stun_max_retransmissions);
++ break;
++
++ case PROP_STUN_INITIAL_TIMEOUT:
++ g_value_set_uint (value, agent->stun_initial_timeout);
++ break;
++
++ case PROP_STUN_RELIABLE_TIMEOUT:
++ g_value_set_uint (value, agent->stun_reliable_timeout);
++ break;
++
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+@@ -1294,7 +1471,7 @@ nice_agent_set_property (
+ break;
+
+ case PROP_CONTROLLING_MODE:
+- agent->controlling_mode = g_value_get_boolean (value);
++ priv_update_controlling_mode (agent, g_value_get_boolean (value));
+ break;
+
+ case PROP_FULL_MODE:
+@@ -1309,6 +1486,10 @@ nice_agent_set_property (
+ agent->max_conn_checks = g_value_get_uint (value);
+ break;
+
++ case PROP_NOMINATION_MODE:
++ agent->nomination_mode = g_value_get_enum (value);
++ break;
++
+ case PROP_PROXY_IP:
+ g_free (agent->proxy_ip);
+ agent->proxy_ip = g_value_dup_string (value);
+@@ -1374,6 +1555,18 @@ nice_agent_set_property (
+ agent->force_relay = g_value_get_boolean (value);
+ break;
+
++ case PROP_STUN_MAX_RETRANSMISSIONS:
++ agent->stun_max_retransmissions = g_value_get_uint (value);
++ break;
++
++ case PROP_STUN_INITIAL_TIMEOUT:
++ agent->stun_initial_timeout = g_value_get_uint (value);
++ break;
++
++ case PROP_STUN_RELIABLE_TIMEOUT:
++ agent->stun_reliable_timeout = g_value_get_uint (value);
++ break;
++
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ }
+@@ -1552,7 +1745,6 @@ pseudo_tcp_socket_recv_messages (PseudoTcpSocket *self,
+
+ if (len == 0) {
+ /* Reached EOS. */
+- len = 0;
+ goto done;
+ } else if (len < 0 &&
+ pseudo_tcp_socket_get_error (self) == EWOULDBLOCK) {
+@@ -1890,6 +2082,17 @@ void agent_gathering_done (NiceAgent *agent)
+
+ for (i = agent->streams; i; i = i->next) {
+ NiceStream *stream = i->data;
++
++ /* We ignore streams not in gathering state, typically already in
++ * ready state. Such streams may have couples (local,remote)
++ * candidates that have not resulted in the creation a new pair
++ * during a previous conncheck session, and we don't want these new
++ * pairs to be added now, because it would generate unneeded
++ * transition changes for a stream unconcerned by this gathering.
++ */
++ if (!stream->gathering)
++ continue;
++
+ for (j = stream->components; j; j = j->next) {
+ NiceComponent *component = j->data;
+
+@@ -3113,6 +3316,13 @@ static gboolean priv_add_remote_candidate (
+ NiceComponent *component;
+ NiceCandidate *candidate;
+
++ if (transport == NICE_CANDIDATE_TRANSPORT_UDP &&
++ !agent->use_ice_udp)
++ return FALSE;
++ if (transport != NICE_CANDIDATE_TRANSPORT_UDP &&
++ !agent->use_ice_tcp)
++ return FALSE;
++
+ if (!agent_find_component (agent, stream_id, component_id, NULL, &component))
+ return FALSE;
+
+@@ -3195,6 +3405,19 @@ static gboolean priv_add_remote_candidate (
+ username, password, priority);
+ }
+
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ /* note: If there are TCP candidates for a media stream,
++ * a controlling agent MUST use the regular selection algorithm,
++ * RFC 6544, sect 8, "Concluding ICE Processing"
++ */
++ if (agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE &&
++ transport != NICE_CANDIDATE_TRANSPORT_UDP) {
++ nice_debug ("Agent %p : we have TCP candidates, switching back "
++ "to regular nomination mode", agent);
++ agent->nomination_mode = NICE_NOMINATION_MODE_REGULAR;
++ }
++ }
++
+ if (base_addr)
+ candidate->base_addr = *base_addr;
+
+@@ -3240,6 +3463,8 @@ nice_agent_set_remote_credentials (
+ g_strlcpy (stream->remote_ufrag, ufrag, NICE_STREAM_MAX_UFRAG);
+ g_strlcpy (stream->remote_password, pwd, NICE_STREAM_MAX_PWD);
+
++ conn_check_remote_credentials_set(agent, stream);
++
+ ret = TRUE;
+ goto done;
+ }
+@@ -3342,8 +3567,6 @@ _set_remote_candidates_locked (NiceAgent *agent, NiceStream *stream,
+ }
+ }
+
+- conn_check_remote_candidates_set(agent, stream, component);
+-
+ if (added > 0) {
+ conn_check_schedule_next (agent);
+ }
+@@ -3423,7 +3646,8 @@ agent_recv_message_unlocked (
+ {
+ NiceAddress from;
+ GList *item;
+- gint retval;
++ RecvStatus retval;
++ gint sockret;
+ gboolean is_turn = FALSE;
+
+ /* We need an address for packet parsing, below. */
+@@ -3484,8 +3708,8 @@ agent_recv_message_unlocked (
+ local_bufs[i + 1].buffer = message->buffers[i].buffer;
+ local_bufs[i + 1].size = message->buffers[i].size;
+ }
+- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
+- if (retval == 1) {
++ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
++ if (sockret == 1) {
+ message->length = ntohs (rfc4571_frame);
+ }
+ } else {
+@@ -3500,7 +3724,7 @@ agent_recv_message_unlocked (
+ _priv_set_socket_tos (agent, new_socket, stream->tos);
+ nice_component_attach_socket (component, new_socket);
+ }
+- retval = 0;
++ sockret = 0;
+ } else {
+ /* In the case of a real ICE-TCP connection, we can use the socket as a
+ * bytestream and do the read here with caching of data being read
+@@ -3509,9 +3733,9 @@ agent_recv_message_unlocked (
+
+ /* TODO: Support bytestream reads */
+ message->length = 0;
+- retval = 0;
++ sockret = 0;
+ if (available <= 0) {
+- retval = available;
++ sockret = available;
+
+ /* If we don't call check_connect_result on an outbound connection,
+ * then is_connected will always return FALSE. That's why we check
+@@ -3524,7 +3748,7 @@ agent_recv_message_unlocked (
+ * not connected, it means that it failed to connect, so we must
+ * return an error to make the socket fail/closed
+ */
+- retval = -1;
++ sockret = -1;
+ } else {
+ gint flags = G_SOCKET_MSG_PEEK;
+
+@@ -3537,7 +3761,7 @@ agent_recv_message_unlocked (
+ */
+ if (g_socket_receive_message (nicesock->fileno, NULL,
+ NULL, 0, NULL, NULL, &flags, NULL, NULL) == 0)
+- retval = -1;
++ sockret = -1;
+ }
+ } else if (agent->rfc4571_expecting_length == 0) {
+ if ((gsize) available >= sizeof(guint16)) {
+@@ -3545,8 +3769,8 @@ agent_recv_message_unlocked (
+ GInputVector local_buf = { &rfc4571_frame, sizeof(guint16)};
+ NiceInputMessage local_message = { &local_buf, 1, message->from, 0};
+
+- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
+- if (retval == 1) {
++ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
++ if (sockret == 1) {
+ agent->rfc4571_expecting_length = ntohs (rfc4571_frame);
+ available = g_socket_get_available_bytes (nicesock->fileno);
+ }
+@@ -3590,8 +3814,8 @@ agent_recv_message_unlocked (
+ off += local_bufs[i].size;
+ }
+ }
+- retval = nice_socket_recv_messages (nicesock, &local_message, 1);
+- if (retval == 1) {
++ sockret = nice_socket_recv_messages (nicesock, &local_message, 1);
++ if (sockret == 1) {
+ message->length = local_message.length;
+ agent->rfc4571_expecting_length -= local_message.length;
+ }
+@@ -3599,23 +3823,26 @@ agent_recv_message_unlocked (
+ }
+ }
+ } else {
+- retval = nice_socket_recv_messages (nicesock, message, 1);
++ sockret = nice_socket_recv_messages (nicesock, message, 1);
+ }
+
+- if (retval == 0) {
++ if (sockret == 0) {
+ retval = RECV_WOULD_BLOCK; /* EWOULDBLOCK */
+ nice_debug_verbose ("%s: Agent %p: no message available on read attempt",
+ G_STRFUNC, agent);
+ goto done;
+- } else if (retval < 0) {
++ } else if (sockret < 0) {
+ nice_debug ("Agent %p: %s returned %d, errno (%d) : %s",
+- agent, G_STRFUNC, retval, errno, g_strerror (errno));
++ agent, G_STRFUNC, sockret, errno, g_strerror (errno));
+
+ retval = RECV_ERROR;
+ goto done;
++ } else {
++ retval = sockret;
+ }
+
+- if (retval == RECV_OOB || message->length == 0) {
++ g_assert (retval != RECV_OOB);
++ if (message->length == 0) {
+ retval = RECV_OOB;
+ nice_debug_verbose ("%s: Agent %p: message handled out-of-band", G_STRFUNC,
+ agent);
+@@ -3679,8 +3906,6 @@ agent_recv_message_unlocked (
+ if (retval == RECV_OOB)
+ goto done;
+
+- agent->media_after_tick = TRUE;
+-
+ /* If the message’s stated length is equal to its actual length, it’s probably
+ * a STUN message; otherwise it’s probably data. */
+ if (stun_message_validate_buffer_length_fast (
+@@ -3712,6 +3937,7 @@ agent_recv_message_unlocked (
+ nice_debug ("%s: Valid STUN packet received.", G_STRFUNC);
+ retval = RECV_OOB;
+ g_free (big_buf);
++ agent->media_after_tick = TRUE;
+ goto done;
+ }
+ }
+@@ -3722,6 +3948,23 @@ agent_recv_message_unlocked (
+ g_free (big_buf);
+ }
+
++ if (!nice_component_verify_remote_candidate (component,
++ message->from, nicesock)) {
++ if (nice_debug_is_verbose ()) {
++ gchar str[INET6_ADDRSTRLEN];
++
++ nice_address_to_string (message->from, str);
++ nice_debug_verbose ("Agent %p : %d:%d DROPPING packet from unknown source"
++ " %s:%d sock-type: %d", agent, stream->id, component->id, str,
++ nice_address_get_port (message->from), nicesock->type);
++ }
++
++ retval = RECV_OOB;
++ goto done;
++ }
++
++ agent->media_after_tick = TRUE;
++
+ /* Unhandled STUN; try handling TCP data, then pass to the client. */
+ if (message->length > 0 && agent->reliable) {
+ if (!nice_socket_is_reliable (nicesock) &&
+@@ -4085,7 +4328,10 @@ static gboolean
+ nice_agent_recv_cancelled_cb (GCancellable *cancellable, gpointer user_data)
+ {
+ GError **error = user_data;
+- return !g_cancellable_set_error_if_cancelled (cancellable, error);
++
++ if (error && !*error)
++ g_cancellable_set_error_if_cancelled (cancellable, error);
++ return G_SOURCE_REMOVE;
+ }
+
+ static gint
+@@ -4245,7 +4491,6 @@ nice_agent_recv_messages_blocking_or_nonblocking (NiceAgent *agent,
+ "Component removed during call.");
+
+ component = NULL;
+- error_reported = TRUE;
+
+ goto recv_error;
+ }
+@@ -4734,6 +4979,11 @@ nice_agent_restart (
+ /* step: regenerate tie-breaker value */
+ priv_generate_tie_breaker (agent);
+
++ /* step: reset controlling mode from the property value */
++ agent->controlling_mode = agent->saved_controlling_mode;
++ nice_debug ("Agent %p : ICE restart, reset role to \"%s\".",
++ agent, agent->controlling_mode ? "controlling" : "controlled");
++
+ for (i = agent->streams; i; i = i->next) {
+ NiceStream *stream = i->data;
+
+@@ -5665,7 +5915,7 @@ _generate_candidate_sdp (NiceAgent *agent,
+ g_string_append_printf (sdp, " typ %s", _cand_type_to_sdp (candidate->type));
+ if (nice_address_is_valid (&candidate->base_addr) &&
+ !nice_address_equal (&candidate->addr, &candidate->base_addr)) {
+- port = nice_address_get_port (&candidate->addr);
++ port = nice_address_get_port (&candidate->base_addr);
+ nice_address_to_string (&candidate->base_addr, ip4);
+ g_string_append_printf (sdp, " raddr %s rport %d", ip4,
+ port == 0 ? 9 : port);
+diff --git a/agent/agent.h b/agent/agent.h
+index 47c4d5a..520c4c5 100644
+--- a/agent/agent.h
++++ b/agent/agent.h
+@@ -377,6 +377,45 @@ typedef enum
+ NICE_PROXY_TYPE_LAST = NICE_PROXY_TYPE_HTTP,
+ } NiceProxyType;
+
++/**
++ * NiceNominationMode:
++ * @NICE_NOMINATION_MODE_AGGRESSIVE: Aggressive nomination mode
++ * @NICE_NOMINATION_MODE_REGULAR: Regular nomination mode
++ *
++ * An enum to specity the kind of nomination mode to use by
++ * the agent, as described in RFC 5245. Two modes exists,
++ * regular and aggressive. They differ by the way the controlling
++ * agent chooses to put the USE-CANDIDATE attribute in its STUN
++ * messages. The aggressive mode is supposed to nominate a pair
++ * faster, than the regular mode, potentially causing the nominated
++ * pair to change until the connection check completes.
++ *
++ * Since: 0.1.15
++ */
++typedef enum
++{
++ NICE_NOMINATION_MODE_REGULAR = 0,
++ NICE_NOMINATION_MODE_AGGRESSIVE,
++} NiceNominationMode;
++
++/**
++ * NiceAgentOption:
++ * @NICE_AGENT_OPTION_REGULAR_NOMINATION: Enables regular nomination, default
++ * is aggrssive mode (see #NiceNominationMode).
++ * @NICE_AGENT_OPTION_RELIABLE: Enables reliable mode, possibly using PseudoTCP, * see nice_agent_new_reliable().
++ * @NICE_AGENT_OPTION_LITE_MODE: Enable lite mode
++ *
++ * These are options that can be passed to nice_agent_new_full(). They set
++ * various properties on the agent. Not including them sets the property to
++ * the other value.
++ *
++ * Since: 0.1.15
++ */
++typedef enum {
++ NICE_AGENT_OPTION_REGULAR_NOMINATION = 1 << 0,
++ NICE_AGENT_OPTION_RELIABLE = 1 << 1,
++ NICE_AGENT_OPTION_LITE_MODE = 1 << 2,
++} NiceAgentOption;
+
+ /**
+ * NiceAgentRecvFunc:
+@@ -428,6 +467,26 @@ nice_agent_new (GMainContext *ctx, NiceCompatibility compat);
+ NiceAgent *
+ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+
++/**
++ * nice_agent_new_full:
++ * @ctx: The Glib Mainloop Context to use for timers
++ * @compat: The compatibility mode of the agent
++ * @flags: Flags to set the properties
++ *
++ * Create a new #NiceAgent with parameters that must be be defined at
++ * construction time.
++ * The returned object must be freed with g_object_unref()
++ * <para> See also: #NiceNominationMode and #NiceAgentOption</para>
++ *
++ * Since: 0.1.15
++ *
++ * Returns: The new agent GObject
++ */
++NiceAgent *
++nice_agent_new_full (GMainContext *ctx,
++ NiceCompatibility compat,
++ NiceAgentOption flags);
++
+ /**
+ * nice_agent_add_local_address:
+ * @agent: The #NiceAgent Object
+@@ -447,7 +506,6 @@ nice_agent_new_reliable (GMainContext *ctx, NiceCompatibility compat);
+ gboolean
+ nice_agent_add_local_address (NiceAgent *agent, NiceAddress *addr);
+
+-
+ /**
+ * nice_agent_add_stream:
+ * @agent: The #NiceAgent Object
+diff --git a/agent/candidate.c b/agent/candidate.c
+index 27966ef..85f8f65 100644
+--- a/agent/candidate.c
++++ b/agent/candidate.c
+@@ -360,3 +360,14 @@ nice_candidate_copy (const NiceCandidate *candidate)
+
+ return copy;
+ }
++
++NICEAPI_EXPORT gboolean
++nice_candidate_equal_target (const NiceCandidate *candidate1,
++ const NiceCandidate *candidate2)
++{
++ g_return_val_if_fail (candidate1 != NULL, FALSE);
++ g_return_val_if_fail (candidate2 != NULL, FALSE);
++
++ return (candidate1->transport == candidate2->transport &&
++ nice_address_equal (&candidate1->addr, &candidate2->addr));
++}
+diff --git a/agent/candidate.h b/agent/candidate.h
+index fadfce3..e556c16 100644
+--- a/agent/candidate.h
++++ b/agent/candidate.h
+@@ -230,7 +230,23 @@ nice_candidate_free (NiceCandidate *candidate);
+ NiceCandidate *
+ nice_candidate_copy (const NiceCandidate *candidate);
+
+-GType nice_candidate_get_type (void);
++/**
++ * nice_candidate_equal_target:
++ * @candidate1: A candidate
++ * @candidate2: A candidate
++ *
++ * Verifies that the candidates point to the same place, meaning they have
++ * the same transport and the same address. It ignores all other aspects.
++ *
++ * Returns: %TRUE if the candidates point to the same place
++ *
++ * Since: 0.1.15
++ */
++gboolean
++nice_candidate_equal_target (const NiceCandidate *candidate1,
++ const NiceCandidate *candidate2);
++
++ GType nice_candidate_get_type (void);
+
+ /**
+ * NICE_TYPE_CANDIDATE:
+diff --git a/agent/component.c b/agent/component.c
+index 32f7463..6eee90e 100644
+--- a/agent/component.c
++++ b/agent/component.c
+@@ -105,6 +105,13 @@ socket_source_attach (SocketSource *socket_source, GMainContext *context)
+ if (socket_source->socket->fileno == NULL)
+ return;
+
++ /* Do not create a GSource for UDP turn socket, because it
++ * would duplicate the packets already received on the base
++ * UDP socket.
++ */
++ if (socket_source->socket->type == NICE_SOCKET_TYPE_UDP_TURN)
++ return;
++
+ /* Create a source. */
+ source = g_socket_create_source (socket_source->socket->fileno,
+ G_IO_IN, NULL);
+@@ -380,7 +387,7 @@ nice_component_restart (NiceComponent *cmp)
+ for (i = cmp->remote_candidates; i; i = i->next) {
+ NiceCandidate *candidate = i->data;
+
+- /* note: do not remove the local candidate that is
++ /* note: do not remove the remote candidate that is
+ * currently part of the 'selected pair', see ICE
+ * 9.1.1.1. "ICE Restarts" (ID-19) */
+ if (candidate == cmp->selected_pair.remote) {
+@@ -435,6 +442,8 @@ nice_component_update_selected_pair (NiceComponent *component, const CandidatePa
+ component->selected_pair.remote = pair->remote;
+ component->selected_pair.priority = pair->priority;
+ component->selected_pair.prflx_priority = pair->prflx_priority;
++
++ nice_component_add_valid_candidate (component, pair->remote);
+ }
+
+ /*
+@@ -514,6 +523,11 @@ nice_component_set_selected_remote_candidate (NiceComponent *component,
+ component->selected_pair.remote = remote;
+ component->selected_pair.priority = priority;
+
++ /* Get into fallback mode where packets from any source is accepted once
++ * this has been called. This is the expected behavior of pre-ICE SIP.
++ */
++ component->fallback_mode = TRUE;
++
+ return local;
+ }
+
+@@ -991,6 +1005,18 @@ nice_component_class_init (NiceComponentClass *klass)
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ }
+
++static gboolean
++dummy_callback (gpointer data)
++{
++ return G_SOURCE_CONTINUE;
++}
++
++static void
++source_set_dummy_callback (GSource *source)
++{
++ g_source_set_callback (source, dummy_callback, NULL, NULL);
++}
++
+ static void
+ nice_component_init (NiceComponent *component)
+ {
+@@ -1013,7 +1039,7 @@ nice_component_init (NiceComponent *component)
+ component->stop_cancellable = g_cancellable_new ();
+ component->stop_cancellable_source =
+ g_cancellable_source_new (component->stop_cancellable);
+- g_source_set_dummy_callback (component->stop_cancellable_source);
++ source_set_dummy_callback (component->stop_cancellable_source);
+ g_source_attach (component->stop_cancellable_source, component->own_ctx);
+ component->ctx = g_main_context_ref (component->own_ctx);
+
+@@ -1107,6 +1133,9 @@ nice_component_finalize (GObject *obj)
+ g_warn_if_fail (cmp->remote_candidates == NULL);
+ g_warn_if_fail (cmp->incoming_checks == NULL);
+
++ g_list_free_full (cmp->valid_candidates,
++ (GDestroyNotify) nice_candidate_free);
++
+ g_clear_object (&cmp->tcp);
+ g_clear_object (&cmp->stop_cancellable);
+ g_clear_object (&cmp->iostream);
+@@ -1225,7 +1254,7 @@ component_source_prepare (GSource *source, gint *timeout_)
+ child_socket_source->source =
+ g_socket_create_source (child_socket_source->socket->fileno, G_IO_IN,
+ NULL);
+- g_source_set_dummy_callback (child_socket_source->source);
++ source_set_dummy_callback (child_socket_source->source);
+ g_source_add_child_source (source, child_socket_source->source);
+ g_source_unref (child_socket_source->source);
+ component_source->socket_sources =
+@@ -1370,7 +1399,7 @@ nice_component_input_source_new (NiceAgent *agent, guint stream_id,
+ GSource *cancellable_source;
+
+ cancellable_source = g_cancellable_source_new (cancellable);
+- g_source_set_dummy_callback (cancellable_source);
++ source_set_dummy_callback (cancellable_source);
+ g_source_add_child_source ((GSource *) component_source,
+ cancellable_source);
+ g_source_unref (cancellable_source);
+@@ -1421,3 +1450,83 @@ turn_server_unref (TurnServer *turn)
+ g_slice_free (TurnServer, turn);
+ }
+ }
++
++void
++nice_component_add_valid_candidate (NiceComponent *component,
++ const NiceCandidate *candidate)
++{
++ guint count = 0;
++ GList *item, *last = NULL;
++
++ for (item = component->valid_candidates; item; item = item->next) {
++ NiceCandidate *cand = item->data;
++
++ last = item;
++ count++;
++ if (nice_candidate_equal_target (cand, candidate))
++ return;
++ }
++
++ /* New candidate */
++
++ if (nice_debug_is_enabled ()) {
++ char str[INET6_ADDRSTRLEN];
++ nice_address_to_string (&candidate->addr, str);
++ nice_debug ("Agent %p : %d:%d Adding valid source"
++ " candidate: %s:%d trans: %d", component->agent,
++ candidate->stream_id, candidate->component_id, str,
++ nice_address_get_port (&candidate->addr), candidate->transport);
++ }
++
++ component->valid_candidates = g_list_prepend (
++ component->valid_candidates, nice_candidate_copy (candidate));
++
++ /* Delete the last one to make sure we don't have a list that is too long,
++ * the candidates are not freed on ICE restart as this would be more complex,
++ * we just keep the list not too long.
++ */
++ if (count > NICE_COMPONENT_MAX_VALID_CANDIDATES) {
++ NiceCandidate *cand = last->data;
++
++ component->valid_candidates = g_list_delete_link (
++ component->valid_candidates, last);
++ nice_candidate_free (cand);
++ }
++}
++
++gboolean
++nice_component_verify_remote_candidate (NiceComponent *component,
++ const NiceAddress *address, NiceSocket *nicesock)
++{
++ GList *item;
++
++ if (component->fallback_mode)
++ return TRUE;
++
++ for (item = component->valid_candidates; item; item = item->next) {
++ NiceCandidate *cand = item->data;
++
++ if (((nicesock->type == NICE_SOCKET_TYPE_TCP_BSD &&
++ (cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE ||
++ cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE ||
++ cand->transport == NICE_CANDIDATE_TRANSPORT_TCP_SO)) ||
++ cand->transport == NICE_CANDIDATE_TRANSPORT_UDP) &&
++ nice_address_equal (address, &cand->addr)) {
++ /* fast return if it's already the first */
++ if (item == component->valid_candidates)
++ return TRUE;
++
++ /* Put the current candidate at the top so that in the normal use-case,
++ * this function becomes O(1).
++ */
++ component->valid_candidates = g_list_remove_link (
++ component->valid_candidates, item);
++ component->valid_candidates = g_list_concat (item,
++ component->valid_candidates);
++
++ return TRUE;
++ }
++ }
++
++ return FALSE;
++}
+diff --git a/agent/component.h b/agent/component.h
+index 6712794..a8a1222 100644
+--- a/agent/component.h
++++ b/agent/component.h
+@@ -159,12 +159,14 @@ struct _NiceComponent {
+ NiceComponentState state;
+ GSList *local_candidates; /* list of NiceCandidate objs */
+ GSList *remote_candidates; /* list of NiceCandidate objs */
++ GList *valid_candidates; /* list of owned remote NiceCandidates that are part of valid pairs */
+ GSList *socket_sources; /* list of SocketSource objs; must only grow monotonically */
+ guint socket_sources_age; /* incremented when socket_sources changes */
+ GSList *incoming_checks; /* list of IncomingCheck objs */
+ GList *turn_servers; /* List of TurnServer objs */
+ CandidatePair selected_pair; /* independent from checklists,
+ see ICE 11.1. "Sending Media" (ID-19) */
++ gboolean fallback_mode; /* in this case, accepts packets from all, ignore candidate validation */
+ NiceCandidate *restart_candidate; /* for storing active remote candidate during a restart */
+ NiceCandidate *turn_candidate; /* for storing active turn candidate if turn servers have been cleared */
+ /* I/O handling. The main context must always be non-NULL, and is used for all
+@@ -301,6 +303,14 @@ turn_server_ref (TurnServer *turn);
+ void
+ turn_server_unref (TurnServer *turn);
+
++void
++nice_component_add_valid_candidate (NiceComponent *component,
++ const NiceCandidate *candidate);
++
++gboolean
++nice_component_verify_remote_candidate (NiceComponent *component,
++ const NiceAddress *address, NiceSocket *nicesock);
++
+
+ G_END_DECLS
+
+diff --git a/agent/conncheck.c b/agent/conncheck.c
+index dda2f2f..c8a4edf 100644
+--- a/agent/conncheck.c
++++ b/agent/conncheck.c
+@@ -64,8 +64,8 @@
+
+ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream);
+ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream *stream, NiceComponent *component);
+-static guint priv_prune_pending_checks (NiceStream *stream, guint component_id);
+-static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand, gboolean use_candidate);
++static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, guint component_id);
++static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand);
+ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceCandidate *localcand, NiceCandidate *remotecand);
+ static size_t priv_create_username (NiceAgent *agent, NiceStream *stream,
+ guint component_id, NiceCandidate *remote, NiceCandidate *local,
+@@ -76,6 +76,8 @@ static void conn_check_free_item (gpointer data);
+ static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
+ NiceAgent *agent, guint stream_id, NiceComponent *component,
+ NiceCandidate *local, NiceCandidate *remote, NiceCheckState initial_state);
++static gboolean priv_update_selected_pair (NiceAgent *agent,
++ NiceComponent *component, CandidateCheckPair *pair);
+
+ static int priv_timer_expired (GTimeVal *timer, GTimeVal *now)
+ {
+@@ -84,6 +86,17 @@ static int priv_timer_expired (GTimeVal *timer, GTimeVal *now)
+ now->tv_sec >= timer->tv_sec;
+ }
+
++static unsigned int priv_timer_remainder (GTimeVal *timer, GTimeVal *now)
++{
++ unsigned int delay;
++ if (now->tv_sec > timer->tv_sec ||
++ (now->tv_sec == timer->tv_sec && now->tv_usec > timer->tv_usec))
++ return 0;
++ delay = (timer->tv_sec - now->tv_sec) * 1000;
++ delay += ((signed long)(timer->tv_usec - now->tv_usec)) / 1000;
++ return delay;
++}
++
+ static gchar
+ priv_state_to_gchar (NiceCheckState state)
+ {
+@@ -98,8 +111,6 @@ priv_state_to_gchar (NiceCheckState state)
+ return 'F';
+ case NICE_CHECK_FROZEN:
+ return 'Z';
+- case NICE_CHECK_CANCELLED:
+- return 'C';
+ case NICE_CHECK_DISCOVERED:
+ return 'D';
+ default:
+@@ -107,6 +118,54 @@ priv_state_to_gchar (NiceCheckState state)
+ }
+ }
+
++static const gchar *
++priv_state_to_string (NiceCheckState state)
++{
++ switch (state) {
++ case NICE_CHECK_WAITING:
++ return "waiting";
++ case NICE_CHECK_IN_PROGRESS:
++ return "in progress";
++ case NICE_CHECK_SUCCEEDED:
++ return "succeeded";
++ case NICE_CHECK_FAILED:
++ return "failed";
++ case NICE_CHECK_FROZEN:
++ return "frozen";
++ case NICE_CHECK_DISCOVERED:
++ return "discovered";
++ default:
++ g_assert_not_reached ();
++ }
++}
++
++static const gchar *
++priv_ice_return_to_string (StunUsageIceReturn ice_return)
++{
++ switch (ice_return) {
++ case STUN_USAGE_ICE_RETURN_SUCCESS:
++ return "success";
++ case STUN_USAGE_ICE_RETURN_ERROR:
++ return "error";
++ case STUN_USAGE_ICE_RETURN_INVALID:
++ return "invalid";
++ case STUN_USAGE_ICE_RETURN_ROLE_CONFLICT:
++ return "role conflict";
++ case STUN_USAGE_ICE_RETURN_INVALID_REQUEST:
++ return "invalid request";
++ case STUN_USAGE_ICE_RETURN_INVALID_METHOD:
++ return "invalid method";
++ case STUN_USAGE_ICE_RETURN_MEMORY_ERROR:
++ return "memory error";
++ case STUN_USAGE_ICE_RETURN_INVALID_ADDRESS:
++ return "invalid address";
++ case STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS:
++ return "no mapped address";
++ default:
++ g_assert_not_reached ();
++ }
++}
++
+ static const gchar *
+ priv_candidate_type_to_string (NiceCandidateType type)
+ {
+@@ -130,12 +189,15 @@ priv_candidate_type_to_string (NiceCandidateType type)
+ static void
+ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *detail)
+ {
+- GSList *i, *k;
+- guint j;
++ GSList *i, *k, *l;
++ guint j, m;
++ GTimeVal now;
+
+ if (!nice_debug_is_verbose ())
+ return;
+
++ g_get_current_time (&now);
++
+ #define PRIORITY_LEN 32
+
+ nice_debug ("Agent %p : *** conncheck list DUMP (called from %s%s)",
+@@ -148,26 +210,34 @@ priv_print_conn_check_lists (NiceAgent *agent, const gchar *where, const gchar *
+ if (pair->component_id == j) {
+ gchar local_addr[INET6_ADDRSTRLEN];
+ gchar remote_addr[INET6_ADDRSTRLEN];
+- StunTimer *timer = &pair->timer;
+
+ nice_address_to_string (&pair->local->addr, local_addr);
+ nice_address_to_string (&pair->remote->addr, remote_addr);
+
+ nice_debug ("Agent %p : *** sc=%d/%d : pair %p : "
+- "f=%s t=%s:%s timer=%d/%d %d/%dms "
+- "[%s]:%u > [%s]:%u state=%c%s%s%s",
++ "f=%s t=%s:%s [%s]:%u > [%s]:%u state=%c%s%s%s",
+ agent, pair->stream_id, pair->component_id, pair,
+ pair->foundation,
+ priv_candidate_type_to_string (pair->local->type),
+ priv_candidate_type_to_string (pair->remote->type),
+- timer->retransmissions, timer->max_retransmissions,
+- timer->delay - stun_timer_remainder (timer), timer->delay,
+ local_addr, nice_address_get_port (&pair->local->addr),
+ remote_addr, nice_address_get_port (&pair->remote->addr),
+ priv_state_to_gchar (pair->state),
+ pair->valid ? "V" : "",
+ pair->nominated ? "N" : "",
+ g_slist_find (agent->triggered_check_queue, pair) ? "T" : "");
++
++ for (l = pair->stun_transactions, m = 0; l; l = l->next, m++) {
++ StunTransaction *stun = l->data;
++ nice_debug ("Agent %p : *** sc=%d/%d : pair %p : "
++ "stun#=%d timer=%d/%d %d/%dms buf=%p %s",
++ agent, pair->stream_id, pair->component_id, pair, m,
++ stun->timer.retransmissions, stun->timer.max_retransmissions,
++ stun->timer.delay - priv_timer_remainder (&stun->next_tick, &now),
++ stun->timer.delay,
++ stun->message.buffer,
++ (m == 0 && pair->retransmit) ? "(R)" : "");
++ }
+ }
+ }
+ }
+@@ -181,6 +251,8 @@ priv_add_pair_to_triggered_check_queue (NiceAgent *agent, CandidateCheckPair *pa
+ {
+ g_assert (pair);
+
++ pair->state = NICE_CHECK_IN_PROGRESS;
++ nice_debug ("Agent %p : pair %p state IN_PROGRESS", agent, pair);
+ if (agent->triggered_check_queue == NULL ||
+ g_slist_find (agent->triggered_check_queue, pair) == NULL)
+ agent->triggered_check_queue = g_slist_append (agent->triggered_check_queue, pair);
+@@ -209,6 +281,89 @@ priv_get_pair_from_triggered_check_queue (NiceAgent *agent)
+ return pair;
+ }
+
++/*
++ * Check if the conncheck list if Active according to
++ * ICE spec, 5.7.4 (Computing States)
++ *
++ * note: the ICE spec in unclear about that, but the check list should
++ * be considered active when there is at least a pair in Waiting state
++ * OR a pair in In-Progress state.
++ */
++static gboolean
++priv_is_checklist_active (NiceStream *stream)
++{
++ GSList *i;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state == NICE_CHECK_WAITING || p->state == NICE_CHECK_IN_PROGRESS)
++ return TRUE;
++ }
++ return FALSE;
++}
++
++/*
++ * Check if the conncheck list if Frozen according to
++ * ICE spec, 5.7.4 (Computing States)
++ */
++static gboolean
++priv_is_checklist_frozen (NiceStream *stream)
++{
++ GSList *i;
++
++ if (stream->conncheck_list == NULL)
++ return FALSE;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state != NICE_CHECK_FROZEN)
++ return FALSE;
++ }
++ return TRUE;
++}
++
++/*
++ * Check if all components of the stream have
++ * a valid pair (used for ICE spec, 7.1.3.2.3, point 2.)
++ */
++static gboolean
++priv_all_components_have_valid_pair (NiceStream *stream)
++{
++ guint i;
++ GSList *j;
++
++ for (i = 1; i <= stream->n_components; i++) {
++ for (j = stream->conncheck_list; j ; j = j->next) {
++ CandidateCheckPair *p = j->data;
++ if (p->component_id == i && p->valid)
++ break;
++ }
++ if (j == NULL)
++ return FALSE;
++ }
++ return TRUE;
++}
++
++/*
++ * Check if the foundation in parameter matches the foundation
++ * of a valid pair in the conncheck list [of stream] (used for ICE spec,
++ * 7.1.3.2.3, point 2.)
++ */
++static gboolean
++priv_foundation_matches_a_valid_pair (const gchar *foundation, NiceStream *stream)
++{
++ GSList *i;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->valid &&
++ strncmp (p->foundation, foundation,
++ NICE_CANDIDATE_PAIR_MAX_FOUNDATION) == 0)
++ return TRUE;
++ }
++ return FALSE;
++}
++
+ /*
+ * Finds the next connectivity check in WAITING state.
+ */
+@@ -218,7 +373,6 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
+
+ /* note: list is sorted in priority order to first waiting check has
+ * the highest priority */
+-
+ for (i = conn_check_list; i ; i = i->next) {
+ CandidateCheckPair *p = i->data;
+ if (p->state == NICE_CHECK_WAITING)
+@@ -228,6 +382,57 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
+ return NULL;
+ }
+
++/*
++ * Finds the next connectivity check in FROZEN state.
++ */
++static CandidateCheckPair *
++priv_conn_check_find_next_frozen (GSList *conn_check_list)
++{
++ GSList *i;
++
++ /* note: list is sorted in priority order to first frozen check has
++ * the highest priority */
++ for (i = conn_check_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state == NICE_CHECK_FROZEN)
++ return p;
++ }
++
++ return NULL;
++}
++
++/*
++ * Returns the number of active check lists of the agent
++ */
++static guint
++priv_number_of_active_check_lists (NiceAgent *agent)
++{
++ guint n = 0;
++ GSList *i;
++
++ for (i = agent->streams; i ; i = i->next)
++ if (priv_is_checklist_active (i->data))
++ n++;
++ return n;
++}
++
++/*
++ * Returns the first stream of the agent having a Frozen
++ * connection check list
++ */
++static NiceStream *
++priv_find_first_frozen_check_list (NiceAgent *agent)
++{
++ GSList *i;
++
++ for (i = agent->streams; i ; i = i->next) {
++ NiceStream *stream = i->data;
++ if (priv_is_checklist_frozen (stream))
++ return stream;
++ }
++ return NULL;
++}
++
+ /*
+ * Initiates a new connectivity check for a ICE candidate pair.
+ *
+@@ -235,8 +440,6 @@ static CandidateCheckPair *priv_conn_check_find_next_waiting (GSList *conn_check
+ */
+ static gboolean priv_conn_check_initiate (NiceAgent *agent, CandidateCheckPair *pair)
+ {
+- g_get_current_time (&pair->next_tick);
+- g_time_val_add (&pair->next_tick, agent->timer_ta * 1000);
+ pair->state = NICE_CHECK_IN_PROGRESS;
+ nice_debug ("Agent %p : pair %p state IN_PROGRESS", agent, pair);
+ conn_check_send (agent, pair);
+@@ -246,58 +449,55 @@ static gboolean priv_conn_check_initiate (NiceAgent *agent, CandidateCheckPair *
+ /*
+ * Unfreezes the next connectivity check in the list. Follows the
+ * algorithm (2.) defined in 5.7.4 (Computing States) of the ICE spec
+- * (ID-19), with some exceptions (see comments in code).
++ * (RFC5245)
+ *
+ * See also sect 7.1.2.2.3 (Updating Pair States), and
+ * priv_conn_check_unfreeze_related().
+ *
+ * @return TRUE on success, and FALSE if no frozen candidates were found.
+ */
+-static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent)
++static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent, NiceStream *stream)
+ {
+- CandidateCheckPair *pair = NULL;
+ GSList *i, *j;
+-
+- /* XXX: the unfreezing is implemented a bit differently than in the
+- * current ICE spec, but should still be interoperate:
+- * - checks are not grouped by foundation
+- * - one frozen check is unfrozen (lowest component-id, highest
+- * priority)
+- */
++ GSList *found_list = NULL;
++ gboolean result = FALSE;
+
+ priv_print_conn_check_lists (agent, G_STRFUNC, NULL);
+
+- for (i = agent->streams; i; i = i->next) {
+- NiceStream *stream = i->data;
+- guint64 max_frozen_priority = 0;
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p1 = i->data;
++ CandidateCheckPair *pair = NULL;
++ guint lowest_component_id = stream->n_components + 1;
++ guint64 highest_priority = 0;
+
++ if (g_slist_find_custom (found_list, p1->foundation, (GCompareFunc)strcmp))
++ continue;
++ found_list = g_slist_prepend (found_list, p1->foundation);
+
+ for (j = stream->conncheck_list; j ; j = j->next) {
+- CandidateCheckPair *p = j->data;
+-
+- /* XXX: the prio check could be removed as the pairs are sorted
+- * already */
+-
+- if (p->state == NICE_CHECK_FROZEN) {
+- if (p->priority > max_frozen_priority) {
+- max_frozen_priority = p->priority;
+- pair = p;
+- }
++ CandidateCheckPair *p2 = i->data;
++ if (strncmp (p2->foundation, p1->foundation,
++ NICE_CANDIDATE_PAIR_MAX_FOUNDATION) == 0) {
++ if (p2->component_id < lowest_component_id ||
++ (p2->component_id == lowest_component_id &&
++ p2->priority > highest_priority)) {
++ pair = p2;
++ lowest_component_id = p2->component_id;
++ highest_priority = p2->priority;
++ }
+ }
+ }
+
+- if (pair)
+- break;
+- }
+-
+- if (pair) {
+- nice_debug ("Agent %p : Pair %p with s/c-id %u/%u (%s) unfrozen.", agent, pair, pair->stream_id, pair->component_id, pair->foundation);
+- pair->state = NICE_CHECK_WAITING;
+- nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
+- return TRUE;
++ if (pair) {
++ nice_debug ("Agent %p : Pair %p with s/c-id %u/%u (%s) unfrozen.",
++ agent, pair, pair->stream_id, pair->component_id, pair->foundation);
++ pair->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
++ result = TRUE;
++ }
+ }
+-
+- return FALSE;
++ g_slist_free (found_list);
++ return result;
+ }
+
+ /*
+@@ -314,7 +514,6 @@ static gboolean priv_conn_check_unfreeze_next (NiceAgent *agent)
+ static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stream, CandidateCheckPair *ok_check)
+ {
+ GSList *i, *j;
+- guint unfrozen = 0;
+
+ g_assert (ok_check);
+ g_assert (ok_check->state == NICE_CHECK_SUCCEEDED);
+@@ -334,60 +533,147 @@ static void priv_conn_check_unfreeze_related (NiceAgent *agent, NiceStream *stre
+ nice_debug ("Agent %p : Unfreezing check %p (after successful check %p).", agent, p, ok_check);
+ p->state = NICE_CHECK_WAITING;
+ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+- ++unfrozen;
+ }
+ }
+ }
+
+ /* step: perform the step (2) of 'Updating Pair States' */
+ stream = agent_find_stream (agent, ok_check->stream_id);
+- if (nice_stream_all_components_ready (stream)) {
+- /* step: unfreeze checks from other streams */
++ if (priv_all_components_have_valid_pair (stream)) {
+ for (i = agent->streams; i ; i = i->next) {
++ /* the agent examines the check list for each other
++ * media stream in turn
++ */
+ NiceStream *s = i->data;
+- for (j = stream->conncheck_list; j ; j = j->next) {
+- CandidateCheckPair *p = j->data;
+-
+- if (p->stream_id == s->id &&
+- p->stream_id != ok_check->stream_id) {
+- if (p->state == NICE_CHECK_FROZEN &&
+- strcmp (p->foundation, ok_check->foundation) == 0) {
++ if (s->id == ok_check->stream_id)
++ continue;
++ if (priv_is_checklist_active (s)) {
++ /* checklist is Active
++ */
++ for (j = s->conncheck_list; j ; j = j->next) {
++ CandidateCheckPair *p = j->data;
++ if (p->state == NICE_CHECK_FROZEN &&
++ priv_foundation_matches_a_valid_pair (p->foundation, stream)) {
+ nice_debug ("Agent %p : Unfreezing check %p from stream %u (after successful check %p).", agent, p, s->id, ok_check);
+ p->state = NICE_CHECK_WAITING;
+ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+- ++unfrozen;
+-
+- }
+- }
++ }
++ }
++ } else if (priv_is_checklist_frozen (s)) {
++ /* checklist is Frozen
++ */
++ gboolean match_found = FALSE;
++ /* check if there is one pair in the check list whose
++ * foundation matches a pair in the valid list under
++ * consideration
++ */
++ for (j = s->conncheck_list; j ; j = j->next) {
++ CandidateCheckPair *p = j->data;
++ if (priv_foundation_matches_a_valid_pair (p->foundation, stream)) {
++ match_found = TRUE;
++ nice_debug ("Agent %p : Unfreezing check %p from stream %u (after successful check %p).", agent, p, s->id, ok_check);
++ p->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, p);
++ }
++ }
++
++ if (!match_found) {
++ /* set the pair with the lowest component ID
++ * and highest priority to Waiting
++ */
++ priv_conn_check_unfreeze_next (agent, s);
++ }
+ }
+- /* note: only unfreeze check from one stream at a time */
+- if (unfrozen)
+- break;
+ }
+ }
++}
+
+- if (unfrozen == 0)
+- priv_conn_check_unfreeze_next (agent);
++/*
++ * Create a new STUN transaction and add it to the list
++ * of ongoing stun transactions of a pair.
++ *
++ * @pair the pair the new stun transaction should be added to.
++ * @return the created stun transaction.
++ */
++static StunTransaction *
++priv_add_stun_transaction (CandidateCheckPair *pair)
++{
++ StunTransaction *stun = g_slice_new0 (StunTransaction);
++ pair->stun_transactions = g_slist_prepend (pair->stun_transactions, stun);
++ pair->retransmit = TRUE;
++ return stun;
+ }
+
++/*
++ * Forget a STUN transaction.
++ *
++ * @data the stun transaction to be forgotten.
++ * @user_data the component contained the concerned stun agent.
++ */
+ static void
+-candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckPair *p)
++priv_forget_stun_transaction (gpointer data, gpointer user_data)
+ {
++ StunTransaction *stun = data;
++ NiceComponent *component = user_data;
+ StunTransactionId id;
++
++ if (stun->message.buffer != NULL) {
++ stun_message_id (&stun->message, id);
++ stun_agent_forget_transaction (&component->stun_agent, id);
++ }
++}
++
++static void
++priv_free_stun_transaction (gpointer data)
++{
++ g_slice_free (StunTransaction, data);
++}
++
++/*
++ * Remove a STUN transaction from a pair, and forget it
++ * from the related component stun agent.
++ *
++ * @pair the pair the stun transaction should be removed from.
++ * @stun the stun transaction to be removed.
++ * @component the component containing the stun agent used to
++ * forget the stun transaction.
++ */
++static void
++priv_remove_stun_transaction (CandidateCheckPair *pair,
++ StunTransaction *stun, NiceComponent *component)
++{
++ priv_forget_stun_transaction (stun, component);
++ pair->stun_transactions = g_slist_remove (pair->stun_transactions, stun);
++ priv_free_stun_transaction (stun);
++}
++
++/*
++ * Remove all STUN transactions from a pair, and forget them
++ * from the related component stun agent.
++ *
++ * @pair the pair the stun list should be cleared.
++ * @component the component containing the stun agent used to
++ * forget the stun transactions.
++ */
++static void
++priv_free_all_stun_transactions (CandidateCheckPair *pair,
++ NiceComponent *component)
++{
++ if (component)
++ g_slist_foreach (pair->stun_transactions, priv_forget_stun_transaction, component);
++ g_slist_free_full (pair->stun_transactions, priv_free_stun_transaction);
++ pair->stun_transactions = NULL;
++}
++
++static void
++candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckPair *p)
++{
+ NiceComponent *component;
+
+ component = nice_stream_find_component_by_id (stream, p->component_id);
+-
+ p->state = NICE_CHECK_FAILED;
+ nice_debug ("Agent %p : pair %p state FAILED", agent, p);
+-
+- if (p->stun_message.buffer != NULL) {
+- stun_message_id (&p->stun_message, id);
+- stun_agent_forget_transaction (&component->stun_agent, id);
+- }
+-
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
++ priv_free_all_stun_transactions (p, component);
+ }
+
+ /*
+@@ -398,78 +684,183 @@ candidate_check_pair_fail (NiceStream *stream, NiceAgent *agent, CandidateCheckP
+ *
+ * @return will return FALSE when no more pending timers.
+ */
+-static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent, GTimeVal *now, gboolean *stun_transmitted)
++static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agent)
+ {
+ gboolean keep_timer_going = FALSE;
+- guint s_inprogress = 0, s_succeeded = 0, s_discovered = 0,
+- s_nominated = 0, s_waiting_for_nomination = 0, s_valid = 0;
+- guint frozen = 0, waiting = 0;
+- GSList *i, *k;
++ GSList *i, *j;
++ CandidateCheckPair *pair;
++ unsigned int timeout;
++ GTimeVal now;
+
++ g_get_current_time (&now);
++
++ /* step: process ongoing STUN transactions */
+ for (i = stream->conncheck_list; i ; i = i->next) {
+ CandidateCheckPair *p = i->data;
++ gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
++ NiceComponent *component;
++ StunTransaction *stun;
+
+- if (p->state == NICE_CHECK_IN_PROGRESS) {
+- if (p->stun_message.buffer == NULL) {
+- nice_debug ("Agent %p : STUN connectivity check was cancelled, marking as done.", agent);
+- p->state = NICE_CHECK_FAILED;
+- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
+- } else if (priv_timer_expired (&p->next_tick, now)) {
+- switch (stun_timer_refresh (&p->timer)) {
+- case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+- {
+- /* case: error, abort processing */
+- gchar tmpbuf1[INET6_ADDRSTRLEN], tmpbuf2[INET6_ADDRSTRLEN];
+- nice_address_to_string (&p->local->addr, tmpbuf1);
+- nice_address_to_string (&p->remote->addr, tmpbuf2);
+- nice_debug ("Agent %p : Retransmissions failed, giving up on connectivity check %p", agent, p);
+- nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
+- tmpbuf1, nice_address_get_port (&p->local->addr),
+- tmpbuf2, nice_address_get_port (&p->remote->addr));
+- candidate_check_pair_fail (stream, agent, p);
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", retransmission failed");
+-
+- break;
+- }
+- case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+- {
+- /* case: not ready, so schedule a new timeout */
+- unsigned int timeout = stun_timer_remainder (&p->timer);
+- nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
+- "(timeout %dms, delay=%dms, retrans=%d).",
+- agent, p, timeout, p->timer.delay, p->timer.retransmissions);
++ if (p->stun_transactions == NULL)
++ continue;
+
+- agent_socket_send (p->sockptr, &p->remote->addr,
+- stun_message_length (&p->stun_message),
+- (gchar *)p->stun_buffer);
++ if (!agent_find_component (agent, p->stream_id, p->component_id,
++ NULL, &component))
++ continue;
+
++ /* The first stun transaction of the list may eventually be
++ * retransmitted, other stun transactions just have their
++ * timer updated.
++ */
+
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = *now;
+- g_time_val_add (&p->next_tick, timeout * 1000);
++ j = p->stun_transactions->next;
+
+- *stun_transmitted = TRUE;
+- return TRUE;
+- }
+- case STUN_USAGE_TIMER_RETURN_SUCCESS:
+- {
+- unsigned int timeout = stun_timer_remainder (&p->timer);
++ /* process all stun transactions except the first one */
++ while (j) {
++ StunTransaction *s = j->data;
++ GSList *next = j->next;
+
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- p->next_tick = *now;
+- g_time_val_add (&p->next_tick, timeout * 1000);
+-
+- keep_timer_going = TRUE;
+- break;
+- }
++ if (priv_timer_expired (&s->next_tick, &now))
++ switch (stun_timer_refresh (&s->timer)) {
++ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
++ priv_remove_stun_transaction (p, s, component);
++ break;
++ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
++ timeout = stun_timer_remainder (&s->timer);
++ s->next_tick = now;
++ g_time_val_add (&s->next_tick, timeout * 1000);
++ break;
+ default:
+- /* Nothing to do. */
+ break;
+- }
+ }
++ j = next;
+ }
+
++ if (p->state != NICE_CHECK_IN_PROGRESS)
++ continue;
++
++ /* process the first stun transaction of the list */
++ stun = p->stun_transactions->data;
++ if (!priv_timer_expired (&stun->next_tick, &now))
++ continue;
++
++ switch (stun_timer_refresh (&stun->timer)) {
++ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
++timer_return_timeout:
++ /* case: error, abort processing */
++ nice_address_to_string (&p->local->addr, tmpbuf1);
++ nice_address_to_string (&p->remote->addr, tmpbuf2);
++ nice_debug ("Agent %p : Retransmissions failed, giving up on "
++ "connectivity check %p", agent, p);
++ nice_debug ("Agent %p : Failed pair is [%s]:%u --> [%s]:%u", agent,
++ tmpbuf1, nice_address_get_port (&p->local->addr),
++ tmpbuf2, nice_address_get_port (&p->remote->addr));
++ candidate_check_pair_fail (stream, agent, p);
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", retransmission failed");
++
++ /* perform a check if a transition state from connected to
++ * ready can be performed. This may happen here, when the last
++ * in-progress pair has expired its retransmission count
++ * in priv_conn_check_tick_stream(), which is a condition to
++ * make the transition connected to ready.
++ */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ break;
++ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
++ /* case: retransmission stopped, due to the nomination of
++ * a pair with a higher priority than this in-progress pair,
++ * ICE spec, sect 8.1.2 "Updating States", item 2.2
++ */
++ if (!p->retransmit)
++ goto timer_return_timeout;
++
++ /* case: not ready, so schedule a new timeout */
++ timeout = stun_timer_remainder (&stun->timer);
++
++ nice_debug ("Agent %p :STUN transaction retransmitted on pair %p "
++ "(timer=%d/%d %d/%dms).",
++ agent, p,
++ stun->timer.retransmissions, stun->timer.max_retransmissions,
++ stun->timer.delay - timeout, stun->timer.delay);
++
++ agent_socket_send (p->sockptr, &p->remote->addr,
++ stun_message_length (&stun->message),
++ (gchar *)stun->buffer);
++
++ /* note: convert from milli to microseconds for g_time_val_add() */
++ stun->next_tick = now;
++ g_time_val_add (&stun->next_tick, timeout * 1000);
++
++ return TRUE;
++ case STUN_USAGE_TIMER_RETURN_SUCCESS:
++ timeout = stun_timer_remainder (&stun->timer);
++
++ /* note: convert from milli to microseconds for g_time_val_add() */
++ stun->next_tick = now;
++ g_time_val_add (&stun->next_tick, timeout * 1000);
++
++ keep_timer_going = TRUE;
++ break;
++ default:
++ /* Nothing to do. */
++ break;
++ }
++ }
++
++ /* step: perform an ordinary check, ICE spec, 5.8 "Scheduling Checks"
++ * note: This code is executed when the triggered checks list is
++ * empty, and when no STUN message has been sent (pacing constraint)
++ */
++ pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
++ if (pair) {
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a pair in Waiting state");
++ priv_conn_check_initiate (agent, pair);
++ return TRUE;
++ }
++
++ /* note: this is unclear in the ICE spec, but a check list in Frozen
++ * state (where all pairs are in Frozen state) is not supposed to
++ * change its state by an ordinary check, but only by the success of
++ * checks in other check lists, in priv_conn_check_unfreeze_related().
++ * The underlying idea is to concentrate the checks on a single check
++ * list initially.
++ */
++ if (priv_is_checklist_frozen (stream))
++ return keep_timer_going;
++
++ /* step: ordinary check continued, if there's no pair in the waiting
++ * state, pick a pair in the frozen state
++ */
++ pair = priv_conn_check_find_next_frozen (stream->conncheck_list);
++ if (pair) {
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a pair in Frozen state");
++ pair->state = NICE_CHECK_WAITING;
++ nice_debug ("Agent %p : pair %p state WAITING", agent, pair);
++ priv_conn_check_initiate (agent, pair);
++ return TRUE;
++ }
++ return keep_timer_going;
++}
++
++static gboolean
++priv_conn_check_tick_stream_nominate (NiceStream *stream, NiceAgent *agent)
++{
++ gboolean keep_timer_going = FALSE;
++ guint s_inprogress = 0;
++ guint s_succeeded = 0;
++ guint s_discovered = 0;
++ guint s_nominated = 0;
++ guint s_waiting_for_nomination = 0;
++ guint s_valid = 0;
++ guint frozen = 0;
++ guint waiting = 0;
++ GSList *i, *k;
++
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
+ if (p->state == NICE_CHECK_FROZEN)
+ ++frozen;
+ else if (p->state == NICE_CHECK_IN_PROGRESS)
+@@ -495,12 +886,102 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ if (s_inprogress)
+ keep_timer_going = TRUE;
+
+- /* note: if some components have established connectivity,
+- * but yet no nominated pair, keep timer going */
+ if (s_nominated < stream->n_components &&
+ s_waiting_for_nomination) {
+- keep_timer_going = TRUE;
+- if (agent->controlling_mode) {
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ if (agent->nomination_mode == NICE_NOMINATION_MODE_REGULAR &&
++ agent->controlling_mode) {
++#define NICE_MIN_NUMBER_OF_VALID_PAIRS 2
++ /* ICE 8.1.1.1 Regular nomination
++ * we choose to nominate the valid pair of a component if
++ * - there is no pair left frozen, waiting or in-progress, or
++ * - if there are at least two valid pairs, or
++ * - if there is at least one valid pair of type HOST-HOST
++ *
++ * This is the "stopping criterion" described in 8.1.1.1, and is
++ * a "local optimization" between accumulating more valid pairs,
++ * and limiting the time spent waiting for in-progress connections
++ * checks until they finally fail.
++ */
++ GSList *component_item;
++
++ for (component_item = stream->components; component_item;
++ component_item = component_item->next) {
++ NiceComponent *component = component_item->data;
++ gboolean already_done = FALSE;
++ gboolean stopping_criterion = FALSE;
++ guint p_valid = 0;
++ guint p_frozen = 0;
++ guint p_waiting = 0;
++ guint p_inprogress = 0;
++ guint p_host_host_valid = 0;
++
++ /* verify that the choice of the pair to be nominated
++ * has not already been done
++ */
++ for (k = stream->conncheck_list; k ; k = k->next) {
++ CandidateCheckPair *p = k->data;
++ if (p->component_id == component->id) {
++ if (p->use_candidate_on_next_check)
++ already_done = TRUE;
++ if (p->state == NICE_CHECK_FROZEN)
++ p_frozen++;
++ else if (p->state == NICE_CHECK_WAITING)
++ p_waiting++;
++ else if (p->state == NICE_CHECK_IN_PROGRESS)
++ p_inprogress++;
++ if (p->valid)
++ p_valid++;
++ if (p->valid &&
++ p->local->type == NICE_CANDIDATE_TYPE_HOST &&
++ p->remote->type == NICE_CANDIDATE_TYPE_HOST)
++ p_host_host_valid++;
++ }
++ }
++
++ if (already_done)
++ continue;
++
++ stopping_criterion =
++ (p_host_host_valid > 0 ||
++ p_valid >= NICE_MIN_NUMBER_OF_VALID_PAIRS ||
++ (p_waiting == 0 && p_inprogress == 0 && p_frozen == 0));
++
++ if (!stopping_criterion)
++ continue;
++
++ /* when the stopping criterion is satisfied, we choose
++ * a pair to be nominated in the list of valid pairs,
++ * and add it to the triggered checks list
++ */
++ for (k = stream->conncheck_list; k ; k = k->next) {
++ CandidateCheckPair *p = k->data;
++ /* note: highest priority item selected (list always sorted) */
++ if (p->component_id == component->id &&
++ !p->nominated &&
++ !p->use_candidate_on_next_check &&
++ p->valid) {
++ /* According a ICE spec, sect 8.1.1.1. "Regular
++ * Nomination", we enqueue the check that produced this
++ * valid pair. When this pair has been discovered, we want
++ * to test its parent pair instead.
++ */
++ if (p->succeeded_pair != NULL) {
++ g_assert (p->state == NICE_CHECK_DISCOVERED);
++ p = p->succeeded_pair;
++ }
++ g_assert (p->state == NICE_CHECK_SUCCEEDED);
++ nice_debug ("Agent %p : restarting check %p with "
++ "USE-CANDIDATE attrib (regular nomination)", agent, p);
++ p->use_candidate_on_next_check = TRUE;
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ keep_timer_going = TRUE;
++ break; /* move to the next component */
++ }
++ }
++ }
++ }
++ } else if (agent->controlling_mode) {
+ GSList *component_item;
+
+ for (component_item = stream->components; component_item;
+@@ -515,7 +996,9 @@ static gboolean priv_conn_check_tick_stream (NiceStream *stream, NiceAgent *agen
+ p->state == NICE_CHECK_DISCOVERED)) {
+ nice_debug ("Agent %p : restarting check %p as the nominated pair.", agent, p);
+ p->nominated = TRUE;
++ priv_update_selected_pair (agent, component, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
++ keep_timer_going = TRUE;
+ break; /* move to the next component */
+ }
+ }
+@@ -542,6 +1025,7 @@ conn_check_stop (NiceAgent *agent)
+ g_source_destroy (agent->conncheck_timer_source);
+ g_source_unref (agent->conncheck_timer_source);
+ agent->conncheck_timer_source = NULL;
++ agent->conncheck_timer_grace_period = 0;
+ }
+
+
+@@ -557,75 +1041,83 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ {
+ CandidateCheckPair *pair = NULL;
+ gboolean keep_timer_going = FALSE;
+- gboolean res;
+- /* note: we try to only generate a single stun transaction per timer
+- * callback, to respect some pacing of STUN transaction, as per
+- * appendix B.1 of ICE spec.
+- */
+- gboolean stun_transmitted = FALSE;
+ GSList *i, *j;
+- GTimeVal now;
+
+- /* step: process ongoing STUN transactions */
+- g_get_current_time (&now);
+-
+- for (j = agent->streams; j; j = j->next) {
+- NiceStream *stream = j->data;
+- res = priv_conn_check_tick_stream (stream, agent, &now, &stun_transmitted);
+- if (res)
+- keep_timer_going = res;
+- if (stun_transmitted)
+- return TRUE;
++ /* configure the initial state of the check lists of the agent
++ * as described in ICE spec, 5.7.4
++ *
++ * if all pairs in all check lists are in frozen state, then
++ * we are in the initial state (5.7.4, point 1.)
++ */
++ if (priv_number_of_active_check_lists (agent) == 0) {
++ /* set some pairs of the first stream in the waiting state
++ * ICE spec, 5.7.4, point 2.
++ *
++ * note: we adapt the ICE spec here, by selecting the first
++ * frozen check list, which is not necessarily the check
++ * list of the first stream (the first stream may be completed)
++ */
++ NiceStream *stream = priv_find_first_frozen_check_list (agent);
++ if (stream)
++ priv_conn_check_unfreeze_next (agent, stream);
+ }
+
+- /* step: first initiate a conncheck with a pair from the triggered list */
++ /* step: perform a test from the triggered checks list,
++ * ICE spec, 5.8 "Scheduling Checks"
++ */
+ pair = priv_get_pair_from_triggered_check_queue (agent);
+
+ if (pair) {
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", got a pair from triggered check list");
+- priv_conn_check_initiate (agent, pair);
++ conn_check_send (agent, pair);
+ return TRUE;
+ }
+
+- /* step: when the triggered list is empty,
+- * find the highest priority waiting check and send it */
++ /* step: process ongoing STUN transactions and
++ * perform an ordinary check, ICE spec, 5.8, "Scheduling Checks"
++ */
+ for (i = agent->streams; i ; i = i->next) {
+ NiceStream *stream = i->data;
+-
+- pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+- if (pair)
+- break;
++ if (priv_conn_check_tick_stream (stream, agent))
++ keep_timer_going = TRUE;
++ if (priv_conn_check_tick_stream_nominate (stream, agent))
++ keep_timer_going = TRUE;
+ }
+
+- if (pair) {
+- priv_conn_check_initiate (agent, pair);
+- return TRUE;
++ /* step: if no work left and a conncheck list of a stream is still
++ * frozen, set the pairs to waiting, according to ICE SPEC, sect
++ * 7.1.3.3. "Check List and Timer State Updates"
++ */
++ if (!keep_timer_going) {
++ for (i = agent->streams; i ; i = i->next) {
++ NiceStream *stream = i->data;
++ if (priv_is_checklist_frozen (stream)) {
++ nice_debug ("Agent %p : stream %d conncheck list is still "
++ "frozen, while other lists are completed. Unfreeze it.",
++ agent, stream->id);
++ keep_timer_going = priv_conn_check_unfreeze_next (agent, stream);
++ }
++ }
+ }
+
+- /* step: when there's no pair in the Waiting state,
+- * unfreeze a new pair and check it
++ /* note: we provide a grace period before declaring a component as
++ * failed. Components marked connected, and then ready follow another
++ * code path, and are not concerned by this grace period.
+ */
+- res = priv_conn_check_unfreeze_next (agent);
+-
+- for (i = agent->streams; i ; i = i->next) {
+- NiceStream *stream = i->data;
++ if (!keep_timer_going && agent->conncheck_timer_grace_period == 0)
++ nice_debug ("Agent %p : waiting %d msecs before checking "
++ "for failed components.", agent, NICE_AGENT_MAX_TIMER_GRACE_PERIOD);
+
+- pair = priv_conn_check_find_next_waiting (stream->conncheck_list);
+- if (pair)
+- break;
+- }
+-
+- if (pair) {
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", got a pair in Waiting state");
+- priv_conn_check_initiate (agent, pair);
+- return TRUE;
+- }
++ if (keep_timer_going)
++ agent->conncheck_timer_grace_period = 0;
++ else
++ agent->conncheck_timer_grace_period += agent->timer_ta;
+
+ /* step: stop timer if no work left */
+- if (keep_timer_going != TRUE) {
+- nice_debug ("Agent %p : %s: stopping conncheck timer", agent, G_STRFUNC);
++ if (!keep_timer_going &&
++ agent->conncheck_timer_grace_period >= NICE_AGENT_MAX_TIMER_GRACE_PERIOD) {
++ nice_debug ("Agent %p : checking for failed components now.", agent);
+ for (i = agent->streams; i; i = i->next) {
+ NiceStream *stream = i->data;
+ priv_update_check_list_failed_components (agent, stream);
+@@ -635,6 +1127,7 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+ }
+ }
+
++ nice_debug ("Agent %p : %s: stopping conncheck timer", agent, G_STRFUNC);
+ priv_print_conn_check_lists (agent, G_STRFUNC,
+ ", conncheck timer stopped");
+
+@@ -645,9 +1138,10 @@ static gboolean priv_conn_check_tick_unlocked (NiceAgent *agent)
+
+ /* XXX: what to signal, is all processing now really done? */
+ nice_debug ("Agent %p : changing conncheck state to COMPLETED.", agent);
++ return FALSE;
+ }
+
+- return keep_timer_going;
++ return TRUE;
+ }
+
+ static gboolean priv_conn_check_tick (gpointer pointer)
+@@ -888,8 +1382,9 @@ static gboolean priv_conn_keepalive_tick_unlocked (NiceAgent *agent)
+ agent, buf_len, p->keepalive.stun_message.buffer);
+
+ if (buf_len > 0) {
+- stun_timer_start (&p->keepalive.timer, STUN_TIMER_DEFAULT_TIMEOUT,
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ stun_timer_start (&p->keepalive.timer,
++ agent->stun_initial_timeout,
++ agent->stun_max_retransmissions);
+
+ agent->media_after_tick = FALSE;
+
+@@ -1116,8 +1611,9 @@ static void priv_turn_allocate_refresh_tick_unlocked (CandidateRefresh *cand)
+ }
+
+ if (buffer_len > 0) {
+- stun_timer_start (&cand->timer, STUN_TIMER_DEFAULT_TIMEOUT,
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ stun_timer_start (&cand->timer,
++ cand->agent->stun_initial_timeout,
++ cand->agent->stun_max_retransmissions);
+
+ /* send the refresh */
+ agent_socket_send (cand->nicesock, &cand->server,
+@@ -1213,154 +1709,136 @@ static void priv_preprocess_conn_check_pending_data (NiceAgent *agent, NiceStrea
+ if (nice_address_equal (&icheck->from, &pair->remote->addr) &&
+ icheck->local_socket == pair->sockptr) {
+ nice_debug ("Agent %p : Updating check %p with stored early-icheck %p, %p/%u/%u (agent/stream/component).", agent, pair, icheck, agent, stream->id, component->id);
++ priv_schedule_triggered_check (agent, stream, component,
++ icheck->local_socket, pair->remote);
+ if (icheck->use_candidate)
+ priv_mark_pair_nominated (agent, stream, component, pair->local, pair->remote);
+- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, pair->remote, icheck->use_candidate);
+ }
+ }
+ }
+
+
+-static GSList *prune_cancelled_conn_check (GSList *conncheck_list)
+-{
+- GSList *item = conncheck_list;
+-
+- while (item) {
+- CandidateCheckPair *pair = item->data;
+- GSList *next = item->next;
+-
+- if (pair->state == NICE_CHECK_CANCELLED) {
+- conn_check_free_item (pair);
+- conncheck_list = g_slist_delete_link (conncheck_list, item);
+- }
+-
+- item = next;
+- }
+-
+- return conncheck_list;
+-}
+-
+-
+ /*
+ * Handle any processing steps for connectivity checks after
+- * remote candidates have been set. This function handles
++ * remote credentials have been set. This function handles
+ * the special case where answerer has sent us connectivity
+- * checks before the answer (containing candidate information),
++ * checks before the answer (containing credentials information),
+ * reaches us. The special case is documented in sect 7.2
+ * if ICE spec (ID-19).
+ */
+-void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, NiceComponent *component)
++void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream)
+ {
+- GSList *j, *k, *l, *m, *n;
++ GSList *j, *k, *l, *m, *n, *o;
+
+ for (j = stream->conncheck_list; j ; j = j->next) {
+ CandidateCheckPair *pair = j->data;
+- if (pair->component_id == component->id) {
+- gboolean match = FALSE;
+-
+- /* performn delayed processing of spec steps section 7.2.1.4,
+- and section 7.2.1.5 */
+- priv_preprocess_conn_check_pending_data (agent, stream, component, pair);
+-
+- for (k = component->incoming_checks; k; k = k->next) {
+- IncomingCheck *icheck = k->data;
+- /* sect 7.2.1.3., "Learning Peer Reflexive Candidates", has to
+- * be handled separately */
+- for (l = component->remote_candidates; l; l = l->next) {
+- NiceCandidate *cand = l->data;
+- if (nice_address_equal (&icheck->from, &cand->addr)) {
+- match = TRUE;
+- break;
+- }
+- }
+- if (match != TRUE) {
+- /* note: we have gotten an incoming connectivity check from
+- * an address that is not a known remote candidate */
+-
+- NiceCandidate *local_candidate = NULL;
+- NiceCandidate *remote_candidate = NULL;
+-
+- if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
+- agent->compatibility == NICE_COMPATIBILITY_MSN ||
+- agent->compatibility == NICE_COMPATIBILITY_OC2007) {
+- /* We need to find which local candidate was used */
+- uint8_t uname[NICE_STREAM_MAX_UNAME];
+- guint uname_len;
+-
+- nice_debug ("Agent %p: We have a peer-reflexive candidate in a "
+- "stored pending check", agent);
+-
+- for (m = component->remote_candidates;
+- m != NULL && remote_candidate == NULL; m = m->next) {
+- for (n = component->local_candidates; n; n = n->next) {
+- NiceCandidate *rcand = m->data;
+- NiceCandidate *lcand = n->data;
+-
+- uname_len = priv_create_username (agent, stream,
+- component->id, rcand, lcand,
+- uname, sizeof (uname), TRUE);
+-
+- stun_debug ("pending check, comparing usernames of len %d and %d, equal=%d",
+- icheck->username_len, uname_len,
+- icheck->username && uname_len == icheck->username_len &&
+- memcmp (uname, icheck->username, icheck->username_len) == 0);
+- stun_debug_bytes (" first username: ",
+- icheck->username,
+- icheck->username? icheck->username_len : 0);
+- stun_debug_bytes (" second username: ", uname, uname_len);
+-
+- if (icheck->username &&
+- uname_len == icheck->username_len &&
+- memcmp (uname, icheck->username, icheck->username_len) == 0) {
+- local_candidate = lcand;
+- remote_candidate = rcand;
+- break;
+- }
+- }
+- }
+- } else {
+- for (l = component->local_candidates; l; l = l->next) {
+- NiceCandidate *cand = l->data;
+- if (nice_address_equal (&cand->addr, &icheck->local_socket->addr)) {
+- local_candidate = cand;
++ NiceComponent *component =
++ nice_stream_find_component_by_id (stream, pair->component_id);
++ gboolean match = FALSE;
++
++ /* performn delayed processing of spec steps section 7.2.1.4,
++ and section 7.2.1.5 */
++ priv_preprocess_conn_check_pending_data (agent, stream, component, pair);
++
++ for (k = component->incoming_checks; k; k = k->next) {
++ IncomingCheck *icheck = k->data;
++ /* sect 7.2.1.3., "Learning Peer Reflexive Candidates", has to
++ * be handled separately */
++ for (l = component->remote_candidates; l; l = l->next) {
++ NiceCandidate *cand = l->data;
++ if (nice_address_equal (&icheck->from, &cand->addr)) {
++ match = TRUE;
++ break;
++ }
++ }
++ if (match != TRUE) {
++ /* note: we have gotten an incoming connectivity check from
++ * an address that is not a known remote candidate */
++
++ NiceCandidate *local_candidate = NULL;
++ NiceCandidate *remote_candidate = NULL;
++
++ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
++ agent->compatibility == NICE_COMPATIBILITY_MSN ||
++ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
++ /* We need to find which local candidate was used */
++ uint8_t uname[NICE_STREAM_MAX_UNAME];
++ guint uname_len;
++
++ nice_debug ("Agent %p: We have a peer-reflexive candidate in a "
++ "stored pending check", agent);
++
++ for (m = component->remote_candidates;
++ m != NULL && remote_candidate == NULL; m = m->next) {
++ for (n = component->local_candidates; n; n = n->next) {
++ NiceCandidate *rcand = m->data;
++ NiceCandidate *lcand = n->data;
++
++ uname_len = priv_create_username (agent, stream,
++ component->id, rcand, lcand,
++ uname, sizeof (uname), TRUE);
++
++ stun_debug ("pending check, comparing usernames of len %d and %d, equal=%d",
++ icheck->username_len, uname_len,
++ icheck->username && uname_len == icheck->username_len &&
++ memcmp (uname, icheck->username, icheck->username_len) == 0);
++ stun_debug_bytes (" first username: ",
++ icheck->username,
++ icheck->username? icheck->username_len : 0);
++ stun_debug_bytes (" second username: ", uname, uname_len);
++
++ if (icheck->username &&
++ uname_len == icheck->username_len &&
++ memcmp (uname, icheck->username, icheck->username_len) == 0) {
++ local_candidate = lcand;
++ remote_candidate = rcand;
+ break;
+ }
+ }
+ }
+-
+- if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE &&
+- local_candidate == NULL) {
+- /* if we couldn't match the username, then the matching remote
+- * candidate hasn't been received yet.. we must wait */
+- nice_debug ("Agent %p : Username check failed. pending check has "
+- "to wait to be processed", agent);
+- } else {
+- NiceCandidate *candidate;
+-
+- nice_debug ("Agent %p : Discovered peer reflexive from early i-check",
+- agent);
+- candidate =
+- discovery_learn_remote_peer_reflexive_candidate (agent,
+- stream,
+- component,
+- icheck->priority,
+- &icheck->from,
+- icheck->local_socket,
+- local_candidate, remote_candidate);
+- if (candidate) {
+- if (local_candidate &&
+- local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE)
+- priv_conn_check_add_for_candidate_pair_matched (agent,
+- stream->id, component, local_candidate, candidate, NICE_CHECK_DISCOVERED);
+- else
+- conn_check_add_for_candidate (agent, stream->id, component, candidate);
+-
+- if (icheck->use_candidate)
+- priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
+- priv_schedule_triggered_check (agent, stream, component, icheck->local_socket, candidate, icheck->use_candidate);
++ } else {
++ for (l = component->local_candidates; l; l = l->next) {
++ NiceCandidate *cand = l->data;
++ if (nice_address_equal (&cand->addr, &icheck->local_socket->addr)) {
++ local_candidate = cand;
++ break;
+ }
+ }
+ }
++
++ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE &&
++ local_candidate == NULL) {
++ /* if we couldn't match the username, then the matching remote
++ * candidate hasn't been received yet.. we must wait */
++ nice_debug ("Agent %p : Username check failed. pending check has "
++ "to wait to be processed", agent);
++ } else {
++ NiceCandidate *candidate;
++
++ nice_debug ("Agent %p : Discovered peer reflexive from early i-check",
++ agent);
++ candidate =
++ discovery_learn_remote_peer_reflexive_candidate (agent,
++ stream,
++ component,
++ icheck->priority,
++ &icheck->from,
++ icheck->local_socket,
++ local_candidate, remote_candidate);
++ if (candidate) {
++ if (local_candidate &&
++ local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE)
++ priv_conn_check_add_for_candidate_pair_matched (agent,
++ stream->id, component, local_candidate, candidate, NICE_CHECK_DISCOVERED);
++ else
++ conn_check_add_for_candidate (agent, stream->id, component, candidate);
++
++ priv_schedule_triggered_check (agent, stream, component,
++ icheck->local_socket, candidate);
++ if (icheck->use_candidate)
++ priv_mark_pair_nominated (agent, stream, component, local_candidate, candidate);
++ }
++ }
+ }
+ }
+ }
+@@ -1368,12 +1846,12 @@ void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, Nice
+ /* Once we process the pending checks, we should free them to avoid
+ * reprocessing them again if a dribble-mode set_remote_candidates
+ * is called */
+- g_slist_free_full (component->incoming_checks,
+- (GDestroyNotify) incoming_check_free);
+- component->incoming_checks = NULL;
+-
+- stream->conncheck_list =
+- prune_cancelled_conn_check (stream->conncheck_list);
++ for (o = stream->components; o; o = o->next) {
++ NiceComponent *component = o->data;
++ g_slist_free_full (component->incoming_checks,
++ (GDestroyNotify) incoming_check_free);
++ component->incoming_checks = NULL;
++ }
+ }
+
+ /*
+@@ -1381,7 +1859,7 @@ void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, Nice
+ * in ICE spec section 5.7.3 (ID-19). See also
+ * conn_check_add_for_candidate().
+ */
+-static void priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper_limit)
++static GSList *priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper_limit)
+ {
+ guint valid = 0;
+ guint cancelled = 0;
+@@ -1389,22 +1867,22 @@ static void priv_limit_conn_check_list_size (GSList *conncheck_list, guint upper
+
+ while (item) {
+ CandidateCheckPair *pair = item->data;
++ GSList *next = item->next;
+
+- if (pair->state != NICE_CHECK_CANCELLED) {
+- valid++;
+- if (valid > upper_limit) {
+- pair->state = NICE_CHECK_CANCELLED;
++ valid++;
++ if (valid > upper_limit) {
++ conn_check_free_item (pair);
++ conncheck_list = g_slist_delete_link (conncheck_list, item);
+ cancelled++;
+- }
+ }
+-
+- item = item->next;
++ item = next;
+ }
+
+ if (cancelled > 0)
+ nice_debug ("Agent : Pruned %d candidates. Conncheck list has %d elements"
+ " left. Maximum connchecks allowed : %d", cancelled, valid,
+ upper_limit);
++ return conncheck_list;
+ }
+
+ /*
+@@ -1444,15 +1922,18 @@ static gboolean priv_update_selected_pair (NiceAgent *agent, NiceComponent *comp
+ * Updates the check list state.
+ *
+ * Implements parts of the algorithm described in
+- * ICE sect 8.1.2. "Updating States" (ID-19): if for any
++ * ICE sect 8.1.2. "Updating States" (RFC 5245): if for any
+ * component, all checks have been completed and have
+- * failed, mark that component's state to NICE_CHECK_FAILED.
++ * failed to produce a nominated pair, mark that component's
++ * state to NICE_CHECK_FAILED.
+ *
+ * Sends a component state changesignal via 'agent'.
+ */
+ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStream *stream)
+ {
+ GSList *i;
++ gboolean completed;
++ guint nominated;
+ /* note: emitting a signal might cause the client
+ * to remove the stream, thus the component count
+ * must be fetched before entering the loop*/
+@@ -1476,6 +1957,8 @@ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStre
+ if (!agent_find_component (agent, stream->id, c+1, NULL, &comp))
+ continue;
+
++ nominated = 0;
++ completed = TRUE;
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+
+@@ -1483,16 +1966,22 @@ static void priv_update_check_list_failed_components (NiceAgent *agent, NiceStre
+ g_assert (p->stream_id == stream->id);
+
+ if (p->component_id == (c + 1)) {
+- if (p->state != NICE_CHECK_FAILED)
+- break;
++ if (p->nominated)
++ ++nominated;
++ if (p->state != NICE_CHECK_FAILED &&
++ p->state != NICE_CHECK_SUCCEEDED &&
++ p->state != NICE_CHECK_DISCOVERED)
++ completed = FALSE;
+ }
+ }
+
+- /* note: all checks have failed
++ /* note: all pairs are either failed or succeeded, and the component
++ * has not produced a nominated pair.
+ * Set the component to FAILED only if it actually had remote candidates
+ * that failed.. */
+- if (i == NULL && comp != NULL && comp->remote_candidates != NULL)
+- agent_signal_component_state_change (agent,
++ if (completed && nominated == 0 &&
++ comp != NULL && comp->remote_candidates != NULL)
++ agent_signal_component_state_change (agent,
+ stream->id,
+ (c + 1), /* component-id */
+ NICE_COMPONENT_STATE_FAILED);
+@@ -1525,7 +2014,6 @@ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream
+ ++valid;
+ if (p->nominated == TRUE) {
+ ++nominated;
+- priv_update_selected_pair (agent, component, p);
+ }
+ }
+ }
+@@ -1535,7 +2023,7 @@ static void priv_update_check_list_state_for_ready (NiceAgent *agent, NiceStream
+ /* Only go to READY if no checks are left in progress. If there are
+ * any that are kept, then this function will be called again when the
+ * conncheck tick timer finishes them all */
+- if (priv_prune_pending_checks (stream, component->id) == 0) {
++ if (priv_prune_pending_checks (agent, stream, component->id) == 0) {
+ /* Continue through the states to give client code a nice
+ * logical progression. See http://phabricator.freedesktop.org/D218 for
+ * discussion. */
+@@ -1564,24 +2052,59 @@ static void priv_mark_pair_nominated (NiceAgent *agent, NiceStream *stream, Nice
+
+ g_assert (component);
+
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent) &&
++ agent->controlling_mode)
++ return;
++
+ /* step: search for at least one nominated pair */
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *pair = i->data;
+ if (pair->local == localcand && pair->remote == remotecand) {
+- nice_debug ("Agent %p : marking pair %p (%s) as nominated", agent, pair, pair->foundation);
+- pair->nominated = TRUE;
++ /* ICE, 7.2.1.5. Updating the Nominated Flag */
++ /* note: TCP candidates typically produce peer reflexive
++ * candidate, generating a "discovered" pair that can be
++ * nominated.
++ */
++ if (pair->state == NICE_CHECK_SUCCEEDED &&
++ pair->discovered_pair != NULL) {
++ pair = pair->discovered_pair;
++ g_assert (pair->state == NICE_CHECK_DISCOVERED);
++ }
++
++ /* If the state of this pair is In-Progress, [...] the resulting
++ * valid pair has its nominated flag set when the response
++ * arrives.
++ */
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent) &&
++ pair->state == NICE_CHECK_IN_PROGRESS) {
++ pair->mark_nominated_on_response_arrival = TRUE;
++ nice_debug ("Agent %p : pair %p (%s) is in-progress, "
++ "will be nominated on response receipt.",
++ agent, pair, pair->foundation);
++ }
++
++ if (pair->valid ||
++ !NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated",
++ agent, pair, pair->foundation);
++ pair->nominated = TRUE;
++ }
++
+ if (pair->valid) {
+- priv_update_selected_pair (agent, component, pair);
+ /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state != NICE_COMPONENT_STATE_READY) {
++ if (component->state == NICE_COMPONENT_STATE_FAILED)
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTING);
++ priv_update_selected_pair (agent, component, pair);
++ if (component->state == NICE_COMPONENT_STATE_CONNECTING)
+ /* step: notify the client of a new component state (must be done
+ * before the possible check list state update step */
+ agent_signal_component_state_change (agent,
+ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- }
+-
+ }
+- priv_update_check_list_state_for_ready (agent, stream, component);
++
++ if (pair->nominated)
++ priv_update_check_list_state_for_ready (agent, stream, component);
+ }
+ }
+ }
+@@ -1624,7 +2147,7 @@ ensure_unique_priority (NiceComponent *component, guint32 priority)
+ */
+ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ guint stream_id, NiceComponent *component, NiceCandidate *local,
+- NiceCandidate *remote, NiceCheckState initial_state, gboolean use_candidate)
++ NiceCandidate *remote, NiceCheckState initial_state)
+ {
+ NiceStream *stream;
+ CandidateCheckPair *pair;
+@@ -1662,8 +2185,6 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ tmpbuf1, nice_address_get_port (&pair->local->addr),
+ tmpbuf2, nice_address_get_port (&pair->remote->addr));
+ }
+- pair->nominated = use_candidate;
+- pair->controlling = agent->controlling_mode;
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local));
+
+@@ -1675,7 +2196,8 @@ static CandidateCheckPair *priv_add_new_check_pair (NiceAgent *agent,
+ /* implement the hard upper limit for number of
+ checks (see sect 5.7.3 ICE ID-19): */
+ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245) {
+- priv_limit_conn_check_list_size (stream->conncheck_list, agent->max_conn_checks);
++ stream->conncheck_list = priv_limit_conn_check_list_size (
++ stream->conncheck_list, agent->max_conn_checks);
+ }
+
+ return pair;
+@@ -1709,7 +2231,7 @@ static CandidateCheckPair *priv_conn_check_add_for_candidate_pair_matched (
+ agent, local->foundation, remote->foundation,
+ stream_id, component->id);
+ pair = priv_add_new_check_pair (agent, stream_id, component, local, remote,
+- initial_state, FALSE);
++ initial_state);
+ if (component->state == NICE_COMPONENT_STATE_CONNECTED ||
+ component->state == NICE_COMPONENT_STATE_READY) {
+ agent_signal_component_state_change (agent,
+@@ -1781,6 +2303,15 @@ int conn_check_add_for_candidate (NiceAgent *agent, guint stream_id, NiceCompone
+
+ g_assert (remote != NULL);
+
++ /* note: according to 7.2.1.3, "Learning Peer Reflexive Candidates",
++ * the agent does not pair this candidate with any local candidates.
++ */
++ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245 &&
++ remote->type == NICE_CANDIDATE_TYPE_PEER_REFLEXIVE)
++ {
++ return added;
++ }
++
+ for (i = component->local_candidates; i ; i = i->next) {
+ NiceCandidate *local = i->data;
+
+@@ -1815,6 +2346,18 @@ int conn_check_add_for_local_candidate (NiceAgent *agent, guint stream_id, NiceC
+
+ g_assert (local != NULL);
+
++ /*
++ * note: according to 7.1.3.2.1 "Discovering Peer Reflexive
++ * Candidates", the peer reflexive candidate is not paired
++ * with other remote candidates
++ */
++
++ if (agent->compatibility == NICE_COMPATIBILITY_RFC5245 &&
++ local->type == NICE_CANDIDATE_TYPE_PEER_REFLEXIVE)
++ {
++ return added;
++ }
++
+ for (i = component->remote_candidates; i ; i = i->next) {
+
+ NiceCandidate *remote = i->data;
+@@ -1838,8 +2381,7 @@ static void conn_check_free_item (gpointer data)
+
+ if (pair->agent)
+ priv_remove_pair_from_triggered_check_queue (pair->agent, pair);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
++ priv_free_all_stun_transactions (pair, NULL);
+ g_slice_free (CandidateCheckPair, pair);
+ }
+
+@@ -2057,30 +2599,28 @@ size_t priv_get_password (NiceAgent *agent, NiceStream *stream,
+
+ /* Implement the computation specific in RFC 5245 section 16 */
+
+-static unsigned int priv_compute_conncheck_timer (NiceAgent *agent)
++static unsigned int priv_compute_conncheck_timer (NiceAgent *agent, NiceStream *stream)
+ {
+- GSList *item1, *item2;
++ GSList *i;
+ guint waiting_and_in_progress = 0;
++ guint n = 0;
+ unsigned int rto = 0;
+
+-
+- for (item1 = agent->streams; item1; item1 = item1->next) {
+- NiceStream *stream = item1->data;;
+- for (item2 = stream->conncheck_list; item2; item2 = item2->next) {
+- CandidateCheckPair *pair = item2->data;
+-
+- if (pair->state == NICE_CHECK_IN_PROGRESS ||
+- pair->state == NICE_CHECK_WAITING)
+- waiting_and_in_progress++;
+- }
++ for (i = stream->conncheck_list; i ; i = i->next) {
++ CandidateCheckPair *p = i->data;
++ if (p->state == NICE_CHECK_IN_PROGRESS ||
++ p->state == NICE_CHECK_WAITING)
++ waiting_and_in_progress++;
+ }
+
+- rto = agent->timer_ta * waiting_and_in_progress;
++ n = priv_number_of_active_check_lists (agent);
++ rto = agent->timer_ta * n * waiting_and_in_progress;
+
+ /* We assume non-reliable streams are RTP, so we use 100 as the max */
+- nice_debug ("Agent %p : timer set to %dms (waiting+in_progress=%d)",
++ nice_debug ("Agent %p : timer set to %dms, "
++ "waiting+in_progress=%d, nb_active=%d",
+ agent, agent->reliable ? MAX (rto, 500) : MAX (rto, 100),
+- waiting_and_in_progress);
++ waiting_and_in_progress, n);
+ if (agent->reliable)
+ return MAX (rto, 500);
+ else
+@@ -2114,6 +2654,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ bool cand_use = controlling;
+ size_t buffer_len;
+ unsigned int timeout;
++ StunTransaction *stun;
+
+ if (!agent_find_component (agent, pair->stream_id, pair->component_id,
+ &stream, &component))
+@@ -2135,99 +2676,119 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ nice_address_to_string (&pair->local->addr, tmpbuf1);
+ nice_address_to_string (&pair->remote->addr, tmpbuf2);
+ nice_debug ("Agent %p : STUN-CC REQ [%s]:%u --> [%s]:%u, socket=%u, "
+- "pair=%s (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
+- "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, cont=%d.", agent,
++ "pair=%p (c-id:%u), tie=%llu, username='%.*s' (%" G_GSIZE_FORMAT "), "
++ "password='%.*s' (%" G_GSIZE_FORMAT "), prio=%u, %s.", agent,
+ tmpbuf1, nice_address_get_port (&pair->local->addr),
+ tmpbuf2, nice_address_get_port (&pair->remote->addr),
+ pair->sockptr->fileno ? g_socket_get_fd(pair->sockptr->fileno) : -1,
+- pair->foundation, pair->component_id,
++ pair, pair->component_id,
+ (unsigned long long)agent->tie_breaker,
+ (int) uname_len, uname, uname_len,
+ (int) password_len, password, password_len,
+- pair->prflx_priority, controlling);
++ pair->prflx_priority,
++ controlling ? "controlling" : "controlled");
+ }
+
+- if (cand_use)
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ switch (agent->nomination_mode) {
++ case NICE_NOMINATION_MODE_REGULAR:
++ /* We are doing regular nomination, so we set the use-candidate
++ * attrib, when the controlling agent decided which valid pair to
++ * resend with this flag in priv_conn_check_tick_stream()
++ */
++ cand_use = pair->use_candidate_on_next_check;
++ nice_debug ("Agent %p : %s: set cand_use=%d "
++ "(regular nomination).", agent, G_STRFUNC, cand_use);
++ break;
++ case NICE_NOMINATION_MODE_AGGRESSIVE:
++ /* We are doing aggressive nomination, we set the use-candidate
++ * attrib in every check we send, when we are the controlling
++ * agent, RFC 5245, 8.1.1.2
++ */
++ cand_use = controlling;
++ nice_debug ("Agent %p : %s: set cand_use=%d "
++ "(aggressive nomination).", agent, G_STRFUNC, cand_use);
++ break;
++ default:
++ /* Nothing to do. */
++ break;
++ }
++ } else if (cand_use)
+ pair->nominated = controlling;
+
+- if (uname_len > 0) {
+- buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
+- &pair->stun_message, pair->stun_buffer, sizeof(pair->stun_buffer),
+- uname, uname_len, password, password_len,
+- cand_use, controlling, pair->prflx_priority,
+- agent->tie_breaker,
+- pair->local->foundation,
+- agent_to_ice_compatibility (agent));
++ if (uname_len == 0) {
++ nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
++ return -1;
++ }
+
+- nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
+- pair->stun_message.buffer);
++ stun = priv_add_stun_transaction (pair);
+
+- if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
+- agent->compatibility == NICE_COMPATIBILITY_OC2007) {
+- g_free (password);
+- }
++ buffer_len = stun_usage_ice_conncheck_create (&component->stun_agent,
++ &stun->message, stun->buffer, sizeof(stun->buffer),
++ uname, uname_len, password, password_len,
++ cand_use, controlling, pair->prflx_priority,
++ agent->tie_breaker,
++ pair->local->foundation,
++ agent_to_ice_compatibility (agent));
+
+- if (buffer_len > 0) {
+- if (nice_socket_is_reliable(pair->sockptr)) {
+- stun_timer_start_reliable(&pair->timer, STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT);
+- } else {
+- stun_timer_start (&pair->timer,
+- priv_compute_conncheck_timer (agent),
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
+- }
++ nice_debug ("Agent %p: conncheck created %zd - %p", agent, buffer_len,
++ stun->message.buffer);
+
+- /* TCP-ACTIVE candidate must create a new socket before sending
+- * by connecting to the peer. The new socket is stored in the candidate
+- * check pair, until we discover a new local peer reflexive */
+- if (pair->sockptr->fileno == NULL &&
+- pair->sockptr->type != NICE_SOCKET_TYPE_UDP_TURN &&
+- pair->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
+- NiceStream *stream2 = NULL;
+- NiceComponent *component2 = NULL;
+- NiceSocket *new_socket;
+-
+- if (agent_find_component (agent, pair->stream_id, pair->component_id,
+- &stream2, &component2)) {
+- new_socket = nice_tcp_active_socket_connect (pair->sockptr,
+- &pair->remote->addr);
+- if (new_socket) {
+- pair->sockptr = new_socket;
+- _priv_set_socket_tos (agent, pair->sockptr, stream2->tos);
+-
+- if (agent->reliable) {
+- nice_socket_set_writable_callback (pair->sockptr,
+- _tcp_sock_is_writable, component2);
+- }
++ if (agent->compatibility == NICE_COMPATIBILITY_MSN ||
++ agent->compatibility == NICE_COMPATIBILITY_OC2007) {
++ g_free (password);
++ }
+
+- nice_component_attach_socket (component2, new_socket);
+- }
+- }
+- }
+- /* send the conncheck */
+- agent_socket_send (pair->sockptr, &pair->remote->addr,
+- buffer_len, (gchar *)pair->stun_buffer);
++ if (buffer_len == 0) {
++ nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
++ priv_remove_stun_transaction (pair, stun, component);
++ return -1;
++ }
+
+- if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2) {
+- ms_ice2_legacy_conncheck_send (&pair->stun_message, pair->sockptr,
+- &pair->remote->addr);
+- }
++ if (nice_socket_is_reliable(pair->sockptr)) {
++ timeout = agent->stun_reliable_timeout;
++ stun_timer_start_reliable(&stun->timer, timeout);
++ } else {
++ timeout = priv_compute_conncheck_timer (agent, stream);
++ stun_timer_start (&stun->timer, timeout, agent->stun_max_retransmissions);
++ }
+
+- timeout = stun_timer_remainder (&pair->timer);
+- /* note: convert from milli to microseconds for g_time_val_add() */
+- g_get_current_time (&pair->next_tick);
+- g_time_val_add (&pair->next_tick, timeout * 1000);
+- } else {
+- nice_debug ("Agent %p: buffer is empty, cancelling conncheck", agent);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
+- return -1;
++ g_get_current_time (&stun->next_tick);
++ g_time_val_add (&stun->next_tick, timeout * 1000);
++
++ /* TCP-ACTIVE candidate must create a new socket before sending
++ * by connecting to the peer. The new socket is stored in the candidate
++ * check pair, until we discover a new local peer reflexive */
++ if (pair->sockptr->fileno == NULL &&
++ pair->sockptr->type != NICE_SOCKET_TYPE_UDP_TURN &&
++ pair->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_ACTIVE) {
++ NiceStream *stream2 = NULL;
++ NiceComponent *component2 = NULL;
++ NiceSocket *new_socket;
++
++ if (agent_find_component (agent, pair->stream_id, pair->component_id,
++ &stream2, &component2)) {
++ new_socket = nice_tcp_active_socket_connect (pair->sockptr,
++ &pair->remote->addr);
++ if (new_socket) {
++ pair->sockptr = new_socket;
++ _priv_set_socket_tos (agent, pair->sockptr, stream2->tos);
++
++ if (agent->reliable)
++ nice_socket_set_writable_callback (pair->sockptr,
++ _tcp_sock_is_writable, component2);
++
++ nice_component_attach_socket (component2, new_socket);
++ }
+ }
+- } else {
+- nice_debug ("Agent %p: no credentials found, cancelling conncheck", agent);
+- pair->stun_message.buffer = NULL;
+- pair->stun_message.buffer_len = 0;
+- return -1;
+ }
++ /* send the conncheck */
++ agent_socket_send (pair->sockptr, &pair->remote->addr,
++ buffer_len, (gchar *)stun->buffer);
++
++ if (agent->compatibility == NICE_COMPATIBILITY_OC2007R2)
++ ms_ice2_legacy_conncheck_send (&stun->message, pair->sockptr,
++ &pair->remote->addr);
+
+ return 0;
+ }
+@@ -2238,14 +2799,14 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair)
+ *
+ * @see priv_update_check_list_state_failed_components()
+ */
+-static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
++static guint priv_prune_pending_checks (NiceAgent *agent, NiceStream *stream, guint component_id)
+ {
+ GSList *i;
+ guint64 highest_nominated_priority = 0;
+ guint in_progress = 0;
+
+- nice_debug ("Agent XXX: Finding highest priority for component %d",
+- component_id);
++ nice_debug ("Agent %p: Finding highest priority for component %d",
++ agent, component_id);
+
+ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+@@ -2257,37 +2818,40 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
+ }
+ }
+
+- nice_debug ("Agent XXX: Pruning pending checks. Highest nominated priority "
+- "is %" G_GUINT64_FORMAT, highest_nominated_priority);
++ nice_debug ("Agent %p: Pruning pending checks. Highest nominated priority "
++ "is %" G_GUINT64_FORMAT, agent, highest_nominated_priority);
+
+ /* step: cancel all FROZEN and WAITING pairs for the component */
+- for (i = stream->conncheck_list; i; i = i->next) {
++ i = stream->conncheck_list;
++ while (i) {
+ CandidateCheckPair *p = i->data;
++ GSList *next = i->next;
++
+ if (p->component_id == component_id) {
+- if (p->state == NICE_CHECK_FROZEN ||
+- p->state == NICE_CHECK_WAITING) {
+- p->state = NICE_CHECK_CANCELLED;
+- nice_debug ("Agent XXX : pair %p state CANCELED", p);
++ if (p->state == NICE_CHECK_FROZEN || p->state == NICE_CHECK_WAITING) {
++ nice_debug ("Agent %p : pair %p removed.", agent, p);
++ conn_check_free_item (p);
++ stream->conncheck_list = g_slist_delete_link(stream->conncheck_list, i);
+ }
+
+ /* note: a SHOULD level req. in ICE 8.1.2. "Updating States" (ID-19) */
+- if (p->state == NICE_CHECK_IN_PROGRESS) {
+- if (highest_nominated_priority != 0 &&
+- p->priority < highest_nominated_priority) {
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- p->state = NICE_CHECK_CANCELLED;
+- nice_debug ("Agent XXX : pair %p state CANCELED", p);
++ else if (p->state == NICE_CHECK_IN_PROGRESS) {
++ if (p->priority < highest_nominated_priority) {
++ p->retransmit = FALSE;
++ nice_debug ("Agent %p : pair %p will not be retransmitted.",
++ agent, p);
+ } else {
+ /* We must keep the higher priority pairs running because if a udp
+ * packet was lost, we might end up using a bad candidate */
+- nice_debug ("Agent XXX : pair %p kept IN_PROGRESS because priority %"
++ nice_debug ("Agent %p : pair %p kept IN_PROGRESS because priority %"
+ G_GUINT64_FORMAT " is higher than currently nominated pair %"
+- G_GUINT64_FORMAT, p, p->priority, highest_nominated_priority);
++ G_GUINT64_FORMAT, agent,
++ p, p->priority, highest_nominated_priority);
+ in_progress++;
+ }
+ }
+ }
++ i = next;
+ }
+
+ return in_progress;
+@@ -2301,17 +2865,17 @@ static guint priv_prune_pending_checks (NiceStream *stream, guint component_id)
+ * @param component the check is related to
+ * @param local_socket socket from which the inbound check was received
+ * @param remote_cand remote candidate from which the inbound check was sent
+- * @param use_candidate whether the original check had USE-CANDIDATE attribute set
+ */
+-static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand, gboolean use_candidate)
++static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *local_socket, NiceCandidate *remote_cand)
+ {
+ GSList *i;
+ NiceCandidate *local = NULL;
++ CandidateCheckPair *p;
+
+ g_assert (remote_cand != NULL);
+
+ for (i = stream->conncheck_list; i ; i = i->next) {
+- CandidateCheckPair *p = i->data;
++ p = i->data;
+ if (p->component_id == component->id &&
+ p->remote == remote_cand &&
+ ((p->local->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE &&
+@@ -2322,61 +2886,67 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+ * tcp-active we don't want to retrigger a check on a pair that
+ * was FAILED when a peer-reflexive pair was created */
+
+- nice_debug ("Agent %p : Found a matching pair %p for triggered check.", agent, p);
++ if (p->succeeded_pair != NULL) {
++ g_assert (p->state == NICE_CHECK_DISCOVERED);
++ p = p->succeeded_pair;
++ }
++
++ nice_debug ("Agent %p : Found a matching pair %p (%s) (%s) ...",
++ agent, p, p->foundation, priv_state_to_string (p->state));
+
+- if (p->state == NICE_CHECK_WAITING ||
+- p->state == NICE_CHECK_FROZEN)
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- else if (p->state == NICE_CHECK_IN_PROGRESS) {
+- /* XXX: according to ICE 7.2.1.4 "Triggered Checks" (ID-19),
+- * we should cancel the existing one, instead we reset our timer, so
+- * we'll resend the exiting transactions faster if needed...? :P
+- */
+- nice_debug ("Agent %p : check already in progress, "
+- "restarting the timer again?: %s ..", agent,
+- p->timer_restarted ? "no" : "yes");
+- if (!nice_socket_is_reliable (p->sockptr) && !p->timer_restarted) {
+- stun_timer_start (&p->timer,
+- priv_compute_conncheck_timer (agent),
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
+- p->timer_restarted = TRUE;
+- }
+- }
+- else if (p->state == NICE_CHECK_SUCCEEDED ||
+- p->state == NICE_CHECK_DISCOVERED) {
+- nice_debug ("Agent %p : Skipping triggered check, already completed..", agent);
+- /* note: this is a bit unsure corner-case -- let's do the
+- same state update as for processing responses to our own checks */
+- /* note: this update is required by the dribble test, to
+- * ensure the transition ready -> connected -> ready, because
+- * an incoming stun request generates a discovered peer reflexive,
+- * that causes the ready -> connected transition.
+- */
+- priv_update_check_list_state_for_ready (agent, stream, component);
+-
+- /* note: this new check is required by the new-dribble test,
+- * when early icheck on the peer controlled agent causes an
+- * incoming stun request to an already succeeded (and
+- * nominated) pair on the controlling agent. If the
+- * controlling agent doesn't retrigger a check with
+- * USE-CANDIDATE=1, the peer agent has no way to nominate it.
+- *
+- * This behavior differs from ICE spec 7.2.1.4
+- */
+- if ((agent->compatibility == NICE_COMPATIBILITY_RFC5245 ||
+- agent->compatibility == NICE_COMPATIBILITY_WLM2009 ||
+- agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
+- agent->controlling_mode) {
++ switch (p->state) {
++ case NICE_CHECK_WAITING:
++ case NICE_CHECK_FROZEN:
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
+ priv_add_pair_to_triggered_check_queue (agent, p);
+- conn_check_schedule_next(agent);
+- }
+- } else if (p->state == NICE_CHECK_FAILED) {
+- /* 7.2.1.4 Triggered Checks
+- * If the state of the pair is Failed, it is changed to Waiting
+- and the agent MUST create a new connectivity check for that
+- pair (representing a new STUN Binding request transaction), by
+- enqueueing the pair in the triggered check queue. */
+- priv_add_pair_to_triggered_check_queue (agent, p);
++ break;
++ case NICE_CHECK_IN_PROGRESS:
++ /* note: according to ICE SPEC sect 7.2.1.4 "Triggered Checks"
++ * we cancel the in-progress transaction, and after the
++ * retransmission timeout, we create a new connectivity check
++ * for that pair. The controlling role of this new check may
++ * be different from the role of this cancelled check.
++ *
++ * note: the flag retransmit unset means that
++ * another pair, with a higher priority is already nominated,
++ * so there's no reason to recheck this pair, since it can in
++ * no way replace the nominated one.
++ */
++ if (!nice_socket_is_reliable (p->sockptr) && p->retransmit) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ }
++ break;
++ case NICE_CHECK_FAILED:
++ if (p->retransmit) {
++ nice_debug ("Agent %p : pair %p added for a triggered check.",
++ agent, p);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ /* If the component for this pair is in failed state, move it
++ * back to connecting, and reinitiate the timers
++ */
++ if (component->state == NICE_COMPONENT_STATE_FAILED) {
++ agent_signal_component_state_change (agent, stream->id,
++ component->id, NICE_COMPONENT_STATE_CONNECTING);
++ conn_check_schedule_next (agent);
++ }
++ }
++ break;
++ case NICE_CHECK_SUCCEEDED:
++ nice_debug ("Agent %p : nothing to do for pair %p.", agent, p);
++ /* note: this is a bit unsure corner-case -- let's do the
++ same state update as for processing responses to our own checks */
++ /* note: this update is required by the dribble test, to
++ * ensure the transition ready -> connected -> ready, because
++ * an incoming stun request generates a discovered peer reflexive,
++ * that causes the ready -> connected transition.
++ */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ break;
++ default:
++ break;
+ }
+
+ /* note: the spec says the we SHOULD retransmit in-progress
+@@ -2394,7 +2964,9 @@ static gboolean priv_schedule_triggered_check (NiceAgent *agent, NiceStream *str
+
+ if (i) {
+ nice_debug ("Agent %p : Adding a triggered check to conn.check list (local=%p).", agent, local);
+- priv_add_new_check_pair (agent, stream->id, component, local, remote_cand, NICE_CHECK_WAITING, use_candidate);
++ p = priv_add_new_check_pair (agent, stream->id, component,
++ local, remote_cand, NICE_CHECK_WAITING);
++ priv_add_pair_to_triggered_check_queue (agent, p);
+ return TRUE;
+ }
+ else {
+@@ -2447,9 +3019,7 @@ static void priv_reply_to_conn_check (NiceAgent *agent, NiceStream *stream,
+ }
+
+ if (rcand) {
+- /* note: upon successful check, make the reserve check immediately */
+- priv_schedule_triggered_check (agent, stream, component, sockptr, rcand, use_candidate);
+-
++ priv_schedule_triggered_check (agent, stream, component, sockptr, rcand);
+ if (use_candidate)
+ priv_mark_pair_nominated (agent, stream, component, lcand, rcand);
+ }
+@@ -2509,6 +3079,8 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
+ pair->remote = parent_pair->remote;
+ pair->sockptr = local_cand->sockptr;
+ pair->state = NICE_CHECK_DISCOVERED;
++ parent_pair->discovered_pair = pair;
++ pair->succeeded_pair = parent_pair;
+ nice_debug ("Agent %p : new pair %p state DISCOVERED", agent, pair);
+ {
+ gchar tmpbuf1[INET6_ADDRSTRLEN];
+@@ -2528,7 +3100,6 @@ static CandidateCheckPair *priv_add_peer_reflexive_pair (NiceAgent *agent, guint
+ pair->priority = nice_candidate_pair_priority (pair->remote->priority,
+ pair->local->priority);
+ pair->nominated = FALSE;
+- pair->controlling = agent->controlling_mode;
+ pair->prflx_priority = ensure_unique_priority (component,
+ peer_reflexive_candidate_priority (agent, local_cand));
+ nice_debug ("Agent %p : added a new peer-discovered pair with foundation of '%s'.", agent, pair->foundation);
+@@ -2567,14 +3138,16 @@ static void priv_check_for_role_conflict (NiceAgent *agent, gboolean control)
+ {
+ /* role conflict, change mode; wait for a new conn. check */
+ if (control != agent->controlling_mode) {
+- nice_debug ("Agent %p : Role conflict, changing agent role to %d.", agent, control);
++ nice_debug ("Agent %p : Role conflict, changing agent role to \"%s\".",
++ agent, control ? "controlling" : "controlled");
+ agent->controlling_mode = control;
+ /* the pair priorities depend on the roles, so recalculation
+ * is needed */
+ priv_recalculate_pair_priorities (agent);
+ }
+ else
+- nice_debug ("Agent %p : Role conflict, agent role already changed to %d.", agent, control);
++ nice_debug ("Agent %p : Role conflict, staying with role \"%s\".",
++ agent, control ? "controlling" : "controlled");
+ }
+
+ /*
+@@ -2621,13 +3194,25 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ }
+
+ if (new_pair) {
++ /* note: when new_pair is distinct from p, it means new_pair is a
++ * previously discovered peer-reflexive candidate pair, so we don't
++ * set the valid flag on p in this case, because the valid flag is
++ * already set on the discovered pair.
++ */
++ if (new_pair == p)
++ p->valid = TRUE;
+ p->state = NICE_CHECK_SUCCEEDED;
++ priv_remove_pair_from_triggered_check_queue (agent, p);
++ priv_free_all_stun_transactions (p, component);
+ nice_debug ("Agent %p : conncheck %p SUCCEEDED.", agent, p);
+- priv_conn_check_unfreeze_related (agent, stream, p);
++ nice_component_add_valid_candidate (component, remote_candidate);
+ }
+ else {
+ if (!local_cand) {
+- if (!agent->force_relay)
++ if (!agent->force_relay) {
++ /* step: find a new local candidate, see RFC 5245 7.1.3.2.1.
++ * "Discovering Peer Reflexive Candidates"
++ */
+ local_cand = discovery_add_peer_reflexive_candidate (agent,
+ stream->id,
+ component->id,
+@@ -2635,8 +3220,9 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ sockptr,
+ local_candidate,
+ remote_candidate);
+- p->state = NICE_CHECK_FAILED;
+- nice_debug ("Agent %p : pair %p state FAILED", agent, p);
++ nice_debug ("Agent %p : added a new peer-reflexive local candidate %p",
++ agent, local_cand);
++ }
+ }
+
+ /* step: add a new discovered pair (see RFC 5245 7.1.3.2.2
+@@ -2644,13 +3230,23 @@ static CandidateCheckPair *priv_process_response_check_for_reflexive(NiceAgent *
+ if (local_cand)
+ new_pair = priv_add_peer_reflexive_pair (agent, stream->id, component,
+ local_cand, p);
+- nice_debug ("Agent %p : conncheck %p FAILED, %p DISCOVERED.", agent, p, new_pair);
++ /* note: this is same as "adding to VALID LIST" in the spec
++ text */
++ if (new_pair)
++ new_pair->valid = TRUE;
++ /* step: The agent sets the state of the pair that *generated* the check to
++ * Succeeded, RFC 5245, 7.1.3.2.3, "Updating Pair States"
++ */
++ p->state = NICE_CHECK_SUCCEEDED;
++ priv_remove_pair_from_triggered_check_queue (agent, p);
++ priv_free_all_stun_transactions (p, component);
++ nice_debug ("Agent %p : conncheck %p SUCCEEDED, %p DISCOVERED.",
++ agent, p, new_pair);
+ }
+
+- /* note: this is same as "adding to VALID LIST" in the spec
+- text */
+- if (new_pair)
+- new_pair->valid = TRUE;
++ if (new_pair && new_pair->valid)
++ nice_component_add_valid_candidate (component, remote_candidate);
++
+
+ return new_pair;
+ }
+@@ -2669,134 +3265,199 @@ static gboolean priv_map_reply_to_conn_check_request (NiceAgent *agent, NiceStre
+ struct sockaddr addr;
+ } sockaddr;
+ socklen_t socklen = sizeof (sockaddr);
+- GSList *i;
++ GSList *i, *j;
++ guint k;
+ StunUsageIceReturn res;
+- gboolean trans_found = FALSE;
+ StunTransactionId discovery_id;
+ StunTransactionId response_id;
+ stun_message_id (resp, response_id);
+
+- for (i = stream->conncheck_list; i && trans_found != TRUE; i = i->next) {
++ for (i = stream->conncheck_list; i; i = i->next) {
+ CandidateCheckPair *p = i->data;
+
+- if (p->stun_message.buffer) {
+- stun_message_id (&p->stun_message, discovery_id);
+-
+- if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)) == 0) {
+- res = stun_usage_ice_conncheck_process (resp,
+- &sockaddr.storage, &socklen,
+- agent_to_ice_compatibility (agent));
+- nice_debug ("Agent %p : stun_bind_process/conncheck for %p res %d "
+- "(controlling=%d).", agent, p, (int)res, agent->controlling_mode);
+-
+- if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
+- res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+- /* case: found a matching connectivity check request */
+-
+- CandidateCheckPair *ok_pair = NULL;
+-
+- nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+-
+- /* step: verify that response came from the same IP address we
+- * sent the original request to (see 7.1.2.1. "Failure
+- * Cases") */
+- if (nice_address_equal (from, &p->remote->addr) != TRUE) {
+-
+- p->state = NICE_CHECK_FAILED;
+- if (nice_debug_is_enabled ()) {
+- gchar tmpbuf[INET6_ADDRSTRLEN];
+- gchar tmpbuf2[INET6_ADDRSTRLEN];
+- nice_debug ("Agent %p : conncheck %p FAILED"
+- " (mismatch of source address).", agent, p);
+- nice_address_to_string (&p->remote->addr, tmpbuf);
+- nice_address_to_string (from, tmpbuf2);
+- nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
+- tmpbuf, nice_address_get_port (&p->remote->addr),
+- tmpbuf2, nice_address_get_port (from));
+- }
+- trans_found = TRUE;
+- break;
+- }
+-
+- /* note: CONNECTED but not yet READY, see docs */
+-
+- /* step: handle the possible case of a peer-reflexive
+- * candidate where the mapped-address in response does
+- * not match any local candidate, see 7.1.2.2.1
+- * "Discovering Peer Reflexive Candidates" ICE ID-19) */
+-
+- if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
+- /* note: this is same as "adding to VALID LIST" in the spec
+- text */
+- p->state = NICE_CHECK_SUCCEEDED;
+- p->valid = TRUE;
+- g_assert_not_reached ();
+- nice_debug ("Agent %p : Mapped address not found."
+- " conncheck %p SUCCEEDED.", agent, p);
+- priv_conn_check_unfreeze_related (agent, stream, p);
+- } else {
+- ok_pair = priv_process_response_check_for_reflexive (agent,
+- stream, component, p, sockptr, &sockaddr.addr,
+- local_candidate, remote_candidate);
+- }
+-
+-
+- if (!ok_pair)
+- ok_pair = p;
+-
+- /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
+- Nominated Flag" (ID-19) */
+- if (ok_pair->nominated == TRUE) {
+- priv_update_selected_pair (agent, component, ok_pair);
+- priv_print_conn_check_lists (agent, G_STRFUNC,
+- ", got a nominated pair");
++ for (j = p->stun_transactions, k = 0; j; j = j->next, k++) {
++ StunTransaction *stun = j->data;
++
++ stun_message_id (&stun->message, discovery_id);
++
++ if (memcmp (discovery_id, response_id, sizeof(StunTransactionId)))
++ continue;
++
++ res = stun_usage_ice_conncheck_process (resp,
++ &sockaddr.storage, &socklen,
++ agent_to_ice_compatibility (agent));
++ nice_debug ("Agent %p : stun_bind_process/conncheck for %p: "
++ "%s,res=%s,stun#=%d.",
++ agent, p,
++ agent->controlling_mode ? "controlling" : "controlled",
++ priv_ice_return_to_string (res), k);
++
++ if (res == STUN_USAGE_ICE_RETURN_SUCCESS ||
++ res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
++ /* case: found a matching connectivity check request */
++
++ CandidateCheckPair *ok_pair = NULL;
++
++ nice_debug ("Agent %p : conncheck %p MATCHED.", agent, p);
++ priv_remove_stun_transaction (p, stun, component);
++
++ /* step: verify that response came from the same IP address we
++ * sent the original request to (see 7.1.2.1. "Failure
++ * Cases") */
++ if (nice_address_equal (from, &p->remote->addr) == FALSE) {
++ candidate_check_pair_fail (stream, agent, p);
++ if (nice_debug_is_enabled ()) {
++ gchar tmpbuf[INET6_ADDRSTRLEN];
++ gchar tmpbuf2[INET6_ADDRSTRLEN];
++ nice_debug ("Agent %p : conncheck %p FAILED"
++ " (mismatch of source address).", agent, p);
++ nice_address_to_string (&p->remote->addr, tmpbuf);
++ nice_address_to_string (from, tmpbuf2);
++ nice_debug ("Agent %p : '%s:%u' != '%s:%u'", agent,
++ tmpbuf, nice_address_get_port (&p->remote->addr),
++ tmpbuf2, nice_address_get_port (from));
++ }
++ return TRUE;
++ }
+
+- /* Do not step down to CONNECTED if we're already at state READY*/
+- if (component->state != NICE_COMPONENT_STATE_READY) {
+- /* step: notify the client of a new component state (must be done
+- * before the possible check list state update step */
+- agent_signal_component_state_change (agent,
+- stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
+- }
+- }
++ /* note: CONNECTED but not yet READY, see docs */
++
++ /* step: handle the possible case of a peer-reflexive
++ * candidate where the mapped-address in response does
++ * not match any local candidate, see 7.1.2.2.1
++ * "Discovering Peer Reflexive Candidates" ICE ID-19) */
++
++ if (res == STUN_USAGE_ICE_RETURN_NO_MAPPED_ADDRESS) {
++ p->state = NICE_CHECK_SUCCEEDED;
++ p->valid = TRUE;
++ nice_debug ("Agent %p : Mapped address not found."
++ " conncheck %p SUCCEEDED.", agent, p);
++ nice_component_add_valid_candidate (component, p->remote);
++ } else
++ ok_pair = priv_process_response_check_for_reflexive (agent,
++ stream, component, p, sockptr, &sockaddr.addr,
++ local_candidate, remote_candidate);
++
++ /* note: The success of this check might also
++ * cause the state of other checks to change as well, ICE
++ * spec 7.1.3.2.3
++ */
++ priv_conn_check_unfreeze_related (agent, stream, p);
++
++ /* Note: this assignment helps to reduce the numbers of cases
++ * to be tested. If ok_pair and p refer to distinct pairs, it
++ * means that ok_pair is a discovered peer reflexive one,
++ * caused by the check made on pair p. In that case, the
++ * flags to be tested are on p, but the nominated flag will be
++ * set on ok_pair. When there's no discovered pair, p and
++ * ok_pair refer to the same pair.
++ * To summarize : p is a SUCCEEDED pair, ok_pair is a
++ * DISCOVERED, VALID, and eventually NOMINATED pair.
++ */
++ if (!ok_pair)
++ ok_pair = p;
++
++ /* step: updating nominated flag (ICE 7.1.2.2.4 "Updating the
++ Nominated Flag" (ID-19) */
++ if (NICE_AGENT_IS_COMPATIBLE_WITH_RFC5245_OR_OC2007R2 (agent)) {
++ nice_debug ("Agent %p : Updating nominated flag (%s): "
++ "ok_pair=%p (%d/%d) p=%p (%d/%d) (ucnc/mnora)",
++ agent, p->local->transport == NICE_CANDIDATE_TRANSPORT_UDP ?
++ "UDP" : "TCP",
++ ok_pair, ok_pair->use_candidate_on_next_check,
++ ok_pair->mark_nominated_on_response_arrival,
++ p, p->use_candidate_on_next_check,
++ p->mark_nominated_on_response_arrival);
++
++ if (agent->controlling_mode) {
++ switch (agent->nomination_mode) {
++ case NICE_NOMINATION_MODE_REGULAR:
++ if (p->use_candidate_on_next_check) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(regular nomination, controlling, "
++ "use_cand_on_next_check=1).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
++ }
++ break;
++ case NICE_NOMINATION_MODE_AGGRESSIVE:
++ if (!p->nominated) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(aggressive nomination, controlling).",
++ agent, ok_pair, ok_pair->foundation);
++ ok_pair->nominated = TRUE;
++ }
++ break;
++ default:
++ /* Nothing to do */
++ break;
++ }
++ } else {
++ if (p->mark_nominated_on_response_arrival) {
++ nice_debug ("Agent %p : marking pair %p (%s) as nominated "
++ "(%s nomination, controlled, mark_on_response=1).",
++ agent, ok_pair, ok_pair->foundation,
++ agent->nomination_mode == NICE_NOMINATION_MODE_AGGRESSIVE ?
++ "aggressive" : "regular");
++ ok_pair->nominated = TRUE;
++ }
++ }
++ }
+
+- /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
+- states" and 8.1.2 "Updating States", ID-19) */
+- priv_update_check_list_state_for_ready (agent, stream, component);
++ if (ok_pair->nominated == TRUE) {
++ priv_update_selected_pair (agent, component, ok_pair);
++ priv_print_conn_check_lists (agent, G_STRFUNC,
++ ", got a nominated pair");
++
++ /* Do not step down to CONNECTED if we're already at state READY*/
++ if (component->state != NICE_COMPONENT_STATE_READY)
++ /* step: notify the client of a new component state (must be done
++ * before the possible check list state update step */
++ agent_signal_component_state_change (agent,
++ stream->id, component->id, NICE_COMPONENT_STATE_CONNECTED);
++ }
+
+- trans_found = TRUE;
+- } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
+- /* case: role conflict error, need to restart with new role */
+- nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
+- /* note: our role might already have changed due to an
+- * incoming request, but if not, change role now;
+- * follows ICE 7.1.2.1 "Failure Cases" (ID-19) */
+- priv_check_for_role_conflict (agent, !p->controlling);
+-
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- p->state = NICE_CHECK_WAITING;
+- priv_add_pair_to_triggered_check_queue (agent, p);
+- nice_debug ("Agent %p : pair %p state WAITING", agent, p);
+- trans_found = TRUE;
+- } else {
+- /* case: STUN error, the check STUN context was freed */
+- nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
+- p->stun_message.buffer = NULL;
+- p->stun_message.buffer_len = 0;
+- trans_found = TRUE;
+- }
++ /* step: update pair states (ICE 7.1.2.2.3 "Updating pair
++ states" and 8.1.2 "Updating States", ID-19) */
++ priv_update_check_list_state_for_ready (agent, stream, component);
++ } else if (res == STUN_USAGE_ICE_RETURN_ROLE_CONFLICT) {
++ guint64 tie;
++ gboolean controlled_mode;
++
++ /* case: role conflict error, need to restart with new role */
++ nice_debug ("Agent %p : conncheck %p ROLE CONFLICT, restarting", agent, p);
++
++ /* note: this res value indicates that the role of the peer
++ * agent has not changed after the tie-breaker comparison, so
++ * this is our role that must change. see ICE sect. 7.1.3.1
++ * "Failure Cases". Our role might already have changed due to
++ * an earlier incoming request, but if not, change role now.
++ *
++ * Sect. 7.1.3.1 is not clear on this point, but we choose to
++ * put the candidate pair in the triggered check list even
++ * when the agent did not switch its role. The reason for this
++ * interpretation is that the reception of the stun reply, even
++ * an error reply, is a good sign that this pair will be
++ * valid, if we retry the check after the role of both peers
++ * has been fixed.
++ */
++ controlled_mode = (stun_message_find64 (&stun->message,
++ STUN_ATTRIBUTE_ICE_CONTROLLED, &tie) ==
++ STUN_MESSAGE_RETURN_SUCCESS);
++
++ priv_check_for_role_conflict (agent, controlled_mode);
++ priv_remove_stun_transaction (p, stun, component);
++ priv_add_pair_to_triggered_check_queue (agent, p);
++ } else {
++ /* case: STUN error, the check STUN context was freed */
++ nice_debug ("Agent %p : conncheck %p FAILED.", agent, p);
++ candidate_check_pair_fail (stream, agent, p);
+ }
++ return TRUE;
+ }
+ }
+
+-
+- stream->conncheck_list =
+- prune_cancelled_conn_check (stream->conncheck_list);
+-
+- return trans_found;
++ return FALSE;
+ }
+
+ /*
+@@ -2846,6 +3507,7 @@ static gboolean priv_map_reply_to_discovery_request (NiceAgent *agent, StunMessa
+ d->server = niceaddr;
+
+ d->pending = FALSE;
++ agent->discovery_unsched_items++;
+ } else if (res == STUN_USAGE_BIND_RETURN_SUCCESS) {
+ /* case: successful binding discovery, create a new local candidate */
+
+@@ -2930,6 +3592,41 @@ priv_add_new_turn_refresh (CandidateDiscovery *cdisco, NiceCandidate *relay_cand
+ return cand;
+ }
+
++static void priv_handle_turn_alternate_server (NiceAgent *agent,
++ CandidateDiscovery *disco, NiceAddress server, NiceAddress alternate)
++{
++ /* We need to cancel and reset all candidate discovery turn for the same
++ stream and type if there is an alternate server. Otherwise, we might end up
++ with two relay components on different servers, creating candidates with
++ unique foundations that only contain one component.
++ */
++ GSList *i;
++
++ for (i = agent->discovery_list; i; i = i->next) {
++ CandidateDiscovery *d = i->data;
++
++ if (!d->done &&
++ d->type == disco->type &&
++ d->stream == disco->stream &&
++ d->turn->type == disco->turn->type &&
++ nice_address_equal (&d->server, &server)) {
++ gchar ip[INET6_ADDRSTRLEN];
++ // Cancel the pending request to avoid a race condition with another
++ // component responding with another altenrate-server
++ d->stun_message.buffer = NULL;
++ d->stun_message.buffer_len = 0;
++
++ nice_address_to_string (&server, ip);
++ nice_debug ("Agent %p : Cancelling and setting alternate server %s for "
++ "CandidateDiscovery %p", agent, ip, d);
++ d->server = alternate;
++ d->turn->server = alternate;
++ d->pending = FALSE;
++ agent->discovery_unsched_items++;
++ }
++ }
++}
++
+ /*
+ * Tries to match STUN reply in 'buf' to an existing STUN discovery
+ * transaction. If found, a reply is sent.
+@@ -2982,11 +3679,11 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ agent, d, (int)res);
+
+ if (res == STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER) {
+- /* handle alternate server */
+- nice_address_set_from_sockaddr (&d->server, &alternate.addr);
+- nice_address_set_from_sockaddr (&d->turn->server, &alternate.addr);
++ NiceAddress addr;
+
+- d->pending = FALSE;
++ /* handle alternate server */
++ nice_address_set_from_sockaddr (&addr, &alternate.addr);
++ priv_handle_turn_alternate_server (agent, d, d->server, addr);
+ } else if (res == STUN_USAGE_TURN_RETURN_RELAY_SUCCESS ||
+ res == STUN_USAGE_TURN_RETURN_MAPPED_SUCCESS) {
+ /* case: successful allocate, create a new local candidate */
+@@ -3103,6 +3800,17 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ recv_realm = (uint8_t *) stun_message_find (resp,
+ STUN_ATTRIBUTE_REALM, &recv_realm_len);
+
++ if ((agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
++ agent->compatibility == NICE_COMPATIBILITY_OC2007R2) &&
++ alternatelen != sizeof(alternate)) {
++ NiceAddress addr;
++
++ nice_address_set_from_sockaddr (&addr, &alternate.addr);
++
++ if (!nice_address_equal (&addr, &d->server)) {
++ priv_handle_turn_alternate_server (agent, d, d->server, addr);
++ }
++ }
+ /* check for unauthorized error response */
+ if ((agent->compatibility == NICE_COMPATIBILITY_RFC5245 ||
+ agent->compatibility == NICE_COMPATIBILITY_OC2007 ||
+@@ -3123,6 +3831,7 @@ static gboolean priv_map_reply_to_relay_request (NiceAgent *agent, StunMessage *
+ d->stun_resp_msg.buffer = d->stun_resp_buffer;
+ d->stun_resp_msg.buffer_len = sizeof(d->stun_resp_buffer);
+ d->pending = FALSE;
++ agent->discovery_unsched_items++;
+ } else {
+ /* case: a real unauthorized error */
+ d->stun_message.buffer = NULL;
+@@ -3619,8 +4328,7 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ stun_usage_ice_conncheck_use_candidate (&req);
+ uint32_t priority = stun_usage_ice_conncheck_priority (&req);
+
+- if (agent->controlling_mode ||
+- agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
++ if (agent->compatibility == NICE_COMPATIBILITY_GOOGLE ||
+ agent->compatibility == NICE_COMPATIBILITY_MSN ||
+ agent->compatibility == NICE_COMPATIBILITY_OC2007)
+ use_candidate = TRUE;
+@@ -3628,21 +4336,21 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ if (stream->initial_binding_request_received != TRUE)
+ agent_signal_initial_binding_request_received (agent, stream);
+
+- if (component->remote_candidates && remote_candidate == NULL) {
++ if (remote_candidate == NULL) {
+ nice_debug ("Agent %p : No matching remote candidate for incoming check ->"
+ "peer-reflexive candidate.", agent);
+ remote_candidate = discovery_learn_remote_peer_reflexive_candidate (
+ agent, stream, component, priority, from, nicesock,
+ local_candidate,
+ remote_candidate2 ? remote_candidate2 : remote_candidate);
+- if(remote_candidate) {
++ if(remote_candidate && stream->remote_ufrag[0]) {
+ if (local_candidate &&
+ local_candidate->transport == NICE_CANDIDATE_TRANSPORT_TCP_PASSIVE) {
+ CandidateCheckPair *pair;
+
+ pair = priv_conn_check_add_for_candidate_pair_matched (agent,
+ stream->id, component, local_candidate, remote_candidate,
+- NICE_CHECK_DISCOVERED);
++ NICE_CHECK_SUCCEEDED);
+ if (pair) {
+ pair->valid = TRUE;
+ }
+@@ -3651,13 +4359,15 @@ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream,
+ }
+ }
+
++ nice_component_add_valid_candidate (component, remote_candidate);
++
+ priv_reply_to_conn_check (agent, stream, component, local_candidate,
+ remote_candidate, from, nicesock, rbuf_len, &msg, use_candidate);
+
+- if (component->remote_candidates == NULL) {
++ if (stream->remote_ufrag[0] == 0) {
+ /* case: We've got a valid binding request to a local candidate
+- * but we do not yet know remote credentials nor
+- * candidates. As per sect 7.2 of ICE (ID-19), we send a reply
++ * but we do not yet know remote credentials.
++ * As per sect 7.2 of ICE (ID-19), we send a reply
+ * immediately but postpone all other processing until
+ * we get information about the remote candidates */
+
+diff --git a/agent/conncheck.h b/agent/conncheck.h
+index 431c606..e16dc67 100644
+--- a/agent/conncheck.h
++++ b/agent/conncheck.h
+@@ -56,7 +56,6 @@
+ * @NICE_CHECK_SUCCEEDED: Connection successfully checked.
+ * @NICE_CHECK_FAILED: No connectivity; retransmissions ceased.
+ * @NICE_CHECK_FROZEN: Waiting to be scheduled to %NICE_CHECK_WAITING.
+- * @NICE_CHECK_CANCELLED: Check cancelled.
+ * @NICE_CHECK_DISCOVERED: A valid candidate pair not on the check list.
+ *
+ * States for checking a candidate pair.
+@@ -68,11 +67,19 @@ typedef enum
+ NICE_CHECK_SUCCEEDED,
+ NICE_CHECK_FAILED,
+ NICE_CHECK_FROZEN,
+- NICE_CHECK_CANCELLED,
+ NICE_CHECK_DISCOVERED,
+ } NiceCheckState;
+
+ typedef struct _CandidateCheckPair CandidateCheckPair;
++typedef struct _StunTransaction StunTransaction;
++
++struct _StunTransaction
++{
++ GTimeVal next_tick; /* next tick timestamp */
++ StunTimer timer;
++ uint8_t buffer[STUN_MAX_MESSAGE_SIZE_IPV6];
++ StunMessage message;
++};
+
+ struct _CandidateCheckPair
+ {
+@@ -85,15 +92,15 @@ struct _CandidateCheckPair
+ gchar foundation[NICE_CANDIDATE_PAIR_MAX_FOUNDATION];
+ NiceCheckState state;
+ gboolean nominated;
+- gboolean controlling;
+- gboolean timer_restarted;
+ gboolean valid;
++ gboolean use_candidate_on_next_check;
++ gboolean mark_nominated_on_response_arrival;
++ gboolean retransmit; /* if the first stun request must be retransmitted */
++ CandidateCheckPair *discovered_pair;
++ CandidateCheckPair *succeeded_pair;
+ guint64 priority;
+ guint32 prflx_priority;
+- GTimeVal next_tick; /* next tick timestamp */
+- StunTimer timer;
+- uint8_t stun_buffer[STUN_MAX_MESSAGE_SIZE_IPV6];
+- StunMessage stun_message;
++ GSList *stun_transactions; /* a list of ongoing stun requests */
+ };
+
+ int conn_check_add_for_candidate (NiceAgent *agent, guint stream_id, NiceComponent *component, NiceCandidate *remote);
+@@ -105,7 +112,7 @@ int conn_check_send (NiceAgent *agent, CandidateCheckPair *pair);
+ void conn_check_prune_stream (NiceAgent *agent, NiceStream *stream);
+ gboolean conn_check_handle_inbound_stun (NiceAgent *agent, NiceStream *stream, NiceComponent *component, NiceSocket *udp_socket, const NiceAddress *from, gchar *buf, guint len);
+ gint conn_check_compare (const CandidateCheckPair *a, const CandidateCheckPair *b);
+-void conn_check_remote_candidates_set(NiceAgent *agent, NiceStream *stream, NiceComponent *component);
++void conn_check_remote_credentials_set(NiceAgent *agent, NiceStream *stream);
+ NiceCandidateTransport conn_check_match_transport (NiceCandidateTransport transport);
+ void
+ conn_check_prune_socket (NiceAgent *agent, NiceStream *stream, NiceComponent *component,
+diff --git a/agent/debug.c b/agent/debug.c
+index e1a298c..84fee94 100644
+--- a/agent/debug.c
++++ b/agent/debug.c
+@@ -102,7 +102,7 @@ void nice_debug_init (void)
+ flags |= g_parse_debug_string (gflags_string, gkeys, 4);
+ if (gflags_string && strstr (gflags_string, "libnice-pseudotcp-verbose"))
+ flags |= NICE_DEBUG_PSEUDOTCP_VERBOSE;
+- if (gflags_string && strstr (gflags_string, "libnice-nice-verbose")) {
++ if (gflags_string && strstr (gflags_string, "libnice-verbose")) {
+ flags |= NICE_DEBUG_NICE_VERBOSE;
+ }
+
+diff --git a/agent/discovery.c b/agent/discovery.c
+index 7a890a0..4cc99c2 100644
+--- a/agent/discovery.c
++++ b/agent/discovery.c
+@@ -1072,11 +1072,11 @@ static gboolean priv_discovery_tick_unlocked (gpointer pointer)
+
+ if (buffer_len > 0) {
+ if (nice_socket_is_reliable (cand->nicesock)) {
+- stun_timer_start_reliable (&cand->timer,
+- STUN_TIMER_DEFAULT_RELIABLE_TIMEOUT);
++ stun_timer_start_reliable (&cand->timer, agent->stun_reliable_timeout);
+ } else {
+- stun_timer_start (&cand->timer, 200,
+- STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
++ stun_timer_start (&cand->timer,
++ agent->stun_initial_timeout,
++ agent->stun_max_retransmissions);
+ }
+
+ /* send the conncheck */
+diff --git a/agent/interfaces.c b/agent/interfaces.c
+index 0fa2fd7..a81888e 100644
+--- a/agent/interfaces.c
++++ b/agent/interfaces.c
+@@ -276,6 +276,12 @@ nice_interfaces_get_local_ips (gboolean include_loopback)
+ nice_debug ("Ignoring loopback interface");
+ g_free (addr_string);
+ }
++#ifdef IGNORED_IFACE_PREFIX
++ } else if (g_str_has_prefix (ifa->ifa_name, IGNORED_IFACE_PREFIX)) {
++ nice_debug ("Ignoring interface %s as it matches prefix %s",
++ ifa->ifa_name, IGNORED_IFACE_PREFIX);
++ g_free (addr_string);
++#endif
+ } else {
+ if (nice_interfaces_is_private_ip (ifa->ifa_addr))
+ ips = add_ip_to_list (ips, addr_string, TRUE);
+diff --git a/agent/stream.c b/agent/stream.c
+index 8121e12..533ff15 100644
+--- a/agent/stream.c
++++ b/agent/stream.c
+@@ -103,27 +103,6 @@ nice_stream_find_component_by_id (NiceStream *stream, guint id)
+ return NULL;
+ }
+
+-/*
+- * Returns true if all components of the stream are either
+- * 'CONNECTED' or 'READY' (connected plus nominated).
+- */
+-gboolean
+-nice_stream_all_components_ready (NiceStream *stream)
+-{
+- GSList *i;
+-
+- for (i = stream->components; i; i = i->next) {
+- NiceComponent *component = i->data;
+- if (component &&
+- !(component->state == NICE_COMPONENT_STATE_CONNECTED ||
+- component->state == NICE_COMPONENT_STATE_READY))
+- return FALSE;
+- }
+-
+- return TRUE;
+-}
+-
+-
+ /*
+ * Initialized the local crendentials for the stream.
+ */
+diff --git a/agent/stream.h b/agent/stream.h
+index f9188cb..954ba66 100644
+--- a/agent/stream.h
++++ b/agent/stream.h
+@@ -103,9 +103,6 @@ nice_stream_new (guint n_components, NiceAgent *agent);
+ void
+ nice_stream_close (NiceStream *stream);
+
+-gboolean
+-nice_stream_all_components_ready (NiceStream *stream);
+-
+ NiceComponent *
+ nice_stream_find_component_by_id (NiceStream *stream, guint id);
+
+diff --git a/common.mk b/common.mk
+index e2ca3f4..b16380d 100644
+--- a/common.mk
++++ b/common.mk
+@@ -4,6 +4,8 @@ pkgincludedir = $(includedir)/nice
+
+
+ check-valgrind:
+- $(MAKE) TESTS_ENVIRONMENT="sh $$(cd "$(top_srcdir)" && pwd)/scripts/valgrind.sh" check
++ $(MAKE) TESTS_ENVIRONMENT="USE_VALGRIND=1 " check
++
++LOG_DRIVER=$(top_srcdir)/scripts/valgrind-test-driver
+
+ .PHONY: check-valgrind
+diff --git a/configure.ac b/configure.ac
+index b39bfe3..16988ad 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -57,6 +57,7 @@ AC_PROG_CC
+ AM_PROG_AR
+ LT_PREREQ([2.2.6])
+ LT_INIT([dlopen win32-dll disable-static])
++AC_PATH_PROG([GLIB_MKENUMS],[glib-mkenums])
+
+ # Check Operating System
+ AC_MSG_CHECKING([operating system])
+@@ -153,7 +154,6 @@ AS_IF([test "$enable_compile_warnings" = "yes" -o \
+ ])
+ AS_IF([test "$enable_compile_warnings" = "maximum" -o \
+ "$enable_compile_warnings" = "error"],[
+- NICE_ADD_FLAG([-Wswitch-enum])
+ NICE_ADD_FLAG([-Wswitch-default])
+ NICE_ADD_FLAG([-Waggregate-return])
+ ])
+@@ -354,6 +354,20 @@ AM_CONDITIONAL([ENABLE_GTK_DOC], false)
+ # GObject introspection
+ GOBJECT_INTROSPECTION_CHECK([1.30.0])
+
++dnl Ignore a specific network interface name prefix from the connection check
++AC_MSG_CHECKING([whether to ignore a specific network interface name prefix])
++AC_ARG_WITH([ignored-network-interface-prefix],
++ [AS_HELP_STRING([--with-ignored-network-interface-prefix=string],
++ [Ignore network interfaces whose name starts with "string" from the ICE connection
++ check algorithm. For example, interfaces "virbr" in the case of the virtual bridge
++ handled by libvirtd, do not help in finding connectivity.])],
++ [interface_prefix="$withval"])
++AS_IF([test -n "$interface_prefix"],
++ [AC_DEFINE_UNQUOTED([IGNORED_IFACE_PREFIX],["$interface_prefix"],
++ [Ignore this network interface prefix from the connection check])
++ AC_MSG_RESULT([yes, $interface_prefix])],
++ [AC_MSG_RESULT([no])])
++
+ AC_CONFIG_MACRO_DIR(m4)
+
+ AC_OUTPUT
+diff --git a/docs/reference/libnice/libnice-docs.xml b/docs/reference/libnice/libnice-docs.xml
+index 53487bc..391be1a 100644
+--- a/docs/reference/libnice/libnice-docs.xml
++++ b/docs/reference/libnice/libnice-docs.xml
+@@ -105,6 +105,10 @@
+ <title>Index of new symbols in 0.1.14</title>
+ <xi:include href="xml/api-index-0.1.14.xml"><xi:fallback/></xi:include>
+ </index>
++ <index role="0.1.15">
++ <title>Index of new symbols in 0.1.15</title>
++ <xi:include href="xml/api-index-0.1.15.xml"><xi:fallback/></xi:include>
++ </index>
+ <xi:include href="xml/annotation-glossary.xml"><xi:fallback /></xi:include>
+ </part>
+ </book>
+diff --git a/docs/reference/libnice/libnice-sections.txt b/docs/reference/libnice/libnice-sections.txt
+index d377257..a481106 100644
+--- a/docs/reference/libnice/libnice-sections.txt
++++ b/docs/reference/libnice/libnice-sections.txt
+@@ -5,6 +5,7 @@ NiceAgent
+ NiceComponentState
+ NiceComponentType
+ NiceProxyType
++NiceNominationMode
+ NiceCompatibility
+ NiceAgentRecvFunc
+ NiceInputMessage
+@@ -12,6 +13,7 @@ NiceOutputMessage
+ NICE_AGENT_MAX_REMOTE_CANDIDATES
+ nice_agent_new
+ nice_agent_new_reliable
++nice_agent_new_full
+ nice_agent_add_local_address
+ nice_agent_set_port_range
+ nice_agent_add_stream
+@@ -76,6 +78,7 @@ NICE_CANDIDATE_MAX_FOUNDATION
+ nice_candidate_new
+ nice_candidate_free
+ nice_candidate_copy
++nice_candidate_equal_target
+ <SUBSECTION Standard>
+ NICE_TYPE_CANDIDATE
+ nice_candidate_get_type
+diff --git a/examples/Makefile.am b/examples/Makefile.am
+index 1e7decf..9c80854 100644
+--- a/examples/Makefile.am
++++ b/examples/Makefile.am
+@@ -18,7 +18,7 @@ AM_CFLAGS = \
+ $(GLIB_CFLAGS) \
+ $(GUPNP_CFLAGS)
+
+-bin_PROGRAMS = simple-example threaded-example sdp-example
++noinst_PROGRAMS = simple-example threaded-example sdp-example
+
+ simple_example_SOURCES = simple-example.c
+ simple_example_LDADD = $(top_builddir)/agent/libagent.la \
+diff --git a/nice/libnice.sym b/nice/libnice.sym
+index b04bb95..1e522ad 100644
+--- a/nice/libnice.sym
++++ b/nice/libnice.sym
+@@ -58,6 +58,7 @@ nice_agent_set_software
+ nice_agent_set_stream_name
+ nice_agent_set_stream_tos
+ nice_candidate_copy
++nice_candidate_equal_target
+ nice_candidate_free
+ nice_candidate_new
+ nice_component_state_to_string
+diff --git a/scripts/valgrind-test-driver b/scripts/valgrind-test-driver
+new file mode 100755
+index 0000000..5b660ee
+--- /dev/null
++++ b/scripts/valgrind-test-driver
+@@ -0,0 +1,162 @@
++#! /bin/sh
++# test-driver - basic testsuite driver script.
++
++scriptversion=2017-04-04.22; # UTC
++
++# Copyright (C) 2011-2014 Free Software Foundation, Inc.
++#
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++# This file is maintained in Automake, please report
++# bugs to <bug-automake(a)gnu.org> or send patches to
++# <automake-patches(a)gnu.org>.
++
++# Make unconditional expansion of undefined variables an error. This
++# helps a lot in preventing typo-related bugs.
++set -u
++
++usage_error ()
++{
++ echo "$0: $*" >&2
++ print_usage >&2
++ exit 2
++}
++
++print_usage ()
++{
++ cat <<END
++Usage:
++ test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
++ [--expect-failure={yes|no}] [--color-tests={yes|no}]
++ [--enable-hard-errors={yes|no}] [--]
++ TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
++The '--test-name', '--log-file' and '--trs-file' options are mandatory.
++END
++}
++
++test_name= # Used for reporting.
++log_file= # Where to save the output of the test script.
++trs_file= # Where to save the metadata of the test run.
++expect_failure=no
++color_tests=no
++enable_hard_errors=yes
++while test $# -gt 0; do
++ case $1 in
++ --help) print_usage; exit $?;;
++ --version) echo "test-driver $scriptversion"; exit $?;;
++ --test-name) test_name=$2; shift;;
++ --log-file) log_file=$2; shift;;
++ --trs-file) trs_file=$2; shift;;
++ --color-tests) color_tests=$2; shift;;
++ --expect-failure) expect_failure=$2; shift;;
++ --enable-hard-errors) enable_hard_errors=$2; shift;;
++ --) shift; break;;
++ -*) usage_error "invalid option: '$1'";;
++ *) break;;
++ esac
++ shift
++done
++
++missing_opts=
++test x"$test_name" = x && missing_opts="$missing_opts --test-name"
++test x"$log_file" = x && missing_opts="$missing_opts --log-file"
++test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
++if test x"$missing_opts" != x; then
++ usage_error "the following mandatory options are missing:$missing_opts"
++fi
++
++if test $# -eq 0; then
++ usage_error "missing argument"
++fi
++
++if test $color_tests = yes; then
++ # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
++ red='[0;31m' # Red.
++ grn='[0;32m' # Green.
++ lgn='[1;32m' # Light green.
++ blu='[1;34m' # Blue.
++ mgn='[0;35m' # Magenta.
++ std='[m' # No color.
++else
++ red= grn= lgn= blu= mgn= std=
++fi
++
++do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
++trap "st=129; $do_exit" 1
++trap "st=130; $do_exit" 2
++trap "st=141; $do_exit" 13
++trap "st=143; $do_exit" 15
++
++# Test script is run here.
++top_srcdir="`dirname $0`/.."
++tests_dir="${top_srcdir}/tests"
++
++USE_VALGRIND="`printenv USE_VALGRIND`"
++
++if test "x${USE_VALGRIND}" = "x1"; then
++ ${top_srcdir}/libtool --mode=execute valgrind \
++ --leak-check=full \
++ --show-reachable=no \
++ --error-exitcode=1 \
++ --suppressions=$tests_dir/libnice.supp \
++ --num-callers=30 "$@" >$log_file 2>&1
++else
++ "$@" >$log_file 2>&1
++fi
++estatus=$?
++
++if test $enable_hard_errors = no && test $estatus -eq 99; then
++ tweaked_estatus=1
++else
++ tweaked_estatus=$estatus
++fi
++
++case $tweaked_estatus:$expect_failure in
++ 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
++ 0:*) col=$grn res=PASS recheck=no gcopy=no;;
++ 77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
++ 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
++ *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
++ *:*) col=$red res=FAIL recheck=yes gcopy=yes;;
++esac
++
++# Report the test outcome and exit status in the logs, so that one can
++# know whether the test passed or failed simply by looking at the '.log'
++# file, without the need of also peaking into the corresponding '.trs'
++# file (automake bug#11814).
++echo "$res $test_name (exit status: $estatus)" >>$log_file
++
++# Report outcome to console.
++echo "${col}${res}${std}: $test_name"
++
++# Register the test result, and other relevant metadata.
++echo ":test-result: $res" > $trs_file
++echo ":global-test-result: $res" >> $trs_file
++echo ":recheck: $recheck" >> $trs_file
++echo ":copy-in-global-log: $gcopy" >> $trs_file
++
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+diff --git a/scripts/valgrind.sh b/scripts/valgrind.sh
+deleted file mode 100755
+index 2864b6f..0000000
+--- a/scripts/valgrind.sh
++++ /dev/null
+@@ -1,28 +0,0 @@
+-#!/bin/sh
+-
+-export G_SLICE=always-malloc
+-export G_DEBUG=gc-friendly
+-
+-tests_dir="`dirname $0`/../tests"
+-
+-report=`libtool --mode=execute valgrind \
+- --leak-check=full \
+- --show-reachable=no \
+- --error-exitcode=1 \
+- --suppressions=$tests_dir/libnice.supp \
+- --num-callers=30 \
+- $1 2>&1`
+-
+-#if echo "$report" | grep -q ==; then
+-if test $? != 0; then
+- echo "$report"
+- exit 1
+-fi
+-
+-if echo "$report" | grep -q "definitely lost"; then
+- if ! echo "$report" | grep -q "definitely lost: 0 bytes"; then
+- echo "$report"
+- exit 1
+- fi
+-fi
+-
+diff --git a/socket/udp-turn.c b/socket/udp-turn.c
+index cc3409b..190a9ea 100644
+--- a/socket/udp-turn.c
++++ b/socket/udp-turn.c
+@@ -174,8 +174,8 @@ priv_send_data_queue_destroy (gpointer user_data)
+
+ NiceSocket *
+ nice_udp_turn_socket_new (GMainContext *ctx, NiceAddress *addr,
+- NiceSocket *base_socket, NiceAddress *server_addr,
+- gchar *username, gchar *password,
++ NiceSocket *base_socket, const NiceAddress *server_addr,
++ const gchar *username, const gchar *password,
+ NiceTurnSocketCompatibility compatibility)
+ {
+ UdpTurnPriv *priv;
+@@ -406,9 +406,8 @@ socket_recv_messages (NiceSocket *sock,
+
+ /* Split up the monolithic buffer again into the caller-provided buffers. */
+ if (parsed_buffer_length > 0 && allocated_buffer) {
+- parsed_buffer_length =
+- memcpy_buffer_to_input_message (message, buffer,
+- parsed_buffer_length);
++ memcpy_buffer_to_input_message (message, buffer,
++ parsed_buffer_length);
+ }
+
+ if (allocated_buffer)
+@@ -1185,7 +1184,7 @@ nice_udp_turn_socket_parse_recv_message (NiceSocket *sock, NiceSocket **from_soc
+ gsize
+ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
+ NiceAddress *from, gsize len, guint8 *buf,
+- NiceAddress *recv_from, guint8 *_recv_buf, gsize recv_len)
++ const NiceAddress *recv_from, const guint8 *_recv_buf, gsize recv_len)
+ {
+
+ UdpTurnPriv *priv = (UdpTurnPriv *) sock->priv;
+@@ -1195,8 +1194,8 @@ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
+ ChannelBinding *binding = NULL;
+
+ union {
+- guint8 *u8;
+- guint16 *u16;
++ const guint8 *u8;
++ const guint16 *u16;
+ } recv_buf;
+
+ /* In the case of a reliable UDP-TURN-OVER-TCP (which means MS-TURN)
+diff --git a/socket/udp-turn.h b/socket/udp-turn.h
+index b1eeeb4..df10a1c 100644
+--- a/socket/udp-turn.h
++++ b/socket/udp-turn.h
+@@ -59,15 +59,16 @@ nice_udp_turn_socket_parse_recv_message (NiceSocket *sock, NiceSocket **from_soc
+ gsize
+ nice_udp_turn_socket_parse_recv (NiceSocket *sock, NiceSocket **from_sock,
+ NiceAddress *from, gsize len, guint8 *buf,
+- NiceAddress *recv_from, guint8 *recv_buf, gsize recv_len);
++ const NiceAddress *recv_from, const guint8 *recv_buf, gsize recv_len);
+
+ gboolean
+ nice_udp_turn_socket_set_peer (NiceSocket *sock, NiceAddress *peer);
+
+ NiceSocket *
+ nice_udp_turn_socket_new (GMainContext *ctx, NiceAddress *addr,
+- NiceSocket *base_socket, NiceAddress *server_addr,
+- gchar *username, gchar *password, NiceTurnSocketCompatibility compatibility);
++ NiceSocket *base_socket, const NiceAddress *server_addr,
++ const gchar *username, const gchar *password,
++ NiceTurnSocketCompatibility compatibility);
+
+ void
+ nice_udp_turn_socket_set_ms_realm(NiceSocket *sock, StunMessage *msg);
+diff --git a/stun/stunmessage.c b/stun/stunmessage.c
+index e8184c4..4cc3392 100644
+--- a/stun/stunmessage.c
++++ b/stun/stunmessage.c
+@@ -120,6 +120,7 @@ stun_message_find (const StunMessage *msg, StunAttribute type,
+ /* Only fingerprint may come after M-I */
+ if (type == STUN_ATTRIBUTE_FINGERPRINT)
+ break;
++ return NULL;
+
+ case STUN_ATTRIBUTE_FINGERPRINT:
+ /* Nothing may come after FPR */
+diff --git a/stun/usages/bind.c b/stun/usages/bind.c
+index 8dd7afc..ee600a0 100644
+--- a/stun/usages/bind.c
++++ b/stun/usages/bind.c
+@@ -479,7 +479,7 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ size_t len;
+ StunUsageTransReturn ret;
+ int val;
+- struct sockaddr_storage alternate_server;
++ struct sockaddr_storage alternate_server = { AF_UNSPEC } ;
+ socklen_t alternate_server_len = sizeof (alternate_server);
+ StunUsageBindReturn bind_ret;
+
+@@ -491,13 +491,15 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ ret = stun_trans_create (&trans, SOCK_DGRAM, 0, srv, srvlen);
+ if (ret != STUN_USAGE_TRANS_RETURN_SUCCESS) {
+ stun_debug ("STUN transaction failed: couldn't create transport.");
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+
+ val = stun_trans_send (&trans, req_buf, len);
+ if (val < -1) {
+ stun_debug ("STUN transaction failed: couldn't send request.");
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+
+ stun_timer_start (&timer, STUN_TIMER_DEFAULT_TIMEOUT,
+@@ -514,14 +516,16 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ switch (stun_timer_refresh (&timer)) {
+ case STUN_USAGE_TIMER_RETURN_TIMEOUT:
+ stun_debug ("STUN transaction failed: time out.");
+- return STUN_USAGE_BIND_RETURN_TIMEOUT; // fatal error!
++ bind_ret = STUN_USAGE_BIND_RETURN_TIMEOUT; // fatal error!
++ goto done;
+ case STUN_USAGE_TIMER_RETURN_RETRANSMIT:
+ stun_debug ("STUN transaction retransmitted (timeout %dms).",
+ stun_timer_remainder (&timer));
+ val = stun_trans_send (&trans, req_buf, len);
+ if (val < -1) {
+ stun_debug ("STUN transaction failed: couldn't resend request.");
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+ continue;
+ case STUN_USAGE_TIMER_RETURN_SUCCESS:
+@@ -538,7 +542,10 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+
+ valid = stun_agent_validate (&agent, &msg, buf, val, NULL, NULL);
+ if (valid == STUN_VALIDATION_UNKNOWN_ATTRIBUTE)
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ {
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
++ }
+
+ if (valid != STUN_VALIDATION_SUCCESS) {
+ ret = STUN_USAGE_TRANS_RETURN_RETRY;
+@@ -548,16 +555,22 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ if (bind_ret == STUN_USAGE_BIND_RETURN_ALTERNATE_SERVER) {
+ stun_trans_deinit (&trans);
+
++ assert (alternate_server.ss_family != AF_UNSPEC);
++
+ ret = stun_trans_create (&trans, SOCK_DGRAM, 0,
+ (struct sockaddr *) &alternate_server, alternate_server_len);
+
+ if (ret != STUN_USAGE_TRANS_RETURN_SUCCESS) {
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
+ }
+
+ val = stun_trans_send (&trans, req_buf, len);
+ if (val < -1)
+- return STUN_USAGE_BIND_RETURN_ERROR;
++ {
++ bind_ret = STUN_USAGE_BIND_RETURN_ERROR;
++ goto done;
++ }
+
+ stun_timer_start (&timer, STUN_TIMER_DEFAULT_TIMEOUT,
+ STUN_TIMER_DEFAULT_MAX_RETRANSMISSIONS);
+@@ -571,5 +584,9 @@ StunUsageBindReturn stun_usage_bind_run (const struct sockaddr *srv,
+ }
+ while (ret == STUN_USAGE_TRANS_RETURN_RETRY);
+
++done:
++ if (trans.fd != -1)
++ stun_trans_deinit (&trans);
++
+ return bind_ret;
+ }
+diff --git a/stun/usages/timer.c b/stun/usages/timer.c
+index 2862ab8..5370cba 100644
+--- a/stun/usages/timer.c
++++ b/stun/usages/timer.c
+@@ -145,7 +145,11 @@ StunUsageTimerReturn stun_timer_refresh (StunTimer *timer)
+ if (timer->retransmissions >= timer->max_retransmissions)
+ return STUN_USAGE_TIMER_RETURN_TIMEOUT;
+
+- add_delay (&timer->deadline, timer->delay *= 2);
++ if (timer->retransmissions == timer->max_retransmissions - 1)
++ timer->delay = timer->delay / 2;
++ else
++ timer->delay = timer->delay * 2;
++ add_delay (&timer->deadline, timer->delay);
+ timer->retransmissions++;
+ return STUN_USAGE_TIMER_RETURN_RETRANSMIT;
+ }
+diff --git a/stun/usages/timer.h b/stun/usages/timer.h
+index e74353b..097e75b 100644
+--- a/stun/usages/timer.h
++++ b/stun/usages/timer.h
+@@ -132,7 +132,11 @@ struct stun_timer_s {
+ * The default intial timeout to use for the timer
+ * RFC recommendds 500, but it's ridiculous, 50ms is known to work in most
+ * cases as it is also what is used by SIP style VoIP when sending A-Law and
+- * mu-Law audio, so 200ms should be hyper safe.
++ * mu-Law audio, so 200ms should be hyper safe. With an initial timeout
++ * of 200ms, a default of 7 transmissions, the last timeout will be
++ * 16 * 200ms, and we expect to receive a response from the stun server
++ * before (1 + 2 + 4 + 8 + 16 + 32 + 16) * 200ms = 15200 ms after the initial
++ * stun request has been sent.
+ */
+ #define STUN_TIMER_DEFAULT_TIMEOUT 200
+
+diff --git a/stun/usages/turn.c b/stun/usages/turn.c
+index 3b94959..ec12642 100644
+--- a/stun/usages/turn.c
++++ b/stun/usages/turn.c
+@@ -300,6 +300,17 @@ StunUsageTurnReturn stun_usage_turn_process (StunMessage *msg,
+ stun_debug (" STUN error message received (code: %d)", code);
+
+ /* ALTERNATE-SERVER mechanism */
++ if (compatibility == STUN_USAGE_TURN_COMPATIBILITY_OC2007 &&
++ alternate_server && alternate_server_len &&
++ stun_message_find_addr (msg, STUN_ATTRIBUTE_MS_ALTERNATE_SERVER,
++ alternate_server,
++ alternate_server_len) == STUN_MESSAGE_RETURN_SUCCESS) {
++ stun_debug ("Found alternate server");
++ /* The ALTERNATE_SERVER will always be returned by the MS turn server.
++ * We need to check if the ALTERNATE_SERVER is the same as the current
++ * server to decide whether we need to switch servers or not.
++ */
++ }
+ if ((code / 100) == 3) {
+ if (alternate_server && alternate_server_len) {
+ if (stun_message_find_addr (msg, STUN_ATTRIBUTE_ALTERNATE_SERVER,
+diff --git a/stun/usages/turn.h b/stun/usages/turn.h
+index 7a2d4e6..83fa00a 100644
+--- a/stun/usages/turn.h
++++ b/stun/usages/turn.h
+@@ -256,6 +256,10 @@ size_t stun_usage_turn_create_permission (StunAgent *agent, StunMessage *msg,
+ * Allocate request, in case the currently used TURN server is requesting the use
+ * of an alternate server. This argument will only be filled if the return value
+ * of the function is #STUN_USAGE_TURN_RETURN_ALTERNATE_SERVER
++ * In the case of @STUN_USAGE_TURN_COMPATIBILITY_OC2007 compatibility, the
++ * @alternate_server could be filled at any time, and should only be considered
++ * if the request was sent to a different server than the address returned
++ * in the @alternate_server field
+ * @alternate_server_len: The length of @alternate_server
+ * @bandwidth: A pointer to fill with the bandwidth the TURN server allocated us
+ * @lifetime: A pointer to fill with the lifetime of the allocation
+diff --git a/tests/Makefile.am b/tests/Makefile.am
+index 7bfe075..30d6f8e 100644
+--- a/tests/Makefile.am
++++ b/tests/Makefile.am
+@@ -24,7 +24,7 @@ AM_CPPFLAGS = -DG_LOG_DOMAIN=\"libnice-tests\"
+
+ AM_TESTS_ENVIRONMENT = \
+ G_MESSAGES_DEBUG=all \
+- NICE_DEBUG=all;
++ NICE_DEBUG=all
+
+ COMMON_LDADD = $(top_builddir)/agent/libagent.la $(top_builddir)/socket/libsocket.la $(GLIB_LIBS) $(GUPNP_LIBS)
+
+@@ -45,8 +45,8 @@ check_PROGRAMS = \
+ test-send-recv \
+ test-socket-is-based-on \
+ test-priority \
+- test-mainloop \
+ test-fullmode \
++ test-different-number-streams \
+ test-restart \
+ test-fallback \
+ test-thread \
+@@ -55,7 +55,9 @@ check_PROGRAMS = \
+ test-tcp \
+ test-icetcp \
+ test-credentials \
+- test-turn
++ test-turn \
++ test-drop-invalid \
++ test-nomination
+
+ dist_check_SCRIPTS = \
+ check-test-fullmode-with-stun.sh \
+@@ -113,6 +115,8 @@ test_mainloop_LDADD = $(COMMON_LDADD)
+
+ test_fullmode_LDADD = $(COMMON_LDADD)
+
++test_different_number_streams_LDADD = $(COMMON_LDADD)
++
+ test_restart_LDADD = $(COMMON_LDADD)
+
+ test_fallback_LDADD = $(COMMON_LDADD)
+@@ -129,6 +133,10 @@ test_credentials_LDADD = $(COMMON_LDADD)
+
+ test_turn_LDADD = $(COMMON_LDADD)
+
++test_drop_invalid_LDADD = $(COMMON_LDADD)
++
++test_nomination_LDADD = $(COMMON_LDADD)
++
+ test_gstreamer_CFLAGS = $(AM_CFLAGS) $(GST_CHECK_CFLAGS)
+ test_gstreamer_LDADD = -lnice -L$(top_builddir)/nice/.libs $(GLIB_LIBS) $(GUPNP_LIBS) $(GST_CHECK_LIBS) $(GST_LIBS)
+
+diff --git a/tests/test-credentials.c b/tests/test-credentials.c
+index 1de4e49..f1ea89d 100644
+--- a/tests/test-credentials.c
++++ b/tests/test-credentials.c
+@@ -184,6 +184,8 @@ int main (void)
+ nice_agent_get_local_credentials (lagent, 1, &ufrag, &password);
+ g_assert (g_strcmp0("unicorns", ufrag) == 0);
+ g_assert (g_strcmp0("awesome", password) == 0);
++ g_free (ufrag);
++ g_free (password);
+
+ nice_agent_gather_candidates (lagent, 1);
+ nice_agent_gather_candidates (ragent, 1);
+diff --git a/tests/test-different-number-streams.c b/tests/test-different-number-streams.c
+new file mode 100644
+index 0000000..7fd4763
+--- /dev/null
++++ b/tests/test-different-number-streams.c
+@@ -0,0 +1,208 @@
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "agent.h"
++
++#include <stdlib.h>
++#include <string.h>
++
++#define ADD_2_STREAMS TRUE
++#define USE_SECOND_STREAM TRUE
++
++static GMainLoop *global_mainloop = NULL;
++
++static guint global_components_ready = 0;
++static guint global_components_ready_exit = 0;
++
++static gboolean timer_cb (gpointer pointer)
++{
++ g_debug ("test-different-number-streams:%s: %p", G_STRFUNC, pointer);
++
++ /* signal status via a global variable */
++
++ /* note: should not be reached, abort */
++ g_error ("ERROR: test has got stuck, aborting...");
++
++ return FALSE;
++}
++
++static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("%p: gathering done (stream_id: %u)", agent, stream_id);
++}
++
++static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
++{
++ g_debug ("%p: component state changed (stream_id: %u, component_id: %u, state: %s)",
++ agent, stream_id, component_id, nice_component_state_to_string (state));
++
++ if (state == NICE_COMPONENT_STATE_READY) {
++ global_components_ready++;
++ }
++
++ /* signal status via a global variable */
++ if (global_components_ready == global_components_ready_exit) {
++ g_debug ("Components ready/failed achieved. Stopping mailoop");
++ g_main_loop_quit (global_mainloop);
++ }
++}
++
++static void set_candidates (NiceAgent *from, guint from_stream,
++ NiceAgent *to, guint to_stream, guint component)
++{
++ GSList *cands = NULL, *i;
++
++ cands = nice_agent_get_local_candidates (from, from_stream, component);
++ nice_agent_set_remote_candidates (to, to_stream, component, cands);
++
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++}
++
++static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
++{
++ g_debug ("%p: recv (stream_id: %u, component_id: %u)", agent, stream_id, component_id);
++}
++
++int main (void)
++{
++ NiceAgent *lagent, *ragent;
++ guint timer_id;
++ guint ls_id, rs_id_1, rs_id_2;
++ gchar *lufrag = NULL, *lpassword = NULL;
++ gchar *rufrag1 = NULL, *rpassword1 = NULL, *rufrag2 = NULL, *rpassword2 = NULL;
++
++#ifdef G_OS_WIN32
++ WSADATA w;
++
++ WSAStartup(0x0202, &w);
++#endif
++
++ global_mainloop = g_main_loop_new (NULL, FALSE);
++
++ /* step: create the agents L and R */
++ lagent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_GOOGLE);
++ g_debug ("lagent: %p", lagent);
++ nice_agent_set_software (lagent, "test-different-number-streams, Left Agent");
++ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
++ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
++ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), NULL);
++ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), NULL);
++
++ ragent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_GOOGLE);
++ g_debug ("ragent: %p", ragent);
++ nice_agent_set_software (ragent, "test-different-number-streams, Right Agent");
++ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
++ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), NULL);
++ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), NULL);
++
++ /* step: add a timer to catch state changes triggered by signals */
++ timer_id = g_timeout_add (30000, timer_cb, NULL);
++
++ ls_id = nice_agent_add_stream (lagent, 2);
++ g_assert (ls_id > 0);
++ nice_agent_get_local_credentials(lagent, ls_id, &lufrag, &lpassword);
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++
++ global_components_ready_exit = 4;
++
++ if (ADD_2_STREAMS) {
++ rs_id_1 = nice_agent_add_stream (ragent, 2);
++ g_assert (rs_id_1 > 0);
++ nice_agent_get_local_credentials(ragent, rs_id_1, &rufrag1, &rpassword1);
++
++ rs_id_2 = nice_agent_add_stream (ragent, 2);
++ g_assert (rs_id_2 > 0);
++ nice_agent_get_local_credentials(ragent, rs_id_2, &rufrag2, &rpassword2);
++
++ nice_agent_set_remote_credentials (ragent, rs_id_2, lufrag, lpassword);
++ nice_agent_set_remote_credentials (lagent, ls_id, rufrag2, rpassword2);
++
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id_2) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id_1) == TRUE);
++
++ if (USE_SECOND_STREAM) {
++ set_candidates (ragent, rs_id_2, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id_2, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id_2, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id_2, NICE_COMPONENT_TYPE_RTCP);
++ } else {
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP);
++ }
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_2, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_2, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ } else {
++ rs_id_1 = nice_agent_add_stream (ragent, 2);
++ g_assert (rs_id_1 > 0);
++ nice_agent_get_local_credentials(ragent, rs_id_1, &rufrag1, &rpassword1);
++
++ nice_agent_set_remote_credentials (ragent, rs_id_1, lufrag, lpassword);
++ nice_agent_set_remote_credentials (lagent, ls_id, rufrag1, rpassword1);
++
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id_1) == TRUE);
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++ nice_agent_attach_recv (ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv, NULL);
++
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id_1, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id_1, NICE_COMPONENT_TYPE_RTCP);
++ }
++
++ /* step: run the mainloop until connectivity checks succeed
++ * (see timer_cb() above) */
++ g_main_loop_run (global_mainloop);
++
++ g_free (lufrag);
++ g_free (lpassword);
++ g_free (rufrag1);
++ g_free (rpassword1);
++ g_free (rufrag2);
++ g_free (rpassword2);
++ g_object_unref (lagent);
++ g_object_unref (ragent);
++
++ g_main_loop_unref (global_mainloop);
++ global_mainloop = NULL;
++
++ g_source_remove (timer_id);
++
++#ifdef G_OS_WIN32
++ WSACleanup();
++#endif
++
++ return 0;
++}
+diff --git a/tests/test-drop-invalid.c b/tests/test-drop-invalid.c
+new file mode 100644
+index 0000000..97e3586
+--- /dev/null
++++ b/tests/test-drop-invalid.c
+@@ -0,0 +1,517 @@
++/*
++ * This file is part of the Nice GLib ICE library.
++ *
++ * Unit test for ICE full-mode related features.
++ *
++ * (C) 2007 Nokia Corporation. All rights reserved.
++ * Contact: Kai Vehmanen
++ * (C) 2017 Collabora Ltd
++ * Contact: Olivier Crete <olivier.crete(a)collabora.com>
++ *
++ * The contents of this file are subject to the Mozilla Public License Version
++ * 1.1 (the "License"); you may not use this file except in compliance with
++ * the License. You may obtain a copy of the License at
++ * http://www.mozilla.org/MPL/
++ *
++ * Software distributed under the License is distributed on an "AS IS" basis,
++ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
++ * for the specific language governing rights and limitations under the
++ * License.
++ *
++ * The Original Code is the Nice GLib ICE library.
++ *
++ * The Initial Developers of the Original Code are Collabora Ltd and Nokia
++ * Corporation. All Rights Reserved.
++ *
++ * Contributors:
++ * Kai Vehmanen, Nokia
++ *
++ * Alternatively, the contents of this file may be used under the terms of the
++ * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
++ * case the provisions of LGPL are applicable instead of those above. If you
++ * wish to allow use of your version of this file only under the terms of the
++ * LGPL and not to allow others to use your version of this file under the
++ * MPL, indicate your decision by deleting the provisions above and replace
++ * them with the notice and other provisions required by the LGPL. If you do
++ * not delete the provisions above, a recipient may use your version of this
++ * file under either the MPL or the LGPL.
++ */
++#ifdef HAVE_CONFIG_H
++# include <config.h>
++#endif
++
++#include "agent.h"
++
++#include "socket/socket.h"
++
++#include <stdlib.h>
++#include <string.h>
++
++
++
++static NiceComponentState global_lagent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static NiceComponentState global_ragent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static guint global_components_ready = 0;
++static guint global_components_ready_exit = 0;
++static guint global_components_failed = 0;
++static guint global_components_failed_exit = 0;
++static GMainLoop *global_mainloop = NULL;
++static gboolean global_lagent_gathering_done = FALSE;
++static gboolean global_ragent_gathering_done = FALSE;
++static gboolean global_lagent_ibr_received = FALSE;
++static gboolean global_ragent_ibr_received = FALSE;
++static int global_lagent_cands = 0;
++static int global_ragent_cands = 0;
++static gint global_ragent_read = 0;
++static guint global_exit_when_ibr_received = 0;
++
++static void priv_print_global_status (void)
++{
++ g_debug ("\tgathering_done=%d", global_lagent_gathering_done && global_ragent_gathering_done);
++ g_debug ("\tlstate[rtp]=%d [rtcp]=%d", global_lagent_state[0], global_lagent_state[1]);
++ g_debug ("\trstate[rtp]=%d [rtcp]=%d", global_ragent_state[0], global_ragent_state[1]);
++ g_debug ("\tL cands=%d R cands=%d", global_lagent_cands, global_ragent_cands);
++}
++
++static gboolean timer_cb (gpointer pointer)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, pointer);
++
++ /* signal status via a global variable */
++
++ /* note: should not be reached, abort */
++ g_error ("ERROR: test has got stuck, aborting...");
++
++ return FALSE;
++}
++
++static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, user_data);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)component_id; (void)buf;
++
++ /* Core of the test
++ * Assert on any unreleated packet received. This would include anything
++ * send before the negotiation is over.
++ */
++ g_assert (len == 16);
++ g_assert (strncmp ("1234567812345678", buf, 16) == 0);
++
++ if (component_id == 2)
++ return;
++
++ if (GPOINTER_TO_UINT (user_data) == 2) {
++ g_debug ("right agent received %d bytes, stopping mainloop", len);
++ global_ragent_read = len;
++ g_main_loop_quit (global_mainloop);
++ }
++}
++
++static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ global_lagent_gathering_done = TRUE;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ global_ragent_gathering_done = TRUE;
++
++ if (global_lagent_gathering_done &&
++ global_ragent_gathering_done)
++ g_main_loop_quit (global_mainloop);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent;
++}
++
++static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
++{
++ gboolean ready_to_connected = FALSE;
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1) {
++ if (global_lagent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_lagent_state[component_id - 1] = state;
++ } else if (GPOINTER_TO_UINT (data) == 2) {
++ if (global_ragent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_ragent_state[component_id - 1] = state;
++ }
++
++ if (state == NICE_COMPONENT_STATE_READY)
++ global_components_ready++;
++ else if (state == NICE_COMPONENT_STATE_CONNECTED && ready_to_connected)
++ global_components_ready--;
++ if (state == NICE_COMPONENT_STATE_FAILED)
++ global_components_failed++;
++
++ g_debug ("test-drop-invalid: checks READY/EXIT-AT %u/%u.", global_components_ready, global_components_ready_exit);
++ g_debug ("test-drop-invalid: checks FAILED/EXIT-AT %u/%u.", global_components_failed, global_components_failed_exit);
++
++ /* signal status via a global variable */
++ if (global_components_ready == global_components_ready_exit &&
++ global_components_failed == global_components_failed_exit) {
++ g_debug ("Components ready/failed achieved. Stopping mailoop");
++ g_main_loop_quit (global_mainloop);
++ return;
++ }
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)data; (void)component_id;
++}
++
++static void cb_new_selected_pair(NiceAgent *agent, guint stream_id, guint component_id,
++ gchar *lfoundation, gchar* rfoundation, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ ++global_lagent_cands;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ ++global_ragent_cands;
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)component_id; (void)lfoundation; (void)rfoundation;
++}
++
++static void cb_new_candidate(NiceAgent *agent, guint stream_id, guint component_id,
++ gchar *foundation, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)data; (void)component_id; (void)foundation;
++}
++
++static void cb_initial_binding_request_received(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("test-drop-invalid:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ global_lagent_ibr_received = TRUE;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ global_ragent_ibr_received = TRUE;
++
++ if (global_exit_when_ibr_received) {
++ g_debug ("Received initial binding request. Stopping mailoop");
++ g_main_loop_quit (global_mainloop);
++ }
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)data;
++}
++
++static void set_candidates (NiceAgent *from, guint from_stream,
++ NiceAgent *to, guint to_stream, guint component)
++{
++ GSList *cands = NULL;
++ GSList *peer_cands = NULL;
++ GSList *item1, *item2;
++
++ cands = nice_agent_get_local_candidates (from, from_stream, component);
++ peer_cands = nice_agent_get_local_candidates (to, to_stream, component);
++
++ /*
++ * Core of the test:
++ *
++ * Send packets that shoudl be dropped.
++ */
++
++ for (item1 = cands; item1; item1 = item1->next) {
++ NiceCandidate *cand = item1->data;
++ NiceSocket *nicesock = cand->sockptr;
++
++ g_assert (nicesock);
++
++ for (item2 = peer_cands; item2; item2 = item2->next) {
++ NiceCandidate *target_cand = item2->data;
++
++ nice_socket_send (nicesock, &target_cand->addr, 12, "123456789AB");
++ }
++
++ }
++
++ nice_agent_set_remote_candidates (to, to_stream, component, cands);
++
++ g_slist_free_full (cands, (GDestroyNotify) nice_candidate_free);
++ g_slist_free_full (peer_cands, (GDestroyNotify) nice_candidate_free);
++}
++
++static void set_credentials (NiceAgent *lagent, guint lstream,
++ NiceAgent *ragent, guint rstream)
++{
++ gchar *ufrag = NULL, *password = NULL;
++
++ nice_agent_get_local_credentials(lagent, lstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (ragent, rstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++ nice_agent_get_local_credentials(ragent, rstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (lagent, lstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++}
++
++static int run_full_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *baseaddr, guint ready, guint failed)
++{
++ guint ls_id, rs_id;
++ gint ret;
++
++ /* XXX: dear compiler, this is for you */
++ (void)baseaddr;
++
++ /* step: initialize variables modified by the callbacks */
++ global_components_ready = 0;
++ global_components_ready_exit = ready;
++ global_components_failed = 0;
++ global_components_failed_exit = failed;
++ global_lagent_gathering_done = FALSE;
++ global_ragent_gathering_done = FALSE;
++ global_lagent_ibr_received =
++ global_ragent_ibr_received = FALSE;
++ global_lagent_cands =
++ global_ragent_cands = 0;
++
++ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
++ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
++
++ /* step: add one stream, with RTP+RTCP components, to each agent */
++ ls_id = nice_agent_add_stream (lagent, 2);
++
++ rs_id = nice_agent_add_stream (ragent, 2);
++ g_assert (ls_id > 0);
++ g_assert (rs_id > 0);
++
++ /* Gather candidates and test nice_agent_set_port_range */
++ nice_agent_set_port_range (lagent, ls_id, 1, 10000, 10000);
++ nice_agent_set_port_range (lagent, ls_id, 2, 10001, 10001);
++ nice_agent_set_port_range (ragent, rs_id, 1, 12345, 12345);
++ nice_agent_set_port_range (ragent, rs_id, 2, 10000, 10001);
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id) == FALSE);
++ g_assert (nice_agent_get_local_candidates (ragent, rs_id, 1) == NULL);
++ g_assert (nice_agent_get_local_candidates (ragent, rs_id, 2) == NULL);
++ nice_agent_set_port_range (ragent, rs_id, 2, 10000, 10002);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id) == TRUE);
++
++ {
++ GSList *cands = NULL, *i;
++ NiceCandidate *cand = NULL;
++
++ cands = nice_agent_get_local_candidates (lagent, ls_id, 1);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 10000);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ cands = nice_agent_get_local_candidates (lagent, ls_id, 2);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 10001);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ cands = nice_agent_get_local_candidates (ragent, rs_id, 1);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 12345);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ cands = nice_agent_get_local_candidates (ragent, rs_id, 2);
++ g_assert (g_slist_length (cands) == 1);
++ cand = cands->data;
++ g_assert (cand->type == NICE_CANDIDATE_TYPE_HOST);
++ g_assert (nice_address_get_port (&cand->addr) == 10002);
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++
++ }
++
++ /* step: attach to mainloop (needed to register the fds) */
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (1));
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (1));
++ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (2));
++ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP,
++ g_main_loop_get_context (global_mainloop), cb_nice_recv,
++ GUINT_TO_POINTER (2));
++
++ /* step: run mainloop until local candidates are ready
++ * (see timer_cb() above) */
++ if (global_lagent_gathering_done != TRUE ||
++ global_ragent_gathering_done != TRUE) {
++ g_debug ("test-drop-invalid: Added streams, running mainloop until 'candidate-gathering-done'...");
++ g_main_loop_run (global_mainloop);
++ g_assert (global_lagent_gathering_done == TRUE);
++ g_assert (global_ragent_gathering_done == TRUE);
++ }
++
++ set_credentials (lagent, ls_id, ragent, rs_id);
++
++ /* step: pass the remote candidates to agents */
++ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTCP);
++ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTCP);
++
++ g_debug ("test-drop-invalid: Set properties, next running mainloop until connectivity checks succeed...");
++
++ /* step: run the mainloop until connectivity checks succeed
++ * (see timer_cb() above) */
++ g_main_loop_run (global_mainloop);
++
++ /* note: verify that STUN binding requests were sent */
++ g_assert (global_lagent_ibr_received == TRUE);
++ g_assert (global_ragent_ibr_received == TRUE);
++
++ /* note: Send a packet from another address */
++ /* These should also be ignored */
++ {
++ NiceCandidate *local_cand = NULL;
++ NiceCandidate *remote_cand = NULL;
++ NiceSocket *tmpsock;
++
++ g_assert (nice_agent_get_selected_pair (lagent, ls_id, 1, &local_cand,
++ &remote_cand));
++ g_assert (local_cand);
++ g_assert (remote_cand);
++
++ tmpsock = nice_udp_bsd_socket_new (NULL);
++ nice_socket_send (tmpsock, &remote_cand->addr, 4, "ABCD");
++ nice_socket_send (tmpsock, &local_cand->addr, 5, "ABCDE");
++ nice_socket_free (tmpsock);
++ }
++
++ /* note: test payload send and receive */
++ global_ragent_read = 0;
++ ret = nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678");
++ g_assert (ret != -1);
++ g_debug ("Sent %d bytes", ret);
++ g_assert (ret == 16);
++ while (global_ragent_read != 16)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_ragent_read == 16);
++
++ g_debug ("test-drop-invalid: Ran mainloop, removing streams...");
++
++ /* step: clean up resources and exit */
++
++ nice_agent_remove_stream (lagent, ls_id);
++ nice_agent_remove_stream (ragent, rs_id);
++
++ return 0;
++}
++
++int main (void)
++{
++ NiceAgent *lagent, *ragent; /* agent's L and R */
++ NiceAddress baseaddr;
++ int result;
++ guint timer_id;
++
++#ifdef G_OS_WIN32
++ WSADATA w;
++
++ WSAStartup(0x0202, &w);
++#endif
++
++ global_mainloop = g_main_loop_new (NULL, FALSE);
++
++ /* step: create the agents L and R */
++ lagent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_RFC5245);
++ ragent = nice_agent_new (g_main_loop_get_context (global_mainloop),
++ NICE_COMPATIBILITY_RFC5245);
++
++ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
++
++
++ nice_agent_set_software (lagent, "test-drop-invalid, Left Agent");
++ nice_agent_set_software (ragent, "test-drop-invalid, Right Agent");
++
++ /* step: add a timer to catch state changes triggered by signals */
++ timer_id = g_timeout_add (30000, timer_cb, NULL);
++
++ /* step: specify which local interface to use */
++ if (!nice_address_set_from_string (&baseaddr, "127.0.0.1"))
++ g_assert_not_reached ();
++ nice_agent_add_local_address (lagent, &baseaddr);
++ nice_agent_add_local_address (ragent, &baseaddr);
++
++ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "new-candidate",
++ G_CALLBACK (cb_new_candidate), GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "new-candidate",
++ G_CALLBACK (cb_new_candidate), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "initial-binding-request-received",
++ G_CALLBACK (cb_initial_binding_request_received),
++ GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "initial-binding-request-received",
++ G_CALLBACK (cb_initial_binding_request_received),
++ GUINT_TO_POINTER (2));
++
++ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
++
++
++ /* step: run test the first time */
++ g_debug ("test-drop-invalid: TEST STARTS / running test for the 1st time");
++ result = run_full_test (lagent, ragent, &baseaddr, 4 ,0);
++ priv_print_global_status ();
++ g_assert (result == 0);
++ g_assert (global_lagent_state[0] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_lagent_state[1] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_ragent_state[0] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_ragent_state[1] == NICE_COMPONENT_STATE_READY);
++ /* When using TURN, we get peer reflexive candidates for the host cands
++ that we removed so we can get another new_selected_pair signal later
++ depending on timing/racing, we could double (or not) the amount we expected
++ */
++
++ /* note: verify that correct number of local candidates were reported */
++ g_assert (global_lagent_cands == 2);
++ g_assert (global_ragent_cands == 2);
++
++ g_object_unref (lagent);
++ g_object_unref (ragent);
++
++ g_main_loop_unref (global_mainloop);
++ global_mainloop = NULL;
++
++ g_source_remove (timer_id);
++#ifdef G_OS_WIN32
++ WSACleanup();
++#endif
++ return result;
++}
+diff --git a/tests/test-gstreamer.c b/tests/test-gstreamer.c
+index 74d7133..f060efc 100644
+--- a/tests/test-gstreamer.c
++++ b/tests/test-gstreamer.c
+@@ -1,7 +1,7 @@
+ /*
+ * This file is part of the Nice GLib ICE library.
+ *
+- * (C) 1015 Kurento.
++ * (C) 2015 Kurento.
+ * Contact: Jose Antonio Santos Cadenas
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+@@ -34,7 +34,7 @@
+ */
+
+ #include <gst/check/gstcheck.h>
+-#include <nice/agent.h>
++#include "agent.h"
+
+ #define RTP_HEADER_SIZE 12
+ #define RTP_PAYLOAD_SIZE 1024
+diff --git a/tests/test-mainloop.c b/tests/test-mainloop.c
+deleted file mode 100644
+index 7c52daa..0000000
+--- a/tests/test-mainloop.c
++++ /dev/null
+@@ -1,108 +0,0 @@
+-/*
+- * This file is part of the Nice GLib ICE library.
+- *
+- * (C) 2006, 2007 Collabora Ltd.
+- * Contact: Dafydd Harries
+- * (C) 2006, 2007 Nokia Corporation. All rights reserved.
+- * Contact: Kai Vehmanen
+- *
+- * The contents of this file are subject to the Mozilla Public License Version
+- * 1.1 (the "License"); you may not use this file except in compliance with
+- * the License. You may obtain a copy of the License at
+- * http://www.mozilla.org/MPL/
+- *
+- * Software distributed under the License is distributed on an "AS IS" basis,
+- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+- * for the specific language governing rights and limitations under the
+- * License.
+- *
+- * The Original Code is the Nice GLib ICE library.
+- *
+- * The Initial Developers of the Original Code are Collabora Ltd and Nokia
+- * Corporation. All Rights Reserved.
+- *
+- * Contributors:
+- * Dafydd Harries, Collabora Ltd.
+- * Kai Vehmanen, Nokia
+- *
+- * Alternatively, the contents of this file may be used under the terms of the
+- * the GNU Lesser General Public License Version 2.1 (the "LGPL"), in which
+- * case the provisions of LGPL are applicable instead of those above. If you
+- * wish to allow use of your version of this file only under the terms of the
+- * LGPL and not to allow others to use your version of this file under the
+- * MPL, indicate your decision by deleting the provisions above and replace
+- * them with the notice and other provisions required by the LGPL. If you do
+- * not delete the provisions above, a recipient may use your version of this
+- * file under either the MPL or the LGPL.
+- */
+-#ifdef HAVE_CONFIG_H
+-# include <config.h>
+-#endif
+-
+-#include <string.h>
+-
+-#include <nice/nice.h>
+-#include "socket/socket.h"
+-
+-static GMainLoop *loop = NULL;
+-
+-static void
+-recv_cb (
+- NiceAgent *agent,
+- guint stream_id,
+- guint component_id,
+- guint len,
+- gchar *buf,
+- gpointer data)
+-{
+- g_assert (agent != NULL);
+- g_assert (stream_id == 1);
+- g_assert (component_id == 1);
+- g_assert (len == 6);
+- g_assert (0 == strncmp (buf, "\x80hello", len));
+- g_assert (42 == GPOINTER_TO_UINT (data));
+- g_main_loop_quit (loop);
+-}
+-
+-int
+-main (void)
+-{
+- NiceAgent *agent;
+- NiceAddress addr;
+- guint stream;
+-
+- nice_address_init (&addr);
+-
+- loop = g_main_loop_new (NULL, FALSE);
+-
+- agent = nice_agent_new (g_main_loop_get_context (loop), NICE_COMPATIBILITY_RFC5245);
+- nice_address_set_ipv4 (&addr, 0x7f000001);
+- nice_agent_add_local_address (agent, &addr);
+- stream = nice_agent_add_stream (agent, 1);
+- nice_agent_gather_candidates (agent, stream);
+-
+- // attach to default main context
+- nice_agent_attach_recv (agent, stream, NICE_COMPONENT_TYPE_RTP,
+- g_main_loop_get_context (loop), recv_cb, GUINT_TO_POINTER (42));
+-
+- {
+- NiceCandidate *candidate;
+- GSList *candidates, *i;
+-
+- candidates = nice_agent_get_local_candidates (agent, 1, 1);
+- candidate = candidates->data;
+-
+- nice_socket_send (candidate->sockptr, &(candidate->addr), 6, "\x80hello");
+- for (i = candidates; i; i = i->next)
+- nice_candidate_free ((NiceCandidate *) i->data);
+- g_slist_free (candidates);
+- }
+-
+- g_main_loop_run (loop);
+-
+- nice_agent_remove_stream (agent, stream);
+- g_object_unref (agent);
+-
+- return 0;
+-}
+-
+diff --git a/tests/test-nomination.c b/tests/test-nomination.c
+new file mode 100644
+index 0000000..bf21557
+--- /dev/null
++++ b/tests/test-nomination.c
+@@ -0,0 +1,263 @@
++#include <stdlib.h>
++#include <stdio.h>
++#include <string.h>
++
++#include <gio/gio.h>
++#include <agent.h>
++
++static NiceComponentState global_lagent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static NiceComponentState global_ragent_state[2] = { NICE_COMPONENT_STATE_LAST, NICE_COMPONENT_STATE_LAST };
++static guint global_components_ready = 0;
++static gboolean global_lagent_gathering_done = FALSE;
++static gboolean global_ragent_gathering_done = FALSE;
++static int global_lagent_cands = 0;
++static int global_ragent_cands = 0;
++
++static gboolean timer_cb (gpointer pointer)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, pointer);
++
++ /* signal status via a global variable */
++
++ /* note: should not be reached, abort */
++ g_error ("ERROR: test has got stuck, aborting...");
++
++ return FALSE;
++}
++
++static void cb_nice_recv (NiceAgent *agent, guint stream_id, guint component_id, guint len, gchar *buf, gpointer user_data)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, user_data);
++
++ /* XXX: dear compiler, these are for you: */
++ (void)agent; (void)stream_id; (void)component_id; (void)buf;
++
++ /*
++ * Lets ignore stun packets that got through
++ */
++ if (len < 8)
++ return;
++ if (strncmp ("12345678", buf, 8))
++ return;
++
++ if (component_id != 1)
++ return;
++}
++
++static void cb_candidate_gathering_done(NiceAgent *agent, guint stream_id, gpointer data)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ global_lagent_gathering_done = TRUE;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ global_ragent_gathering_done = TRUE;
++}
++
++
++static void cb_component_state_changed (NiceAgent *agent, guint stream_id, guint component_id, guint state, gpointer data)
++{
++ gboolean ready_to_connected = FALSE;
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1) {
++ if (global_lagent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_lagent_state[component_id - 1] = state;
++ } else if (GPOINTER_TO_UINT (data) == 2) {
++ if (global_ragent_state[component_id - 1] == NICE_COMPONENT_STATE_READY &&
++ state == NICE_COMPONENT_STATE_CONNECTED)
++ ready_to_connected = TRUE;
++ global_ragent_state[component_id - 1] = state;
++ }
++
++ if (state == NICE_COMPONENT_STATE_READY)
++ global_components_ready++;
++ else if (state == NICE_COMPONENT_STATE_CONNECTED && ready_to_connected)
++ global_components_ready--;
++ g_assert (state != NICE_COMPONENT_STATE_FAILED);
++
++ g_debug ("test-nomination: checks READY %u.", global_components_ready);
++}
++
++static void cb_new_selected_pair(NiceAgent *agent, guint stream_id,
++ guint component_id, gchar *lfoundation, gchar* rfoundation, gpointer data)
++{
++ g_debug ("test-nomination:%s: %p", G_STRFUNC, data);
++
++ if (GPOINTER_TO_UINT (data) == 1)
++ ++global_lagent_cands;
++ else if (GPOINTER_TO_UINT (data) == 2)
++ ++global_ragent_cands;
++}
++
++static void set_candidates (NiceAgent *from, guint from_stream,
++ NiceAgent *to, guint to_stream, guint component)
++{
++ GSList *cands = NULL, *i;
++
++ cands = nice_agent_get_local_candidates (from, from_stream, component);
++ nice_agent_set_remote_candidates (to, to_stream, component, cands);
++
++ for (i = cands; i; i = i->next)
++ nice_candidate_free ((NiceCandidate *) i->data);
++ g_slist_free (cands);
++}
++
++static void set_credentials (NiceAgent *lagent, guint lstream,
++ NiceAgent *ragent, guint rstream)
++{
++ gchar *ufrag = NULL, *password = NULL;
++
++ nice_agent_get_local_credentials(lagent, lstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (ragent, rstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++ nice_agent_get_local_credentials(ragent, rstream, &ufrag, &password);
++ nice_agent_set_remote_credentials (lagent, lstream, ufrag, password);
++ g_free (ufrag);
++ g_free (password);
++}
++
++static void
++run_test(NiceNominationMode l_nomination_mode,
++ NiceNominationMode r_nomination_mode)
++{
++ NiceAgent *lagent, *ragent; /* agent's L and R */
++ const gchar *localhost;
++ NiceAddress localaddr;
++ guint ls_id, rs_id;
++ gulong timer_id;
++
++ localhost = "127.0.0.1";
++
++ /* step: initialize variables modified by the callbacks */
++ global_components_ready = 0;
++ global_lagent_gathering_done = FALSE;
++ global_ragent_gathering_done = FALSE;
++ global_lagent_cands = global_ragent_cands = 0;
++
++ lagent = nice_agent_new_full (NULL,
++ NICE_COMPATIBILITY_RFC5245,
++ l_nomination_mode == NICE_NOMINATION_MODE_REGULAR ?
++ NICE_AGENT_OPTION_REGULAR_NOMINATION : 0);
++
++ ragent = nice_agent_new_full (NULL,
++ NICE_COMPATIBILITY_RFC5245,
++ r_nomination_mode == NICE_NOMINATION_MODE_REGULAR ?
++ NICE_AGENT_OPTION_REGULAR_NOMINATION : 0);
++
++ g_object_set (G_OBJECT (lagent), "ice-tcp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "ice-tcp", FALSE, NULL);
++
++ g_object_set (G_OBJECT (lagent), "upnp", FALSE, NULL);
++ g_object_set (G_OBJECT (ragent), "upnp", FALSE, NULL);
++ nice_agent_set_software (lagent, "Test-nomination, Left Agent");
++ nice_agent_set_software (ragent, "Test-nomination, Right Agent");
++
++ timer_id = g_timeout_add (30000, timer_cb, NULL);
++
++ if (!nice_address_set_from_string (&localaddr, localhost))
++ g_assert_not_reached ();
++ nice_agent_add_local_address (lagent, &localaddr);
++ nice_agent_add_local_address (ragent, &localaddr);
++
++ g_signal_connect (G_OBJECT (lagent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "candidate-gathering-done",
++ G_CALLBACK (cb_candidate_gathering_done), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (1));
++ g_signal_connect (G_OBJECT (ragent), "component-state-changed",
++ G_CALLBACK (cb_component_state_changed), GUINT_TO_POINTER (2));
++ g_signal_connect (G_OBJECT (lagent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER(1));
++ g_signal_connect (G_OBJECT (ragent), "new-selected-pair",
++ G_CALLBACK (cb_new_selected_pair), GUINT_TO_POINTER (2));
++
++ g_object_set (G_OBJECT (lagent), "controlling-mode", TRUE, NULL);
++ g_object_set (G_OBJECT (ragent), "controlling-mode", FALSE, NULL);
++
++ ls_id = nice_agent_add_stream (lagent, 1);
++ rs_id = nice_agent_add_stream (ragent, 1);
++ g_assert (ls_id > 0);
++ g_assert (rs_id > 0);
++
++ /* Gather candidates and test nice_agent_set_port_range */
++ g_assert (nice_agent_gather_candidates (lagent, ls_id) == TRUE);
++ g_assert (nice_agent_gather_candidates (ragent, rs_id) == TRUE);
++
++ nice_agent_attach_recv (lagent, ls_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_context_default (), cb_nice_recv, GUINT_TO_POINTER (1));
++ nice_agent_attach_recv (ragent, rs_id, NICE_COMPONENT_TYPE_RTP,
++ g_main_context_default (), cb_nice_recv, GUINT_TO_POINTER (2));
++
++ g_debug ("test-nomination: Added streams, running context until 'candidate-gathering-done'...");
++ while (!global_lagent_gathering_done)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_lagent_gathering_done == TRUE);
++ while (!global_ragent_gathering_done)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_ragent_gathering_done == TRUE);
++
++ set_credentials (lagent, ls_id, ragent, rs_id);
++
++ set_candidates (ragent, rs_id, lagent, ls_id, NICE_COMPONENT_TYPE_RTP);
++ set_candidates (lagent, ls_id, ragent, rs_id, NICE_COMPONENT_TYPE_RTP);
++
++ while (global_lagent_state[0] != NICE_COMPONENT_STATE_READY ||
++ global_ragent_state[0] != NICE_COMPONENT_STATE_READY)
++ g_main_context_iteration (NULL, TRUE);
++ g_assert (global_lagent_state[0] == NICE_COMPONENT_STATE_READY);
++ g_assert (global_ragent_state[0] == NICE_COMPONENT_STATE_READY);
++
++ nice_agent_remove_stream (lagent, ls_id);
++ nice_agent_remove_stream (ragent, rs_id);
++
++ g_source_remove (timer_id);
++
++ g_clear_object(&lagent);
++ g_clear_object(&ragent);
++}
++
++static void
++regular (void)
++{
++ run_test(NICE_NOMINATION_MODE_REGULAR, NICE_NOMINATION_MODE_REGULAR);
++}
++
++static void
++aggressive (void)
++{
++ run_test(NICE_NOMINATION_MODE_AGGRESSIVE, NICE_NOMINATION_MODE_AGGRESSIVE);
++}
++
++static void
++mixed_ra (void)
++{
++ run_test(NICE_NOMINATION_MODE_REGULAR, NICE_NOMINATION_MODE_AGGRESSIVE);
++}
++
++static void
++mixed_ar (void)
++{
++ run_test(NICE_NOMINATION_MODE_AGGRESSIVE, NICE_NOMINATION_MODE_REGULAR);
++}
++
++int
++main (int argc, char **argv)
++{
++ int ret;
++
++ g_test_init (&argc, &argv, NULL);
++
++ g_test_add_func ("/nice/nomination/regular", regular);
++ g_test_add_func ("/nice/nomination/aggressive", aggressive);
++ g_test_add_func ("/nice/nomination/mixed_ra", mixed_ra);
++ g_test_add_func ("/nice/nomination/mixed_ar", mixed_ar);
++
++ ret = g_test_run ();
++
++ return ret;
++}
+diff --git a/tests/test-restart.c b/tests/test-restart.c
+index c2cbe9a..afc51b6 100644
+--- a/tests/test-restart.c
++++ b/tests/test-restart.c
+@@ -301,6 +301,11 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
+ nice_agent_set_remote_candidates (lagent, ls_id, NICE_COMPONENT_TYPE_RTCP, cands);
+ cdes.addr = laddr_rtcp;
+ nice_agent_set_remote_candidates (ragent, rs_id, NICE_COMPONENT_TYPE_RTCP, cands);
++ /* This role switch request will be effective after restart. We test
++ * here that the role cannot be externally modified after conncheck
++ * has started. */
++ g_object_set (G_OBJECT (ragent), "controlling-mode", TRUE, NULL);
++ g_assert (ragent->controlling_mode == FALSE);
+
+ g_debug ("test-restart: Set properties, next running mainloop until connectivity checks succeed...");
+
+@@ -329,10 +334,18 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
+ global_ragent_read = 0;
+ g_assert (nice_agent_send (lagent, ls_id, 1, 16, "1234567812345678") == 16);
+
++ /* Both agent have a distinct role at the end of the conncheck */
++ g_assert (lagent->controlling_mode == TRUE);
++ g_assert (ragent->controlling_mode == FALSE);
+ /* step: restart agents, exchange updated credentials */
+ tie_breaker = ragent->tie_breaker;
+ nice_agent_restart (ragent);
+ g_assert (tie_breaker != ragent->tie_breaker);
++ /* This role switch of ragent should be done now, and both agents
++ * have now the same role, which should generate a role conflict
++ * resolution situation */
++ g_assert (lagent->controlling_mode == TRUE);
++ g_assert (ragent->controlling_mode == TRUE);
+ nice_agent_restart (lagent);
+ {
+ gchar *ufrag = NULL, *password = NULL;
+@@ -375,6 +388,8 @@ static int run_restart_test (NiceAgent *lagent, NiceAgent *ragent, NiceAddress *
+ /* note: verify binding requests were resent after restart */
+ g_assert (global_lagent_ibr_received == TRUE);
+ g_assert (global_ragent_ibr_received == TRUE);
++ /* note: verify that a role switch occured for one of the agents */
++ g_assert (ragent->controlling_mode != lagent->controlling_mode);
+
+ g_debug ("test-restart: Ran mainloop, removing streams...");
+
diff --git a/libnice.spec b/libnice.spec
index 7c8ffb1..e5944fc 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -3,14 +3,17 @@
Name: libnice
Version: 0.1.14
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: GLib ICE implementation
Group: System Environment/Libraries
License: LGPLv2 and MPLv1.1
URL: https://nice.freedesktop.org/wiki/
Source0: https://nice.freedesktop.org/releases/%{name}-%{version}.tar.gz
+Patch1: libnice-0.1.14-20171128.patch
+BuildRequires: autoconf
+BuildRequires: automake
BuildRequires: glib2-devel
BuildRequires: gnutls-devel >= 2.12.0
BuildRequires: gobject-introspection-devel
@@ -52,15 +55,6 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
The %{name}-gstreamer1 package contains a gstreamer 1.0 plugin for %{name}.
-%package examples
-Summary: Simple %{name} usage examples
-Group: Development/Libraries
-Requires: %{name}%{?_isa} = %{version}-%{release}
-
-%description examples
-The %{name}-examples package contains usage (simple, threaded and sdp) examples.
-
-
%package devel
Summary: Development files for %{name}
Group: Development/Libraries
@@ -75,12 +69,14 @@ developing applications that use %{name}.
%prep
%setup -q
+%patch1 -p1
%check
#make check
%build
+autoreconf -f -i
%configure --disable-static
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
@@ -117,12 +113,6 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%{_libdir}/gstreamer-1.0/libgstnice.so
-%files examples
-%{_bindir}/sdp-example
-%{_bindir}/simple-example
-%{_bindir}/threaded-example
-
-
%files devel
%{_includedir}/*
%{_libdir}/*.so
@@ -132,6 +122,11 @@ find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
%changelog
+* Fri Feb 09 2018 Stefan Becker <chemobejk(a)gmail.com> - 0.1.14-3
+- update to 0.1.14-70-gfb2f1f7 with alternate server fixes for SIPE
+- add autoreconf build step
+- remove examples subpackage as examples are no longer installed
+
* Wed Feb 07 2018 Fedora Release Engineering <releng(a)fedoraproject.org> - 0.1.14-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
commit b17a790f177dfb96d128af068bb7b391da8162df
Author: Kamil Dudka <kdudka(a)redhat.com>
Date: Fri Feb 9 16:47:14 2018 +0100
minor tweak of the description
... to make vim's syntax highlighting work properly on libnice.spec
diff --git a/libnice.spec b/libnice.spec
index 74f0bee..7c8ffb1 100644
--- a/libnice.spec
+++ b/libnice.spec
@@ -24,7 +24,7 @@ BuildRequires: gupnp-igd-devel >= 0.1.2
%description
-%{name} is an implementation of the IETF's draft Interactive Connectivity
+%{name} is an implementation of the IETF draft Interactive Connectivity
Establishment standard (ICE). ICE is useful for applications that want to
establish peer-to-peer UDP data streams. It automates the process of traversing
NATs and provides security against some attacks. Existing standards that use
6 years, 2 months
Architecture specific change in rpms/wine.git
by githook-noreply@fedoraproject.org
The package rpms/wine.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/wine.git/commit/?id=26cfee826b9c0....
Change:
+%ifarch %{arm}
Thanks.
Full change:
============
commit 26cfee826b9c07438515452bbb4aecbb5a2c0255
Author: Michael Cronenworth <mike(a)cchtml.com>
Date: Fri Feb 9 16:21:21 2018 -0600
Wine's ARM float check fails on Fedora
diff --git a/wine.spec b/wine.spec
index 13e42c9..ff6e50c 100644
--- a/wine.spec
+++ b/wine.spec
@@ -694,6 +694,9 @@ export CFLAGS="`echo $TEMP_CFLAGS | sed -e 's/-Wp,-D_FORTIFY_SOURCE=2//'` -Wno-e
--x-includes=%{_includedir} --x-libraries=%{_libdir} \
--without-hal --with-dbus \
--with-x \
+%ifarch %{arm}
+ --with-float-abi=hard \
+%endif
%ifarch x86_64 aarch64
--enable-win64 \
%endif
6 years, 2 months
Architecture specific change in rpms/subversion.git
by githook-noreply@fedoraproject.org
The package rpms/subversion.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/subversion.git/commit/?id=f71da83....
Change:
+%ifarch %{power64} s390x
Thanks.
Full change:
============
commit f71da832908af543d40247d5e6d945e17c00b80c
Author: Joe Orton <jorton(a)redhat.com>
Date: Fri Feb 9 13:21:12 2018 +0000
force use of Python2 in test suite
diff --git a/subversion.spec b/subversion.spec
index 976ecd2..51b333e 100644
--- a/subversion.spec
+++ b/subversion.spec
@@ -1,6 +1,6 @@
# set to zero to avoid running test suite
-%ifarch %{power64}
+%ifarch %{power64} s390x
%global with_java 0
%global make_check 0
%else
6 years, 2 months
[Report] Packages Restricting Arches
by root
New package excluding arches (2)
============================
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
List of packages currently excluding arches (2686)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- GtkAda
ExclusiveArch: %{GPRbuild_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- LuxRender
ExclusiveArch: x86_64
- OpenTK
ExclusiveArch: %mono_arches
- PragmARC
ExclusiveArch: %{GPRbuild_arches}
- R-DynDoc
ExclusiveArch: armv7, ppc, go_arch
- RdRand
ExclusiveArch: %{ix86} x86_64
- SLOF
ExclusiveArch: ppc64le
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aboot
ExclusiveArch: alpha
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GPRbuild_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64
- anet
ExclusiveArch: %{GPRbuild_arches}
- apmd
ExclusiveArch: %{ix86}
- apmud
ExclusiveArch: ppc
- appstream-generator
ExclusiveArch: x86_64 %{ix86} %{arm}
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-boot-config
ExclusiveArch: %{arm}
- arm-trusted-firmware
ExclusiveArch: aarch64
- atomic
ExclusiveArch: i386 i486 i586 i686 pentium3 pentium4 athlon geode x86_64 armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv6hl armv7l armv7hl armv7hnl aarch64 ppc64le s390x mips mipsel mipsr6 mipsr6el mips64 mips64el mips64r6 mips64r6el
ExclusiveArch: x86_64 ppc64le
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- banshee
ExclusiveArch: %{mono_arches}
- banshee-community-extensions
ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 %{arm} sparcv9 alpha s390x
- bareftp
ExclusiveArch: %{mono_arches}
- bcc
ExclusiveArch: x86_64 %{power64}
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- beignet
ExclusiveArch: x86_64 %{ix86}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64 ia64
- bless
ExclusiveArch: %mono_arches
- boo
ExclusiveArch: %{mono_arches}
- buildah
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- bwa
ExclusiveArch: x86_64
- caddy
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- cadvisor
ExclusiveArch: %{ix86} x86_64 aarch64 ppc64le
- calamares
ExclusiveArch: %{ix86} x86_64
- cargo
ExclusiveArch: %{rust_arches}
- carto
ExclusiveArch: %{nodejs_arches} noarch
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- ceph
ExclusiveArch: x86_64 aarch64 ppc64 ppc64le
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 i686 aarch64
- cjdns
ExclusiveArch: %{nodejs_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- cmrt
ExclusiveArch: %{ix86} x86_64 ia64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- compat-gcc-296
ExclusiveArch: %{ix86} ia64 ppc
- consul
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- containerd
ExclusiveArch: %{go_arches}
- corosync
ExclusiveArch: i686 x86_64
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- cri-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- deepin-api
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- deepin-daemon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-dbus-generator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- deepin-gir-generator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- derelict
ExclusiveArch: %{ldc_arches}
- direnv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: %ix86 x86_64 aarch64
- docco
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- docker
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-anaconda-addon
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- docker-latest
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- dolphin-emu
ExclusiveArch: x86_64 armv7l aarch64
- douceur
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dustmite
ExclusiveArch: %{ldc_arches}
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc ppc64
- e3
ExclusiveArch: %{ix86} x86_64
- edac-utils
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- edb
ExclusiveArch: %{ix86} x86_64
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: x86_64 aarch64
- efibootmgr
ExclusiveArch: %{ix86} x86_64 aarch64 arm
- efivar
ExclusiveArch: %{ix86} x86_64 aarch64 %{arm}
- elasticdump
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- embree
ExclusiveArch: x86_64
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- etcd
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- exciting
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- exercism
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- expresso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-developer-portal
ExclusiveArch: ix86 x86_64
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fedora-gnat-project-common
ExclusiveArch: noarch %{GNAT_arches}
- fence-virt
ExclusiveArch: i686 x86_64
- fes
ExclusiveArch: x86_64
- ffcall
ExclusiveArch: %{ffcall_arches}
- firmware-addon-dell
ExclusiveArch: x86_64 ia64 %{ix86}
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %GPRbuild_arches
- fluxcapacitor
ExclusiveArch: %{ix86} x86_64 %{arm}
- fpc
ExclusiveArch: %{arm} %{ix86} x86_64 ppc ppc64
- freshmaker
ExclusiveArch: %{ix86} x86_64
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fst
ExclusiveArch: i686
- fwts
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x %{power64}
- fwupdate
ExclusiveArch: x86_64 aarch64
- fzf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- ga
ExclusiveArch: %{ix86} x86_64
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gela-asis
ExclusiveArch: %{GNAT_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-lfs
ExclusiveArch: %{go_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- gl3n
ExclusiveArch: %{ldc_arches}
- glibc32
ExclusiveArch: x86_64 ppc64 s390x
- glide
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %GPRbuild_arches
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-guitar
ExclusiveArch: %{mono_arches}
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- gnu-smalltalk
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-i18n
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- gocomplete
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gofed
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- golang
ExclusiveArch: %{golang_arches}
- golang-bazil-fuse
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-bitbucket-kardianos-osext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-bitbucket-ww-goautoneg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-deepin-go-lib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-10gen-openssl
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- golang-github-3rf-mongo-lint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-AdRoll-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-AudriusButkevicius-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-go-nat-pmp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-kcp-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-pfilter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-Azure-azure-sdk-for-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-freetype-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-graphics-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-toml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-BurntSushi-toml-test
ExclusiveArch: %{go_arches}
- golang-github-BurntSushi-xgb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-xgbutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-DATA-DOG-go-sqlmock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-DataDog-datadog-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Jeffail-gabs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-MakeNowJust-heredoc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Masterminds-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Masterminds-vcs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-PuerkitoBio-goquery
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-purell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-urlesc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-RangelReale-osin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-RangelReale-osincli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-SAP-go-hdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-SeanDolphin-bqschema
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-SermoDigital-jose
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-Shopify-sarama
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Shopify-toxiproxy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Sirupsen-logrus
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ThomsonReutersEikon-go-ntlm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Unknwon-goconfig
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-VividCortex-ewma
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-abbot-go-http-auth
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-agl-ed25519
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-akrennmair-gopcap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-alecthomas-assert
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-chroma
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-alecthomas-colour
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-kingpin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-repr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-template
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-alecthomas-units
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-andybalholm-cascadia
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-appc-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-circbuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-proxyproto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-armon-go-radix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-gomdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-asaskevich-govalidator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-auth0-go-jwt-middleware
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-aws-aws-sdk-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-axgle-mahonia
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-beorn7-perks
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-gitmap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-inflect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bgentry-go-netrc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bgentry-speakeasy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-billziss-gh-cgofuse
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bitly-go-simplejson
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bkaradzic-go-lz4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-blang-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bmizerany-assert
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bmizerany-pat
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bmizerany-perks
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-boltdb-bolt
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-boombuler-barcode
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bradfitz-gomemcache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bradfitz-http2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bugsnag-bugsnag-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bugsnag-panicwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-du
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-luhn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-xdr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ccding-go-stun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cenkalti-backoff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-chaseadamsio-goorgeous
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cheggaaa-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chmduquesne-rollinghash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chrismalek-oktasdk-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chzyer-logex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chzyer-test
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-circonus-labs-circonus-gometrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-circonus-labs-circonusllhist
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cloudfoundry-incubator-candiedyaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cockroachdb-cmux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cockroachdb-cockroach-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-codahale-aesnicheck
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-codegangsta-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-codegangsta-negroni
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-collectd-go-collectd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-gexpect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-etcd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-iptables
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-go-log
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-oidc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-go-systemd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-pkg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cpuguy83-go-md2man
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-cznic-b
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-fileutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-golex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lexer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lldb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-mathutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-ql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-sortutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-strutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-zappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d2g-dhcp4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d2g-dhcp4client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d4l3k-messagediff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-danwakefield-fnmatch
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-davecgh-go-spew
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-daviddengcn-go-colortext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dchest-cssmin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dchest-siphash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-denisenkom-go-mssqldb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-denverdino-aliyungo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dgnorton-goback
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dgrijalva-jwt-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-digitalocean-godo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-disintegration-imaging
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dlclark-regexp2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-docker-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go-connections
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go-units
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libcontainer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libkv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libtrust
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-spdystream
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docopt-docopt-go
ExclusiveArch: %{go_arches}
- golang-github-duosecurity-duo_api_golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dustin-go-humanize
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dvsekhvalnov-jose2go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-eapache-go-resiliency
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-eapache-queue
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-edsrzf-mmap-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-eknkc-amber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-elazarl-go-bindata-assetfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-emicklei-go-restful
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-endophage-gotuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-evanphx-json-patch
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-color
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-pool
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-structs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-flynn-go-shlex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-flynn-json5
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fortytw2-leaktest
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsouza-go-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fullsailor-pkcs7
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-garyburd-redigo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gdamore-encoding
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gdamore-tcell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gengo-grpc-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-getsentry-raven-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ghodss-yaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-glacjay-goini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-asn1-ber-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-errors-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-ini-ini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-ldap-ldap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-macaron-inject
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-mgo-mgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-sql-driver-mysql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-tomb-tomb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gobwas-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gocql-gocql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-godbus-dbus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-appengine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-glog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-groupcache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-golang-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-sync
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-sys
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-time
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-blas
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-floats
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-graph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-lapack
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-matrix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-google-btree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-cmp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-genproto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-github
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-querystring
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-google-gofuzz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-goraft-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-context
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-css
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-gorilla-handlers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-mux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-securecookie
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-sessions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-websocket
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gosexy-gettext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-grpc-ecosystem-go-grpc-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-grpc-ecosystem-grpc-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-grpc-grpc-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hailocab-go-hostpool
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-consul-migrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-errwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-checkpoint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-cleanhttp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-hclog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-immutable-radix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-memdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-msgpack
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-multierror
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-plugin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-retryablehttp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-rootcerts
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-sockaddr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-syslog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-golang-lru
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-hcl
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-hil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-logutils
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-mdns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-memberlist
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-net-rpc-msgpackrpc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft-boltdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft-mdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-scada-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-serf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-yamux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hawkular-hawkular-client-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-howeyc-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-howeyc-gopass
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-imdario-mergo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-mousetrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-muxado
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-influxdb-hyperleveldb-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-influxdb-influxdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-influxdb-rocksdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jackpal-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jacobsa-oglematchers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jdkato-prose
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jdkato-syllables
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jefferai-jsonx
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jessevdk-go-flags
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jfrazelle-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jinzhu-gorm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jlaffaye-ftp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jmespath-go-jmespath
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jmhodges-levigo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jonboulle-clockwork
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jtolds-gls
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-juju-ratelimit
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-julienschmidt-httprouter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-karlseguin-ccache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-karlseguin-expect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kballard-go-shellquote
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kdar-factorlog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-keybase-go-crypto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kimor79-gollectd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-klauspost-cpuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-klauspost-crc32
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-klauspost-reedsolomon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-knieriem-markdown
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-fs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kr-pretty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-pty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-text
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kylelemons-godebug
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kyokomi-emoji
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-lib-pq
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-linuxdeepin-go-x11-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lpabon-godbc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lsegal-gucumber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-lucasb-eyer-go-colorful
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-magiconair-properties
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-markbates-inflect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-colorable
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-isatty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-runewidth
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-shellwords
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-sqlite3
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-matttproud-golang_protobuf_extensions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mesos-mesos-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mgutz-ansi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mgutz-logxi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-michaelklishin-rabbit-hole
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-miekg-dns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-miekg-mmark
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-miekg-pkcs11
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-axis2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-lua
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-minio-sha256-simd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mistifyio-go-zfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-copystructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-go-homedir
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-go-testing-interface
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-go-wordwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-mapstructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-reflectwalk
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-montanaflynn-stats
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mreiferson-go-httpclient
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-msteinert-pam
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mvo5-goconfigparser
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mvo5-uboot-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mxk-go-flowrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ncw-dropbox-sdk-go-unofficial
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ncw-go-acd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ncw-swift
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-neurosnap-sentences
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-nfnt-resize
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-noahdesu-go-ceph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-nsf-termbox-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-nwidger-jsoncolor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ojii-gettext.go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-tablewriter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-ts
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olivere-elastic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-onsi-ginkgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-onsi-gomega
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-opencontainers-runtime-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-opencontainers-specs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-openshift-go-json-rest
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-go-systemd
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-openshift-sdn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-oschwald-geoip2-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-oschwald-maxminddb-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-patrickmn-go-cache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pelletier-go-buffruneio
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pelletier-go-toml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-petar-GoLLRB
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-peterh-liner
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-petermattis-goid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-profile
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pkg-sftp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pmezard-go-difflib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pquerna-otp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-prometheus-client_golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-client_model
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-prometheus-common
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-procfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-racker-perigee
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rackspace-gophercloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-rakyll-globalconf
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rakyll-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-rakyll-statik
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rcrowley-go-metrics
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-remyoudompheng-bigfft
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rfjakob-eme
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-robertkrimen-otto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-russross-blackfriday
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ryanuber-columnize
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ryanuber-go-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-samalba-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-samuel-go-zookeeper
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-sasha-s-go-deadlock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-seccomp-libseccomp-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-sergi-go-diff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-sethgrid-pester
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shiena-ansicolor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shogo82148-go-shuffle
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shurcooL-sanitized_anchor_name
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-skarademir-naturalsort
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skratchdot-open-golang
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skynetservices-skydns
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-assertions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-smartystreets-go-aws-auth
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-goconvey
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spacejam-loghisto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spacemonkeygo-flagfile
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-spacemonkeygo-openssl
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm} ppc64le s390x}
- golang-github-spacemonkeygo-spacelog
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-spf13-afero
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-cast
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-cobra
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spf13-fsync
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-jWalterWeatherman
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-nitro
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spf13-pflag
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-viper
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-sstarcher-go-okta
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stathat-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-stevvooe-resumable
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-streadway-amqp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stretchr-objx
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stretchr-testify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-syndtr-gocapability
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-goleveldb
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-gosnappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-templexxx-cpufeat
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-templexxx-reedsolomon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-templexxx-xor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tent-http-link-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-thejerf-suture
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tjfoc-gmsm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tonnerre-golang-pretty
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ugorji-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-urfave-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vaughan0-go-ini
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-vbatts-tar-split
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vishvananda-netlink
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} aarch64 x86_64 %{arm}}
- golang-github-vishvananda-netns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vitrun-qart
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vjeantet-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vmware-govcloudair
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-wsxiaoys-terminal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xanzy-ssh-agent
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonpointer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonreference
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonschema
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xiang90-probing
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-xtaci-kcp-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xtaci-smux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-ace
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-gohtml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yuin-gopher-lua
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yvasiyarov-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-gorelic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-newrelic_platform_go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-zillode-notify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-zyedidia-clipboard
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-zyedidia-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-zyedidia-poller
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-zyedidia-tcell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-google-golangorg-cloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gcfg
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-go-crypto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-decimal-inf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-exp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-googlecode-goauth2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gogoprotobuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gomock
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-google-api-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-goprotobuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-log4go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-net
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-sqlite
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-text
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-go-check-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-go-macaroon-macaroon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-readline
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-retry-v1
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-sourcemap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-yaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-layeh-gopher-luar
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-torproject-pluggable-transports-goptlib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotags
ExclusiveArch: %{go_arches}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha
- gsf-sharp
ExclusiveArch: %mono_arches
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- hedgewars
ExclusiveArch: %{fpc_arches}
- heketi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- hsakmt
ExclusiveArch: x86_64
- hub
ExclusiveArch: %{go_arches}
- hugo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- icaro
ExclusiveArch: %{ix86} %{arm} x86_64 noarch
- ikarus
ExclusiveArch: %{ix86}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- ioport
ExclusiveArch: %{ix86} x86_64
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 x86_64
- ispc
ExclusiveArch: %{arm} %{ix86} x86_64
- iucode-tool
ExclusiveArch: %{ix86} x86_64
- iwyu
ExclusiveArch: %{ix86} x86_64
- ixpdimm_sw
ExclusiveArch: x86_64
- jake
ExclusiveArch: %{nodejs_arches} noarch
- jasmine-node
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- julia
ExclusiveArch: %{ix86} x86_64
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: %{all_x86} x86_64 ppc64 s390x %{arm} aarch64 ppc64le
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64 ppc64le aarch64
- knot-resolver
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kosmtik
ExclusiveArch: %{nodejs_arches} noarch
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- latrace
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- lazarus
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libflatarray
ExclusiveArch: %{ix86} x86_64
- libhfi1
ExclusiveArch: x86_64
- libica
ExclusiveArch: s390 s390x
- libinvm-cim
ExclusiveArch: x86_64
- libinvm-cli
ExclusiveArch: x86_64
- libinvm-i18n
ExclusiveArch: x86_64
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libjingle
ExclusiveArch: %{ix86} x86_64 %{arm}
- libmfx
ExclusiveArch: %{ix86} x86_64
- libpsm2
ExclusiveArch: x86_64
- librtas
ExclusiveArch: ppc %{power64}
- libseccomp
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 mipsel mips64el ppc64 ppc64le s390 s390x
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 ia64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} %{ix86} x86_64
- libva-intel-hybrid-driver
ExclusiveArch: %{ix86} x86_64 ia64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: ppc %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lldb
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- lodash
ExclusiveArch: %{nodejs_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: ppc %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maven-eclipse-plugin
ExclusiveArch: %{ix86} x86_64
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- mellowplayer
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- micro
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} %{ix86} x86_64
- mine_detector
ExclusiveArch: %{GPRbuild_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mnemosyne
ExclusiveArch: noarch %{qt5_qtwebengine_arches}
- mocha
ExclusiveArch: %{nodejs_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- module-build-service
ExclusiveArch: %{ix86} x86_64 noarch
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64
- mongo-tools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-debugger
ExclusiveArch: %ix86 x86_64
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- nacl-arm-binutils
ExclusiveArch: x86_64
- nacl-arm-gcc
ExclusiveArch: x86_64
- nacl-arm-newlib
ExclusiveArch: x86_64
- nacl-binutils
ExclusiveArch: x86_64
- nacl-gcc
ExclusiveArch: x86_64
- nacl-newlib
ExclusiveArch: x86_64
- nant
ExclusiveArch: %mono_arches
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nim
ExclusiveArch: %{nim_arches}
- nini
ExclusiveArch: %{mono_arches}
- node-gyp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-Base64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-abbrev
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-accepts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-acorn-object-spread
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-after
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-agent-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-agentkeepalive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ain2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-align-text
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-alter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgblack
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgblue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgcyan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bggreen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgmagenta
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgwhite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bgyellow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-black
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-blue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-bold
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-cyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-dim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-font
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-gray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-green
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-grey
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-hidden
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-inverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-italic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-magenta
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-red
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-reset
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-strikethrough
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-styles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-underline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-white
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-wrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-yellow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansicolors
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansidiff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansistyles
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-field
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-aproba
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-are-we-there-yet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-argparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-argsparser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-exclude
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-union
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-buffer-from-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-differ
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-find
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-find-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-foreach
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-ify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-uniq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-unique
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arraybuffer-dot-slice
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arraybuffer-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arrify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-as-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ascii-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ascli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-asn1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assert-plus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assertion-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assume
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ast-traverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ast-types
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-astral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-angular-annotate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-pass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-async-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-limiter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-queue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-some
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asynckit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-atob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-auto-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-autoresolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ava-init
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-aws-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws4
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-messages
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-runtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-backoff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-balanced-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base-option
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base-plugins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base32-encode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-arraybuffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64id
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bash-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-basic-auth-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-batch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bcrypt
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-bcryptjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-beeper
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-benchmark
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-than-before
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bignumber-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bind-obj-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bindings
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-blob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-block-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bluebird
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-body-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boolbase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-brace-expansion
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-braces
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-breakable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-browser-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-browser-stdout
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buble
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buf-compare
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-crc32
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-shims
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffer-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffertools
ExclusiveArch: %{nodejs_arches}
- nodejs-bufferutil
ExclusiveArch: %{nodejs_arches}
- nodejs-builtin-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-builtins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bundle-dependencies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-burrito
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-busboy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-byline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cache-base
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caching-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-call-delayed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-matcher
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-call-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-callback-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsites
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camel-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caniuse-db
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-capture-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-carrier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caseless
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-center-align
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-connect-middleware
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-oauth2orize-grant
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainsaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chalk
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-change-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-char-spinner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-character-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-charm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cheerio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-child-process-close
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chmodr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chownr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chroma-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chrono
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-circular-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cjson
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-class-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clean-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-yaml-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-spinner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cliui
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-deep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-stats
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-closure-compiler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-co-with-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-code-point-at
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-coffee-coverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-collection-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-collections
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-color-support
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colour
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-columnify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-combined-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commander
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-common-path-prefix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commondir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commoner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commonmark
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compare-func
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-inherit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compress-commons
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compressible
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compression
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-map
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-config-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-livereload
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-console-dot-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-consolemd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constant-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constantinople
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-disposition
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-angular
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-changelog-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-commits-filter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-conventional-commits-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-hex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-jar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookiejar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-copy-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-core-assert
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-util-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-couch-login
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coveralls
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-crc
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-crc32-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-create-error-class
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cross-spawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cross-spawn-async
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cryptiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csrf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-select
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-what
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csscomb-core
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cssom
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csurf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-generate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-spectrum
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ctype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-currently-unhandled
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cycle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cyclist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-d
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dargs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dashdash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-data-uri-to-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-date-now
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dateformat
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-death
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-debug-fabulous
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debuglog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-decamelize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decimal-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decompress-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dedent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-eql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deep-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-default-require-extensions
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-default-resolution
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defaults
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defence
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defence-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-properties
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defined
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-degenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-del
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delayed-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-delegates
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delete
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dep-graph
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-depd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dependency-lister
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deprecated
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detect-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detect-newline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detective
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dezalgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-docopt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-doctrine
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dom-serializer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domelementtype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domutils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-prop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dotfile-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dreamopt
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dryice
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dtree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-duplexer3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duration
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ebnf-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-echomd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ecstatic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-editor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ee-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-emojione
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-empty-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encodeurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encoding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-end-of-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-engine-dot-io-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-entities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-ex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errorhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-abstract
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-to-primitive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es5-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es5-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-iterator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-promisify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-set
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escallmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-html
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-regexp-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-string-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escodegen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escope
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espower
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espower-location-detector
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-fb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-harmony-jscs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-espurify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esrecurse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse-fb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-etag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-event-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-event-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eventemitter2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-eventemitter3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-everything-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-execa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-exit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-brackets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-tilde
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extsprintf
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eyes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fake
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fancy-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-far
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fast-levenshtein
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fastfall
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-faucet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-faye-websocket
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fd-slicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fg-lodash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-figures
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-file-entry-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-sync-cmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-uri-to-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-filed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filelist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filename-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fileset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fill-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fill-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-finalhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-find-cache-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-find-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-findup-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-first-chunk-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flagged-respawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flat-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-flush-write-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fmix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-dot-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-follow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-follow-redirects
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-in
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-for-own
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-foreach
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-foreground-child
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forever-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-form-data
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-formatio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-formidable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forwarded
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fragment-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-freetree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fresh
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-from2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-dot-notify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-cached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fs-ext
ExclusiveArch: %{nodejs_arches}
- nodejs-fs-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-temp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-vacuum
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-write-stream-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-ignore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-npm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ftp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-function-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-function-loop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gauge
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gaze
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gdal
ExclusiveArch: %{nodejs_arches}
- nodejs-generate-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generate-object-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-pkg-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stdin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-uri
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-getobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gettext-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-dummy-commit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-git-remote-origin-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gitconfiglocal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-username-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-expand
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-parent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-global-modules
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-global-prefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globby
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globule
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glogg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gnode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gonzales-pe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-got
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-readlink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-growl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-angular-templates
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-banner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-cli
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-compare-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-clean
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-concat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-cssmin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-htmlmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-internal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-less
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-requirejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-uglify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-watch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-git-authors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-html-validation
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-init
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-known-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-lib-contrib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-sed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-simple-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-svgmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-process
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gulp-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gulp-util
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gzip-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-handle-thing
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-handlebars
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-har-validator
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-binary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-binary2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-cors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-flag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-unicode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-values
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hash_file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hawk
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-he
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-heap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hex-to-array-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-highlight-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-historic-readline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hock
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hoek
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-homedir-polyfill
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hook-std
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hooker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hosted-git-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hsluv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-html-minifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-htmlparser2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-deceiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-errors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-signature
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-https-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-humanize-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-i18n-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i2c
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv-lite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-iferr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ignore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-imul
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-imurmurhash
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-indent-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-infinity-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inflight
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-info-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-inherits
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherits1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ini
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-init-package-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inline-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-install
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-int64-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-interpret
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-into-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-invert-kv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ip
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ipaddr-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-irc-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irregular-plurals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-accessor-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrayish
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-boolean-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-builtin-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-callable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-data-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-date-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-descriptor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-dotfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-equal-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-extendable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-finite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-fullwidth-code-point
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-generator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-my-json-valid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-negated-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-number
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-number-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-in-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-inside
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-plain-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-plain-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-primitive
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-redirect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-registered
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-relative
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-retry-allowed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-subset
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-text-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-typedarray
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-unc-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-valid-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-valid-instance
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-windows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-isexe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-iso8601
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isodate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jade
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-growl-reporter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-reporters
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jison
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jison-lex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jju
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joose
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-namespace-depended
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-simplerequest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-base64
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-yaml
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jschardet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jscoverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jshint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-localizer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-parse-helpfulerror
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stable-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stringify-safe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonselect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jwt-simple
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keep-alive-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-keygrip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keypress
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-kind-of
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-klaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-kuler2gpl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-langdetect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-latest-version
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazy-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazystream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lcid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lcov-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-leaflet
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-formbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-hash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leche
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-left-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-levn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lex-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-libxmljs
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-line-numbers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-line-reader
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linkify-it
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-grunt-tasks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-locate-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lockfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-log-driver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-ok
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-symbols
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lolex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-longest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loud-rejection
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lower-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lowercase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ltx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-magic-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-make-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-generator-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-makedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-makeerror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik
ExclusiveArch: %{nodejs_arches}
- nodejs-mapnik-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik-vector-tile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-markdown
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-markdown-it-testgen
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-matched
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-max-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-maxmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mbtiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-md5-hex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-o-matic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mdn-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mdurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-media-typer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoizee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-memwatch-next
ExclusiveArch: %{nodejs_arches}
- nodejs-meow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-merge-descriptors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-merge-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-metascript
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-method-override
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-millstone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mime-db
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mimeparse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minimalistic-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minstache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mixin-deep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mixin-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkfiletree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-bin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-modify-values
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-module-not-found-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-moment
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-moment-timezone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb-core
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-monocle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-morgan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-muffin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-multimatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiparty
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multipipe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-murmur-32
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mustache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mute-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mysql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mz
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nan0
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nano
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nanoseconds
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-native-or-bluebird
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ncp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-needle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-negotiator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nested-error-stacks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-net-browserify-alt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-netmask
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-next
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-next-tick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-node-expat
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-int64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-print
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-static
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-status-codes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-stringprep
ExclusiveArch: %{nodejs_arches}
- nodejs-node-uuid
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nomnom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-noncharacters
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt-usage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-noptify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-normalize-git-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-package-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-cache-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-install-checks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-package-arg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-run-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-stats
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-user-validate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npmlog
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-api
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-audit-shrinkwrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nth-check
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-number-is-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-numeral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth2orize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-assign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-dot-entries
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-omit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-pick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-visit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-observable-to-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-obuf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-finished
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-headers
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-once
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-onetime
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-only-shallow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opener
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-opn
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-option-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-option-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optionator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-orchestrator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ordered-read-streams
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-os-homedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-locale
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-tmpdir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-osenv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-output-file-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-own-or
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-own-or-env
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-finally
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-locate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pac-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pac-resolver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packet-reader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pad-left
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-paperboy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-param-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-github-repo-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parse-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-passwd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parsejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseqs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parserlib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parseuri
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parseurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pascal-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pascalcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-http-bearer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2-client-password
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-array
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-dirname
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-exists
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-inside
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-key
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pathval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pause
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pause-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pbkdf2-password
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pedding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pegjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pem
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pg-connection-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-int8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pgpass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkg-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkginfo
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-platform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-plur
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portfinder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-posix-character-classes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-posix-getopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-bytea
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-date
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-interval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-precond
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prelude-ls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prepend-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-preserve
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-hrtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pretty-time
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-private
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-process-nextick-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promises-aplus-tests
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prompt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promzard
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-propagate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proto-list
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy-addr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxyquire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pruddy-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pseudomap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pubcontrol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pump
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pumpify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-q
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q-io
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qtdatastream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-queue-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-quick-lru
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qunit-extras
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qunitjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rainbowsocks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-random-bytes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-random-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-randomatic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-range-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-raw-body
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rc
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-re-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-all-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-dir-files
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-installed
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-json-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-tree
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readable-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-readdir-scoped-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdirp
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-realize-package-specifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-recast
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rechoir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-redent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reduce-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-regex-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regex-not
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-registry-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-relateurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-remove-trailing-separator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repeat-element
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeat-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeating
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-requestretry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-cs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-require-directory
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-inject
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-uncached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-yaml
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requirejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requires-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-cwd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-pkg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resolve-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-response-time
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resumer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-retry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reusify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-revalidator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rewire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rfile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rhea
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-right-align
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rimraf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rndm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rollup
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ronn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-run-parallel-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-runforcover
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safe-json-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safecb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-samsam
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sauce-tunnel
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sax
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-scmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-secure-random
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seedrandom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-select-hose
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-semver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-send
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sentence-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sentiment
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sequencify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serialize-error
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-static
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-server-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-blocking
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-getter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-immediate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-immediate-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-setimmediate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-setprototypeof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sha
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shallow-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shebang-command
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shebang-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shelljs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-shelljs-nodecli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-format
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-showdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sigmund
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-signal-exit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-silent-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-asyncify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-fmt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-single-line-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon-restore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slide
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-smart-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-snake-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-capture
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-capture-set
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-node
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snapdragon-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snockets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sntp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-socks-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-socks-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sort-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sorted-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-fixtures
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map-support
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sparkles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-spawn-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spawn-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-correct
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-exceptions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-expression-parse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-license-ids
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spec
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-speedometer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sqlite3
ExclusiveArch: %{nodejs_arches}
- nodejs-srs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ssri
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-st
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-utils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-static-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-static-favicon
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-statuses
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-std-mocks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-combiner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-consume
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-counter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-pair
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-reduce
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-replace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-shift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-spigot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-streamsearch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamsink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamtest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-repeat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-trim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string-width
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string_decoder
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringmap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-ansi
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-bom-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-color
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-eof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-json-comments
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strong-log-transformer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strscanner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stylus
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-success-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent-proxy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-supertest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supports-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-suspend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-svgmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-svgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-swap-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-symbol-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-mocha-reporter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-out
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-spec
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tapes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-pack
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-temp-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp-write
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temporary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-cordovajs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-liferay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-terst
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-test
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testdata-w3c-json-form
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testswarm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testutil
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-extensions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-thenify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thenify-all
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thread-sleep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through2-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thunkify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tildify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tilejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive-mapnik
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tiletype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-diff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-stamp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-timed-out
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timekeeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timers-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tiny-lr-fork
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-title-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tlds
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmpl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-absolute-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-object-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-regex-range
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tough-cookie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tracejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-transformers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-traverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-treeify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tressa
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-trim-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trim-off-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-trivial-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-try-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-try-thread-sleep
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tryor
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tsame
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tsscmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ttembed-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tunnel-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-check
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-type-detect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-name
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-typeahead.js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typedarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uc-dot-micro
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uglify-to-browserify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uid-safe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ultron
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-umask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unc-path-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore-dot-logger
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unicode-7.0.0
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unicode-length
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unique-filename
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-slug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-temp-dir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unpipe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unset-value
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unzip-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uri-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-urix
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-join
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-parse-lax
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-use
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-user-home
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utfx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-deprecate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utilities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utils-merge
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uuid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vali-date
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-validate-npm-package-license
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-validate-npm-package-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vasync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-verror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vhost
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vinyl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vlq
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vow-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-w3cjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walkdir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walker
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ware
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-warning-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-watchit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-watershed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wbuf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wcwidth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-websocket-driver
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-when
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-whet-dot-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-which
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-win-spawn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-window-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-winston
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-with
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-woothee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wordwrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrap-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wrap-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrappy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-write-file-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ws
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xml2js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmldom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlhttprequest-ssl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xregexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-xtend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-y18n
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yallist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yapool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yargs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yargs-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yauzl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yeast
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zip-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zipfile
ExclusiveArch: %{nodejs_arches}
- nodejs-zlib-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zlibjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: %{ix86} x86_64
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64
- nwchem
ExclusiveArch: x86_64 %{ix86}
- obfs4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- oci-kvm-hook
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- oci-register-machine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- oci-umount
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- ocitools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- odcs
ExclusiveArch: %{ix86} x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-powerd
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- onedrive
ExclusiveArch: %{ldc_arches}
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: %{ix86} x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openmx
ExclusiveArch: x86_64 %{ix86}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openssl-ibmca
ExclusiveArch: s390 s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orion
ExclusiveArch: %{qt5_qtwebengine_arches}
- orocos-bfl
ExclusiveArch: %{ix86} x86_64
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- paflib
ExclusiveArch: ppc %{power64}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdfmod
ExclusiveArch: %mono_arches
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 %{arm}
- pesign-test-app
ExclusiveArch: i686 x86_64 ia64 aarch64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- plv8
ExclusiveArch: %v8_arches
- podman
ExclusiveArch: x86_64
- poppler-sharp
ExclusiveArch: %mono_arches
- popub
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- powerline-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- ppc64-utils
ExclusiveArch: ppc %{power64}
- publican-jboss
ExclusiveArch: i686 x86_64
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- python-afl
ExclusiveArch: %{ix86} x86_64
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-openoffice
ExclusiveArch: noarch x86_64
- python-ovirt-register
ExclusiveArch: %{ix86} x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-rpi-gpio
ExclusiveArch: %{arm} aarch64
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: %{openblas_arches}
- rclone
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- reg
ExclusiveArch: x86_64
- renderdoc
ExclusiveArch: %{ix86} x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rkt
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- rocm-runtime
ExclusiveArch: x86_64
- rssguard
ExclusiveArch: %{qt5_qtwebengine_arches}
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-addr2line
ExclusiveArch: %{rust_arches}
- rust-adler32
ExclusiveArch: %{rust_arches}
- rust-aho-corasick
ExclusiveArch: %{rust_arches}
- rust-ansi_term
ExclusiveArch: %{rust_arches}
- rust-arrayref
ExclusiveArch: %{rust_arches}
- rust-arrayvec
ExclusiveArch: %{rust_arches}
- rust-atk-sys
ExclusiveArch: %{rust_arches}
- rust-atty
ExclusiveArch: %{rust_arches}
- rust-backtrace
ExclusiveArch: %{rust_arches}
- rust-backtrace-sys
ExclusiveArch: %{rust_arches}
- rust-base100
ExclusiveArch: %{rust_arches}
- rust-base64
ExclusiveArch: %{rust_arches}
- rust-bencher
ExclusiveArch: %{rust_arches}
- rust-bincode
ExclusiveArch: %{rust_arches}
- rust-bincode0.8
ExclusiveArch: %{rust_arches}
- rust-bitflags
ExclusiveArch: %{rust_arches}
- rust-bitflags0.9
ExclusiveArch: %{rust_arches}
- rust-brev
ExclusiveArch: %{rust_arches}
- rust-build_const
ExclusiveArch: %{rust_arches}
- rust-bytecount
ExclusiveArch: %{rust_arches}
- rust-byteorder
ExclusiveArch: %{rust_arches}
- rust-bytes
ExclusiveArch: %{rust_arches}
- rust-bytes0.3
ExclusiveArch: %{rust_arches}
- rust-c_vec
ExclusiveArch: %{rust_arches}
- rust-cairo-rs
ExclusiveArch: %{rust_arches}
- rust-cairo-sys-rs
ExclusiveArch: %{rust_arches}
- rust-cbindgen
ExclusiveArch: %{rust_arches}
- rust-cc
ExclusiveArch: %{rust_arches}
- rust-cfg-if
ExclusiveArch: %{rust_arches}
- rust-chan
ExclusiveArch: %{rust_arches}
- rust-chrono
ExclusiveArch: %{rust_arches}
- rust-clap
ExclusiveArch: %{rust_arches}
- rust-cmake
ExclusiveArch: %{rust_arches}
- rust-coco
ExclusiveArch: %{rust_arches}
- rust-cpp_demangle
ExclusiveArch: %{rust_arches}
- rust-crc
ExclusiveArch: %{rust_arches}
- rust-crc-core
ExclusiveArch: %{rust_arches}
- rust-crossbeam
ExclusiveArch: %{rust_arches}
- rust-crypto-hash
ExclusiveArch: %{rust_arches}
- rust-cryptovec
ExclusiveArch: %{rust_arches}
- rust-cssparser
ExclusiveArch: %{rust_arches}
- rust-cssparser-macros
ExclusiveArch: %{rust_arches}
- rust-ctrlc
ExclusiveArch: %{rust_arches}
- rust-curl
ExclusiveArch: %{rust_arches}
- rust-curl-sys
ExclusiveArch: %{rust_arches}
- rust-custom_derive
ExclusiveArch: %{rust_arches}
- rust-data-encoding
ExclusiveArch: %{rust_arches}
- rust-datetime
ExclusiveArch: %{rust_arches}
- rust-dbus
ExclusiveArch: %{rust_arches}
- rust-deque
ExclusiveArch: %{rust_arches}
- rust-devicemapper
ExclusiveArch: %{rust_arches}
- rust-diff
ExclusiveArch: %{rust_arches}
- rust-difference
ExclusiveArch: %{rust_arches}
- rust-docopt
ExclusiveArch: %{rust_arches}
- rust-downcast-rs
ExclusiveArch: %{rust_arches}
- rust-dtoa
ExclusiveArch: %{rust_arches}
- rust-dtoa-short
ExclusiveArch: %{rust_arches}
- rust-edit-distance
ExclusiveArch: %{rust_arches}
- rust-either
ExclusiveArch: %{rust_arches}
- rust-encoding
ExclusiveArch: %{rust_arches}
- rust-encoding-index-japanese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-korean
ExclusiveArch: %{rust_arches}
- rust-encoding-index-simpchinese
ExclusiveArch: %{rust_arches}
- rust-encoding-index-singlebyte
ExclusiveArch: %{rust_arches}
- rust-encoding-index-tradchinese
ExclusiveArch: %{rust_arches}
- rust-encoding_index_tests
ExclusiveArch: %{rust_arches}
- rust-encoding_rs
ExclusiveArch: %{rust_arches}
- rust-enum_primitive
ExclusiveArch: %{rust_arches}
- rust-env_logger
ExclusiveArch: %{rust_arches}
- rust-env_logger0.4
ExclusiveArch: %{rust_arches}
- rust-errln
ExclusiveArch: %{rust_arches}
- rust-errno
ExclusiveArch: %{rust_arches}
- rust-error-chain
ExclusiveArch: %{rust_arches}
- rust-exa
ExclusiveArch: %{rust_arches}
- rust-extprim
ExclusiveArch: %{rust_arches}
- rust-extprim_literals_macros
ExclusiveArch: %{rust_arches}
- rust-failure
ExclusiveArch: %{rust_arches}
- rust-failure_derive
ExclusiveArch: %{rust_arches}
- rust-fallible-iterator
ExclusiveArch: %{rust_arches}
- rust-fd-find
ExclusiveArch: %{rust_arches}
- rust-filetime
ExclusiveArch: %{rust_arches}
- rust-fixedbitset
ExclusiveArch: %{rust_arches}
- rust-flame
ExclusiveArch: %{rust_arches}
- rust-flate2
ExclusiveArch: %{rust_arches}
- rust-float-cmp
ExclusiveArch: %{rust_arches}
- rust-fnv
ExclusiveArch: %{rust_arches}
- rust-foreign-types
ExclusiveArch: %{rust_arches}
- rust-foreign-types-shared
ExclusiveArch: %{rust_arches}
- rust-fs2
ExclusiveArch: %{rust_arches}
- rust-futures
ExclusiveArch: %{rust_arches}
- rust-futures-cpupool
ExclusiveArch: %{rust_arches}
- rust-gdk
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf
ExclusiveArch: %{rust_arches}
- rust-gdk-pixbuf-sys
ExclusiveArch: %{rust_arches}
- rust-gdk-sys
ExclusiveArch: %{rust_arches}
- rust-getopts
ExclusiveArch: %{rust_arches}
- rust-gimli
ExclusiveArch: %{rust_arches}
- rust-gio
ExclusiveArch: %{rust_arches}
- rust-gio-sys
ExclusiveArch: %{rust_arches}
- rust-git2
ExclusiveArch: %{rust_arches}
- rust-glib
ExclusiveArch: %{rust_arches}
- rust-glib-sys
ExclusiveArch: %{rust_arches}
- rust-glob
ExclusiveArch: %{rust_arches}
- rust-globset
ExclusiveArch: %{rust_arches}
- rust-gobject-sys
ExclusiveArch: %{rust_arches}
- rust-goblin
ExclusiveArch: %{rust_arches}
- rust-grep
ExclusiveArch: %{rust_arches}
- rust-gtk
ExclusiveArch: %{rust_arches}
- rust-gtk-rs-lgpl-docs
ExclusiveArch: %{rust_arches}
- rust-gtk-source-sys
ExclusiveArch: %{rust_arches}
- rust-gtk-sys
ExclusiveArch: %{rust_arches}
- rust-gzip-header
ExclusiveArch: %{rust_arches}
- rust-hamcrest
ExclusiveArch: %{rust_arches}
- rust-handlebars
ExclusiveArch: %{rust_arches}
- rust-heapsize
ExclusiveArch: %{rust_arches}
- rust-hex
ExclusiveArch: %{rust_arches}
- rust-home
ExclusiveArch: %{rust_arches}
- rust-horrorshow
ExclusiveArch: %{rust_arches}
- rust-httparse
ExclusiveArch: %{rust_arches}
- rust-idna
ExclusiveArch: %{rust_arches}
- rust-ignore
ExclusiveArch: %{rust_arches}
- rust-intervaltree
ExclusiveArch: %{rust_arches}
- rust-iovec
ExclusiveArch: %{rust_arches}
- rust-iso8601
ExclusiveArch: %{rust_arches}
- rust-itertools
ExclusiveArch: %{rust_arches}
- rust-itoa
ExclusiveArch: %{rust_arches}
- rust-jobserver
ExclusiveArch: %{rust_arches}
- rust-lazy_static
ExclusiveArch: %{rust_arches}
- rust-lazycell
ExclusiveArch: %{rust_arches}
- rust-libc
ExclusiveArch: %{rust_arches}
- rust-libdbus-sys
ExclusiveArch: %{rust_arches}
- rust-libgit2-sys
ExclusiveArch: %{rust_arches}
- rust-libloading
ExclusiveArch: %{rust_arches}
- rust-libssh2-sys
ExclusiveArch: %{rust_arches}
- rust-libudev
ExclusiveArch: %{rust_arches}
- rust-libudev-sys
ExclusiveArch: %{rust_arches}
- rust-libz-sys
ExclusiveArch: %{rust_arches}
- rust-linked-hash-map
ExclusiveArch: %{rust_arches}
- rust-lipsum
ExclusiveArch: %{rust_arches}
- rust-locale
ExclusiveArch: %{rust_arches}
- rust-log
ExclusiveArch: %{rust_arches}
- rust-log0.3
ExclusiveArch: %{rust_arches}
- rust-loopdev
ExclusiveArch: %{rust_arches}
- rust-lzma-sys
ExclusiveArch: %{rust_arches}
- rust-macro-attr
ExclusiveArch: %{rust_arches}
- rust-maplit
ExclusiveArch: %{rust_arches}
- rust-matches
ExclusiveArch: %{rust_arches}
- rust-md5
ExclusiveArch: %{rust_arches}
- rust-memchr
ExclusiveArch: %{rust_arches}
- rust-memmap
ExclusiveArch: %{rust_arches}
- rust-metadeps
ExclusiveArch: %{rust_arches}
- rust-mime
ExclusiveArch: %{rust_arches}
- rust-miniz-sys
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide
ExclusiveArch: %{rust_arches}
- rust-miniz_oxide_c_api
ExclusiveArch: %{rust_arches}
- rust-mio
ExclusiveArch: %{rust_arches}
- rust-mio-uds
ExclusiveArch: %{rust_arches}
- rust-mnt
ExclusiveArch: %{rust_arches}
- rust-modifier
ExclusiveArch: %{rust_arches}
- rust-multimap
ExclusiveArch: %{rust_arches}
- rust-natord
ExclusiveArch: %{rust_arches}
- rust-net2
ExclusiveArch: %{rust_arches}
- rust-newtype_derive
ExclusiveArch: %{rust_arches}
- rust-nix
ExclusiveArch: %{rust_arches}
- rust-nodrop
ExclusiveArch: %{rust_arches}
- rust-nom
ExclusiveArch: %{rust_arches}
- rust-num
ExclusiveArch: %{rust_arches}
- rust-num-bigint
ExclusiveArch: %{rust_arches}
- rust-num-complex
ExclusiveArch: %{rust_arches}
- rust-num-integer
ExclusiveArch: %{rust_arches}
- rust-num-iter
ExclusiveArch: %{rust_arches}
- rust-num-rational
ExclusiveArch: %{rust_arches}
- rust-num-traits
ExclusiveArch: %{rust_arches}
- rust-num-traits0.1
ExclusiveArch: %{rust_arches}
- rust-num_cpus
ExclusiveArch: %{rust_arches}
- rust-number_prefix
ExclusiveArch: %{rust_arches}
- rust-object
ExclusiveArch: %{rust_arches}
- rust-openssl
ExclusiveArch: %{rust_arches}
- rust-openssl-probe
ExclusiveArch: %{rust_arches}
- rust-openssl-sys
ExclusiveArch: %{rust_arches}
- rust-ordermap
ExclusiveArch: %{rust_arches}
- rust-owning_ref
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches} noarch
- rust-pad
ExclusiveArch: %{rust_arches}
- rust-pager
ExclusiveArch: %{rust_arches}
- rust-pango
ExclusiveArch: %{rust_arches}
- rust-pango-sys
ExclusiveArch: %{rust_arches}
- rust-peeking_take_while
ExclusiveArch: %{rust_arches}
- rust-percent-encoding
ExclusiveArch: %{rust_arches}
- rust-permutate
ExclusiveArch: %{rust_arches}
- rust-permutohedron
ExclusiveArch: %{rust_arches}
- rust-pest
ExclusiveArch: %{rust_arches}
- rust-pest0.3
ExclusiveArch: %{rust_arches}
- rust-pest_derive
ExclusiveArch: %{rust_arches}
- rust-phf
ExclusiveArch: %{rust_arches}
- rust-phf_codegen
ExclusiveArch: %{rust_arches}
- rust-phf_generator
ExclusiveArch: %{rust_arches}
- rust-phf_shared
ExclusiveArch: %{rust_arches}
- rust-pkg-config
ExclusiveArch: %{rust_arches}
- rust-plain
ExclusiveArch: %{rust_arches}
- rust-pretty-git-prompt
ExclusiveArch: %{rust_arches}
- rust-pretty_env_logger
ExclusiveArch: %{rust_arches}
- rust-proc-macro2
ExclusiveArch: %{rust_arches}
- rust-procedural-masquerade
ExclusiveArch: %{rust_arches}
- rust-pulldown-cmark
ExclusiveArch: %{rust_arches}
- rust-quick-error
ExclusiveArch: %{rust_arches}
- rust-quickcheck
ExclusiveArch: %{rust_arches}
- rust-quickersort
ExclusiveArch: %{rust_arches}
- rust-quote
ExclusiveArch: %{rust_arches}
- rust-rand
ExclusiveArch: %{rust_arches}
- rust-rayon
ExclusiveArch: %{rust_arches}
- rust-rayon-core
ExclusiveArch: %{rust_arches}
- rust-regex
ExclusiveArch: %{rust_arches}
- rust-regex-syntax
ExclusiveArch: %{rust_arches}
- rust-relay
ExclusiveArch: %{rust_arches}
- rust-remove_dir_all
ExclusiveArch: %{rust_arches}
- rust-ripgrep
ExclusiveArch: %{rust_arches}
- rust-rustc-demangle
ExclusiveArch: %{rust_arches}
- rust-rustc-serialize
ExclusiveArch: %{rust_arches}
- rust-rustc-test
ExclusiveArch: %{rust_arches}
- rust-rustc_version
ExclusiveArch: %{rust_arches}
- rust-rustdoc-stripper
ExclusiveArch: %{rust_arches}
- rust-rustfilt
ExclusiveArch: %{rust_arches}
- rust-rustfmt
ExclusiveArch: %{rust_arches}
- rust-safemem
ExclusiveArch: %{rust_arches}
- rust-same-file
ExclusiveArch: %{rust_arches}
- rust-scoped-tls
ExclusiveArch: %{rust_arches}
- rust-scoped_threadpool
ExclusiveArch: %{rust_arches}
- rust-scopeguard
ExclusiveArch: %{rust_arches}
- rust-scroll
ExclusiveArch: %{rust_arches}
- rust-scroll_derive
ExclusiveArch: %{rust_arches}
- rust-seahash
ExclusiveArch: %{rust_arches}
- rust-semver
ExclusiveArch: %{rust_arches}
- rust-semver-parser
ExclusiveArch: %{rust_arches}
- rust-serde
ExclusiveArch: %{rust_arches}
- rust-serde0.8
ExclusiveArch: %{rust_arches}
- rust-serde_bytes
ExclusiveArch: %{rust_arches}
- rust-serde_cbor
ExclusiveArch: %{rust_arches}
- rust-serde_derive
ExclusiveArch: %{rust_arches}
- rust-serde_derive_internals
ExclusiveArch: %{rust_arches}
- rust-serde_ignored
ExclusiveArch: %{rust_arches}
- rust-serde_json
ExclusiveArch: %{rust_arches}
- rust-serde_json0.8
ExclusiveArch: %{rust_arches}
- rust-serde_test
ExclusiveArch: %{rust_arches}
- rust-serde_urlencoded
ExclusiveArch: %{rust_arches}
- rust-serde_yaml
ExclusiveArch: %{rust_arches}
- rust-sha1
ExclusiveArch: %{rust_arches}
- rust-shell-escape
ExclusiveArch: %{rust_arches}
- rust-shlex
ExclusiveArch: %{rust_arches}
- rust-siphasher
ExclusiveArch: %{rust_arches}
- rust-slab
ExclusiveArch: %{rust_arches}
- rust-slab0.3
ExclusiveArch: %{rust_arches}
- rust-smallvec
ExclusiveArch: %{rust_arches}
- rust-socket2
ExclusiveArch: %{rust_arches}
- rust-sourceview
ExclusiveArch: %{rust_arches}
- rust-spin
ExclusiveArch: %{rust_arches}
- rust-spmc
ExclusiveArch: %{rust_arches}
- rust-stable_deref_trait
ExclusiveArch: %{rust_arches}
- rust-streaming-stats
ExclusiveArch: %{rust_arches}
- rust-strings
ExclusiveArch: %{rust_arches}
- rust-strsim
ExclusiveArch: %{rust_arches}
- rust-syn
ExclusiveArch: %{rust_arches}
- rust-synom
ExclusiveArch: %{rust_arches}
- rust-synstructure
ExclusiveArch: %{rust_arches}
- rust-syntex_errors
ExclusiveArch: %{rust_arches}
- rust-syntex_pos
ExclusiveArch: %{rust_arches}
- rust-syntex_syntax
ExclusiveArch: %{rust_arches}
- rust-sys-info
ExclusiveArch: %{rust_arches}
- rust-tabwriter
ExclusiveArch: %{rust_arches}
- rust-take
ExclusiveArch: %{rust_arches}
- rust-tar
ExclusiveArch: %{rust_arches}
- rust-tempdir
ExclusiveArch: %{rust_arches}
- rust-tempfile
ExclusiveArch: %{rust_arches}
- rust-term
ExclusiveArch: %{rust_arches}
- rust-term_grid
ExclusiveArch: %{rust_arches}
- rust-term_size
ExclusiveArch: %{rust_arches}
- rust-termcolor
ExclusiveArch: %{rust_arches}
- rust-termion
ExclusiveArch: %{rust_arches}
- rust-test-assembler
ExclusiveArch: %{rust_arches}
- rust-textwrap
ExclusiveArch: %{rust_arches}
- rust-thread-id
ExclusiveArch: %{rust_arches}
- rust-thread_local
ExclusiveArch: %{rust_arches}
- rust-threadpool
ExclusiveArch: %{rust_arches}
- rust-time
ExclusiveArch: %{rust_arches}
- rust-tokei
ExclusiveArch: %{rust_arches}
- rust-tokio-core
ExclusiveArch: %{rust_arches}
- rust-tokio-io
ExclusiveArch: %{rust_arches}
- rust-tokio-process
ExclusiveArch: %{rust_arches}
- rust-tokio-proto
ExclusiveArch: %{rust_arches}
- rust-tokio-service
ExclusiveArch: %{rust_arches}
- rust-tokio-signal
ExclusiveArch: %{rust_arches}
- rust-toml
ExclusiveArch: %{rust_arches}
- rust-traitobject
ExclusiveArch: %{rust_arches}
- rust-typed-arena
ExclusiveArch: %{rust_arches}
- rust-unicase
ExclusiveArch: %{rust_arches}
- rust-unicode-bidi
ExclusiveArch: %{rust_arches}
- rust-unicode-normalization
ExclusiveArch: %{rust_arches}
- rust-unicode-segmentation
ExclusiveArch: %{rust_arches}
- rust-unicode-width
ExclusiveArch: %{rust_arches}
- rust-unicode-xid
ExclusiveArch: %{rust_arches}
- rust-unindent
ExclusiveArch: %{rust_arches}
- rust-unreachable
ExclusiveArch: %{rust_arches}
- rust-unsafe-any
ExclusiveArch: %{rust_arches}
- rust-untrusted
ExclusiveArch: %{rust_arches}
- rust-url
ExclusiveArch: %{rust_arches}
- rust-users
ExclusiveArch: %{rust_arches}
- rust-utf8-ranges
ExclusiveArch: %{rust_arches}
- rust-uuid
ExclusiveArch: %{rust_arches}
- rust-vec_map
ExclusiveArch: %{rust_arches}
- rust-version-sync
ExclusiveArch: %{rust_arches}
- rust-version_check
ExclusiveArch: %{rust_arches}
- rust-void
ExclusiveArch: %{rust_arches}
- rust-wait-timeout
ExclusiveArch: %{rust_arches}
- rust-walkdir
ExclusiveArch: %{rust_arches}
- rust-which
ExclusiveArch: %{rust_arches}
- rust-xattr
ExclusiveArch: %{rust_arches}
- rust-xz2
ExclusiveArch: %{rust_arches}
- rust-yaml-rust
ExclusiveArch: %{rust_arches}
- rust-yaml-rust0.3
ExclusiveArch: %{rust_arches}
- rust-yes
ExclusiveArch: %{rust_arches}
- rust-yubibomb
ExclusiveArch: %{rust_arches}
- rust-zoneinfo_compiled
ExclusiveArch: %{rust_arches}
- s390utils
ExclusiveArch: s390 s390x
- sagemath
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x
- seabios
ExclusiveArch: x86_64
- seamonkey
ExclusiveArch: %{ix86} x86_64
- servicelog
ExclusiveArch: ppc %{power64}
- sgabios
ExclusiveArch: %{ix86} x86_64
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: x86_64
- shim-signed
ExclusiveArch: x86_64 aarch64
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- shim-unsigned-x64
ExclusiveArch: x86_64
- sigul
ExclusiveArch: x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- slapi-nis
ExclusiveArch: x86_64 %{ix86}
- smuxi
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64le
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- source-to-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-xpi
ExclusiveArch: i686 x86_64 armv6l armv7l armv7hl aarch64
- spring
ExclusiveArch: %{ix86} x86_64
- springlobby
ExclusiveArch: %{ix86} x86_64
- startdde
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- statsd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- stratis-cli
ExclusiveArch: %{rust_arches} noarch
- stratisd
ExclusiveArch: %{rust_arches}
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supermin
ExclusiveArch: x86_64
- syncthing
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64 armv7hl armv7hnl aarch64
- tboot
ExclusiveArch: %{ix86} x86_64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- ternimal
ExclusiveArch: %{rust_arches}
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- thunderbird-enigmail
ExclusiveArch: %{ix86} %{arm} ppc64 ppc64le s390x x86_64 noarch
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tpm2-abrmd
ExclusiveArch: %{ix86} x86_64
- tpm2-tools
ExclusiveArch: %{ix86} x86_64
- tpm2-tss
ExclusiveArch: %{ix86} x86_64
- tuned
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ucx
ExclusiveArch: aarch64 ppc64le x86_64
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- v8
ExclusiveArch: %{ix86} x86_64 %{arm} ppc mipsel mips64el
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vdsm
ExclusiveArch: x86_64 %{power64} aarch64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit-sharp
ExclusiveArch: %mono_arches
- webkit2-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wiredtiger
ExclusiveArch: x86_64 aarch64 ppc64le
- wraplinux
ExclusiveArch: %{ix86} x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x2goclient
ExclusiveArch: x86_64
- x86info
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-geode
ExclusiveArch: %{ix86}
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64 ia64
- xorg-x11-drv-omap
ExclusiveArch: %{arm}
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-opentegra
ExclusiveArch: %{arm}
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xsupplicant
ExclusiveArch: %{ix86} x86_64 ppc %{power64}
- ycssmin
ExclusiveArch: %{nodejs_arches} noarch
- zeromq-ada
ExclusiveArch: %{GNAT_arches}
- zlib-ada
ExclusiveArch: %{GPRbuild_arches}
6 years, 2 months
Architecture specific change in rpms/mongo-c-driver.git
by githook-noreply@fedoraproject.org
The package rpms/mongo-c-driver.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/mongo-c-driver.git/commit/?id=c68....
Change:
+%ifarch x86_64
Thanks.
Full change:
============
commit c680c1dc439baa1b2d7d6688e7b5332cbaf9ad38
Author: Remi Collet <remi(a)fedoraproject.org>
Date: Fri Feb 9 07:50:47 2018 +0100
test only on x86_64
diff --git a/mongo-c-driver.spec b/mongo-c-driver.spec
index 11833ae..111addd 100644
--- a/mongo-c-driver.spec
+++ b/mongo-c-driver.spec
@@ -13,7 +13,7 @@
#global prever rc2
%global bsonver 1.9
-%if 0%{?__isa_bits} == 64
+%ifarch x86_64
%global with_tests 0%{!?_without_tests:1}
%else
# See https://jira.mongodb.org/browse/CDRIVER-1186
@@ -201,7 +201,7 @@ exit $ret
%changelog
* Fri Jan 12 2018 Remi Collet <remi(a)remirepo.net> - 1.9.2-2
- update to 1.9.2 (no change)
-- enable test suite on 64-bit
+- enable test suite on x86_64
- raise dependency on libbson 1.9
* Fri Nov 17 2017 Remi Collet <remi(a)fedoraproject.org> - 1.8.2-1
6 years, 2 months
Architecture specific change in rpms/mongo-c-driver.git
by githook-noreply@fedoraproject.org
The package rpms/mongo-c-driver.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/mongo-c-driver.git/commit/?id=92b....
Change:
-%ifarch x86_64
Thanks.
Full change:
============
commit 92b1bccded3a752e294204ff9a3e58534a4407e6
Author: Remi Collet <remi(a)fedoraproject.org>
Date: Fri Dec 22 06:31:12 2017 +0100
update to 1.9.2 (no change)
raise dependency on libbson 1.9
enable test suite on 64-bit
diff --git a/.gitignore b/.gitignore
index f5fd91d..452e4dc 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,6 @@ clog
/mongo-c-driver-1.8.0.tar.gz
/mongo-c-driver-1.8.1.tar.gz
/mongo-c-driver-1.8.2.tar.gz
+/mongo-c-driver-1.9.0.tar.gz
+/mongo-c-driver-1.9.1.tar.gz
+/mongo-c-driver-1.9.2.tar.gz
diff --git a/mongo-c-driver-rpm.patch b/mongo-c-driver-rpm.patch
index 636a7ff..1268ee1 100644
--- a/mongo-c-driver-rpm.patch
+++ b/mongo-c-driver-rpm.patch
@@ -6,7 +6,7 @@ diff -up ./build/autotools/Libbson.m4.rpm ./build/autotools/Libbson.m4
# greater than our required version.
AS_IF([test "x${with_libbson}" = xauto],
- [PKG_CHECK_MODULES(BSON, [libbson-1.0 >= libbson_required_version],
-+ [PKG_CHECK_MODULES(BSON, [libbson-1.0 >= 1.6],
++ [PKG_CHECK_MODULES(BSON, [libbson-1.0 >= 1.9],
[with_libbson=system],
[with_libbson=bundled])])
@@ -14,14 +14,14 @@ diff -up ./build/autotools/Libbson.m4.rpm ./build/autotools/Libbson.m4
AS_IF([test "x${with_libbson}" = xsystem],
[PKG_CHECK_MODULES(BSON,
- [libbson-1.0 >= libbson_required_version],
-+ [libbson-1.0 >= 1.6],
++ [libbson-1.0 >= 1.9],
[],
[AC_MSG_ERROR([
diff -up ./Makefile.am.rpm ./Makefile.am
--- ./Makefile.am.rpm 2017-03-07 14:33:43.000000000 +0100
+++ ./Makefile.am 2017-03-08 07:00:37.848097367 +0100
-@@ -39,10 +39,10 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-sil
+@@ -42,10 +42,10 @@ DISTCHECK_CONFIGURE_FLAGS = --enable-sil
mongocdocdir = ${docdir}
mongocdoc_DATA = \
diff --git a/mongo-c-driver.spec b/mongo-c-driver.spec
index 8f4ad13..11833ae 100644
--- a/mongo-c-driver.spec
+++ b/mongo-c-driver.spec
@@ -1,6 +1,6 @@
# remirepo/fedora spec file for mongo-c-driver
#
-# Copyright (c) 2015-2017 Remi Collet
+# Copyright (c) 2015-2018 Remi Collet
# License: CC-BY-SA
# http://creativecommons.org/licenses/by-sa/4.0/
#
@@ -11,11 +11,10 @@
%global libname libmongoc
%global libver 1.0
#global prever rc2
-%global bsonver 1.8
+%global bsonver 1.9
-%ifarch x86_64
-# Temporarily disabled
-%global with_tests 0%{?_with_tests:1}
+%if 0%{?__isa_bits} == 64
+%global with_tests 0%{!?_without_tests:1}
%else
# See https://jira.mongodb.org/browse/CDRIVER-1186
# 32-bit MongoDB support was officially deprecated
@@ -25,8 +24,8 @@
Name: mongo-c-driver
Summary: Client library written in C for MongoDB
-Version: 1.8.2
-Release: 1%{?dist}
+Version: 1.9.2
+Release: 2%{?dist}
License: ASL 2.0
Group: System Environment/Libraries
URL: https://github.com/%{gh_owner}/%{gh_project}
@@ -200,6 +199,11 @@ exit $ret
%changelog
+* Fri Jan 12 2018 Remi Collet <remi(a)remirepo.net> - 1.9.2-2
+- update to 1.9.2 (no change)
+- enable test suite on 64-bit
+- raise dependency on libbson 1.9
+
* Fri Nov 17 2017 Remi Collet <remi(a)fedoraproject.org> - 1.8.2-1
- update to 1.8.2
diff --git a/sources b/sources
index 79442c2..6f573bc 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (mongo-c-driver-1.8.2.tar.gz) = af23601ba33694d80acdb890c1b85a354fda966491c4bbfb341a884bcd6314886e405efa3a09e47398adf8dbfdeb1b05ae8b022a72f04a66265bfaeddb661f76
+SHA512 (mongo-c-driver-1.9.2.tar.gz) = 25fd78e23300c56dd72becd64bd47573e0c2ed9c5d2af1a917c2dbbfeea69054cc9c6eed6965be20aa325fa68a5c37791495cad44a164134868fa2ae823ea2ef
6 years, 2 months
Architecture specific change in rpms/kernel.git
by githook-noreply@fedoraproject.org
The package rpms/kernel.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/kernel.git/commit/?id=f8e9b44738b....
Change:
-%ifarch %{cpupowerarchs}
Thanks.
Full change:
============
commit f8e9b44738b0a184179c1421a0b590e1d21b0b8f
Author: Laura Abbott <labbott(a)redhat.com>
Date: Mon Feb 5 11:20:04 2018 -0800
Linux v4.15.2
diff --git a/0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch b/0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch
new file mode 100644
index 0000000..1f94c3d
--- /dev/null
+++ b/0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch
@@ -0,0 +1,90 @@
+From 20eeb02a0a489e35de0830b2d61f09d43763c982 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Mon, 13 Nov 2017 09:23:19 +0100
+Subject: [PATCH] Bluetooth: btusb: Add a Kconfig option to enable USB
+ autosuspend by default
+
+On many laptops the btusb device is the only USB device not having USB
+autosuspend enabled, this causes not only the HCI but also the USB
+controller to stay awake, together using aprox. 0.4W of power.
+
+Modern ultrabooks idle around 6W (at 50% screen brightness), 3.5W for
+Apollo Lake devices. 0.4W is a significant chunk of this (7 / 11%).
+
+The btusb driver already contains code to allow enabling USB autosuspend,
+but currently leaves it up to the user / userspace to enable it. This
+means that for most people it will not be enabled, leading to an
+unnecessarily high power consumption.
+
+Since enabling it is not entirely without risk of regressions, this
+commit adds a Kconfig option so that Linux distributions can choose to
+enable it by default. This commit also adds a module option so that when
+distros receive bugs they can easily ask the user to disable it again
+for easy debugging.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+Changes in v2:
+-s/BT_USB_AUTOSUSPEND/BT_HCIBTUSB_AUTOSUSPEND/
+-s/enable_usb_autosuspend/enable_autosuspend/
+---
+ drivers/bluetooth/Kconfig | 10 ++++++++++
+ drivers/bluetooth/btusb.c | 7 +++++++
+ 2 files changed, 17 insertions(+)
+
+diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig
+index 6475f8c0d3b2..20940417d937 100644
+--- a/drivers/bluetooth/Kconfig
++++ b/drivers/bluetooth/Kconfig
+@@ -30,6 +30,16 @@ config BT_HCIBTUSB
+ Say Y here to compile support for Bluetooth USB devices into the
+ kernel or say M to compile it as module (btusb).
+
++config BT_HCIBTUSB_AUTOSUSPEND
++ bool "Enable USB autosuspend for Bluetooth USB devices by default"
++ depends on BT_HCIBTUSB
++ help
++ Say Y here to enable USB autosuspend for Bluetooth USB devices by
++ default.
++
++ This can be overridden by passing btusb.enable_autosuspend=[y|n]
++ on the kernel commandline.
++
+ config BT_HCIBTUSB_BCM
+ bool "Broadcom protocol support"
+ depends on BT_HCIBTUSB
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index c054d7bce490..3386034a44aa 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -40,6 +40,7 @@
+
+ static bool disable_scofix;
+ static bool force_scofix;
++static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND);
+
+ static bool reset = true;
+
+@@ -3175,6 +3176,9 @@ static int btusb_probe(struct usb_interface *intf,
+ }
+ #endif
+
++ if (enable_autosuspend)
++ usb_enable_autosuspend(data->udev);
++
+ err = hci_register_dev(hdev);
+ if (err < 0)
+ goto out_free_dev;
+@@ -3387,6 +3391,9 @@ MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
+ module_param(force_scofix, bool, 0644);
+ MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
+
++module_param(enable_autosuspend, bool, 0644);
++MODULE_PARM_DESC(enable_autosuspend, "Enable USB autosuspend by default");
++
+ module_param(reset, bool, 0644);
+ MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
+
+--
+2.14.3
+
diff --git a/0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch b/0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch
new file mode 100644
index 0000000..cc1af2c
--- /dev/null
+++ b/0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch
@@ -0,0 +1,47 @@
+From a5ffa27c07e06900fcfc50b08de6d11e45830168 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Wed, 3 Jan 2018 12:49:44 +0100
+Subject: [PATCH v2] Bluetooth: btusb: Disable autosuspend on QCA Rome devices
+
+Commit fd865802c66b ("Bluetooth: btusb: fix QCA Rome suspend/resume") fixes
+a suspend/resume problem on QCA devices by doing a full reset on resume,
+reloading the firmware.
+
+A similar problem happens when using runtime-pm / autosuspend, when this is
+enabled by the user the QCA Rome device stops working. Reloading the
+firmware after a runtime suspend is not really an option since the latency
+caused by this is unacceptable.
+
+To fix the runtime-pm issues, this commit disables runtime-pm on QCA Rome
+HCIs, by getting (and not releasing) an usb autopm reference on the btusb
+interface.
+
+BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1514836
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+ drivers/bluetooth/btusb.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 808c249845db..6ed3a0e5b8f6 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -3122,8 +3122,15 @@ static int btusb_probe(struct usb_interface *intf,
+ /* QCA Rome devices lose their updated firmware over suspend,
+ * but the USB hub doesn't notice any status change.
+ * Explicitly request a device reset on resume.
++ * And disable runtime pm by getting a pm reference, the USB
++ * core will drop our reference on disconnect.
+ */
+ set_bit(BTUSB_RESET_RESUME, &data->flags);
++ err = usb_autopm_get_interface(data->intf);
++ if (err < 0) {
++ BT_ERR("failed to get pm reference %d", err);
++ goto out_free_dev;
++ }
+ }
+
+ #ifdef CONFIG_BT_HCIBTUSB_RTL
+--
+2.14.3
+
diff --git a/0001-HID-multitouch-Properly-deal-with-Win8-PTP-reports-w.patch b/0001-HID-multitouch-Properly-deal-with-Win8-PTP-reports-w.patch
new file mode 100644
index 0000000..e15ec6b
--- /dev/null
+++ b/0001-HID-multitouch-Properly-deal-with-Win8-PTP-reports-w.patch
@@ -0,0 +1,106 @@
+From f5c1da991de077420fda17a236342de5a0068f5d Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Wed, 22 Nov 2017 12:57:08 +0100
+Subject: [PATCH v2 1/3] HID: multitouch: Properly deal with Win8 PTP reports
+ with 0 touches
+
+The Windows Precision Touchpad spec "Figure 4 Button Only Down and Up"
+and "Table 9 Report Sequence for Button Only Down and Up" indicate
+that the first packet of a (possibly hybrid mode multi-packet) frame
+may contain a contact-count of 0 if only a button is pressed and no
+fingers are detected.
+
+This means that a value of 0 for contact-count is a valid value and
+should be used as expected contact count when it is the first packet
+(num_received == 0), as extra check to make sure that this is the first
+packet of a buttons only frame, we also check that the timestamp is
+different.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+Reviewed-by: Benjamin Tissoires <benjamin.tissoires(a)redhat.com>
+Signed-off-by: Jiri Kosina <jkosina(a)suse.cz>
+---
+ drivers/hid/hid-multitouch.c | 32 ++++++++++++++++++++++++++++++--
+ 1 file changed, 30 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index 9ef24b518f12..d8b1cad74faf 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -119,6 +119,9 @@ struct mt_device {
+ unsigned long mt_io_flags; /* mt flags (MT_IO_FLAGS_*) */
+ int cc_index; /* contact count field index in the report */
+ int cc_value_index; /* contact count value index in the field */
++ int scantime_index; /* scantime field index in the report */
++ int scantime_val_index; /* scantime value index in the field */
++ int prev_scantime; /* scantime reported in the previous packet */
+ unsigned last_slot_field; /* the last field of a slot */
+ unsigned mt_report_id; /* the report ID of the multitouch device */
+ unsigned long initial_quirks; /* initial quirks state */
+@@ -599,6 +602,12 @@ static int mt_touch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
+ EV_MSC, MSC_TIMESTAMP);
+ input_set_capability(hi->input, EV_MSC, MSC_TIMESTAMP);
+ mt_store_field(usage, td, hi);
++ /* Ignore if indexes are out of bounds. */
++ if (field->index >= field->report->maxfield ||
++ usage->usage_index >= field->report_count)
++ return 1;
++ td->scantime_index = field->index;
++ td->scantime_val_index = usage->usage_index;
+ return 1;
+ case HID_DG_CONTACTCOUNT:
+ /* Ignore if indexes are out of bounds. */
+@@ -855,9 +864,10 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
+ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
+ {
+ struct mt_device *td = hid_get_drvdata(hid);
++ __s32 cls = td->mtclass.name;
+ struct hid_field *field;
+ unsigned count;
+- int r, n;
++ int r, n, scantime = 0;
+
+ /* sticky fingers release in progress, abort */
+ if (test_and_set_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags))
+@@ -867,12 +877,29 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
+ * Includes multi-packet support where subsequent
+ * packets are sent with zero contactcount.
+ */
++ if (td->scantime_index >= 0) {
++ field = report->field[td->scantime_index];
++ scantime = field->value[td->scantime_val_index];
++ }
+ if (td->cc_index >= 0) {
+ struct hid_field *field = report->field[td->cc_index];
+ int value = field->value[td->cc_value_index];
+- if (value)
++
++ /*
++ * For Win8 PTPs the first packet (td->num_received == 0) may
++ * have a contactcount of 0 if there only is a button event.
++ * We double check that this is not a continuation packet
++ * of a possible multi-packet frame be checking that the
++ * timestamp has changed.
++ */
++ if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) &&
++ td->num_received == 0 && td->prev_scantime != scantime)
++ td->num_expected = value;
++ /* A non 0 contact count always indicates a first packet */
++ else if (value)
+ td->num_expected = value;
+ }
++ td->prev_scantime = scantime;
+
+ for (r = 0; r < report->maxfield; r++) {
+ field = report->field[r];
+@@ -1329,6 +1356,7 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
+ td->maxcontact_report_id = -1;
+ td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
+ td->cc_index = -1;
++ td->scantime_index = -1;
+ td->mt_report_id = -1;
+ hid_set_drvdata(hdev, td);
+
+--
+2.14.3
+
diff --git a/0001-Input-gpio_keys-Allow-suppression-of-input-events-fo.patch b/0001-Input-gpio_keys-Allow-suppression-of-input-events-fo.patch
deleted file mode 100644
index 1f03d71..0000000
--- a/0001-Input-gpio_keys-Allow-suppression-of-input-events-fo.patch
+++ /dev/null
@@ -1,163 +0,0 @@
-From 25bb14c1e78e641049fd1ee0c404a9ccd2755e44 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede(a)redhat.com>
-Date: Sat, 22 Jul 2017 13:00:05 +0200
-Subject: [PATCH 1/2] Input: gpio_keys - Allow suppression of input events for
- wakeup button presses
-
-In some cases it is undesirable for a wakeup button to send input events
-to userspace if pressed to wakeup the system (if pressed during suspend).
-
-A typical example of this is the power-button on laptops / tablets,
-sending a KEY_POWER event to userspace when woken up with the power-button
-will cause userspace to immediately suspend the system again which is
-undesirable.
-
-For power-buttons attached to a PMIC, or handled by e.g. ACPI, not sending
-an input event in this case is take care of by the PMIC / ACPI hardware /
-code. But in the case of a GPIO button we need to explicitly suppress the
-sending of the input event.
-
-This commit adds support for this by adding a no_wakeup_events bool to
-struct gpio_keys_button, which platform code can set to suppress the
-input events for presses of wakeup keys during suspend.
-
-Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
----
-Changes in v2:
--This is a rewrite if my "Input: gpio_keys - Do not report wake button
- presses as evdev events" patch.
--Instead of unconditionally ignoring presses of all wake-up buttons during
- suspend, this rewrite makes this configurable per button
--This version uses a timer to delay clearing the suspended flag for software
- debouncing, rather then jiffy compare magic
----
- drivers/input/keyboard/gpio_keys.c | 33 +++++++++++++++++++++++++++++++--
- include/linux/gpio_keys.h | 3 +++
- 2 files changed, 34 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
-index a047b9af8369..fa3a58620407 100644
---- a/drivers/input/keyboard/gpio_keys.c
-+++ b/drivers/input/keyboard/gpio_keys.c
-@@ -38,6 +38,7 @@ struct gpio_button_data {
-
- unsigned short *code;
-
-+ struct timer_list unsuspend_timer;
- struct timer_list release_timer;
- unsigned int release_delay; /* in msecs, for IRQ-only buttons */
-
-@@ -371,6 +372,9 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
- return;
- }
-
-+ if (state && bdata->button->no_wakeup_events && bdata->suspended)
-+ return;
-+
- if (type == EV_ABS) {
- if (state)
- input_event(input, type, button->code, button->value);
-@@ -400,6 +404,9 @@ static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id)
- if (bdata->button->wakeup) {
- const struct gpio_keys_button *button = bdata->button;
-
-+ if (bdata->button->no_wakeup_events && bdata->suspended)
-+ return IRQ_HANDLED;
-+
- pm_stay_awake(bdata->input->dev.parent);
- if (bdata->suspended &&
- (button->type == 0 || button->type == EV_KEY)) {
-@@ -445,9 +452,13 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
- spin_lock_irqsave(&bdata->lock, flags);
-
- if (!bdata->key_pressed) {
-- if (bdata->button->wakeup)
-+ if (bdata->button->wakeup) {
- pm_wakeup_event(bdata->input->dev.parent, 0);
-
-+ if (bdata->button->no_wakeup_events && bdata->suspended)
-+ goto out;
-+ }
-+
- input_event(input, EV_KEY, *bdata->code, 1);
- input_sync(input);
-
-@@ -468,6 +479,13 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
- return IRQ_HANDLED;
- }
-
-+static void gpio_keys_unsuspend_timer(unsigned long _data)
-+{
-+ struct gpio_button_data *bdata = (struct gpio_button_data *)_data;
-+
-+ bdata->suspended = false;
-+}
-+
- static void gpio_keys_quiesce_key(void *data)
- {
- struct gpio_button_data *bdata = data;
-@@ -476,6 +494,8 @@ static void gpio_keys_quiesce_key(void *data)
- cancel_delayed_work_sync(&bdata->work);
- else
- del_timer_sync(&bdata->release_timer);
-+
-+ del_timer_sync(&bdata->unsuspend_timer);
- }
-
- static int gpio_keys_setup_key(struct platform_device *pdev,
-@@ -496,6 +516,8 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
- bdata->input = input;
- bdata->button = button;
- spin_lock_init(&bdata->lock);
-+ setup_timer(&bdata->unsuspend_timer, gpio_keys_unsuspend_timer,
-+ (unsigned long)bdata);
-
- if (child) {
- bdata->gpiod = devm_fwnode_get_gpiod_from_child(dev, NULL,
-@@ -868,6 +890,7 @@ static int __maybe_unused gpio_keys_suspend(struct device *dev)
- struct gpio_button_data *bdata = &ddata->data[i];
- if (bdata->button->wakeup)
- enable_irq_wake(bdata->irq);
-+ del_timer_sync(&bdata->unsuspend_timer);
- bdata->suspended = true;
- }
- } else {
-@@ -892,7 +915,13 @@ static int __maybe_unused gpio_keys_resume(struct device *dev)
- struct gpio_button_data *bdata = &ddata->data[i];
- if (bdata->button->wakeup)
- disable_irq_wake(bdata->irq);
-- bdata->suspended = false;
-+ if (bdata->button->no_wakeup_events) {
-+ mod_timer(&bdata->unsuspend_timer, jiffies +
-+ msecs_to_jiffies(
-+ bdata->software_debounce));
-+ } else {
-+ bdata->suspended = false;
-+ }
- }
- } else {
- mutex_lock(&input->mutex);
-diff --git a/include/linux/gpio_keys.h b/include/linux/gpio_keys.h
-index 0b71024c082c..d8a85e52b6bb 100644
---- a/include/linux/gpio_keys.h
-+++ b/include/linux/gpio_keys.h
-@@ -15,6 +15,8 @@ struct device;
- * @debounce_interval: debounce ticks interval in msecs
- * @can_disable: %true indicates that userspace is allowed to
- * disable button via sysfs
-+ * @no_wakeup_events: For wake-up source buttons only, if %true then no input
-+ * events will be generated if pressed while suspended
- * @value: axis value for %EV_ABS
- * @irq: Irq number in case of interrupt keys
- */
-@@ -27,6 +29,7 @@ struct gpio_keys_button {
- int wakeup;
- int debounce_interval;
- bool can_disable;
-+ bool no_wakeup_events;
- int value;
- unsigned int irq;
- };
---
-2.13.4
-
diff --git a/0001-ahci-Annotate-PCI-ids-for-mobile-Intel-chipsets-as-s.patch b/0001-ahci-Annotate-PCI-ids-for-mobile-Intel-chipsets-as-s.patch
new file mode 100644
index 0000000..d73ce05
--- /dev/null
+++ b/0001-ahci-Annotate-PCI-ids-for-mobile-Intel-chipsets-as-s.patch
@@ -0,0 +1,106 @@
+From cb1072f66e72eda65a8f7ac37d32c9f4217af6ba Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Tue, 21 Nov 2017 14:44:15 +0100
+Subject: [PATCH 1/3] ahci: Annotate PCI ids for mobile Intel chipsets as such
+
+Intel uses different SATA PCI ids for the Desktop and Mobile SKUs of their
+chipsets. For older models the comment describing which chipset the PCI id
+is for, aksi indicates when we're dealing with a mobile SKU. Extend the
+comments for recent chipsets to also indicate mobile SKUs.
+
+The information this commit adds comes from Intel's chipset datasheets.
+
+This commit is a preparation patch for allowing a different default
+sata link powermanagement policy for mobile chipsets.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+ drivers/ata/ahci.c | 32 ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index 5443cb71d7ba..9d842ff6ec51 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -268,9 +268,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x3b23), board_ahci }, /* PCH AHCI */
+ { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */
+ { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
+- { PCI_VDEVICE(INTEL, 0x3b29), board_ahci }, /* PCH AHCI */
++ { PCI_VDEVICE(INTEL, 0x3b29), board_ahci }, /* PCH M AHCI */
+ { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
+- { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH RAID */
++ { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH M RAID */
+ { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */
+ { PCI_VDEVICE(INTEL, 0x19b0), board_ahci }, /* DNV AHCI */
+ { PCI_VDEVICE(INTEL, 0x19b1), board_ahci }, /* DNV AHCI */
+@@ -293,9 +293,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x19cE), board_ahci }, /* DNV AHCI */
+ { PCI_VDEVICE(INTEL, 0x19cF), board_ahci }, /* DNV AHCI */
+ { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */
+- { PCI_VDEVICE(INTEL, 0x1c03), board_ahci }, /* CPT AHCI */
++ { PCI_VDEVICE(INTEL, 0x1c03), board_ahci }, /* CPT M AHCI */
+ { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */
+- { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT RAID */
++ { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT M RAID */
+ { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */
+ { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */
+ { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
+@@ -304,20 +304,20 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* PBG RAID */
+ { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */
+ { PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */
+- { PCI_VDEVICE(INTEL, 0x1e03), board_ahci }, /* Panther Point AHCI */
++ { PCI_VDEVICE(INTEL, 0x1e03), board_ahci }, /* Panther Point M AHCI */
+ { PCI_VDEVICE(INTEL, 0x1e04), board_ahci }, /* Panther Point RAID */
+ { PCI_VDEVICE(INTEL, 0x1e05), board_ahci }, /* Panther Point RAID */
+ { PCI_VDEVICE(INTEL, 0x1e06), board_ahci }, /* Panther Point RAID */
+- { PCI_VDEVICE(INTEL, 0x1e07), board_ahci }, /* Panther Point RAID */
++ { PCI_VDEVICE(INTEL, 0x1e07), board_ahci }, /* Panther Point M RAID */
+ { PCI_VDEVICE(INTEL, 0x1e0e), board_ahci }, /* Panther Point RAID */
+ { PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */
+- { PCI_VDEVICE(INTEL, 0x8c03), board_ahci }, /* Lynx Point AHCI */
++ { PCI_VDEVICE(INTEL, 0x8c03), board_ahci }, /* Lynx Point M AHCI */
+ { PCI_VDEVICE(INTEL, 0x8c04), board_ahci }, /* Lynx Point RAID */
+- { PCI_VDEVICE(INTEL, 0x8c05), board_ahci }, /* Lynx Point RAID */
++ { PCI_VDEVICE(INTEL, 0x8c05), board_ahci }, /* Lynx Point M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c06), board_ahci }, /* Lynx Point RAID */
+- { PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point RAID */
++ { PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */
+- { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point RAID */
++ { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point M RAID */
+ { PCI_VDEVICE(INTEL, 0x9c02), board_ahci }, /* Lynx Point-LP AHCI */
+ { PCI_VDEVICE(INTEL, 0x9c03), board_ahci }, /* Lynx Point-LP AHCI */
+ { PCI_VDEVICE(INTEL, 0x9c04), board_ahci }, /* Lynx Point-LP RAID */
+@@ -358,21 +358,21 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */
+ { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */
+ { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
+- { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series AHCI */
++ { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series M AHCI */
+ { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
+- { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series RAID */
++ { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
+- { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series RAID */
++ { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
+- { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series RAID */
++ { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series M RAID */
+ { PCI_VDEVICE(INTEL, 0x9d03), board_ahci }, /* Sunrise Point-LP AHCI */
+ { PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
+ { PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
+ { PCI_VDEVICE(INTEL, 0xa102), board_ahci }, /* Sunrise Point-H AHCI */
+- { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H AHCI */
++ { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H M AHCI */
+ { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
+ { PCI_VDEVICE(INTEL, 0xa106), board_ahci }, /* Sunrise Point-H RAID */
+- { PCI_VDEVICE(INTEL, 0xa107), board_ahci }, /* Sunrise Point-H RAID */
++ { PCI_VDEVICE(INTEL, 0xa107), board_ahci }, /* Sunrise Point-H M RAID */
+ { PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */
+ { PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* Lewisburg RAID*/
+ { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Lewisburg AHCI*/
+--
+2.14.3
+
diff --git a/0002-HID-multitouch-Only-look-at-non-touch-fields-in-firs.patch b/0002-HID-multitouch-Only-look-at-non-touch-fields-in-firs.patch
new file mode 100644
index 0000000..3ea374f
--- /dev/null
+++ b/0002-HID-multitouch-Only-look-at-non-touch-fields-in-firs.patch
@@ -0,0 +1,84 @@
+From c25d877f4ee97deb92170129eee4777a5d5997d9 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Wed, 22 Nov 2017 12:57:09 +0100
+Subject: [PATCH v2 2/3] HID: multitouch: Only look at non touch fields in
+ first packet of a frame
+
+Devices in "single finger hybrid mode" will send one report per finger,
+on some devices only the first report of such a multi-packet frame will
+contain a value for BTN_LEFT, in subsequent reports (if multiple fingers
+are down) the value is always 0, causing hid-mt to report BTN_LEFT going
+1 - 0 - 1 - 0 when pressing a clickpad and putting down a second finger.
+This happens for example on USB 0603:0002 mt touchpads.
+
+This commit fixes this by only reporting non touch fields for the first
+packet of a (possibly) multi-packet frame.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+Reviewed-by: Benjamin Tissoires <benjamin.tissoires(a)redhat.com>
+Signed-off-by: Jiri Kosina <jkosina(a)suse.cz>
+---
+ drivers/hid/hid-multitouch.c | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index d8b1cad74faf..760c4a042e6a 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -787,9 +787,11 @@ static int mt_touch_event(struct hid_device *hid, struct hid_field *field,
+ }
+
+ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
+- struct hid_usage *usage, __s32 value)
++ struct hid_usage *usage, __s32 value,
++ bool first_packet)
+ {
+ struct mt_device *td = hid_get_drvdata(hid);
++ __s32 cls = td->mtclass.name;
+ __s32 quirks = td->mtclass.quirks;
+ struct input_dev *input = field->hidinput->input;
+
+@@ -846,6 +848,15 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
+ break;
+
+ default:
++ /*
++ * For Win8 PTP touchpads we should only look at
++ * non finger/touch events in the first_packet of
++ * a (possible) multi-packet frame.
++ */
++ if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) &&
++ !first_packet)
++ return;
++
+ if (usage->type)
+ input_event(input, usage->type, usage->code,
+ value);
+@@ -866,6 +877,7 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
+ struct mt_device *td = hid_get_drvdata(hid);
+ __s32 cls = td->mtclass.name;
+ struct hid_field *field;
++ bool first_packet;
+ unsigned count;
+ int r, n, scantime = 0;
+
+@@ -901,6 +913,7 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
+ }
+ td->prev_scantime = scantime;
+
++ first_packet = td->num_received == 0;
+ for (r = 0; r < report->maxfield; r++) {
+ field = report->field[r];
+ count = field->report_count;
+@@ -910,7 +923,7 @@ static void mt_touch_report(struct hid_device *hid, struct hid_report *report)
+
+ for (n = 0; n < count; n++)
+ mt_process_mt_event(hid, field, &field->usage[n],
+- field->value[n]);
++ field->value[n], first_packet);
+ }
+
+ if (td->num_received >= td->num_expected)
+--
+2.14.3
+
diff --git a/0002-Input-soc_button_array-Suppress-power-button-presses.patch b/0002-Input-soc_button_array-Suppress-power-button-presses.patch
deleted file mode 100644
index d95aeb3..0000000
--- a/0002-Input-soc_button_array-Suppress-power-button-presses.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-From d561f0543506bc12e7b3355efddb0bfd7ca83c74 Mon Sep 17 00:00:00 2001
-From: Hans de Goede <hdegoede(a)redhat.com>
-Date: Sat, 22 Jul 2017 13:17:36 +0200
-Subject: [PATCH 2/2] Input: soc_button_array - Suppress power button presses
- during suspend
-
-If the power-button is pressed to wakeup the laptop/tablet from suspend
-and we report a KEY_POWER event to userspace when woken up this will cause
-userspace to immediately suspend the system again which is undesirable.
-
-This commit sets the new no_wakeup_events flag in the gpio_keys_button
-struct for the power-button suppressing the undesirable KEY_POWER input
-events on wake-up.
-
-Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
----
-Changes in v2:
--New patch in v2 of this patch-set
----
- drivers/input/misc/soc_button_array.c | 5 ++++-
- 1 file changed, 4 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c
-index f600f3a7a3c6..27b99831cb97 100644
---- a/drivers/input/misc/soc_button_array.c
-+++ b/drivers/input/misc/soc_button_array.c
-@@ -27,6 +27,7 @@ struct soc_button_info {
- unsigned int event_code;
- bool autorepeat;
- bool wakeup;
-+ bool no_wakeup_events;
- };
-
- /*
-@@ -100,6 +101,7 @@ soc_button_device_create(struct platform_device *pdev,
- gpio_keys[n_buttons].active_low = 1;
- gpio_keys[n_buttons].desc = info->name;
- gpio_keys[n_buttons].wakeup = info->wakeup;
-+ gpio_keys[n_buttons].no_wakeup_events = info->no_wakeup_events;
- /* These devices often use cheap buttons, use 50 ms debounce */
- gpio_keys[n_buttons].debounce_interval = 50;
- n_buttons++;
-@@ -185,6 +187,7 @@ static int soc_button_parse_btn_desc(struct device *dev,
- info->name = "power";
- info->event_code = KEY_POWER;
- info->wakeup = true;
-+ info->no_wakeup_events = true;
- } else if (upage == 0x07 && usage == 0xe3) {
- info->name = "home";
- info->event_code = KEY_LEFTMETA;
-@@ -369,7 +372,7 @@ static int soc_button_probe(struct platform_device *pdev)
- * Platforms"
- */
- static struct soc_button_info soc_button_PNP0C40[] = {
-- { "power", 0, EV_KEY, KEY_POWER, false, true },
-+ { "power", 0, EV_KEY, KEY_POWER, false, true, true },
- { "home", 1, EV_KEY, KEY_LEFTMETA, false, true },
- { "volume_up", 2, EV_KEY, KEY_VOLUMEUP, true, false },
- { "volume_down", 3, EV_KEY, KEY_VOLUMEDOWN, true, false },
---
-2.13.4
-
diff --git a/0002-ahci-Add-PCI-ids-for-Intel-Bay-Trail-Cherry-Trail-an.patch b/0002-ahci-Add-PCI-ids-for-Intel-Bay-Trail-Cherry-Trail-an.patch
new file mode 100644
index 0000000..f27812b
--- /dev/null
+++ b/0002-ahci-Add-PCI-ids-for-Intel-Bay-Trail-Cherry-Trail-an.patch
@@ -0,0 +1,33 @@
+From eab582db4b6c04a20a8bd792faa9ebf7adf1ec17 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Mon, 27 Nov 2017 12:07:34 +0100
+Subject: [PATCH 2/3] ahci: Add PCI ids for Intel Bay Trail, Cherry Trail and
+ Apollo Lake AHCI
+
+Add PCI ids for Intel Bay Trail, Cherry Trail and Apollo Lake AHCI
+SATA controllers. This commit is a preparation patch for allowing a
+different default sata link powermanagement policy for mobile chipsets.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+ drivers/ata/ahci.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index 9d842ff6ec51..844f697bedbf 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -386,6 +386,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0xa206), board_ahci }, /* Lewisburg RAID*/
+ { PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/
+ { PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/
++ { PCI_VDEVICE(INTEL, 0x0f22), board_ahci }, /* Bay Trail AHCI */
++ { PCI_VDEVICE(INTEL, 0x0f23), board_ahci }, /* Bay Trail AHCI */
++ { PCI_VDEVICE(INTEL, 0x22a3), board_ahci }, /* Cherry Trail AHCI */
++ { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci }, /* Apollo Lake AHCI */
+
+ /* JMicron 360/1/3/5/6, match class to avoid IDE function */
+ { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+--
+2.14.3
+
diff --git a/0003-HID-multitouch-Combine-all-left-button-events-in-a-f.patch b/0003-HID-multitouch-Combine-all-left-button-events-in-a-f.patch
new file mode 100644
index 0000000..7fda714
--- /dev/null
+++ b/0003-HID-multitouch-Combine-all-left-button-events-in-a-f.patch
@@ -0,0 +1,78 @@
+From 1719566899e5a69b4ba767beb07dab7ceb9ae5a8 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Wed, 22 Nov 2017 12:57:10 +0100
+Subject: [PATCH v2 3/3] HID: multitouch: Combine all left-button events in a
+ frame
+
+According to the Win8 Precision Touchpad spec, inside the HID_UP_BUTTON
+usage-page usage 1 is for a clickpad getting clicked, 2 for an external
+left button and 3 for an external right button. Since Linux uses
+BTN_LEFT for a clickpad being clicked we end up mapping both usage 1
+and 2 to BTN_LEFT and if a single report contains both then we ended
+up always reporting the value of both in a single SYN, e.g. :
+BTN_LEFT 1, BTN_LEFT 0, SYN. This happens for example with Hantick
+HTT5288 i2c mt touchpads.
+
+This commit fixes this by not immediately reporting left button when we
+parse the report, but instead storing or-ing together the values and
+reporting the result from mt_sync_frame() when we've a complete frame.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+Reviewed-by: Benjamin Tissoires <benjamin.tissoires(a)redhat.com>
+Signed-off-by: Jiri Kosina <jkosina(a)suse.cz>
+---
+ drivers/hid/hid-multitouch.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
+index 760c4a042e6a..76088f2cf598 100644
+--- a/drivers/hid/hid-multitouch.c
++++ b/drivers/hid/hid-multitouch.c
+@@ -122,6 +122,7 @@ struct mt_device {
+ int scantime_index; /* scantime field index in the report */
+ int scantime_val_index; /* scantime value index in the field */
+ int prev_scantime; /* scantime reported in the previous packet */
++ int left_button_state; /* left button state */
+ unsigned last_slot_field; /* the last field of a slot */
+ unsigned mt_report_id; /* the report ID of the multitouch device */
+ unsigned long initial_quirks; /* initial quirks state */
+@@ -743,10 +744,16 @@ static void mt_complete_slot(struct mt_device *td, struct input_dev *input)
+ */
+ static void mt_sync_frame(struct mt_device *td, struct input_dev *input)
+ {
++ __s32 cls = td->mtclass.name;
++
++ if (cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL)
++ input_event(input, EV_KEY, BTN_LEFT, td->left_button_state);
++
+ input_mt_sync_frame(input);
+ input_event(input, EV_MSC, MSC_TIMESTAMP, td->timestamp);
+ input_sync(input);
+ td->num_received = 0;
++ td->left_button_state = 0;
+ if (test_bit(MT_IO_FLAGS_ACTIVE_SLOTS, &td->mt_io_flags))
+ set_bit(MT_IO_FLAGS_PENDING_SLOTS, &td->mt_io_flags);
+ else
+@@ -857,6 +864,19 @@ static void mt_process_mt_event(struct hid_device *hid, struct hid_field *field,
+ !first_packet)
+ return;
+
++ /*
++ * For Win8 PTP touchpads we map both the clickpad click
++ * and any "external" left buttons to BTN_LEFT if a
++ * device claims to have both we need to report 1 for
++ * BTN_LEFT if either is pressed, so we or all values
++ * together and report the result in mt_sync_frame().
++ */
++ if ((cls == MT_CLS_WIN_8 || cls == MT_CLS_WIN_8_DUAL) &&
++ usage->type == EV_KEY && usage->code == BTN_LEFT) {
++ td->left_button_state |= value;
++ return;
++ }
++
+ if (usage->type)
+ input_event(input, usage->type, usage->code,
+ value);
+--
+2.14.3
+
diff --git a/0003-ahci-Allow-setting-a-default-LPM-policy-for-mobile-c.patch b/0003-ahci-Allow-setting-a-default-LPM-policy-for-mobile-c.patch
new file mode 100644
index 0000000..fe7edde
--- /dev/null
+++ b/0003-ahci-Allow-setting-a-default-LPM-policy-for-mobile-c.patch
@@ -0,0 +1,274 @@
+From 262135cf058c28d248b997bd11b2c124e27d8d47 Mon Sep 17 00:00:00 2001
+From: Hans de Goede <hdegoede(a)redhat.com>
+Date: Mon, 27 Nov 2017 15:32:01 +0100
+Subject: [PATCH 3/3] ahci: Allow setting a default LPM policy for mobile
+ chipsets
+
+On many laptops setting a different LPM policy then unknown /
+max_performance can lead to power-savings of 1.0 - 1.5 Watts (when idle).
+
+Modern ultrabooks idle around 6W (at 50% screen brightness), 1.0 - 1.5W
+is a significant chunk of this.
+
+There are some performance / latency costs to enabling LPM by default,
+so it is desirable to make it possible to set a different LPM policy
+for mobile / laptop variants of chipsets / "South Bridges" vs their
+desktop / server counterparts. Also enabling LPM by default is not
+entirely without risk of regressions. At least min_power is known to
+cause issues with some disks, including some reports of data corruption.
+
+This commits adds a new ahci.mobile_lpm_policy kernel cmdline option,
+which defaults to a new SATA_MOBILE_LPM_POLICY Kconfig option so that
+Linux distributions can choose to set a LPM policy for mobile chipsets
+by default.
+
+The reason to have both a kernel cmdline option and a Kconfig default
+value for it, is to allow easy overriding of the default to allow
+trouble-shooting without needing to rebuild the kernel.
+
+Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
+---
+Changes in v2:
+-Remove .config changes from the patch
+---
+ drivers/ata/Kconfig | 19 +++++++++++
+ drivers/ata/ahci.c | 97 +++++++++++++++++++++++++++++++----------------------
+ drivers/ata/ahci.h | 3 ++
+ 3 files changed, 78 insertions(+), 41 deletions(-)
+
+diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
+index cb5339166563..b3fad5663aeb 100644
+--- a/drivers/ata/Kconfig
++++ b/drivers/ata/Kconfig
+@@ -92,6 +92,25 @@ config SATA_AHCI
+
+ If unsure, say N.
+
++config SATA_MOBILE_LPM_POLICY
++ int "Default SATA Link Power Management policy for mobile chipsets"
++ range 0 4
++ default 0
++ depends on SATA_AHCI
++ help
++ Select the Default SATA Link Power Management (LPM) policy to use
++ for mobile / laptop variants of chipsets / "South Bridges".
++
++ The value set has the following meanings:
++ 0 => Keep firmware settings
++ 1 => Maximum performance
++ 2 => Medium power
++ 3 => Medium power with Device Initiated PM enabled
++ 4 => Minimum power
++
++ Note "Minimum power" is known to cause issues, including disk
++ corruption, with some disks and should not be used.
++
+ config SATA_AHCI_PLATFORM
+ tristate "Platform AHCI SATA support"
+ help
+diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
+index 844f697bedbf..8e910fae8892 100644
+--- a/drivers/ata/ahci.c
++++ b/drivers/ata/ahci.c
+@@ -65,6 +65,7 @@ enum board_ids {
+ /* board IDs by feature in alphabetical order */
+ board_ahci,
+ board_ahci_ign_iferr,
++ board_ahci_mobile,
+ board_ahci_nomsi,
+ board_ahci_noncq,
+ board_ahci_nosntf,
+@@ -140,6 +141,13 @@ static const struct ata_port_info ahci_port_info[] = {
+ .udma_mask = ATA_UDMA6,
+ .port_ops = &ahci_ops,
+ },
++ [board_ahci_mobile] = {
++ AHCI_HFLAGS (AHCI_HFLAG_IS_MOBILE),
++ .flags = AHCI_FLAG_COMMON,
++ .pio_mask = ATA_PIO4,
++ .udma_mask = ATA_UDMA6,
++ .port_ops = &ahci_ops,
++ },
+ [board_ahci_nomsi] = {
+ AHCI_HFLAGS (AHCI_HFLAG_NO_MSI),
+ .flags = AHCI_FLAG_COMMON,
+@@ -252,13 +260,13 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x2924), board_ahci }, /* ICH9 */
+ { PCI_VDEVICE(INTEL, 0x2925), board_ahci }, /* ICH9 */
+ { PCI_VDEVICE(INTEL, 0x2927), board_ahci }, /* ICH9 */
+- { PCI_VDEVICE(INTEL, 0x2929), board_ahci }, /* ICH9M */
+- { PCI_VDEVICE(INTEL, 0x292a), board_ahci }, /* ICH9M */
+- { PCI_VDEVICE(INTEL, 0x292b), board_ahci }, /* ICH9M */
+- { PCI_VDEVICE(INTEL, 0x292c), board_ahci }, /* ICH9M */
+- { PCI_VDEVICE(INTEL, 0x292f), board_ahci }, /* ICH9M */
++ { PCI_VDEVICE(INTEL, 0x2929), board_ahci_mobile }, /* ICH9M */
++ { PCI_VDEVICE(INTEL, 0x292a), board_ahci_mobile }, /* ICH9M */
++ { PCI_VDEVICE(INTEL, 0x292b), board_ahci_mobile }, /* ICH9M */
++ { PCI_VDEVICE(INTEL, 0x292c), board_ahci_mobile }, /* ICH9M */
++ { PCI_VDEVICE(INTEL, 0x292f), board_ahci_mobile }, /* ICH9M */
+ { PCI_VDEVICE(INTEL, 0x294d), board_ahci }, /* ICH9 */
+- { PCI_VDEVICE(INTEL, 0x294e), board_ahci }, /* ICH9M */
++ { PCI_VDEVICE(INTEL, 0x294e), board_ahci_mobile }, /* ICH9M */
+ { PCI_VDEVICE(INTEL, 0x502a), board_ahci }, /* Tolapai */
+ { PCI_VDEVICE(INTEL, 0x502b), board_ahci }, /* Tolapai */
+ { PCI_VDEVICE(INTEL, 0x3a05), board_ahci }, /* ICH10 */
+@@ -268,9 +276,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x3b23), board_ahci }, /* PCH AHCI */
+ { PCI_VDEVICE(INTEL, 0x3b24), board_ahci }, /* PCH RAID */
+ { PCI_VDEVICE(INTEL, 0x3b25), board_ahci }, /* PCH RAID */
+- { PCI_VDEVICE(INTEL, 0x3b29), board_ahci }, /* PCH M AHCI */
++ { PCI_VDEVICE(INTEL, 0x3b29), board_ahci_mobile }, /* PCH M AHCI */
+ { PCI_VDEVICE(INTEL, 0x3b2b), board_ahci }, /* PCH RAID */
+- { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci }, /* PCH M RAID */
++ { PCI_VDEVICE(INTEL, 0x3b2c), board_ahci_mobile }, /* PCH M RAID */
+ { PCI_VDEVICE(INTEL, 0x3b2f), board_ahci }, /* PCH AHCI */
+ { PCI_VDEVICE(INTEL, 0x19b0), board_ahci }, /* DNV AHCI */
+ { PCI_VDEVICE(INTEL, 0x19b1), board_ahci }, /* DNV AHCI */
+@@ -293,9 +301,9 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x19cE), board_ahci }, /* DNV AHCI */
+ { PCI_VDEVICE(INTEL, 0x19cF), board_ahci }, /* DNV AHCI */
+ { PCI_VDEVICE(INTEL, 0x1c02), board_ahci }, /* CPT AHCI */
+- { PCI_VDEVICE(INTEL, 0x1c03), board_ahci }, /* CPT M AHCI */
++ { PCI_VDEVICE(INTEL, 0x1c03), board_ahci_mobile }, /* CPT M AHCI */
+ { PCI_VDEVICE(INTEL, 0x1c04), board_ahci }, /* CPT RAID */
+- { PCI_VDEVICE(INTEL, 0x1c05), board_ahci }, /* CPT M RAID */
++ { PCI_VDEVICE(INTEL, 0x1c05), board_ahci_mobile }, /* CPT M RAID */
+ { PCI_VDEVICE(INTEL, 0x1c06), board_ahci }, /* CPT RAID */
+ { PCI_VDEVICE(INTEL, 0x1c07), board_ahci }, /* CPT RAID */
+ { PCI_VDEVICE(INTEL, 0x1d02), board_ahci }, /* PBG AHCI */
+@@ -304,28 +312,28 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x2826), board_ahci }, /* PBG RAID */
+ { PCI_VDEVICE(INTEL, 0x2323), board_ahci }, /* DH89xxCC AHCI */
+ { PCI_VDEVICE(INTEL, 0x1e02), board_ahci }, /* Panther Point AHCI */
+- { PCI_VDEVICE(INTEL, 0x1e03), board_ahci }, /* Panther Point M AHCI */
++ { PCI_VDEVICE(INTEL, 0x1e03), board_ahci_mobile }, /* Panther M AHCI */
+ { PCI_VDEVICE(INTEL, 0x1e04), board_ahci }, /* Panther Point RAID */
+ { PCI_VDEVICE(INTEL, 0x1e05), board_ahci }, /* Panther Point RAID */
+ { PCI_VDEVICE(INTEL, 0x1e06), board_ahci }, /* Panther Point RAID */
+- { PCI_VDEVICE(INTEL, 0x1e07), board_ahci }, /* Panther Point M RAID */
++ { PCI_VDEVICE(INTEL, 0x1e07), board_ahci_mobile }, /* Panther M RAID */
+ { PCI_VDEVICE(INTEL, 0x1e0e), board_ahci }, /* Panther Point RAID */
+ { PCI_VDEVICE(INTEL, 0x8c02), board_ahci }, /* Lynx Point AHCI */
+- { PCI_VDEVICE(INTEL, 0x8c03), board_ahci }, /* Lynx Point M AHCI */
++ { PCI_VDEVICE(INTEL, 0x8c03), board_ahci_mobile }, /* Lynx M AHCI */
+ { PCI_VDEVICE(INTEL, 0x8c04), board_ahci }, /* Lynx Point RAID */
+- { PCI_VDEVICE(INTEL, 0x8c05), board_ahci }, /* Lynx Point M RAID */
++ { PCI_VDEVICE(INTEL, 0x8c05), board_ahci_mobile }, /* Lynx M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c06), board_ahci }, /* Lynx Point RAID */
+- { PCI_VDEVICE(INTEL, 0x8c07), board_ahci }, /* Lynx Point M RAID */
++ { PCI_VDEVICE(INTEL, 0x8c07), board_ahci_mobile }, /* Lynx M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c0e), board_ahci }, /* Lynx Point RAID */
+- { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci }, /* Lynx Point M RAID */
+- { PCI_VDEVICE(INTEL, 0x9c02), board_ahci }, /* Lynx Point-LP AHCI */
+- { PCI_VDEVICE(INTEL, 0x9c03), board_ahci }, /* Lynx Point-LP AHCI */
+- { PCI_VDEVICE(INTEL, 0x9c04), board_ahci }, /* Lynx Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c05), board_ahci }, /* Lynx Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c06), board_ahci }, /* Lynx Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c07), board_ahci }, /* Lynx Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci }, /* Lynx Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci }, /* Lynx Point-LP RAID */
++ { PCI_VDEVICE(INTEL, 0x8c0f), board_ahci_mobile }, /* Lynx M RAID */
++ { PCI_VDEVICE(INTEL, 0x9c02), board_ahci_mobile }, /* Lynx LP AHCI */
++ { PCI_VDEVICE(INTEL, 0x9c03), board_ahci_mobile }, /* Lynx LP AHCI */
++ { PCI_VDEVICE(INTEL, 0x9c04), board_ahci_mobile }, /* Lynx LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c05), board_ahci_mobile }, /* Lynx LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c06), board_ahci_mobile }, /* Lynx LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c07), board_ahci_mobile }, /* Lynx LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c0e), board_ahci_mobile }, /* Lynx LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c0f), board_ahci_mobile }, /* Lynx LP RAID */
+ { PCI_VDEVICE(INTEL, 0x1f22), board_ahci }, /* Avoton AHCI */
+ { PCI_VDEVICE(INTEL, 0x1f23), board_ahci }, /* Avoton AHCI */
+ { PCI_VDEVICE(INTEL, 0x1f24), board_ahci }, /* Avoton RAID */
+@@ -353,26 +361,26 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0x8d66), board_ahci }, /* Wellsburg RAID */
+ { PCI_VDEVICE(INTEL, 0x8d6e), board_ahci }, /* Wellsburg RAID */
+ { PCI_VDEVICE(INTEL, 0x23a3), board_ahci }, /* Coleto Creek AHCI */
+- { PCI_VDEVICE(INTEL, 0x9c83), board_ahci }, /* Wildcat Point-LP AHCI */
+- { PCI_VDEVICE(INTEL, 0x9c85), board_ahci }, /* Wildcat Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c87), board_ahci }, /* Wildcat Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci }, /* Wildcat Point-LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c83), board_ahci_mobile }, /* Wildcat LP AHCI */
++ { PCI_VDEVICE(INTEL, 0x9c85), board_ahci_mobile }, /* Wildcat LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c87), board_ahci_mobile }, /* Wildcat LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9c8f), board_ahci_mobile }, /* Wildcat LP RAID */
+ { PCI_VDEVICE(INTEL, 0x8c82), board_ahci }, /* 9 Series AHCI */
+- { PCI_VDEVICE(INTEL, 0x8c83), board_ahci }, /* 9 Series M AHCI */
++ { PCI_VDEVICE(INTEL, 0x8c83), board_ahci_mobile }, /* 9 Series M AHCI */
+ { PCI_VDEVICE(INTEL, 0x8c84), board_ahci }, /* 9 Series RAID */
+- { PCI_VDEVICE(INTEL, 0x8c85), board_ahci }, /* 9 Series M RAID */
++ { PCI_VDEVICE(INTEL, 0x8c85), board_ahci_mobile }, /* 9 Series M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c86), board_ahci }, /* 9 Series RAID */
+- { PCI_VDEVICE(INTEL, 0x8c87), board_ahci }, /* 9 Series M RAID */
++ { PCI_VDEVICE(INTEL, 0x8c87), board_ahci_mobile }, /* 9 Series M RAID */
+ { PCI_VDEVICE(INTEL, 0x8c8e), board_ahci }, /* 9 Series RAID */
+- { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci }, /* 9 Series M RAID */
+- { PCI_VDEVICE(INTEL, 0x9d03), board_ahci }, /* Sunrise Point-LP AHCI */
+- { PCI_VDEVICE(INTEL, 0x9d05), board_ahci }, /* Sunrise Point-LP RAID */
+- { PCI_VDEVICE(INTEL, 0x9d07), board_ahci }, /* Sunrise Point-LP RAID */
++ { PCI_VDEVICE(INTEL, 0x8c8f), board_ahci_mobile }, /* 9 Series M RAID */
++ { PCI_VDEVICE(INTEL, 0x9d03), board_ahci_mobile }, /* Sunrise LP AHCI */
++ { PCI_VDEVICE(INTEL, 0x9d05), board_ahci_mobile }, /* Sunrise LP RAID */
++ { PCI_VDEVICE(INTEL, 0x9d07), board_ahci_mobile }, /* Sunrise LP RAID */
+ { PCI_VDEVICE(INTEL, 0xa102), board_ahci }, /* Sunrise Point-H AHCI */
+- { PCI_VDEVICE(INTEL, 0xa103), board_ahci }, /* Sunrise Point-H M AHCI */
++ { PCI_VDEVICE(INTEL, 0xa103), board_ahci_mobile }, /* Sunrise M AHCI */
+ { PCI_VDEVICE(INTEL, 0xa105), board_ahci }, /* Sunrise Point-H RAID */
+ { PCI_VDEVICE(INTEL, 0xa106), board_ahci }, /* Sunrise Point-H RAID */
+- { PCI_VDEVICE(INTEL, 0xa107), board_ahci }, /* Sunrise Point-H M RAID */
++ { PCI_VDEVICE(INTEL, 0xa107), board_ahci_mobile }, /* Sunrise M RAID */
+ { PCI_VDEVICE(INTEL, 0xa10f), board_ahci }, /* Sunrise Point-H RAID */
+ { PCI_VDEVICE(INTEL, 0x2822), board_ahci }, /* Lewisburg RAID*/
+ { PCI_VDEVICE(INTEL, 0x2823), board_ahci }, /* Lewisburg AHCI*/
+@@ -386,10 +394,10 @@ static const struct pci_device_id ahci_pci_tbl[] = {
+ { PCI_VDEVICE(INTEL, 0xa206), board_ahci }, /* Lewisburg RAID*/
+ { PCI_VDEVICE(INTEL, 0xa252), board_ahci }, /* Lewisburg RAID*/
+ { PCI_VDEVICE(INTEL, 0xa256), board_ahci }, /* Lewisburg RAID*/
+- { PCI_VDEVICE(INTEL, 0x0f22), board_ahci }, /* Bay Trail AHCI */
+- { PCI_VDEVICE(INTEL, 0x0f23), board_ahci }, /* Bay Trail AHCI */
+- { PCI_VDEVICE(INTEL, 0x22a3), board_ahci }, /* Cherry Trail AHCI */
+- { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci }, /* Apollo Lake AHCI */
++ { PCI_VDEVICE(INTEL, 0x0f22), board_ahci_mobile }, /* Bay Trail AHCI */
++ { PCI_VDEVICE(INTEL, 0x0f23), board_ahci_mobile }, /* Bay Trail AHCI */
++ { PCI_VDEVICE(INTEL, 0x22a3), board_ahci_mobile }, /* Cherry Tr. AHCI */
++ { PCI_VDEVICE(INTEL, 0x5ae3), board_ahci_mobile }, /* ApolloLake AHCI */
+
+ /* JMicron 360/1/3/5/6, match class to avoid IDE function */
+ { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+@@ -597,6 +605,9 @@ static int marvell_enable = 1;
+ module_param(marvell_enable, int, 0644);
+ MODULE_PARM_DESC(marvell_enable, "Marvell SATA via AHCI (1 = enabled)");
+
++static int mobile_lpm_policy = CONFIG_SATA_MOBILE_LPM_POLICY;
++module_param(mobile_lpm_policy, int, 0644);
++MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");
+
+ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
+ struct ahci_host_priv *hpriv)
+@@ -1732,6 +1743,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
+ if (ap->flags & ATA_FLAG_EM)
+ ap->em_message_type = hpriv->em_msg_type;
+
++ if ((hpriv->flags & AHCI_HFLAG_IS_MOBILE) &&
++ mobile_lpm_policy >= ATA_LPM_UNKNOWN &&
++ mobile_lpm_policy <= ATA_LPM_MIN_POWER)
++ ap->target_lpm_policy = mobile_lpm_policy;
+
+ /* disabled/not-implemented port */
+ if (!(hpriv->port_map & (1 << i)))
+diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
+index 749fd94441b0..a9d996e17d75 100644
+--- a/drivers/ata/ahci.h
++++ b/drivers/ata/ahci.h
+@@ -251,6 +251,9 @@ enum {
+ AHCI_HFLAG_YES_ALPM = (1 << 23), /* force ALPM cap on */
+ AHCI_HFLAG_NO_WRITE_TO_RO = (1 << 24), /* don't write to read
+ only registers */
++ AHCI_HFLAG_IS_MOBILE = (1 << 25), /* mobile chipset, use
++ SATA_MOBILE_LPM_POLICY
++ as default lpm_policy */
+
+ /* ap->flags bits */
+
+--
+2.14.3
+
diff --git a/PCI-aspm-deal-with-missing-root-ports-in-link-state-handling.patch b/PCI-aspm-deal-with-missing-root-ports-in-link-state-handling.patch
deleted file mode 100644
index 03b0115..0000000
--- a/PCI-aspm-deal-with-missing-root-ports-in-link-state-handling.patch
+++ /dev/null
@@ -1,55 +0,0 @@
-From patchwork Mon Oct 2 14:08:40 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: PCI: aspm: deal with missing root ports in link state handling
-From: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
-X-Patchwork-Id: 9980861
-Message-Id: <20171002140840.7767-1-ard.biesheuvel(a)linaro.org>
-To: linux-pci(a)vger.kernel.org, bhelgaas(a)google.com
-Cc: graeme.gregory(a)linaro.org, leif.lindholm(a)linaro.org,
- daniel.thompson(a)Linaro.org, Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
-Date: Mon, 2 Oct 2017 15:08:40 +0100
-
-Even though it is unconventional, some PCIe host implementations omit
-the root ports entirely, and simply consist of a host bridge (which
-is not modeled as a device in the PCI hierarchy) and a link.
-
-When the downstream device is an endpoint, our current code does not
-seem to mind this unusual configuration. However, when PCIe switches
-are involved, the ASPM code assumes that any downstream switch port
-has a parent, and blindly derefences the bus->parent->self field of
-the pci_dev struct to chain the downstream link state to the link
-state of the root port. Given that the root port is missing, the link
-is not modeled at all, and nor is the link state, and attempting to
-access it results in a NULL pointer dereference and a crash.
-
-So let's avoid this by allowing the link state chain to terminate at
-the downstream port if no root port exists.
-
-Signed-off-by: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
----
- drivers/pci/pcie/aspm.c | 8 ++++++--
- 1 file changed, 6 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
-index 1dfa10cc566b..0bea8498b5a5 100644
---- a/drivers/pci/pcie/aspm.c
-+++ b/drivers/pci/pcie/aspm.c
-@@ -802,10 +802,14 @@ static struct pcie_link_state *alloc_pcie_link_state(struct pci_dev *pdev)
-
- /*
- * Root Ports and PCI/PCI-X to PCIe Bridges are roots of PCIe
-- * hierarchies.
-+ * hierarchies. Note that some PCIe host implementations omit
-+ * the root ports entirely, in which case a downstream port on
-+ * a switch may become the root of the link state chain for all
-+ * its subordinate endpoints.
- */
- if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ROOT_PORT ||
-- pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE) {
-+ pci_pcie_type(pdev) == PCI_EXP_TYPE_PCIE_BRIDGE ||
-+ !pdev->bus->parent->self) {
- link->root = link;
- } else {
- struct pcie_link_state *parent;
diff --git a/allwinner-net-emac.patch b/allwinner-net-emac.patch
deleted file mode 100644
index c9c7cd0..0000000
--- a/allwinner-net-emac.patch
+++ /dev/null
@@ -1,1934 +0,0 @@
-From 1b28a544627ddce094091946f06f99bc41d0098f Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 24 Oct 2017 19:57:12 +0200
-Subject: [PATCH 01/11] net: stmmac: snps, dwmac-mdio MDIOs are automatically
- registered
-
-stmmac bindings docs said that its mdio node must have
-compatible = "snps,dwmac-mdio";
-Since dwmac-sun8i does not have any good reasons to not doing it, all
-their MDIO node must have it.
-
-Since these compatible is automatically registered, dwmac-sun8i compatible
-does not need to be in need_mdio_ids.
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
----
- drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c | 4 ----
- 1 file changed, 4 deletions(-)
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
-index 6383695004a5..645ef949705f 100644
---- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
-@@ -318,10 +318,6 @@ static int stmmac_dt_phy(struct plat_stmmacenet_data *plat,
- bool mdio = true;
- static const struct of_device_id need_mdio_ids[] = {
- { .compatible = "snps,dwc-qos-ethernet-4.10" },
-- { .compatible = "allwinner,sun8i-a83t-emac" },
-- { .compatible = "allwinner,sun8i-h3-emac" },
-- { .compatible = "allwinner,sun8i-v3s-emac" },
-- { .compatible = "allwinner,sun50i-a64-emac" },
- {},
- };
-
---
-2.14.3
-
-From 9a5b1d9a7614b022512744896d889e76f687e90a Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 24 Oct 2017 19:57:13 +0200
-Subject: [PATCH 02/11] net: stmmac: dwmac-sun8i: Handle integrated/external
- MDIOs
-
-The Allwinner H3 SoC have two distinct MDIO bus, only one could be
-active at the same time.
-The selection of the active MDIO bus are done via some bits in the EMAC
-register of the system controller.
-
-This patch implement this MDIO switch via a custom MDIO-mux.
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Reviewed-by: Andrew Lunn <andrew(a)lunn.ch>
----
- drivers/net/ethernet/stmicro/stmmac/Kconfig | 1 +
- drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 353 ++++++++++++++--------
- 2 files changed, 224 insertions(+), 130 deletions(-)
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/Kconfig b/drivers/net/ethernet/stmicro/stmmac/Kconfig
-index 97035766c291..e28c0d2c58e9 100644
---- a/drivers/net/ethernet/stmicro/stmmac/Kconfig
-+++ b/drivers/net/ethernet/stmicro/stmmac/Kconfig
-@@ -159,6 +159,7 @@ config DWMAC_SUN8I
- tristate "Allwinner sun8i GMAC support"
- default ARCH_SUNXI
- depends on OF && (ARCH_SUNXI || COMPILE_TEST)
-+ select MDIO_BUS_MUX
- ---help---
- Support for Allwinner H3 A83T A64 EMAC ethernet controllers.
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-index 39c2122a4f26..b3eb344bb158 100644
---- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-@@ -17,6 +17,7 @@
- #include <linux/clk.h>
- #include <linux/io.h>
- #include <linux/iopoll.h>
-+#include <linux/mdio-mux.h>
- #include <linux/mfd/syscon.h>
- #include <linux/module.h>
- #include <linux/of_device.h>
-@@ -41,14 +42,14 @@
- * This value is used for disabling properly EMAC
- * and used as a good starting value in case of the
- * boot process(uboot) leave some stuff.
-- * @internal_phy: Does the MAC embed an internal PHY
-+ * @soc_has_internal_phy: Does the MAC embed an internal PHY
- * @support_mii: Does the MAC handle MII
- * @support_rmii: Does the MAC handle RMII
- * @support_rgmii: Does the MAC handle RGMII
- */
- struct emac_variant {
- u32 default_syscon_value;
-- int internal_phy;
-+ bool soc_has_internal_phy;
- bool support_mii;
- bool support_rmii;
- bool support_rgmii;
-@@ -61,7 +62,8 @@ struct emac_variant {
- * @rst_ephy: reference to the optional EPHY reset for the internal PHY
- * @variant: reference to the current board variant
- * @regmap: regmap for using the syscon
-- * @use_internal_phy: Does the current PHY choice imply using the internal PHY
-+ * @internal_phy_powered: Does the internal PHY is enabled
-+ * @mux_handle: Internal pointer used by mdio-mux lib
- */
- struct sunxi_priv_data {
- struct clk *tx_clk;
-@@ -70,12 +72,13 @@ struct sunxi_priv_data {
- struct reset_control *rst_ephy;
- const struct emac_variant *variant;
- struct regmap *regmap;
-- bool use_internal_phy;
-+ bool internal_phy_powered;
-+ void *mux_handle;
- };
-
- static const struct emac_variant emac_variant_h3 = {
- .default_syscon_value = 0x58000,
-- .internal_phy = PHY_INTERFACE_MODE_MII,
-+ .soc_has_internal_phy = true,
- .support_mii = true,
- .support_rmii = true,
- .support_rgmii = true
-@@ -83,20 +86,20 @@ static const struct emac_variant emac_variant_h3 = {
-
- static const struct emac_variant emac_variant_v3s = {
- .default_syscon_value = 0x38000,
-- .internal_phy = PHY_INTERFACE_MODE_MII,
-+ .soc_has_internal_phy = true,
- .support_mii = true
- };
-
- static const struct emac_variant emac_variant_a83t = {
- .default_syscon_value = 0,
-- .internal_phy = 0,
-+ .soc_has_internal_phy = false,
- .support_mii = true,
- .support_rgmii = true
- };
-
- static const struct emac_variant emac_variant_a64 = {
- .default_syscon_value = 0,
-- .internal_phy = 0,
-+ .soc_has_internal_phy = false,
- .support_mii = true,
- .support_rmii = true,
- .support_rgmii = true
-@@ -195,6 +198,9 @@ static const struct emac_variant emac_variant_a64 = {
- #define H3_EPHY_LED_POL BIT(17) /* 1: active low, 0: active high */
- #define H3_EPHY_SHUTDOWN BIT(16) /* 1: shutdown, 0: power up */
- #define H3_EPHY_SELECT BIT(15) /* 1: internal PHY, 0: external PHY */
-+#define H3_EPHY_MUX_MASK (H3_EPHY_SHUTDOWN | H3_EPHY_SELECT)
-+#define DWMAC_SUN8I_MDIO_MUX_INTERNAL_ID 1
-+#define DWMAC_SUN8I_MDIO_MUX_EXTERNAL_ID 2
-
- /* H3/A64 specific bits */
- #define SYSCON_RMII_EN BIT(13) /* 1: enable RMII (overrides EPIT) */
-@@ -634,6 +640,159 @@ static int sun8i_dwmac_reset(struct stmmac_priv *priv)
- return 0;
- }
-
-+/* Search in mdio-mux node for internal PHY node and get its clk/reset */
-+static int get_ephy_nodes(struct stmmac_priv *priv)
-+{
-+ struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
-+ struct device_node *mdio_mux, *iphynode;
-+ struct device_node *mdio_internal;
-+ int ret;
-+
-+ mdio_mux = of_get_child_by_name(priv->device->of_node, "mdio-mux");
-+ if (!mdio_mux) {
-+ dev_err(priv->device, "Cannot get mdio-mux node\n");
-+ return -ENODEV;
-+ }
-+
-+ mdio_internal = of_find_compatible_node(mdio_mux, NULL,
-+ "allwinner,sun8i-h3-mdio-internal");
-+ if (!mdio_internal) {
-+ dev_err(priv->device, "Cannot get internal_mdio node\n");
-+ return -ENODEV;
-+ }
-+
-+ /* Seek for internal PHY */
-+ for_each_child_of_node(mdio_internal, iphynode) {
-+ gmac->ephy_clk = of_clk_get(iphynode, 0);
-+ if (IS_ERR(gmac->ephy_clk))
-+ continue;
-+ gmac->rst_ephy = of_reset_control_get_exclusive(iphynode, NULL);
-+ if (IS_ERR(gmac->rst_ephy)) {
-+ ret = PTR_ERR(gmac->rst_ephy);
-+ if (ret == -EPROBE_DEFER)
-+ return ret;
-+ continue;
-+ }
-+ dev_info(priv->device, "Found internal PHY node\n");
-+ return 0;
-+ }
-+ return -ENODEV;
-+}
-+
-+static int sun8i_dwmac_power_internal_phy(struct stmmac_priv *priv)
-+{
-+ struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
-+ int ret;
-+
-+ if (gmac->internal_phy_powered) {
-+ dev_warn(priv->device, "Internal PHY already powered\n");
-+ return 0;
-+ }
-+
-+ dev_info(priv->device, "Powering internal PHY\n");
-+ ret = clk_prepare_enable(gmac->ephy_clk);
-+ if (ret) {
-+ dev_err(priv->device, "Cannot enable internal PHY\n");
-+ return ret;
-+ }
-+
-+ /* Make sure the EPHY is properly reseted, as U-Boot may leave
-+ * it at deasserted state, and thus it may fail to reset EMAC.
-+ */
-+ reset_control_assert(gmac->rst_ephy);
-+
-+ ret = reset_control_deassert(gmac->rst_ephy);
-+ if (ret) {
-+ dev_err(priv->device, "Cannot deassert internal phy\n");
-+ clk_disable_unprepare(gmac->ephy_clk);
-+ return ret;
-+ }
-+
-+ gmac->internal_phy_powered = true;
-+
-+ return 0;
-+}
-+
-+static int sun8i_dwmac_unpower_internal_phy(struct sunxi_priv_data *gmac)
-+{
-+ if (!gmac->internal_phy_powered)
-+ return 0;
-+
-+ clk_disable_unprepare(gmac->ephy_clk);
-+ reset_control_assert(gmac->rst_ephy);
-+ gmac->internal_phy_powered = false;
-+ return 0;
-+}
-+
-+/* MDIO multiplexing switch function
-+ * This function is called by the mdio-mux layer when it thinks the mdio bus
-+ * multiplexer needs to switch.
-+ * 'current_child' is the current value of the mux register
-+ * 'desired_child' is the value of the 'reg' property of the target child MDIO
-+ * node.
-+ * The first time this function is called, current_child == -1.
-+ * If current_child == desired_child, then the mux is already set to the
-+ * correct bus.
-+ */
-+static int mdio_mux_syscon_switch_fn(int current_child, int desired_child,
-+ void *data)
-+{
-+ struct stmmac_priv *priv = data;
-+ struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
-+ u32 reg, val;
-+ int ret = 0;
-+ bool need_power_ephy = false;
-+
-+ if (current_child ^ desired_child) {
-+ regmap_read(gmac->regmap, SYSCON_EMAC_REG, ®);
-+ switch (desired_child) {
-+ case DWMAC_SUN8I_MDIO_MUX_INTERNAL_ID:
-+ dev_info(priv->device, "Switch mux to internal PHY");
-+ val = (reg & ~H3_EPHY_MUX_MASK) | H3_EPHY_SELECT;
-+
-+ need_power_ephy = true;
-+ break;
-+ case DWMAC_SUN8I_MDIO_MUX_EXTERNAL_ID:
-+ dev_info(priv->device, "Switch mux to external PHY");
-+ val = (reg & ~H3_EPHY_MUX_MASK) | H3_EPHY_SHUTDOWN;
-+ need_power_ephy = false;
-+ break;
-+ default:
-+ dev_err(priv->device, "Invalid child ID %x\n",
-+ desired_child);
-+ return -EINVAL;
-+ }
-+ regmap_write(gmac->regmap, SYSCON_EMAC_REG, val);
-+ if (need_power_ephy) {
-+ ret = sun8i_dwmac_power_internal_phy(priv);
-+ if (ret)
-+ return ret;
-+ } else {
-+ sun8i_dwmac_unpower_internal_phy(gmac);
-+ }
-+ /* After changing syscon value, the MAC need reset or it will
-+ * use the last value (and so the last PHY set).
-+ */
-+ ret = sun8i_dwmac_reset(priv);
-+ }
-+ return ret;
-+}
-+
-+static int sun8i_dwmac_register_mdio_mux(struct stmmac_priv *priv)
-+{
-+ int ret;
-+ struct device_node *mdio_mux;
-+ struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
-+
-+ mdio_mux = of_get_child_by_name(priv->device->of_node, "mdio-mux");
-+ if (!mdio_mux)
-+ return -ENODEV;
-+
-+ ret = mdio_mux_init(priv->device, mdio_mux, mdio_mux_syscon_switch_fn,
-+ &gmac->mux_handle, priv, priv->mii);
-+ return ret;
-+}
-+
- static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
- {
- struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
-@@ -648,35 +807,25 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
- "Current syscon value is not the default %x (expect %x)\n",
- val, reg);
-
-- if (gmac->variant->internal_phy) {
-- if (!gmac->use_internal_phy) {
-- /* switch to external PHY interface */
-- reg &= ~H3_EPHY_SELECT;
-- } else {
-- reg |= H3_EPHY_SELECT;
-- reg &= ~H3_EPHY_SHUTDOWN;
-- dev_dbg(priv->device, "Select internal_phy %x\n", reg);
--
-- if (of_property_read_bool(priv->plat->phy_node,
-- "allwinner,leds-active-low"))
-- reg |= H3_EPHY_LED_POL;
-- else
-- reg &= ~H3_EPHY_LED_POL;
--
-- /* Force EPHY xtal frequency to 24MHz. */
-- reg |= H3_EPHY_CLK_SEL;
--
-- ret = of_mdio_parse_addr(priv->device,
-- priv->plat->phy_node);
-- if (ret < 0) {
-- dev_err(priv->device, "Could not parse MDIO addr\n");
-- return ret;
-- }
-- /* of_mdio_parse_addr returns a valid (0 ~ 31) PHY
-- * address. No need to mask it again.
-- */
-- reg |= ret << H3_EPHY_ADDR_SHIFT;
-+ if (gmac->variant->soc_has_internal_phy) {
-+ if (of_property_read_bool(priv->plat->phy_node,
-+ "allwinner,leds-active-low"))
-+ reg |= H3_EPHY_LED_POL;
-+ else
-+ reg &= ~H3_EPHY_LED_POL;
-+
-+ /* Force EPHY xtal frequency to 24MHz. */
-+ reg |= H3_EPHY_CLK_SEL;
-+
-+ ret = of_mdio_parse_addr(priv->device, priv->plat->phy_node);
-+ if (ret < 0) {
-+ dev_err(priv->device, "Could not parse MDIO addr\n");
-+ return ret;
- }
-+ /* of_mdio_parse_addr returns a valid (0 ~ 31) PHY
-+ * address. No need to mask it again.
-+ */
-+ reg |= 1 << H3_EPHY_ADDR_SHIFT;
- }
-
- if (!of_property_read_u32(node, "allwinner,tx-delay-ps", &val)) {
-@@ -746,81 +895,21 @@ static void sun8i_dwmac_unset_syscon(struct sunxi_priv_data *gmac)
- regmap_write(gmac->regmap, SYSCON_EMAC_REG, reg);
- }
-
--static int sun8i_dwmac_power_internal_phy(struct stmmac_priv *priv)
-+static void sun8i_dwmac_exit(struct platform_device *pdev, void *priv)
- {
-- struct sunxi_priv_data *gmac = priv->plat->bsp_priv;
-- int ret;
--
-- if (!gmac->use_internal_phy)
-- return 0;
--
-- ret = clk_prepare_enable(gmac->ephy_clk);
-- if (ret) {
-- dev_err(priv->device, "Cannot enable ephy\n");
-- return ret;
-- }
--
-- /* Make sure the EPHY is properly reseted, as U-Boot may leave
-- * it at deasserted state, and thus it may fail to reset EMAC.
-- */
-- reset_control_assert(gmac->rst_ephy);
-+ struct sunxi_priv_data *gmac = priv;
-
-- ret = reset_control_deassert(gmac->rst_ephy);
-- if (ret) {
-- dev_err(priv->device, "Cannot deassert ephy\n");
-- clk_disable_unprepare(gmac->ephy_clk);
-- return ret;
-+ if (gmac->variant->soc_has_internal_phy) {
-+ /* sun8i_dwmac_exit could be called with mdiomux uninit */
-+ if (gmac->mux_handle)
-+ mdio_mux_uninit(gmac->mux_handle);
-+ if (gmac->internal_phy_powered)
-+ sun8i_dwmac_unpower_internal_phy(gmac);
- }
-
-- return 0;
--}
--
--static int sun8i_dwmac_unpower_internal_phy(struct sunxi_priv_data *gmac)
--{
-- if (!gmac->use_internal_phy)
-- return 0;
--
-- clk_disable_unprepare(gmac->ephy_clk);
-- reset_control_assert(gmac->rst_ephy);
-- return 0;
--}
--
--/* sun8i_power_phy() - Activate the PHY:
-- * In case of error, no need to call sun8i_unpower_phy(),
-- * it will be called anyway by sun8i_dwmac_exit()
-- */
--static int sun8i_power_phy(struct stmmac_priv *priv)
--{
-- int ret;
--
-- ret = sun8i_dwmac_power_internal_phy(priv);
-- if (ret)
-- return ret;
--
-- ret = sun8i_dwmac_set_syscon(priv);
-- if (ret)
-- return ret;
--
-- /* After changing syscon value, the MAC need reset or it will use
-- * the last value (and so the last PHY set.
-- */
-- ret = sun8i_dwmac_reset(priv);
-- if (ret)
-- return ret;
-- return 0;
--}
--
--static void sun8i_unpower_phy(struct sunxi_priv_data *gmac)
--{
- sun8i_dwmac_unset_syscon(gmac);
-- sun8i_dwmac_unpower_internal_phy(gmac);
--}
--
--static void sun8i_dwmac_exit(struct platform_device *pdev, void *priv)
--{
-- struct sunxi_priv_data *gmac = priv;
-
-- sun8i_unpower_phy(gmac);
-+ reset_control_put(gmac->rst_ephy);
-
- clk_disable_unprepare(gmac->tx_clk);
-
-@@ -849,7 +938,7 @@ static struct mac_device_info *sun8i_dwmac_setup(void *ppriv)
- if (!mac)
- return NULL;
-
-- ret = sun8i_power_phy(priv);
-+ ret = sun8i_dwmac_set_syscon(priv);
- if (ret)
- return NULL;
-
-@@ -889,6 +978,8 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
- struct sunxi_priv_data *gmac;
- struct device *dev = &pdev->dev;
- int ret;
-+ struct stmmac_priv *priv;
-+ struct net_device *ndev;
-
- ret = stmmac_get_platform_resources(pdev, &stmmac_res);
- if (ret)
-@@ -932,29 +1023,6 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
- }
-
- plat_dat->interface = of_get_phy_mode(dev->of_node);
-- if (plat_dat->interface == gmac->variant->internal_phy) {
-- dev_info(&pdev->dev, "Will use internal PHY\n");
-- gmac->use_internal_phy = true;
-- gmac->ephy_clk = of_clk_get(plat_dat->phy_node, 0);
-- if (IS_ERR(gmac->ephy_clk)) {
-- ret = PTR_ERR(gmac->ephy_clk);
-- dev_err(&pdev->dev, "Cannot get EPHY clock: %d\n", ret);
-- return -EINVAL;
-- }
--
-- gmac->rst_ephy = of_reset_control_get(plat_dat->phy_node, NULL);
-- if (IS_ERR(gmac->rst_ephy)) {
-- ret = PTR_ERR(gmac->rst_ephy);
-- if (ret == -EPROBE_DEFER)
-- return ret;
-- dev_err(&pdev->dev, "No EPHY reset control found %d\n",
-- ret);
-- return -EINVAL;
-- }
-- } else {
-- dev_info(&pdev->dev, "Will use external PHY\n");
-- gmac->use_internal_phy = false;
-- }
-
- /* platform data specifying hardware features and callbacks.
- * hardware features were copied from Allwinner drivers.
-@@ -973,9 +1041,34 @@ static int sun8i_dwmac_probe(struct platform_device *pdev)
-
- ret = stmmac_dvr_probe(&pdev->dev, plat_dat, &stmmac_res);
- if (ret)
-- sun8i_dwmac_exit(pdev, plat_dat->bsp_priv);
-+ goto dwmac_exit;
-+
-+ ndev = dev_get_drvdata(&pdev->dev);
-+ priv = netdev_priv(ndev);
-+ /* The mux must be registered after parent MDIO
-+ * so after stmmac_dvr_probe()
-+ */
-+ if (gmac->variant->soc_has_internal_phy) {
-+ ret = get_ephy_nodes(priv);
-+ if (ret)
-+ goto dwmac_exit;
-+ ret = sun8i_dwmac_register_mdio_mux(priv);
-+ if (ret) {
-+ dev_err(&pdev->dev, "Failed to register mux\n");
-+ goto dwmac_mux;
-+ }
-+ } else {
-+ ret = sun8i_dwmac_reset(priv);
-+ if (ret)
-+ goto dwmac_exit;
-+ }
-
- return ret;
-+dwmac_mux:
-+ sun8i_dwmac_unset_syscon(gmac);
-+dwmac_exit:
-+ sun8i_dwmac_exit(pdev, plat_dat->bsp_priv);
-+return ret;
- }
-
- static const struct of_device_id sun8i_dwmac_match[] = {
---
-2.14.3
-
-From f58f11ebb67468471ed8f232c576f348dd1a32b1 Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 24 Oct 2017 19:57:14 +0200
-Subject: [PATCH 03/11] net: stmmac: sun8i: Restore the compatibles
-
-The original dwmac-sun8i DT bindings have some issue on how to handle
-integrated PHY and was reverted in last RC of 4.13.
-But now we have a solution so we need to get back that was reverted.
-
-This patch restore compatibles about dwmac-sun8i
-This reverts commit ad4540cc5aa3 ("net: stmmac: sun8i: Remove the compatibles")
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
----
- drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 8 ++++++++
- 1 file changed, 8 insertions(+)
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-index b3eb344bb158..e5ff734d4f9b 100644
---- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-@@ -1072,6 +1072,14 @@ return ret;
- }
-
- static const struct of_device_id sun8i_dwmac_match[] = {
-+ { .compatible = "allwinner,sun8i-h3-emac",
-+ .data = &emac_variant_h3 },
-+ { .compatible = "allwinner,sun8i-v3s-emac",
-+ .data = &emac_variant_v3s },
-+ { .compatible = "allwinner,sun8i-a83t-emac",
-+ .data = &emac_variant_a83t },
-+ { .compatible = "allwinner,sun50i-a64-emac",
-+ .data = &emac_variant_a64 },
- { }
- };
- MODULE_DEVICE_TABLE(of, sun8i_dwmac_match);
---
-2.14.3
-
-From 54678636d98cd9625f342c831015e302642bf104 Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 31 Oct 2017 09:19:08 +0100
-Subject: [PATCH 04/11] dt-bindings: net: Restore sun8i dwmac binding
-
-The original dwmac-sun8i DT bindings have some issue on how to handle
-integrated PHY and was reverted in last RC of 4.13.
-But now we have a solution so we need to get back that was reverted.
-
-This patch restore dt-bindings documentation about dwmac-sun8i
-This reverts commit 8aa33ec2f481 ("dt-bindings: net: Revert sun8i dwmac binding")
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Rob Herring <robh(a)kernel.org>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
----
- .../devicetree/bindings/net/dwmac-sun8i.txt | 84 ++++++++++++++++++++++
- 1 file changed, 84 insertions(+)
- create mode 100644 Documentation/devicetree/bindings/net/dwmac-sun8i.txt
-
-diff --git a/Documentation/devicetree/bindings/net/dwmac-sun8i.txt b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
-new file mode 100644
-index 000000000000..725f3b187886
---- /dev/null
-+++ b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
-@@ -0,0 +1,84 @@
-+* Allwinner sun8i GMAC ethernet controller
-+
-+This device is a platform glue layer for stmmac.
-+Please see stmmac.txt for the other unchanged properties.
-+
-+Required properties:
-+- compatible: should be one of the following string:
-+ "allwinner,sun8i-a83t-emac"
-+ "allwinner,sun8i-h3-emac"
-+ "allwinner,sun8i-v3s-emac"
-+ "allwinner,sun50i-a64-emac"
-+- reg: address and length of the register for the device.
-+- interrupts: interrupt for the device
-+- interrupt-names: should be "macirq"
-+- clocks: A phandle to the reference clock for this device
-+- clock-names: should be "stmmaceth"
-+- resets: A phandle to the reset control for this device
-+- reset-names: should be "stmmaceth"
-+- phy-mode: See ethernet.txt
-+- phy-handle: See ethernet.txt
-+- #address-cells: shall be 1
-+- #size-cells: shall be 0
-+- syscon: A phandle to the syscon of the SoC with one of the following
-+ compatible string:
-+ - allwinner,sun8i-h3-system-controller
-+ - allwinner,sun8i-v3s-system-controller
-+ - allwinner,sun50i-a64-system-controller
-+ - allwinner,sun8i-a83t-system-controller
-+
-+Optional properties:
-+- allwinner,tx-delay-ps: TX clock delay chain value in ps. Range value is 0-700. Default is 0)
-+- allwinner,rx-delay-ps: RX clock delay chain value in ps. Range value is 0-3100. Default is 0)
-+Both delay properties need to be a multiple of 100. They control the delay for
-+external PHY.
-+
-+Optional properties for the following compatibles:
-+ - "allwinner,sun8i-h3-emac",
-+ - "allwinner,sun8i-v3s-emac":
-+- allwinner,leds-active-low: EPHY LEDs are active low
-+
-+Required child node of emac:
-+- mdio bus node: should be named mdio
-+
-+Required properties of the mdio node:
-+- #address-cells: shall be 1
-+- #size-cells: shall be 0
-+
-+The device node referenced by "phy" or "phy-handle" should be a child node
-+of the mdio node. See phy.txt for the generic PHY bindings.
-+
-+Required properties of the phy node with the following compatibles:
-+ - "allwinner,sun8i-h3-emac",
-+ - "allwinner,sun8i-v3s-emac":
-+- clocks: a phandle to the reference clock for the EPHY
-+- resets: a phandle to the reset control for the EPHY
-+
-+Example:
-+
-+emac: ethernet@1c0b000 {
-+ compatible = "allwinner,sun8i-h3-emac";
-+ syscon = <&syscon>;
-+ reg = <0x01c0b000 0x104>;
-+ interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
-+ interrupt-names = "macirq";
-+ resets = <&ccu RST_BUS_EMAC>;
-+ reset-names = "stmmaceth";
-+ clocks = <&ccu CLK_BUS_EMAC>;
-+ clock-names = "stmmaceth";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ phy-handle = <&int_mii_phy>;
-+ phy-mode = "mii";
-+ allwinner,leds-active-low;
-+ mdio: mdio {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ int_mii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ clocks = <&ccu CLK_BUS_EPHY>;
-+ resets = <&ccu RST_BUS_EPHY>;
-+ };
-+ };
-+};
---
-2.14.3
-
-From 227bc8c6bfad58c32c7a6c3bbc13d99eb6d266c0 Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 31 Oct 2017 09:19:09 +0100
-Subject: [PATCH 05/11] dt-bindings: net: dwmac-sun8i: update documentation
- about integrated PHY
-
-This patch add documentation about the MDIO switch used on sun8i-h3-emac
-for integrated PHY.
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
-Reviewed-by: Andrew Lunn <andrew(a)lunn.ch>
----
- .../devicetree/bindings/net/dwmac-sun8i.txt | 147 +++++++++++++++++++--
- 1 file changed, 135 insertions(+), 12 deletions(-)
-
-diff --git a/Documentation/devicetree/bindings/net/dwmac-sun8i.txt b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
-index 725f3b187886..3d6d5fa0c4d5 100644
---- a/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
-+++ b/Documentation/devicetree/bindings/net/dwmac-sun8i.txt
-@@ -4,18 +4,18 @@ This device is a platform glue layer for stmmac.
- Please see stmmac.txt for the other unchanged properties.
-
- Required properties:
--- compatible: should be one of the following string:
-+- compatible: must be one of the following string:
- "allwinner,sun8i-a83t-emac"
- "allwinner,sun8i-h3-emac"
- "allwinner,sun8i-v3s-emac"
- "allwinner,sun50i-a64-emac"
- - reg: address and length of the register for the device.
- - interrupts: interrupt for the device
--- interrupt-names: should be "macirq"
-+- interrupt-names: must be "macirq"
- - clocks: A phandle to the reference clock for this device
--- clock-names: should be "stmmaceth"
-+- clock-names: must be "stmmaceth"
- - resets: A phandle to the reset control for this device
--- reset-names: should be "stmmaceth"
-+- reset-names: must be "stmmaceth"
- - phy-mode: See ethernet.txt
- - phy-handle: See ethernet.txt
- - #address-cells: shall be 1
-@@ -39,23 +39,42 @@ Optional properties for the following compatibles:
- - allwinner,leds-active-low: EPHY LEDs are active low
-
- Required child node of emac:
--- mdio bus node: should be named mdio
-+- mdio bus node: should be named mdio with compatible "snps,dwmac-mdio"
-
- Required properties of the mdio node:
- - #address-cells: shall be 1
- - #size-cells: shall be 0
-
--The device node referenced by "phy" or "phy-handle" should be a child node
-+The device node referenced by "phy" or "phy-handle" must be a child node
- of the mdio node. See phy.txt for the generic PHY bindings.
-
--Required properties of the phy node with the following compatibles:
-+The following compatibles require that the emac node have a mdio-mux child
-+node called "mdio-mux":
-+ - "allwinner,sun8i-h3-emac"
-+ - "allwinner,sun8i-v3s-emac":
-+Required properties for the mdio-mux node:
-+ - compatible = "allwinner,sun8i-h3-mdio-mux"
-+ - mdio-parent-bus: a phandle to EMAC mdio
-+ - one child mdio for the integrated mdio with the compatible
-+ "allwinner,sun8i-h3-mdio-internal"
-+ - one child mdio for the external mdio if present (V3s have none)
-+Required properties for the mdio-mux children node:
-+ - reg: 1 for internal MDIO bus, 2 for external MDIO bus
-+
-+The following compatibles require a PHY node representing the integrated
-+PHY, under the integrated MDIO bus node if an mdio-mux node is used:
- - "allwinner,sun8i-h3-emac",
- - "allwinner,sun8i-v3s-emac":
-+
-+Additional information regarding generic multiplexer properties can be found
-+at Documentation/devicetree/bindings/net/mdio-mux.txt
-+
-+Required properties of the integrated phy node:
- - clocks: a phandle to the reference clock for the EPHY
- - resets: a phandle to the reset control for the EPHY
-+- Must be a child of the integrated mdio
-
--Example:
--
-+Example with integrated PHY:
- emac: ethernet@1c0b000 {
- compatible = "allwinner,sun8i-h3-emac";
- syscon = <&syscon>;
-@@ -72,13 +91,117 @@ emac: ethernet@1c0b000 {
- phy-handle = <&int_mii_phy>;
- phy-mode = "mii";
- allwinner,leds-active-low;
-+
-+ mdio: mdio {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ compatible = "snps,dwmac-mdio";
-+ };
-+
-+ mdio-mux {
-+ compatible = "mdio-mux", "allwinner,sun8i-h3-mdio-mux";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ mdio-parent-bus = <&mdio>;
-+
-+ int_mdio: mdio@1 {
-+ compatible = "allwinner,sun8i-h3-mdio-internal";
-+ reg = <1>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ int_mii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ clocks = <&ccu CLK_BUS_EPHY>;
-+ resets = <&ccu RST_BUS_EPHY>;
-+ phy-is-integrated;
-+ };
-+ };
-+ ext_mdio: mdio@2 {
-+ reg = <2>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ };
-+ };
-+};
-+
-+Example with external PHY:
-+emac: ethernet@1c0b000 {
-+ compatible = "allwinner,sun8i-h3-emac";
-+ syscon = <&syscon>;
-+ reg = <0x01c0b000 0x104>;
-+ interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
-+ interrupt-names = "macirq";
-+ resets = <&ccu RST_BUS_EMAC>;
-+ reset-names = "stmmaceth";
-+ clocks = <&ccu CLK_BUS_EMAC>;
-+ clock-names = "stmmaceth";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+ allwinner,leds-active-low;
-+
-+ mdio: mdio {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ compatible = "snps,dwmac-mdio";
-+ };
-+
-+ mdio-mux {
-+ compatible = "allwinner,sun8i-h3-mdio-mux";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ mdio-parent-bus = <&mdio>;
-+
-+ int_mdio: mdio@1 {
-+ compatible = "allwinner,sun8i-h3-mdio-internal";
-+ reg = <1>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ int_mii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ clocks = <&ccu CLK_BUS_EPHY>;
-+ resets = <&ccu RST_BUS_EPHY>;
-+ };
-+ };
-+ ext_mdio: mdio@2 {
-+ reg = <2>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ reg = <1>;
-+ };
-+ }:
-+ };
-+};
-+
-+Example with SoC without integrated PHY
-+
-+emac: ethernet@1c0b000 {
-+ compatible = "allwinner,sun8i-a83t-emac";
-+ syscon = <&syscon>;
-+ reg = <0x01c0b000 0x104>;
-+ interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
-+ interrupt-names = "macirq";
-+ resets = <&ccu RST_BUS_EMAC>;
-+ reset-names = "stmmaceth";
-+ clocks = <&ccu CLK_BUS_EMAC>;
-+ clock-names = "stmmaceth";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+
- mdio: mdio {
-+ compatible = "snps,dwmac-mdio";
- #address-cells = <1>;
- #size-cells = <0>;
-- int_mii_phy: ethernet-phy@1 {
-+ ext_rgmii_phy: ethernet-phy@1 {
- reg = <1>;
-- clocks = <&ccu CLK_BUS_EPHY>;
-- resets = <&ccu RST_BUS_EPHY>;
- };
- };
- };
---
-2.14.3
-
-From 1de79efa35a1130c7a085f62b9d9b666d79b9a89 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson(a)gmail.com>
-Date: Wed, 1 Nov 2017 14:04:20 +0000
-Subject: [PATCH 06/11] arm: dts: sunxi: h3/h5: Restore EMAC changes
-
-The original dwmac-sun8i DT bindings have some issue on how to handle
-integrated PHY and was reverted in last RC of 4.13.
-But now we have a solution so we need to get back that was reverted.
-
-This patch restore sunxi-h3-h5.dtsi
-This reverts partially commit fe45174b72ae ("arm: dts: sunxi: Revert EMAC changes")
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
----
- arch/arm/boot/dts/sunxi-h3-h5.dtsi | 26 ++++++++++++++++++++++++++
- 1 file changed, 26 insertions(+)
-
-diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-index 11240a8313c2..d38282b9e5d4 100644
---- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-@@ -391,6 +391,32 @@
- clocks = <&osc24M>;
- };
-
-+ emac: ethernet@1c30000 {
-+ compatible = "allwinner,sun8i-h3-emac";
-+ syscon = <&syscon>;
-+ reg = <0x01c30000 0x10000>;
-+ interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
-+ interrupt-names = "macirq";
-+ resets = <&ccu RST_BUS_EMAC>;
-+ reset-names = "stmmaceth";
-+ clocks = <&ccu CLK_BUS_EMAC>;
-+ clock-names = "stmmaceth";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ status = "disabled";
-+
-+ mdio: mdio {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ int_mii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ clocks = <&ccu CLK_BUS_EPHY>;
-+ resets = <&ccu RST_BUS_EPHY>;
-+ };
-+ };
-+ };
-+
- spi0: spi@01c68000 {
- compatible = "allwinner,sun8i-h3-spi";
- reg = <0x01c68000 0x1000>;
---
-2.14.3
-
-From 65233cba93184e0efa8d94f907d65af947d197a1 Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 31 Oct 2017 09:19:11 +0100
-Subject: [PATCH 07/11] ARM: dts: sunxi: h3/h5: represent the mdio switch used
- by sun8i-h3-emac
-
-Since dwmac-sun8i could use either an integrated PHY or an external PHY
-(which could be at same MDIO address), we need to represent this selection
-by a MDIO switch.
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
-Reviewed-by: Andrew Lunn <andrew(a)lunn.ch>
----
- arch/arm/boot/dts/sunxi-h3-h5.dtsi | 31 +++++++++++++++++++++++++++----
- 1 file changed, 27 insertions(+), 4 deletions(-)
-
-diff --git a/arch/arm/boot/dts/sunxi-h3-h5.dtsi b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-index d38282b9e5d4..2721b39c1875 100644
---- a/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-+++ b/arch/arm/boot/dts/sunxi-h3-h5.dtsi
-@@ -408,11 +408,34 @@
- mdio: mdio {
- #address-cells = <1>;
- #size-cells = <0>;
-- int_mii_phy: ethernet-phy@1 {
-- compatible = "ethernet-phy-ieee802.3-c22";
-+ compatible = "snps,dwmac-mdio";
-+ };
-+
-+ mdio-mux {
-+ compatible = "allwinner,sun8i-h3-mdio-mux";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ mdio-parent-bus = <&mdio>;
-+ /* Only one MDIO is usable at the time */
-+ internal_mdio: mdio@1 {
-+ compatible = "allwinner,sun8i-h3-mdio-internal";
- reg = <1>;
-- clocks = <&ccu CLK_BUS_EPHY>;
-- resets = <&ccu RST_BUS_EPHY>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ int_mii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ clocks = <&ccu CLK_BUS_EPHY>;
-+ resets = <&ccu RST_BUS_EPHY>;
-+ };
-+ };
-+
-+ external_mdio: mdio@2 {
-+ reg = <2>;
-+ #address-cells = <1>;
-+ #size-cells = <0>;
- };
- };
- };
---
-2.14.3
-
-From b705315d36dbe1b31062f30c987b3a502b437c85 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson(a)gmail.com>
-Date: Wed, 1 Nov 2017 14:08:45 +0000
-Subject: [PATCH 08/11] ARM: dts: sunxi: Restore EMAC changes (boards)
-
-The original dwmac-sun8i DT bindings have some issue on how to handle
-integrated PHY and was reverted in last RC of 4.13.
-But now we have a solution so we need to get back that was reverted.
-
-This patch restore all boards DT about dwmac-sun8i
-This reverts partially commit fe45174b72ae ("arm: dts: sunxi: Revert EMAC changes")
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
----
- arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts | 9 +++++++++
- arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts | 19 +++++++++++++++++++
- arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts | 19 +++++++++++++++++++
- arch/arm/boot/dts/sun8i-h3-nanopi-neo.dts | 7 +++++++
- arch/arm/boot/dts/sun8i-h3-orangepi-2.dts | 8 ++++++++
- arch/arm/boot/dts/sun8i-h3-orangepi-one.dts | 8 ++++++++
- arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts | 5 +++++
- arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts | 8 ++++++++
- arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts | 22 ++++++++++++++++++++++
- arch/arm/boot/dts/sun8i-h3-orangepi-plus2e.dts | 16 ++++++++++++++++
- 10 files changed, 121 insertions(+)
-
-diff --git a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
-index b1502df7b509..6713d0f2b3f4 100644
---- a/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
-+++ b/arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts
-@@ -56,6 +56,8 @@
-
- aliases {
- serial0 = &uart0;
-+ /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
-+ ethernet0 = &emac;
- ethernet1 = &xr819;
- };
-
-@@ -102,6 +104,13 @@
- status = "okay";
- };
-
-+&emac {
-+ phy-handle = <&int_mii_phy>;
-+ phy-mode = "mii";
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-+
- &mmc0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc0_pins_a>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts b/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
-index a337af1de322..3f95d806355b 100644
---- a/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts
-@@ -52,6 +52,7 @@
- compatible = "sinovoip,bpi-m2-plus", "allwinner,sun8i-h3";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- serial1 = &uart1;
- };
-@@ -114,6 +115,24 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <0>;
-+ };
-+};
-+
- &ir {
- pinctrl-names = "default";
- pinctrl-0 = <&ir_pins_a>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts b/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts
-index 8ddd1b2cc097..ef0371811296 100644
---- a/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts
-@@ -62,3 +62,22 @@
- &ohci2 {
- status = "okay";
- };
-+
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+
-+ allwinner,leds-active-low;
-+
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <7>;
-+ };
-+};
-diff --git a/arch/arm/boot/dts/sun8i-h3-nanopi-neo.dts b/arch/arm/boot/dts/sun8i-h3-nanopi-neo.dts
-index 8d2cc6e9a03f..78f6c24952dd 100644
---- a/arch/arm/boot/dts/sun8i-h3-nanopi-neo.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-nanopi-neo.dts
-@@ -46,3 +46,10 @@
- model = "FriendlyARM NanoPi NEO";
- compatible = "friendlyarm,nanopi-neo", "allwinner,sun8i-h3";
- };
-+
-+&emac {
-+ phy-handle = <&int_mii_phy>;
-+ phy-mode = "mii";
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
-index 8ff71b1bb45b..17cdeae19c6f 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-2.dts
-@@ -54,6 +54,7 @@
- aliases {
- serial0 = &uart0;
- /* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
-+ ethernet0 = &emac;
- ethernet1 = &rtl8189;
- };
-
-@@ -117,6 +118,13 @@
- status = "okay";
- };
-
-+&emac {
-+ phy-handle = <&int_mii_phy>;
-+ phy-mode = "mii";
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-+
- &ir {
- pinctrl-names = "default";
- pinctrl-0 = <&ir_pins_a>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
-index 5fea430e0eb1..6880268e8b87 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-one.dts
-@@ -52,6 +52,7 @@
- compatible = "xunlong,orangepi-one", "allwinner,sun8i-h3";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- };
-
-@@ -97,6 +98,13 @@
- status = "okay";
- };
-
-+&emac {
-+ phy-handle = <&int_mii_phy>;
-+ phy-mode = "mii";
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-+
- &mmc0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
-index 8b93f5c781a7..a10281b455f5 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc-plus.dts
-@@ -53,6 +53,11 @@
- };
- };
-
-+&emac {
-+ /* LEDs changed to active high on the plus */
-+ /delete-property/ allwinner,leds-active-low;
-+};
-+
- &mmc1 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc1_pins_a>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
-index 1a044b17d6c6..998b60f8d295 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-pc.dts
-@@ -52,6 +52,7 @@
- compatible = "xunlong,orangepi-pc", "allwinner,sun8i-h3";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- };
-
-@@ -113,6 +114,13 @@
- status = "okay";
- };
-
-+&emac {
-+ phy-handle = <&int_mii_phy>;
-+ phy-mode = "mii";
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-+
- &ir {
- pinctrl-names = "default";
- pinctrl-0 = <&ir_pins_a>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-index 828ae7a526d9..3002c025e187 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-plus.dts
-@@ -47,6 +47,10 @@
- model = "Xunlong Orange Pi Plus / Plus 2";
- compatible = "xunlong,orangepi-plus", "allwinner,sun8i-h3";
-
-+ aliases {
-+ ethernet0 = &emac;
-+ };
-+
- reg_gmac_3v3: gmac-3v3 {
- compatible = "regulator-fixed";
- regulator-name = "gmac-3v3";
-@@ -74,6 +78,24 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+
-+ allwinner,leds-active-low;
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <0>;
-+ };
-+};
-+
- &mmc2 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc2_8bit_pins>;
-diff --git a/arch/arm/boot/dts/sun8i-h3-orangepi-plus2e.dts b/arch/arm/boot/dts/sun8i-h3-orangepi-plus2e.dts
-index 97920b12a944..6dbf7b2e0c13 100644
---- a/arch/arm/boot/dts/sun8i-h3-orangepi-plus2e.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-orangepi-plus2e.dts
-@@ -61,3 +61,19 @@
- gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>; /* PD6 */
- };
- };
-+
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
---
-2.14.3
-
-From 516b88bfa40cf54732d2ba5e689fdf592a742ec3 Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 31 Oct 2017 09:19:13 +0100
-Subject: [PATCH 09/11] arm64: dts: allwinner: A64: Restore EMAC changes
-
-The original dwmac-sun8i DT bindings have some issue on how to handle
-integrated PHY and was reverted in last RC of 4.13.
-But now we have a solution so we need to get back that was reverted.
-
-This patch restore arm64 DT about dwmac-sun8i for A64
-This reverts commit 87e1f5e8bb4b ("arm64: dts: allwinner: Revert EMAC changes")
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
----
- .../boot/dts/allwinner/sun50i-a64-bananapi-m64.dts | 16 ++++++++++++++++
- .../boot/dts/allwinner/sun50i-a64-pine64-plus.dts | 15 +++++++++++++++
- arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts | 17 +++++++++++++++++
- .../dts/allwinner/sun50i-a64-sopine-baseboard.dts | 16 ++++++++++++++++
- arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 20 ++++++++++++++++++++
- 5 files changed, 84 insertions(+)
-
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-index d347f52e27f6..45bdbfb96126 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-@@ -51,6 +51,7 @@
- compatible = "sinovoip,bananapi-m64", "allwinner,sun50i-a64";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- serial1 = &uart1;
- };
-@@ -69,6 +70,14 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&rgmii_pins>;
-+ phy-mode = "rgmii";
-+ phy-handle = <&ext_rgmii_phy>;
-+ status = "okay";
-+};
-+
- &i2c1 {
- pinctrl-names = "default";
- pinctrl-0 = <&i2c1_pins>;
-@@ -79,6 +88,13 @@
- bias-pull-up;
- };
-
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
-+
- &mmc0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc0_pins>;
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts
-index f82ccf332c0f..24f1aac366d6 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64-plus.dts
-@@ -48,3 +48,18 @@
-
- /* TODO: Camera, touchscreen, etc. */
- };
-+
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&rgmii_pins>;
-+ phy-mode = "rgmii";
-+ phy-handle = <&ext_rgmii_phy>;
-+ status = "okay";
-+};
-+
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-index d06e34b5d192..806442d3e846 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-@@ -51,6 +51,7 @@
- compatible = "pine64,pine64", "allwinner,sun50i-a64";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- serial1 = &uart1;
- serial2 = &uart2;
-@@ -71,6 +72,15 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&rmii_pins>;
-+ phy-mode = "rmii";
-+ phy-handle = <&ext_rmii_phy1>;
-+ status = "okay";
-+
-+};
-+
- &i2c1 {
- pinctrl-names = "default";
- pinctrl-0 = <&i2c1_pins>;
-@@ -81,6 +91,13 @@
- bias-pull-up;
- };
-
-+&mdio {
-+ ext_rmii_phy1: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
-+
- &mmc0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc0_pins>;
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
-index 17ccc12b58df..0eb2acedf8c3 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
-@@ -53,6 +53,7 @@
- "allwinner,sun50i-a64";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- };
-
-@@ -76,6 +77,21 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&rgmii_pins>;
-+ phy-mode = "rgmii";
-+ phy-handle = <&ext_rgmii_phy>;
-+ status = "okay";
-+};
-+
-+&mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
-+
- &mmc2 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc2_pins>;
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-index 8c8db1b057df..50f17bab0c07 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-@@ -449,6 +449,26 @@
- #size-cells = <0>;
- };
-
-+ emac: ethernet@1c30000 {
-+ compatible = "allwinner,sun50i-a64-emac";
-+ syscon = <&syscon>;
-+ reg = <0x01c30000 0x10000>;
-+ interrupts = <GIC_SPI 82 IRQ_TYPE_LEVEL_HIGH>;
-+ interrupt-names = "macirq";
-+ resets = <&ccu RST_BUS_EMAC>;
-+ reset-names = "stmmaceth";
-+ clocks = <&ccu CLK_BUS_EMAC>;
-+ clock-names = "stmmaceth";
-+ status = "disabled";
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+
-+ mdio: mdio {
-+ #address-cells = <1>;
-+ #size-cells = <0>;
-+ };
-+ };
-+
- gic: interrupt-controller@1c81000 {
- compatible = "arm,gic-400";
- reg = <0x01c81000 0x1000>,
---
-2.14.3
-
-From 070173449eb88e9cf9c91889c77f53616911f4d0 Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 31 Oct 2017 09:19:14 +0100
-Subject: [PATCH 10/11] arm64: dts: allwinner: H5: Restore EMAC changes
-
-The original dwmac-sun8i DT bindings have some issue on how to handle
-integrated PHY and was reverted in last RC of 4.13.
-But now we have a solution so we need to get back that was reverted.
-
-This patch restore arm64 DT about dwmac-sun8i for H5
-This reverts a part of commit 87e1f5e8bb4b ("arm64: dts: allwinner: Revert EMAC changes")
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
----
- arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts | 17 +++++++++++++++++
- .../arm64/boot/dts/allwinner/sun50i-h5-orangepi-pc2.dts | 17 +++++++++++++++++
- .../boot/dts/allwinner/sun50i-h5-orangepi-prime.dts | 17 +++++++++++++++++
- 3 files changed, 51 insertions(+)
-
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts b/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts
-index 1c2387bd5df6..6eb8092d8e57 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-h5-nanopi-neo2.dts
-@@ -50,6 +50,7 @@
- compatible = "friendlyarm,nanopi-neo2", "allwinner,sun50i-h5";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- };
-
-@@ -108,6 +109,22 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@7 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <7>;
-+ };
-+};
-+
- &mmc0 {
- pinctrl-names = "default";
- pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-pc2.dts b/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-pc2.dts
-index 4f77c8470f6c..a0ca925175aa 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-pc2.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-pc2.dts
-@@ -59,6 +59,7 @@
- };
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- };
-
-@@ -136,6 +137,22 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
-+
- &ir {
- pinctrl-names = "default";
- pinctrl-0 = <&ir_pins_a>;
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-prime.dts b/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-prime.dts
-index 6be06873e5af..b47790650144 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-prime.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-h5-orangepi-prime.dts
-@@ -54,6 +54,7 @@
- compatible = "xunlong,orangepi-prime", "allwinner,sun50i-h5";
-
- aliases {
-+ ethernet0 = &emac;
- serial0 = &uart0;
- };
-
-@@ -143,6 +144,22 @@
- status = "okay";
- };
-
-+&emac {
-+ pinctrl-names = "default";
-+ pinctrl-0 = <&emac_rgmii_pins>;
-+ phy-supply = <®_gmac_3v3>;
-+ phy-handle = <&ext_rgmii_phy>;
-+ phy-mode = "rgmii";
-+ status = "okay";
-+};
-+
-+&external_mdio {
-+ ext_rgmii_phy: ethernet-phy@1 {
-+ compatible = "ethernet-phy-ieee802.3-c22";
-+ reg = <1>;
-+ };
-+};
-+
- &ir {
- pinctrl-names = "default";
- pinctrl-0 = <&ir_pins_a>;
---
-2.14.3
-
-From 63118a9f7808a0a67c23e7d276138c996e094eae Mon Sep 17 00:00:00 2001
-From: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Date: Tue, 31 Oct 2017 09:19:15 +0100
-Subject: [PATCH 11/11] arm64: dts: allwinner: add snps, dwmac-mdio compatible
- to emac/mdio
-
-stmmac bindings docs said that its mdio node must have
-compatible = "snps,dwmac-mdio";
-Since dwmac-sun8i does not have any good reasons to not doing it, all
-their MDIO node must have it.
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Acked-by: Florian Fainelli <f.fainelli(a)gmail.com>
----
- arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-index 50f17bab0c07..8fd75c95937a 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64.dtsi
-@@ -464,6 +464,7 @@
- #size-cells = <0>;
-
- mdio: mdio {
-+ compatible = "snps,dwmac-mdio";
- #address-cells = <1>;
- #size-cells = <0>;
- };
---
-2.14.3
-
-From patchwork Fri Nov 10 09:26:54 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: arm64: allwinner: a64: add Ethernet PHY regulator for several boards
-From: Icenowy Zheng <icenowy(a)aosc.io>
-X-Patchwork-Id: 10052659
-Message-Id: <20171110092654.10746-1-icenowy(a)aosc.io>
-To: Maxime Ripard <maxime.ripard(a)free-electrons.com>,
- Chen-Yu Tsai <wens(a)csie.org>
-Cc: linux-sunxi(a)googlegroups.com, linux-kernel(a)vger.kernel.org,
- linux-arm-kernel(a)lists.infradead.org, Icenowy Zheng <icenowy(a)aosc.io>
-Date: Fri, 10 Nov 2017 17:26:54 +0800
-
-On several A64 boards the Ethernet PHY is powered by the DC1SW regulator
-on the AXP803 PMIC.
-
-Add phy-handle property to these boards' emac node.
-
-Signed-off-by: Icenowy Zheng <icenowy(a)aosc.io>
-Acked-by: Corentin LABBE <clabbe.montjoie(a)gmail.com>
-Tested-by: Corentin LABBE <clabbe.montjoie(a)gmail.com>
----
- arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts | 1 +
- arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts | 1 +
- arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts | 1 +
- 3 files changed, 3 insertions(+)
-
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-index 45bdbfb96126..4a8d3f83a36e 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-bananapi-m64.dts
-@@ -75,6 +75,7 @@
- pinctrl-0 = <&rgmii_pins>;
- phy-mode = "rgmii";
- phy-handle = <&ext_rgmii_phy>;
-+ phy-supply = <®_dc1sw>;
- status = "okay";
- };
-
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-index 806442d3e846..604cdaedac38 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pine64.dts
-@@ -77,6 +77,7 @@
- pinctrl-0 = <&rmii_pins>;
- phy-mode = "rmii";
- phy-handle = <&ext_rmii_phy1>;
-+ phy-supply = <®_dc1sw>;
- status = "okay";
-
- };
-diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
-index 0eb2acedf8c3..a053a6ac5267 100644
---- a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
-+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
-@@ -82,6 +82,7 @@
- pinctrl-0 = <&rgmii_pins>;
- phy-mode = "rgmii";
- phy-handle = <&ext_rgmii_phy>;
-+ phy-supply = <®_dc1sw>;
- status = "okay";
- };
-
-From 79e7d6c8bfe67fce8c8fe4953e74ce7f420dd732 Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson(a)gmail.com>
-Date: Tue, 21 Nov 2017 15:43:19 +0000
-Subject: [PATCH] ARM: dts: sunxi: sun8i-h3-nanopi-m1-plus: Add missing
- regulator
-
-This patch add the missing regulator for sun8i-h3-nanopi-m1-plus.
-
-Fixes: ("ARM: dts: sunxi: Restore EMAC changes (boards)")
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
----
- arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts | 11 +++++++++++
- 1 file changed, 11 insertions(+)
-
-diff --git a/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts b/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts
-index ef0371811296..738ef1d9e844 100644
---- a/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts
-+++ b/arch/arm/boot/dts/sun8i-h3-nanopi-m1-plus.dts
-@@ -45,6 +45,17 @@
- / {
- model = "FriendlyArm NanoPi M1 Plus";
- compatible = "friendlyarm,nanopi-m1-plus", "allwinner,sun8i-h3";
-+
-+ reg_gmac_3v3: gmac-3v3 {
-+ compatible = "regulator-fixed";
-+ regulator-name = "gmac-3v3";
-+ regulator-min-microvolt = <3300000>;
-+ regulator-max-microvolt = <3300000>;
-+ startup-delay-us = <100000>;
-+ enable-active-high;
-+ gpio = <&pio 3 6 GPIO_ACTIVE_HIGH>;
-+ };
-+
- };
-
- &ehci1 {
---
-2.14.3
-
-From 4497478c60c04d2bf37082e27fc98f4f835db96b Mon Sep 17 00:00:00 2001
-From: Niklas Cassel <niklas.cassel(a)axis.com>
-Date: Tue, 14 Nov 2017 11:15:54 +0100
-Subject: net: stmmac: fix LPI transitioning for dwmac4
-
-The LPI transitioning logic in stmmac_main uses
-priv->tx_path_in_lpi_mode to enter/exit LPI.
-
-However, priv->tx_path_in_lpi_mode is assigned
-using the return value from host_irq_status().
-
-So for dwmac4, priv->tx_path_in_lpi_mode was always false,
-so stmmac_tx_clean() would always try to put us in eee mode,
-and stmmac_xmit() would never take us out of eee mode.
-
-To fix this, make host_irq_status() read and return the LPI
-irq status also for dwmac4.
-
-This also increments the existing LPI counters, so that
-ethtool --statistics shows LPI transitions also for dwmac4.
-
-For dwmac1000, irqs are enabled/disabled using the register
-named "Interrupt Mask Register", and thus setting a bit disables
-that specific irq.
-
-For dwmac4 the matching register is named "MAC_Interrupt_Enable",
-and thus setting a bit enables that specific irq.
-
-Looking at dwmac1000_core.c, the irqs that are always enabled are:
-LPI and PMT.
-
-Looking at dwmac4_core.c, the irqs that are always enabled are:
-PMT.
-
-To be able to read the LPI irq status, we need to enable the LPI
-irq also for dwmac4.
-
-Signed-off-by: Niklas Cassel <niklas.cassel(a)axis.com>
-Signed-off-by: David S. Miller <davem(a)davemloft.net>
----
- drivers/net/ethernet/stmicro/stmmac/dwmac4.h | 7 ++++++-
- drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c | 19 +++++++++++++++++++
- 2 files changed, 25 insertions(+), 1 deletion(-)
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
-index aeda3ab..789dad8 100644
---- a/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4.h
-@@ -98,7 +98,7 @@
- #define GMAC_PCS_IRQ_DEFAULT (GMAC_INT_RGSMIIS | GMAC_INT_PCS_LINK | \
- GMAC_INT_PCS_ANE)
-
--#define GMAC_INT_DEFAULT_MASK GMAC_INT_PMT_EN
-+#define GMAC_INT_DEFAULT_MASK (GMAC_INT_PMT_EN | GMAC_INT_LPI_EN)
-
- enum dwmac4_irq_status {
- time_stamp_irq = 0x00001000,
-@@ -106,6 +106,7 @@ enum dwmac4_irq_status {
- mmc_tx_irq = 0x00000400,
- mmc_rx_irq = 0x00000200,
- mmc_irq = 0x00000100,
-+ lpi_irq = 0x00000020,
- pmt_irq = 0x00000010,
- };
-
-@@ -132,6 +133,10 @@ enum power_event {
- #define GMAC4_LPI_CTRL_STATUS_LPITXA BIT(19) /* Enable LPI TX Automate */
- #define GMAC4_LPI_CTRL_STATUS_PLS BIT(17) /* PHY Link Status */
- #define GMAC4_LPI_CTRL_STATUS_LPIEN BIT(16) /* LPI Enable */
-+#define GMAC4_LPI_CTRL_STATUS_RLPIEX BIT(3) /* Receive LPI Exit */
-+#define GMAC4_LPI_CTRL_STATUS_RLPIEN BIT(2) /* Receive LPI Entry */
-+#define GMAC4_LPI_CTRL_STATUS_TLPIEX BIT(1) /* Transmit LPI Exit */
-+#define GMAC4_LPI_CTRL_STATUS_TLPIEN BIT(0) /* Transmit LPI Entry */
-
- /* MAC Debug bitmap */
- #define GMAC_DEBUG_TFCSTS_MASK GENMASK(18, 17)
-diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
-index 2f7d7ec..f3ed8f7 100644
---- a/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac4_core.c
-@@ -580,6 +580,25 @@ static int dwmac4_irq_status(struct mac_device_info *hw,
- x->irq_receive_pmt_irq_n++;
- }
-
-+ /* MAC tx/rx EEE LPI entry/exit interrupts */
-+ if (intr_status & lpi_irq) {
-+ /* Clear LPI interrupt by reading MAC_LPI_Control_Status */
-+ u32 status = readl(ioaddr + GMAC4_LPI_CTRL_STATUS);
-+
-+ if (status & GMAC4_LPI_CTRL_STATUS_TLPIEN) {
-+ ret |= CORE_IRQ_TX_PATH_IN_LPI_MODE;
-+ x->irq_tx_path_in_lpi_mode_n++;
-+ }
-+ if (status & GMAC4_LPI_CTRL_STATUS_TLPIEX) {
-+ ret |= CORE_IRQ_TX_PATH_EXIT_LPI_MODE;
-+ x->irq_tx_path_exit_lpi_mode_n++;
-+ }
-+ if (status & GMAC4_LPI_CTRL_STATUS_RLPIEN)
-+ x->irq_rx_path_in_lpi_mode_n++;
-+ if (status & GMAC4_LPI_CTRL_STATUS_RLPIEX)
-+ x->irq_rx_path_exit_lpi_mode_n++;
-+ }
-+
- dwmac_pcs_isr(ioaddr, GMAC_PCS_BASE, intr_status, x);
- if (intr_status & PCS_RGSMIIIS_IRQ)
- dwmac4_phystatus(ioaddr, x);
---
-cgit v1.1
-
-From 1c08ac0c4bd8e9d66c4dde29bc496c3b430dd028 Mon Sep 17 00:00:00 2001
-From: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Date: Tue, 28 Nov 2017 17:48:22 +0100
-Subject: net: stmmac: dwmac-sun8i: fix allwinner,leds-active-low handling
-
-The driver expect "allwinner,leds-active-low" to be in PHY node, but
-the binding doc expect it to be in MAC node.
-
-Since all board DT use it also in MAC node, the driver need to search
-allwinner,leds-active-low in MAC node.
-
-Signed-off-by: Corentin Labbe <clabbe.montjoie(a)gmail.com>
-Signed-off-by: David S. Miller <davem(a)davemloft.net>
----
- drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
-
-diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-index e5ff734..9eb7f65 100644
---- a/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-sun8i.c
-@@ -808,8 +808,7 @@ static int sun8i_dwmac_set_syscon(struct stmmac_priv *priv)
- val, reg);
-
- if (gmac->variant->soc_has_internal_phy) {
-- if (of_property_read_bool(priv->plat->phy_node,
-- "allwinner,leds-active-low"))
-+ if (of_property_read_bool(node, "allwinner,leds-active-low"))
- reg |= H3_EPHY_LED_POL;
- else
- reg &= ~H3_EPHY_LED_POL;
---
-cgit v1.1
-
diff --git a/arm-dts-imx6qdl-udoo-Disable-usbh1-to-avoid-kernel-hang.patch b/arm-dts-imx6qdl-udoo-Disable-usbh1-to-avoid-kernel-hang.patch
new file mode 100644
index 0000000..1100a14
--- /dev/null
+++ b/arm-dts-imx6qdl-udoo-Disable-usbh1-to-avoid-kernel-hang.patch
@@ -0,0 +1,41 @@
+From patchwork Thu Jan 18 12:34:18 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: ARM: dts: imx6qdl-udoo: Disable usbh1 to avoid kernel hang
+From: Fabio Estevam <fabio.estevam(a)nxp.com>
+X-Patchwork-Id: 10173115
+Message-Id: <1516278858-15464-1-git-send-email-fabio.estevam(a)nxp.com>
+To: <shawnguo(a)kernel.org>
+Cc: maggu2810(a)gmail.com, peter.chen(a)nxp.com, mail(a)maciej.szmigiero.name,
+ Fabio Estevam <fabio.estevam(a)nxp.com>, linux-arm-kernel(a)lists.infradead.org
+Date: Thu, 18 Jan 2018 10:34:18 -0200
+
+Currently the kernel hangs when USB Host1 is enabled due to the lack of
+support for controlling the USB hub clock and GPIO reset line.
+
+Peter Chen has made several attempts to fix this problem, but his series
+has not been applied yet, so better disable USB host1 for now to avoid
+the kernel hang.
+
+Signed-off-by: Fabio Estevam <fabio.estevam(a)nxp.com>
+Acked-by: Maciej S. Szmigiero <mail(a)maciej.szmigiero.name>
+Tested-by: Markus Rathgeb <maggu2810(a)gmail.com>
+---
+ arch/arm/boot/dts/imx6qdl-udoo.dtsi | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/arch/arm/boot/dts/imx6qdl-udoo.dtsi b/arch/arm/boot/dts/imx6qdl-udoo.dtsi
+index 4161b7d..1f0b9f6 100644
+--- a/arch/arm/boot/dts/imx6qdl-udoo.dtsi
++++ b/arch/arm/boot/dts/imx6qdl-udoo.dtsi
+@@ -274,7 +274,8 @@
+ pinctrl-0 = <&pinctrl_usbh>;
+ vbus-supply = <®_usb_h1_vbus>;
+ clocks = <&clks IMX6QDL_CLK_CKO>;
+- status = "okay";
++ /* currently USB support causes a kernel hang. Disable it for now */
++ status = "disabled";
+ };
+
+ &usdhc3 {
diff --git a/arm-exynos-fix-usb3.patch b/arm-exynos-fix-usb3.patch
deleted file mode 100644
index cb5828a..0000000
--- a/arm-exynos-fix-usb3.patch
+++ /dev/null
@@ -1,411 +0,0 @@
-From patchwork Mon Oct 9 12:00:50 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [PATCHv4,1/2] drivers: phy: add calibrate method
-From: Andrzej Pietrasiewicz <andrzej.p(a)samsung.com>
-X-Patchwork-Id: 9992829
-Message-Id: <1507550451-21324-2-git-send-email-andrzej.p(a)samsung.com>
-To: linux-samsung-soc(a)vger.kernel.org, linux-usb(a)vger.kernel.org,
- linux-arm-kernel(a)lists.infradead.org, devicetree(a)vger.kernel.org
-Cc: Mark Rutland <mark.rutland(a)arm.com>, Felipe Balbi <balbi(a)kernel.org>,
- Bartlomiej Zolnierkiewicz <b.zolnierkie(a)samsung.com>,
- Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>,
- Russell King <linux(a)armlinux.org.uk>,
- Krzysztof Kozlowski <krzk(a)kernel.org>,
- Kishon Vijay Abraham I <kishon(a)ti.com>,
- Rob Herring <robh+dt(a)kernel.org>, Kukjin Kim <kgene(a)kernel.org>,
- Andrzej Pietrasiewicz <andrzej.p(a)samsung.com>,
- Marek Szyprowski <m.szyprowski(a)samsung.com>
-Date: Mon, 09 Oct 2017 14:00:50 +0200
-
-Some quirky UDCs (like dwc3 on Exynos) need to have their phys calibrated e.g.
-for using super speed. This patch adds a new phy_calibrate() method.
-When the calibration should be used is dependent on actual chip.
-
-In case of dwc3 on Exynos the calibration must happen after usb_add_hcd()
-(while in host mode), because certain phy parameters like Tx LOS levels
-and boost levels need to be calibrated further post initialization of xHCI
-controller, to get SuperSpeed operations working. But an hcd must be
-prepared first in order to pass it to usb_add_hcd(), so, in particular, dwc3
-registers must be available first, and in order for the latter to happen
-the phys must be initialized. This poses a chicken and egg problem if
-the calibration were to be performed in phy_init(). To break the circular
-dependency a separate method is added which can be called at a desired
-moment after phy intialization.
-
-Signed-off-by: Andrzej Pietrasiewicz <andrzej.p(a)samsung.com>
----
- drivers/phy/phy-core.c | 15 +++++++++++++++
- include/linux/phy/phy.h | 10 ++++++++++
- 2 files changed, 25 insertions(+)
-
-diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
-index a268f4d..b4964b0 100644
---- a/drivers/phy/phy-core.c
-+++ b/drivers/phy/phy-core.c
-@@ -372,6 +372,21 @@ int phy_reset(struct phy *phy)
- }
- EXPORT_SYMBOL_GPL(phy_reset);
-
-+int phy_calibrate(struct phy *phy)
-+{
-+ int ret;
-+
-+ if (!phy || !phy->ops->calibrate)
-+ return 0;
-+
-+ mutex_lock(&phy->mutex);
-+ ret = phy->ops->calibrate(phy);
-+ mutex_unlock(&phy->mutex);
-+
-+ return ret;
-+}
-+EXPORT_SYMBOL_GPL(phy_calibrate);
-+
- /**
- * _of_phy_get() - lookup and obtain a reference to a phy by phandle
- * @np: device_node for which to get the phy
-diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
-index e694d40..87580c8 100644
---- a/include/linux/phy/phy.h
-+++ b/include/linux/phy/phy.h
-@@ -39,6 +39,7 @@ enum phy_mode {
- * @power_off: powering off the phy
- * @set_mode: set the mode of the phy
- * @reset: resetting the phy
-+ * @calibrate: calibrate the phy
- * @owner: the module owner containing the ops
- */
- struct phy_ops {
-@@ -48,6 +49,7 @@ struct phy_ops {
- int (*power_off)(struct phy *phy);
- int (*set_mode)(struct phy *phy, enum phy_mode mode);
- int (*reset)(struct phy *phy);
-+ int (*calibrate)(struct phy *phy);
- struct module *owner;
- };
-
-@@ -141,6 +143,7 @@ static inline void *phy_get_drvdata(struct phy *phy)
- int phy_power_off(struct phy *phy);
- int phy_set_mode(struct phy *phy, enum phy_mode mode);
- int phy_reset(struct phy *phy);
-+int phy_calibrate(struct phy *phy);
- static inline int phy_get_bus_width(struct phy *phy)
- {
- return phy->attrs.bus_width;
-@@ -262,6 +265,13 @@ static inline int phy_reset(struct phy *phy)
- return -ENOSYS;
- }
-
-+static inline int phy_calibrate(struct phy *phy)
-+{
-+ if (!phy)
-+ return 0;
-+ return -ENOSYS;
-+}
-+
- static inline int phy_get_bus_width(struct phy *phy)
- {
- return -ENOSYS;
-From patchwork Mon Oct 9 12:00:51 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [PATCHv4,
- 2/2] phy: exynos5-usbdrd: Calibrate LOS levels for exynos5420/5800
-From: Andrzej Pietrasiewicz <andrzej.p(a)samsung.com>
-X-Patchwork-Id: 9992809
-Message-Id: <1507550451-21324-3-git-send-email-andrzej.p(a)samsung.com>
-To: linux-samsung-soc(a)vger.kernel.org, linux-usb(a)vger.kernel.org,
- linux-arm-kernel(a)lists.infradead.org, devicetree(a)vger.kernel.org
-Cc: Mark Rutland <mark.rutland(a)arm.com>, Felipe Balbi <balbi(a)kernel.org>,
- Bartlomiej Zolnierkiewicz <b.zolnierkie(a)samsung.com>,
- Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>,
- Russell King <linux(a)armlinux.org.uk>,
- Krzysztof Kozlowski <krzk(a)kernel.org>,
- Kishon Vijay Abraham I <kishon(a)ti.com>,
- Rob Herring <robh+dt(a)kernel.org>, Kukjin Kim <kgene(a)kernel.org>,
- Andrzej Pietrasiewicz <andrzej.p(a)samsung.com>,
- Marek Szyprowski <m.szyprowski(a)samsung.com>
-Date: Mon, 09 Oct 2017 14:00:51 +0200
-
-From: Vivek Gautam <gautam.vivek(a)samsung.com>
-
-Adding phy calibration sequence for USB 3.0 DRD PHY present on
-Exynos5420/5800 systems.
-This calibration facilitates setting certain PHY parameters viz.
-the Loss-of-Signal (LOS) Detector Threshold Level, as well as
-Tx-Vboost-Level for Super-Speed operations.
-Additionally we also set proper time to wait for RxDetect measurement,
-for desired PHY reference clock, so as to solve issue with enumeration
-of few USB 3.0 devices, like Samsung SUM-TSB16S 3.0 USB drive
-on the controller.
-
-We are using CR_port for this purpose to send required data
-to override the LOS values.
-
-On testing with USB 3.0 devices on USB 3.0 port present on
-SMDK5420, and peach-pit boards should see following message:
-usb 2-1: new SuperSpeed USB device number 2 using xhci-hcd
-
-and without this patch, should see below shown message:
-usb 1-1: new high-speed USB device number 2 using xhci-hcd
-
-[Also removed unnecessary extra lines in the register macro definitions]
-
-Signed-off-by: Vivek Gautam <gautam.vivek(a)samsung.com>
-[adapted to use phy_calibrate as entry point]
-Signed-off-by: Andrzej Pietrasiewicz <andrzej.p(a)samsung.com>
----
- drivers/phy/samsung/phy-exynos5-usbdrd.c | 183 +++++++++++++++++++++++++++++++
- drivers/usb/dwc3/core.c | 7 +-
- 2 files changed, 188 insertions(+), 2 deletions(-)
-
-diff --git a/drivers/phy/samsung/phy-exynos5-usbdrd.c b/drivers/phy/samsung/phy-exynos5-usbdrd.c
-index 22c68f5..9e83c15 100644
---- a/drivers/phy/samsung/phy-exynos5-usbdrd.c
-+++ b/drivers/phy/samsung/phy-exynos5-usbdrd.c
-@@ -90,7 +90,17 @@
- #define PHYCLKRST_COMMONONN BIT(0)
-
- #define EXYNOS5_DRD_PHYREG0 0x14
-+#define PHYREG0_SSC_REF_CLK_SEL BIT(21)
-+#define PHYREG0_SSC_RANGE BIT(20)
-+#define PHYREG0_CR_WRITE BIT(19)
-+#define PHYREG0_CR_READ BIT(18)
-+#define PHYREG0_CR_DATA_IN(_x) ((_x) << 2)
-+#define PHYREG0_CR_CAP_DATA BIT(1)
-+#define PHYREG0_CR_CAP_ADDR BIT(0)
-+
- #define EXYNOS5_DRD_PHYREG1 0x18
-+#define PHYREG1_CR_DATA_OUT(_x) ((_x) << 1)
-+#define PHYREG1_CR_ACK BIT(0)
-
- #define EXYNOS5_DRD_PHYPARAM0 0x1c
-
-@@ -119,6 +129,25 @@
- #define EXYNOS5_DRD_PHYRESUME 0x34
- #define EXYNOS5_DRD_LINKPORT 0x44
-
-+/* USB 3.0 DRD PHY SS Function Control Reg; accessed by CR_PORT */
-+#define EXYNOS5_DRD_PHYSS_LOSLEVEL_OVRD_IN (0x15)
-+#define LOSLEVEL_OVRD_IN_LOS_BIAS_5420 (0x5 << 13)
-+#define LOSLEVEL_OVRD_IN_LOS_BIAS_DEFAULT (0x0 << 13)
-+#define LOSLEVEL_OVRD_IN_EN (0x1 << 10)
-+#define LOSLEVEL_OVRD_IN_LOS_LEVEL_DEFAULT (0x9 << 0)
-+
-+#define EXYNOS5_DRD_PHYSS_TX_VBOOSTLEVEL_OVRD_IN (0x12)
-+#define TX_VBOOSTLEVEL_OVRD_IN_VBOOST_5420 (0x5 << 13)
-+#define TX_VBOOSTLEVEL_OVRD_IN_VBOOST_DEFAULT (0x4 << 13)
-+
-+#define EXYNOS5_DRD_PHYSS_LANE0_TX_DEBUG (0x1010)
-+#define LANE0_TX_DEBUG_RXDET_MEAS_TIME_19M2_20M (0x4 << 4)
-+#define LANE0_TX_DEBUG_RXDET_MEAS_TIME_24M (0x8 << 4)
-+#define LANE0_TX_DEBUG_RXDET_MEAS_TIME_25M_26M (0x8 << 4)
-+#define LANE0_TX_DEBUG_RXDET_MEAS_TIME_48M_50M_52M (0x20 << 4)
-+#define LANE0_TX_DEBUG_RXDET_MEAS_TIME_62M5 (0x20 << 4)
-+#define LANE0_TX_DEBUG_RXDET_MEAS_TIME_96M_100M (0x40 << 4)
-+
- #define KHZ 1000
- #define MHZ (KHZ * KHZ)
-
-@@ -527,6 +556,151 @@ static int exynos5_usbdrd_phy_power_off(struct phy *phy)
- return 0;
- }
-
-+static int crport_handshake(struct exynos5_usbdrd_phy *phy_drd,
-+ u32 val, u32 cmd)
-+{
-+ u32 usec = 100;
-+ unsigned int result;
-+
-+ writel(val | cmd, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
-+
-+ do {
-+ result = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1);
-+ if (result & PHYREG1_CR_ACK)
-+ break;
-+
-+ udelay(1);
-+ } while (usec-- > 0);
-+
-+ if (!usec) {
-+ dev_err(phy_drd->dev,
-+ "CRPORT handshake timeout1 (0x%08x)\n", val);
-+ return -ETIME;
-+ }
-+
-+ usec = 100;
-+
-+ writel(val, phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
-+
-+ do {
-+ result = readl(phy_drd->reg_phy + EXYNOS5_DRD_PHYREG1);
-+ if (!(result & PHYREG1_CR_ACK))
-+ break;
-+
-+ udelay(1);
-+ } while (usec-- > 0);
-+
-+ if (!usec) {
-+ dev_err(phy_drd->dev,
-+ "CRPORT handshake timeout2 (0x%08x)\n", val);
-+ return -ETIME;
-+ }
-+
-+ return 0;
-+}
-+
-+static int crport_ctrl_write(struct exynos5_usbdrd_phy *phy_drd,
-+ u32 addr, u32 data)
-+{
-+ int ret;
-+
-+ /* Write Address */
-+ writel(PHYREG0_CR_DATA_IN(addr),
-+ phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
-+ ret = crport_handshake(phy_drd, PHYREG0_CR_DATA_IN(addr),
-+ PHYREG0_CR_CAP_ADDR);
-+ if (ret)
-+ return ret;
-+
-+ /* Write Data */
-+ writel(PHYREG0_CR_DATA_IN(data),
-+ phy_drd->reg_phy + EXYNOS5_DRD_PHYREG0);
-+ ret = crport_handshake(phy_drd, PHYREG0_CR_DATA_IN(data),
-+ PHYREG0_CR_CAP_DATA);
-+ if (ret)
-+ return ret;
-+
-+ ret = crport_handshake(phy_drd, PHYREG0_CR_DATA_IN(data),
-+ PHYREG0_CR_WRITE);
-+
-+ return ret;
-+}
-+
-+/*
-+ * Calibrate few PHY parameters using CR_PORT register to meet
-+ * SuperSpeed requirements on Exynos5420 and Exynos5800 systems,
-+ * which have 28nm USB 3.0 DRD PHY.
-+ */
-+static int exynos5420_usbdrd_phy_calibrate(struct exynos5_usbdrd_phy *phy_drd)
-+{
-+ unsigned int temp;
-+ int ret = 0;
-+
-+ /*
-+ * Change los_bias to (0x5) for 28nm PHY from a
-+ * default value (0x0); los_level is set as default
-+ * (0x9) as also reflected in los_level[30:26] bits
-+ * of PHYPARAM0 register.
-+ */
-+ temp = LOSLEVEL_OVRD_IN_LOS_BIAS_5420 |
-+ LOSLEVEL_OVRD_IN_EN |
-+ LOSLEVEL_OVRD_IN_LOS_LEVEL_DEFAULT;
-+ ret = crport_ctrl_write(phy_drd,
-+ EXYNOS5_DRD_PHYSS_LOSLEVEL_OVRD_IN,
-+ temp);
-+ if (ret) {
-+ dev_err(phy_drd->dev,
-+ "Failed setting Loss-of-Signal level for SuperSpeed\n");
-+ return ret;
-+ }
-+
-+ /*
-+ * Set tx_vboost_lvl to (0x5) for 28nm PHY Tuning,
-+ * to raise Tx signal level from its default value of (0x4)
-+ */
-+ temp = TX_VBOOSTLEVEL_OVRD_IN_VBOOST_5420;
-+ ret = crport_ctrl_write(phy_drd,
-+ EXYNOS5_DRD_PHYSS_TX_VBOOSTLEVEL_OVRD_IN,
-+ temp);
-+ if (ret) {
-+ dev_err(phy_drd->dev,
-+ "Failed setting Tx-Vboost-Level for SuperSpeed\n");
-+ return ret;
-+ }
-+
-+ /*
-+ * Set proper time to wait for RxDetect measurement, for
-+ * desired reference clock of PHY, by tuning the CR_PORT
-+ * register LANE0.TX_DEBUG which is internal to PHY.
-+ * This fixes issue with few USB 3.0 devices, which are
-+ * not detected (not even generate interrupts on the bus
-+ * on insertion) without this change.
-+ * e.g. Samsung SUM-TSB16S 3.0 USB drive.
-+ */
-+ switch (phy_drd->extrefclk) {
-+ case EXYNOS5_FSEL_50MHZ:
-+ temp = LANE0_TX_DEBUG_RXDET_MEAS_TIME_48M_50M_52M;
-+ break;
-+ case EXYNOS5_FSEL_20MHZ:
-+ case EXYNOS5_FSEL_19MHZ2:
-+ temp = LANE0_TX_DEBUG_RXDET_MEAS_TIME_19M2_20M;
-+ break;
-+ case EXYNOS5_FSEL_24MHZ:
-+ default:
-+ temp = LANE0_TX_DEBUG_RXDET_MEAS_TIME_24M;
-+ break;
-+ }
-+
-+ ret = crport_ctrl_write(phy_drd,
-+ EXYNOS5_DRD_PHYSS_LANE0_TX_DEBUG,
-+ temp);
-+ if (ret)
-+ dev_err(phy_drd->dev,
-+ "Failed setting RxDetect measurement time for SuperSpeed\n");
-+
-+ return ret;
-+}
-+
- static struct phy *exynos5_usbdrd_phy_xlate(struct device *dev,
- struct of_phandle_args *args)
- {
-@@ -538,11 +712,20 @@ static struct phy *exynos5_usbdrd_phy_xlate(struct device *dev,
- return phy_drd->phys[args->args[0]].phy;
- }
-
-+static int exynos5_usbdrd_phy_calibrate(struct phy *phy)
-+{
-+ struct phy_usb_instance *inst = phy_get_drvdata(phy);
-+ struct exynos5_usbdrd_phy *phy_drd = to_usbdrd_phy(inst);
-+
-+ return exynos5420_usbdrd_phy_calibrate(phy_drd);
-+}
-+
- static const struct phy_ops exynos5_usbdrd_phy_ops = {
- .init = exynos5_usbdrd_phy_init,
- .exit = exynos5_usbdrd_phy_exit,
- .power_on = exynos5_usbdrd_phy_power_on,
- .power_off = exynos5_usbdrd_phy_power_off,
-+ .calibrate = exynos5_usbdrd_phy_calibrate,
- .owner = THIS_MODULE,
- };
-
-diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
-index 03474d3..224e0dd 100644
---- a/drivers/usb/dwc3/core.c
-+++ b/drivers/usb/dwc3/core.c
-@@ -156,9 +156,10 @@ static void __dwc3_set_mode(struct work_struct *work)
- } else {
- if (dwc->usb2_phy)
- otg_set_vbus(dwc->usb2_phy->otg, true);
-- if (dwc->usb2_generic_phy)
-+ if (dwc->usb2_generic_phy) {
- phy_set_mode(dwc->usb2_generic_phy, PHY_MODE_USB_HOST);
--
-+ phy_calibrate(dwc->usb2_generic_phy);
-+ }
- }
- break;
- case DWC3_GCTL_PRTCAP_DEVICE:
-@@ -955,6 +956,8 @@ static int dwc3_core_init_mode(struct dwc3 *dwc)
- dev_err(dev, "failed to initialize host\n");
- return ret;
- }
-+ if (dwc->usb2_generic_phy)
-+ phy_calibrate(dwc->usb2_generic_phy);
- break;
- case USB_DR_MODE_OTG:
- INIT_WORK(&dwc->drd_work, __dwc3_set_mode);
diff --git a/arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch b/arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch
new file mode 100644
index 0000000..4eaf67e
--- /dev/null
+++ b/arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch
@@ -0,0 +1,146 @@
+From patchwork Mon Jan 8 15:44:19 2018
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: [v2] mmc: sdhci_f_sdh30: add ACPI support
+From: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
+X-Patchwork-Id: 10149775
+Message-Id: <20180108154419.2821-1-ard.biesheuvel(a)linaro.org>
+To: linux-mmc(a)vger.kernel.org
+Cc: adrian.hunter(a)intel.com, ulf.hansson(a)linaro.org,
+ Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
+Date: Mon, 8 Jan 2018 15:44:19 +0000
+
+The Fujitsu SDH30 SDHCI controller may be described as a SCX0002 ACPI
+device on ACPI platforms incorporating the Socionext SynQuacer SoC.
+
+Given that mmc_of_parse() has already been made ACPI/DT agnostic,
+making the SDH30 driver ACPI capable is actually rather simple:
+all we need to do is make the call to sdhci_get_of_property() [which
+does not set any properties we care about] and the clock handling
+dependent on whether we are dealing with a DT device, and exposing
+the ACPI id via the platform_driver struct and the module metadata.
+
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
+Acked-by: Adrian Hunter <adrian.hunter(a)intel.com>
+---
+v2: make OF optional now that ACPI is supported
+ drop dev_of_node() check when disabling the clocks - those routines
+ tolerate NULL pointers so there's no need
+
+ drivers/mmc/host/Kconfig | 2 +-
+ drivers/mmc/host/sdhci_f_sdh30.c | 52 +++++++++++++-------
+ 2 files changed, 35 insertions(+), 19 deletions(-)
+
+diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
+index 567028c9219a..07ed947ed10b 100644
+--- a/drivers/mmc/host/Kconfig
++++ b/drivers/mmc/host/Kconfig
+@@ -320,7 +320,7 @@ config MMC_SDHCI_BCM_KONA
+ config MMC_SDHCI_F_SDH30
+ tristate "SDHCI support for Fujitsu Semiconductor F_SDH30"
+ depends on MMC_SDHCI_PLTFM
+- depends on OF
++ depends on OF || ACPI
+ help
+ This selects the Secure Digital Host Controller Interface (SDHCI)
+ Needed by some Fujitsu SoC for MMC / SD / SDIO support.
+diff --git a/drivers/mmc/host/sdhci_f_sdh30.c b/drivers/mmc/host/sdhci_f_sdh30.c
+index 04ca0d33a521..485f7591fae4 100644
+--- a/drivers/mmc/host/sdhci_f_sdh30.c
++++ b/drivers/mmc/host/sdhci_f_sdh30.c
+@@ -10,9 +10,11 @@
+ * the Free Software Foundation, version 2 of the License.
+ */
+
++#include <linux/acpi.h>
+ #include <linux/err.h>
+ #include <linux/delay.h>
+ #include <linux/module.h>
++#include <linux/of.h>
+ #include <linux/property.h>
+ #include <linux/clk.h>
+
+@@ -146,7 +148,6 @@ static int sdhci_f_sdh30_probe(struct platform_device *pdev)
+
+ platform_set_drvdata(pdev, host);
+
+- sdhci_get_of_property(pdev);
+ host->hw_name = "f_sdh30";
+ host->ops = &sdhci_f_sdh30_ops;
+ host->irq = irq;
+@@ -158,25 +159,29 @@ static int sdhci_f_sdh30_probe(struct platform_device *pdev)
+ goto err;
+ }
+
+- priv->clk_iface = devm_clk_get(&pdev->dev, "iface");
+- if (IS_ERR(priv->clk_iface)) {
+- ret = PTR_ERR(priv->clk_iface);
+- goto err;
+- }
++ if (dev_of_node(dev)) {
++ sdhci_get_of_property(pdev);
+
+- ret = clk_prepare_enable(priv->clk_iface);
+- if (ret)
+- goto err;
++ priv->clk_iface = devm_clk_get(&pdev->dev, "iface");
++ if (IS_ERR(priv->clk_iface)) {
++ ret = PTR_ERR(priv->clk_iface);
++ goto err;
++ }
+
+- priv->clk = devm_clk_get(&pdev->dev, "core");
+- if (IS_ERR(priv->clk)) {
+- ret = PTR_ERR(priv->clk);
+- goto err_clk;
+- }
++ ret = clk_prepare_enable(priv->clk_iface);
++ if (ret)
++ goto err;
+
+- ret = clk_prepare_enable(priv->clk);
+- if (ret)
+- goto err_clk;
++ priv->clk = devm_clk_get(&pdev->dev, "core");
++ if (IS_ERR(priv->clk)) {
++ ret = PTR_ERR(priv->clk);
++ goto err_clk;
++ }
++
++ ret = clk_prepare_enable(priv->clk);
++ if (ret)
++ goto err_clk;
++ }
+
+ /* init vendor specific regs */
+ ctrl = sdhci_readw(host, F_SDH30_AHB_CONFIG);
+@@ -226,16 +231,27 @@ static int sdhci_f_sdh30_remove(struct platform_device *pdev)
+ return 0;
+ }
+
++#ifdef CONFIG_OF
+ static const struct of_device_id f_sdh30_dt_ids[] = {
+ { .compatible = "fujitsu,mb86s70-sdhci-3.0" },
+ { /* sentinel */ }
+ };
+ MODULE_DEVICE_TABLE(of, f_sdh30_dt_ids);
++#endif
++
++#ifdef CONFIG_ACPI
++static const struct acpi_device_id f_sdh30_acpi_ids[] = {
++ { "SCX0002" },
++ { /* sentinel */ }
++};
++MODULE_DEVICE_TABLE(acpi, f_sdh30_acpi_ids);
++#endif
+
+ static struct platform_driver sdhci_f_sdh30_driver = {
+ .driver = {
+ .name = "f_sdh30",
+- .of_match_table = f_sdh30_dt_ids,
++ .of_match_table = of_match_ptr(f_sdh30_dt_ids),
++ .acpi_match_table = ACPI_PTR(f_sdh30_acpi_ids),
+ .pm = &sdhci_pltfm_pmops,
+ },
+ .probe = sdhci_f_sdh30_probe,
diff --git a/arm64-socionext-96b-enablement.patch b/arm64-socionext-96b-enablement.patch
index 721383e..d5d6cda 100644
--- a/arm64-socionext-96b-enablement.patch
+++ b/arm64-socionext-96b-enablement.patch
@@ -1,313 +1,3 @@
-From 33d983b5bb2929ae242606925e708092b1dfdd8f Mon Sep 17 00:00:00 2001
-From: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
-Date: Sat, 2 Sep 2017 11:01:22 +0100
-Subject: drivers/irqchip: gicv3: add workaround for Synquacer pre-ITS
-
-In their infinite wisdom, the Socionext engineers have decided
-that ITS device IDs should not be hardwired, but it should be
-left up to the software to assign them, by allowing it to
-redirect MSI doorbell writes via a separate hardware block
-that issues the doorbell write with a device ID that is
-derived from the memory address. This completely breaks any
-kind of isolation, or virtualization in general, for that
-matter, but add support for it nonetheless.
-
-Signed-off-by: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
----
- arch/arm64/Kconfig | 8 +++++++
- drivers/irqchip/irq-gic-v3-its.c | 48 +++++++++++++++++++++++++++++++++++-----
- 2 files changed, 51 insertions(+), 5 deletions(-)
-
-diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
-index 0df64a6..c4361df 100644
---- a/arch/arm64/Kconfig
-+++ b/arch/arm64/Kconfig
-@@ -539,6 +539,14 @@ config QCOM_QDF2400_ERRATUM_0065
-
- If unsure, say Y.
-
-+config SOCIONEXT_SYNQUACER_PREITS
-+ bool "Socionext Synquacer: Workaround for GICv3 pre-ITS"
-+ default y
-+ help
-+ Socionext Synquacer SoCs implement a separate h/w block to generate
-+ MSI doorbell writes with non-zero values for the device ID.
-+
-+ If unsure, say Y.
- endmenu
-
-
-diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
-index e8d8934..0d372f1 100644
---- a/drivers/irqchip/irq-gic-v3-its.c
-+++ b/drivers/irqchip/irq-gic-v3-its.c
-@@ -46,6 +46,7 @@
- #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1ULL << 0)
- #define ITS_FLAGS_WORKAROUND_CAVIUM_22375 (1ULL << 1)
- #define ITS_FLAGS_WORKAROUND_CAVIUM_23144 (1ULL << 2)
-+#define ITS_FLAGS_WORKAROUND_SOCIONEXT_PREITS (1ULL << 3)
-
- #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING (1 << 0)
-
-@@ -99,6 +100,10 @@ struct its_node {
- struct its_collection *collections;
- struct list_head its_device_list;
- u64 flags;
-+#ifdef CONFIG_SOCIONEXT_SYNQUACER_PREITS
-+ u64 pre_its_base;
-+ u64 pre_its_size;
-+#endif
- u32 ite_size;
- u32 device_ids;
- int numa_node;
-@@ -1102,13 +1107,29 @@ static void its_irq_compose_msi_msg(struct irq_data *d, struct msi_msg *msg)
- u64 addr;
-
- its = its_dev->its;
-- addr = its->phys_base + GITS_TRANSLATER;
-+
-+#ifdef CONFIG_SOCIONEXT_SYNQUACER_PREITS
-+ if (its->flags & ITS_FLAGS_WORKAROUND_SOCIONEXT_PREITS)
-+
-+ /*
-+ * The Socionext Synquacer SoC has a so-called 'pre-ITS',
-+ * which maps 32-bit writes into a separate window of size
-+ * '4 << device_id_bits' onto writes to GITS_TRANSLATER with
-+ * device ID taken from bits [device_id_bits + 1:2] of the
-+ * window offset.
-+ */
-+ addr = its->pre_its_base + (its_dev->device_id << 2);
-+ else
-+#endif
-+ addr = its->phys_base + GITS_TRANSLATER;
-
- msg->address_lo = lower_32_bits(addr);
- msg->address_hi = upper_32_bits(addr);
- msg->data = its_get_event_id(d);
-
-- iommu_dma_map_msi_msg(d->irq, msg);
-+ if (!IS_ENABLED(CONFIG_SOCIONEXT_SYNQUACER_PREITS) ||
-+ !(its->flags & ITS_FLAGS_WORKAROUND_SOCIONEXT_PREITS))
-+ iommu_dma_map_msi_msg(d->irq, msg);
- }
-
- static int its_irq_set_irqchip_state(struct irq_data *d,
-@@ -1666,6 +1687,11 @@ static int its_alloc_tables(struct its_node *its)
- ids = 0x14; /* 20 bits, 8MB */
- }
-
-+#ifdef CONFIG_SOCIONEXT_SYNQUACER_PREITS
-+ if (its->flags & ITS_FLAGS_WORKAROUND_SOCIONEXT_PREITS)
-+ ids = ilog2(its->pre_its_size) - 2;
-+#endif
-+
- its->device_ids = ids;
-
- for (i = 0; i < GITS_BASER_NR_REGS; i++) {
-@@ -2788,11 +2814,21 @@ static const struct gic_quirk its_quirks[] = {
- }
- };
-
--static void its_enable_quirks(struct its_node *its)
-+static void its_enable_quirks(struct its_node *its,
-+ struct fwnode_handle *handle)
- {
- u32 iidr = readl_relaxed(its->base + GITS_IIDR);
-
- gic_enable_quirks(iidr, its_quirks, its);
-+
-+#ifdef CONFIG_SOCIONEXT_SYNQUACER_PREITS
-+ if (!fwnode_property_read_u64_array(handle,
-+ "socionext,synquacer-pre-its",
-+ &its->pre_its_base, 2)) {
-+ its->flags |= ITS_FLAGS_WORKAROUND_SOCIONEXT_PREITS;
-+ pr_info("ITS: enabling workaround for Socionext Synquacer pre-ITS\n");
-+ }
-+#endif
- }
-
- static int its_init_domain(struct fwnode_handle *handle, struct its_node *its)
-@@ -2812,7 +2848,9 @@ static int its_init_domain(struct fwnode_handle *handle, struct its_node *its)
-
- inner_domain->parent = its_parent;
- irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS);
-- inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_REMAP;
-+
-+ if (!(its->flags & ITS_FLAGS_WORKAROUND_SOCIONEXT_PREITS))
-+ inner_domain->flags |= IRQ_DOMAIN_FLAG_MSI_REMAP;
- info->ops = &its_msi_domain_ops;
- info->data = its;
- inner_domain->host_data = info;
-@@ -2966,7 +3004,7 @@ static int __init its_probe_one(struct resource *res,
- }
- its->cmd_write = its->cmd_base;
-
-- its_enable_quirks(its);
-+ its_enable_quirks(its, handle);
-
- err = its_alloc_tables(its);
- if (err)
---
-cgit v1.1
-
-From 26e7bb47b0fb03a01be1e391a08c7375b45335a2 Mon Sep 17 00:00:00 2001
-From: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
-Date: Mon, 21 Aug 2017 20:29:05 +0100
-Subject: pci: designware: add driver for DWC controller in ECAM shift mode
-
-Some implementations of the Synopsys Designware PCIe controller implement
-a so-called ECAM shift mode, which allows a static memory window to be
-configured that covers the configuration space of the entire bus range.
-
-If the firmware performs all the low level configuration that is required
-to expose this controller in a fully ECAM compatible manner, we can
-simply describe it as "pci-host-ecam-generic" and be done with it.
-However, it appears that in some cases (one of which is the Armada 80x0),
-the IP is synthesized with an ATU window size that does not allow the
-first bus to be mapped in a way that prevents the device on the
-downstream port from appearing more than once.
-
-So implement a driver that relies on the firmware to perform all low
-level initialization, and drives the controller in ECAM mode, but
-overrides the config space accessors to take the above quirk into
-account.
-
-Note that, unlike most drivers for this IP, this driver does not expose
-a fake bridge device at B/D/F 00:00.0. There is no point in doing so,
-given that this is not a true bridge, and does not require any windows
-to be configured in order for the downstream device to operate correctly.
-Omitting it also prevents the PCI resource allocation routines from
-handing out BAR space to it unnecessarily.
-
-Cc: Bjorn Helgaas <bhelgaas(a)google.com>
-Cc: Jingoo Han <jingoohan1(a)gmail.com>
-Cc: Joao Pinto <Joao.Pinto(a)synopsys.com>
-Signed-off-by: Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
----
- drivers/pci/dwc/Kconfig | 11 +++++
- drivers/pci/dwc/Makefile | 1 +
- drivers/pci/dwc/pcie-designware-ecam.c | 77 ++++++++++++++++++++++++++++++++++
- 3 files changed, 89 insertions(+)
- create mode 100644 drivers/pci/dwc/pcie-designware-ecam.c
-
-diff --git a/drivers/pci/dwc/Kconfig b/drivers/pci/dwc/Kconfig
-index 22ec82f..19856b1 100644
---- a/drivers/pci/dwc/Kconfig
-+++ b/drivers/pci/dwc/Kconfig
-@@ -169,4 +169,15 @@ config PCIE_KIRIN
- Say Y here if you want PCIe controller support
- on HiSilicon Kirin series SoCs.
-
-+config PCIE_DW_HOST_ECAM
-+ bool "Synopsys DesignWare PCIe controller in ECAM mode"
-+ depends on OF && PCI
-+ select PCI_HOST_COMMON
-+ select IRQ_DOMAIN
-+ help
-+ Add support for Synopsys DesignWare PCIe controllers configured
-+ by the firmware into ECAM shift mode. In some cases, these are
-+ fully ECAM compliant, in which case the pci-host-generic driver
-+ may be used instead.
-+
- endmenu
-diff --git a/drivers/pci/dwc/Makefile b/drivers/pci/dwc/Makefile
-index c61be97..7d5a23e 100644
---- a/drivers/pci/dwc/Makefile
-+++ b/drivers/pci/dwc/Makefile
-@@ -1,5 +1,6 @@
- # SPDX-License-Identifier: GPL-2.0
- obj-$(CONFIG_PCIE_DW) += pcie-designware.o
- obj-$(CONFIG_PCIE_DW_HOST) += pcie-designware-host.o
-+obj-$(CONFIG_PCIE_DW_HOST_ECAM) += pcie-designware-ecam.o
- obj-$(CONFIG_PCIE_DW_EP) += pcie-designware-ep.o
- obj-$(CONFIG_PCIE_DW_PLAT) += pcie-designware-plat.o
- ifneq ($(filter y,$(CONFIG_PCI_DRA7XX_HOST) $(CONFIG_PCI_DRA7XX_EP)),)
-diff --git a/drivers/pci/dwc/pcie-designware-ecam.c b/drivers/pci/dwc/pcie-designware-ecam.c
-new file mode 100644
-index 0000000..ede627d
---- /dev/null
-+++ b/drivers/pci/dwc/pcie-designware-ecam.c
-@@ -0,0 +1,77 @@
-+/*
-+ * Driver for mostly ECAM compatible Synopsys dw PCIe controllers
-+ * configured by the firmware into RC mode
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License version 2 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Copyright (C) 2014 ARM Limited
-+ * Copyright (C) 2017 Linaro Limited
-+ *
-+ * Authors: Will Deacon <will.deacon(a)arm.com>
-+ * Ard Biesheuvel <ard.biesheuvel(a)linaro.org>
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/of_address.h>
-+#include <linux/of_pci.h>
-+#include <linux/pci-ecam.h>
-+#include <linux/platform_device.h>
-+
-+static int pci_dw_ecam_config_read(struct pci_bus *bus, u32 devfn, int where,
-+ int size, u32 *val)
-+{
-+ struct pci_config_window *cfg = bus->sysdata;
-+
-+ /*
-+ * The Synopsys dw PCIe controller in RC mode will not filter type 0
-+ * config TLPs sent to devices 1 and up on its downstream port,
-+ * resulting in devices appearing multiple times on bus 0 unless we
-+ * filter them here.
-+ */
-+ if (bus->number == cfg->busr.start && PCI_SLOT(devfn) > 0) {
-+ *val = 0xffffffff;
-+ return PCIBIOS_DEVICE_NOT_FOUND;
-+ }
-+ return pci_generic_config_read(bus, devfn, where, size, val);
-+}
-+
-+static int pci_dw_ecam_config_write(struct pci_bus *bus, u32 devfn, int where,
-+ int size, u32 val)
-+{
-+ struct pci_config_window *cfg = bus->sysdata;
-+
-+ if (bus->number == cfg->busr.start && PCI_SLOT(devfn) > 0)
-+ return PCIBIOS_DEVICE_NOT_FOUND;
-+
-+ return pci_generic_config_write(bus, devfn, where, size, val);
-+}
-+
-+static struct pci_ecam_ops pci_dw_ecam_bus_ops = {
-+ .pci_ops.map_bus = pci_ecam_map_bus,
-+ .pci_ops.read = pci_dw_ecam_config_read,
-+ .pci_ops.write = pci_dw_ecam_config_write,
-+ .bus_shift = 20,
-+};
-+
-+static const struct of_device_id pci_dw_ecam_of_match[] = {
-+ { .compatible = "marvell,armada8k-pcie-ecam" },
-+ { .compatible = "socionext,synquacer-pcie-ecam" },
-+ { .compatible = "snps,dw-pcie-ecam" },
-+ { },
-+};
-+
-+static int pci_dw_ecam_probe(struct platform_device *pdev)
-+{
-+ return pci_host_common_probe(pdev, &pci_dw_ecam_bus_ops);
-+}
-+
-+static struct platform_driver pci_dw_ecam_driver = {
-+ .driver.name = "pcie-designware-ecam",
-+ .driver.of_match_table = pci_dw_ecam_of_match,
-+ .driver.suppress_bind_attrs = true,
-+ .probe = pci_dw_ecam_probe,
-+};
-+builtin_platform_driver(pci_dw_ecam_driver);
---
-cgit v1.1
-
From e3dff048a10f16aa0fd32438442ce39558bbdbef Mon Sep 17 00:00:00 2001
From: Jassi Brar <jaswinder.singh(a)linaro.org>
Date: Tue, 29 Aug 2017 22:45:59 +0530
diff --git a/baseconfig/CONFIG_ACT200L_DONGLE b/baseconfig/CONFIG_ACT200L_DONGLE
deleted file mode 100644
index ea14a0d..0000000
--- a/baseconfig/CONFIG_ACT200L_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACT200L_DONGLE=m
diff --git a/baseconfig/CONFIG_ACTISYS_DONGLE b/baseconfig/CONFIG_ACTISYS_DONGLE
deleted file mode 100644
index 5180ba7..0000000
--- a/baseconfig/CONFIG_ACTISYS_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACTISYS_DONGLE=m
diff --git a/baseconfig/CONFIG_ALI_FIR b/baseconfig/CONFIG_ALI_FIR
deleted file mode 100644
index 524b1f1..0000000
--- a/baseconfig/CONFIG_ALI_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ALI_FIR=m
diff --git a/baseconfig/CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK b/baseconfig/CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK
new file mode 100644
index 0000000..9839ac0
--- /dev/null
+++ b/baseconfig/CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK
@@ -0,0 +1 @@
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
diff --git a/baseconfig/CONFIG_BPF_JIT_ALWAYS_ON b/baseconfig/CONFIG_BPF_JIT_ALWAYS_ON
new file mode 100644
index 0000000..45aacb4
--- /dev/null
+++ b/baseconfig/CONFIG_BPF_JIT_ALWAYS_ON
@@ -0,0 +1 @@
+CONFIG_BPF_JIT_ALWAYS_ON=y
diff --git a/baseconfig/CONFIG_BTRFS_FS_REF_VERIFY b/baseconfig/CONFIG_BTRFS_FS_REF_VERIFY
new file mode 100644
index 0000000..2fb0f88
--- /dev/null
+++ b/baseconfig/CONFIG_BTRFS_FS_REF_VERIFY
@@ -0,0 +1 @@
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
diff --git a/baseconfig/CONFIG_BT_HCIBTUSB_AUTOSUSPEND b/baseconfig/CONFIG_BT_HCIBTUSB_AUTOSUSPEND
new file mode 100644
index 0000000..76c0b54
--- /dev/null
+++ b/baseconfig/CONFIG_BT_HCIBTUSB_AUTOSUSPEND
@@ -0,0 +1 @@
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
diff --git a/baseconfig/CONFIG_CHASH_SELFTEST b/baseconfig/CONFIG_CHASH_SELFTEST
new file mode 100644
index 0000000..d53ef14
--- /dev/null
+++ b/baseconfig/CONFIG_CHASH_SELFTEST
@@ -0,0 +1 @@
+# CONFIG_CHASH_SELFTEST is not set
diff --git a/baseconfig/CONFIG_CHASH_STATS b/baseconfig/CONFIG_CHASH_STATS
new file mode 100644
index 0000000..26edbaf
--- /dev/null
+++ b/baseconfig/CONFIG_CHASH_STATS
@@ -0,0 +1 @@
+# CONFIG_CHASH_STATS is not set
diff --git a/baseconfig/CONFIG_CHT_DC_TI_PMIC_OPREGION b/baseconfig/CONFIG_CHT_DC_TI_PMIC_OPREGION
new file mode 100644
index 0000000..1bb32a1
--- /dev/null
+++ b/baseconfig/CONFIG_CHT_DC_TI_PMIC_OPREGION
@@ -0,0 +1 @@
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
diff --git a/baseconfig/CONFIG_CPU_ISOLATION b/baseconfig/CONFIG_CPU_ISOLATION
new file mode 100644
index 0000000..1753f30
--- /dev/null
+++ b/baseconfig/CONFIG_CPU_ISOLATION
@@ -0,0 +1 @@
+# CONFIG_CPU_ISOLATION is not set
diff --git a/baseconfig/CONFIG_CRAMFS_MTD b/baseconfig/CONFIG_CRAMFS_MTD
new file mode 100644
index 0000000..d5c1402
--- /dev/null
+++ b/baseconfig/CONFIG_CRAMFS_MTD
@@ -0,0 +1 @@
+# CONFIG_CRAMFS_MTD is not set
diff --git a/baseconfig/CONFIG_CRYPTO_SM3 b/baseconfig/CONFIG_CRYPTO_SM3
new file mode 100644
index 0000000..6c7e683
--- /dev/null
+++ b/baseconfig/CONFIG_CRYPTO_SM3
@@ -0,0 +1 @@
+CONFIG_CRYPTO_SM3=m
diff --git a/baseconfig/CONFIG_DEBUG_KERNEL_DC b/baseconfig/CONFIG_DEBUG_KERNEL_DC
new file mode 100644
index 0000000..8cd6a50
--- /dev/null
+++ b/baseconfig/CONFIG_DEBUG_KERNEL_DC
@@ -0,0 +1 @@
+# CONFIG_DEBUG_KERNEL_DC is not set
diff --git a/baseconfig/CONFIG_DEBUG_VM_RB revisit this if performance isn't horrible b/baseconfig/CONFIG_DEBUG_VM_RB revisit this if performance isn't horrible
deleted file mode 100644
index fbc8aae..0000000
--- a/baseconfig/CONFIG_DEBUG_VM_RB revisit this if performance isn't horrible
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DEBUG_VM_RB is not set # revisit this if performance isn't horrible
diff --git a/baseconfig/CONFIG_DONGLE b/baseconfig/CONFIG_DONGLE
deleted file mode 100644
index e78b38f..0000000
--- a/baseconfig/CONFIG_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DONGLE=y
diff --git a/baseconfig/CONFIG_DP83822_PHY b/baseconfig/CONFIG_DP83822_PHY
new file mode 100644
index 0000000..e97e5ab
--- /dev/null
+++ b/baseconfig/CONFIG_DP83822_PHY
@@ -0,0 +1 @@
+CONFIG_DP83822_PHY=m
diff --git a/baseconfig/CONFIG_DPM_WATCHDOG b/baseconfig/CONFIG_DPM_WATCHDOG
new file mode 100644
index 0000000..c12b35c
--- /dev/null
+++ b/baseconfig/CONFIG_DPM_WATCHDOG
@@ -0,0 +1 @@
+# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
diff --git a/baseconfig/CONFIG_DPM_WATCHDOG revisit this in debug b/baseconfig/CONFIG_DPM_WATCHDOG revisit this in debug
deleted file mode 100644
index c12b35c..0000000
--- a/baseconfig/CONFIG_DPM_WATCHDOG revisit this in debug
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
diff --git a/baseconfig/CONFIG_DRM_AMD_DC b/baseconfig/CONFIG_DRM_AMD_DC
new file mode 100644
index 0000000..a642bb0
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_AMD_DC
@@ -0,0 +1 @@
+CONFIG_DRM_AMD_DC=y
diff --git a/baseconfig/CONFIG_DRM_AMD_DC_FBC b/baseconfig/CONFIG_DRM_AMD_DC_FBC
new file mode 100644
index 0000000..51e570f
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_AMD_DC_FBC
@@ -0,0 +1 @@
+# CONFIG_DRM_AMD_DC_FBC is not set
diff --git a/baseconfig/CONFIG_DRM_AMD_DC_PRE_VEGA b/baseconfig/CONFIG_DRM_AMD_DC_PRE_VEGA
new file mode 100644
index 0000000..00ff6c3
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_AMD_DC_PRE_VEGA
@@ -0,0 +1 @@
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
diff --git a/baseconfig/CONFIG_DRM_I2C_ADV7511 b/baseconfig/CONFIG_DRM_I2C_ADV7511
index 2d931f7..18208c9 100644
--- a/baseconfig/CONFIG_DRM_I2C_ADV7511
+++ b/baseconfig/CONFIG_DRM_I2C_ADV7511
@@ -1 +1 @@
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511 is not set
diff --git a/baseconfig/CONFIG_DRM_I2C_ADV7511_CEC b/baseconfig/CONFIG_DRM_I2C_ADV7511_CEC
new file mode 100644
index 0000000..2553096
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_I2C_ADV7511_CEC
@@ -0,0 +1 @@
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
diff --git a/baseconfig/CONFIG_DRM_PANEL_ORISETECH_OTM8009A b/baseconfig/CONFIG_DRM_PANEL_ORISETECH_OTM8009A
new file mode 100644
index 0000000..34a2378
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_PANEL_ORISETECH_OTM8009A
@@ -0,0 +1 @@
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
diff --git a/baseconfig/CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN b/baseconfig/CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN
new file mode 100644
index 0000000..474a046
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN
@@ -0,0 +1 @@
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
diff --git a/baseconfig/CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 b/baseconfig/CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03
new file mode 100644
index 0000000..d9e23b7
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03
@@ -0,0 +1 @@
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
diff --git a/baseconfig/CONFIG_DRM_PANEL_SEIKO_43WVF1G b/baseconfig/CONFIG_DRM_PANEL_SEIKO_43WVF1G
new file mode 100644
index 0000000..471d28f
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_PANEL_SEIKO_43WVF1G
@@ -0,0 +1 @@
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
diff --git a/baseconfig/CONFIG_DRM_SII9234 b/baseconfig/CONFIG_DRM_SII9234
new file mode 100644
index 0000000..3edd481
--- /dev/null
+++ b/baseconfig/CONFIG_DRM_SII9234
@@ -0,0 +1 @@
+CONFIG_DRM_SII9234=m
diff --git a/baseconfig/CONFIG_DRM_SIL_SII8620 b/baseconfig/CONFIG_DRM_SIL_SII8620
index 9aa2a37..651ddf0 100644
--- a/baseconfig/CONFIG_DRM_SIL_SII8620
+++ b/baseconfig/CONFIG_DRM_SIL_SII8620
@@ -1 +1 @@
-CONFIG_DRM_SIL_SII8620=m
+# CONFIG_DRM_SIL_SII8620 is not set
diff --git a/baseconfig/CONFIG_DS4424 b/baseconfig/CONFIG_DS4424
new file mode 100644
index 0000000..199b377
--- /dev/null
+++ b/baseconfig/CONFIG_DS4424
@@ -0,0 +1 @@
+# CONFIG_DS4424 is not set
diff --git a/baseconfig/CONFIG_ESI_DONGLE b/baseconfig/CONFIG_ESI_DONGLE
deleted file mode 100644
index 08f59c8..0000000
--- a/baseconfig/CONFIG_ESI_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ESI_DONGLE=m
diff --git a/baseconfig/CONFIG_GIRBIL_DONGLE b/baseconfig/CONFIG_GIRBIL_DONGLE
deleted file mode 100644
index 108bafc..0000000
--- a/baseconfig/CONFIG_GIRBIL_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GIRBIL_DONGLE=m
diff --git a/baseconfig/CONFIG_GPIO_MAX3191X b/baseconfig/CONFIG_GPIO_MAX3191X
new file mode 100644
index 0000000..b0cd128
--- /dev/null
+++ b/baseconfig/CONFIG_GPIO_MAX3191X
@@ -0,0 +1 @@
+# CONFIG_GPIO_MAX3191X is not set
diff --git a/baseconfig/CONFIG_GPIO_MB86S7X b/baseconfig/CONFIG_GPIO_MB86S7X
new file mode 100644
index 0000000..1b3c1ac
--- /dev/null
+++ b/baseconfig/CONFIG_GPIO_MB86S7X
@@ -0,0 +1 @@
+# CONFIG_GPIO_MB86S7X is not set
diff --git a/baseconfig/CONFIG_GPIO_TEGRA186 b/baseconfig/CONFIG_GPIO_TEGRA186
new file mode 100644
index 0000000..ff21c59
--- /dev/null
+++ b/baseconfig/CONFIG_GPIO_TEGRA186
@@ -0,0 +1 @@
+# CONFIG_GPIO_TEGRA186 is not set
diff --git a/baseconfig/CONFIG_GUP_BENCHMARK b/baseconfig/CONFIG_GUP_BENCHMARK
new file mode 100644
index 0000000..f978e48
--- /dev/null
+++ b/baseconfig/CONFIG_GUP_BENCHMARK
@@ -0,0 +1 @@
+# CONFIG_GUP_BENCHMARK is not set
diff --git a/baseconfig/CONFIG_HWSPINLOCK b/baseconfig/CONFIG_HWSPINLOCK
index e35b793..6b531e9 100644
--- a/baseconfig/CONFIG_HWSPINLOCK
+++ b/baseconfig/CONFIG_HWSPINLOCK
@@ -1 +1 @@
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
diff --git a/baseconfig/CONFIG_IIO_CROS_EC_ACCEL_LEGACY b/baseconfig/CONFIG_IIO_CROS_EC_ACCEL_LEGACY
new file mode 100644
index 0000000..9c05b97
--- /dev/null
+++ b/baseconfig/CONFIG_IIO_CROS_EC_ACCEL_LEGACY
@@ -0,0 +1 @@
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
diff --git a/baseconfig/CONFIG_INTEL_SOC_PMIC_CHTDC_TI b/baseconfig/CONFIG_INTEL_SOC_PMIC_CHTDC_TI
new file mode 100644
index 0000000..4a724aa
--- /dev/null
+++ b/baseconfig/CONFIG_INTEL_SOC_PMIC_CHTDC_TI
@@ -0,0 +1 @@
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
diff --git a/baseconfig/CONFIG_IP6_NF_TARGET_NPT b/baseconfig/CONFIG_IP6_NF_TARGET_NPT
index bb6d2f7..e9a67d4 100644
--- a/baseconfig/CONFIG_IP6_NF_TARGET_NPT
+++ b/baseconfig/CONFIG_IP6_NF_TARGET_NPT
@@ -1 +1 @@
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
diff --git a/baseconfig/CONFIG_IPMI_PROC_INTERFACE b/baseconfig/CONFIG_IPMI_PROC_INTERFACE
new file mode 100644
index 0000000..c3def04
--- /dev/null
+++ b/baseconfig/CONFIG_IPMI_PROC_INTERFACE
@@ -0,0 +1 @@
+# CONFIG_IPMI_PROC_INTERFACE is not set
diff --git a/baseconfig/CONFIG_IPX b/baseconfig/CONFIG_IPX
index 42770d9..1712b4f 100644
--- a/baseconfig/CONFIG_IPX
+++ b/baseconfig/CONFIG_IPX
@@ -1 +1 @@
-CONFIG_IPX=m
+# CONFIG_IPX is not set
diff --git a/baseconfig/CONFIG_IRCOMM b/baseconfig/CONFIG_IRCOMM
deleted file mode 100644
index ff705e2..0000000
--- a/baseconfig/CONFIG_IRCOMM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IRCOMM=m
diff --git a/baseconfig/CONFIG_IRDA b/baseconfig/CONFIG_IRDA
index 1df4b8c..54366a3 100644
--- a/baseconfig/CONFIG_IRDA
+++ b/baseconfig/CONFIG_IRDA
@@ -1 +1 @@
-CONFIG_IRDA=m
+# CONFIG_IRDA is not set
diff --git a/baseconfig/CONFIG_IRDA_CACHE_LAST_LSAP b/baseconfig/CONFIG_IRDA_CACHE_LAST_LSAP
deleted file mode 100644
index 111fb58..0000000
--- a/baseconfig/CONFIG_IRDA_CACHE_LAST_LSAP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IRDA_CACHE_LAST_LSAP=y
diff --git a/baseconfig/CONFIG_IRDA_DEBUG b/baseconfig/CONFIG_IRDA_DEBUG
deleted file mode 100644
index c2c9a89..0000000
--- a/baseconfig/CONFIG_IRDA_DEBUG
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_IRDA_DEBUG is not set
diff --git a/baseconfig/CONFIG_IRDA_FAST_RR b/baseconfig/CONFIG_IRDA_FAST_RR
deleted file mode 100644
index 01803e3..0000000
--- a/baseconfig/CONFIG_IRDA_FAST_RR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IRDA_FAST_RR=y
diff --git a/baseconfig/CONFIG_IRDA_ULTRA b/baseconfig/CONFIG_IRDA_ULTRA
deleted file mode 100644
index 7da5a95..0000000
--- a/baseconfig/CONFIG_IRDA_ULTRA
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_IRDA_ULTRA is not set
diff --git a/baseconfig/CONFIG_IRLAN b/baseconfig/CONFIG_IRLAN
deleted file mode 100644
index ce8f69c..0000000
--- a/baseconfig/CONFIG_IRLAN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IRLAN=m
diff --git a/baseconfig/CONFIG_IRNET b/baseconfig/CONFIG_IRNET
deleted file mode 100644
index 03ad373..0000000
--- a/baseconfig/CONFIG_IRNET
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IRNET=m
diff --git a/baseconfig/CONFIG_IRTTY_SIR b/baseconfig/CONFIG_IRTTY_SIR
deleted file mode 100644
index 530f3c7..0000000
--- a/baseconfig/CONFIG_IRTTY_SIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IRTTY_SIR=m
diff --git a/baseconfig/CONFIG_IR_SIR b/baseconfig/CONFIG_IR_SIR
index 34ff7a8..58ea0b9 100644
--- a/baseconfig/CONFIG_IR_SIR
+++ b/baseconfig/CONFIG_IR_SIR
@@ -1 +1 @@
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
diff --git a/baseconfig/CONFIG_KINGSUN_DONGLE b/baseconfig/CONFIG_KINGSUN_DONGLE
deleted file mode 100644
index b3a114f..0000000
--- a/baseconfig/CONFIG_KINGSUN_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_KINGSUN_DONGLE=m
diff --git a/baseconfig/CONFIG_KS959_DONGLE b/baseconfig/CONFIG_KS959_DONGLE
deleted file mode 100644
index e89a9e0..0000000
--- a/baseconfig/CONFIG_KS959_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_KS959_DONGLE=m
diff --git a/baseconfig/CONFIG_KSDAZZLE_DONGLE b/baseconfig/CONFIG_KSDAZZLE_DONGLE
deleted file mode 100644
index 22be279..0000000
--- a/baseconfig/CONFIG_KSDAZZLE_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_KSDAZZLE_DONGLE=m
diff --git a/baseconfig/CONFIG_LEDS_TRIGGER_ACTIVITY b/baseconfig/CONFIG_LEDS_TRIGGER_ACTIVITY
new file mode 100644
index 0000000..286a244
--- /dev/null
+++ b/baseconfig/CONFIG_LEDS_TRIGGER_ACTIVITY
@@ -0,0 +1 @@
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
diff --git a/baseconfig/CONFIG_LIRC_SIR b/baseconfig/CONFIG_LIRC_SIR
deleted file mode 100644
index 8b3414e..0000000
--- a/baseconfig/CONFIG_LIRC_SIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_LIRC_SIR=m
diff --git a/baseconfig/CONFIG_LITELINK_DONGLE b/baseconfig/CONFIG_LITELINK_DONGLE
deleted file mode 100644
index 0695e01..0000000
--- a/baseconfig/CONFIG_LITELINK_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_LITELINK_DONGLE=m
diff --git a/baseconfig/CONFIG_MA600_DONGLE b/baseconfig/CONFIG_MA600_DONGLE
deleted file mode 100644
index d32eaff..0000000
--- a/baseconfig/CONFIG_MA600_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MA600_DONGLE=m
diff --git a/baseconfig/CONFIG_MANAGER_SBS b/baseconfig/CONFIG_MANAGER_SBS
new file mode 100644
index 0000000..aae8258
--- /dev/null
+++ b/baseconfig/CONFIG_MANAGER_SBS
@@ -0,0 +1 @@
+# CONFIG_MANAGER_SBS is not set
diff --git a/baseconfig/CONFIG_MCP2120_DONGLE b/baseconfig/CONFIG_MCP2120_DONGLE
deleted file mode 100644
index ca4f23a..0000000
--- a/baseconfig/CONFIG_MCP2120_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MCP2120_DONGLE=m
diff --git a/baseconfig/CONFIG_MCS_FIR b/baseconfig/CONFIG_MCS_FIR
deleted file mode 100644
index bb7384a..0000000
--- a/baseconfig/CONFIG_MCS_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MCS_FIR=m
diff --git a/baseconfig/CONFIG_MESON_GX_PM_DOMAINS b/baseconfig/CONFIG_MESON_GX_PM_DOMAINS
new file mode 100644
index 0000000..5d71bc0
--- /dev/null
+++ b/baseconfig/CONFIG_MESON_GX_PM_DOMAINS
@@ -0,0 +1 @@
+# CONFIG_MESON_GX_PM_DOMAINS is not set
diff --git a/baseconfig/CONFIG_MESON_MX_EFUSE b/baseconfig/CONFIG_MESON_MX_EFUSE
new file mode 100644
index 0000000..b289cb9
--- /dev/null
+++ b/baseconfig/CONFIG_MESON_MX_EFUSE
@@ -0,0 +1 @@
+# CONFIG_MESON_MX_EFUSE is not set
diff --git a/baseconfig/CONFIG_MESON_MX_SOCINFO b/baseconfig/CONFIG_MESON_MX_SOCINFO
new file mode 100644
index 0000000..63f558a
--- /dev/null
+++ b/baseconfig/CONFIG_MESON_MX_SOCINFO
@@ -0,0 +1 @@
+# CONFIG_MESON_MX_SOCINFO is not set
diff --git a/baseconfig/CONFIG_MLX4_CORE_GEN2 b/baseconfig/CONFIG_MLX4_CORE_GEN2
new file mode 100644
index 0000000..a6f01da
--- /dev/null
+++ b/baseconfig/CONFIG_MLX4_CORE_GEN2
@@ -0,0 +1 @@
+CONFIG_MLX4_CORE_GEN2=y
diff --git a/baseconfig/CONFIG_MMC_SDHCI_OMAP b/baseconfig/CONFIG_MMC_SDHCI_OMAP
new file mode 100644
index 0000000..c5c370b
--- /dev/null
+++ b/baseconfig/CONFIG_MMC_SDHCI_OMAP
@@ -0,0 +1 @@
+# CONFIG_MMC_SDHCI_OMAP is not set
diff --git a/baseconfig/CONFIG_MTD_SHARPSL_PARTS b/baseconfig/CONFIG_MTD_SHARPSL_PARTS
new file mode 100644
index 0000000..ca18946
--- /dev/null
+++ b/baseconfig/CONFIG_MTD_SHARPSL_PARTS
@@ -0,0 +1 @@
+# CONFIG_MTD_SHARPSL_PARTS is not set
diff --git a/baseconfig/CONFIG_NCP_FS b/baseconfig/CONFIG_NCP_FS
index 5207277..62eb3bd 100644
--- a/baseconfig/CONFIG_NCP_FS
+++ b/baseconfig/CONFIG_NCP_FS
@@ -1 +1 @@
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
diff --git a/baseconfig/CONFIG_NET_SCH_CBS b/baseconfig/CONFIG_NET_SCH_CBS
new file mode 100644
index 0000000..8d05839
--- /dev/null
+++ b/baseconfig/CONFIG_NET_SCH_CBS
@@ -0,0 +1 @@
+CONFIG_NET_SCH_CBS=m
diff --git a/baseconfig/CONFIG_NOUVEAU_DEBUG_MMU b/baseconfig/CONFIG_NOUVEAU_DEBUG_MMU
new file mode 100644
index 0000000..5d30f45
--- /dev/null
+++ b/baseconfig/CONFIG_NOUVEAU_DEBUG_MMU
@@ -0,0 +1 @@
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
diff --git a/baseconfig/CONFIG_NSC_FIR b/baseconfig/CONFIG_NSC_FIR
deleted file mode 100644
index fcc795e..0000000
--- a/baseconfig/CONFIG_NSC_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NSC_FIR=m
diff --git a/baseconfig/CONFIG_NTB_SWITCHTEC b/baseconfig/CONFIG_NTB_SWITCHTEC
new file mode 100644
index 0000000..3625873
--- /dev/null
+++ b/baseconfig/CONFIG_NTB_SWITCHTEC
@@ -0,0 +1 @@
+CONFIG_NTB_SWITCHTEC=m
diff --git a/baseconfig/CONFIG_NVME_MULTIPATH b/baseconfig/CONFIG_NVME_MULTIPATH
new file mode 100644
index 0000000..7eb14dd
--- /dev/null
+++ b/baseconfig/CONFIG_NVME_MULTIPATH
@@ -0,0 +1 @@
+CONFIG_NVME_MULTIPATH=y
diff --git a/baseconfig/CONFIG_OLD_BELKIN_DONGLE b/baseconfig/CONFIG_OLD_BELKIN_DONGLE
deleted file mode 100644
index 92a72ab..0000000
--- a/baseconfig/CONFIG_OLD_BELKIN_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_OLD_BELKIN_DONGLE=m
diff --git a/baseconfig/CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW b/baseconfig/CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW
new file mode 100644
index 0000000..23e8ade
--- /dev/null
+++ b/baseconfig/CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW
@@ -0,0 +1 @@
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
diff --git a/baseconfig/CONFIG_PINCTRL_CEDARFORK b/baseconfig/CONFIG_PINCTRL_CEDARFORK
new file mode 100644
index 0000000..b723950
--- /dev/null
+++ b/baseconfig/CONFIG_PINCTRL_CEDARFORK
@@ -0,0 +1 @@
+CONFIG_PINCTRL_CEDARFORK=m
diff --git a/baseconfig/CONFIG_PINCTRL_MESON_GXBB b/baseconfig/CONFIG_PINCTRL_MESON_GXBB
new file mode 100644
index 0000000..1c1b910
--- /dev/null
+++ b/baseconfig/CONFIG_PINCTRL_MESON_GXBB
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MESON_GXBB is not set
diff --git a/baseconfig/CONFIG_PINCTRL_MESON_GXL b/baseconfig/CONFIG_PINCTRL_MESON_GXL
new file mode 100644
index 0000000..5e0dcb6
--- /dev/null
+++ b/baseconfig/CONFIG_PINCTRL_MESON_GXL
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MESON_GXL is not set
diff --git a/baseconfig/CONFIG_PREEMPTIRQ_EVENTS b/baseconfig/CONFIG_PREEMPTIRQ_EVENTS
new file mode 100644
index 0000000..a7fcee8
--- /dev/null
+++ b/baseconfig/CONFIG_PREEMPTIRQ_EVENTS
@@ -0,0 +1 @@
+# CONFIG_PREEMPTIRQ_EVENTS is not set
diff --git a/baseconfig/CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT b/baseconfig/CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT
new file mode 100644
index 0000000..8f9c328
--- /dev/null
+++ b/baseconfig/CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT
@@ -0,0 +1 @@
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
diff --git a/baseconfig/CONFIG_RENESAS_PHY b/baseconfig/CONFIG_RENESAS_PHY
new file mode 100644
index 0000000..2314e0c
--- /dev/null
+++ b/baseconfig/CONFIG_RENESAS_PHY
@@ -0,0 +1 @@
+CONFIG_RENESAS_PHY=m
diff --git a/baseconfig/CONFIG_RFD77402 b/baseconfig/CONFIG_RFD77402
new file mode 100644
index 0000000..00383ff
--- /dev/null
+++ b/baseconfig/CONFIG_RFD77402
@@ -0,0 +1 @@
+# CONFIG_RFD77402 is not set
diff --git a/baseconfig/CONFIG_RPMSG_VIRTIO b/baseconfig/CONFIG_RPMSG_VIRTIO
new file mode 100644
index 0000000..78f0867
--- /dev/null
+++ b/baseconfig/CONFIG_RPMSG_VIRTIO
@@ -0,0 +1 @@
+CONFIG_RPMSG_VIRTIO=m
diff --git a/baseconfig/CONFIG_RTC_DRV_PCF85363 b/baseconfig/CONFIG_RTC_DRV_PCF85363
new file mode 100644
index 0000000..115d491
--- /dev/null
+++ b/baseconfig/CONFIG_RTC_DRV_PCF85363
@@ -0,0 +1 @@
+# CONFIG_RTC_DRV_PCF85363 is not set
diff --git a/baseconfig/CONFIG_SATA_MOBILE_LPM_POLICY b/baseconfig/CONFIG_SATA_MOBILE_LPM_POLICY
new file mode 100644
index 0000000..17ae48a
--- /dev/null
+++ b/baseconfig/CONFIG_SATA_MOBILE_LPM_POLICY
@@ -0,0 +1 @@
+CONFIG_SATA_MOBILE_LPM_POLICY=3
diff --git a/baseconfig/CONFIG_SENSORS_MAX31785 b/baseconfig/CONFIG_SENSORS_MAX31785
new file mode 100644
index 0000000..071991f
--- /dev/null
+++ b/baseconfig/CONFIG_SENSORS_MAX31785
@@ -0,0 +1 @@
+# CONFIG_SENSORS_MAX31785 is not set
diff --git a/baseconfig/CONFIG_SENSORS_MAX6621 b/baseconfig/CONFIG_SENSORS_MAX6621
new file mode 100644
index 0000000..cc3cdef
--- /dev/null
+++ b/baseconfig/CONFIG_SENSORS_MAX6621
@@ -0,0 +1 @@
+# CONFIG_SENSORS_MAX6621 is not set
diff --git a/baseconfig/CONFIG_SIGMATEL_FIR b/baseconfig/CONFIG_SIGMATEL_FIR
deleted file mode 100644
index 0483fa1..0000000
--- a/baseconfig/CONFIG_SIGMATEL_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SIGMATEL_FIR=m
diff --git a/baseconfig/CONFIG_SMC_IRCC_FIR b/baseconfig/CONFIG_SMC_IRCC_FIR
deleted file mode 100644
index 2b996d8..0000000
--- a/baseconfig/CONFIG_SMC_IRCC_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SMC_IRCC_FIR=m
diff --git a/baseconfig/CONFIG_SND_SOC_AMD_CZ_RT5645_MACH b/baseconfig/CONFIG_SND_SOC_AMD_CZ_RT5645_MACH
new file mode 100644
index 0000000..063f93a
--- /dev/null
+++ b/baseconfig/CONFIG_SND_SOC_AMD_CZ_RT5645_MACH
@@ -0,0 +1 @@
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
diff --git a/baseconfig/CONFIG_SOUND_PRIME b/baseconfig/CONFIG_SOUND_PRIME
deleted file mode 100644
index 7a8a0ab..0000000
--- a/baseconfig/CONFIG_SOUND_PRIME
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SOUND_PRIME is not set
diff --git a/baseconfig/CONFIG_TEGRA_BPMP_THERMAL b/baseconfig/CONFIG_TEGRA_BPMP_THERMAL
new file mode 100644
index 0000000..e1e1b80
--- /dev/null
+++ b/baseconfig/CONFIG_TEGRA_BPMP_THERMAL
@@ -0,0 +1 @@
+# CONFIG_TEGRA_BPMP_THERMAL is not set
diff --git a/baseconfig/CONFIG_TEKRAM_DONGLE b/baseconfig/CONFIG_TEKRAM_DONGLE
deleted file mode 100644
index b68cfc3..0000000
--- a/baseconfig/CONFIG_TEKRAM_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_TEKRAM_DONGLE=m
diff --git a/baseconfig/CONFIG_TEST_FIND_BIT b/baseconfig/CONFIG_TEST_FIND_BIT
new file mode 100644
index 0000000..23788bf
--- /dev/null
+++ b/baseconfig/CONFIG_TEST_FIND_BIT
@@ -0,0 +1 @@
+# CONFIG_TEST_FIND_BIT is not set
diff --git a/baseconfig/CONFIG_TI_DAC082S085 b/baseconfig/CONFIG_TI_DAC082S085
new file mode 100644
index 0000000..90397f5
--- /dev/null
+++ b/baseconfig/CONFIG_TI_DAC082S085
@@ -0,0 +1 @@
+# CONFIG_TI_DAC082S085 is not set
diff --git a/baseconfig/CONFIG_TOIM3232_DONGLE b/baseconfig/CONFIG_TOIM3232_DONGLE
deleted file mode 100644
index a657c04..0000000
--- a/baseconfig/CONFIG_TOIM3232_DONGLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_TOIM3232_DONGLE=m
diff --git a/baseconfig/CONFIG_TOSHIBA_FIR b/baseconfig/CONFIG_TOSHIBA_FIR
deleted file mode 100644
index fd5cda6..0000000
--- a/baseconfig/CONFIG_TOSHIBA_FIR
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_TOSHIBA_FIR is not set
diff --git a/baseconfig/CONFIG_TOUCHSCREEN_EXC3000 b/baseconfig/CONFIG_TOUCHSCREEN_EXC3000
new file mode 100644
index 0000000..99f4f0f
--- /dev/null
+++ b/baseconfig/CONFIG_TOUCHSCREEN_EXC3000
@@ -0,0 +1 @@
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
diff --git a/baseconfig/CONFIG_TOUCHSCREEN_HIDEEP b/baseconfig/CONFIG_TOUCHSCREEN_HIDEEP
new file mode 100644
index 0000000..95f913e
--- /dev/null
+++ b/baseconfig/CONFIG_TOUCHSCREEN_HIDEEP
@@ -0,0 +1 @@
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
diff --git a/baseconfig/CONFIG_TOUCHSCREEN_S6SY761 b/baseconfig/CONFIG_TOUCHSCREEN_S6SY761
new file mode 100644
index 0000000..3b9b34f
--- /dev/null
+++ b/baseconfig/CONFIG_TOUCHSCREEN_S6SY761
@@ -0,0 +1 @@
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
diff --git a/baseconfig/CONFIG_TPS68470_PMIC_OPREGION b/baseconfig/CONFIG_TPS68470_PMIC_OPREGION
new file mode 100644
index 0000000..1668945
--- /dev/null
+++ b/baseconfig/CONFIG_TPS68470_PMIC_OPREGION
@@ -0,0 +1 @@
+# CONFIG_TPS68470_PMIC_OPREGION is not set
diff --git a/baseconfig/CONFIG_TYPEC b/baseconfig/CONFIG_TYPEC
new file mode 100644
index 0000000..d8e689e
--- /dev/null
+++ b/baseconfig/CONFIG_TYPEC
@@ -0,0 +1 @@
+CONFIG_TYPEC=m
diff --git a/baseconfig/CONFIG_TYPEC_TPS6598X b/baseconfig/CONFIG_TYPEC_TPS6598X
new file mode 100644
index 0000000..b6ef0d6
--- /dev/null
+++ b/baseconfig/CONFIG_TYPEC_TPS6598X
@@ -0,0 +1 @@
+CONFIG_TYPEC_TPS6598X=m
diff --git a/baseconfig/CONFIG_USB_GADGET_LEGACY b/baseconfig/CONFIG_USB_GADGET_LEGACY
new file mode 100644
index 0000000..9c31304
--- /dev/null
+++ b/baseconfig/CONFIG_USB_GADGET_LEGACY
@@ -0,0 +1 @@
+# CONFIG_USB_GADGET_LEGACY is not set
diff --git a/baseconfig/CONFIG_USB_IRDA b/baseconfig/CONFIG_USB_IRDA
deleted file mode 100644
index 320b0d8..0000000
--- a/baseconfig/CONFIG_USB_IRDA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_IRDA=m
diff --git a/baseconfig/CONFIG_VIA_FIR b/baseconfig/CONFIG_VIA_FIR
deleted file mode 100644
index a123178..0000000
--- a/baseconfig/CONFIG_VIA_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VIA_FIR=m
diff --git a/baseconfig/CONFIG_VLSI_FIR b/baseconfig/CONFIG_VLSI_FIR
deleted file mode 100644
index fbade65..0000000
--- a/baseconfig/CONFIG_VLSI_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VLSI_FIR=m
diff --git a/baseconfig/CONFIG_VSOCKETS_DIAG b/baseconfig/CONFIG_VSOCKETS_DIAG
new file mode 100644
index 0000000..89432b0
--- /dev/null
+++ b/baseconfig/CONFIG_VSOCKETS_DIAG
@@ -0,0 +1 @@
+CONFIG_VSOCKETS_DIAG=m
diff --git a/baseconfig/CONFIG_W1_SLAVE_DS28E17 b/baseconfig/CONFIG_W1_SLAVE_DS28E17
new file mode 100644
index 0000000..2349a7b
--- /dev/null
+++ b/baseconfig/CONFIG_W1_SLAVE_DS28E17
@@ -0,0 +1 @@
+# CONFIG_W1_SLAVE_DS28E17 is not set
diff --git a/baseconfig/CONFIG_WINBOND_FIR b/baseconfig/CONFIG_WINBOND_FIR
deleted file mode 100644
index 6727562..0000000
--- a/baseconfig/CONFIG_WINBOND_FIR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_WINBOND_FIR=m
diff --git a/baseconfig/CONFIG_XEN_PVCALLS_FRONTEND b/baseconfig/CONFIG_XEN_PVCALLS_FRONTEND
new file mode 100644
index 0000000..057a413
--- /dev/null
+++ b/baseconfig/CONFIG_XEN_PVCALLS_FRONTEND
@@ -0,0 +1 @@
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
diff --git a/baseconfig/CONFIG_XFS_ONLINE_SCRUB b/baseconfig/CONFIG_XFS_ONLINE_SCRUB
new file mode 100644
index 0000000..dd4ff1f
--- /dev/null
+++ b/baseconfig/CONFIG_XFS_ONLINE_SCRUB
@@ -0,0 +1 @@
+# CONFIG_XFS_ONLINE_SCRUB is not set
diff --git a/baseconfig/arm/CONFIG_ARCH_BCM_HR2 b/baseconfig/arm/CONFIG_ARCH_BCM_HR2
new file mode 100644
index 0000000..e7a5a20
--- /dev/null
+++ b/baseconfig/arm/CONFIG_ARCH_BCM_HR2
@@ -0,0 +1 @@
+# CONFIG_ARCH_BCM_HR2 is not set
diff --git a/baseconfig/arm/CONFIG_ARM_SPE_PMU b/baseconfig/arm/CONFIG_ARM_SPE_PMU
new file mode 100644
index 0000000..c7f32cf
--- /dev/null
+++ b/baseconfig/arm/CONFIG_ARM_SPE_PMU
@@ -0,0 +1 @@
+CONFIG_ARM_SPE_PMU=m
diff --git a/baseconfig/arm/CONFIG_BINFMT_ELF_FDPIC b/baseconfig/arm/CONFIG_BINFMT_ELF_FDPIC
new file mode 100644
index 0000000..f399e3a
--- /dev/null
+++ b/baseconfig/arm/CONFIG_BINFMT_ELF_FDPIC
@@ -0,0 +1 @@
+# CONFIG_BINFMT_ELF_FDPIC is not set
diff --git a/baseconfig/arm/CONFIG_DRM_SUN4I_HDMI b/baseconfig/arm/CONFIG_DRM_SUN4I_HDMI
new file mode 100644
index 0000000..cda1f60
--- /dev/null
+++ b/baseconfig/arm/CONFIG_DRM_SUN4I_HDMI
@@ -0,0 +1 @@
+CONFIG_DRM_SUN4I_HDMI=m
diff --git a/baseconfig/arm/CONFIG_DRM_SUN4I_HDMI_CEC b/baseconfig/arm/CONFIG_DRM_SUN4I_HDMI_CEC
new file mode 100644
index 0000000..146d940
--- /dev/null
+++ b/baseconfig/arm/CONFIG_DRM_SUN4I_HDMI_CEC
@@ -0,0 +1 @@
+CONFIG_DRM_SUN4I_HDMI_CEC=y
diff --git a/baseconfig/arm/CONFIG_GPIO_PCF857X b/baseconfig/arm/CONFIG_GPIO_PCF857X
new file mode 100644
index 0000000..a5a82a6
--- /dev/null
+++ b/baseconfig/arm/CONFIG_GPIO_PCF857X
@@ -0,0 +1 @@
+CONFIG_GPIO_PCF857X=m
diff --git a/baseconfig/arm/CONFIG_HISI_PMU b/baseconfig/arm/CONFIG_HISI_PMU
new file mode 100644
index 0000000..7bd6395
--- /dev/null
+++ b/baseconfig/arm/CONFIG_HISI_PMU
@@ -0,0 +1 @@
+CONFIG_HISI_PMU=y
diff --git a/baseconfig/arm/CONFIG_MESON_IRQ_GPIO b/baseconfig/arm/CONFIG_MESON_IRQ_GPIO
new file mode 100644
index 0000000..ee55002
--- /dev/null
+++ b/baseconfig/arm/CONFIG_MESON_IRQ_GPIO
@@ -0,0 +1 @@
+CONFIG_MESON_IRQ_GPIO=y
diff --git a/baseconfig/arm/CONFIG_MMC_MESON_MX_SDIO b/baseconfig/arm/CONFIG_MMC_MESON_MX_SDIO
new file mode 100644
index 0000000..4b58af4
--- /dev/null
+++ b/baseconfig/arm/CONFIG_MMC_MESON_MX_SDIO
@@ -0,0 +1 @@
+CONFIG_MMC_MESON_MX_SDIO=m
diff --git a/baseconfig/arm/CONFIG_MMC_SDHCI_OMAP b/baseconfig/arm/CONFIG_MMC_SDHCI_OMAP
new file mode 100644
index 0000000..293bf33
--- /dev/null
+++ b/baseconfig/arm/CONFIG_MMC_SDHCI_OMAP
@@ -0,0 +1 @@
+CONFIG_MMC_SDHCI_OMAP=m
diff --git a/baseconfig/arm/CONFIG_NVMEM_SNVS_LPGPR b/baseconfig/arm/CONFIG_NVMEM_SNVS_LPGPR
new file mode 100644
index 0000000..be81f38
--- /dev/null
+++ b/baseconfig/arm/CONFIG_NVMEM_SNVS_LPGPR
@@ -0,0 +1 @@
+# CONFIG_NVMEM_SNVS_LPGPR is not set
diff --git a/baseconfig/arm/CONFIG_PCIE_HISI_STB b/baseconfig/arm/CONFIG_PCIE_HISI_STB
new file mode 100644
index 0000000..40c67db
--- /dev/null
+++ b/baseconfig/arm/CONFIG_PCIE_HISI_STB
@@ -0,0 +1 @@
+CONFIG_PCIE_HISI_STB=y
diff --git a/baseconfig/arm/CONFIG_PINCTRL_MESON8 b/baseconfig/arm/CONFIG_PINCTRL_MESON8
new file mode 100644
index 0000000..49f6d3f
--- /dev/null
+++ b/baseconfig/arm/CONFIG_PINCTRL_MESON8
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MESON8 is not set
diff --git a/baseconfig/arm/CONFIG_PINCTRL_MESON8B b/baseconfig/arm/CONFIG_PINCTRL_MESON8B
new file mode 100644
index 0000000..fe5151c
--- /dev/null
+++ b/baseconfig/arm/CONFIG_PINCTRL_MESON8B
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MESON8B is not set
diff --git a/baseconfig/arm/CONFIG_QCOM_RMTFS_MEM b/baseconfig/arm/CONFIG_QCOM_RMTFS_MEM
new file mode 100644
index 0000000..3d1c319
--- /dev/null
+++ b/baseconfig/arm/CONFIG_QCOM_RMTFS_MEM
@@ -0,0 +1 @@
+CONFIG_QCOM_RMTFS_MEM=m
diff --git a/baseconfig/arm/CONFIG_RESET_SIMPLE b/baseconfig/arm/CONFIG_RESET_SIMPLE
new file mode 100644
index 0000000..663fbe2
--- /dev/null
+++ b/baseconfig/arm/CONFIG_RESET_SIMPLE
@@ -0,0 +1 @@
+CONFIG_RESET_SIMPLE=y
diff --git a/baseconfig/arm/CONFIG_ROCKCHIP_LVDS b/baseconfig/arm/CONFIG_ROCKCHIP_LVDS
new file mode 100644
index 0000000..8ea9897
--- /dev/null
+++ b/baseconfig/arm/CONFIG_ROCKCHIP_LVDS
@@ -0,0 +1 @@
+CONFIG_ROCKCHIP_LVDS=y
diff --git a/baseconfig/arm/CONFIG_SIMPLE_PM_BUS b/baseconfig/arm/CONFIG_SIMPLE_PM_BUS
new file mode 100644
index 0000000..3cc2147
--- /dev/null
+++ b/baseconfig/arm/CONFIG_SIMPLE_PM_BUS
@@ -0,0 +1 @@
+CONFIG_SIMPLE_PM_BUS=y
diff --git a/baseconfig/arm/CONFIG_VIDEO_ROCKCHIP_RGA b/baseconfig/arm/CONFIG_VIDEO_ROCKCHIP_RGA
new file mode 100644
index 0000000..433e78f
--- /dev/null
+++ b/baseconfig/arm/CONFIG_VIDEO_ROCKCHIP_RGA
@@ -0,0 +1 @@
+CONFIG_VIDEO_ROCKCHIP_RGA=m
diff --git a/baseconfig/arm/CONFIG_VIDEO_TEGRA_HDMI_CEC b/baseconfig/arm/CONFIG_VIDEO_TEGRA_HDMI_CEC
new file mode 100644
index 0000000..01064a6
--- /dev/null
+++ b/baseconfig/arm/CONFIG_VIDEO_TEGRA_HDMI_CEC
@@ -0,0 +1 @@
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_64BIT b/baseconfig/arm/aarch64/CONFIG_64BIT
new file mode 100644
index 0000000..06a94e4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_64BIT
@@ -0,0 +1 @@
+CONFIG_64BIT=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI b/baseconfig/arm/aarch64/CONFIG_ACPI
new file mode 100644
index 0000000..839566b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI
@@ -0,0 +1 @@
+CONFIG_ACPI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI
new file mode 100644
index 0000000..9ab33fa
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI
@@ -0,0 +1 @@
+CONFIG_ACPI_APEI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_EINJ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_EINJ
new file mode 100644
index 0000000..2d03b69
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_EINJ
@@ -0,0 +1 @@
+# CONFIG_ACPI_APEI_EINJ is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_ERST_DEBUG b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_ERST_DEBUG
new file mode 100644
index 0000000..235760d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_ERST_DEBUG
@@ -0,0 +1 @@
+# CONFIG_ACPI_APEI_ERST_DEBUG is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_GHES b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_GHES
new file mode 100644
index 0000000..8fd037d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_GHES
@@ -0,0 +1 @@
+CONFIG_ACPI_APEI_GHES=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_MEMORY_FAILURE b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_MEMORY_FAILURE
new file mode 100644
index 0000000..46aa157
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_MEMORY_FAILURE
@@ -0,0 +1 @@
+CONFIG_ACPI_APEI_MEMORY_FAILURE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_PCIEAER b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_PCIEAER
new file mode 100644
index 0000000..26f3e91
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_PCIEAER
@@ -0,0 +1 @@
+CONFIG_ACPI_APEI_PCIEAER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_SEA b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_SEA
new file mode 100644
index 0000000..db573ff
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_APEI_SEA
@@ -0,0 +1 @@
+CONFIG_ACPI_APEI_SEA=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_BGRT b/baseconfig/arm/aarch64/CONFIG_ACPI_BGRT
new file mode 100644
index 0000000..13035dd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_BGRT
@@ -0,0 +1 @@
+CONFIG_ACPI_BGRT=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_BUTTON b/baseconfig/arm/aarch64/CONFIG_ACPI_BUTTON
new file mode 100644
index 0000000..e40dff4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_BUTTON
@@ -0,0 +1 @@
+CONFIG_ACPI_BUTTON=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_CONFIGFS b/baseconfig/arm/aarch64/CONFIG_ACPI_CONFIGFS
new file mode 100644
index 0000000..fc2af2c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_CONFIGFS
@@ -0,0 +1 @@
+CONFIG_ACPI_CONFIGFS=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_CONTAINER b/baseconfig/arm/aarch64/CONFIG_ACPI_CONTAINER
new file mode 100644
index 0000000..24287da
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_CONTAINER
@@ -0,0 +1 @@
+CONFIG_ACPI_CONTAINER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_CPPC_CPUFREQ b/baseconfig/arm/aarch64/CONFIG_ACPI_CPPC_CPUFREQ
new file mode 100644
index 0000000..5cc8813
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_CPPC_CPUFREQ
@@ -0,0 +1 @@
+CONFIG_ACPI_CPPC_CPUFREQ=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_CUSTOM_METHOD b/baseconfig/arm/aarch64/CONFIG_ACPI_CUSTOM_METHOD
new file mode 100644
index 0000000..76853b6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_CUSTOM_METHOD
@@ -0,0 +1 @@
+CONFIG_ACPI_CUSTOM_METHOD=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_DOCK b/baseconfig/arm/aarch64/CONFIG_ACPI_DOCK
new file mode 100644
index 0000000..e4d9163
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_DOCK
@@ -0,0 +1 @@
+CONFIG_ACPI_DOCK=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_EC_DEBUGFS b/baseconfig/arm/aarch64/CONFIG_ACPI_EC_DEBUGFS
new file mode 100644
index 0000000..df1424c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_EC_DEBUGFS
@@ -0,0 +1 @@
+CONFIG_ACPI_EC_DEBUGFS=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_FAN b/baseconfig/arm/aarch64/CONFIG_ACPI_FAN
new file mode 100644
index 0000000..f45a966
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_FAN
@@ -0,0 +1 @@
+CONFIG_ACPI_FAN=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_HED b/baseconfig/arm/aarch64/CONFIG_ACPI_HED
new file mode 100644
index 0000000..06042df
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_HED
@@ -0,0 +1 @@
+CONFIG_ACPI_HED=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_I2C_OPREGION b/baseconfig/arm/aarch64/CONFIG_ACPI_I2C_OPREGION
new file mode 100644
index 0000000..92036b9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_I2C_OPREGION
@@ -0,0 +1 @@
+CONFIG_ACPI_I2C_OPREGION=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_IPMI b/baseconfig/arm/aarch64/CONFIG_ACPI_IPMI
new file mode 100644
index 0000000..e40fb9a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_IPMI
@@ -0,0 +1 @@
+CONFIG_ACPI_IPMI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_NFIT b/baseconfig/arm/aarch64/CONFIG_ACPI_NFIT
new file mode 100644
index 0000000..922b719
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_NFIT
@@ -0,0 +1 @@
+CONFIG_ACPI_NFIT=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_NFIT_DEBUG b/baseconfig/arm/aarch64/CONFIG_ACPI_NFIT_DEBUG
new file mode 100644
index 0000000..fc82932
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_NFIT_DEBUG
@@ -0,0 +1 @@
+# CONFIG_ACPI_NFIT_DEBUG is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_NUMA b/baseconfig/arm/aarch64/CONFIG_ACPI_NUMA
new file mode 100644
index 0000000..19881f4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_NUMA
@@ -0,0 +1 @@
+CONFIG_ACPI_NUMA=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_PROCESSOR b/baseconfig/arm/aarch64/CONFIG_ACPI_PROCESSOR
new file mode 100644
index 0000000..a24416d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_PROCESSOR
@@ -0,0 +1 @@
+CONFIG_ACPI_PROCESSOR=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_PROCFS_POWER b/baseconfig/arm/aarch64/CONFIG_ACPI_PROCFS_POWER
new file mode 100644
index 0000000..26cea31
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_PROCFS_POWER
@@ -0,0 +1 @@
+CONFIG_ACPI_PROCFS_POWER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_TABLE_UPGRADE b/baseconfig/arm/aarch64/CONFIG_ACPI_TABLE_UPGRADE
new file mode 100644
index 0000000..276233f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_TABLE_UPGRADE
@@ -0,0 +1 @@
+CONFIG_ACPI_TABLE_UPGRADE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_THERMAL b/baseconfig/arm/aarch64/CONFIG_ACPI_THERMAL
new file mode 100644
index 0000000..1bd7964
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_THERMAL
@@ -0,0 +1 @@
+CONFIG_ACPI_THERMAL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ACPI_WATCHDOG b/baseconfig/arm/aarch64/CONFIG_ACPI_WATCHDOG
new file mode 100644
index 0000000..d82966e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ACPI_WATCHDOG
@@ -0,0 +1 @@
+CONFIG_ACPI_WATCHDOG=y
diff --git a/baseconfig/arm/aarch64/CONFIG_AHCI_SUNXI b/baseconfig/arm/aarch64/CONFIG_AHCI_SUNXI
new file mode 100644
index 0000000..91560d6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AHCI_SUNXI
@@ -0,0 +1 @@
+CONFIG_AHCI_SUNXI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_AHCI_XGENE b/baseconfig/arm/aarch64/CONFIG_AHCI_XGENE
new file mode 100644
index 0000000..7e02b99
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AHCI_XGENE
@@ -0,0 +1 @@
+CONFIG_AHCI_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_AMBA_PL08X b/baseconfig/arm/aarch64/CONFIG_AMBA_PL08X
new file mode 100644
index 0000000..a13d91b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AMBA_PL08X
@@ -0,0 +1 @@
+# CONFIG_AMBA_PL08X is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_AMD_XGBE b/baseconfig/arm/aarch64/CONFIG_AMD_XGBE
new file mode 100644
index 0000000..27be1a7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AMD_XGBE
@@ -0,0 +1 @@
+CONFIG_AMD_XGBE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_AMD_XGBE_DCB b/baseconfig/arm/aarch64/CONFIG_AMD_XGBE_DCB
new file mode 100644
index 0000000..f3cdcca
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AMD_XGBE_DCB
@@ -0,0 +1 @@
+CONFIG_AMD_XGBE_DCB=y
diff --git a/baseconfig/arm/aarch64/CONFIG_APQ_GCC_8084 b/baseconfig/arm/aarch64/CONFIG_APQ_GCC_8084
new file mode 100644
index 0000000..bacb61e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_APQ_GCC_8084
@@ -0,0 +1 @@
+CONFIG_APQ_GCC_8084=y
diff --git a/baseconfig/arm/aarch64/CONFIG_APQ_MMCC_8084 b/baseconfig/arm/aarch64/CONFIG_APQ_MMCC_8084
new file mode 100644
index 0000000..05c8d0c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_APQ_MMCC_8084
@@ -0,0 +1 @@
+CONFIG_APQ_MMCC_8084=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_ALPINE b/baseconfig/arm/aarch64/CONFIG_ARCH_ALPINE
new file mode 100644
index 0000000..a347a04
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_ALPINE
@@ -0,0 +1 @@
+# CONFIG_ARCH_ALPINE is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_BERLIN b/baseconfig/arm/aarch64/CONFIG_ARCH_BERLIN
new file mode 100644
index 0000000..9a647a4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_BERLIN
@@ -0,0 +1 @@
+# CONFIG_ARCH_BERLIN is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_EXYNOS b/baseconfig/arm/aarch64/CONFIG_ARCH_EXYNOS
new file mode 100644
index 0000000..1ee894d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_EXYNOS
@@ -0,0 +1 @@
+# CONFIG_ARCH_EXYNOS is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL b/baseconfig/arm/aarch64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
new file mode 100644
index 0000000..e87b4da
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
@@ -0,0 +1 @@
+CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_HISI b/baseconfig/arm/aarch64/CONFIG_ARCH_HISI
new file mode 100644
index 0000000..9afa5dc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_HISI
@@ -0,0 +1 @@
+CONFIG_ARCH_HISI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_LAYERSCAPE b/baseconfig/arm/aarch64/CONFIG_ARCH_LAYERSCAPE
new file mode 100644
index 0000000..257f6f9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_LAYERSCAPE
@@ -0,0 +1 @@
+# CONFIG_ARCH_LAYERSCAPE is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_LG1K b/baseconfig/arm/aarch64/CONFIG_ARCH_LG1K
new file mode 100644
index 0000000..0d73af4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_LG1K
@@ -0,0 +1 @@
+# CONFIG_ARCH_LG1K is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_MEDIATEK b/baseconfig/arm/aarch64/CONFIG_ARCH_MEDIATEK
new file mode 100644
index 0000000..62b0a1f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_MEDIATEK
@@ -0,0 +1 @@
+# CONFIG_ARCH_MEDIATEK is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_QCOM b/baseconfig/arm/aarch64/CONFIG_ARCH_QCOM
new file mode 100644
index 0000000..e51a38a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_QCOM
@@ -0,0 +1 @@
+CONFIG_ARCH_QCOM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_REALTEK b/baseconfig/arm/aarch64/CONFIG_ARCH_REALTEK
new file mode 100644
index 0000000..49536f6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_REALTEK
@@ -0,0 +1 @@
+# CONFIG_ARCH_REALTEK is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_RENESAS b/baseconfig/arm/aarch64/CONFIG_ARCH_RENESAS
new file mode 100644
index 0000000..0fa3a2e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_RENESAS
@@ -0,0 +1 @@
+# CONFIG_ARCH_RENESAS is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_SEATTLE b/baseconfig/arm/aarch64/CONFIG_ARCH_SEATTLE
new file mode 100644
index 0000000..83c1e8b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_SEATTLE
@@ -0,0 +1 @@
+CONFIG_ARCH_SEATTLE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_SPRD b/baseconfig/arm/aarch64/CONFIG_ARCH_SPRD
new file mode 100644
index 0000000..a090576
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_SPRD
@@ -0,0 +1 @@
+# CONFIG_ARCH_SPRD is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_STRATIX10 b/baseconfig/arm/aarch64/CONFIG_ARCH_STRATIX10
new file mode 100644
index 0000000..ef575bb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_STRATIX10
@@ -0,0 +1 @@
+# CONFIG_ARCH_STRATIX10 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_SUNXI b/baseconfig/arm/aarch64/CONFIG_ARCH_SUNXI
new file mode 100644
index 0000000..6cf4026
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_SUNXI
@@ -0,0 +1 @@
+CONFIG_ARCH_SUNXI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_SYNQUACER b/baseconfig/arm/aarch64/CONFIG_ARCH_SYNQUACER
new file mode 100644
index 0000000..e190212
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_SYNQUACER
@@ -0,0 +1 @@
+CONFIG_ARCH_SYNQUACER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA
new file mode 100644
index 0000000..3b74d56
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA
@@ -0,0 +1 @@
+CONFIG_ARCH_TEGRA=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_132_SOC b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_132_SOC
new file mode 100644
index 0000000..b6d3de8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_132_SOC
@@ -0,0 +1 @@
+CONFIG_ARCH_TEGRA_132_SOC=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_186_SOC b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_186_SOC
new file mode 100644
index 0000000..1cafdb2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_186_SOC
@@ -0,0 +1 @@
+CONFIG_ARCH_TEGRA_186_SOC=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_210_SOC b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_210_SOC
new file mode 100644
index 0000000..0750c3e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_TEGRA_210_SOC
@@ -0,0 +1 @@
+CONFIG_ARCH_TEGRA_210_SOC=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_THUNDER b/baseconfig/arm/aarch64/CONFIG_ARCH_THUNDER
new file mode 100644
index 0000000..fc1527e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_THUNDER
@@ -0,0 +1 @@
+CONFIG_ARCH_THUNDER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_THUNDER2 b/baseconfig/arm/aarch64/CONFIG_ARCH_THUNDER2
new file mode 100644
index 0000000..aa0f1f3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_THUNDER2
@@ -0,0 +1 @@
+CONFIG_ARCH_THUNDER2=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_UNIPHIER b/baseconfig/arm/aarch64/CONFIG_ARCH_UNIPHIER
new file mode 100644
index 0000000..2c11033
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_UNIPHIER
@@ -0,0 +1 @@
+# CONFIG_ARCH_UNIPHIER is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_XGENE b/baseconfig/arm/aarch64/CONFIG_ARCH_XGENE
new file mode 100644
index 0000000..c1bd4d1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_XGENE
@@ -0,0 +1 @@
+CONFIG_ARCH_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_ZX b/baseconfig/arm/aarch64/CONFIG_ARCH_ZX
new file mode 100644
index 0000000..ec10bbf
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_ZX
@@ -0,0 +1 @@
+# CONFIG_ARCH_ZX is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARCH_ZYNQMP b/baseconfig/arm/aarch64/CONFIG_ARCH_ZYNQMP
new file mode 100644
index 0000000..f92a386
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARCH_ZYNQMP
@@ -0,0 +1 @@
+# CONFIG_ARCH_ZYNQMP is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64 b/baseconfig/arm/aarch64/CONFIG_ARM64
new file mode 100644
index 0000000..e40393f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64
@@ -0,0 +1 @@
+CONFIG_ARM64=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_4K_PAGES b/baseconfig/arm/aarch64/CONFIG_ARM64_4K_PAGES
new file mode 100644
index 0000000..5df91df
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_4K_PAGES
@@ -0,0 +1 @@
+CONFIG_ARM64_4K_PAGES=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL b/baseconfig/arm/aarch64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL
new file mode 100644
index 0000000..bdb5142
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL
@@ -0,0 +1 @@
+CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_CRYPTO b/baseconfig/arm/aarch64/CONFIG_ARM64_CRYPTO
new file mode 100644
index 0000000..3e9856e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_CRYPTO
@@ -0,0 +1 @@
+CONFIG_ARM64_CRYPTO=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_819472 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_819472
new file mode 100644
index 0000000..e53fbbb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_819472
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_819472=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_824069 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_824069
new file mode 100644
index 0000000..2b4897f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_824069
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_824069=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_826319 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_826319
new file mode 100644
index 0000000..8a3b9aa
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_826319
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_826319=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_827319 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_827319
new file mode 100644
index 0000000..d341b42
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_827319
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_827319=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_832075 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_832075
new file mode 100644
index 0000000..9d1f8fc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_832075
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_832075=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_834220 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_834220
new file mode 100644
index 0000000..a4bf47d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_834220
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_834220=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_843419 b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_843419
new file mode 100644
index 0000000..303cae7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_ERRATUM_843419
@@ -0,0 +1 @@
+CONFIG_ARM64_ERRATUM_843419=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_HW_AFDBM b/baseconfig/arm/aarch64/CONFIG_ARM64_HW_AFDBM
new file mode 100644
index 0000000..4fc9f03
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_HW_AFDBM
@@ -0,0 +1 @@
+CONFIG_ARM64_HW_AFDBM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_LSE_ATOMICS b/baseconfig/arm/aarch64/CONFIG_ARM64_LSE_ATOMICS
new file mode 100644
index 0000000..a54d600
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_LSE_ATOMICS
@@ -0,0 +1 @@
+CONFIG_ARM64_LSE_ATOMICS=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_PAN b/baseconfig/arm/aarch64/CONFIG_ARM64_PAN
new file mode 100644
index 0000000..ac8c85a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_PAN
@@ -0,0 +1 @@
+CONFIG_ARM64_PAN=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_PMEM b/baseconfig/arm/aarch64/CONFIG_ARM64_PMEM
new file mode 100644
index 0000000..9325600
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_PMEM
@@ -0,0 +1 @@
+# CONFIG_ARM64_PMEM is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_PTDUMP b/baseconfig/arm/aarch64/CONFIG_ARM64_PTDUMP
new file mode 100644
index 0000000..5090299
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_PTDUMP
@@ -0,0 +1 @@
+# CONFIG_ARM64_PTDUMP is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_PTDUMP_DEBUGFS b/baseconfig/arm/aarch64/CONFIG_ARM64_PTDUMP_DEBUGFS
new file mode 100644
index 0000000..2d698a9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_PTDUMP_DEBUGFS
@@ -0,0 +1 @@
+CONFIG_ARM64_PTDUMP_DEBUGFS=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET b/baseconfig/arm/aarch64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET
new file mode 100644
index 0000000..a7f7cd7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET
@@ -0,0 +1 @@
+# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_RELOC_TEST b/baseconfig/arm/aarch64/CONFIG_ARM64_RELOC_TEST
new file mode 100644
index 0000000..864fc6a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_RELOC_TEST
@@ -0,0 +1 @@
+# CONFIG_ARM64_RELOC_TEST is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_SVE b/baseconfig/arm/aarch64/CONFIG_ARM64_SVE
new file mode 100644
index 0000000..cbb647e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_SVE
@@ -0,0 +1 @@
+CONFIG_ARM64_SVE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_SW_TTBR0_PAN b/baseconfig/arm/aarch64/CONFIG_ARM64_SW_TTBR0_PAN
new file mode 100644
index 0000000..294c8ec
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_SW_TTBR0_PAN
@@ -0,0 +1 @@
+CONFIG_ARM64_SW_TTBR0_PAN=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_UAO b/baseconfig/arm/aarch64/CONFIG_ARM64_UAO
new file mode 100644
index 0000000..1b63cd4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_UAO
@@ -0,0 +1 @@
+CONFIG_ARM64_UAO=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_VA_BITS b/baseconfig/arm/aarch64/CONFIG_ARM64_VA_BITS
new file mode 100644
index 0000000..3a2764d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_VA_BITS
@@ -0,0 +1 @@
+CONFIG_ARM64_VA_BITS=48
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_VA_BITS_48 b/baseconfig/arm/aarch64/CONFIG_ARM64_VA_BITS_48
new file mode 100644
index 0000000..1bafe6e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_VA_BITS_48
@@ -0,0 +1 @@
+CONFIG_ARM64_VA_BITS_48=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM64_VHE b/baseconfig/arm/aarch64/CONFIG_ARM64_VHE
new file mode 100644
index 0000000..340b2bf
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM64_VHE
@@ -0,0 +1 @@
+CONFIG_ARM64_VHE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARMADA_AP806_SYSCON b/baseconfig/arm/aarch64/CONFIG_ARMADA_AP806_SYSCON
new file mode 100644
index 0000000..c0741ca
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARMADA_AP806_SYSCON
@@ -0,0 +1 @@
+CONFIG_ARMADA_AP806_SYSCON=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM_SBSA_WATCHDOG b/baseconfig/arm/aarch64/CONFIG_ARM_SBSA_WATCHDOG
new file mode 100644
index 0000000..01aa8f1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM_SBSA_WATCHDOG
@@ -0,0 +1 @@
+CONFIG_ARM_SBSA_WATCHDOG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM_SMMU_V3 b/baseconfig/arm/aarch64/CONFIG_ARM_SMMU_V3
new file mode 100644
index 0000000..83d144a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM_SMMU_V3
@@ -0,0 +1 @@
+CONFIG_ARM_SMMU_V3=y
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM_TEGRA186_CPUFREQ b/baseconfig/arm/aarch64/CONFIG_ARM_TEGRA186_CPUFREQ
new file mode 100644
index 0000000..f0e165d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM_TEGRA186_CPUFREQ
@@ -0,0 +1 @@
+CONFIG_ARM_TEGRA186_CPUFREQ=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ARM_TEGRA_DEVFREQ b/baseconfig/arm/aarch64/CONFIG_ARM_TEGRA_DEVFREQ
new file mode 100644
index 0000000..d64e3e3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ARM_TEGRA_DEVFREQ
@@ -0,0 +1 @@
+CONFIG_ARM_TEGRA_DEVFREQ=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ATA_ACPI b/baseconfig/arm/aarch64/CONFIG_ATA_ACPI
new file mode 100644
index 0000000..a0be76e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ATA_ACPI
@@ -0,0 +1 @@
+CONFIG_ATA_ACPI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_AXP20X_ADC b/baseconfig/arm/aarch64/CONFIG_AXP20X_ADC
new file mode 100644
index 0000000..025239f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AXP20X_ADC
@@ -0,0 +1 @@
+CONFIG_AXP20X_ADC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_AXP20X_POWER b/baseconfig/arm/aarch64/CONFIG_AXP20X_POWER
new file mode 100644
index 0000000..ddf89f5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AXP20X_POWER
@@ -0,0 +1 @@
+CONFIG_AXP20X_POWER=m
diff --git a/baseconfig/arm/aarch64/CONFIG_AXP288_ADC b/baseconfig/arm/aarch64/CONFIG_AXP288_ADC
new file mode 100644
index 0000000..e138f36
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AXP288_ADC
@@ -0,0 +1 @@
+CONFIG_AXP288_ADC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_AXP288_CHARGER b/baseconfig/arm/aarch64/CONFIG_AXP288_CHARGER
new file mode 100644
index 0000000..0418f96
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AXP288_CHARGER
@@ -0,0 +1 @@
+CONFIG_AXP288_CHARGER=m
diff --git a/baseconfig/arm/aarch64/CONFIG_AXP288_FUEL_GAUGE b/baseconfig/arm/aarch64/CONFIG_AXP288_FUEL_GAUGE
new file mode 100644
index 0000000..e171b95
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_AXP288_FUEL_GAUGE
@@ -0,0 +1 @@
+CONFIG_AXP288_FUEL_GAUGE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_BATTERY_AXP20X b/baseconfig/arm/aarch64/CONFIG_BATTERY_AXP20X
new file mode 100644
index 0000000..75591a2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BATTERY_AXP20X
@@ -0,0 +1 @@
+CONFIG_BATTERY_AXP20X=m
diff --git a/baseconfig/arm/aarch64/CONFIG_BCMA_POSSIBLE b/baseconfig/arm/aarch64/CONFIG_BCMA_POSSIBLE
new file mode 100644
index 0000000..aa4a926
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BCMA_POSSIBLE
@@ -0,0 +1 @@
+CONFIG_BCMA_POSSIBLE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_BCM_PDC_MBOX b/baseconfig/arm/aarch64/CONFIG_BCM_PDC_MBOX
new file mode 100644
index 0000000..23c2457
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BCM_PDC_MBOX
@@ -0,0 +1 @@
+# CONFIG_BCM_PDC_MBOX is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE b/baseconfig/arm/aarch64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
new file mode 100644
index 0000000..71343dc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
@@ -0,0 +1 @@
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
diff --git a/baseconfig/arm/aarch64/CONFIG_BRCMUTIL b/baseconfig/arm/aarch64/CONFIG_BRCMUTIL
new file mode 100644
index 0000000..66c5eac
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BRCMUTIL
@@ -0,0 +1 @@
+CONFIG_BRCMUTIL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_BTT b/baseconfig/arm/aarch64/CONFIG_BTT
new file mode 100644
index 0000000..9cfddf1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BTT
@@ -0,0 +1 @@
+CONFIG_BTT=y
diff --git a/baseconfig/arm/aarch64/CONFIG_BT_QCOMSMD b/baseconfig/arm/aarch64/CONFIG_BT_QCOMSMD
new file mode 100644
index 0000000..9f36fb6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BT_QCOMSMD
@@ -0,0 +1 @@
+CONFIG_BT_QCOMSMD=m
diff --git a/baseconfig/arm/aarch64/CONFIG_BUG b/baseconfig/arm/aarch64/CONFIG_BUG
new file mode 100644
index 0000000..7a3a7bf
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_BUG
@@ -0,0 +1 @@
+CONFIG_BUG=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CAN_SUN4I b/baseconfig/arm/aarch64/CONFIG_CAN_SUN4I
new file mode 100644
index 0000000..925f02a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAN_SUN4I
@@ -0,0 +1 @@
+CONFIG_CAN_SUN4I=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CAVIUM_CPT b/baseconfig/arm/aarch64/CONFIG_CAVIUM_CPT
new file mode 100644
index 0000000..1838056
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAVIUM_CPT
@@ -0,0 +1 @@
+CONFIG_CAVIUM_CPT=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_22375 b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_22375
new file mode 100644
index 0000000..e173734
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_22375
@@ -0,0 +1 @@
+CONFIG_CAVIUM_ERRATUM_22375=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_23144 b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_23144
new file mode 100644
index 0000000..59e70bc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_23144
@@ -0,0 +1 @@
+CONFIG_CAVIUM_ERRATUM_23144=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_23154 b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_23154
new file mode 100644
index 0000000..04080e7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_23154
@@ -0,0 +1 @@
+CONFIG_CAVIUM_ERRATUM_23154=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_27456 b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_27456
new file mode 100644
index 0000000..540c843
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_27456
@@ -0,0 +1 @@
+CONFIG_CAVIUM_ERRATUM_27456=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_30115 b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_30115
new file mode 100644
index 0000000..e3f4218
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CAVIUM_ERRATUM_30115
@@ -0,0 +1 @@
+CONFIG_CAVIUM_ERRATUM_30115=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CHARGER_AXP20X b/baseconfig/arm/aarch64/CONFIG_CHARGER_AXP20X
new file mode 100644
index 0000000..2e64e77
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CHARGER_AXP20X
@@ -0,0 +1 @@
+CONFIG_CHARGER_AXP20X=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CHARGER_MANAGER b/baseconfig/arm/aarch64/CONFIG_CHARGER_MANAGER
new file mode 100644
index 0000000..51fe252
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CHARGER_MANAGER
@@ -0,0 +1 @@
+# CONFIG_CHARGER_MANAGER is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_CHARGER_QCOM_SMBB b/baseconfig/arm/aarch64/CONFIG_CHARGER_QCOM_SMBB
new file mode 100644
index 0000000..43a91eb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CHARGER_QCOM_SMBB
@@ -0,0 +1 @@
+CONFIG_CHARGER_QCOM_SMBB=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CLKDEV_LOOKUP b/baseconfig/arm/aarch64/CONFIG_CLKDEV_LOOKUP
new file mode 100644
index 0000000..90b1bab
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CLKDEV_LOOKUP
@@ -0,0 +1 @@
+CONFIG_CLKDEV_LOOKUP=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CMDLINE b/baseconfig/arm/aarch64/CONFIG_CMDLINE
new file mode 100644
index 0000000..f218410
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CMDLINE
@@ -0,0 +1 @@
+CONFIG_CMDLINE="console=ttyAMA0"
diff --git a/baseconfig/arm/aarch64/CONFIG_CMDLINE_FORCE b/baseconfig/arm/aarch64/CONFIG_CMDLINE_FORCE
new file mode 100644
index 0000000..db59f37
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CMDLINE_FORCE
@@ -0,0 +1 @@
+# CONFIG_CMDLINE_FORCE is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3516CV300 b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3516CV300
new file mode 100644
index 0000000..2c50858
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3516CV300
@@ -0,0 +1 @@
+# CONFIG_COMMON_CLK_HI3516CV300 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3519 b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3519
new file mode 100644
index 0000000..5484a59
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3519
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_HI3519=m
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3660 b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3660
new file mode 100644
index 0000000..4469354
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3660
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_HI3660=y
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3798CV200 b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3798CV200
new file mode 100644
index 0000000..8d91e10
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI3798CV200
@@ -0,0 +1 @@
+# CONFIG_COMMON_CLK_HI3798CV200 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI6220 b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI6220
new file mode 100644
index 0000000..440b714
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI6220
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_HI6220=y
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI655X b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI655X
new file mode 100644
index 0000000..18ddc07
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_HI655X
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_HI655X=m
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_PWM b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_PWM
new file mode 100644
index 0000000..08193dd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_PWM
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_PWM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_QCOM b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_QCOM
new file mode 100644
index 0000000..2b7c643
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_QCOM
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_QCOM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_XGENE b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_XGENE
new file mode 100644
index 0000000..44d0a9d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_CLK_XGENE
@@ -0,0 +1 @@
+CONFIG_COMMON_CLK_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_COMMON_RESET_HI6220 b/baseconfig/arm/aarch64/CONFIG_COMMON_RESET_HI6220
new file mode 100644
index 0000000..a603d73
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMMON_RESET_HI6220
@@ -0,0 +1 @@
+CONFIG_COMMON_RESET_HI6220=m
diff --git a/baseconfig/arm/aarch64/CONFIG_COMPAT b/baseconfig/arm/aarch64/CONFIG_COMPAT
new file mode 100644
index 0000000..3e041f1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_COMPAT
@@ -0,0 +1 @@
+# CONFIG_COMPAT is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_CONSOLE_TRANSLATIONS b/baseconfig/arm/aarch64/CONFIG_CONSOLE_TRANSLATIONS
new file mode 100644
index 0000000..983fcc9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CONSOLE_TRANSLATIONS
@@ -0,0 +1 @@
+CONFIG_CONSOLE_TRANSLATIONS=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64 b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64
new file mode 100644
index 0000000..dd0ae2c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64
@@ -0,0 +1 @@
+CONFIG_CRYPTO_AES_ARM64=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_BS b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_BS
new file mode 100644
index 0000000..6e04273
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_BS
@@ -0,0 +1 @@
+CONFIG_CRYPTO_AES_ARM64_BS=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE
new file mode 100644
index 0000000..7200995
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE
@@ -0,0 +1 @@
+CONFIG_CRYPTO_AES_ARM64_CE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE_BLK b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE_BLK
new file mode 100644
index 0000000..b07b273
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE_BLK
@@ -0,0 +1 @@
+CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE_CCM b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE_CCM
new file mode 100644
index 0000000..20ef5af
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_CE_CCM
@@ -0,0 +1 @@
+CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK
new file mode 100644
index 0000000..2ac8138
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK
@@ -0,0 +1 @@
+CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_CRC32_ARM64 b/baseconfig/arm/aarch64/CONFIG_CRYPTO_CRC32_ARM64
new file mode 100644
index 0000000..845ef51
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_CRC32_ARM64
@@ -0,0 +1 @@
+CONFIG_CRYPTO_CRC32_ARM64=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
new file mode 100644
index 0000000..d5226e1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_CAVIUM_ZIP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP
new file mode 100644
index 0000000..d2f5497
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_CCP=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP_CRYPTO b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP_CRYPTO
new file mode 100644
index 0000000..4887c6d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP_CRYPTO
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP_DD b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP_DD
new file mode 100644
index 0000000..18c7b90
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_CCP_DD
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_CCP_DD=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_QCE b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_QCE
new file mode 100644
index 0000000..27a3f72
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_QCE
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_QCE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_SAFEXCEL b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_SAFEXCEL
new file mode 100644
index 0000000..61cb974
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_DEV_SAFEXCEL
@@ -0,0 +1 @@
+CONFIG_CRYPTO_DEV_SAFEXCEL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_GHASH_ARM64_CE b/baseconfig/arm/aarch64/CONFIG_CRYPTO_GHASH_ARM64_CE
new file mode 100644
index 0000000..f2db2f2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_GHASH_ARM64_CE
@@ -0,0 +1 @@
+CONFIG_CRYPTO_GHASH_ARM64_CE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_SHA1_ARM64_CE b/baseconfig/arm/aarch64/CONFIG_CRYPTO_SHA1_ARM64_CE
new file mode 100644
index 0000000..3fe882c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_SHA1_ARM64_CE
@@ -0,0 +1 @@
+CONFIG_CRYPTO_SHA1_ARM64_CE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_CRYPTO_SHA2_ARM64_CE b/baseconfig/arm/aarch64/CONFIG_CRYPTO_SHA2_ARM64_CE
new file mode 100644
index 0000000..5d79a86
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_CRYPTO_SHA2_ARM64_CE
@@ -0,0 +1 @@
+CONFIG_CRYPTO_SHA2_ARM64_CE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DEBUG_ALIGN_RODATA b/baseconfig/arm/aarch64/CONFIG_DEBUG_ALIGN_RODATA
new file mode 100644
index 0000000..4b5ff50
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DEBUG_ALIGN_RODATA
@@ -0,0 +1 @@
+# CONFIG_DEBUG_ALIGN_RODATA is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_DEBUG_EFI b/baseconfig/arm/aarch64/CONFIG_DEBUG_EFI
new file mode 100644
index 0000000..68b7b8a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DEBUG_EFI
@@ -0,0 +1 @@
+# CONFIG_DEBUG_EFI is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_DEBUG_SECTION_MISMATCH b/baseconfig/arm/aarch64/CONFIG_DEBUG_SECTION_MISMATCH
new file mode 100644
index 0000000..441e346
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DEBUG_SECTION_MISMATCH
@@ -0,0 +1 @@
+CONFIG_DEBUG_SECTION_MISMATCH=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DEBUG_WX b/baseconfig/arm/aarch64/CONFIG_DEBUG_WX
new file mode 100644
index 0000000..95e08f4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DEBUG_WX
@@ -0,0 +1 @@
+CONFIG_DEBUG_WX=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_HISI_KIRIN b/baseconfig/arm/aarch64/CONFIG_DRM_HISI_KIRIN
new file mode 100644
index 0000000..271def0
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_HISI_KIRIN
@@ -0,0 +1 @@
+CONFIG_DRM_HISI_KIRIN=m
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM b/baseconfig/arm/aarch64/CONFIG_DRM_MSM
new file mode 100644
index 0000000..0a1adfc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM
@@ -0,0 +1 @@
+CONFIG_DRM_MSM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI
new file mode 100644
index 0000000..87b6279
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_DSI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_14NM_PHY b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_14NM_PHY
new file mode 100644
index 0000000..397f690
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_14NM_PHY
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_DSI_14NM_PHY=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_20NM_PHY b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_20NM_PHY
new file mode 100644
index 0000000..7595ae2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_20NM_PHY
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_DSI_20NM_PHY=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_28NM_8960_PHY b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_28NM_8960_PHY
new file mode 100644
index 0000000..5d86a45
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_28NM_8960_PHY
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_28NM_PHY b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_28NM_PHY
new file mode 100644
index 0000000..ea1c4f9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_28NM_PHY
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_DSI_28NM_PHY=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_PLL b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_PLL
new file mode 100644
index 0000000..16ac280
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_DSI_PLL
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_DSI_PLL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_HDMI_HDCP b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_HDMI_HDCP
new file mode 100644
index 0000000..2adc35b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_HDMI_HDCP
@@ -0,0 +1 @@
+CONFIG_DRM_MSM_HDMI_HDCP=y
diff --git a/baseconfig/arm/aarch64/CONFIG_DRM_MSM_REGISTER_LOGGING b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_REGISTER_LOGGING
new file mode 100644
index 0000000..83c03d9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DRM_MSM_REGISTER_LOGGING
@@ -0,0 +1 @@
+# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_DVB_B2C2_FLEXCOP_USB b/baseconfig/arm/aarch64/CONFIG_DVB_B2C2_FLEXCOP_USB
new file mode 100644
index 0000000..5f48aff
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DVB_B2C2_FLEXCOP_USB
@@ -0,0 +1 @@
+# CONFIG_DVB_B2C2_FLEXCOP_USB is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_DWMAC_IPQ806X b/baseconfig/arm/aarch64/CONFIG_DWMAC_IPQ806X
new file mode 100644
index 0000000..49177a6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DWMAC_IPQ806X
@@ -0,0 +1 @@
+CONFIG_DWMAC_IPQ806X=m
diff --git a/baseconfig/arm/aarch64/CONFIG_DWMAC_SUN8I b/baseconfig/arm/aarch64/CONFIG_DWMAC_SUN8I
new file mode 100644
index 0000000..ce05f93
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DWMAC_SUN8I
@@ -0,0 +1 @@
+CONFIG_DWMAC_SUN8I=m
diff --git a/baseconfig/arm/aarch64/CONFIG_DWMAC_SUNXI b/baseconfig/arm/aarch64/CONFIG_DWMAC_SUNXI
new file mode 100644
index 0000000..254fc7d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_DWMAC_SUNXI
@@ -0,0 +1 @@
+CONFIG_DWMAC_SUNXI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_EDAC_THUNDERX b/baseconfig/arm/aarch64/CONFIG_EDAC_THUNDERX
new file mode 100644
index 0000000..dae44bb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_EDAC_THUNDERX
@@ -0,0 +1 @@
+CONFIG_EDAC_THUNDERX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_EDAC_XGENE b/baseconfig/arm/aarch64/CONFIG_EDAC_XGENE
new file mode 100644
index 0000000..dbadc35
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_EDAC_XGENE
@@ -0,0 +1 @@
+CONFIG_EDAC_XGENE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_EXTCON_AXP288 b/baseconfig/arm/aarch64/CONFIG_EXTCON_AXP288
new file mode 100644
index 0000000..7fadeb5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_EXTCON_AXP288
@@ -0,0 +1 @@
+CONFIG_EXTCON_AXP288=m
diff --git a/baseconfig/arm/aarch64/CONFIG_EXTCON_QCOM_SPMI_MISC b/baseconfig/arm/aarch64/CONFIG_EXTCON_QCOM_SPMI_MISC
new file mode 100644
index 0000000..b524879
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_EXTCON_QCOM_SPMI_MISC
@@ -0,0 +1 @@
+CONFIG_EXTCON_QCOM_SPMI_MISC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_FB_MODE_HELPERS b/baseconfig/arm/aarch64/CONFIG_FB_MODE_HELPERS
new file mode 100644
index 0000000..84f5157
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_FB_MODE_HELPERS
@@ -0,0 +1 @@
+CONFIG_FB_MODE_HELPERS=y
diff --git a/baseconfig/arm/aarch64/CONFIG_FORCE_MAX_ZONEORDER b/baseconfig/arm/aarch64/CONFIG_FORCE_MAX_ZONEORDER
new file mode 100644
index 0000000..6d42a47
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_FORCE_MAX_ZONEORDER
@@ -0,0 +1 @@
+CONFIG_FORCE_MAX_ZONEORDER=13
diff --git a/baseconfig/arm/aarch64/CONFIG_FSL_ERRATUM_A008585 b/baseconfig/arm/aarch64/CONFIG_FSL_ERRATUM_A008585
new file mode 100644
index 0000000..8dce0af
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_FSL_ERRATUM_A008585
@@ -0,0 +1 @@
+CONFIG_FSL_ERRATUM_A008585=y
diff --git a/baseconfig/arm/aarch64/CONFIG_FSL_MC_BUS b/baseconfig/arm/aarch64/CONFIG_FSL_MC_BUS
new file mode 100644
index 0000000..dddc2f1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_FSL_MC_BUS
@@ -0,0 +1 @@
+# CONFIG_FSL_MC_BUS is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_FUJITSU_ES b/baseconfig/arm/aarch64/CONFIG_FUJITSU_ES
new file mode 100644
index 0000000..39b50c9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_FUJITSU_ES
@@ -0,0 +1 @@
+# CONFIG_FUJITSU_ES is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_GPIO_AXP209 b/baseconfig/arm/aarch64/CONFIG_GPIO_AXP209
new file mode 100644
index 0000000..2365ae7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_GPIO_AXP209
@@ -0,0 +1 @@
+CONFIG_GPIO_AXP209=m
diff --git a/baseconfig/arm/aarch64/CONFIG_GPIO_MAX77620 b/baseconfig/arm/aarch64/CONFIG_GPIO_MAX77620
new file mode 100644
index 0000000..fd5e22a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_GPIO_MAX77620
@@ -0,0 +1 @@
+CONFIG_GPIO_MAX77620=m
diff --git a/baseconfig/arm/aarch64/CONFIG_GPIO_THUNDERX b/baseconfig/arm/aarch64/CONFIG_GPIO_THUNDERX
new file mode 100644
index 0000000..6895cc0
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_GPIO_THUNDERX
@@ -0,0 +1 @@
+CONFIG_GPIO_THUNDERX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_GPIO_XGENE b/baseconfig/arm/aarch64/CONFIG_GPIO_XGENE
new file mode 100644
index 0000000..f210ebc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_GPIO_XGENE
@@ -0,0 +1 @@
+CONFIG_GPIO_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_GPIO_XGENE_SB b/baseconfig/arm/aarch64/CONFIG_GPIO_XGENE_SB
new file mode 100644
index 0000000..01e2940
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_GPIO_XGENE_SB
@@ -0,0 +1 @@
+CONFIG_GPIO_XGENE_SB=m
diff --git a/baseconfig/arm/aarch64/CONFIG_GPIO_XLP b/baseconfig/arm/aarch64/CONFIG_GPIO_XLP
new file mode 100644
index 0000000..f99cd41
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_GPIO_XLP
@@ -0,0 +1 @@
+CONFIG_GPIO_XLP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HI6220_MBOX b/baseconfig/arm/aarch64/CONFIG_HI6220_MBOX
new file mode 100644
index 0000000..5fd48c6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HI6220_MBOX
@@ -0,0 +1 @@
+CONFIG_HI6220_MBOX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HISILICON_ERRATUM_161010101 b/baseconfig/arm/aarch64/CONFIG_HISILICON_ERRATUM_161010101
new file mode 100644
index 0000000..b591425
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HISILICON_ERRATUM_161010101
@@ -0,0 +1 @@
+CONFIG_HISILICON_ERRATUM_161010101=y
diff --git a/baseconfig/arm/aarch64/CONFIG_HISILICON_ERRATUM_161600802 b/baseconfig/arm/aarch64/CONFIG_HISILICON_ERRATUM_161600802
new file mode 100644
index 0000000..86ef85f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HISILICON_ERRATUM_161600802
@@ -0,0 +1 @@
+CONFIG_HISILICON_ERRATUM_161600802=y
diff --git a/baseconfig/arm/aarch64/CONFIG_HISILICON_IRQ_MBIGEN b/baseconfig/arm/aarch64/CONFIG_HISILICON_IRQ_MBIGEN
new file mode 100644
index 0000000..5ca6d30
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HISILICON_IRQ_MBIGEN
@@ -0,0 +1 @@
+CONFIG_HISILICON_IRQ_MBIGEN=y
diff --git a/baseconfig/arm/aarch64/CONFIG_HISI_KIRIN_DW_DSI b/baseconfig/arm/aarch64/CONFIG_HISI_KIRIN_DW_DSI
new file mode 100644
index 0000000..cef6096
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HISI_KIRIN_DW_DSI
@@ -0,0 +1 @@
+CONFIG_HISI_KIRIN_DW_DSI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HISI_THERMAL b/baseconfig/arm/aarch64/CONFIG_HISI_THERMAL
new file mode 100644
index 0000000..05fc96b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HISI_THERMAL
@@ -0,0 +1 @@
+CONFIG_HISI_THERMAL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HOTPLUG_PCI_SHPC b/baseconfig/arm/aarch64/CONFIG_HOTPLUG_PCI_SHPC
new file mode 100644
index 0000000..f03be8a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HOTPLUG_PCI_SHPC
@@ -0,0 +1 @@
+# CONFIG_HOTPLUG_PCI_SHPC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_HVC_DCC b/baseconfig/arm/aarch64/CONFIG_HVC_DCC
new file mode 100644
index 0000000..b2e8007
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HVC_DCC
@@ -0,0 +1 @@
+# CONFIG_HVC_DCC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_HVC_DRIVER b/baseconfig/arm/aarch64/CONFIG_HVC_DRIVER
new file mode 100644
index 0000000..2b13a0c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HVC_DRIVER
@@ -0,0 +1 @@
+CONFIG_HVC_DRIVER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_HWSPINLOCK_QCOM b/baseconfig/arm/aarch64/CONFIG_HWSPINLOCK_QCOM
new file mode 100644
index 0000000..5dfdf85
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HWSPINLOCK_QCOM
@@ -0,0 +1 @@
+CONFIG_HWSPINLOCK_QCOM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_CAVIUM b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_CAVIUM
new file mode 100644
index 0000000..e3bec97
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_CAVIUM
@@ -0,0 +1 @@
+CONFIG_HW_RANDOM_CAVIUM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_HISI b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_HISI
new file mode 100644
index 0000000..3f6b707
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_HISI
@@ -0,0 +1 @@
+CONFIG_HW_RANDOM_HISI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_MSM b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_MSM
new file mode 100644
index 0000000..b95d5cb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_MSM
@@ -0,0 +1 @@
+CONFIG_HW_RANDOM_MSM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_OMAP b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_OMAP
new file mode 100644
index 0000000..cf37a6e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_OMAP
@@ -0,0 +1 @@
+CONFIG_HW_RANDOM_OMAP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_XGENE b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_XGENE
new file mode 100644
index 0000000..85af60d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HW_RANDOM_XGENE
@@ -0,0 +1 @@
+CONFIG_HW_RANDOM_XGENE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_HZ b/baseconfig/arm/aarch64/CONFIG_HZ
new file mode 100644
index 0000000..bfc405e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HZ
@@ -0,0 +1 @@
+CONFIG_HZ=100
diff --git a/baseconfig/arm/aarch64/CONFIG_HZ_100 b/baseconfig/arm/aarch64/CONFIG_HZ_100
new file mode 100644
index 0000000..11bd2af
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HZ_100
@@ -0,0 +1 @@
+CONFIG_HZ_100=y
diff --git a/baseconfig/arm/aarch64/CONFIG_HZ_1000 b/baseconfig/arm/aarch64/CONFIG_HZ_1000
new file mode 100644
index 0000000..c211724
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_HZ_1000
@@ -0,0 +1 @@
+# CONFIG_HZ_1000 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_I2C_HIX5HD2 b/baseconfig/arm/aarch64/CONFIG_I2C_HIX5HD2
new file mode 100644
index 0000000..7b16fe2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_I2C_HIX5HD2
@@ -0,0 +1 @@
+# CONFIG_I2C_HIX5HD2 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_I2C_QUP b/baseconfig/arm/aarch64/CONFIG_I2C_QUP
new file mode 100644
index 0000000..7fb7cd3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_I2C_QUP
@@ -0,0 +1 @@
+CONFIG_I2C_QUP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_I2C_SCMI b/baseconfig/arm/aarch64/CONFIG_I2C_SCMI
new file mode 100644
index 0000000..6e60bd4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_I2C_SCMI
@@ -0,0 +1 @@
+CONFIG_I2C_SCMI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_I2C_THUNDERX b/baseconfig/arm/aarch64/CONFIG_I2C_THUNDERX
new file mode 100644
index 0000000..c544a8c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_I2C_THUNDERX
@@ -0,0 +1 @@
+CONFIG_I2C_THUNDERX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_I2C_XGENE_SLIMPRO b/baseconfig/arm/aarch64/CONFIG_I2C_XGENE_SLIMPRO
new file mode 100644
index 0000000..44af582
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_I2C_XGENE_SLIMPRO
@@ -0,0 +1 @@
+CONFIG_I2C_XGENE_SLIMPRO=m
diff --git a/baseconfig/arm/aarch64/CONFIG_I2C_XLP9XX b/baseconfig/arm/aarch64/CONFIG_I2C_XLP9XX
new file mode 100644
index 0000000..bcc41c3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_I2C_XLP9XX
@@ -0,0 +1 @@
+CONFIG_I2C_XLP9XX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_INPUT_AXP20X_PEK b/baseconfig/arm/aarch64/CONFIG_INPUT_AXP20X_PEK
new file mode 100644
index 0000000..e2fbdf9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_INPUT_AXP20X_PEK
@@ -0,0 +1 @@
+CONFIG_INPUT_AXP20X_PEK=m
diff --git a/baseconfig/arm/aarch64/CONFIG_INPUT_HISI_POWERKEY b/baseconfig/arm/aarch64/CONFIG_INPUT_HISI_POWERKEY
new file mode 100644
index 0000000..bd59856
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_INPUT_HISI_POWERKEY
@@ -0,0 +1 @@
+CONFIG_INPUT_HISI_POWERKEY=m
diff --git a/baseconfig/arm/aarch64/CONFIG_INPUT_PM8941_PWRKEY b/baseconfig/arm/aarch64/CONFIG_INPUT_PM8941_PWRKEY
new file mode 100644
index 0000000..24fb62b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_INPUT_PM8941_PWRKEY
@@ -0,0 +1 @@
+# CONFIG_INPUT_PM8941_PWRKEY is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_INPUT_REGULATOR_HAPTIC b/baseconfig/arm/aarch64/CONFIG_INPUT_REGULATOR_HAPTIC
new file mode 100644
index 0000000..4230eab
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_INPUT_REGULATOR_HAPTIC
@@ -0,0 +1 @@
+# CONFIG_INPUT_REGULATOR_HAPTIC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_IR_SUNXI b/baseconfig/arm/aarch64/CONFIG_IR_SUNXI
new file mode 100644
index 0000000..fe2dc68
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_IR_SUNXI
@@ -0,0 +1 @@
+CONFIG_IR_SUNXI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_K3_DMA b/baseconfig/arm/aarch64/CONFIG_K3_DMA
new file mode 100644
index 0000000..c64ec40
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_K3_DMA
@@ -0,0 +1 @@
+CONFIG_K3_DMA=m
diff --git a/baseconfig/arm/aarch64/CONFIG_KEYBOARD_SUN4I_LRADC b/baseconfig/arm/aarch64/CONFIG_KEYBOARD_SUN4I_LRADC
new file mode 100644
index 0000000..8fcbd86
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_KEYBOARD_SUN4I_LRADC
@@ -0,0 +1 @@
+# CONFIG_KEYBOARD_SUN4I_LRADC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_KVM b/baseconfig/arm/aarch64/CONFIG_KVM
new file mode 100644
index 0000000..14f90d8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_KVM
@@ -0,0 +1 @@
+CONFIG_KVM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_LIBNVDIMM b/baseconfig/arm/aarch64/CONFIG_LIBNVDIMM
new file mode 100644
index 0000000..aeaaefe
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_LIBNVDIMM
@@ -0,0 +1 @@
+CONFIG_LIBNVDIMM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_LIQUIDIO b/baseconfig/arm/aarch64/CONFIG_LIQUIDIO
new file mode 100644
index 0000000..7535662
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_LIQUIDIO
@@ -0,0 +1 @@
+# CONFIG_LIQUIDIO is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MAX77620_THERMAL b/baseconfig/arm/aarch64/CONFIG_MAX77620_THERMAL
new file mode 100644
index 0000000..d334d3f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MAX77620_THERMAL
@@ -0,0 +1 @@
+CONFIG_MAX77620_THERMAL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MAX77620_WATCHDOG b/baseconfig/arm/aarch64/CONFIG_MAX77620_WATCHDOG
new file mode 100644
index 0000000..f998244
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MAX77620_WATCHDOG
@@ -0,0 +1 @@
+CONFIG_MAX77620_WATCHDOG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MDIO_HISI_FEMAC b/baseconfig/arm/aarch64/CONFIG_MDIO_HISI_FEMAC
new file mode 100644
index 0000000..6e4c16c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDIO_HISI_FEMAC
@@ -0,0 +1 @@
+CONFIG_MDIO_HISI_FEMAC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MDIO_OCTEON b/baseconfig/arm/aarch64/CONFIG_MDIO_OCTEON
new file mode 100644
index 0000000..e14c4b0
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDIO_OCTEON
@@ -0,0 +1 @@
+# CONFIG_MDIO_OCTEON is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MDIO_SUN4I b/baseconfig/arm/aarch64/CONFIG_MDIO_SUN4I
new file mode 100644
index 0000000..5bf1478
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDIO_SUN4I
@@ -0,0 +1 @@
+# CONFIG_MDIO_SUN4I is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MDIO_THUNDER b/baseconfig/arm/aarch64/CONFIG_MDIO_THUNDER
new file mode 100644
index 0000000..00eb9a6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDIO_THUNDER
@@ -0,0 +1 @@
+CONFIG_MDIO_THUNDER=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MDIO_XGENE b/baseconfig/arm/aarch64/CONFIG_MDIO_XGENE
new file mode 100644
index 0000000..8a6b53a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDIO_XGENE
@@ -0,0 +1 @@
+CONFIG_MDIO_XGENE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MDM_GCC_9615 b/baseconfig/arm/aarch64/CONFIG_MDM_GCC_9615
new file mode 100644
index 0000000..4d972af
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDM_GCC_9615
@@ -0,0 +1 @@
+# CONFIG_MDM_GCC_9615 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MDM_LCC_9615 b/baseconfig/arm/aarch64/CONFIG_MDM_LCC_9615
new file mode 100644
index 0000000..72f159f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MDM_LCC_9615
@@ -0,0 +1 @@
+# CONFIG_MDM_LCC_9615 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MESON_GXBB_WATCHDOG b/baseconfig/arm/aarch64/CONFIG_MESON_GXBB_WATCHDOG
new file mode 100644
index 0000000..a9c8de7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MESON_GXBB_WATCHDOG
@@ -0,0 +1 @@
+CONFIG_MESON_GXBB_WATCHDOG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MESON_GXL_PHY b/baseconfig/arm/aarch64/CONFIG_MESON_GXL_PHY
new file mode 100644
index 0000000..cc59580
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MESON_GXL_PHY
@@ -0,0 +1 @@
+CONFIG_MESON_GXL_PHY=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MESON_WATCHDOG b/baseconfig/arm/aarch64/CONFIG_MESON_WATCHDOG
new file mode 100644
index 0000000..2e5c153
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MESON_WATCHDOG
@@ -0,0 +1 @@
+# CONFIG_MESON_WATCHDOG is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X b/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X
new file mode 100644
index 0000000..ada79c0
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X
@@ -0,0 +1 @@
+CONFIG_MFD_AXP20X=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X_I2C b/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X_I2C
new file mode 100644
index 0000000..22c6029
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X_I2C
@@ -0,0 +1 @@
+CONFIG_MFD_AXP20X_I2C=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X_RSB b/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X_RSB
new file mode 100644
index 0000000..29150d5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_AXP20X_RSB
@@ -0,0 +1 @@
+CONFIG_MFD_AXP20X_RSB=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_HI655X_PMIC b/baseconfig/arm/aarch64/CONFIG_MFD_HI655X_PMIC
new file mode 100644
index 0000000..650829c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_HI655X_PMIC
@@ -0,0 +1 @@
+CONFIG_MFD_HI655X_PMIC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_MAX77620 b/baseconfig/arm/aarch64/CONFIG_MFD_MAX77620
new file mode 100644
index 0000000..be2ba08
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_MAX77620
@@ -0,0 +1 @@
+CONFIG_MFD_MAX77620=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_QCOM_RPM b/baseconfig/arm/aarch64/CONFIG_MFD_QCOM_RPM
new file mode 100644
index 0000000..d88a4c4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_QCOM_RPM
@@ -0,0 +1 @@
+CONFIG_MFD_QCOM_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_SPMI_PMIC b/baseconfig/arm/aarch64/CONFIG_MFD_SPMI_PMIC
new file mode 100644
index 0000000..6360fee
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_SPMI_PMIC
@@ -0,0 +1 @@
+CONFIG_MFD_SPMI_PMIC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_SUN4I_GPADC b/baseconfig/arm/aarch64/CONFIG_MFD_SUN4I_GPADC
new file mode 100644
index 0000000..d156cb1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_SUN4I_GPADC
@@ -0,0 +1 @@
+CONFIG_MFD_SUN4I_GPADC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MFD_SUN6I_PRCM b/baseconfig/arm/aarch64/CONFIG_MFD_SUN6I_PRCM
new file mode 100644
index 0000000..1784bb2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MFD_SUN6I_PRCM
@@ -0,0 +1 @@
+CONFIG_MFD_SUN6I_PRCM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MMC_CAVIUM_THUNDERX b/baseconfig/arm/aarch64/CONFIG_MMC_CAVIUM_THUNDERX
new file mode 100644
index 0000000..8c4640a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MMC_CAVIUM_THUNDERX
@@ -0,0 +1 @@
+CONFIG_MMC_CAVIUM_THUNDERX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MMC_MESON_GX b/baseconfig/arm/aarch64/CONFIG_MMC_MESON_GX
new file mode 100644
index 0000000..f6d0598
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MMC_MESON_GX
@@ -0,0 +1 @@
+CONFIG_MMC_MESON_GX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MMC_QCOM_DML b/baseconfig/arm/aarch64/CONFIG_MMC_QCOM_DML
new file mode 100644
index 0000000..48facf3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MMC_QCOM_DML
@@ -0,0 +1 @@
+CONFIG_MMC_QCOM_DML=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30 b/baseconfig/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30
new file mode 100644
index 0000000..e026d18
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MMC_SDHCI_F_SDH30
@@ -0,0 +1 @@
+CONFIG_MMC_SDHCI_F_SDH30=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MMC_SDHCI_MSM b/baseconfig/arm/aarch64/CONFIG_MMC_SDHCI_MSM
new file mode 100644
index 0000000..512d452
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MMC_SDHCI_MSM
@@ -0,0 +1 @@
+CONFIG_MMC_SDHCI_MSM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MMC_SUNXI b/baseconfig/arm/aarch64/CONFIG_MMC_SUNXI
new file mode 100644
index 0000000..0f6eda3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MMC_SUNXI
@@ -0,0 +1 @@
+CONFIG_MMC_SUNXI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8660 b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8660
new file mode 100644
index 0000000..9effe86
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8660
@@ -0,0 +1 @@
+CONFIG_MSM_GCC_8660=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8916 b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8916
new file mode 100644
index 0000000..87cf3fd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8916
@@ -0,0 +1 @@
+CONFIG_MSM_GCC_8916=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8960 b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8960
new file mode 100644
index 0000000..03ba44b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8960
@@ -0,0 +1 @@
+CONFIG_MSM_GCC_8960=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8974 b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8974
new file mode 100644
index 0000000..8ffbd80
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8974
@@ -0,0 +1 @@
+CONFIG_MSM_GCC_8974=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8996 b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8996
new file mode 100644
index 0000000..4b01d31
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_GCC_8996
@@ -0,0 +1 @@
+CONFIG_MSM_GCC_8996=y
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_LCC_8960 b/baseconfig/arm/aarch64/CONFIG_MSM_LCC_8960
new file mode 100644
index 0000000..6965544
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_LCC_8960
@@ -0,0 +1 @@
+# CONFIG_MSM_LCC_8960 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8960 b/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8960
new file mode 100644
index 0000000..c2ccb99
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8960
@@ -0,0 +1 @@
+CONFIG_MSM_MMCC_8960=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8974 b/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8974
new file mode 100644
index 0000000..04b9f75
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8974
@@ -0,0 +1 @@
+CONFIG_MSM_MMCC_8974=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8996 b/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8996
new file mode 100644
index 0000000..e40293a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MSM_MMCC_8996
@@ -0,0 +1 @@
+CONFIG_MSM_MMCC_8996=m
diff --git a/baseconfig/arm/aarch64/CONFIG_MV_XOR_V2 b/baseconfig/arm/aarch64/CONFIG_MV_XOR_V2
new file mode 100644
index 0000000..a6e590e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_MV_XOR_V2
@@ -0,0 +1 @@
+# CONFIG_MV_XOR_V2 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_ND_BLK b/baseconfig/arm/aarch64/CONFIG_ND_BLK
new file mode 100644
index 0000000..8a6c237
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ND_BLK
@@ -0,0 +1 @@
+CONFIG_ND_BLK=m
diff --git a/baseconfig/arm/aarch64/CONFIG_ND_BTT b/baseconfig/arm/aarch64/CONFIG_ND_BTT
new file mode 100644
index 0000000..d4e20e2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_ND_BTT
@@ -0,0 +1 @@
+CONFIG_ND_BTT=m
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_SB1000 b/baseconfig/arm/aarch64/CONFIG_NET_SB1000
new file mode 100644
index 0000000..53ead8c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_SB1000
@@ -0,0 +1 @@
+CONFIG_NET_SB1000=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_ALLWINNER b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_ALLWINNER
new file mode 100644
index 0000000..2ff4507
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_ALLWINNER
@@ -0,0 +1 @@
+CONFIG_NET_VENDOR_ALLWINNER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_CAVIUM b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_CAVIUM
new file mode 100644
index 0000000..5ae5805
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_CAVIUM
@@ -0,0 +1 @@
+CONFIG_NET_VENDOR_CAVIUM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_QUALCOMM b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_QUALCOMM
new file mode 100644
index 0000000..46be71a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_QUALCOMM
@@ -0,0 +1 @@
+CONFIG_NET_VENDOR_QUALCOMM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_SNI b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_SNI
new file mode 100644
index 0000000..bb77206
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_VENDOR_SNI
@@ -0,0 +1 @@
+CONFIG_NET_VENDOR_SNI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_XGENE b/baseconfig/arm/aarch64/CONFIG_NET_XGENE
new file mode 100644
index 0000000..57527a6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_XGENE
@@ -0,0 +1 @@
+CONFIG_NET_XGENE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_NET_XGENE_V2 b/baseconfig/arm/aarch64/CONFIG_NET_XGENE_V2
new file mode 100644
index 0000000..7d5cbcd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NET_XGENE_V2
@@ -0,0 +1 @@
+CONFIG_NET_XGENE_V2=m
diff --git a/baseconfig/arm/aarch64/CONFIG_NODES_SHIFT b/baseconfig/arm/aarch64/CONFIG_NODES_SHIFT
new file mode 100644
index 0000000..7647492
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NODES_SHIFT
@@ -0,0 +1 @@
+CONFIG_NODES_SHIFT=9
diff --git a/baseconfig/arm/aarch64/CONFIG_NR_CPUS b/baseconfig/arm/aarch64/CONFIG_NR_CPUS
new file mode 100644
index 0000000..0c4b1d9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NR_CPUS
@@ -0,0 +1 @@
+CONFIG_NR_CPUS=256
diff --git a/baseconfig/arm/aarch64/CONFIG_NUMA b/baseconfig/arm/aarch64/CONFIG_NUMA
new file mode 100644
index 0000000..e480f0c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NUMA
@@ -0,0 +1 @@
+CONFIG_NUMA=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NUMA_BALANCING b/baseconfig/arm/aarch64/CONFIG_NUMA_BALANCING
new file mode 100644
index 0000000..9de89d5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NUMA_BALANCING
@@ -0,0 +1 @@
+CONFIG_NUMA_BALANCING=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED b/baseconfig/arm/aarch64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED
new file mode 100644
index 0000000..5f74021
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED
@@ -0,0 +1 @@
+CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
diff --git a/baseconfig/arm/aarch64/CONFIG_NVMEM_SUNXI_SID b/baseconfig/arm/aarch64/CONFIG_NVMEM_SUNXI_SID
new file mode 100644
index 0000000..454644a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_NVMEM_SUNXI_SID
@@ -0,0 +1 @@
+CONFIG_NVMEM_SUNXI_SID=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PATA_ACPI b/baseconfig/arm/aarch64/CONFIG_PATA_ACPI
new file mode 100644
index 0000000..c3bc786
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PATA_ACPI
@@ -0,0 +1 @@
+CONFIG_PATA_ACPI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PCC b/baseconfig/arm/aarch64/CONFIG_PCC
new file mode 100644
index 0000000..36eb8c2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCC
@@ -0,0 +1 @@
+CONFIG_PCC=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCIE_DW_HOST_ECAM b/baseconfig/arm/aarch64/CONFIG_PCIE_DW_HOST_ECAM
new file mode 100644
index 0000000..cdb6169
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCIE_DW_HOST_ECAM
@@ -0,0 +1 @@
+CONFIG_PCIE_DW_HOST_ECAM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCIE_KIRIN b/baseconfig/arm/aarch64/CONFIG_PCIE_KIRIN
new file mode 100644
index 0000000..be6e297
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCIE_KIRIN
@@ -0,0 +1 @@
+CONFIG_PCIE_KIRIN=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCIE_QCOM b/baseconfig/arm/aarch64/CONFIG_PCIE_QCOM
new file mode 100644
index 0000000..61886f1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCIE_QCOM
@@ -0,0 +1 @@
+CONFIG_PCIE_QCOM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCI_HISI b/baseconfig/arm/aarch64/CONFIG_PCI_HISI
new file mode 100644
index 0000000..468f3e4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCI_HISI
@@ -0,0 +1 @@
+CONFIG_PCI_HISI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCI_HOST_THUNDER_ECAM b/baseconfig/arm/aarch64/CONFIG_PCI_HOST_THUNDER_ECAM
new file mode 100644
index 0000000..a812c31
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCI_HOST_THUNDER_ECAM
@@ -0,0 +1 @@
+CONFIG_PCI_HOST_THUNDER_ECAM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCI_HOST_THUNDER_PEM b/baseconfig/arm/aarch64/CONFIG_PCI_HOST_THUNDER_PEM
new file mode 100644
index 0000000..6c45e09
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCI_HOST_THUNDER_PEM
@@ -0,0 +1 @@
+CONFIG_PCI_HOST_THUNDER_PEM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCI_XGENE b/baseconfig/arm/aarch64/CONFIG_PCI_XGENE
new file mode 100644
index 0000000..8531730
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCI_XGENE
@@ -0,0 +1 @@
+CONFIG_PCI_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PCI_XGENE_MSI b/baseconfig/arm/aarch64/CONFIG_PCI_XGENE_MSI
new file mode 100644
index 0000000..ce07c62
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PCI_XGENE_MSI
@@ -0,0 +1 @@
+CONFIG_PCI_XGENE_MSI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_HI6220_USB b/baseconfig/arm/aarch64/CONFIG_PHY_HI6220_USB
new file mode 100644
index 0000000..462bb7c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_HI6220_USB
@@ -0,0 +1 @@
+CONFIG_PHY_HI6220_USB=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_MVEBU_CP110_COMPHY b/baseconfig/arm/aarch64/CONFIG_PHY_MVEBU_CP110_COMPHY
new file mode 100644
index 0000000..1902b0c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_MVEBU_CP110_COMPHY
@@ -0,0 +1 @@
+CONFIG_PHY_MVEBU_CP110_COMPHY=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_APQ8064_SATA b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_APQ8064_SATA
new file mode 100644
index 0000000..bb25b46
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_APQ8064_SATA
@@ -0,0 +1 @@
+# CONFIG_PHY_QCOM_APQ8064_SATA is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_QMP b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_QMP
new file mode 100644
index 0000000..cba57fa
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_QMP
@@ -0,0 +1 @@
+CONFIG_PHY_QCOM_QMP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_QUSB2 b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_QUSB2
new file mode 100644
index 0000000..6512e59
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_QUSB2
@@ -0,0 +1 @@
+CONFIG_PHY_QCOM_QUSB2=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_UFS b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_UFS
new file mode 100644
index 0000000..50ac1d8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_UFS
@@ -0,0 +1 @@
+# CONFIG_PHY_QCOM_UFS is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_USB_HS b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_USB_HS
new file mode 100644
index 0000000..61e98f8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_USB_HS
@@ -0,0 +1 @@
+CONFIG_PHY_QCOM_USB_HS=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_USB_HSIC b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_USB_HSIC
new file mode 100644
index 0000000..0b25aa2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_QCOM_USB_HSIC
@@ -0,0 +1 @@
+CONFIG_PHY_QCOM_USB_HSIC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_SUN4I_USB b/baseconfig/arm/aarch64/CONFIG_PHY_SUN4I_USB
new file mode 100644
index 0000000..f619228
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_SUN4I_USB
@@ -0,0 +1 @@
+CONFIG_PHY_SUN4I_USB=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_SUN9I_USB b/baseconfig/arm/aarch64/CONFIG_PHY_SUN9I_USB
new file mode 100644
index 0000000..98d0025
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_SUN9I_USB
@@ -0,0 +1 @@
+# CONFIG_PHY_SUN9I_USB is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PHY_XGENE b/baseconfig/arm/aarch64/CONFIG_PHY_XGENE
new file mode 100644
index 0000000..8d9f368
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PHY_XGENE
@@ -0,0 +1 @@
+CONFIG_PHY_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_AMD b/baseconfig/arm/aarch64/CONFIG_PINCTRL_AMD
new file mode 100644
index 0000000..41cff13
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_AMD
@@ -0,0 +1 @@
+CONFIG_PINCTRL_AMD=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_APQ8064 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_APQ8064
new file mode 100644
index 0000000..0c95df8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_APQ8064
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_APQ8064 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_APQ8084 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_APQ8084
new file mode 100644
index 0000000..dc701bb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_APQ8084
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_APQ8084 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MAX77620 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MAX77620
new file mode 100644
index 0000000..3b44d69
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MAX77620
@@ -0,0 +1 @@
+CONFIG_PINCTRL_MAX77620=m
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MDM9615 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MDM9615
new file mode 100644
index 0000000..aa3be10
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MDM9615
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MDM9615 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM
new file mode 100644
index 0000000..b042dc9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM
@@ -0,0 +1 @@
+CONFIG_PINCTRL_MSM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8660 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8660
new file mode 100644
index 0000000..905c9f4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8660
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MSM8660 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8916 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8916
new file mode 100644
index 0000000..a7a8bd9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8916
@@ -0,0 +1 @@
+CONFIG_PINCTRL_MSM8916=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8960 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8960
new file mode 100644
index 0000000..167d899
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8960
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MSM8960 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8996 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8996
new file mode 100644
index 0000000..805a439
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8996
@@ -0,0 +1 @@
+CONFIG_PINCTRL_MSM8996=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8X74 b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8X74
new file mode 100644
index 0000000..2d68ec7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_MSM8X74
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_MSM8X74 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_QCOM_SPMI_PMIC b/baseconfig/arm/aarch64/CONFIG_PINCTRL_QCOM_SPMI_PMIC
new file mode 100644
index 0000000..d24825e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_QCOM_SPMI_PMIC
@@ -0,0 +1 @@
+CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_QCOM_SSBI_PMIC b/baseconfig/arm/aarch64/CONFIG_PINCTRL_QCOM_SSBI_PMIC
new file mode 100644
index 0000000..bc00fae
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_QCOM_SSBI_PMIC
@@ -0,0 +1 @@
+# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PINCTRL_QDF2XXX b/baseconfig/arm/aarch64/CONFIG_PINCTRL_QDF2XXX
new file mode 100644
index 0000000..e8dca82
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PINCTRL_QDF2XXX
@@ -0,0 +1 @@
+CONFIG_PINCTRL_QDF2XXX=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PMIC_OPREGION b/baseconfig/arm/aarch64/CONFIG_PMIC_OPREGION
new file mode 100644
index 0000000..15102fe
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PMIC_OPREGION
@@ -0,0 +1 @@
+# CONFIG_PMIC_OPREGION is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_PNP_DEBUG_MESSAGES b/baseconfig/arm/aarch64/CONFIG_PNP_DEBUG_MESSAGES
new file mode 100644
index 0000000..cb59188
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PNP_DEBUG_MESSAGES
@@ -0,0 +1 @@
+# CONFIG_PNP_DEBUG_MESSAGES is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_POWER_RESET_HISI b/baseconfig/arm/aarch64/CONFIG_POWER_RESET_HISI
new file mode 100644
index 0000000..c5516db
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_POWER_RESET_HISI
@@ -0,0 +1 @@
+CONFIG_POWER_RESET_HISI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_POWER_RESET_MSM b/baseconfig/arm/aarch64/CONFIG_POWER_RESET_MSM
new file mode 100644
index 0000000..a7db0a2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_POWER_RESET_MSM
@@ -0,0 +1 @@
+CONFIG_POWER_RESET_MSM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_POWER_RESET_XGENE b/baseconfig/arm/aarch64/CONFIG_POWER_RESET_XGENE
new file mode 100644
index 0000000..4e363c2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_POWER_RESET_XGENE
@@ -0,0 +1 @@
+CONFIG_POWER_RESET_XGENE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_PWM_SUN4I b/baseconfig/arm/aarch64/CONFIG_PWM_SUN4I
new file mode 100644
index 0000000..d4f562f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_PWM_SUN4I
@@ -0,0 +1 @@
+CONFIG_PWM_SUN4I=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_ADSP_PIL b/baseconfig/arm/aarch64/CONFIG_QCOM_ADSP_PIL
new file mode 100644
index 0000000..0aa2581
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_ADSP_PIL
@@ -0,0 +1 @@
+CONFIG_QCOM_ADSP_PIL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_APCS_IPC b/baseconfig/arm/aarch64/CONFIG_QCOM_APCS_IPC
new file mode 100644
index 0000000..f8a0514
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_APCS_IPC
@@ -0,0 +1 @@
+CONFIG_QCOM_APCS_IPC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_BAM_DMA b/baseconfig/arm/aarch64/CONFIG_QCOM_BAM_DMA
new file mode 100644
index 0000000..84fb1a9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_BAM_DMA
@@ -0,0 +1 @@
+CONFIG_QCOM_BAM_DMA=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_CLK_RPM b/baseconfig/arm/aarch64/CONFIG_QCOM_CLK_RPM
new file mode 100644
index 0000000..5650c86
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_CLK_RPM
@@ -0,0 +1 @@
+CONFIG_QCOM_CLK_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_CLK_SMD_RPM b/baseconfig/arm/aarch64/CONFIG_QCOM_CLK_SMD_RPM
new file mode 100644
index 0000000..d355533
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_CLK_SMD_RPM
@@ -0,0 +1 @@
+CONFIG_QCOM_CLK_SMD_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_COINCELL b/baseconfig/arm/aarch64/CONFIG_QCOM_COINCELL
new file mode 100644
index 0000000..6b43aa0
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_COINCELL
@@ -0,0 +1 @@
+CONFIG_QCOM_COINCELL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_EBI2 b/baseconfig/arm/aarch64/CONFIG_QCOM_EBI2
new file mode 100644
index 0000000..e96b354
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_EBI2
@@ -0,0 +1 @@
+# CONFIG_QCOM_EBI2 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_EMAC b/baseconfig/arm/aarch64/CONFIG_QCOM_EMAC
new file mode 100644
index 0000000..4e3fa01
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_EMAC
@@ -0,0 +1 @@
+CONFIG_QCOM_EMAC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_1003 b/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_1003
new file mode 100644
index 0000000..94d6b17
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_1003
@@ -0,0 +1 @@
+# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_1009 b/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_1009
new file mode 100644
index 0000000..1449efa
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_1009
@@ -0,0 +1 @@
+CONFIG_QCOM_FALKOR_ERRATUM_1009=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_E1041 b/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_E1041
new file mode 100644
index 0000000..f0d31a8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_FALKOR_ERRATUM_E1041
@@ -0,0 +1 @@
+CONFIG_QCOM_FALKOR_ERRATUM_E1041=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_GSBI b/baseconfig/arm/aarch64/CONFIG_QCOM_GSBI
new file mode 100644
index 0000000..2711cb7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_GSBI
@@ -0,0 +1 @@
+CONFIG_QCOM_GSBI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_HIDMA b/baseconfig/arm/aarch64/CONFIG_QCOM_HIDMA
new file mode 100644
index 0000000..a544295
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_HIDMA
@@ -0,0 +1 @@
+CONFIG_QCOM_HIDMA=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_HIDMA_MGMT b/baseconfig/arm/aarch64/CONFIG_QCOM_HIDMA_MGMT
new file mode 100644
index 0000000..8085b2a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_HIDMA_MGMT
@@ -0,0 +1 @@
+CONFIG_QCOM_HIDMA_MGMT=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_IOMMU b/baseconfig/arm/aarch64/CONFIG_QCOM_IOMMU
new file mode 100644
index 0000000..b7e99b8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_IOMMU
@@ -0,0 +1 @@
+CONFIG_QCOM_IOMMU=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_IRQ_COMBINER b/baseconfig/arm/aarch64/CONFIG_QCOM_IRQ_COMBINER
new file mode 100644
index 0000000..6c23d15
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_IRQ_COMBINER
@@ -0,0 +1 @@
+CONFIG_QCOM_IRQ_COMBINER=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_L2_PMU b/baseconfig/arm/aarch64/CONFIG_QCOM_L2_PMU
new file mode 100644
index 0000000..2a553c8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_L2_PMU
@@ -0,0 +1 @@
+CONFIG_QCOM_L2_PMU=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_L3_PMU b/baseconfig/arm/aarch64/CONFIG_QCOM_L3_PMU
new file mode 100644
index 0000000..ed899d6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_L3_PMU
@@ -0,0 +1 @@
+CONFIG_QCOM_L3_PMU=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_Q6V5_PIL b/baseconfig/arm/aarch64/CONFIG_QCOM_Q6V5_PIL
new file mode 100644
index 0000000..18d8fb7
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_Q6V5_PIL
@@ -0,0 +1 @@
+CONFIG_QCOM_Q6V5_PIL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_QDF2400_ERRATUM_0065 b/baseconfig/arm/aarch64/CONFIG_QCOM_QDF2400_ERRATUM_0065
new file mode 100644
index 0000000..dec9be9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_QDF2400_ERRATUM_0065
@@ -0,0 +1 @@
+CONFIG_QCOM_QDF2400_ERRATUM_0065=y
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_QFPROM b/baseconfig/arm/aarch64/CONFIG_QCOM_QFPROM
new file mode 100644
index 0000000..9df0fc6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_QFPROM
@@ -0,0 +1 @@
+CONFIG_QCOM_QFPROM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SMD_RPM b/baseconfig/arm/aarch64/CONFIG_QCOM_SMD_RPM
new file mode 100644
index 0000000..4610581
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SMD_RPM
@@ -0,0 +1 @@
+CONFIG_QCOM_SMD_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SMEM b/baseconfig/arm/aarch64/CONFIG_QCOM_SMEM
new file mode 100644
index 0000000..f91ef8c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SMEM
@@ -0,0 +1 @@
+CONFIG_QCOM_SMEM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SMP2P b/baseconfig/arm/aarch64/CONFIG_QCOM_SMP2P
new file mode 100644
index 0000000..5fa221f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SMP2P
@@ -0,0 +1 @@
+CONFIG_QCOM_SMP2P=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SMSM b/baseconfig/arm/aarch64/CONFIG_QCOM_SMSM
new file mode 100644
index 0000000..210a649
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SMSM
@@ -0,0 +1 @@
+CONFIG_QCOM_SMSM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_IADC b/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_IADC
new file mode 100644
index 0000000..d8601ce
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_IADC
@@ -0,0 +1 @@
+CONFIG_QCOM_SPMI_IADC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_TEMP_ALARM b/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_TEMP_ALARM
new file mode 100644
index 0000000..7155372
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_TEMP_ALARM
@@ -0,0 +1 @@
+CONFIG_QCOM_SPMI_TEMP_ALARM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_VADC b/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_VADC
new file mode 100644
index 0000000..fcc1196
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_SPMI_VADC
@@ -0,0 +1 @@
+CONFIG_QCOM_SPMI_VADC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_TSENS b/baseconfig/arm/aarch64/CONFIG_QCOM_TSENS
new file mode 100644
index 0000000..0d43fc9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_TSENS
@@ -0,0 +1 @@
+CONFIG_QCOM_TSENS=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_WCNSS_CTRL b/baseconfig/arm/aarch64/CONFIG_QCOM_WCNSS_CTRL
new file mode 100644
index 0000000..e5469ca
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_WCNSS_CTRL
@@ -0,0 +1 @@
+CONFIG_QCOM_WCNSS_CTRL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_WCNSS_PIL b/baseconfig/arm/aarch64/CONFIG_QCOM_WCNSS_PIL
new file mode 100644
index 0000000..b13cefb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_WCNSS_PIL
@@ -0,0 +1 @@
+CONFIG_QCOM_WCNSS_PIL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_QCOM_WDT b/baseconfig/arm/aarch64/CONFIG_QCOM_WDT
new file mode 100644
index 0000000..e4c7f9d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_QCOM_WDT
@@ -0,0 +1 @@
+CONFIG_QCOM_WDT=m
diff --git a/baseconfig/arm/aarch64/CONFIG_RANDOMIZE_BASE b/baseconfig/arm/aarch64/CONFIG_RANDOMIZE_BASE
new file mode 100644
index 0000000..20610a9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RANDOMIZE_BASE
@@ -0,0 +1 @@
+CONFIG_RANDOMIZE_BASE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_RANDOMIZE_MODULE_REGION_FULL b/baseconfig/arm/aarch64/CONFIG_RANDOMIZE_MODULE_REGION_FULL
new file mode 100644
index 0000000..7645a37
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RANDOMIZE_MODULE_REGION_FULL
@@ -0,0 +1 @@
+CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_RCU_FANOUT b/baseconfig/arm/aarch64/CONFIG_RCU_FANOUT
new file mode 100644
index 0000000..e95447c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RCU_FANOUT
@@ -0,0 +1 @@
+CONFIG_RCU_FANOUT=64
diff --git a/baseconfig/arm/aarch64/CONFIG_REFCOUNT_FULL b/baseconfig/arm/aarch64/CONFIG_REFCOUNT_FULL
new file mode 100644
index 0000000..c7e4a16
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REFCOUNT_FULL
@@ -0,0 +1 @@
+CONFIG_REFCOUNT_FULL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_REGMAP_SPMI b/baseconfig/arm/aarch64/CONFIG_REGMAP_SPMI
new file mode 100644
index 0000000..eba374b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGMAP_SPMI
@@ -0,0 +1 @@
+CONFIG_REGMAP_SPMI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_REGULATOR_AXP20X b/baseconfig/arm/aarch64/CONFIG_REGULATOR_AXP20X
new file mode 100644
index 0000000..6694810
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGULATOR_AXP20X
@@ -0,0 +1 @@
+CONFIG_REGULATOR_AXP20X=m
diff --git a/baseconfig/arm/aarch64/CONFIG_REGULATOR_HI655X b/baseconfig/arm/aarch64/CONFIG_REGULATOR_HI655X
new file mode 100644
index 0000000..c267fff
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGULATOR_HI655X
@@ -0,0 +1 @@
+CONFIG_REGULATOR_HI655X=m
diff --git a/baseconfig/arm/aarch64/CONFIG_REGULATOR_MAX77620 b/baseconfig/arm/aarch64/CONFIG_REGULATOR_MAX77620
new file mode 100644
index 0000000..db01583
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGULATOR_MAX77620
@@ -0,0 +1 @@
+CONFIG_REGULATOR_MAX77620=m
diff --git a/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_RPM b/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_RPM
new file mode 100644
index 0000000..3d002ca
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_RPM
@@ -0,0 +1 @@
+CONFIG_REGULATOR_QCOM_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_SMD_RPM b/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_SMD_RPM
new file mode 100644
index 0000000..aae961c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_SMD_RPM
@@ -0,0 +1 @@
+CONFIG_REGULATOR_QCOM_SMD_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_SPMI b/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_SPMI
new file mode 100644
index 0000000..c83be7a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_REGULATOR_QCOM_SPMI
@@ -0,0 +1 @@
+CONFIG_REGULATOR_QCOM_SPMI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_RELOCATABLE b/baseconfig/arm/aarch64/CONFIG_RELOCATABLE
new file mode 100644
index 0000000..36808ed
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RELOCATABLE
@@ -0,0 +1 @@
+CONFIG_RELOCATABLE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_RESET_HISI b/baseconfig/arm/aarch64/CONFIG_RESET_HISI
new file mode 100644
index 0000000..af17d8a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RESET_HISI
@@ -0,0 +1 @@
+CONFIG_RESET_HISI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_RPMSG b/baseconfig/arm/aarch64/CONFIG_RPMSG
new file mode 100644
index 0000000..7cc8785
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RPMSG
@@ -0,0 +1 @@
+CONFIG_RPMSG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_RPMSG_QCOM_GLINK_RPM b/baseconfig/arm/aarch64/CONFIG_RPMSG_QCOM_GLINK_RPM
new file mode 100644
index 0000000..1f5ac58
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RPMSG_QCOM_GLINK_RPM
@@ -0,0 +1 @@
+CONFIG_RPMSG_QCOM_GLINK_RPM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_RPMSG_QCOM_SMD b/baseconfig/arm/aarch64/CONFIG_RPMSG_QCOM_SMD
new file mode 100644
index 0000000..f65af3d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RPMSG_QCOM_SMD
@@ -0,0 +1 @@
+CONFIG_RPMSG_QCOM_SMD=m
diff --git a/baseconfig/arm/aarch64/CONFIG_RTC_DRV_EFI b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_EFI
new file mode 100644
index 0000000..e2a2dcd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_EFI
@@ -0,0 +1 @@
+CONFIG_RTC_DRV_EFI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_RTC_DRV_PL030 b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_PL030
new file mode 100644
index 0000000..6f6f4ec
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_PL030
@@ -0,0 +1 @@
+# CONFIG_RTC_DRV_PL030 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_RTC_DRV_PM8XXX b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_PM8XXX
new file mode 100644
index 0000000..adc778e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_PM8XXX
@@ -0,0 +1 @@
+CONFIG_RTC_DRV_PM8XXX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_RTC_DRV_SUN6I b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_SUN6I
new file mode 100644
index 0000000..54410db
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_SUN6I
@@ -0,0 +1 @@
+CONFIG_RTC_DRV_SUN6I=y
diff --git a/baseconfig/arm/aarch64/CONFIG_RTC_DRV_XGENE b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_XGENE
new file mode 100644
index 0000000..f6897ba
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_RTC_DRV_XGENE
@@ -0,0 +1 @@
+CONFIG_RTC_DRV_XGENE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SATA_AHCI_SEATTLE b/baseconfig/arm/aarch64/CONFIG_SATA_AHCI_SEATTLE
new file mode 100644
index 0000000..dfcf03f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SATA_AHCI_SEATTLE
@@ -0,0 +1 @@
+CONFIG_SATA_AHCI_SEATTLE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SENSORS_ACPI_POWER b/baseconfig/arm/aarch64/CONFIG_SENSORS_ACPI_POWER
new file mode 100644
index 0000000..dbb45c0
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SENSORS_ACPI_POWER
@@ -0,0 +1 @@
+CONFIG_SENSORS_ACPI_POWER=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SENSORS_LTC2978_REGULATOR b/baseconfig/arm/aarch64/CONFIG_SENSORS_LTC2978_REGULATOR
new file mode 100644
index 0000000..54d82dd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SENSORS_LTC2978_REGULATOR
@@ -0,0 +1 @@
+# CONFIG_SENSORS_LTC2978_REGULATOR is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SENSORS_XGENE b/baseconfig/arm/aarch64/CONFIG_SENSORS_XGENE
new file mode 100644
index 0000000..84ffdf1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SENSORS_XGENE
@@ -0,0 +1 @@
+CONFIG_SENSORS_XGENE=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SERIAL_AMBA_PL010 b/baseconfig/arm/aarch64/CONFIG_SERIAL_AMBA_PL010
new file mode 100644
index 0000000..ee4b9d5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SERIAL_AMBA_PL010
@@ -0,0 +1 @@
+# CONFIG_SERIAL_AMBA_PL010 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SERIAL_MSM b/baseconfig/arm/aarch64/CONFIG_SERIAL_MSM
new file mode 100644
index 0000000..d9bd716
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SERIAL_MSM
@@ -0,0 +1 @@
+CONFIG_SERIAL_MSM=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SERIAL_MSM_CONSOLE b/baseconfig/arm/aarch64/CONFIG_SERIAL_MSM_CONSOLE
new file mode 100644
index 0000000..5aeaebb
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SERIAL_MSM_CONSOLE
@@ -0,0 +1 @@
+CONFIG_SERIAL_MSM_CONSOLE=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SERIO_SUN4I_PS2 b/baseconfig/arm/aarch64/CONFIG_SERIO_SUN4I_PS2
new file mode 100644
index 0000000..aa105b3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SERIO_SUN4I_PS2
@@ -0,0 +1 @@
+# CONFIG_SERIO_SUN4I_PS2 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_KIRKWOOD_SOC b/baseconfig/arm/aarch64/CONFIG_SND_KIRKWOOD_SOC
new file mode 100644
index 0000000..05e82f2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_KIRKWOOD_SOC
@@ -0,0 +1 @@
+# CONFIG_SND_KIRKWOOD_SOC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_APQ8016_SBC b/baseconfig/arm/aarch64/CONFIG_SND_SOC_APQ8016_SBC
new file mode 100644
index 0000000..dfe53b8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_APQ8016_SBC
@@ -0,0 +1 @@
+CONFIG_SND_SOC_APQ8016_SBC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_MSM8916_WCD_ANALOG b/baseconfig/arm/aarch64/CONFIG_SND_SOC_MSM8916_WCD_ANALOG
new file mode 100644
index 0000000..207a5e5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_MSM8916_WCD_ANALOG
@@ -0,0 +1 @@
+CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL b/baseconfig/arm/aarch64/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL
new file mode 100644
index 0000000..db12f03
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL
@@ -0,0 +1 @@
+CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_QCOM b/baseconfig/arm/aarch64/CONFIG_SND_SOC_QCOM
new file mode 100644
index 0000000..719eb4e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_QCOM
@@ -0,0 +1 @@
+CONFIG_SND_SOC_QCOM=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_SGTL5000 b/baseconfig/arm/aarch64/CONFIG_SND_SOC_SGTL5000
new file mode 100644
index 0000000..ea71dec
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_SGTL5000
@@ -0,0 +1 @@
+CONFIG_SND_SOC_SGTL5000=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_STORM b/baseconfig/arm/aarch64/CONFIG_SND_SOC_STORM
new file mode 100644
index 0000000..adab3ae
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_STORM
@@ -0,0 +1 @@
+# CONFIG_SND_SOC_STORM is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA
new file mode 100644
index 0000000..b32a04f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA
@@ -0,0 +1 @@
+CONFIG_SND_SOC_TEGRA=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_MAX98090 b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_MAX98090
new file mode 100644
index 0000000..55f327a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_MAX98090
@@ -0,0 +1 @@
+CONFIG_SND_SOC_TEGRA_MAX98090=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_RT5640 b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_RT5640
new file mode 100644
index 0000000..3370b8e
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_RT5640
@@ -0,0 +1 @@
+CONFIG_SND_SOC_TEGRA_RT5640=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_RT5677 b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_RT5677
new file mode 100644
index 0000000..24298d9
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_RT5677
@@ -0,0 +1 @@
+CONFIG_SND_SOC_TEGRA_RT5677=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_SGTL5000 b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_SGTL5000
new file mode 100644
index 0000000..4706a31
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_SGTL5000
@@ -0,0 +1 @@
+CONFIG_SND_SOC_TEGRA_SGTL5000=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_WM8753 b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_WM8753
new file mode 100644
index 0000000..9039b16
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SOC_TEGRA_WM8753
@@ -0,0 +1 @@
+# CONFIG_SND_SOC_TEGRA_WM8753 is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_CODEC b/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_CODEC
new file mode 100644
index 0000000..6cce5a1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_CODEC
@@ -0,0 +1 @@
+CONFIG_SND_SUN4I_CODEC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_I2S b/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_I2S
new file mode 100644
index 0000000..d9270e2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_I2S
@@ -0,0 +1 @@
+CONFIG_SND_SUN4I_I2S=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_SPDIF b/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_SPDIF
new file mode 100644
index 0000000..c0b108a
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SUN4I_SPDIF
@@ -0,0 +1 @@
+CONFIG_SND_SUN4I_SPDIF=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SUN8I_CODEC b/baseconfig/arm/aarch64/CONFIG_SND_SUN8I_CODEC
new file mode 100644
index 0000000..c30f943
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SUN8I_CODEC
@@ -0,0 +1 @@
+CONFIG_SND_SUN8I_CODEC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SND_SUN8I_CODEC_ANALOG b/baseconfig/arm/aarch64/CONFIG_SND_SUN8I_CODEC_ANALOG
new file mode 100644
index 0000000..28ea301
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SND_SUN8I_CODEC_ANALOG
@@ -0,0 +1 @@
+CONFIG_SND_SUN8I_CODEC_ANALOG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SNI_NETSEC b/baseconfig/arm/aarch64/CONFIG_SNI_NETSEC
new file mode 100644
index 0000000..c348519
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SNI_NETSEC
@@ -0,0 +1 @@
+CONFIG_SNI_NETSEC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SOCIONEXT_SYNQUACER_PREITS b/baseconfig/arm/aarch64/CONFIG_SOCIONEXT_SYNQUACER_PREITS
new file mode 100644
index 0000000..ded5c35
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SOCIONEXT_SYNQUACER_PREITS
@@ -0,0 +1 @@
+CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SOC_TEGRA_FLOWCTRL b/baseconfig/arm/aarch64/CONFIG_SOC_TEGRA_FLOWCTRL
new file mode 100644
index 0000000..00413d4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SOC_TEGRA_FLOWCTRL
@@ -0,0 +1 @@
+CONFIG_SOC_TEGRA_FLOWCTRL=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SPARSEMEM_VMEMMAP b/baseconfig/arm/aarch64/CONFIG_SPARSEMEM_VMEMMAP
new file mode 100644
index 0000000..a2826da
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPARSEMEM_VMEMMAP
@@ -0,0 +1 @@
+CONFIG_SPARSEMEM_VMEMMAP=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SPARSE_IRQ b/baseconfig/arm/aarch64/CONFIG_SPARSE_IRQ
new file mode 100644
index 0000000..943900f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPARSE_IRQ
@@ -0,0 +1 @@
+CONFIG_SPARSE_IRQ=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SPI_QUP b/baseconfig/arm/aarch64/CONFIG_SPI_QUP
new file mode 100644
index 0000000..4cfdd1d
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPI_QUP
@@ -0,0 +1 @@
+CONFIG_SPI_QUP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SPI_SUN6I b/baseconfig/arm/aarch64/CONFIG_SPI_SUN6I
new file mode 100644
index 0000000..031cd17
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPI_SUN6I
@@ -0,0 +1 @@
+CONFIG_SPI_SUN6I=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SPI_THUNDERX b/baseconfig/arm/aarch64/CONFIG_SPI_THUNDERX
new file mode 100644
index 0000000..054a831
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPI_THUNDERX
@@ -0,0 +1 @@
+CONFIG_SPI_THUNDERX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SPI_XLP b/baseconfig/arm/aarch64/CONFIG_SPI_XLP
new file mode 100644
index 0000000..6026d5f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPI_XLP
@@ -0,0 +1 @@
+CONFIG_SPI_XLP=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SPMI b/baseconfig/arm/aarch64/CONFIG_SPMI
new file mode 100644
index 0000000..4ce4dfd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPMI
@@ -0,0 +1 @@
+CONFIG_SPMI=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SPMI_MSM_PMIC_ARB b/baseconfig/arm/aarch64/CONFIG_SPMI_MSM_PMIC_ARB
new file mode 100644
index 0000000..bd46b49
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SPMI_MSM_PMIC_ARB
@@ -0,0 +1 @@
+CONFIG_SPMI_MSM_PMIC_ARB=y
diff --git a/baseconfig/arm/aarch64/CONFIG_STUB_CLK_HI6220 b/baseconfig/arm/aarch64/CONFIG_STUB_CLK_HI6220
new file mode 100644
index 0000000..89a60a4
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_STUB_CLK_HI6220
@@ -0,0 +1 @@
+CONFIG_STUB_CLK_HI6220=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SUN4I_EMAC b/baseconfig/arm/aarch64/CONFIG_SUN4I_EMAC
new file mode 100644
index 0000000..7c44fec
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SUN4I_EMAC
@@ -0,0 +1 @@
+# CONFIG_SUN4I_EMAC is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_SUN4I_GPADC b/baseconfig/arm/aarch64/CONFIG_SUN4I_GPADC
new file mode 100644
index 0000000..97139c2
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SUN4I_GPADC
@@ -0,0 +1 @@
+CONFIG_SUN4I_GPADC=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SUN50I_A64_CCU b/baseconfig/arm/aarch64/CONFIG_SUN50I_A64_CCU
new file mode 100644
index 0000000..7b6c7a6
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SUN50I_A64_CCU
@@ -0,0 +1 @@
+CONFIG_SUN50I_A64_CCU=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SUNXI_CCU b/baseconfig/arm/aarch64/CONFIG_SUNXI_CCU
new file mode 100644
index 0000000..30e6d69
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SUNXI_CCU
@@ -0,0 +1 @@
+CONFIG_SUNXI_CCU=y
diff --git a/baseconfig/arm/aarch64/CONFIG_SUNXI_WATCHDOG b/baseconfig/arm/aarch64/CONFIG_SUNXI_WATCHDOG
new file mode 100644
index 0000000..9b58f97
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SUNXI_WATCHDOG
@@ -0,0 +1 @@
+CONFIG_SUNXI_WATCHDOG=m
diff --git a/baseconfig/arm/aarch64/CONFIG_SYS_HYPERVISOR b/baseconfig/arm/aarch64/CONFIG_SYS_HYPERVISOR
new file mode 100644
index 0000000..b5668db
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_SYS_HYPERVISOR
@@ -0,0 +1 @@
+# CONFIG_SYS_HYPERVISOR is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_TEGRA210_ADMA b/baseconfig/arm/aarch64/CONFIG_TEGRA210_ADMA
new file mode 100644
index 0000000..7f82ada
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_TEGRA210_ADMA
@@ -0,0 +1 @@
+CONFIG_TEGRA210_ADMA=y
diff --git a/baseconfig/arm/aarch64/CONFIG_TEGRA_ACONNECT b/baseconfig/arm/aarch64/CONFIG_TEGRA_ACONNECT
new file mode 100644
index 0000000..251550c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_TEGRA_ACONNECT
@@ -0,0 +1 @@
+CONFIG_TEGRA_ACONNECT=m
diff --git a/baseconfig/arm/aarch64/CONFIG_TEGRA_GMI b/baseconfig/arm/aarch64/CONFIG_TEGRA_GMI
new file mode 100644
index 0000000..5def3e8
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_TEGRA_GMI
@@ -0,0 +1 @@
+CONFIG_TEGRA_GMI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_TEGRA_IVC b/baseconfig/arm/aarch64/CONFIG_TEGRA_IVC
new file mode 100644
index 0000000..cdcacbe
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_TEGRA_IVC
@@ -0,0 +1 @@
+CONFIG_TEGRA_IVC=y
diff --git a/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_BGX b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_BGX
new file mode 100644
index 0000000..123fe6f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_BGX
@@ -0,0 +1 @@
+CONFIG_THUNDER_NIC_BGX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_PF b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_PF
new file mode 100644
index 0000000..6b047a1
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_PF
@@ -0,0 +1 @@
+CONFIG_THUNDER_NIC_PF=m
diff --git a/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_RGX b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_RGX
new file mode 100644
index 0000000..c50ae01
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_RGX
@@ -0,0 +1 @@
+CONFIG_THUNDER_NIC_RGX=m
diff --git a/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_VF b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_VF
new file mode 100644
index 0000000..5fdfca5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_THUNDER_NIC_VF
@@ -0,0 +1 @@
+CONFIG_THUNDER_NIC_VF=m
diff --git a/baseconfig/arm/aarch64/CONFIG_TOUCHSCREEN_SUN4I b/baseconfig/arm/aarch64/CONFIG_TOUCHSCREEN_SUN4I
new file mode 100644
index 0000000..af15c1f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_TOUCHSCREEN_SUN4I
@@ -0,0 +1 @@
+# CONFIG_TOUCHSCREEN_SUN4I is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_USB_CONFIGFS_F_LB_SS b/baseconfig/arm/aarch64/CONFIG_USB_CONFIGFS_F_LB_SS
new file mode 100644
index 0000000..213edb5
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_USB_CONFIGFS_F_LB_SS
@@ -0,0 +1 @@
+# CONFIG_USB_CONFIGFS_F_LB_SS is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_USB_MUSB_SUNXI b/baseconfig/arm/aarch64/CONFIG_USB_MUSB_SUNXI
new file mode 100644
index 0000000..258e716
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_USB_MUSB_SUNXI
@@ -0,0 +1 @@
+CONFIG_USB_MUSB_SUNXI=m
diff --git a/baseconfig/arm/aarch64/CONFIG_USB_SPEEDTOUCH b/baseconfig/arm/aarch64/CONFIG_USB_SPEEDTOUCH
new file mode 100644
index 0000000..e34bebc
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_USB_SPEEDTOUCH
@@ -0,0 +1 @@
+# CONFIG_USB_SPEEDTOUCH is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_VDSO b/baseconfig/arm/aarch64/CONFIG_VDSO
new file mode 100644
index 0000000..cab5eba
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_VDSO
@@ -0,0 +1 @@
+CONFIG_VDSO=y
diff --git a/baseconfig/arm/aarch64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET b/baseconfig/arm/aarch64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET
new file mode 100644
index 0000000..b6b1ee3
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET
@@ -0,0 +1 @@
+CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=m
diff --git a/baseconfig/arm/aarch64/CONFIG_VGA_CONSOLE b/baseconfig/arm/aarch64/CONFIG_VGA_CONSOLE
new file mode 100644
index 0000000..5b00b2f
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_VGA_CONSOLE
@@ -0,0 +1 @@
+# CONFIG_VGA_CONSOLE is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_VIDEO_QCOM_CAMSS b/baseconfig/arm/aarch64/CONFIG_VIDEO_QCOM_CAMSS
new file mode 100644
index 0000000..5e2512c
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_VIDEO_QCOM_CAMSS
@@ -0,0 +1 @@
+CONFIG_VIDEO_QCOM_CAMSS=m
diff --git a/baseconfig/arm/aarch64/CONFIG_VIDEO_QCOM_VENUS b/baseconfig/arm/aarch64/CONFIG_VIDEO_QCOM_VENUS
new file mode 100644
index 0000000..68082fd
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_VIDEO_QCOM_VENUS
@@ -0,0 +1 @@
+CONFIG_VIDEO_QCOM_VENUS=m
diff --git a/baseconfig/arm/aarch64/CONFIG_VMAP_STACK b/baseconfig/arm/aarch64/CONFIG_VMAP_STACK
new file mode 100644
index 0000000..8bd9868
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_VMAP_STACK
@@ -0,0 +1 @@
+CONFIG_VMAP_STACK=y
diff --git a/baseconfig/arm/aarch64/CONFIG_XGENE_DMA b/baseconfig/arm/aarch64/CONFIG_XGENE_DMA
new file mode 100644
index 0000000..7c67d5b
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_XGENE_DMA
@@ -0,0 +1 @@
+# CONFIG_XGENE_DMA is not set
diff --git a/baseconfig/arm/aarch64/CONFIG_XGENE_PMU b/baseconfig/arm/aarch64/CONFIG_XGENE_PMU
new file mode 100644
index 0000000..df5afee
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_XGENE_PMU
@@ -0,0 +1 @@
+CONFIG_XGENE_PMU=y
diff --git a/baseconfig/arm/aarch64/CONFIG_XGENE_SLIMPRO_MBOX b/baseconfig/arm/aarch64/CONFIG_XGENE_SLIMPRO_MBOX
new file mode 100644
index 0000000..cbc4863
--- /dev/null
+++ b/baseconfig/arm/aarch64/CONFIG_XGENE_SLIMPRO_MBOX
@@ -0,0 +1 @@
+CONFIG_XGENE_SLIMPRO_MBOX=m
diff --git a/baseconfig/arm/aarch64/README b/baseconfig/arm/aarch64/README
new file mode 100644
index 0000000..c2aec64
--- /dev/null
+++ b/baseconfig/arm/aarch64/README
@@ -0,0 +1 @@
+This directory contains options specific to arm64
diff --git a/baseconfig/arm/arm64/CONFIG_64BIT b/baseconfig/arm/arm64/CONFIG_64BIT
deleted file mode 100644
index 06a94e4..0000000
--- a/baseconfig/arm/arm64/CONFIG_64BIT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_64BIT=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI b/baseconfig/arm/arm64/CONFIG_ACPI
deleted file mode 100644
index 839566b..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI b/baseconfig/arm/arm64/CONFIG_ACPI_APEI
deleted file mode 100644
index 9ab33fa..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_APEI=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_EINJ b/baseconfig/arm/arm64/CONFIG_ACPI_APEI_EINJ
deleted file mode 100644
index 2d03b69..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_EINJ
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ACPI_APEI_EINJ is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_ERST_DEBUG b/baseconfig/arm/arm64/CONFIG_ACPI_APEI_ERST_DEBUG
deleted file mode 100644
index 235760d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_ERST_DEBUG
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ACPI_APEI_ERST_DEBUG is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_GHES b/baseconfig/arm/arm64/CONFIG_ACPI_APEI_GHES
deleted file mode 100644
index 8fd037d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_GHES
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_APEI_GHES=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_MEMORY_FAILURE b/baseconfig/arm/arm64/CONFIG_ACPI_APEI_MEMORY_FAILURE
deleted file mode 100644
index 46aa157..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_MEMORY_FAILURE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_APEI_MEMORY_FAILURE=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_PCIEAER b/baseconfig/arm/arm64/CONFIG_ACPI_APEI_PCIEAER
deleted file mode 100644
index 26f3e91..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_PCIEAER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_APEI_PCIEAER=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_SEA b/baseconfig/arm/arm64/CONFIG_ACPI_APEI_SEA
deleted file mode 100644
index db573ff..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_APEI_SEA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_APEI_SEA=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_BGRT b/baseconfig/arm/arm64/CONFIG_ACPI_BGRT
deleted file mode 100644
index 13035dd..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_BGRT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_BGRT=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_BUTTON b/baseconfig/arm/arm64/CONFIG_ACPI_BUTTON
deleted file mode 100644
index e40dff4..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_BUTTON
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_BUTTON=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_CONFIGFS b/baseconfig/arm/arm64/CONFIG_ACPI_CONFIGFS
deleted file mode 100644
index fc2af2c..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_CONFIGFS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_CONFIGFS=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_CONTAINER b/baseconfig/arm/arm64/CONFIG_ACPI_CONTAINER
deleted file mode 100644
index 24287da..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_CONTAINER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_CONTAINER=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_CPPC_CPUFREQ b/baseconfig/arm/arm64/CONFIG_ACPI_CPPC_CPUFREQ
deleted file mode 100644
index 5cc8813..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_CPPC_CPUFREQ
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_CPPC_CPUFREQ=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_CUSTOM_METHOD b/baseconfig/arm/arm64/CONFIG_ACPI_CUSTOM_METHOD
deleted file mode 100644
index 76853b6..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_CUSTOM_METHOD
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_CUSTOM_METHOD=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_DOCK b/baseconfig/arm/arm64/CONFIG_ACPI_DOCK
deleted file mode 100644
index e4d9163..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_DOCK
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_DOCK=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_EC_DEBUGFS b/baseconfig/arm/arm64/CONFIG_ACPI_EC_DEBUGFS
deleted file mode 100644
index df1424c..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_EC_DEBUGFS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_EC_DEBUGFS=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_FAN b/baseconfig/arm/arm64/CONFIG_ACPI_FAN
deleted file mode 100644
index f45a966..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_FAN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_FAN=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_HED b/baseconfig/arm/arm64/CONFIG_ACPI_HED
deleted file mode 100644
index 06042df..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_HED
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_HED=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_I2C_OPREGION b/baseconfig/arm/arm64/CONFIG_ACPI_I2C_OPREGION
deleted file mode 100644
index 92036b9..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_I2C_OPREGION
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_I2C_OPREGION=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_IPMI b/baseconfig/arm/arm64/CONFIG_ACPI_IPMI
deleted file mode 100644
index e40fb9a..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_IPMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_IPMI=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_NFIT b/baseconfig/arm/arm64/CONFIG_ACPI_NFIT
deleted file mode 100644
index 922b719..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_NFIT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_NFIT=m
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_NFIT_DEBUG b/baseconfig/arm/arm64/CONFIG_ACPI_NFIT_DEBUG
deleted file mode 100644
index fc82932..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_NFIT_DEBUG
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ACPI_NFIT_DEBUG is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_NUMA b/baseconfig/arm/arm64/CONFIG_ACPI_NUMA
deleted file mode 100644
index 19881f4..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_NUMA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_NUMA=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_PROCESSOR b/baseconfig/arm/arm64/CONFIG_ACPI_PROCESSOR
deleted file mode 100644
index a24416d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_PROCESSOR
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_PROCESSOR=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_PROCFS_POWER b/baseconfig/arm/arm64/CONFIG_ACPI_PROCFS_POWER
deleted file mode 100644
index 26cea31..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_PROCFS_POWER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_PROCFS_POWER=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_TABLE_UPGRADE b/baseconfig/arm/arm64/CONFIG_ACPI_TABLE_UPGRADE
deleted file mode 100644
index 276233f..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_TABLE_UPGRADE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_TABLE_UPGRADE=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_THERMAL b/baseconfig/arm/arm64/CONFIG_ACPI_THERMAL
deleted file mode 100644
index 1bd7964..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_THERMAL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_THERMAL=y
diff --git a/baseconfig/arm/arm64/CONFIG_ACPI_WATCHDOG b/baseconfig/arm/arm64/CONFIG_ACPI_WATCHDOG
deleted file mode 100644
index d82966e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ACPI_WATCHDOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ACPI_WATCHDOG=y
diff --git a/baseconfig/arm/arm64/CONFIG_AHCI_SUNXI b/baseconfig/arm/arm64/CONFIG_AHCI_SUNXI
deleted file mode 100644
index 91560d6..0000000
--- a/baseconfig/arm/arm64/CONFIG_AHCI_SUNXI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AHCI_SUNXI=m
diff --git a/baseconfig/arm/arm64/CONFIG_AHCI_XGENE b/baseconfig/arm/arm64/CONFIG_AHCI_XGENE
deleted file mode 100644
index 7e02b99..0000000
--- a/baseconfig/arm/arm64/CONFIG_AHCI_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AHCI_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_AMBA_PL08X b/baseconfig/arm/arm64/CONFIG_AMBA_PL08X
deleted file mode 100644
index a13d91b..0000000
--- a/baseconfig/arm/arm64/CONFIG_AMBA_PL08X
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_AMBA_PL08X is not set
diff --git a/baseconfig/arm/arm64/CONFIG_AMD_XGBE b/baseconfig/arm/arm64/CONFIG_AMD_XGBE
deleted file mode 100644
index 27be1a7..0000000
--- a/baseconfig/arm/arm64/CONFIG_AMD_XGBE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AMD_XGBE=m
diff --git a/baseconfig/arm/arm64/CONFIG_AMD_XGBE_DCB b/baseconfig/arm/arm64/CONFIG_AMD_XGBE_DCB
deleted file mode 100644
index f3cdcca..0000000
--- a/baseconfig/arm/arm64/CONFIG_AMD_XGBE_DCB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AMD_XGBE_DCB=y
diff --git a/baseconfig/arm/arm64/CONFIG_APQ_GCC_8084 b/baseconfig/arm/arm64/CONFIG_APQ_GCC_8084
deleted file mode 100644
index bacb61e..0000000
--- a/baseconfig/arm/arm64/CONFIG_APQ_GCC_8084
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_APQ_GCC_8084=y
diff --git a/baseconfig/arm/arm64/CONFIG_APQ_MMCC_8084 b/baseconfig/arm/arm64/CONFIG_APQ_MMCC_8084
deleted file mode 100644
index 05c8d0c..0000000
--- a/baseconfig/arm/arm64/CONFIG_APQ_MMCC_8084
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_APQ_MMCC_8084=m
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_ALPINE b/baseconfig/arm/arm64/CONFIG_ARCH_ALPINE
deleted file mode 100644
index a347a04..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_ALPINE
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_ALPINE is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_BERLIN b/baseconfig/arm/arm64/CONFIG_ARCH_BERLIN
deleted file mode 100644
index 9a647a4..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_BERLIN
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_BERLIN is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_EXYNOS b/baseconfig/arm/arm64/CONFIG_ARCH_EXYNOS
deleted file mode 100644
index 1ee894d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_EXYNOS
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_EXYNOS is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL b/baseconfig/arm/arm64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
deleted file mode 100644
index e87b4da..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_HAS_HOLES_MEMORYMODEL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_HISI b/baseconfig/arm/arm64/CONFIG_ARCH_HISI
deleted file mode 100644
index 9afa5dc..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_HISI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_HISI=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_LAYERSCAPE b/baseconfig/arm/arm64/CONFIG_ARCH_LAYERSCAPE
deleted file mode 100644
index 257f6f9..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_LAYERSCAPE
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_LAYERSCAPE is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_LG1K b/baseconfig/arm/arm64/CONFIG_ARCH_LG1K
deleted file mode 100644
index 0d73af4..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_LG1K
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_LG1K is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_MEDIATEK b/baseconfig/arm/arm64/CONFIG_ARCH_MEDIATEK
deleted file mode 100644
index 62b0a1f..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_MEDIATEK
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_MEDIATEK is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_QCOM b/baseconfig/arm/arm64/CONFIG_ARCH_QCOM
deleted file mode 100644
index e51a38a..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_QCOM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_QCOM=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_REALTEK b/baseconfig/arm/arm64/CONFIG_ARCH_REALTEK
deleted file mode 100644
index 49536f6..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_REALTEK
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_REALTEK is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_RENESAS b/baseconfig/arm/arm64/CONFIG_ARCH_RENESAS
deleted file mode 100644
index 0fa3a2e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_RENESAS
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_RENESAS is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_SEATTLE b/baseconfig/arm/arm64/CONFIG_ARCH_SEATTLE
deleted file mode 100644
index 83c1e8b..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_SEATTLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_SEATTLE=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_SPRD b/baseconfig/arm/arm64/CONFIG_ARCH_SPRD
deleted file mode 100644
index a090576..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_SPRD
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_SPRD is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_STRATIX10 b/baseconfig/arm/arm64/CONFIG_ARCH_STRATIX10
deleted file mode 100644
index ef575bb..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_STRATIX10
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_STRATIX10 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_SUNXI b/baseconfig/arm/arm64/CONFIG_ARCH_SUNXI
deleted file mode 100644
index 6cf4026..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_SUNXI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_SUNXI=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA b/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA
deleted file mode 100644
index 3b74d56..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_TEGRA=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_132_SOC b/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_132_SOC
deleted file mode 100644
index b6d3de8..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_132_SOC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_TEGRA_132_SOC=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_186_SOC b/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_186_SOC
deleted file mode 100644
index 1cafdb2..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_186_SOC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_TEGRA_186_SOC=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_210_SOC b/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_210_SOC
deleted file mode 100644
index 0750c3e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_TEGRA_210_SOC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_TEGRA_210_SOC=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_THUNDER b/baseconfig/arm/arm64/CONFIG_ARCH_THUNDER
deleted file mode 100644
index fc1527e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_THUNDER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_THUNDER=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_THUNDER2 b/baseconfig/arm/arm64/CONFIG_ARCH_THUNDER2
deleted file mode 100644
index aa0f1f3..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_THUNDER2
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_THUNDER2=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_UNIPHIER b/baseconfig/arm/arm64/CONFIG_ARCH_UNIPHIER
deleted file mode 100644
index 2c11033..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_UNIPHIER
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_UNIPHIER is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_XGENE b/baseconfig/arm/arm64/CONFIG_ARCH_XGENE
deleted file mode 100644
index c1bd4d1..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARCH_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_ZX b/baseconfig/arm/arm64/CONFIG_ARCH_ZX
deleted file mode 100644
index ec10bbf..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_ZX
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_ZX is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARCH_ZYNQMP b/baseconfig/arm/arm64/CONFIG_ARCH_ZYNQMP
deleted file mode 100644
index f92a386..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARCH_ZYNQMP
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARCH_ZYNQMP is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64 b/baseconfig/arm/arm64/CONFIG_ARM64
deleted file mode 100644
index e40393f..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_4K_PAGES b/baseconfig/arm/arm64/CONFIG_ARM64_4K_PAGES
deleted file mode 100644
index 5df91df..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_4K_PAGES
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_4K_PAGES=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL b/baseconfig/arm/arm64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL
deleted file mode 100644
index bdb5142..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ACPI_PARKING_PROTOCOL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ACPI_PARKING_PROTOCOL=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_CRYPTO b/baseconfig/arm/arm64/CONFIG_ARM64_CRYPTO
deleted file mode 100644
index 3e9856e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_CRYPTO
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_CRYPTO=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_819472 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_819472
deleted file mode 100644
index e53fbbb..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_819472
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_819472=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_824069 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_824069
deleted file mode 100644
index 2b4897f..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_824069
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_824069=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_826319 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_826319
deleted file mode 100644
index 8a3b9aa..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_826319
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_826319=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_827319 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_827319
deleted file mode 100644
index d341b42..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_827319
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_827319=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_832075 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_832075
deleted file mode 100644
index 9d1f8fc..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_832075
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_832075=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_834220 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_834220
deleted file mode 100644
index a4bf47d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_834220
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_834220=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_843419 b/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_843419
deleted file mode 100644
index 303cae7..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_ERRATUM_843419
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_ERRATUM_843419=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_HW_AFDBM b/baseconfig/arm/arm64/CONFIG_ARM64_HW_AFDBM
deleted file mode 100644
index 4fc9f03..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_HW_AFDBM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_HW_AFDBM=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_LSE_ATOMICS b/baseconfig/arm/arm64/CONFIG_ARM64_LSE_ATOMICS
deleted file mode 100644
index a54d600..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_LSE_ATOMICS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_LSE_ATOMICS=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_PAN b/baseconfig/arm/arm64/CONFIG_ARM64_PAN
deleted file mode 100644
index ac8c85a..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_PAN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_PAN=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_PMEM b/baseconfig/arm/arm64/CONFIG_ARM64_PMEM
deleted file mode 100644
index 9325600..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_PMEM
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARM64_PMEM is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP b/baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP
deleted file mode 100644
index 5090299..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARM64_PTDUMP is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP_DEBUGFS b/baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP_DEBUGFS
deleted file mode 100644
index 2d698a9..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_PTDUMP_DEBUGFS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_PTDUMP_DEBUGFS=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET b/baseconfig/arm/arm64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET
deleted file mode 100644
index a7f7cd7..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_RELOC_TEST b/baseconfig/arm/arm64/CONFIG_ARM64_RELOC_TEST
deleted file mode 100644
index 864fc6a..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_RELOC_TEST
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_ARM64_RELOC_TEST is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_SW_TTBR0_PAN b/baseconfig/arm/arm64/CONFIG_ARM64_SW_TTBR0_PAN
deleted file mode 100644
index 294c8ec..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_SW_TTBR0_PAN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_SW_TTBR0_PAN=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_UAO b/baseconfig/arm/arm64/CONFIG_ARM64_UAO
deleted file mode 100644
index 1b63cd4..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_UAO
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_UAO=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS b/baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS
deleted file mode 100644
index 3a2764d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_VA_BITS=48
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS_48 b/baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS_48
deleted file mode 100644
index 1bafe6e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_VA_BITS_48
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_VA_BITS_48=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM64_VHE b/baseconfig/arm/arm64/CONFIG_ARM64_VHE
deleted file mode 100644
index 340b2bf..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM64_VHE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM64_VHE=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARMADA_AP806_SYSCON b/baseconfig/arm/arm64/CONFIG_ARMADA_AP806_SYSCON
deleted file mode 100644
index c0741ca..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARMADA_AP806_SYSCON
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARMADA_AP806_SYSCON=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM_SBSA_WATCHDOG b/baseconfig/arm/arm64/CONFIG_ARM_SBSA_WATCHDOG
deleted file mode 100644
index 01aa8f1..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM_SBSA_WATCHDOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM_SBSA_WATCHDOG=m
diff --git a/baseconfig/arm/arm64/CONFIG_ARM_SMMU_V3 b/baseconfig/arm/arm64/CONFIG_ARM_SMMU_V3
deleted file mode 100644
index 83d144a..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM_SMMU_V3
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM_SMMU_V3=y
diff --git a/baseconfig/arm/arm64/CONFIG_ARM_TEGRA186_CPUFREQ b/baseconfig/arm/arm64/CONFIG_ARM_TEGRA186_CPUFREQ
deleted file mode 100644
index f0e165d..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM_TEGRA186_CPUFREQ
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM_TEGRA186_CPUFREQ=m
diff --git a/baseconfig/arm/arm64/CONFIG_ARM_TEGRA_DEVFREQ b/baseconfig/arm/arm64/CONFIG_ARM_TEGRA_DEVFREQ
deleted file mode 100644
index d64e3e3..0000000
--- a/baseconfig/arm/arm64/CONFIG_ARM_TEGRA_DEVFREQ
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ARM_TEGRA_DEVFREQ=m
diff --git a/baseconfig/arm/arm64/CONFIG_ATA_ACPI b/baseconfig/arm/arm64/CONFIG_ATA_ACPI
deleted file mode 100644
index a0be76e..0000000
--- a/baseconfig/arm/arm64/CONFIG_ATA_ACPI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ATA_ACPI=y
diff --git a/baseconfig/arm/arm64/CONFIG_AXP20X_ADC b/baseconfig/arm/arm64/CONFIG_AXP20X_ADC
deleted file mode 100644
index 025239f..0000000
--- a/baseconfig/arm/arm64/CONFIG_AXP20X_ADC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AXP20X_ADC=m
diff --git a/baseconfig/arm/arm64/CONFIG_AXP20X_POWER b/baseconfig/arm/arm64/CONFIG_AXP20X_POWER
deleted file mode 100644
index ddf89f5..0000000
--- a/baseconfig/arm/arm64/CONFIG_AXP20X_POWER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AXP20X_POWER=m
diff --git a/baseconfig/arm/arm64/CONFIG_AXP288_ADC b/baseconfig/arm/arm64/CONFIG_AXP288_ADC
deleted file mode 100644
index e138f36..0000000
--- a/baseconfig/arm/arm64/CONFIG_AXP288_ADC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AXP288_ADC=m
diff --git a/baseconfig/arm/arm64/CONFIG_AXP288_CHARGER b/baseconfig/arm/arm64/CONFIG_AXP288_CHARGER
deleted file mode 100644
index 0418f96..0000000
--- a/baseconfig/arm/arm64/CONFIG_AXP288_CHARGER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AXP288_CHARGER=m
diff --git a/baseconfig/arm/arm64/CONFIG_AXP288_FUEL_GAUGE b/baseconfig/arm/arm64/CONFIG_AXP288_FUEL_GAUGE
deleted file mode 100644
index e171b95..0000000
--- a/baseconfig/arm/arm64/CONFIG_AXP288_FUEL_GAUGE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_AXP288_FUEL_GAUGE=m
diff --git a/baseconfig/arm/arm64/CONFIG_BATTERY_AXP20X b/baseconfig/arm/arm64/CONFIG_BATTERY_AXP20X
deleted file mode 100644
index 75591a2..0000000
--- a/baseconfig/arm/arm64/CONFIG_BATTERY_AXP20X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BATTERY_AXP20X=m
diff --git a/baseconfig/arm/arm64/CONFIG_BCMA_POSSIBLE b/baseconfig/arm/arm64/CONFIG_BCMA_POSSIBLE
deleted file mode 100644
index aa4a926..0000000
--- a/baseconfig/arm/arm64/CONFIG_BCMA_POSSIBLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BCMA_POSSIBLE=y
diff --git a/baseconfig/arm/arm64/CONFIG_BCM_PDC_MBOX b/baseconfig/arm/arm64/CONFIG_BCM_PDC_MBOX
deleted file mode 100644
index 23c2457..0000000
--- a/baseconfig/arm/arm64/CONFIG_BCM_PDC_MBOX
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_BCM_PDC_MBOX is not set
diff --git a/baseconfig/arm/arm64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE b/baseconfig/arm/arm64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
deleted file mode 100644
index 71343dc..0000000
--- a/baseconfig/arm/arm64/CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
diff --git a/baseconfig/arm/arm64/CONFIG_BRCMUTIL b/baseconfig/arm/arm64/CONFIG_BRCMUTIL
deleted file mode 100644
index 66c5eac..0000000
--- a/baseconfig/arm/arm64/CONFIG_BRCMUTIL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BRCMUTIL=m
diff --git a/baseconfig/arm/arm64/CONFIG_BTT b/baseconfig/arm/arm64/CONFIG_BTT
deleted file mode 100644
index 9cfddf1..0000000
--- a/baseconfig/arm/arm64/CONFIG_BTT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BTT=y
diff --git a/baseconfig/arm/arm64/CONFIG_BT_QCOMSMD b/baseconfig/arm/arm64/CONFIG_BT_QCOMSMD
deleted file mode 100644
index 9f36fb6..0000000
--- a/baseconfig/arm/arm64/CONFIG_BT_QCOMSMD
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BT_QCOMSMD=m
diff --git a/baseconfig/arm/arm64/CONFIG_BUG b/baseconfig/arm/arm64/CONFIG_BUG
deleted file mode 100644
index 7a3a7bf..0000000
--- a/baseconfig/arm/arm64/CONFIG_BUG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_BUG=y
diff --git a/baseconfig/arm/arm64/CONFIG_CAN_SUN4I b/baseconfig/arm/arm64/CONFIG_CAN_SUN4I
deleted file mode 100644
index 925f02a..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAN_SUN4I
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAN_SUN4I=m
diff --git a/baseconfig/arm/arm64/CONFIG_CAVIUM_CPT b/baseconfig/arm/arm64/CONFIG_CAVIUM_CPT
deleted file mode 100644
index 1838056..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAVIUM_CPT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAVIUM_CPT=m
diff --git a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_22375 b/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_22375
deleted file mode 100644
index e173734..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_22375
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAVIUM_ERRATUM_22375=y
diff --git a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23144 b/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23144
deleted file mode 100644
index 59e70bc..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23144
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAVIUM_ERRATUM_23144=y
diff --git a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23154 b/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23154
deleted file mode 100644
index 04080e7..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_23154
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAVIUM_ERRATUM_23154=y
diff --git a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_27456 b/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_27456
deleted file mode 100644
index 540c843..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_27456
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAVIUM_ERRATUM_27456=y
diff --git a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_30115 b/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_30115
deleted file mode 100644
index e3f4218..0000000
--- a/baseconfig/arm/arm64/CONFIG_CAVIUM_ERRATUM_30115
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CAVIUM_ERRATUM_30115=y
diff --git a/baseconfig/arm/arm64/CONFIG_CHARGER_AXP20X b/baseconfig/arm/arm64/CONFIG_CHARGER_AXP20X
deleted file mode 100644
index 2e64e77..0000000
--- a/baseconfig/arm/arm64/CONFIG_CHARGER_AXP20X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CHARGER_AXP20X=m
diff --git a/baseconfig/arm/arm64/CONFIG_CHARGER_MANAGER b/baseconfig/arm/arm64/CONFIG_CHARGER_MANAGER
deleted file mode 100644
index 51fe252..0000000
--- a/baseconfig/arm/arm64/CONFIG_CHARGER_MANAGER
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_CHARGER_MANAGER is not set
diff --git a/baseconfig/arm/arm64/CONFIG_CHARGER_QCOM_SMBB b/baseconfig/arm/arm64/CONFIG_CHARGER_QCOM_SMBB
deleted file mode 100644
index 43a91eb..0000000
--- a/baseconfig/arm/arm64/CONFIG_CHARGER_QCOM_SMBB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CHARGER_QCOM_SMBB=m
diff --git a/baseconfig/arm/arm64/CONFIG_CLKDEV_LOOKUP b/baseconfig/arm/arm64/CONFIG_CLKDEV_LOOKUP
deleted file mode 100644
index 90b1bab..0000000
--- a/baseconfig/arm/arm64/CONFIG_CLKDEV_LOOKUP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CLKDEV_LOOKUP=y
diff --git a/baseconfig/arm/arm64/CONFIG_CMDLINE b/baseconfig/arm/arm64/CONFIG_CMDLINE
deleted file mode 100644
index f218410..0000000
--- a/baseconfig/arm/arm64/CONFIG_CMDLINE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CMDLINE="console=ttyAMA0"
diff --git a/baseconfig/arm/arm64/CONFIG_CMDLINE_FORCE b/baseconfig/arm/arm64/CONFIG_CMDLINE_FORCE
deleted file mode 100644
index db59f37..0000000
--- a/baseconfig/arm/arm64/CONFIG_CMDLINE_FORCE
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_CMDLINE_FORCE is not set
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3516CV300 b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3516CV300
deleted file mode 100644
index 2c50858..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3516CV300
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_COMMON_CLK_HI3516CV300 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3519 b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3519
deleted file mode 100644
index 5484a59..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3519
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_HI3519=m
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3660 b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3660
deleted file mode 100644
index 4469354..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3660
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_HI3660=y
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3798CV200 b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3798CV200
deleted file mode 100644
index 8d91e10..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI3798CV200
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_COMMON_CLK_HI3798CV200 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI6220 b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI6220
deleted file mode 100644
index 440b714..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI6220
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_HI6220=y
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI655X b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI655X
deleted file mode 100644
index 18ddc07..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_HI655X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_HI655X=m
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_PWM b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_PWM
deleted file mode 100644
index 08193dd..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_PWM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_PWM=m
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_QCOM b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_QCOM
deleted file mode 100644
index 2b7c643..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_QCOM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_QCOM=y
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_XGENE b/baseconfig/arm/arm64/CONFIG_COMMON_CLK_XGENE
deleted file mode 100644
index 44d0a9d..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_CLK_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_CLK_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_COMMON_RESET_HI6220 b/baseconfig/arm/arm64/CONFIG_COMMON_RESET_HI6220
deleted file mode 100644
index a603d73..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMMON_RESET_HI6220
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_COMMON_RESET_HI6220=m
diff --git a/baseconfig/arm/arm64/CONFIG_COMPAT b/baseconfig/arm/arm64/CONFIG_COMPAT
deleted file mode 100644
index 3e041f1..0000000
--- a/baseconfig/arm/arm64/CONFIG_COMPAT
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_COMPAT is not set
diff --git a/baseconfig/arm/arm64/CONFIG_CONSOLE_TRANSLATIONS b/baseconfig/arm/arm64/CONFIG_CONSOLE_TRANSLATIONS
deleted file mode 100644
index 983fcc9..0000000
--- a/baseconfig/arm/arm64/CONFIG_CONSOLE_TRANSLATIONS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CONSOLE_TRANSLATIONS=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64 b/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64
deleted file mode 100644
index dd0ae2c..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_AES_ARM64=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_BS b/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_BS
deleted file mode 100644
index 6e04273..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_BS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_AES_ARM64_BS=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE b/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE
deleted file mode 100644
index 7200995..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_AES_ARM64_CE=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_BLK b/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_BLK
deleted file mode 100644
index b07b273..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_BLK
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_CCM b/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_CCM
deleted file mode 100644
index 20ef5af..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_CE_CCM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_AES_ARM64_CE_CCM=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK b/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK
deleted file mode 100644
index 2ac8138..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_AES_ARM64_NEON_BLK
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_CRC32_ARM64 b/baseconfig/arm/arm64/CONFIG_CRYPTO_CRC32_ARM64
deleted file mode 100644
index 845ef51..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_CRC32_ARM64
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_CRC32_ARM64=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
deleted file mode 100644
index d5226e1..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CAVIUM_ZIP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_DEV_CAVIUM_ZIP=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP
deleted file mode 100644
index d2f5497..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_DEV_CCP=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_CRYPTO b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_CRYPTO
deleted file mode 100644
index 4887c6d..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_CRYPTO
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_DEV_CCP_CRYPTO=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_DD b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_DD
deleted file mode 100644
index 18c7b90..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_CCP_DD
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_DEV_CCP_DD=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_QCE b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_QCE
deleted file mode 100644
index 27a3f72..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_QCE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_DEV_QCE=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_SAFEXCEL b/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_SAFEXCEL
deleted file mode 100644
index 61cb974..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_DEV_SAFEXCEL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_DEV_SAFEXCEL=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_GHASH_ARM64_CE b/baseconfig/arm/arm64/CONFIG_CRYPTO_GHASH_ARM64_CE
deleted file mode 100644
index f2db2f2..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_GHASH_ARM64_CE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_GHASH_ARM64_CE=m
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_SHA1_ARM64_CE b/baseconfig/arm/arm64/CONFIG_CRYPTO_SHA1_ARM64_CE
deleted file mode 100644
index 3fe882c..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_SHA1_ARM64_CE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_SHA1_ARM64_CE=y
diff --git a/baseconfig/arm/arm64/CONFIG_CRYPTO_SHA2_ARM64_CE b/baseconfig/arm/arm64/CONFIG_CRYPTO_SHA2_ARM64_CE
deleted file mode 100644
index 5d79a86..0000000
--- a/baseconfig/arm/arm64/CONFIG_CRYPTO_SHA2_ARM64_CE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_CRYPTO_SHA2_ARM64_CE=y
diff --git a/baseconfig/arm/arm64/CONFIG_DEBUG_ALIGN_RODATA b/baseconfig/arm/arm64/CONFIG_DEBUG_ALIGN_RODATA
deleted file mode 100644
index 4b5ff50..0000000
--- a/baseconfig/arm/arm64/CONFIG_DEBUG_ALIGN_RODATA
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DEBUG_ALIGN_RODATA is not set
diff --git a/baseconfig/arm/arm64/CONFIG_DEBUG_EFI b/baseconfig/arm/arm64/CONFIG_DEBUG_EFI
deleted file mode 100644
index 68b7b8a..0000000
--- a/baseconfig/arm/arm64/CONFIG_DEBUG_EFI
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DEBUG_EFI is not set
diff --git a/baseconfig/arm/arm64/CONFIG_DEBUG_SECTION_MISMATCH b/baseconfig/arm/arm64/CONFIG_DEBUG_SECTION_MISMATCH
deleted file mode 100644
index 441e346..0000000
--- a/baseconfig/arm/arm64/CONFIG_DEBUG_SECTION_MISMATCH
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DEBUG_SECTION_MISMATCH=y
diff --git a/baseconfig/arm/arm64/CONFIG_DEBUG_WX b/baseconfig/arm/arm64/CONFIG_DEBUG_WX
deleted file mode 100644
index 95e08f4..0000000
--- a/baseconfig/arm/arm64/CONFIG_DEBUG_WX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DEBUG_WX=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_HISI_KIRIN b/baseconfig/arm/arm64/CONFIG_DRM_HISI_KIRIN
deleted file mode 100644
index 271def0..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_HISI_KIRIN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_HISI_KIRIN=m
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM b/baseconfig/arm/arm64/CONFIG_DRM_MSM
deleted file mode 100644
index 0a1adfc..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM=m
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI b/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI
deleted file mode 100644
index 87b6279..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_DSI=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_14NM_PHY b/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_14NM_PHY
deleted file mode 100644
index 397f690..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_14NM_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_DSI_14NM_PHY=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_20NM_PHY b/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_20NM_PHY
deleted file mode 100644
index 7595ae2..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_20NM_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_DSI_20NM_PHY=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_28NM_8960_PHY b/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_28NM_8960_PHY
deleted file mode 100644
index 5d86a45..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_28NM_8960_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_DSI_28NM_8960_PHY=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_28NM_PHY b/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_28NM_PHY
deleted file mode 100644
index ea1c4f9..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_28NM_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_DSI_28NM_PHY=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_PLL b/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_PLL
deleted file mode 100644
index 16ac280..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_DSI_PLL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_DSI_PLL=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_HDMI_HDCP b/baseconfig/arm/arm64/CONFIG_DRM_MSM_HDMI_HDCP
deleted file mode 100644
index 2adc35b..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_HDMI_HDCP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_MSM_HDMI_HDCP=y
diff --git a/baseconfig/arm/arm64/CONFIG_DRM_MSM_REGISTER_LOGGING b/baseconfig/arm/arm64/CONFIG_DRM_MSM_REGISTER_LOGGING
deleted file mode 100644
index 83c03d9..0000000
--- a/baseconfig/arm/arm64/CONFIG_DRM_MSM_REGISTER_LOGGING
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DRM_MSM_REGISTER_LOGGING is not set
diff --git a/baseconfig/arm/arm64/CONFIG_DVB_B2C2_FLEXCOP_USB b/baseconfig/arm/arm64/CONFIG_DVB_B2C2_FLEXCOP_USB
deleted file mode 100644
index 5f48aff..0000000
--- a/baseconfig/arm/arm64/CONFIG_DVB_B2C2_FLEXCOP_USB
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DVB_B2C2_FLEXCOP_USB is not set
diff --git a/baseconfig/arm/arm64/CONFIG_DWMAC_IPQ806X b/baseconfig/arm/arm64/CONFIG_DWMAC_IPQ806X
deleted file mode 100644
index 49177a6..0000000
--- a/baseconfig/arm/arm64/CONFIG_DWMAC_IPQ806X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DWMAC_IPQ806X=m
diff --git a/baseconfig/arm/arm64/CONFIG_DWMAC_SUN8I b/baseconfig/arm/arm64/CONFIG_DWMAC_SUN8I
deleted file mode 100644
index ce05f93..0000000
--- a/baseconfig/arm/arm64/CONFIG_DWMAC_SUN8I
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DWMAC_SUN8I=m
diff --git a/baseconfig/arm/arm64/CONFIG_DWMAC_SUNXI b/baseconfig/arm/arm64/CONFIG_DWMAC_SUNXI
deleted file mode 100644
index 254fc7d..0000000
--- a/baseconfig/arm/arm64/CONFIG_DWMAC_SUNXI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DWMAC_SUNXI=m
diff --git a/baseconfig/arm/arm64/CONFIG_EDAC_THUNDERX b/baseconfig/arm/arm64/CONFIG_EDAC_THUNDERX
deleted file mode 100644
index dae44bb..0000000
--- a/baseconfig/arm/arm64/CONFIG_EDAC_THUNDERX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_EDAC_THUNDERX=m
diff --git a/baseconfig/arm/arm64/CONFIG_EDAC_XGENE b/baseconfig/arm/arm64/CONFIG_EDAC_XGENE
deleted file mode 100644
index dbadc35..0000000
--- a/baseconfig/arm/arm64/CONFIG_EDAC_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_EDAC_XGENE=m
diff --git a/baseconfig/arm/arm64/CONFIG_EXTCON_AXP288 b/baseconfig/arm/arm64/CONFIG_EXTCON_AXP288
deleted file mode 100644
index 7fadeb5..0000000
--- a/baseconfig/arm/arm64/CONFIG_EXTCON_AXP288
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_EXTCON_AXP288=m
diff --git a/baseconfig/arm/arm64/CONFIG_EXTCON_QCOM_SPMI_MISC b/baseconfig/arm/arm64/CONFIG_EXTCON_QCOM_SPMI_MISC
deleted file mode 100644
index b524879..0000000
--- a/baseconfig/arm/arm64/CONFIG_EXTCON_QCOM_SPMI_MISC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_EXTCON_QCOM_SPMI_MISC=m
diff --git a/baseconfig/arm/arm64/CONFIG_FB_MODE_HELPERS b/baseconfig/arm/arm64/CONFIG_FB_MODE_HELPERS
deleted file mode 100644
index 84f5157..0000000
--- a/baseconfig/arm/arm64/CONFIG_FB_MODE_HELPERS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_FB_MODE_HELPERS=y
diff --git a/baseconfig/arm/arm64/CONFIG_FORCE_MAX_ZONEORDER b/baseconfig/arm/arm64/CONFIG_FORCE_MAX_ZONEORDER
deleted file mode 100644
index 6d42a47..0000000
--- a/baseconfig/arm/arm64/CONFIG_FORCE_MAX_ZONEORDER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_FORCE_MAX_ZONEORDER=13
diff --git a/baseconfig/arm/arm64/CONFIG_FSL_ERRATUM_A008585 b/baseconfig/arm/arm64/CONFIG_FSL_ERRATUM_A008585
deleted file mode 100644
index 8dce0af..0000000
--- a/baseconfig/arm/arm64/CONFIG_FSL_ERRATUM_A008585
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_FSL_ERRATUM_A008585=y
diff --git a/baseconfig/arm/arm64/CONFIG_FSL_MC_BUS b/baseconfig/arm/arm64/CONFIG_FSL_MC_BUS
deleted file mode 100644
index dddc2f1..0000000
--- a/baseconfig/arm/arm64/CONFIG_FSL_MC_BUS
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_FSL_MC_BUS is not set
diff --git a/baseconfig/arm/arm64/CONFIG_FUJITSU_ES b/baseconfig/arm/arm64/CONFIG_FUJITSU_ES
deleted file mode 100644
index 39b50c9..0000000
--- a/baseconfig/arm/arm64/CONFIG_FUJITSU_ES
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_FUJITSU_ES is not set
diff --git a/baseconfig/arm/arm64/CONFIG_GPIO_AXP209 b/baseconfig/arm/arm64/CONFIG_GPIO_AXP209
deleted file mode 100644
index 2365ae7..0000000
--- a/baseconfig/arm/arm64/CONFIG_GPIO_AXP209
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_AXP209=m
diff --git a/baseconfig/arm/arm64/CONFIG_GPIO_MAX77620 b/baseconfig/arm/arm64/CONFIG_GPIO_MAX77620
deleted file mode 100644
index fd5e22a..0000000
--- a/baseconfig/arm/arm64/CONFIG_GPIO_MAX77620
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_MAX77620=m
diff --git a/baseconfig/arm/arm64/CONFIG_GPIO_THUNDERX b/baseconfig/arm/arm64/CONFIG_GPIO_THUNDERX
deleted file mode 100644
index 6895cc0..0000000
--- a/baseconfig/arm/arm64/CONFIG_GPIO_THUNDERX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_THUNDERX=m
diff --git a/baseconfig/arm/arm64/CONFIG_GPIO_XGENE b/baseconfig/arm/arm64/CONFIG_GPIO_XGENE
deleted file mode 100644
index f210ebc..0000000
--- a/baseconfig/arm/arm64/CONFIG_GPIO_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_GPIO_XGENE_SB b/baseconfig/arm/arm64/CONFIG_GPIO_XGENE_SB
deleted file mode 100644
index 01e2940..0000000
--- a/baseconfig/arm/arm64/CONFIG_GPIO_XGENE_SB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_XGENE_SB=m
diff --git a/baseconfig/arm/arm64/CONFIG_GPIO_XLP b/baseconfig/arm/arm64/CONFIG_GPIO_XLP
deleted file mode 100644
index f99cd41..0000000
--- a/baseconfig/arm/arm64/CONFIG_GPIO_XLP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_XLP=m
diff --git a/baseconfig/arm/arm64/CONFIG_HI6220_MBOX b/baseconfig/arm/arm64/CONFIG_HI6220_MBOX
deleted file mode 100644
index 5fd48c6..0000000
--- a/baseconfig/arm/arm64/CONFIG_HI6220_MBOX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HI6220_MBOX=m
diff --git a/baseconfig/arm/arm64/CONFIG_HISILICON_ERRATUM_161010101 b/baseconfig/arm/arm64/CONFIG_HISILICON_ERRATUM_161010101
deleted file mode 100644
index b591425..0000000
--- a/baseconfig/arm/arm64/CONFIG_HISILICON_ERRATUM_161010101
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HISILICON_ERRATUM_161010101=y
diff --git a/baseconfig/arm/arm64/CONFIG_HISILICON_IRQ_MBIGEN b/baseconfig/arm/arm64/CONFIG_HISILICON_IRQ_MBIGEN
deleted file mode 100644
index 5ca6d30..0000000
--- a/baseconfig/arm/arm64/CONFIG_HISILICON_IRQ_MBIGEN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HISILICON_IRQ_MBIGEN=y
diff --git a/baseconfig/arm/arm64/CONFIG_HISI_KIRIN_DW_DSI b/baseconfig/arm/arm64/CONFIG_HISI_KIRIN_DW_DSI
deleted file mode 100644
index cef6096..0000000
--- a/baseconfig/arm/arm64/CONFIG_HISI_KIRIN_DW_DSI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HISI_KIRIN_DW_DSI=m
diff --git a/baseconfig/arm/arm64/CONFIG_HISI_THERMAL b/baseconfig/arm/arm64/CONFIG_HISI_THERMAL
deleted file mode 100644
index 05fc96b..0000000
--- a/baseconfig/arm/arm64/CONFIG_HISI_THERMAL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HISI_THERMAL=m
diff --git a/baseconfig/arm/arm64/CONFIG_HOTPLUG_PCI_SHPC b/baseconfig/arm/arm64/CONFIG_HOTPLUG_PCI_SHPC
deleted file mode 100644
index f03be8a..0000000
--- a/baseconfig/arm/arm64/CONFIG_HOTPLUG_PCI_SHPC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_HOTPLUG_PCI_SHPC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_HVC_DCC b/baseconfig/arm/arm64/CONFIG_HVC_DCC
deleted file mode 100644
index b2e8007..0000000
--- a/baseconfig/arm/arm64/CONFIG_HVC_DCC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_HVC_DCC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_HVC_DRIVER b/baseconfig/arm/arm64/CONFIG_HVC_DRIVER
deleted file mode 100644
index 2b13a0c..0000000
--- a/baseconfig/arm/arm64/CONFIG_HVC_DRIVER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HVC_DRIVER=y
diff --git a/baseconfig/arm/arm64/CONFIG_HWSPINLOCK_QCOM b/baseconfig/arm/arm64/CONFIG_HWSPINLOCK_QCOM
deleted file mode 100644
index 5dfdf85..0000000
--- a/baseconfig/arm/arm64/CONFIG_HWSPINLOCK_QCOM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HWSPINLOCK_QCOM=m
diff --git a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_CAVIUM b/baseconfig/arm/arm64/CONFIG_HW_RANDOM_CAVIUM
deleted file mode 100644
index e3bec97..0000000
--- a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_CAVIUM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_CAVIUM=m
diff --git a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_HISI b/baseconfig/arm/arm64/CONFIG_HW_RANDOM_HISI
deleted file mode 100644
index 3f6b707..0000000
--- a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_HISI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_HISI=m
diff --git a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_MSM b/baseconfig/arm/arm64/CONFIG_HW_RANDOM_MSM
deleted file mode 100644
index b95d5cb..0000000
--- a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_MSM=m
diff --git a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_OMAP b/baseconfig/arm/arm64/CONFIG_HW_RANDOM_OMAP
deleted file mode 100644
index cf37a6e..0000000
--- a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_OMAP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_OMAP=m
diff --git a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_XGENE b/baseconfig/arm/arm64/CONFIG_HW_RANDOM_XGENE
deleted file mode 100644
index 85af60d..0000000
--- a/baseconfig/arm/arm64/CONFIG_HW_RANDOM_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HW_RANDOM_XGENE=m
diff --git a/baseconfig/arm/arm64/CONFIG_HZ b/baseconfig/arm/arm64/CONFIG_HZ
deleted file mode 100644
index bfc405e..0000000
--- a/baseconfig/arm/arm64/CONFIG_HZ
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HZ=100
diff --git a/baseconfig/arm/arm64/CONFIG_HZ_100 b/baseconfig/arm/arm64/CONFIG_HZ_100
deleted file mode 100644
index 11bd2af..0000000
--- a/baseconfig/arm/arm64/CONFIG_HZ_100
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_HZ_100=y
diff --git a/baseconfig/arm/arm64/CONFIG_HZ_1000 b/baseconfig/arm/arm64/CONFIG_HZ_1000
deleted file mode 100644
index c211724..0000000
--- a/baseconfig/arm/arm64/CONFIG_HZ_1000
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_HZ_1000 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_I2C_HIX5HD2 b/baseconfig/arm/arm64/CONFIG_I2C_HIX5HD2
deleted file mode 100644
index 7b16fe2..0000000
--- a/baseconfig/arm/arm64/CONFIG_I2C_HIX5HD2
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_I2C_HIX5HD2 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_I2C_QUP b/baseconfig/arm/arm64/CONFIG_I2C_QUP
deleted file mode 100644
index 7fb7cd3..0000000
--- a/baseconfig/arm/arm64/CONFIG_I2C_QUP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_I2C_QUP=m
diff --git a/baseconfig/arm/arm64/CONFIG_I2C_SCMI b/baseconfig/arm/arm64/CONFIG_I2C_SCMI
deleted file mode 100644
index 6e60bd4..0000000
--- a/baseconfig/arm/arm64/CONFIG_I2C_SCMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_I2C_SCMI=m
diff --git a/baseconfig/arm/arm64/CONFIG_I2C_THUNDERX b/baseconfig/arm/arm64/CONFIG_I2C_THUNDERX
deleted file mode 100644
index c544a8c..0000000
--- a/baseconfig/arm/arm64/CONFIG_I2C_THUNDERX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_I2C_THUNDERX=m
diff --git a/baseconfig/arm/arm64/CONFIG_I2C_XGENE_SLIMPRO b/baseconfig/arm/arm64/CONFIG_I2C_XGENE_SLIMPRO
deleted file mode 100644
index 44af582..0000000
--- a/baseconfig/arm/arm64/CONFIG_I2C_XGENE_SLIMPRO
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_I2C_XGENE_SLIMPRO=m
diff --git a/baseconfig/arm/arm64/CONFIG_I2C_XLP9XX b/baseconfig/arm/arm64/CONFIG_I2C_XLP9XX
deleted file mode 100644
index bcc41c3..0000000
--- a/baseconfig/arm/arm64/CONFIG_I2C_XLP9XX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_I2C_XLP9XX=m
diff --git a/baseconfig/arm/arm64/CONFIG_INPUT_AXP20X_PEK b/baseconfig/arm/arm64/CONFIG_INPUT_AXP20X_PEK
deleted file mode 100644
index e2fbdf9..0000000
--- a/baseconfig/arm/arm64/CONFIG_INPUT_AXP20X_PEK
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_INPUT_AXP20X_PEK=m
diff --git a/baseconfig/arm/arm64/CONFIG_INPUT_HISI_POWERKEY b/baseconfig/arm/arm64/CONFIG_INPUT_HISI_POWERKEY
deleted file mode 100644
index bd59856..0000000
--- a/baseconfig/arm/arm64/CONFIG_INPUT_HISI_POWERKEY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_INPUT_HISI_POWERKEY=m
diff --git a/baseconfig/arm/arm64/CONFIG_INPUT_PM8941_PWRKEY b/baseconfig/arm/arm64/CONFIG_INPUT_PM8941_PWRKEY
deleted file mode 100644
index 24fb62b..0000000
--- a/baseconfig/arm/arm64/CONFIG_INPUT_PM8941_PWRKEY
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_INPUT_PM8941_PWRKEY is not set
diff --git a/baseconfig/arm/arm64/CONFIG_INPUT_REGULATOR_HAPTIC b/baseconfig/arm/arm64/CONFIG_INPUT_REGULATOR_HAPTIC
deleted file mode 100644
index 4230eab..0000000
--- a/baseconfig/arm/arm64/CONFIG_INPUT_REGULATOR_HAPTIC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_INPUT_REGULATOR_HAPTIC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_IR_SUNXI b/baseconfig/arm/arm64/CONFIG_IR_SUNXI
deleted file mode 100644
index fe2dc68..0000000
--- a/baseconfig/arm/arm64/CONFIG_IR_SUNXI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_IR_SUNXI=m
diff --git a/baseconfig/arm/arm64/CONFIG_K3_DMA b/baseconfig/arm/arm64/CONFIG_K3_DMA
deleted file mode 100644
index c64ec40..0000000
--- a/baseconfig/arm/arm64/CONFIG_K3_DMA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_K3_DMA=m
diff --git a/baseconfig/arm/arm64/CONFIG_KEYBOARD_SUN4I_LRADC b/baseconfig/arm/arm64/CONFIG_KEYBOARD_SUN4I_LRADC
deleted file mode 100644
index 8fcbd86..0000000
--- a/baseconfig/arm/arm64/CONFIG_KEYBOARD_SUN4I_LRADC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_KEYBOARD_SUN4I_LRADC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_KVM b/baseconfig/arm/arm64/CONFIG_KVM
deleted file mode 100644
index 14f90d8..0000000
--- a/baseconfig/arm/arm64/CONFIG_KVM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_KVM=y
diff --git a/baseconfig/arm/arm64/CONFIG_LIBNVDIMM b/baseconfig/arm/arm64/CONFIG_LIBNVDIMM
deleted file mode 100644
index aeaaefe..0000000
--- a/baseconfig/arm/arm64/CONFIG_LIBNVDIMM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_LIBNVDIMM=m
diff --git a/baseconfig/arm/arm64/CONFIG_LIQUIDIO b/baseconfig/arm/arm64/CONFIG_LIQUIDIO
deleted file mode 100644
index 7535662..0000000
--- a/baseconfig/arm/arm64/CONFIG_LIQUIDIO
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_LIQUIDIO is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MAX77620_THERMAL b/baseconfig/arm/arm64/CONFIG_MAX77620_THERMAL
deleted file mode 100644
index d334d3f..0000000
--- a/baseconfig/arm/arm64/CONFIG_MAX77620_THERMAL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MAX77620_THERMAL=m
diff --git a/baseconfig/arm/arm64/CONFIG_MAX77620_WATCHDOG b/baseconfig/arm/arm64/CONFIG_MAX77620_WATCHDOG
deleted file mode 100644
index f998244..0000000
--- a/baseconfig/arm/arm64/CONFIG_MAX77620_WATCHDOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MAX77620_WATCHDOG=m
diff --git a/baseconfig/arm/arm64/CONFIG_MDIO_HISI_FEMAC b/baseconfig/arm/arm64/CONFIG_MDIO_HISI_FEMAC
deleted file mode 100644
index 6e4c16c..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDIO_HISI_FEMAC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MDIO_HISI_FEMAC=m
diff --git a/baseconfig/arm/arm64/CONFIG_MDIO_OCTEON b/baseconfig/arm/arm64/CONFIG_MDIO_OCTEON
deleted file mode 100644
index e14c4b0..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDIO_OCTEON
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MDIO_OCTEON is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MDIO_SUN4I b/baseconfig/arm/arm64/CONFIG_MDIO_SUN4I
deleted file mode 100644
index 5bf1478..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDIO_SUN4I
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MDIO_SUN4I is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MDIO_THUNDER b/baseconfig/arm/arm64/CONFIG_MDIO_THUNDER
deleted file mode 100644
index 00eb9a6..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDIO_THUNDER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MDIO_THUNDER=m
diff --git a/baseconfig/arm/arm64/CONFIG_MDIO_XGENE b/baseconfig/arm/arm64/CONFIG_MDIO_XGENE
deleted file mode 100644
index 8a6b53a..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDIO_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MDIO_XGENE=m
diff --git a/baseconfig/arm/arm64/CONFIG_MDM_GCC_9615 b/baseconfig/arm/arm64/CONFIG_MDM_GCC_9615
deleted file mode 100644
index 4d972af..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDM_GCC_9615
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MDM_GCC_9615 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MDM_LCC_9615 b/baseconfig/arm/arm64/CONFIG_MDM_LCC_9615
deleted file mode 100644
index 72f159f..0000000
--- a/baseconfig/arm/arm64/CONFIG_MDM_LCC_9615
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MDM_LCC_9615 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MESON_GXBB_WATCHDOG b/baseconfig/arm/arm64/CONFIG_MESON_GXBB_WATCHDOG
deleted file mode 100644
index a9c8de7..0000000
--- a/baseconfig/arm/arm64/CONFIG_MESON_GXBB_WATCHDOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MESON_GXBB_WATCHDOG=m
diff --git a/baseconfig/arm/arm64/CONFIG_MESON_GXL_PHY b/baseconfig/arm/arm64/CONFIG_MESON_GXL_PHY
deleted file mode 100644
index cc59580..0000000
--- a/baseconfig/arm/arm64/CONFIG_MESON_GXL_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MESON_GXL_PHY=m
diff --git a/baseconfig/arm/arm64/CONFIG_MESON_WATCHDOG b/baseconfig/arm/arm64/CONFIG_MESON_WATCHDOG
deleted file mode 100644
index 2e5c153..0000000
--- a/baseconfig/arm/arm64/CONFIG_MESON_WATCHDOG
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MESON_WATCHDOG is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_AXP20X b/baseconfig/arm/arm64/CONFIG_MFD_AXP20X
deleted file mode 100644
index ada79c0..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_AXP20X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_AXP20X=y
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_AXP20X_I2C b/baseconfig/arm/arm64/CONFIG_MFD_AXP20X_I2C
deleted file mode 100644
index 22c6029..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_AXP20X_I2C
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_AXP20X_I2C=y
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_AXP20X_RSB b/baseconfig/arm/arm64/CONFIG_MFD_AXP20X_RSB
deleted file mode 100644
index 29150d5..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_AXP20X_RSB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_AXP20X_RSB=m
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_HI655X_PMIC b/baseconfig/arm/arm64/CONFIG_MFD_HI655X_PMIC
deleted file mode 100644
index 650829c..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_HI655X_PMIC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_HI655X_PMIC=m
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_MAX77620 b/baseconfig/arm/arm64/CONFIG_MFD_MAX77620
deleted file mode 100644
index be2ba08..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_MAX77620
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_MAX77620=y
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_QCOM_RPM b/baseconfig/arm/arm64/CONFIG_MFD_QCOM_RPM
deleted file mode 100644
index d88a4c4..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_QCOM_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_QCOM_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_SPMI_PMIC b/baseconfig/arm/arm64/CONFIG_MFD_SPMI_PMIC
deleted file mode 100644
index 6360fee..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_SPMI_PMIC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_SPMI_PMIC=m
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_SUN4I_GPADC b/baseconfig/arm/arm64/CONFIG_MFD_SUN4I_GPADC
deleted file mode 100644
index d156cb1..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_SUN4I_GPADC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_SUN4I_GPADC=m
diff --git a/baseconfig/arm/arm64/CONFIG_MFD_SUN6I_PRCM b/baseconfig/arm/arm64/CONFIG_MFD_SUN6I_PRCM
deleted file mode 100644
index 1784bb2..0000000
--- a/baseconfig/arm/arm64/CONFIG_MFD_SUN6I_PRCM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MFD_SUN6I_PRCM=y
diff --git a/baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX b/baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX
deleted file mode 100644
index 8c4640a..0000000
--- a/baseconfig/arm/arm64/CONFIG_MMC_CAVIUM_THUNDERX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MMC_CAVIUM_THUNDERX=m
diff --git a/baseconfig/arm/arm64/CONFIG_MMC_MESON_GX b/baseconfig/arm/arm64/CONFIG_MMC_MESON_GX
deleted file mode 100644
index f6d0598..0000000
--- a/baseconfig/arm/arm64/CONFIG_MMC_MESON_GX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MMC_MESON_GX=m
diff --git a/baseconfig/arm/arm64/CONFIG_MMC_QCOM_DML b/baseconfig/arm/arm64/CONFIG_MMC_QCOM_DML
deleted file mode 100644
index 48facf3..0000000
--- a/baseconfig/arm/arm64/CONFIG_MMC_QCOM_DML
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MMC_QCOM_DML=y
diff --git a/baseconfig/arm/arm64/CONFIG_MMC_SDHCI_MSM b/baseconfig/arm/arm64/CONFIG_MMC_SDHCI_MSM
deleted file mode 100644
index 512d452..0000000
--- a/baseconfig/arm/arm64/CONFIG_MMC_SDHCI_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MMC_SDHCI_MSM=m
diff --git a/baseconfig/arm/arm64/CONFIG_MMC_SUNXI b/baseconfig/arm/arm64/CONFIG_MMC_SUNXI
deleted file mode 100644
index 0f6eda3..0000000
--- a/baseconfig/arm/arm64/CONFIG_MMC_SUNXI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MMC_SUNXI=m
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8660 b/baseconfig/arm/arm64/CONFIG_MSM_GCC_8660
deleted file mode 100644
index 9effe86..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8660
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_GCC_8660=y
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8916 b/baseconfig/arm/arm64/CONFIG_MSM_GCC_8916
deleted file mode 100644
index 87cf3fd..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8916
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_GCC_8916=y
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8960 b/baseconfig/arm/arm64/CONFIG_MSM_GCC_8960
deleted file mode 100644
index 03ba44b..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8960
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_GCC_8960=y
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8974 b/baseconfig/arm/arm64/CONFIG_MSM_GCC_8974
deleted file mode 100644
index 8ffbd80..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8974
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_GCC_8974=y
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8996 b/baseconfig/arm/arm64/CONFIG_MSM_GCC_8996
deleted file mode 100644
index 4b01d31..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_GCC_8996
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_GCC_8996=y
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_LCC_8960 b/baseconfig/arm/arm64/CONFIG_MSM_LCC_8960
deleted file mode 100644
index 6965544..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_LCC_8960
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MSM_LCC_8960 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8960 b/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8960
deleted file mode 100644
index c2ccb99..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8960
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_MMCC_8960=m
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8974 b/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8974
deleted file mode 100644
index 04b9f75..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8974
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_MMCC_8974=m
diff --git a/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8996 b/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8996
deleted file mode 100644
index e40293a..0000000
--- a/baseconfig/arm/arm64/CONFIG_MSM_MMCC_8996
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_MSM_MMCC_8996=m
diff --git a/baseconfig/arm/arm64/CONFIG_MV_XOR_V2 b/baseconfig/arm/arm64/CONFIG_MV_XOR_V2
deleted file mode 100644
index a6e590e..0000000
--- a/baseconfig/arm/arm64/CONFIG_MV_XOR_V2
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_MV_XOR_V2 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_ND_BLK b/baseconfig/arm/arm64/CONFIG_ND_BLK
deleted file mode 100644
index 8a6c237..0000000
--- a/baseconfig/arm/arm64/CONFIG_ND_BLK
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ND_BLK=m
diff --git a/baseconfig/arm/arm64/CONFIG_ND_BTT b/baseconfig/arm/arm64/CONFIG_ND_BTT
deleted file mode 100644
index d4e20e2..0000000
--- a/baseconfig/arm/arm64/CONFIG_ND_BTT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_ND_BTT=m
diff --git a/baseconfig/arm/arm64/CONFIG_NET_SB1000 b/baseconfig/arm/arm64/CONFIG_NET_SB1000
deleted file mode 100644
index 53ead8c..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_SB1000
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_SB1000=y
diff --git a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_ALLWINNER b/baseconfig/arm/arm64/CONFIG_NET_VENDOR_ALLWINNER
deleted file mode 100644
index 2ff4507..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_ALLWINNER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_VENDOR_ALLWINNER=y
diff --git a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_CAVIUM b/baseconfig/arm/arm64/CONFIG_NET_VENDOR_CAVIUM
deleted file mode 100644
index 5ae5805..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_CAVIUM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_VENDOR_CAVIUM=y
diff --git a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_QUALCOMM b/baseconfig/arm/arm64/CONFIG_NET_VENDOR_QUALCOMM
deleted file mode 100644
index 46be71a..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_QUALCOMM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_VENDOR_QUALCOMM=y
diff --git a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_SNI b/baseconfig/arm/arm64/CONFIG_NET_VENDOR_SNI
deleted file mode 100644
index bb77206..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_VENDOR_SNI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_VENDOR_SNI=y
diff --git a/baseconfig/arm/arm64/CONFIG_NET_XGENE b/baseconfig/arm/arm64/CONFIG_NET_XGENE
deleted file mode 100644
index 57527a6..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_XGENE=m
diff --git a/baseconfig/arm/arm64/CONFIG_NET_XGENE_V2 b/baseconfig/arm/arm64/CONFIG_NET_XGENE_V2
deleted file mode 100644
index 7d5cbcd..0000000
--- a/baseconfig/arm/arm64/CONFIG_NET_XGENE_V2
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NET_XGENE_V2=m
diff --git a/baseconfig/arm/arm64/CONFIG_NODES_SHIFT b/baseconfig/arm/arm64/CONFIG_NODES_SHIFT
deleted file mode 100644
index 7647492..0000000
--- a/baseconfig/arm/arm64/CONFIG_NODES_SHIFT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NODES_SHIFT=9
diff --git a/baseconfig/arm/arm64/CONFIG_NR_CPUS b/baseconfig/arm/arm64/CONFIG_NR_CPUS
deleted file mode 100644
index 0c4b1d9..0000000
--- a/baseconfig/arm/arm64/CONFIG_NR_CPUS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NR_CPUS=256
diff --git a/baseconfig/arm/arm64/CONFIG_NUMA b/baseconfig/arm/arm64/CONFIG_NUMA
deleted file mode 100644
index e480f0c..0000000
--- a/baseconfig/arm/arm64/CONFIG_NUMA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NUMA=y
diff --git a/baseconfig/arm/arm64/CONFIG_NUMA_BALANCING b/baseconfig/arm/arm64/CONFIG_NUMA_BALANCING
deleted file mode 100644
index 9de89d5..0000000
--- a/baseconfig/arm/arm64/CONFIG_NUMA_BALANCING
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NUMA_BALANCING=y
diff --git a/baseconfig/arm/arm64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED b/baseconfig/arm/arm64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED
deleted file mode 100644
index 5f74021..0000000
--- a/baseconfig/arm/arm64/CONFIG_NUMA_BALANCING_DEFAULT_ENABLED
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
diff --git a/baseconfig/arm/arm64/CONFIG_NVMEM_SUNXI_SID b/baseconfig/arm/arm64/CONFIG_NVMEM_SUNXI_SID
deleted file mode 100644
index 454644a..0000000
--- a/baseconfig/arm/arm64/CONFIG_NVMEM_SUNXI_SID
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_NVMEM_SUNXI_SID=m
diff --git a/baseconfig/arm/arm64/CONFIG_PATA_ACPI b/baseconfig/arm/arm64/CONFIG_PATA_ACPI
deleted file mode 100644
index c3bc786..0000000
--- a/baseconfig/arm/arm64/CONFIG_PATA_ACPI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PATA_ACPI=m
diff --git a/baseconfig/arm/arm64/CONFIG_PCC b/baseconfig/arm/arm64/CONFIG_PCC
deleted file mode 100644
index 36eb8c2..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCC=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCIE_DW_HOST_ECAM b/baseconfig/arm/arm64/CONFIG_PCIE_DW_HOST_ECAM
deleted file mode 100644
index cdb6169..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCIE_DW_HOST_ECAM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCIE_DW_HOST_ECAM=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCIE_KIRIN b/baseconfig/arm/arm64/CONFIG_PCIE_KIRIN
deleted file mode 100644
index be6e297..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCIE_KIRIN
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCIE_KIRIN=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCIE_QCOM b/baseconfig/arm/arm64/CONFIG_PCIE_QCOM
deleted file mode 100644
index 61886f1..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCIE_QCOM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCIE_QCOM=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCI_HISI b/baseconfig/arm/arm64/CONFIG_PCI_HISI
deleted file mode 100644
index 468f3e4..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCI_HISI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCI_HISI=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_ECAM b/baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_ECAM
deleted file mode 100644
index a812c31..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_ECAM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCI_HOST_THUNDER_ECAM=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_PEM b/baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_PEM
deleted file mode 100644
index 6c45e09..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCI_HOST_THUNDER_PEM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCI_HOST_THUNDER_PEM=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCI_XGENE b/baseconfig/arm/arm64/CONFIG_PCI_XGENE
deleted file mode 100644
index 8531730..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCI_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCI_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_PCI_XGENE_MSI b/baseconfig/arm/arm64/CONFIG_PCI_XGENE_MSI
deleted file mode 100644
index ce07c62..0000000
--- a/baseconfig/arm/arm64/CONFIG_PCI_XGENE_MSI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PCI_XGENE_MSI=y
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_HI6220_USB b/baseconfig/arm/arm64/CONFIG_PHY_HI6220_USB
deleted file mode 100644
index 462bb7c..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_HI6220_USB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_HI6220_USB=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_MVEBU_CP110_COMPHY b/baseconfig/arm/arm64/CONFIG_PHY_MVEBU_CP110_COMPHY
deleted file mode 100644
index 1902b0c..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_MVEBU_CP110_COMPHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_MVEBU_CP110_COMPHY=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_APQ8064_SATA b/baseconfig/arm/arm64/CONFIG_PHY_QCOM_APQ8064_SATA
deleted file mode 100644
index bb25b46..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_APQ8064_SATA
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PHY_QCOM_APQ8064_SATA is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_QMP b/baseconfig/arm/arm64/CONFIG_PHY_QCOM_QMP
deleted file mode 100644
index cba57fa..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_QMP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_QCOM_QMP=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_QUSB2 b/baseconfig/arm/arm64/CONFIG_PHY_QCOM_QUSB2
deleted file mode 100644
index 6512e59..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_QUSB2
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_QCOM_QUSB2=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_UFS b/baseconfig/arm/arm64/CONFIG_PHY_QCOM_UFS
deleted file mode 100644
index 50ac1d8..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_UFS
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PHY_QCOM_UFS is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_USB_HS b/baseconfig/arm/arm64/CONFIG_PHY_QCOM_USB_HS
deleted file mode 100644
index 61e98f8..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_USB_HS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_QCOM_USB_HS=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_USB_HSIC b/baseconfig/arm/arm64/CONFIG_PHY_QCOM_USB_HSIC
deleted file mode 100644
index 0b25aa2..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_QCOM_USB_HSIC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_QCOM_USB_HSIC=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_SUN4I_USB b/baseconfig/arm/arm64/CONFIG_PHY_SUN4I_USB
deleted file mode 100644
index f619228..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_SUN4I_USB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_SUN4I_USB=m
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_SUN9I_USB b/baseconfig/arm/arm64/CONFIG_PHY_SUN9I_USB
deleted file mode 100644
index 98d0025..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_SUN9I_USB
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PHY_SUN9I_USB is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PHY_XGENE b/baseconfig/arm/arm64/CONFIG_PHY_XGENE
deleted file mode 100644
index 8d9f368..0000000
--- a/baseconfig/arm/arm64/CONFIG_PHY_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PHY_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_AMD b/baseconfig/arm/arm64/CONFIG_PINCTRL_AMD
deleted file mode 100644
index 41cff13..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_AMD
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_AMD=y
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8064 b/baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8064
deleted file mode 100644
index 0c95df8..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8064
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_APQ8064 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8084 b/baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8084
deleted file mode 100644
index dc701bb..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_APQ8084
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_APQ8084 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MAX77620 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MAX77620
deleted file mode 100644
index 3b44d69..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MAX77620
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_MAX77620=m
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MDM9615 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MDM9615
deleted file mode 100644
index aa3be10..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MDM9615
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_MDM9615 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM b/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM
deleted file mode 100644
index b042dc9..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_MSM=y
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8660 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8660
deleted file mode 100644
index 905c9f4..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8660
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_MSM8660 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8916 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8916
deleted file mode 100644
index a7a8bd9..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8916
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_MSM8916=y
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8960 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8960
deleted file mode 100644
index 167d899..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8960
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_MSM8960 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8996 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8996
deleted file mode 100644
index 805a439..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8996
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_MSM8996=y
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8X74 b/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8X74
deleted file mode 100644
index 2d68ec7..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_MSM8X74
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_MSM8X74 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SPMI_PMIC b/baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SPMI_PMIC
deleted file mode 100644
index d24825e..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SPMI_PMIC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_QCOM_SPMI_PMIC=y
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SSBI_PMIC b/baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SSBI_PMIC
deleted file mode 100644
index bc00fae..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_QCOM_SSBI_PMIC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PINCTRL_QDF2XXX b/baseconfig/arm/arm64/CONFIG_PINCTRL_QDF2XXX
deleted file mode 100644
index e8dca82..0000000
--- a/baseconfig/arm/arm64/CONFIG_PINCTRL_QDF2XXX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PINCTRL_QDF2XXX=y
diff --git a/baseconfig/arm/arm64/CONFIG_PMIC_OPREGION b/baseconfig/arm/arm64/CONFIG_PMIC_OPREGION
deleted file mode 100644
index 15102fe..0000000
--- a/baseconfig/arm/arm64/CONFIG_PMIC_OPREGION
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PMIC_OPREGION is not set
diff --git a/baseconfig/arm/arm64/CONFIG_PNP_DEBUG_MESSAGES b/baseconfig/arm/arm64/CONFIG_PNP_DEBUG_MESSAGES
deleted file mode 100644
index cb59188..0000000
--- a/baseconfig/arm/arm64/CONFIG_PNP_DEBUG_MESSAGES
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_PNP_DEBUG_MESSAGES is not set
diff --git a/baseconfig/arm/arm64/CONFIG_POWER_RESET_HISI b/baseconfig/arm/arm64/CONFIG_POWER_RESET_HISI
deleted file mode 100644
index c5516db..0000000
--- a/baseconfig/arm/arm64/CONFIG_POWER_RESET_HISI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_POWER_RESET_HISI=y
diff --git a/baseconfig/arm/arm64/CONFIG_POWER_RESET_MSM b/baseconfig/arm/arm64/CONFIG_POWER_RESET_MSM
deleted file mode 100644
index a7db0a2..0000000
--- a/baseconfig/arm/arm64/CONFIG_POWER_RESET_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_POWER_RESET_MSM=y
diff --git a/baseconfig/arm/arm64/CONFIG_POWER_RESET_XGENE b/baseconfig/arm/arm64/CONFIG_POWER_RESET_XGENE
deleted file mode 100644
index 4e363c2..0000000
--- a/baseconfig/arm/arm64/CONFIG_POWER_RESET_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_POWER_RESET_XGENE=y
diff --git a/baseconfig/arm/arm64/CONFIG_PWM_SUN4I b/baseconfig/arm/arm64/CONFIG_PWM_SUN4I
deleted file mode 100644
index d4f562f..0000000
--- a/baseconfig/arm/arm64/CONFIG_PWM_SUN4I
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_PWM_SUN4I=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_ADSP_PIL b/baseconfig/arm/arm64/CONFIG_QCOM_ADSP_PIL
deleted file mode 100644
index 0aa2581..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_ADSP_PIL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_ADSP_PIL=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_APCS_IPC b/baseconfig/arm/arm64/CONFIG_QCOM_APCS_IPC
deleted file mode 100644
index f8a0514..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_APCS_IPC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_APCS_IPC=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_BAM_DMA b/baseconfig/arm/arm64/CONFIG_QCOM_BAM_DMA
deleted file mode 100644
index 84fb1a9..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_BAM_DMA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_BAM_DMA=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_CLK_RPM b/baseconfig/arm/arm64/CONFIG_QCOM_CLK_RPM
deleted file mode 100644
index 5650c86..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_CLK_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_CLK_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_CLK_SMD_RPM b/baseconfig/arm/arm64/CONFIG_QCOM_CLK_SMD_RPM
deleted file mode 100644
index d355533..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_CLK_SMD_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_CLK_SMD_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_COINCELL b/baseconfig/arm/arm64/CONFIG_QCOM_COINCELL
deleted file mode 100644
index 6b43aa0..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_COINCELL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_COINCELL=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_EBI2 b/baseconfig/arm/arm64/CONFIG_QCOM_EBI2
deleted file mode 100644
index e96b354..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_EBI2
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_QCOM_EBI2 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_EMAC b/baseconfig/arm/arm64/CONFIG_QCOM_EMAC
deleted file mode 100644
index 4e3fa01..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_EMAC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_EMAC=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_FALKOR_ERRATUM_1003 b/baseconfig/arm/arm64/CONFIG_QCOM_FALKOR_ERRATUM_1003
deleted file mode 100644
index 94d6b17..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_FALKOR_ERRATUM_1003
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_FALKOR_ERRATUM_1009 b/baseconfig/arm/arm64/CONFIG_QCOM_FALKOR_ERRATUM_1009
deleted file mode 100644
index 1449efa..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_FALKOR_ERRATUM_1009
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_FALKOR_ERRATUM_1009=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_GSBI b/baseconfig/arm/arm64/CONFIG_QCOM_GSBI
deleted file mode 100644
index 2711cb7..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_GSBI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_GSBI=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_HIDMA b/baseconfig/arm/arm64/CONFIG_QCOM_HIDMA
deleted file mode 100644
index a544295..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_HIDMA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_HIDMA=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_HIDMA_MGMT b/baseconfig/arm/arm64/CONFIG_QCOM_HIDMA_MGMT
deleted file mode 100644
index 8085b2a..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_HIDMA_MGMT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_HIDMA_MGMT=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_IOMMU b/baseconfig/arm/arm64/CONFIG_QCOM_IOMMU
deleted file mode 100644
index b7e99b8..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_IOMMU
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_IOMMU=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_IRQ_COMBINER b/baseconfig/arm/arm64/CONFIG_QCOM_IRQ_COMBINER
deleted file mode 100644
index 6c23d15..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_IRQ_COMBINER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_IRQ_COMBINER=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_L2_PMU b/baseconfig/arm/arm64/CONFIG_QCOM_L2_PMU
deleted file mode 100644
index 2a553c8..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_L2_PMU
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_L2_PMU=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_L3_PMU b/baseconfig/arm/arm64/CONFIG_QCOM_L3_PMU
deleted file mode 100644
index ed899d6..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_L3_PMU
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_L3_PMU=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_Q6V5_PIL b/baseconfig/arm/arm64/CONFIG_QCOM_Q6V5_PIL
deleted file mode 100644
index 18d8fb7..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_Q6V5_PIL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_Q6V5_PIL=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_QDF2400_ERRATUM_0065 b/baseconfig/arm/arm64/CONFIG_QCOM_QDF2400_ERRATUM_0065
deleted file mode 100644
index dec9be9..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_QDF2400_ERRATUM_0065
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_QDF2400_ERRATUM_0065=y
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_QFPROM b/baseconfig/arm/arm64/CONFIG_QCOM_QFPROM
deleted file mode 100644
index 9df0fc6..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_QFPROM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_QFPROM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SMD_RPM b/baseconfig/arm/arm64/CONFIG_QCOM_SMD_RPM
deleted file mode 100644
index 4610581..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SMD_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SMD_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SMEM b/baseconfig/arm/arm64/CONFIG_QCOM_SMEM
deleted file mode 100644
index f91ef8c..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SMEM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SMEM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SMP2P b/baseconfig/arm/arm64/CONFIG_QCOM_SMP2P
deleted file mode 100644
index 5fa221f..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SMP2P
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SMP2P=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SMSM b/baseconfig/arm/arm64/CONFIG_QCOM_SMSM
deleted file mode 100644
index 210a649..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SMSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SMSM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_IADC b/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_IADC
deleted file mode 100644
index d8601ce..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_IADC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SPMI_IADC=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_TEMP_ALARM b/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_TEMP_ALARM
deleted file mode 100644
index 7155372..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_TEMP_ALARM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SPMI_TEMP_ALARM=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_VADC b/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_VADC
deleted file mode 100644
index fcc1196..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_SPMI_VADC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_SPMI_VADC=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_TSENS b/baseconfig/arm/arm64/CONFIG_QCOM_TSENS
deleted file mode 100644
index 0d43fc9..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_TSENS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_TSENS=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_CTRL b/baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_CTRL
deleted file mode 100644
index e5469ca..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_CTRL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_WCNSS_CTRL=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_PIL b/baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_PIL
deleted file mode 100644
index b13cefb..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_WCNSS_PIL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_WCNSS_PIL=m
diff --git a/baseconfig/arm/arm64/CONFIG_QCOM_WDT b/baseconfig/arm/arm64/CONFIG_QCOM_WDT
deleted file mode 100644
index e4c7f9d..0000000
--- a/baseconfig/arm/arm64/CONFIG_QCOM_WDT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_QCOM_WDT=m
diff --git a/baseconfig/arm/arm64/CONFIG_RANDOMIZE_BASE b/baseconfig/arm/arm64/CONFIG_RANDOMIZE_BASE
deleted file mode 100644
index 20610a9..0000000
--- a/baseconfig/arm/arm64/CONFIG_RANDOMIZE_BASE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RANDOMIZE_BASE=y
diff --git a/baseconfig/arm/arm64/CONFIG_RANDOMIZE_MODULE_REGION_FULL b/baseconfig/arm/arm64/CONFIG_RANDOMIZE_MODULE_REGION_FULL
deleted file mode 100644
index 7645a37..0000000
--- a/baseconfig/arm/arm64/CONFIG_RANDOMIZE_MODULE_REGION_FULL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RANDOMIZE_MODULE_REGION_FULL=y
diff --git a/baseconfig/arm/arm64/CONFIG_RCU_FANOUT b/baseconfig/arm/arm64/CONFIG_RCU_FANOUT
deleted file mode 100644
index e95447c..0000000
--- a/baseconfig/arm/arm64/CONFIG_RCU_FANOUT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RCU_FANOUT=64
diff --git a/baseconfig/arm/arm64/CONFIG_REGMAP_SPMI b/baseconfig/arm/arm64/CONFIG_REGMAP_SPMI
deleted file mode 100644
index eba374b..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGMAP_SPMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGMAP_SPMI=y
diff --git a/baseconfig/arm/arm64/CONFIG_REGULATOR_AXP20X b/baseconfig/arm/arm64/CONFIG_REGULATOR_AXP20X
deleted file mode 100644
index 6694810..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGULATOR_AXP20X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGULATOR_AXP20X=m
diff --git a/baseconfig/arm/arm64/CONFIG_REGULATOR_HI655X b/baseconfig/arm/arm64/CONFIG_REGULATOR_HI655X
deleted file mode 100644
index c267fff..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGULATOR_HI655X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGULATOR_HI655X=m
diff --git a/baseconfig/arm/arm64/CONFIG_REGULATOR_MAX77620 b/baseconfig/arm/arm64/CONFIG_REGULATOR_MAX77620
deleted file mode 100644
index db01583..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGULATOR_MAX77620
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGULATOR_MAX77620=m
diff --git a/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_RPM b/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_RPM
deleted file mode 100644
index 3d002ca..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGULATOR_QCOM_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SMD_RPM b/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SMD_RPM
deleted file mode 100644
index aae961c..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SMD_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGULATOR_QCOM_SMD_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SPMI b/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SPMI
deleted file mode 100644
index c83be7a..0000000
--- a/baseconfig/arm/arm64/CONFIG_REGULATOR_QCOM_SPMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_REGULATOR_QCOM_SPMI=m
diff --git a/baseconfig/arm/arm64/CONFIG_RELOCATABLE b/baseconfig/arm/arm64/CONFIG_RELOCATABLE
deleted file mode 100644
index 36808ed..0000000
--- a/baseconfig/arm/arm64/CONFIG_RELOCATABLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RELOCATABLE=y
diff --git a/baseconfig/arm/arm64/CONFIG_RESET_HISI b/baseconfig/arm/arm64/CONFIG_RESET_HISI
deleted file mode 100644
index af17d8a..0000000
--- a/baseconfig/arm/arm64/CONFIG_RESET_HISI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RESET_HISI=y
diff --git a/baseconfig/arm/arm64/CONFIG_RPMSG b/baseconfig/arm/arm64/CONFIG_RPMSG
deleted file mode 100644
index 7cc8785..0000000
--- a/baseconfig/arm/arm64/CONFIG_RPMSG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RPMSG=m
diff --git a/baseconfig/arm/arm64/CONFIG_RPMSG_QCOM_GLINK_RPM b/baseconfig/arm/arm64/CONFIG_RPMSG_QCOM_GLINK_RPM
deleted file mode 100644
index 1f5ac58..0000000
--- a/baseconfig/arm/arm64/CONFIG_RPMSG_QCOM_GLINK_RPM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RPMSG_QCOM_GLINK_RPM=m
diff --git a/baseconfig/arm/arm64/CONFIG_RPMSG_QCOM_SMD b/baseconfig/arm/arm64/CONFIG_RPMSG_QCOM_SMD
deleted file mode 100644
index f65af3d..0000000
--- a/baseconfig/arm/arm64/CONFIG_RPMSG_QCOM_SMD
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RPMSG_QCOM_SMD=m
diff --git a/baseconfig/arm/arm64/CONFIG_RTC_DRV_EFI b/baseconfig/arm/arm64/CONFIG_RTC_DRV_EFI
deleted file mode 100644
index e2a2dcd..0000000
--- a/baseconfig/arm/arm64/CONFIG_RTC_DRV_EFI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RTC_DRV_EFI=y
diff --git a/baseconfig/arm/arm64/CONFIG_RTC_DRV_PL030 b/baseconfig/arm/arm64/CONFIG_RTC_DRV_PL030
deleted file mode 100644
index 6f6f4ec..0000000
--- a/baseconfig/arm/arm64/CONFIG_RTC_DRV_PL030
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_RTC_DRV_PL030 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_RTC_DRV_PM8XXX b/baseconfig/arm/arm64/CONFIG_RTC_DRV_PM8XXX
deleted file mode 100644
index adc778e..0000000
--- a/baseconfig/arm/arm64/CONFIG_RTC_DRV_PM8XXX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RTC_DRV_PM8XXX=m
diff --git a/baseconfig/arm/arm64/CONFIG_RTC_DRV_SUN6I b/baseconfig/arm/arm64/CONFIG_RTC_DRV_SUN6I
deleted file mode 100644
index 54410db..0000000
--- a/baseconfig/arm/arm64/CONFIG_RTC_DRV_SUN6I
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RTC_DRV_SUN6I=y
diff --git a/baseconfig/arm/arm64/CONFIG_RTC_DRV_XGENE b/baseconfig/arm/arm64/CONFIG_RTC_DRV_XGENE
deleted file mode 100644
index f6897ba..0000000
--- a/baseconfig/arm/arm64/CONFIG_RTC_DRV_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_RTC_DRV_XGENE=m
diff --git a/baseconfig/arm/arm64/CONFIG_SATA_AHCI_SEATTLE b/baseconfig/arm/arm64/CONFIG_SATA_AHCI_SEATTLE
deleted file mode 100644
index dfcf03f..0000000
--- a/baseconfig/arm/arm64/CONFIG_SATA_AHCI_SEATTLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SATA_AHCI_SEATTLE=m
diff --git a/baseconfig/arm/arm64/CONFIG_SENSORS_ACPI_POWER b/baseconfig/arm/arm64/CONFIG_SENSORS_ACPI_POWER
deleted file mode 100644
index dbb45c0..0000000
--- a/baseconfig/arm/arm64/CONFIG_SENSORS_ACPI_POWER
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SENSORS_ACPI_POWER=m
diff --git a/baseconfig/arm/arm64/CONFIG_SENSORS_LTC2978_REGULATOR b/baseconfig/arm/arm64/CONFIG_SENSORS_LTC2978_REGULATOR
deleted file mode 100644
index 54d82dd..0000000
--- a/baseconfig/arm/arm64/CONFIG_SENSORS_LTC2978_REGULATOR
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SENSORS_LTC2978_REGULATOR is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SENSORS_XGENE b/baseconfig/arm/arm64/CONFIG_SENSORS_XGENE
deleted file mode 100644
index 84ffdf1..0000000
--- a/baseconfig/arm/arm64/CONFIG_SENSORS_XGENE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SENSORS_XGENE=m
diff --git a/baseconfig/arm/arm64/CONFIG_SERIAL_AMBA_PL010 b/baseconfig/arm/arm64/CONFIG_SERIAL_AMBA_PL010
deleted file mode 100644
index ee4b9d5..0000000
--- a/baseconfig/arm/arm64/CONFIG_SERIAL_AMBA_PL010
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SERIAL_AMBA_PL010 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SERIAL_MSM b/baseconfig/arm/arm64/CONFIG_SERIAL_MSM
deleted file mode 100644
index d9bd716..0000000
--- a/baseconfig/arm/arm64/CONFIG_SERIAL_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SERIAL_MSM=y
diff --git a/baseconfig/arm/arm64/CONFIG_SERIAL_MSM_CONSOLE b/baseconfig/arm/arm64/CONFIG_SERIAL_MSM_CONSOLE
deleted file mode 100644
index 5aeaebb..0000000
--- a/baseconfig/arm/arm64/CONFIG_SERIAL_MSM_CONSOLE
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SERIAL_MSM_CONSOLE=y
diff --git a/baseconfig/arm/arm64/CONFIG_SERIO_SUN4I_PS2 b/baseconfig/arm/arm64/CONFIG_SERIO_SUN4I_PS2
deleted file mode 100644
index aa105b3..0000000
--- a/baseconfig/arm/arm64/CONFIG_SERIO_SUN4I_PS2
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SERIO_SUN4I_PS2 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SND_KIRKWOOD_SOC b/baseconfig/arm/arm64/CONFIG_SND_KIRKWOOD_SOC
deleted file mode 100644
index 05e82f2..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_KIRKWOOD_SOC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SND_KIRKWOOD_SOC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_APQ8016_SBC b/baseconfig/arm/arm64/CONFIG_SND_SOC_APQ8016_SBC
deleted file mode 100644
index dfe53b8..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_APQ8016_SBC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_APQ8016_SBC=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_MSM8916_WCD_ANALOG b/baseconfig/arm/arm64/CONFIG_SND_SOC_MSM8916_WCD_ANALOG
deleted file mode 100644
index 207a5e5..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_MSM8916_WCD_ANALOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL b/baseconfig/arm/arm64/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL
deleted file mode 100644
index db12f03..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_MSM8916_WCD_DIGITAL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_QCOM b/baseconfig/arm/arm64/CONFIG_SND_SOC_QCOM
deleted file mode 100644
index 719eb4e..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_QCOM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_QCOM=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_SGTL5000 b/baseconfig/arm/arm64/CONFIG_SND_SOC_SGTL5000
deleted file mode 100644
index ea71dec..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_SGTL5000
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_SGTL5000=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_STORM b/baseconfig/arm/arm64/CONFIG_SND_SOC_STORM
deleted file mode 100644
index adab3ae..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_STORM
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SND_SOC_STORM is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA b/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA
deleted file mode 100644
index b32a04f..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_TEGRA=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_MAX98090 b/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_MAX98090
deleted file mode 100644
index 55f327a..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_MAX98090
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_TEGRA_MAX98090=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_RT5640 b/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_RT5640
deleted file mode 100644
index 3370b8e..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_RT5640
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_TEGRA_RT5640=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_RT5677 b/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_RT5677
deleted file mode 100644
index 24298d9..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_RT5677
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_TEGRA_RT5677=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_SGTL5000 b/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_SGTL5000
deleted file mode 100644
index 4706a31..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_SGTL5000
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SOC_TEGRA_SGTL5000=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_WM8753 b/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_WM8753
deleted file mode 100644
index 9039b16..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SOC_TEGRA_WM8753
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SND_SOC_TEGRA_WM8753 is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SUN4I_CODEC b/baseconfig/arm/arm64/CONFIG_SND_SUN4I_CODEC
deleted file mode 100644
index 6cce5a1..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SUN4I_CODEC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SUN4I_CODEC=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SUN4I_I2S b/baseconfig/arm/arm64/CONFIG_SND_SUN4I_I2S
deleted file mode 100644
index d9270e2..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SUN4I_I2S
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SUN4I_I2S=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SUN4I_SPDIF b/baseconfig/arm/arm64/CONFIG_SND_SUN4I_SPDIF
deleted file mode 100644
index c0b108a..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SUN4I_SPDIF
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SUN4I_SPDIF=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SUN8I_CODEC b/baseconfig/arm/arm64/CONFIG_SND_SUN8I_CODEC
deleted file mode 100644
index c30f943..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SUN8I_CODEC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SUN8I_CODEC=m
diff --git a/baseconfig/arm/arm64/CONFIG_SND_SUN8I_CODEC_ANALOG b/baseconfig/arm/arm64/CONFIG_SND_SUN8I_CODEC_ANALOG
deleted file mode 100644
index 28ea301..0000000
--- a/baseconfig/arm/arm64/CONFIG_SND_SUN8I_CODEC_ANALOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SND_SUN8I_CODEC_ANALOG=m
diff --git a/baseconfig/arm/arm64/CONFIG_SNI_NETSEC b/baseconfig/arm/arm64/CONFIG_SNI_NETSEC
deleted file mode 100644
index c348519..0000000
--- a/baseconfig/arm/arm64/CONFIG_SNI_NETSEC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SNI_NETSEC=m
diff --git a/baseconfig/arm/arm64/CONFIG_SOCIONEXT_SYNQUACER_PREITS b/baseconfig/arm/arm64/CONFIG_SOCIONEXT_SYNQUACER_PREITS
deleted file mode 100644
index ded5c35..0000000
--- a/baseconfig/arm/arm64/CONFIG_SOCIONEXT_SYNQUACER_PREITS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SOCIONEXT_SYNQUACER_PREITS=y
diff --git a/baseconfig/arm/arm64/CONFIG_SOC_TEGRA_FLOWCTRL b/baseconfig/arm/arm64/CONFIG_SOC_TEGRA_FLOWCTRL
deleted file mode 100644
index 00413d4..0000000
--- a/baseconfig/arm/arm64/CONFIG_SOC_TEGRA_FLOWCTRL
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SOC_TEGRA_FLOWCTRL=y
diff --git a/baseconfig/arm/arm64/CONFIG_SPARSEMEM_VMEMMAP b/baseconfig/arm/arm64/CONFIG_SPARSEMEM_VMEMMAP
deleted file mode 100644
index a2826da..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPARSEMEM_VMEMMAP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPARSEMEM_VMEMMAP=y
diff --git a/baseconfig/arm/arm64/CONFIG_SPARSE_IRQ b/baseconfig/arm/arm64/CONFIG_SPARSE_IRQ
deleted file mode 100644
index 943900f..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPARSE_IRQ
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPARSE_IRQ=y
diff --git a/baseconfig/arm/arm64/CONFIG_SPI_QUP b/baseconfig/arm/arm64/CONFIG_SPI_QUP
deleted file mode 100644
index 4cfdd1d..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPI_QUP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPI_QUP=m
diff --git a/baseconfig/arm/arm64/CONFIG_SPI_SUN6I b/baseconfig/arm/arm64/CONFIG_SPI_SUN6I
deleted file mode 100644
index 031cd17..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPI_SUN6I
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPI_SUN6I=m
diff --git a/baseconfig/arm/arm64/CONFIG_SPI_THUNDERX b/baseconfig/arm/arm64/CONFIG_SPI_THUNDERX
deleted file mode 100644
index 054a831..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPI_THUNDERX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPI_THUNDERX=m
diff --git a/baseconfig/arm/arm64/CONFIG_SPI_XLP b/baseconfig/arm/arm64/CONFIG_SPI_XLP
deleted file mode 100644
index 6026d5f..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPI_XLP
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPI_XLP=m
diff --git a/baseconfig/arm/arm64/CONFIG_SPMI b/baseconfig/arm/arm64/CONFIG_SPMI
deleted file mode 100644
index 4ce4dfd..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPMI=y
diff --git a/baseconfig/arm/arm64/CONFIG_SPMI_MSM_PMIC_ARB b/baseconfig/arm/arm64/CONFIG_SPMI_MSM_PMIC_ARB
deleted file mode 100644
index bd46b49..0000000
--- a/baseconfig/arm/arm64/CONFIG_SPMI_MSM_PMIC_ARB
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SPMI_MSM_PMIC_ARB=y
diff --git a/baseconfig/arm/arm64/CONFIG_STUB_CLK_HI6220 b/baseconfig/arm/arm64/CONFIG_STUB_CLK_HI6220
deleted file mode 100644
index 89a60a4..0000000
--- a/baseconfig/arm/arm64/CONFIG_STUB_CLK_HI6220
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_STUB_CLK_HI6220=y
diff --git a/baseconfig/arm/arm64/CONFIG_SUN4I_EMAC b/baseconfig/arm/arm64/CONFIG_SUN4I_EMAC
deleted file mode 100644
index 7c44fec..0000000
--- a/baseconfig/arm/arm64/CONFIG_SUN4I_EMAC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SUN4I_EMAC is not set
diff --git a/baseconfig/arm/arm64/CONFIG_SUN4I_GPADC b/baseconfig/arm/arm64/CONFIG_SUN4I_GPADC
deleted file mode 100644
index 97139c2..0000000
--- a/baseconfig/arm/arm64/CONFIG_SUN4I_GPADC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SUN4I_GPADC=m
diff --git a/baseconfig/arm/arm64/CONFIG_SUN50I_A64_CCU b/baseconfig/arm/arm64/CONFIG_SUN50I_A64_CCU
deleted file mode 100644
index 7b6c7a6..0000000
--- a/baseconfig/arm/arm64/CONFIG_SUN50I_A64_CCU
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SUN50I_A64_CCU=y
diff --git a/baseconfig/arm/arm64/CONFIG_SUNXI_CCU b/baseconfig/arm/arm64/CONFIG_SUNXI_CCU
deleted file mode 100644
index 30e6d69..0000000
--- a/baseconfig/arm/arm64/CONFIG_SUNXI_CCU
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SUNXI_CCU=y
diff --git a/baseconfig/arm/arm64/CONFIG_SUNXI_WATCHDOG b/baseconfig/arm/arm64/CONFIG_SUNXI_WATCHDOG
deleted file mode 100644
index 9b58f97..0000000
--- a/baseconfig/arm/arm64/CONFIG_SUNXI_WATCHDOG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_SUNXI_WATCHDOG=m
diff --git a/baseconfig/arm/arm64/CONFIG_SYS_HYPERVISOR b/baseconfig/arm/arm64/CONFIG_SYS_HYPERVISOR
deleted file mode 100644
index b5668db..0000000
--- a/baseconfig/arm/arm64/CONFIG_SYS_HYPERVISOR
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_SYS_HYPERVISOR is not set
diff --git a/baseconfig/arm/arm64/CONFIG_TEGRA210_ADMA b/baseconfig/arm/arm64/CONFIG_TEGRA210_ADMA
deleted file mode 100644
index 7f82ada..0000000
--- a/baseconfig/arm/arm64/CONFIG_TEGRA210_ADMA
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_TEGRA210_ADMA=y
diff --git a/baseconfig/arm/arm64/CONFIG_TEGRA_ACONNECT b/baseconfig/arm/arm64/CONFIG_TEGRA_ACONNECT
deleted file mode 100644
index 251550c..0000000
--- a/baseconfig/arm/arm64/CONFIG_TEGRA_ACONNECT
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_TEGRA_ACONNECT=m
diff --git a/baseconfig/arm/arm64/CONFIG_TEGRA_GMI b/baseconfig/arm/arm64/CONFIG_TEGRA_GMI
deleted file mode 100644
index 5def3e8..0000000
--- a/baseconfig/arm/arm64/CONFIG_TEGRA_GMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_TEGRA_GMI=m
diff --git a/baseconfig/arm/arm64/CONFIG_TEGRA_IVC b/baseconfig/arm/arm64/CONFIG_TEGRA_IVC
deleted file mode 100644
index cdcacbe..0000000
--- a/baseconfig/arm/arm64/CONFIG_TEGRA_IVC
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_TEGRA_IVC=y
diff --git a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_BGX b/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_BGX
deleted file mode 100644
index 123fe6f..0000000
--- a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_BGX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_THUNDER_NIC_BGX=m
diff --git a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_PF b/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_PF
deleted file mode 100644
index 6b047a1..0000000
--- a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_PF
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_THUNDER_NIC_PF=m
diff --git a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_RGX b/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_RGX
deleted file mode 100644
index c50ae01..0000000
--- a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_RGX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_THUNDER_NIC_RGX=m
diff --git a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_VF b/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_VF
deleted file mode 100644
index 5fdfca5..0000000
--- a/baseconfig/arm/arm64/CONFIG_THUNDER_NIC_VF
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_THUNDER_NIC_VF=m
diff --git a/baseconfig/arm/arm64/CONFIG_TOUCHSCREEN_SUN4I b/baseconfig/arm/arm64/CONFIG_TOUCHSCREEN_SUN4I
deleted file mode 100644
index af15c1f..0000000
--- a/baseconfig/arm/arm64/CONFIG_TOUCHSCREEN_SUN4I
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_TOUCHSCREEN_SUN4I is not set
diff --git a/baseconfig/arm/arm64/CONFIG_USB_CONFIGFS_F_LB_SS b/baseconfig/arm/arm64/CONFIG_USB_CONFIGFS_F_LB_SS
deleted file mode 100644
index 213edb5..0000000
--- a/baseconfig/arm/arm64/CONFIG_USB_CONFIGFS_F_LB_SS
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_USB_CONFIGFS_F_LB_SS is not set
diff --git a/baseconfig/arm/arm64/CONFIG_USB_EHCI_MSM b/baseconfig/arm/arm64/CONFIG_USB_EHCI_MSM
deleted file mode 100644
index 7397a0f..0000000
--- a/baseconfig/arm/arm64/CONFIG_USB_EHCI_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_EHCI_MSM=m
diff --git a/baseconfig/arm/arm64/CONFIG_USB_MSM_OTG b/baseconfig/arm/arm64/CONFIG_USB_MSM_OTG
deleted file mode 100644
index 043abcf..0000000
--- a/baseconfig/arm/arm64/CONFIG_USB_MSM_OTG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_MSM_OTG=m
diff --git a/baseconfig/arm/arm64/CONFIG_USB_MUSB_SUNXI b/baseconfig/arm/arm64/CONFIG_USB_MUSB_SUNXI
deleted file mode 100644
index 258e716..0000000
--- a/baseconfig/arm/arm64/CONFIG_USB_MUSB_SUNXI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_MUSB_SUNXI=m
diff --git a/baseconfig/arm/arm64/CONFIG_USB_QCOM_8X16_PHY b/baseconfig/arm/arm64/CONFIG_USB_QCOM_8X16_PHY
deleted file mode 100644
index 79fac4f..0000000
--- a/baseconfig/arm/arm64/CONFIG_USB_QCOM_8X16_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_QCOM_8X16_PHY=m
diff --git a/baseconfig/arm/arm64/CONFIG_USB_SPEEDTOUCH b/baseconfig/arm/arm64/CONFIG_USB_SPEEDTOUCH
deleted file mode 100644
index e34bebc..0000000
--- a/baseconfig/arm/arm64/CONFIG_USB_SPEEDTOUCH
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_USB_SPEEDTOUCH is not set
diff --git a/baseconfig/arm/arm64/CONFIG_VDSO b/baseconfig/arm/arm64/CONFIG_VDSO
deleted file mode 100644
index cab5eba..0000000
--- a/baseconfig/arm/arm64/CONFIG_VDSO
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VDSO=y
diff --git a/baseconfig/arm/arm64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET b/baseconfig/arm/arm64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET
deleted file mode 100644
index b6b1ee3..0000000
--- a/baseconfig/arm/arm64/CONFIG_VFIO_PLATFORM_AMDXGBE_RESET
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VFIO_PLATFORM_AMDXGBE_RESET=m
diff --git a/baseconfig/arm/arm64/CONFIG_VGA_CONSOLE b/baseconfig/arm/arm64/CONFIG_VGA_CONSOLE
deleted file mode 100644
index 5b00b2f..0000000
--- a/baseconfig/arm/arm64/CONFIG_VGA_CONSOLE
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_VGA_CONSOLE is not set
diff --git a/baseconfig/arm/arm64/CONFIG_VIDEO_QCOM_CAMSS b/baseconfig/arm/arm64/CONFIG_VIDEO_QCOM_CAMSS
deleted file mode 100644
index 5e2512c..0000000
--- a/baseconfig/arm/arm64/CONFIG_VIDEO_QCOM_CAMSS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VIDEO_QCOM_CAMSS=m
diff --git a/baseconfig/arm/arm64/CONFIG_VIDEO_QCOM_VENUS b/baseconfig/arm/arm64/CONFIG_VIDEO_QCOM_VENUS
deleted file mode 100644
index 68082fd..0000000
--- a/baseconfig/arm/arm64/CONFIG_VIDEO_QCOM_VENUS
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VIDEO_QCOM_VENUS=m
diff --git a/baseconfig/arm/arm64/CONFIG_VMAP_STACK b/baseconfig/arm/arm64/CONFIG_VMAP_STACK
deleted file mode 100644
index 8bd9868..0000000
--- a/baseconfig/arm/arm64/CONFIG_VMAP_STACK
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_VMAP_STACK=y
diff --git a/baseconfig/arm/arm64/CONFIG_XGENE_DMA b/baseconfig/arm/arm64/CONFIG_XGENE_DMA
deleted file mode 100644
index 7c67d5b..0000000
--- a/baseconfig/arm/arm64/CONFIG_XGENE_DMA
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_XGENE_DMA is not set
diff --git a/baseconfig/arm/arm64/CONFIG_XGENE_PMU b/baseconfig/arm/arm64/CONFIG_XGENE_PMU
deleted file mode 100644
index df5afee..0000000
--- a/baseconfig/arm/arm64/CONFIG_XGENE_PMU
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_XGENE_PMU=y
diff --git a/baseconfig/arm/arm64/CONFIG_XGENE_SLIMPRO_MBOX b/baseconfig/arm/arm64/CONFIG_XGENE_SLIMPRO_MBOX
deleted file mode 100644
index cbc4863..0000000
--- a/baseconfig/arm/arm64/CONFIG_XGENE_SLIMPRO_MBOX
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_XGENE_SLIMPRO_MBOX=m
diff --git a/baseconfig/arm/arm64/README b/baseconfig/arm/arm64/README
deleted file mode 100644
index c2aec64..0000000
--- a/baseconfig/arm/arm64/README
+++ /dev/null
@@ -1 +0,0 @@
-This directory contains options specific to arm64
diff --git a/baseconfig/arm/armv7/CONFIG_DRM_SUN4I_HDMI b/baseconfig/arm/armv7/CONFIG_DRM_SUN4I_HDMI
deleted file mode 100644
index cda1f60..0000000
--- a/baseconfig/arm/armv7/CONFIG_DRM_SUN4I_HDMI
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_DRM_SUN4I_HDMI=m
diff --git a/baseconfig/arm/armv7/CONFIG_DRM_SUN4I_HDMI_CEC b/baseconfig/arm/armv7/CONFIG_DRM_SUN4I_HDMI_CEC
deleted file mode 100644
index 8ba7340..0000000
--- a/baseconfig/arm/armv7/CONFIG_DRM_SUN4I_HDMI_CEC
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_DRM_SUN4I_HDMI_CEC is not set
diff --git a/baseconfig/arm/armv7/CONFIG_DRM_TVE200 b/baseconfig/arm/armv7/CONFIG_DRM_TVE200
new file mode 100644
index 0000000..9e6b977
--- /dev/null
+++ b/baseconfig/arm/armv7/CONFIG_DRM_TVE200
@@ -0,0 +1 @@
+CONFIG_DRM_TVE200=m
diff --git a/baseconfig/arm/armv7/CONFIG_GPIO_PCF857X b/baseconfig/arm/armv7/CONFIG_GPIO_PCF857X
deleted file mode 100644
index a5a82a6..0000000
--- a/baseconfig/arm/armv7/CONFIG_GPIO_PCF857X
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_GPIO_PCF857X=m
diff --git a/baseconfig/arm/armv7/CONFIG_OMAP4_DSS_HDMI_CEC b/baseconfig/arm/armv7/CONFIG_OMAP4_DSS_HDMI_CEC
new file mode 100644
index 0000000..56ceebf
--- /dev/null
+++ b/baseconfig/arm/armv7/CONFIG_OMAP4_DSS_HDMI_CEC
@@ -0,0 +1 @@
+CONFIG_OMAP4_DSS_HDMI_CEC=y
diff --git a/baseconfig/arm/armv7/CONFIG_PCI_V3_SEMI b/baseconfig/arm/armv7/CONFIG_PCI_V3_SEMI
new file mode 100644
index 0000000..8aeccd6
--- /dev/null
+++ b/baseconfig/arm/armv7/CONFIG_PCI_V3_SEMI
@@ -0,0 +1 @@
+CONFIG_PCI_V3_SEMI=y
diff --git a/baseconfig/arm/armv7/armv7/CONFIG_USB_EHCI_MSM b/baseconfig/arm/armv7/armv7/CONFIG_USB_EHCI_MSM
deleted file mode 100644
index 7397a0f..0000000
--- a/baseconfig/arm/armv7/armv7/CONFIG_USB_EHCI_MSM
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_EHCI_MSM=m
diff --git a/baseconfig/arm/armv7/armv7/CONFIG_USB_MSM_OTG b/baseconfig/arm/armv7/armv7/CONFIG_USB_MSM_OTG
deleted file mode 100644
index 043abcf..0000000
--- a/baseconfig/arm/armv7/armv7/CONFIG_USB_MSM_OTG
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_MSM_OTG=m
diff --git a/baseconfig/arm/armv7/armv7/CONFIG_USB_QCOM_8X16_PHY b/baseconfig/arm/armv7/armv7/CONFIG_USB_QCOM_8X16_PHY
deleted file mode 100644
index 79fac4f..0000000
--- a/baseconfig/arm/armv7/armv7/CONFIG_USB_QCOM_8X16_PHY
+++ /dev/null
@@ -1 +0,0 @@
-CONFIG_USB_QCOM_8X16_PHY=m
diff --git a/baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX b/baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX
index fd145f0..47b9dbe 100644
--- a/baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX
+++ b/baseconfig/powerpc/CONFIG_CRYPTO_DEV_NX
@@ -1 +1 @@
-CONFIG_CRYPTO_DEV_NX=y
+# CONFIG_CRYPTO_DEV_NX is not set
diff --git a/baseconfig/powerpc/CONFIG_PPC_FAST_ENDIAN_SWITCH b/baseconfig/powerpc/CONFIG_PPC_FAST_ENDIAN_SWITCH
new file mode 100644
index 0000000..9a03136
--- /dev/null
+++ b/baseconfig/powerpc/CONFIG_PPC_FAST_ENDIAN_SWITCH
@@ -0,0 +1 @@
+# CONFIG_PPC_FAST_ENDIAN_SWITCH is not set
diff --git a/baseconfig/powerpc/CONFIG_PPC_RADIX_MMU_DEFAULT b/baseconfig/powerpc/CONFIG_PPC_RADIX_MMU_DEFAULT
new file mode 100644
index 0000000..fe2d46f
--- /dev/null
+++ b/baseconfig/powerpc/CONFIG_PPC_RADIX_MMU_DEFAULT
@@ -0,0 +1 @@
+CONFIG_PPC_RADIX_MMU_DEFAULT=y
diff --git a/baseconfig/s390x/CONFIG_ALTERNATIVES b/baseconfig/s390x/CONFIG_ALTERNATIVES
new file mode 100644
index 0000000..ae78230
--- /dev/null
+++ b/baseconfig/s390x/CONFIG_ALTERNATIVES
@@ -0,0 +1 @@
+CONFIG_ALTERNATIVES=y
diff --git a/baseconfig/s390x/CONFIG_IRDA b/baseconfig/s390x/CONFIG_IRDA
deleted file mode 100644
index 54366a3..0000000
--- a/baseconfig/s390x/CONFIG_IRDA
+++ /dev/null
@@ -1 +0,0 @@
-# CONFIG_IRDA is not set
diff --git a/baseconfig/x86/CONFIG_ACPI_REV_OVERRIDE_POSSIBLE b/baseconfig/x86/CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
index 22e6b36..021ea2f 100644
--- a/baseconfig/x86/CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
+++ b/baseconfig/x86/CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
@@ -1 +1 @@
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
diff --git a/baseconfig/x86/CONFIG_DELL_SMBIOS_SMM b/baseconfig/x86/CONFIG_DELL_SMBIOS_SMM
new file mode 100644
index 0000000..2ba6382
--- /dev/null
+++ b/baseconfig/x86/CONFIG_DELL_SMBIOS_SMM
@@ -0,0 +1 @@
+CONFIG_DELL_SMBIOS_SMM=m
diff --git a/baseconfig/x86/CONFIG_DELL_SMBIOS_WMI b/baseconfig/x86/CONFIG_DELL_SMBIOS_WMI
new file mode 100644
index 0000000..0e3f3d8
--- /dev/null
+++ b/baseconfig/x86/CONFIG_DELL_SMBIOS_WMI
@@ -0,0 +1 @@
+CONFIG_DELL_SMBIOS_WMI=m
diff --git a/baseconfig/x86/CONFIG_DRM_AMD_DC_DCN1_0 b/baseconfig/x86/CONFIG_DRM_AMD_DC_DCN1_0
new file mode 100644
index 0000000..5d7cf50
--- /dev/null
+++ b/baseconfig/x86/CONFIG_DRM_AMD_DC_DCN1_0
@@ -0,0 +1 @@
+CONFIG_DRM_AMD_DC_DCN1_0=y
diff --git a/baseconfig/x86/CONFIG_INTEL_WMI_THUNDERBOLT b/baseconfig/x86/CONFIG_INTEL_WMI_THUNDERBOLT
new file mode 100644
index 0000000..05356f7
--- /dev/null
+++ b/baseconfig/x86/CONFIG_INTEL_WMI_THUNDERBOLT
@@ -0,0 +1 @@
+CONFIG_INTEL_WMI_THUNDERBOLT=m
diff --git a/baseconfig/x86/CONFIG_LEDS_APU b/baseconfig/x86/CONFIG_LEDS_APU
new file mode 100644
index 0000000..3c80870
--- /dev/null
+++ b/baseconfig/x86/CONFIG_LEDS_APU
@@ -0,0 +1 @@
+CONFIG_LEDS_APU=m
diff --git a/baseconfig/x86/CONFIG_SND_SOC_INTEL_HASWELL b/baseconfig/x86/CONFIG_SND_SOC_INTEL_HASWELL
new file mode 100644
index 0000000..0ad1d94
--- /dev/null
+++ b/baseconfig/x86/CONFIG_SND_SOC_INTEL_HASWELL
@@ -0,0 +1 @@
+CONFIG_SND_SOC_INTEL_HASWELL=m
diff --git a/baseconfig/x86/CONFIG_SND_SOC_INTEL_SKYLAKE b/baseconfig/x86/CONFIG_SND_SOC_INTEL_SKYLAKE
new file mode 100644
index 0000000..f0a5748
--- /dev/null
+++ b/baseconfig/x86/CONFIG_SND_SOC_INTEL_SKYLAKE
@@ -0,0 +1 @@
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
diff --git a/baseconfig/x86/CONFIG_SND_SOC_INTEL_SST_TOPLEVEL b/baseconfig/x86/CONFIG_SND_SOC_INTEL_SST_TOPLEVEL
new file mode 100644
index 0000000..b5dc647
--- /dev/null
+++ b/baseconfig/x86/CONFIG_SND_SOC_INTEL_SST_TOPLEVEL
@@ -0,0 +1 @@
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
diff --git a/baseconfig/x86/CONFIG_SND_SST_ATOM_HIFI2_PLATFORM b/baseconfig/x86/CONFIG_SND_SST_ATOM_HIFI2_PLATFORM
new file mode 100644
index 0000000..5770b36
--- /dev/null
+++ b/baseconfig/x86/CONFIG_SND_SST_ATOM_HIFI2_PLATFORM
@@ -0,0 +1 @@
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
diff --git a/baseconfig/x86/CONFIG_THUNDERBOLT_NET b/baseconfig/x86/CONFIG_THUNDERBOLT_NET
new file mode 100644
index 0000000..1cfc06a
--- /dev/null
+++ b/baseconfig/x86/CONFIG_THUNDERBOLT_NET
@@ -0,0 +1 @@
+CONFIG_THUNDERBOLT_NET=m
diff --git a/baseconfig/x86/x86_64/CONFIG_CHARGER_MANAGER b/baseconfig/x86/x86_64/CONFIG_CHARGER_MANAGER
new file mode 100644
index 0000000..51fe252
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_CHARGER_MANAGER
@@ -0,0 +1 @@
+# CONFIG_CHARGER_MANAGER is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_CPU_ISOLATION b/baseconfig/x86/x86_64/CONFIG_CPU_ISOLATION
new file mode 100644
index 0000000..da3a02c
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_CPU_ISOLATION
@@ -0,0 +1 @@
+CONFIG_CPU_ISOLATION=y
diff --git a/baseconfig/x86/x86_64/CONFIG_INPUT_REGULATOR_HAPTIC b/baseconfig/x86/x86_64/CONFIG_INPUT_REGULATOR_HAPTIC
new file mode 100644
index 0000000..4230eab
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_INPUT_REGULATOR_HAPTIC
@@ -0,0 +1 @@
+# CONFIG_INPUT_REGULATOR_HAPTIC is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_LEDS_REGULATOR b/baseconfig/x86/x86_64/CONFIG_LEDS_REGULATOR
new file mode 100644
index 0000000..b190ec3
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_LEDS_REGULATOR
@@ -0,0 +1 @@
+# CONFIG_LEDS_REGULATOR is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR b/baseconfig/x86/x86_64/CONFIG_REGULATOR
new file mode 100644
index 0000000..5b7c35c
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR
@@ -0,0 +1 @@
+CONFIG_REGULATOR=y
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_ACT8865 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_ACT8865
new file mode 100644
index 0000000..f1e82ab
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_ACT8865
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_ACT8865 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_AD5398 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_AD5398
new file mode 100644
index 0000000..83b5968
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_AD5398
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_AD5398 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_AXP20X b/baseconfig/x86/x86_64/CONFIG_REGULATOR_AXP20X
new file mode 100644
index 0000000..e44a842
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_AXP20X
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_AXP20X is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_BD9571MWV b/baseconfig/x86/x86_64/CONFIG_REGULATOR_BD9571MWV
new file mode 100644
index 0000000..aee7f5a
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_BD9571MWV
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_BD9571MWV is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_DA9210 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_DA9210
new file mode 100644
index 0000000..ed858d9
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_DA9210
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_DA9210 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_DA9211 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_DA9211
new file mode 100644
index 0000000..5f4b883
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_DA9211
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_DA9211 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_FAN53555 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_FAN53555
new file mode 100644
index 0000000..d62314c
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_FAN53555
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_FAN53555 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_FIXED_VOLTAGE b/baseconfig/x86/x86_64/CONFIG_REGULATOR_FIXED_VOLTAGE
new file mode 100644
index 0000000..63c1bd9
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_FIXED_VOLTAGE
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_GPIO b/baseconfig/x86/x86_64/CONFIG_REGULATOR_GPIO
new file mode 100644
index 0000000..91c099f
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_GPIO
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_GPIO is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_ISL6271A b/baseconfig/x86/x86_64/CONFIG_REGULATOR_ISL6271A
new file mode 100644
index 0000000..f2507c8
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_ISL6271A
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_ISL6271A is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_ISL9305 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_ISL9305
new file mode 100644
index 0000000..70ade2e
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_ISL9305
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_ISL9305 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP3971 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP3971
new file mode 100644
index 0000000..e5bd8a9
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP3971
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_LP3971 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP3972 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP3972
new file mode 100644
index 0000000..3820f4b
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP3972
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_LP3972 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP872X b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP872X
new file mode 100644
index 0000000..a41e5d3
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP872X
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_LP872X is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP8755 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP8755
new file mode 100644
index 0000000..3d3d38b
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LP8755
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_LP8755 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_LTC3589 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LTC3589
new file mode 100644
index 0000000..d14c63b
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LTC3589
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_LTC3589 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_LTC3676 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LTC3676
new file mode 100644
index 0000000..a8f50af
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_LTC3676
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_LTC3676 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX1586 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX1586
new file mode 100644
index 0000000..a975396
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX1586
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_MAX1586 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8649 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8649
new file mode 100644
index 0000000..7962094
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8649
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_MAX8649 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8660 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8660
new file mode 100644
index 0000000..6b033e3
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8660
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_MAX8660 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8952 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8952
new file mode 100644
index 0000000..f8346c0
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MAX8952
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_MAX8952 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_MT6311 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MT6311
new file mode 100644
index 0000000..884c0d4
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_MT6311
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_MT6311 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_PFUZE100 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PFUZE100
new file mode 100644
index 0000000..7265415
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PFUZE100
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_PFUZE100 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88060 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88060
new file mode 100644
index 0000000..6c69caa
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88060
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_PV88060 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88080 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88080
new file mode 100644
index 0000000..4b024f4
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88080
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_PV88080 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88090 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88090
new file mode 100644
index 0000000..0097070
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PV88090
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_PV88090 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_PWM b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PWM
new file mode 100644
index 0000000..8169814
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_PWM
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_PWM is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS51632 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS51632
new file mode 100644
index 0000000..b586678
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS51632
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_TPS51632 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS62360 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS62360
new file mode 100644
index 0000000..b6904c2
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS62360
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_TPS62360 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS65023 b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS65023
new file mode 100644
index 0000000..7e5697b
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS65023
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_TPS65023 is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS6507X b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS6507X
new file mode 100644
index 0000000..bcb7b9d
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS6507X
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_TPS6507X is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS6524X b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS6524X
new file mode 100644
index 0000000..a736387
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_TPS6524X
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_TPS6524X is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_USERSPACE_CONSUMER b/baseconfig/x86/x86_64/CONFIG_REGULATOR_USERSPACE_CONSUMER
new file mode 100644
index 0000000..f6a6e11
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_USERSPACE_CONSUMER
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_REGULATOR_VIRTUAL_CONSUMER b/baseconfig/x86/x86_64/CONFIG_REGULATOR_VIRTUAL_CONSUMER
new file mode 100644
index 0000000..cfdfe49
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_REGULATOR_VIRTUAL_CONSUMER
@@ -0,0 +1 @@
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_SENSORS_LTC2978_REGULATOR b/baseconfig/x86/x86_64/CONFIG_SENSORS_LTC2978_REGULATOR
new file mode 100644
index 0000000..54d82dd
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_SENSORS_LTC2978_REGULATOR
@@ -0,0 +1 @@
+# CONFIG_SENSORS_LTC2978_REGULATOR is not set
diff --git a/baseconfig/x86/x86_64/CONFIG_SND_HDA_POWER_SAVE_DEFAULT b/baseconfig/x86/x86_64/CONFIG_SND_HDA_POWER_SAVE_DEFAULT
new file mode 100644
index 0000000..ba01897
--- /dev/null
+++ b/baseconfig/x86/x86_64/CONFIG_SND_HDA_POWER_SAVE_DEFAULT
@@ -0,0 +1 @@
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1
diff --git a/bcm2837-bluetooth-support.patch b/bcm2837-bluetooth-support.patch
deleted file mode 100644
index c272c1e..0000000
--- a/bcm2837-bluetooth-support.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-From 50252c318fe2fcfcbd0832fa835e7fd1fafd7d2d Mon Sep 17 00:00:00 2001
-From: Peter Robinson <pbrobinson(a)gmail.com>
-Date: Sun, 10 Sep 2017 19:30:02 +0100
-Subject: [PATCH 2/2] ARM: dts: bcm2837-rpi-3-b: Add bcm43438 serial slave
-
-Add BCM43438 (bluetooth) as a slave device of uart0 (pl011/ttyAMA0).
-This allows to automatically insert the bcm43438 to the bluetooth
-subsystem instead of relying on userspace helpers (hciattach).
-
-Overwrite chosen/stdout-path to use 8250 aux uart as console.
-
-Signed-off-by: Loic Poulain <loic.poulain@xxxxxxxxx>
-Signed-off-by: Peter Robinson <pbrobinson(a)gmail.com>
----
- arch/arm/boot/dts/bcm2837-rpi-3-b.dts | 10 ++++++++++
- 1 file changed, 10 insertions(+)
-
-diff --git a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
-index 20725ca487f3..e4488cb3067e 100644
---- a/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
-+++ b/arch/arm/boot/dts/bcm2837-rpi-3-b.dts
-@@ -24,6 +29,11 @@
- pinctrl-names = "default";
- pinctrl-0 = <&uart0_gpio32 &gpclk2_gpio43>;
- status = "okay";
-+
-+ bluetooth {
-+ compatible = "brcm,bcm43438-bt";
-+ max-speed = <2000000>;
-+ };
- };
-
- /* uart1 is mapped to the pin header */
---
-2.13.5
-
diff --git a/config_generation b/config_generation
index 64ae444..fdb94b2 100644
--- a/config_generation
+++ b/config_generation
@@ -26,8 +26,8 @@ s390x=baseconfig:baseconfig-s390x
s390x-debug=baseconfig:baseconfig-s390x:debugconfig
# aarch64
-aarch64=baseconfig:baseconfig-arm:baseconfig-arm-arm64
-aarch64-debug=baseconfig:baseconfig-arm:baseconfig-arm-arm64:debugconfig:debugconfig-arm
+aarch64=baseconfig:baseconfig-arm:baseconfig-arm-aarch64
+aarch64-debug=baseconfig:baseconfig-arm:baseconfig-arm-aarch64:debugconfig:debugconfig-arm
# arm
armv7hl=baseconfig:baseconfig-arm:baseconfig-arm-armv7:baseconfig-arm-armv7-armv7
diff --git a/configs/build_configs.sh b/configs/build_configs.sh
new file mode 100755
index 0000000..15ab6b3
--- /dev/null
+++ b/configs/build_configs.sh
@@ -0,0 +1,137 @@
+#!/bin/bash
+#
+# This script merges together the hierarchy of CONFIG_* files under generic
+# and debug to form the necessary $PACKAGE_NAME<version>-<arch>-<variant>.config
+# files for building RHEL kernels, based on the contents of a control file
+
+PACKAGE_NAME="${1:-kernel}" # defines the package name used
+KVERREL="${2:-}"
+SUBARCH="${3:-}" # defines a specific arch
+SCRIPT="$(readlink -f $0)"
+OUTPUT_DIR="$PWD"
+SCRIPT_DIR="$(dirname $SCRIPT)"
+
+# to handle this script being a symlink
+cd $SCRIPT_DIR
+
+set errexit
+set nounset
+
+control_file="config_generation"
+
+cleanup()
+{
+ rm -f config-*
+}
+
+die()
+{
+ echo "$1"
+ cleanup
+ exit 1
+}
+
+function combine_config_layer()
+{
+ dir=$1
+ file="config-$(echo $dir | sed -e 's|/|-|g')"
+
+ if [ $(ls $dir/ | grep -c "^CONFIG_") -eq 0 ]; then
+ touch $file
+ return
+ fi
+
+ cat $dir/CONFIG_* > $file
+}
+
+function merge_configs()
+{
+ archvar=$1
+ arch=$(echo "$archvar" | cut -f1 -d"-")
+ configs=$2
+ order=$3
+ name=$OUTPUT_DIR/$PACKAGE_NAME-$archvar.config
+ echo -n "Building $name ... "
+ touch config-merging config-merged
+
+ # apply based on order
+ skip_if_missing=""
+ for o in $order
+ do
+ for config in $(echo $configs | sed -e 's/:/ /g')
+ do
+ cfile="config-$o-$config"
+
+ test -n "$skip_if_missing" && test ! -e $cfile && continue
+
+ perl merge.pl $cfile config-merging > config-merged
+ if [ ! $? -eq 0 ]; then
+ die "Failed to merge $cfile"
+ fi
+ mv config-merged config-merging
+ done
+
+ # first configs in $order is baseline, all files should be
+ # there. second pass is overrides and can be missing.
+ skip_if_missing="1"
+ done
+ if [ "x$arch" == "xaarch64" ]; then
+ echo "# arm64" > $name
+ elif [ "x$arch" == "xppc64" ]; then
+ echo "# powerpc" > $name
+ elif [ "x$arch" == "xppc64le" ]; then
+ echo "# powerpc" > $name
+ elif [ "x$arch" == "xs390x" ]; then
+ echo "# s390" > $name
+ elif [ "x$arch" == "xarmv7hl" ]; then
+ echo "# arm" > $name
+ elif [ "x$arch" == "xi686" ]; then
+ echo "# i386" > $name
+ else
+ echo "# $arch" > $name
+ fi
+ sort config-merging >> $name
+ rm -f config-merged config-merging
+ echo "done"
+}
+
+while read line
+do
+ if [ $(echo "$line" | grep -c "^#") -ne 0 ]; then
+ continue
+ elif [ $(echo "$line" | grep -c "^$") -ne 0 ]; then
+ continue
+ elif [ $(echo "$line" | grep -c "^ORDER") -ne 0 ]; then
+ order=$(echo "$line" | cut -f2 -d"=")
+ for o in $order
+ do
+ glist=$(find $o -type d)
+ for d in $glist
+ do
+ combine_config_layer $d
+ done
+ done
+ else
+ arch=$(echo "$line" | cut -f1 -d"=")
+ configs=$(echo "$line" | cut -f2 -d"=")
+
+ if [ -n "$SUBARCH" -a "$SUBARCH" != "$arch" ]; then
+ continue
+ fi
+
+ merge_configs $arch $configs "$order"
+ fi
+done < $control_file
+
+# A passed in kernel version implies copy to final location
+# otherwise defer to another script
+if test -n "$KVERREL"
+then
+ for i in kernel-*.config
+ do
+ NEW="$(echo $i | sed "s/$PACKAGE_NAME-$SUBARCH/$PACKAGE_NAME-$KVERREL-$SUBARCH/")"
+ mv $i $NEW
+ done
+fi
+
+cleanup
diff --git a/configs/config_generation b/configs/config_generation
new file mode 100644
index 0000000..e8614c4
--- /dev/null
+++ b/configs/config_generation
@@ -0,0 +1,41 @@
+# config-variant=config:config:config
+# kernel.config files are build on the fly based on this config,
+# the first arg is arch and variant, the second is a hierarchy of
+# config options, lowest priority to highest
+
+# tells the build_configs.sh which order to build the configs.
+# this is useful when providing a separate overrides directory.
+# do not use quotes and space separate the directories.
+ORDER=fedora
+
+# x86_64
+x86_64=generic:generic-x86:generic-x86-x86_64
+x86_64-debug=generic:generic-x86:generic-x86-x86_64:debug:debug-x86:debug-x86-x86_64
+
+# i686
+i686=generic:generic-x86:generic-x86-i686
+i686-debug=generic:generic-x86:generic-x86-i686:debug:debug-x86
+i686-PAE=generic:generic-x86:generic-x86-i686PAE
+i686-PAEdebug=generic:generic-x86:generic-x86-i686PAE:debug:debug-x86
+
+# ppc64
+ppc64=generic:generic-powerpc:generic-powerpc-powerpc64
+ppc64-debug=generic:generic-powerpc:generic-powerpc-powerpc64:debug
+
+# ppc64le
+ppc64le=generic:generic-powerpc:generic-powerpc-powerpc64le
+ppc64le-debug=generic:generic-powerpc:generic-powerpc-powerpc64le:debug
+
+# s390x
+s390x=generic:generic-s390x
+s390x-debug=generic:generic-s390x:debug
+
+# aarch64
+aarch64=generic:generic-arm:generic-arm-aarch64
+aarch64-debug=generic:generic-arm:generic-arm-aarch64:debug:debug-arm
+
+# arm
+armv7hl=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-armv7
+armv7hl-debug=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-armv7:debug:debug-arm
+armv7hl-lpae=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-lpae
+armv7hl-lpae-debug=generic:generic-arm:generic-arm-armv7:generic-arm-armv7-lpae:debug:debug-arm
diff --git a/configs/process_configs.sh b/configs/process_configs.sh
new file mode 100755
index 0000000..4de45d6
--- /dev/null
+++ b/configs/process_configs.sh
@@ -0,0 +1,136 @@
+#!/bin/bash
+#
+# This script takes the merged config files and processes them through oldconfig
+# and listnewconfig
+
+
+die()
+{
+ echo "$1"
+ exit 1
+}
+
+# stupid function to find top of tree to do kernel make configs
+switch_to_toplevel()
+{
+ path="$(pwd)"
+ while test -n "$path"
+ do
+ test -d $path/firmware && \
+ test -e $path/MAINTAINERS && \
+ test -d $path/drivers && \
+ break
+
+ path="$(dirname $path)"
+ done
+
+ test -n "$path" || die "Can't find toplevel"
+ echo "$path"
+}
+
+checkoptions()
+{
+ /usr/bin/awk '
+
+ /is not set/ {
+ split ($0, a, "#");
+ split(a[2], b);
+ if (NR==FNR) {
+ configs[b[1]]="is not set";
+ } else {
+ if (configs[b[1]] != "" && configs[b[1]] != "is not set")
+ print "Found # "b[1] " is not set, after generation, had " b[1] " " configs[b[1]] " in Source tree";
+ }
+ }
+
+ /=/ {
+ split ($0, a, "=");
+ if (NR==FNR) {
+ configs[a[1]]=a[2];
+ } else {
+ if (configs[a[1]] != "" && configs[a[1]] != a[2])
+ print "Found "a[1]"="configs[a[1]]" after generation, had " a[1]"="a[2]" in Source tree";
+ }
+ }
+ ' $1 $2 > .mismatches
+
+ if test -s .mismatches
+ then
+ echo "Error: Mismatches found in configuration files"
+ cat .mismatches
+ exit 1
+ fi
+}
+
+function process_configs()
+{
+ # assume we are in $source_tree/configs, need to get to top level
+ pushd $(switch_to_toplevel)
+
+ for cfg in $SCRIPT_DIR/${PACKAGE_NAME}${KVERREL}${SUBARCH}*.config
+ do
+ arch=$(head -1 $cfg | cut -b 3-)
+ cfgtmp="${cfg}.tmp"
+ cfgorig="${cfg}.orig"
+ cat $cfg > $cfgorig
+
+ echo -n "Processing $cfg ... "
+
+ # an empty grep is good but leaves a return value, so use # 'true' to bypass
+ make ARCH=$arch KCONFIG_CONFIG=$cfg listnewconfig | grep -E 'CONFIG_' > .newoptions || true
+ if test -n "$NEWOPTIONS" && test -s .newoptions
+ then
+ echo "Found unset config items, please set them to an appropriate value"
+ cat .newoptions
+ rm .newoptions
+ exit 1
+ fi
+ rm .newoptions
+
+ make ARCH=$arch KCONFIG_CONFIG=$cfg oldnoconfig > /dev/null || exit 1
+ echo "# $arch" > ${cfgtmp}
+ cat "${cfg}" >> ${cfgtmp}
+ if test -n "$CHECKOPTIONS"
+ then
+ checkoptions $cfgtmp $cfgorig
+ fi
+ mv ${cfgtmp} ${cfg}
+ rm ${cfgorig}
+ echo "done"
+ done
+ rm "$SCRIPT_DIR"/*.config.old
+ popd > /dev/null
+
+ echo "Processed config files are in $SCRIPT_DIR"
+}
+
+NEWOPTIONS=""
+CHECKOPTIONS=""
+
+while [[ $# -gt 0 ]]
+do
+ key="$1"
+ case $key in
+ -n)
+ NEWOPTIONS="x"
+ ;;
+ -c)
+ CHECKOPTIONS="x"
+ ;;
+ *)
+ break;;
+ esac
+ shift
+done
+
+PACKAGE_NAME="${1:-kernel}" # defines the package name used
+KVERREL="$(test -n "$2" && echo "-$2" || echo "")"
+SUBARCH="$(test -n "$3" && echo "-$3" || echo "")"
+SCRIPT="$(readlink -f $0)"
+OUTPUT_DIR="$PWD"
+SCRIPT_DIR="$(dirname $SCRIPT)"
+
+# to handle this script being a symlink
+cd $SCRIPT_DIR
+
+process_configs
diff --git a/criu-no-expert.patch b/criu-no-expert.patch
index f7e1fff..430bfd0 100644
--- a/criu-no-expert.patch
+++ b/criu-no-expert.patch
@@ -1,3 +1,4 @@
+From 235b02d70a6a9837896c2ff4ca9d03f172cc4281 Mon Sep 17 00:00:00 2001
From: "kernel-team(a)fedoraproject.org" <kernel-team(a)fedoraproject.org>
Date: Wed, 30 Jan 2013 10:55:31 -0500
Subject: [PATCH] criu: no expert
@@ -9,24 +10,27 @@ Upstream-status: Fedora mustard
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/init/Kconfig b/init/Kconfig
-index 648bb79d6b73..860ca236975f 100644
+index 2934249fba46..19d9ee8c120b 100644
--- a/init/Kconfig
+++ b/init/Kconfig
-@@ -1137,7 +1137,7 @@ config CGROUP_WRITEBACK
+@@ -871,7 +871,7 @@ config SOCK_CGROUP_DATA
endif # CGROUPS
- config CHECKPOINT_RESTORE
-- bool "Checkpoint/restore support" if EXPERT
-+ bool "Checkpoint/restore support"
- select PROC_CHILDREN
- default n
- help
-@@ -1149,7 +1149,7 @@ config CHECKPOINT_RESTORE
- If unsure, say N here.
-
menuconfig NAMESPACES
- bool "Namespaces support" if EXPERT
+ bool "Namespaces support"
depends on MULTIUSER
default !EXPERT
help
+@@ -1321,7 +1321,7 @@ config MEMBARRIER
+ If unsure, say Y.
+
+ config CHECKPOINT_RESTORE
+- bool "Checkpoint/restore support" if EXPERT
++ bool "Checkpoint/restore support"
+ select PROC_CHILDREN
+ default n
+ help
+--
+2.14.3
+
diff --git a/dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch b/dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch
deleted file mode 100644
index 192e435..0000000
--- a/dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 69c64866ce072dea1d1e59a0d61e0f66c0dffb76 Mon Sep 17 00:00:00 2001
-Message-Id: <69c64866ce072dea1d1e59a0d61e0f66c0dffb76.1513103764.git.jeremy(a)jcline.org>
-From: Mohamed Ghannam <simo.ghannam(a)gmail.com>
-Date: Tue, 5 Dec 2017 20:58:35 +0000
-Subject: [PATCH] dccp: CVE-2017-8824: use-after-free in DCCP code
-
-Whenever the sock object is in DCCP_CLOSED state,
-dccp_disconnect() must free dccps_hc_tx_ccid and
-dccps_hc_rx_ccid and set to NULL.
-
-Signed-off-by: Mohamed Ghannam <simo.ghannam(a)gmail.com>
-Reviewed-by: Eric Dumazet <edumazet(a)google.com>
-Signed-off-by: David S. Miller <davem(a)davemloft.net>
----
- net/dccp/proto.c | 5 +++++
- 1 file changed, 5 insertions(+)
-
-diff --git a/net/dccp/proto.c b/net/dccp/proto.c
-index b68168fcc06a..9d43c1f40274 100644
---- a/net/dccp/proto.c
-+++ b/net/dccp/proto.c
-@@ -259,6 +259,7 @@ int dccp_disconnect(struct sock *sk, int flags)
- {
- struct inet_connection_sock *icsk = inet_csk(sk);
- struct inet_sock *inet = inet_sk(sk);
-+ struct dccp_sock *dp = dccp_sk(sk);
- int err = 0;
- const int old_state = sk->sk_state;
-
-@@ -278,6 +279,10 @@ int dccp_disconnect(struct sock *sk, int flags)
- sk->sk_err = ECONNRESET;
-
- dccp_clear_xmit_timers(sk);
-+ ccid_hc_rx_delete(dp->dccps_hc_rx_ccid, sk);
-+ ccid_hc_tx_delete(dp->dccps_hc_tx_ccid, sk);
-+ dp->dccps_hc_rx_ccid = NULL;
-+ dp->dccps_hc_tx_ccid = NULL;
-
- __skb_queue_purge(&sk->sk_receive_queue);
- __skb_queue_purge(&sk->sk_write_queue);
---
-2.14.3
-
diff --git a/debugconfig/CONFIG_NOUVEAU_DEBUG_MMU b/debugconfig/CONFIG_NOUVEAU_DEBUG_MMU
new file mode 100644
index 0000000..9b69dee
--- /dev/null
+++ b/debugconfig/CONFIG_NOUVEAU_DEBUG_MMU
@@ -0,0 +1 @@
+CONFIG_NOUVEAU_DEBUG_MMU=y
diff --git a/drm-cma-reduce-dmesg-logs.patch b/drm-cma-reduce-dmesg-logs.patch
deleted file mode 100644
index d7252c4..0000000
--- a/drm-cma-reduce-dmesg-logs.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From patchwork Thu Oct 5 11:29:17 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 7bit
-Subject: [v2] drm/gem-cma-helper: Change the level of the allocation failure
- message
-From: Boris Brezillon <boris.brezillon(a)free-electrons.com>
-X-Patchwork-Id: 180737
-Message-Id: <20171005112917.15949-1-boris.brezillon(a)free-electrons.com>
-To: David Airlie <airlied(a)linux.ie>, Daniel Vetter <daniel(a)ffwll.ch>,
- dri-devel(a)lists.freedesktop.org
-Cc: Boris Brezillon <boris.brezillon(a)free-electrons.com>
-Date: Thu, 5 Oct 2017 13:29:17 +0200
-
-drm_gem_cma_create() prints an error message when dma_alloc_wc() fails to
-allocate the amount of memory we requested. This can lead to annoying
-error messages when CMA is only one possible source of memory for the BO
-allocation. Turn this error message into a debug one.
-
-Signed-off-by: Boris Brezillon <boris.brezillon(a)free-electrons.com>
-Reviewed-by: Daniel Vetter <daniel.vetter(a)ffwll.ch>
-Reviewed-by: Eric Engestrom <eric.engestrom(a)imgtec.com>
-Reviewed-by: Eric Anholt <eric(a)anholt.net>
----
-Changes in v2:
-- Remove __must_check attribute
----
- drivers/gpu/drm/drm_gem_cma_helper.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/drivers/gpu/drm/drm_gem_cma_helper.c b/drivers/gpu/drm/drm_gem_cma_helper.c
-index 373e33f22be4..020e7668dfab 100644
---- a/drivers/gpu/drm/drm_gem_cma_helper.c
-+++ b/drivers/gpu/drm/drm_gem_cma_helper.c
-@@ -112,7 +112,7 @@ struct drm_gem_cma_object *drm_gem_cma_create(struct drm_device *drm,
- cma_obj->vaddr = dma_alloc_wc(drm->dev, size, &cma_obj->paddr,
- GFP_KERNEL | __GFP_NOWARN);
- if (!cma_obj->vaddr) {
-- dev_err(drm->dev, "failed to allocate buffer with size %zu\n",
-+ dev_dbg(drm->dev, "failed to allocate buffer with size %zu\n",
- size);
- ret = -ENOMEM;
- goto error;
diff --git a/drm-i915-Boost-GPU-clocks-if-we-miss-the-pageflip-s-vblank.patch b/drm-i915-Boost-GPU-clocks-if-we-miss-the-pageflip-s-vblank.patch
deleted file mode 100644
index 07f8111..0000000
--- a/drm-i915-Boost-GPU-clocks-if-we-miss-the-pageflip-s-vblank.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-From patchwork Thu Aug 17 12:37:06 2017
-Content-Type: text/plain; charset="utf-8"
-MIME-Version: 1.0
-Content-Transfer-Encoding: 8bit
-Subject: drm/i915: Boost GPU clocks if we miss the pageflip's vblank
-From: Chris Wilson <chris(a)chris-wilson.co.uk>
-X-Patchwork-Id: 172204
-Message-Id: <20170817123706.6777-1-chris(a)chris-wilson.co.uk>
-To: intel-gfx(a)lists.freedesktop.org
-Cc: Daniel Vetter <daniel.vetter(a)intel.com>
-Date: Thu, 17 Aug 2017 13:37:06 +0100
-
-If we miss the current vblank because the gpu was busy, that may cause a
-jitter as the frame rate temporarily drops. We try to limit the impact
-of this by then boosting the GPU clock to deliver the frame as quickly
-as possible. Originally done in commit 6ad790c0f5ac ("drm/i915: Boost GPU
-frequency if we detect outstanding pageflips") but was never forward
-ported to atomic and finally dropped in commit fd3a40242e87 ("drm/i915:
-Rip out legacy page_flip completion/irq handling").
-
-References: https://bugs.freedesktop.org/show_bug.cgi?id=102199
-Signed-off-by: Chris Wilson <chris(a)chris-wilson.co.uk>
-Cc: Maarten Lankhorst <maarten.lankhorst(a)linux.intel.com>
-Cc: Ville Syrjälä <ville.syrjala(a)linux.intel.com>
-Cc: Daniel Vetter <daniel.vetter(a)intel.com>
-Tested-by: Lyude Paul <lyude(a)redhat.com>
-Reviewed-by: Radoslaw Szwichtenberg <radoslaw.szwichtenberg(a)intel.com>
----
- drivers/gpu/drm/i915/intel_display.c | 59 ++++++++++++++++++++++++++++++++++++
- drivers/gpu/drm/i915/intel_drv.h | 1 -
- drivers/gpu/drm/i915/intel_pm.c | 42 ++-----------------------
- 3 files changed, 62 insertions(+), 40 deletions(-)
-
-diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
-index 0e93ec201fe3..7d5b19553637 100644
---- a/drivers/gpu/drm/i915/intel_display.c
-+++ b/drivers/gpu/drm/i915/intel_display.c
-@@ -12636,6 +12636,55 @@ static const struct drm_crtc_funcs intel_crtc_funcs = {
- .set_crc_source = intel_crtc_set_crc_source,
- };
-
-+struct wait_rps_boost {
-+ struct wait_queue_entry wait;
-+
-+ struct drm_crtc *crtc;
-+ struct drm_i915_gem_request *request;
-+};
-+
-+static int do_rps_boost(struct wait_queue_entry *_wait,
-+ unsigned mode, int sync, void *key)
-+{
-+ struct wait_rps_boost *wait = container_of(_wait, typeof(*wait), wait);
-+ struct drm_i915_gem_request *rq = wait->request;
-+
-+ gen6_rps_boost(rq, NULL);
-+ i915_gem_request_put(rq);
-+
-+ drm_crtc_vblank_put(wait->crtc);
-+
-+ list_del(&wait->wait.entry);
-+ kfree(wait);
-+ return 1;
-+}
-+
-+static void add_rps_boost_after_vblank(struct drm_crtc *crtc,
-+ struct dma_fence *fence)
-+{
-+ struct wait_rps_boost *wait;
-+
-+ if (!dma_fence_is_i915(fence))
-+ return;
-+
-+ if (drm_crtc_vblank_get(crtc))
-+ return;
-+
-+ wait = kmalloc(sizeof(*wait), GFP_KERNEL);
-+ if (!wait) {
-+ drm_crtc_vblank_put(crtc);
-+ return;
-+ }
-+
-+ wait->request = to_request(dma_fence_get(fence));
-+ wait->crtc = crtc;
-+
-+ wait->wait.func = do_rps_boost;
-+ wait->wait.flags = 0;
-+
-+ add_wait_queue(drm_crtc_vblank_waitqueue(crtc), &wait->wait);
-+}
-+
- /**
- * intel_prepare_plane_fb - Prepare fb for usage on plane
- * @plane: drm plane to prepare for
-@@ -12733,12 +12782,22 @@ intel_prepare_plane_fb(struct drm_plane *plane,
- return ret;
-
- if (!new_state->fence) { /* implicit fencing */
-+ struct dma_fence *fence;
-+
- ret = i915_sw_fence_await_reservation(&intel_state->commit_ready,
- obj->resv, NULL,
- false, I915_FENCE_TIMEOUT,
- GFP_KERNEL);
- if (ret < 0)
- return ret;
-+
-+ fence = reservation_object_get_excl_rcu(obj->resv);
-+ if (fence) {
-+ add_rps_boost_after_vblank(new_state->crtc, fence);
-+ dma_fence_put(fence);
-+ }
-+ } else {
-+ add_rps_boost_after_vblank(new_state->crtc, new_state->fence);
- }
-
- return 0;
-diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
-index fa47285918f4..e092354b4d63 100644
---- a/drivers/gpu/drm/i915/intel_drv.h
-+++ b/drivers/gpu/drm/i915/intel_drv.h
-@@ -1844,7 +1844,6 @@ void gen6_rps_reset_ei(struct drm_i915_private *dev_priv);
- void gen6_rps_idle(struct drm_i915_private *dev_priv);
- void gen6_rps_boost(struct drm_i915_gem_request *rq,
- struct intel_rps_client *rps);
--void intel_queue_rps_boost_for_request(struct drm_i915_gem_request *req);
- void g4x_wm_get_hw_state(struct drm_device *dev);
- void vlv_wm_get_hw_state(struct drm_device *dev);
- void ilk_wm_get_hw_state(struct drm_device *dev);
-diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
-index ed662937ec3c..c9fa2eb1903c 100644
---- a/drivers/gpu/drm/i915/intel_pm.c
-+++ b/drivers/gpu/drm/i915/intel_pm.c
-@@ -6169,6 +6169,7 @@ void gen6_rps_boost(struct drm_i915_gem_request *rq,
- struct intel_rps_client *rps)
- {
- struct drm_i915_private *i915 = rq->i915;
-+ unsigned long flags;
- bool boost;
-
- /* This is intentionally racy! We peek at the state here, then
-@@ -6178,13 +6179,13 @@ void gen6_rps_boost(struct drm_i915_gem_request *rq,
- return;
-
- boost = false;
-- spin_lock_irq(&rq->lock);
-+ spin_lock_irqsave(&rq->lock, flags);
- if (!rq->waitboost && !i915_gem_request_completed(rq)) {
- atomic_inc(&i915->rps.num_waiters);
- rq->waitboost = true;
- boost = true;
- }
-- spin_unlock_irq(&rq->lock);
-+ spin_unlock_irqrestore(&rq->lock, flags);
- if (!boost)
- return;
-
-@@ -9132,43 +9133,6 @@ int intel_freq_opcode(struct drm_i915_private *dev_priv, int val)
- return DIV_ROUND_CLOSEST(val, GT_FREQUENCY_MULTIPLIER);
- }
-
--struct request_boost {
-- struct work_struct work;
-- struct drm_i915_gem_request *req;
--};
--
--static void __intel_rps_boost_work(struct work_struct *work)
--{
-- struct request_boost *boost = container_of(work, struct request_boost, work);
-- struct drm_i915_gem_request *req = boost->req;
--
-- if (!i915_gem_request_completed(req))
-- gen6_rps_boost(req, NULL);
--
-- i915_gem_request_put(req);
-- kfree(boost);
--}
--
--void intel_queue_rps_boost_for_request(struct drm_i915_gem_request *req)
--{
-- struct request_boost *boost;
--
-- if (req == NULL || INTEL_GEN(req->i915) < 6)
-- return;
--
-- if (i915_gem_request_completed(req))
-- return;
--
-- boost = kmalloc(sizeof(*boost), GFP_ATOMIC);
-- if (boost == NULL)
-- return;
--
-- boost->req = i915_gem_request_get(req);
--
-- INIT_WORK(&boost->work, __intel_rps_boost_work);
-- queue_work(req->i915->wq, &boost->work);
--}
--
- void intel_pm_setup(struct drm_i915_private *dev_priv)
- {
- mutex_init(&dev_priv->rps.hw_lock);
diff --git a/efi-lockdown.patch b/efi-lockdown.patch
index 4ac65fd..c99d85c 100644
--- a/efi-lockdown.patch
+++ b/efi-lockdown.patch
@@ -205,17 +205,17 @@ index a65cf544686a..863f77582c09 100644
#include <linux/pfn.h>
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
-index 443151de90c6..45a1f5460805 100644
+index 39ddd9a73feb..0afeef1672bc 100644
--- a/drivers/input/misc/uinput.c
+++ b/drivers/input/misc/uinput.c
-@@ -408,6 +408,7 @@ static int uinput_allocate_device(struct uinput_device *udev)
- if (!udev->dev)
- return -ENOMEM;
-
-+ udev->dev->flags |= INPUTDEV_FLAGS_SYNTHETIC;
- udev->dev->event = uinput_dev_event;
+@@ -362,6 +362,7 @@ static int uinput_create_device(struct uinput_device *udev)
+ dev->flush = uinput_dev_flush;
+ }
+
++ dev->flags |= INPUTDEV_FLAGS_SYNTHETIC;
+ dev->event = uinput_dev_event;
+
input_set_drvdata(udev->dev, udev);
-
diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c
index 3ffc1ce29023..8b766dbad6dd 100644
--- a/drivers/tty/sysrq.c
@@ -1403,32 +1403,33 @@ cc: Matthew Garrett <matthew.garrett(a)nebula.com>
cc: Thomas Gleixner <tglx(a)linutronix.de>
---
fs/debugfs/file.c | 6 ++++++
- 1 file changed, 6 insertions(+)
+ 1 file changed, 6 insertions(+)
diff --git a/fs/debugfs/file.c b/fs/debugfs/file.c
-index 6dabc4a10396..32b5168a7e91 100644
+index cd12e6576b48..097be2a59c51 100644
--- a/fs/debugfs/file.c
+++ b/fs/debugfs/file.c
-@@ -103,6 +103,9 @@ static int open_proxy_open(struct inode *inode, struct file *filp)
+@@ -142,6 +142,10 @@ static int open_proxy_open(struct inode *inode, struct file *filp)
const struct file_operations *real_fops = NULL;
- int srcu_idx, r;
-
+ int r;
+
+ if (kernel_is_locked_down("debugfs"))
+ return -EPERM;
+
- r = debugfs_use_file_start(dentry, &srcu_idx);
- if (r) {
- r = -ENOENT;
-@@ -232,6 +235,9 @@ static int full_proxy_open(struct inode *inode, struct file *filp)
++
+ r = debugfs_file_get(dentry);
+ if (r)
+ return r == -EIO ? -ENOENT : r;
+@@ -267,6 +271,9 @@ static int full_proxy_open(struct inode *inode, struct file *filp)
struct file_operations *proxy_fops = NULL;
- int srcu_idx, r;
-
+ int r;
+
+ if (kernel_is_locked_down("debugfs"))
+ return -EPERM;
+
- r = debugfs_use_file_start(dentry, &srcu_idx);
- if (r) {
- r = -ENOENT;
+ r = debugfs_file_get(dentry);
+ if (r)
+ return r == -EIO ? -ENOENT : r;
--
2.13.6
diff --git a/kernel-aarch64-debug.config b/kernel-aarch64-debug.config
index 096a878..a3152a9 100644
--- a/kernel-aarch64-debug.config
+++ b/kernel-aarch64-debug.config
@@ -72,8 +72,6 @@ CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_WATCHDOG=y
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -175,7 +173,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -212,6 +209,7 @@ CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCM_53573 is not set
# CONFIG_ARCH_BCM_63XX is not set
# CONFIG_ARCH_BCM_CYGNUS is not set
+# CONFIG_ARCH_BCM_HR2 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCM_NSP is not set
CONFIG_ARCH_BCM=y
@@ -233,6 +231,7 @@ CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_SPRD is not set
# CONFIG_ARCH_STRATIX10 is not set
CONFIG_ARCH_SUNXI=y
+CONFIG_ARCH_SYNQUACER=y
CONFIG_ARCH_TEGRA_132_SOC=y
CONFIG_ARCH_TEGRA_186_SOC=y
CONFIG_ARCH_TEGRA_210_SOC=y
@@ -264,6 +263,7 @@ CONFIG_ARM64_PTDUMP_DEBUGFS=y
CONFIG_ARM64_PTDUMP=y
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
# CONFIG_ARM64_RELOC_TEST is not set
+CONFIG_ARM64_SVE=y
CONFIG_ARM64_SW_TTBR0_PAN=y
CONFIG_ARM64_UAO=y
CONFIG_ARM64_VA_BITS=48
@@ -305,6 +305,7 @@ CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SMMU_V3=y
CONFIG_ARM_SMMU=y
CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA124_CPUFREQ=m
CONFIG_ARM_TEGRA186_CPUFREQ=m
# CONFIG_ARM_TEGRA20_CPUFREQ is not set
@@ -518,6 +519,7 @@ CONFIG_BH1750=m
CONFIG_BIG_KEYS=y
# CONFIG_BIG_LITTLE is not set
# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_ELF_FDPIC is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_FLAT is not set
CONFIG_BINFMT_MISC=m
@@ -588,6 +590,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_BOOT_PRINTK_DELAY=y
@@ -650,6 +653,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -684,6 +688,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
CONFIG_BTT=y
@@ -820,6 +825,8 @@ CONFIG_CHARGER_QCOM_SMBB=m
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -833,6 +840,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -935,11 +943,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
CONFIG_CPU_THERMAL=y
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -1067,6 +1077,7 @@ CONFIG_CRYPTO_SHA512_ARM64=m
CONFIG_CRYPTO_SHA512_ARM=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1116,6 +1127,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1240,8 +1252,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1249,6 +1261,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1276,7 +1291,8 @@ CONFIG_DRM_HDLCD=m
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_HISI_KIRIN=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1308,10 +1324,14 @@ CONFIG_DRM_NXP_PTN3460=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SIMPLE=m
@@ -1327,9 +1347,12 @@ CONFIG_DRM_RADEON_USERPTR=y
CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_STM is not set
+CONFIG_DRM_SUN4I_HDMI_CEC=y
+CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN8I_MIXER=m
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
@@ -1347,6 +1370,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTC=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1498,7 +1522,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1722,7 +1745,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1747,10 +1769,12 @@ CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
CONFIG_GPIO_MAX77620=m
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1758,7 +1782,7 @@ CONFIG_GPIO_MAX77620=m
CONFIG_GPIO_MVEBU=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA953X=y
-# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_PCF857X=m
# CONFIG_GPIO_PCH is not set
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
@@ -1768,6 +1792,7 @@ CONFIG_GPIO_PL061=y
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
CONFIG_GPIO_TEGRA=y
CONFIG_GPIO_THUNDERX=m
# CONFIG_GPIO_TPIC2810 is not set
@@ -1786,6 +1811,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1939,7 +1965,9 @@ CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_W6692=y
CONFIG_HISI_KIRIN_DW_DSI=m
CONFIG_HISILICON_ERRATUM_161010101=y
+CONFIG_HISILICON_ERRATUM_161600802=y
CONFIG_HISILICON_IRQ_MBIGEN=y
+CONFIG_HISI_PMU=y
CONFIG_HISI_THERMAL=m
CONFIG_HIST_TRIGGERS=y
# CONFIG_HMC6352 is not set
@@ -1991,8 +2019,8 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM_XGENE=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
CONFIG_HWSPINLOCK_QCOM=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -2118,6 +2146,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_IIO_CROS_EC_SENSORS_CORE=m
@@ -2271,6 +2300,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2305,7 +2335,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2324,6 +2354,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2432,13 +2463,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2450,13 +2476,11 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2469,13 +2493,12 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2644,7 +2667,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2656,8 +2678,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KUSER_HELPERS=y
@@ -2732,6 +2752,7 @@ CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_CPU=y
@@ -2777,10 +2798,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2827,7 +2846,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2854,6 +2872,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2879,14 +2898,12 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2952,7 +2969,11 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MESON_EFUSE=m
CONFIG_MESON_GXBB_WATCHDOG=m
CONFIG_MESON_GXL_PHY=m
+# CONFIG_MESON_GX_PM_DOMAINS is not set
CONFIG_MESON_GX_SOCINFO=y
+CONFIG_MESON_IRQ_GPIO=y
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESON_SARADC=m
CONFIG_MESON_SM=y
# CONFIG_MESON_WATCHDOG is not set
@@ -3085,6 +3106,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3132,6 +3154,7 @@ CONFIG_MMC_DW_PCI=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_ROCKCHIP=m
CONFIG_MMC_MESON_GX=m
+CONFIG_MMC_MESON_MX_SDIO=m
# CONFIG_MMC_MTK is not set
CONFIG_MMC_MVSDIO=m
CONFIG_MMC_QCOM_DML=y
@@ -3140,13 +3163,14 @@ CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI_ACPI=m
CONFIG_MMC_SDHCI_CADENCE=m
-# CONFIG_MMC_SDHCI_F_SDH30 is not set
+CONFIG_MMC_SDHCI_F_SDH30=m
CONFIG_MMC_SDHCI_IPROC=m
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_MSM=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV3=m
@@ -3282,6 +3306,7 @@ CONFIG_MTD_PHYSMAP_OF_VERSATILE=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3515,6 +3540,7 @@ CONFIG_NETROM=m
CONFIG_NET_SB1000=y
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3831,14 +3857,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=256
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -3846,7 +3873,9 @@ CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SUNXI_SID=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3877,7 +3906,6 @@ CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMAP_GPMC_DEBUG is not set
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3893,6 +3921,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3984,6 +4013,7 @@ CONFIG_PCIE_DW_HOST=y
# CONFIG_PCIE_DW_PLAT is not set
CONFIG_PCIE_DW=y
CONFIG_PCIE_ECRC=y
+CONFIG_PCIE_HISI_STB=y
CONFIG_PCIE_KIRIN=y
# CONFIG_PCI_ENDPOINT is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
@@ -4080,6 +4110,7 @@ CONFIG_PINCTRL_AMD=y
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BROXTON is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ4019 is not set
@@ -4088,6 +4119,10 @@ CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_MAX77620=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
+# CONFIG_PINCTRL_MESON8B is not set
+# CONFIG_PINCTRL_MESON8 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
# CONFIG_PINCTRL_MSM8660 is not set
CONFIG_PINCTRL_MSM8916=y
# CONFIG_PINCTRL_MSM8960 is not set
@@ -4173,6 +4208,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4228,6 +4264,7 @@ CONFIG_QCOM_COINCELL=m
CONFIG_QCOM_EMAC=m
# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set
CONFIG_QCOM_FALKOR_ERRATUM_1009=y
+CONFIG_QCOM_FALKOR_ERRATUM_E1041=y
# CONFIG_QCOM_GLINK_SSR is not set
CONFIG_QCOM_GSBI=y
CONFIG_QCOM_HIDMA=m
@@ -4239,6 +4276,8 @@ CONFIG_QCOM_L3_PMU=y
CONFIG_QCOM_Q6V5_PIL=m
CONFIG_QCOM_QDF2400_ERRATUM_0065=y
CONFIG_QCOM_QFPROM=m
+CONFIG_QCOM_RMTFS_MEM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SMEM=m
CONFIG_QCOM_SMP2P=m
@@ -4411,13 +4450,16 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
CONFIG_RESET_HISI=y
# CONFIG_RESET_HSDK_V1 is not set
+CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SCI is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4445,6 +4487,7 @@ CONFIG_ROCKCHIP_EFUSE=m
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ROCKCHIP_PHY=m
CONFIG_ROCKCHIP_PM_DOMAINS=y
@@ -4460,6 +4503,7 @@ CONFIG_RPMSG=m
CONFIG_RPMSG_QCOM_GLINK_RPM=m
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
CONFIG_RPMSG_QCOM_SMD=m
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4545,6 +4589,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
# CONFIG_RTC_DRV_PL030 is not set
@@ -4623,6 +4668,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
# CONFIG_SATA_INIC162X is not set
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
# CONFIG_SATA_NV is not set
CONFIG_SATA_PMP=y
@@ -4885,8 +4931,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -5032,9 +5080,8 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-# CONFIG_SIMPLE_PM_BUS is not set
+CONFIG_SIMPLE_PM_BUS=y
CONFIG_SIS190=m
CONFIG_SIS900=m
# CONFIG_SKFP is not set
@@ -5058,7 +5105,6 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_SMC911X=m
CONFIG_SMC91X=m
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -5228,6 +5274,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
CONFIG_SND_SOC_APQ8016_SBC=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
@@ -5405,7 +5452,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_SPARSE_RCU_POINTER=y
@@ -5611,6 +5657,7 @@ CONFIG_TEGRA20_APB_DMA=y
CONFIG_TEGRA210_ADMA=y
CONFIG_TEGRA_ACONNECT=m
CONFIG_TEGRA_AHB=y
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEGRA_BPMP=y
CONFIG_TEGRA_GMI=m
CONFIG_TEGRA_HOST1X_FIREWALL=y
@@ -5622,12 +5669,12 @@ CONFIG_TEGRA_MC=y
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5676,6 +5723,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5702,8 +5750,6 @@ CONFIG_TMP006=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5725,11 +5771,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5743,6 +5791,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5776,6 +5825,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5804,8 +5854,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5910,7 +5962,6 @@ CONFIG_USB_DWC3_ULPI=y
CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_MSM=m
# CONFIG_USB_EHCI_MV is not set
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TEGRA=m
@@ -5929,6 +5980,7 @@ CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_GADGET_VBUS_DRAW=100
@@ -6005,7 +6057,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -6029,7 +6080,6 @@ CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
CONFIG_USB_MON=y
CONFIG_USB_MR800=m
-CONFIG_USB_MSM_OTG=m
CONFIG_USB_MUSB_DSPS=m
CONFIG_USB_MUSB_DUAL_ROLE=y
CONFIG_USB_MUSB_HDRC=m
@@ -6083,7 +6133,6 @@ CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_PWC=m
# CONFIG_USB_PXA27X is not set
-CONFIG_USB_QCOM_8X16_PHY=m
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_R8A66597 is not set
CONFIG_USB_RAINSHADOW_CEC=m
@@ -6261,7 +6310,6 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6320,6 +6368,7 @@ CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_QCOM_CAMSS=m
CONFIG_VIDEO_QCOM_VENUS=m
+CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_SAA6588=m
CONFIG_VIDEO_SAA7134_ALSA=m
CONFIG_VIDEO_SAA7134_DVB=m
@@ -6337,6 +6386,7 @@ CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_TM6000=m
@@ -6379,11 +6429,11 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMAP_STACK=y
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6419,6 +6469,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6446,7 +6497,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6489,6 +6539,7 @@ CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_MCELOG_LEGACY=y
CONFIG_X86_PTDUMP=y
# CONFIG_XEN is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -6496,6 +6547,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-aarch64.config b/kernel-aarch64.config
index adc683b..00f82de 100644
--- a/kernel-aarch64.config
+++ b/kernel-aarch64.config
@@ -72,8 +72,6 @@ CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_WATCHDOG=y
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -175,7 +173,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -212,6 +209,7 @@ CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCM_53573 is not set
# CONFIG_ARCH_BCM_63XX is not set
# CONFIG_ARCH_BCM_CYGNUS is not set
+# CONFIG_ARCH_BCM_HR2 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCM_NSP is not set
CONFIG_ARCH_BCM=y
@@ -233,6 +231,7 @@ CONFIG_ARCH_SEATTLE=y
# CONFIG_ARCH_SPRD is not set
# CONFIG_ARCH_STRATIX10 is not set
CONFIG_ARCH_SUNXI=y
+CONFIG_ARCH_SYNQUACER=y
CONFIG_ARCH_TEGRA_132_SOC=y
CONFIG_ARCH_TEGRA_186_SOC=y
CONFIG_ARCH_TEGRA_210_SOC=y
@@ -264,6 +263,7 @@ CONFIG_ARM64_PTDUMP_DEBUGFS=y
# CONFIG_ARM64_PTDUMP is not set
# CONFIG_ARM64_RANDOMIZE_TEXT_OFFSET is not set
# CONFIG_ARM64_RELOC_TEST is not set
+CONFIG_ARM64_SVE=y
CONFIG_ARM64_SW_TTBR0_PAN=y
CONFIG_ARM64_UAO=y
CONFIG_ARM64_VA_BITS=48
@@ -305,6 +305,7 @@ CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SMMU_V3=y
CONFIG_ARM_SMMU=y
CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA124_CPUFREQ=m
CONFIG_ARM_TEGRA186_CPUFREQ=m
# CONFIG_ARM_TEGRA20_CPUFREQ is not set
@@ -518,6 +519,7 @@ CONFIG_BH1750=m
CONFIG_BIG_KEYS=y
# CONFIG_BIG_LITTLE is not set
# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_ELF_FDPIC is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_FLAT is not set
CONFIG_BINFMT_MISC=m
@@ -588,6 +590,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
CONFIG_BOOT_PRINTK_DELAY=y
@@ -650,6 +653,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -684,6 +688,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
CONFIG_BTT=y
@@ -820,6 +825,8 @@ CONFIG_CHARGER_QCOM_SMBB=m
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -833,6 +840,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -935,10 +943,12 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
CONFIG_CPU_THERMAL=y
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -1066,6 +1076,7 @@ CONFIG_CRYPTO_SHA512_ARM64=m
CONFIG_CRYPTO_SHA512_ARM=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1115,6 +1126,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1230,8 +1242,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1239,6 +1251,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1266,7 +1281,8 @@ CONFIG_DRM_HDLCD=m
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_HISI_KIRIN=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1298,10 +1314,14 @@ CONFIG_DRM_NXP_PTN3460=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SIMPLE=m
@@ -1317,9 +1337,12 @@ CONFIG_DRM_RADEON_USERPTR=y
CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_STM is not set
+CONFIG_DRM_SUN4I_HDMI_CEC=y
+CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN8I_MIXER=m
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TEGRA_DEBUG is not set
@@ -1337,6 +1360,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTC=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1488,7 +1512,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1705,7 +1728,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1730,10 +1752,12 @@ CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
CONFIG_GPIO_MAX77620=m
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1741,7 +1765,7 @@ CONFIG_GPIO_MAX77620=m
CONFIG_GPIO_MVEBU=y
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCA953X=y
-# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_PCF857X=m
# CONFIG_GPIO_PCH is not set
CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_PISOSR is not set
@@ -1751,6 +1775,7 @@ CONFIG_GPIO_PL061=y
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
CONFIG_GPIO_TEGRA=y
CONFIG_GPIO_THUNDERX=m
# CONFIG_GPIO_TPIC2810 is not set
@@ -1769,6 +1794,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1922,7 +1948,9 @@ CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_W6692=y
CONFIG_HISI_KIRIN_DW_DSI=m
CONFIG_HISILICON_ERRATUM_161010101=y
+CONFIG_HISILICON_ERRATUM_161600802=y
CONFIG_HISILICON_IRQ_MBIGEN=y
+CONFIG_HISI_PMU=y
CONFIG_HISI_THERMAL=m
CONFIG_HIST_TRIGGERS=y
# CONFIG_HMC6352 is not set
@@ -1974,8 +2002,8 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM_XGENE=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
CONFIG_HWSPINLOCK_QCOM=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -2101,6 +2129,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_IIO_CROS_EC_SENSORS_CORE=m
@@ -2254,6 +2283,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2288,7 +2318,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2307,6 +2337,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2415,13 +2446,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2433,13 +2459,11 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2452,13 +2476,12 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2625,7 +2648,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2637,8 +2659,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KUSER_HELPERS=y
@@ -2713,6 +2733,7 @@ CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_CPU=y
@@ -2758,10 +2779,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2808,7 +2827,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2835,6 +2853,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2859,14 +2878,12 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2932,7 +2949,11 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MESON_EFUSE=m
CONFIG_MESON_GXBB_WATCHDOG=m
CONFIG_MESON_GXL_PHY=m
+# CONFIG_MESON_GX_PM_DOMAINS is not set
CONFIG_MESON_GX_SOCINFO=y
+CONFIG_MESON_IRQ_GPIO=y
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESON_SARADC=m
CONFIG_MESON_SM=y
# CONFIG_MESON_WATCHDOG is not set
@@ -3065,6 +3086,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3112,6 +3134,7 @@ CONFIG_MMC_DW_PCI=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_ROCKCHIP=m
CONFIG_MMC_MESON_GX=m
+CONFIG_MMC_MESON_MX_SDIO=m
# CONFIG_MMC_MTK is not set
CONFIG_MMC_MVSDIO=m
CONFIG_MMC_QCOM_DML=y
@@ -3120,13 +3143,14 @@ CONFIG_MMC_REALTEK_USB=m
CONFIG_MMC_RICOH_MMC=y
CONFIG_MMC_SDHCI_ACPI=m
CONFIG_MMC_SDHCI_CADENCE=m
-# CONFIG_MMC_SDHCI_F_SDH30 is not set
+CONFIG_MMC_SDHCI_F_SDH30=m
CONFIG_MMC_SDHCI_IPROC=m
CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_MSM=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV3=m
@@ -3261,6 +3285,7 @@ CONFIG_MTD_PHYSMAP_OF_VERSATILE=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3494,6 +3519,7 @@ CONFIG_NETROM=m
CONFIG_NET_SB1000=y
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3810,14 +3836,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=256
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -3825,7 +3852,9 @@ CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SUNXI_SID=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3856,7 +3885,6 @@ CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMAP_GPMC_DEBUG is not set
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3872,6 +3900,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3963,6 +3992,7 @@ CONFIG_PCIE_DW_HOST=y
# CONFIG_PCIE_DW_PLAT is not set
CONFIG_PCIE_DW=y
CONFIG_PCIE_ECRC=y
+CONFIG_PCIE_HISI_STB=y
CONFIG_PCIE_KIRIN=y
# CONFIG_PCI_ENDPOINT is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
@@ -4059,6 +4089,7 @@ CONFIG_PINCTRL_AMD=y
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BROXTON is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_CHERRYVIEW is not set
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ4019 is not set
@@ -4067,6 +4098,10 @@ CONFIG_PINCTRL_AMD=y
CONFIG_PINCTRL_MAX77620=m
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
+# CONFIG_PINCTRL_MESON8B is not set
+# CONFIG_PINCTRL_MESON8 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
# CONFIG_PINCTRL_MSM8660 is not set
CONFIG_PINCTRL_MSM8916=y
# CONFIG_PINCTRL_MSM8960 is not set
@@ -4152,6 +4187,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4206,6 +4242,7 @@ CONFIG_QCOM_COINCELL=m
CONFIG_QCOM_EMAC=m
# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set
CONFIG_QCOM_FALKOR_ERRATUM_1009=y
+CONFIG_QCOM_FALKOR_ERRATUM_E1041=y
# CONFIG_QCOM_GLINK_SSR is not set
CONFIG_QCOM_GSBI=y
CONFIG_QCOM_HIDMA=m
@@ -4217,6 +4254,8 @@ CONFIG_QCOM_L3_PMU=y
CONFIG_QCOM_Q6V5_PIL=m
CONFIG_QCOM_QDF2400_ERRATUM_0065=y
CONFIG_QCOM_QFPROM=m
+CONFIG_QCOM_RMTFS_MEM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SMEM=m
CONFIG_QCOM_SMP2P=m
@@ -4326,7 +4365,7 @@ CONFIG_RD_XZ=y
# CONFIG_READABLE_ASM is not set
CONFIG_REALTEK_AUTOPM=y
CONFIG_REALTEK_PHY=m
-# CONFIG_REFCOUNT_FULL is not set
+CONFIG_REFCOUNT_FULL=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP_SPMI=y
CONFIG_REGMAP=y
@@ -4389,13 +4428,16 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
CONFIG_RESET_HISI=y
# CONFIG_RESET_HSDK_V1 is not set
+CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SCI is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4423,6 +4465,7 @@ CONFIG_ROCKCHIP_EFUSE=m
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ROCKCHIP_PHY=m
CONFIG_ROCKCHIP_PM_DOMAINS=y
@@ -4438,6 +4481,7 @@ CONFIG_RPMSG=m
CONFIG_RPMSG_QCOM_GLINK_RPM=m
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
CONFIG_RPMSG_QCOM_SMD=m
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4523,6 +4567,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
# CONFIG_RTC_DRV_PL030 is not set
@@ -4601,6 +4646,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
# CONFIG_SATA_INIC162X is not set
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
# CONFIG_SATA_NV is not set
CONFIG_SATA_PMP=y
@@ -4863,8 +4909,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -5010,9 +5058,8 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-# CONFIG_SIMPLE_PM_BUS is not set
+CONFIG_SIMPLE_PM_BUS=y
CONFIG_SIS190=m
CONFIG_SIS900=m
# CONFIG_SKFP is not set
@@ -5036,7 +5083,6 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_SMC911X=m
CONFIG_SMC91X=m
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -5205,6 +5251,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
CONFIG_SND_SOC_APQ8016_SBC=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
@@ -5382,7 +5429,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
CONFIG_SPARSE_RCU_POINTER=y
@@ -5588,6 +5634,7 @@ CONFIG_TEGRA20_APB_DMA=y
CONFIG_TEGRA210_ADMA=y
CONFIG_TEGRA_ACONNECT=m
CONFIG_TEGRA_AHB=y
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEGRA_BPMP=y
CONFIG_TEGRA_GMI=m
CONFIG_TEGRA_HOST1X_FIREWALL=y
@@ -5599,12 +5646,12 @@ CONFIG_TEGRA_MC=y
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5653,6 +5700,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5679,8 +5727,6 @@ CONFIG_TMP006=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5702,11 +5748,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5720,6 +5768,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5753,6 +5802,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5781,8 +5831,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5887,7 +5939,6 @@ CONFIG_USB_DWC3_ULPI=y
CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_MSM=m
# CONFIG_USB_EHCI_MV is not set
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TEGRA=m
@@ -5906,6 +5957,7 @@ CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_GADGET_VBUS_DRAW=100
@@ -5982,7 +6034,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -6006,7 +6057,6 @@ CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
CONFIG_USB_MON=y
CONFIG_USB_MR800=m
-CONFIG_USB_MSM_OTG=m
CONFIG_USB_MUSB_DSPS=m
CONFIG_USB_MUSB_DUAL_ROLE=y
CONFIG_USB_MUSB_HDRC=m
@@ -6060,7 +6110,6 @@ CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_PWC=m
# CONFIG_USB_PXA27X is not set
-CONFIG_USB_QCOM_8X16_PHY=m
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_R8A66597 is not set
CONFIG_USB_RAINSHADOW_CEC=m
@@ -6238,7 +6287,6 @@ CONFIG_VGACON_SOFT_SCROLLBACK=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6297,6 +6345,7 @@ CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_QCOM_CAMSS=m
CONFIG_VIDEO_QCOM_VENUS=m
+CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_SAA6588=m
CONFIG_VIDEO_SAA7134_ALSA=m
CONFIG_VIDEO_SAA7134_DVB=m
@@ -6314,6 +6363,7 @@ CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_TM6000=m
@@ -6356,11 +6406,11 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMAP_STACK=y
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6396,6 +6446,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6423,7 +6474,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6466,6 +6516,7 @@ CONFIG_WM8350_WATCHDOG=m
CONFIG_X86_MCELOG_LEGACY=y
# CONFIG_X86_PTDUMP is not set
# CONFIG_XEN is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -6473,6 +6524,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-armv7hl-debug.config b/kernel-armv7hl-debug.config
index 5afccdd..44809c3 100644
--- a/kernel-armv7hl-debug.config
+++ b/kernel-armv7hl-debug.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -153,7 +151,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -195,6 +192,7 @@ CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCM_53573 is not set
# CONFIG_ARCH_BCM_63XX is not set
# CONFIG_ARCH_BCM_CYGNUS is not set
+# CONFIG_ARCH_BCM_HR2 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCM_NSP is not set
CONFIG_ARCH_BCM=y
@@ -326,6 +324,7 @@ CONFIG_ARM_SCPI_POWER_DOMAIN=m
CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SMMU=y
CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_STI_CPUFREQ=m
CONFIG_ARM_TEGRA124_CPUFREQ=m
# CONFIG_ARM_TEGRA20_CPUFREQ is not set
@@ -559,6 +558,7 @@ CONFIG_BH1750=m
CONFIG_BIG_KEYS=y
CONFIG_BIG_LITTLE=y
# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_ELF_FDPIC is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_FLAT is not set
CONFIG_BINFMT_MISC=m
@@ -631,6 +631,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -691,6 +692,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -725,6 +727,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -865,6 +868,8 @@ CONFIG_CHARGER_SMB347=m
CONFIG_CHARGER_TPS65090=m
CONFIG_CHARGER_TPS65217=m
CONFIG_CHARGER_TWL4030=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -878,6 +883,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -977,12 +983,14 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
CONFIG_CPU_SW_DOMAIN_PAN=y
CONFIG_CPU_THERMAL=y
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -1120,6 +1128,7 @@ CONFIG_CRYPTO_SHA512_ARM64=m
CONFIG_CRYPTO_SHA512_ARM=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1171,6 +1180,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1303,9 +1313,9 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DOVE_THERMAL=m
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1313,6 +1323,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1359,7 +1372,8 @@ CONFIG_DRM_HDLCD=m
# CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1413,10 +1427,14 @@ CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SIMPLE=m
@@ -1432,12 +1450,13 @@ CONFIG_DRM_RADEON_USERPTR=y
CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
CONFIG_DRM_STI=m
# CONFIG_DRM_STM is not set
CONFIG_DRM_SUN4I_BACKEND=m
-# CONFIG_DRM_SUN4I_HDMI_CEC is not set
+CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN4I=m
CONFIG_DRM_SUN8I_MIXER=m
@@ -1450,6 +1469,7 @@ CONFIG_DRM_TILCDC_SLAVE_COMPAT=y
CONFIG_DRM_TINYDRM=m
CONFIG_DRM_TI_TFP410=m
CONFIG_DRM_TOSHIBA_TC358767=m
+CONFIG_DRM_TVE200=m
CONFIG_DRM_UDL=m
# CONFIG_DRM_VBOXVIDEO is not set
CONFIG_DRM_VC4_HDMI_CEC=y
@@ -1459,6 +1479,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTC=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1612,7 +1633,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1848,7 +1868,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1875,9 +1894,11 @@ CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
CONFIG_GPIO_MAX7301=m
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
CONFIG_GPIO_MC33880=m
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1898,6 +1919,7 @@ CONFIG_GPIO_STMPE=y
# CONFIG_GPIO_SX150X is not set
CONFIG_GPIO_SYSCON=m
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
CONFIG_GPIO_TEGRA=y
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS65218=m
@@ -1922,6 +1944,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
CONFIG_GS_FPGABOOT=m
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -2078,6 +2101,7 @@ CONFIG_HISAX_TELES_CS=m
CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_W6692=y
# CONFIG_HISILICON_IRQ_MBIGEN is not set
+CONFIG_HISI_PMU=y
CONFIG_HIST_TRIGGERS=y
# CONFIG_HMC6352 is not set
# CONFIG_HMC_DRV is not set
@@ -2127,9 +2151,9 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
CONFIG_HWSPINLOCK_OMAP=m
CONFIG_HWSPINLOCK_QCOM=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -2255,6 +2279,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_IIO_CROS_EC_SENSORS_CORE=m
@@ -2427,6 +2452,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2461,7 +2487,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2480,6 +2506,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2588,13 +2615,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2606,13 +2628,11 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_CROSSBAR=y
@@ -2627,13 +2647,12 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2821,7 +2840,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2833,8 +2851,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
CONFIG_KS8851=m
CONFIG_KS8851_MLL=m
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KUSER_HELPERS=y
@@ -2914,6 +2930,7 @@ CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_SYSCON=y
CONFIG_LEDS_TCA6507=m
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_CPU=y
@@ -2958,10 +2975,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -3008,7 +3023,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -3057,6 +3071,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -3080,7 +3095,6 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -3088,7 +3102,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
CONFIG_MCPM=y
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -3153,7 +3166,11 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MESON_EFUSE=m
# CONFIG_MESON_GXBB_WATCHDOG is not set
# CONFIG_MESON_GXL_PHY is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
CONFIG_MESON_GX_SOCINFO=y
+CONFIG_MESON_IRQ_GPIO=y
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESON_SARADC=m
CONFIG_MESON_SM=y
CONFIG_MESON_WATCHDOG=m
@@ -3289,6 +3306,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3335,6 +3353,7 @@ CONFIG_MMC_DW_PCI=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_ROCKCHIP=m
# CONFIG_MMC_MESON_GX is not set
+CONFIG_MMC_MESON_MX_SDIO=m
# CONFIG_MMC_MTK is not set
CONFIG_MMC_MVSDIO=m
CONFIG_MMC_MXC=m
@@ -3355,6 +3374,7 @@ CONFIG_MMC_SDHCI_MSM=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
CONFIG_MMC_SDHCI_OF_ESDHC=m
+CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV2=m
@@ -3521,6 +3541,7 @@ CONFIG_MTD_PHYSMAP_OF_VERSATILE=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
CONFIG_MTD_SPINAND_MT29F=m
CONFIG_MTD_SPINAND_ONDIEECC=y
@@ -3760,6 +3781,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -4077,14 +4099,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NVEC_PAZ00=y
@@ -4093,7 +4116,9 @@ CONFIG_NVME_FC=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM_IMX_OCOTP=m
CONFIG_NVMEM=m
+# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SUNXI_SID=m
+CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_RDMA is not set
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -4125,7 +4150,6 @@ CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set
# CONFIG_OMAP2_DSS_DEBUGFS is not set
# CONFIG_OMAP2_DSS_DEBUG is not set
@@ -4143,6 +4167,7 @@ CONFIG_OMAP_32K_TIMER=y
# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
# CONFIG_OMAP3_THERMAL is not set
+CONFIG_OMAP4_DSS_HDMI_CEC=y
CONFIG_OMAP4_DSS_HDMI=y
CONFIG_OMAP4_THERMAL=y
CONFIG_OMAP5_DSS_HDMI=y
@@ -4178,6 +4203,7 @@ CONFIG_ORION_WATCHDOG=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -4274,6 +4300,7 @@ CONFIG_PCIE_DW_HOST=y
# CONFIG_PCIE_DW_PLAT is not set
CONFIG_PCIE_DW=y
CONFIG_PCIE_ECRC=y
+CONFIG_PCIE_HISI_STB=y
# CONFIG_PCI_ENDPOINT is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
CONFIG_PCIEPORTBUS=y
@@ -4298,6 +4325,7 @@ CONFIG_PCI_PRI=y
CONFIG_PCI_STUB=y
CONFIG_PCI_SW_SWITCHTEC=m
CONFIG_PCI_TEGRA=y
+CONFIG_PCI_V3_SEMI=y
CONFIG_PCI=y
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_3C589=m
@@ -4379,6 +4407,7 @@ CONFIG_PINCTRL_AS3722=y
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BROXTON is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_DOVE=y
# CONFIG_PINCTRL_GEMINILAKE is not set
@@ -4388,6 +4417,10 @@ CONFIG_PINCTRL_IMX6SL=y
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
+# CONFIG_PINCTRL_MESON8B is not set
+# CONFIG_PINCTRL_MESON8 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_MSM8660=m
CONFIG_PINCTRL_MSM8916=m
CONFIG_PINCTRL_MSM8960=m
@@ -4482,6 +4515,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4555,6 +4589,8 @@ CONFIG_QCOM_PM8XXX_XOADC=m
CONFIG_QCOM_PM=y
CONFIG_QCOM_Q6V5_PIL=m
CONFIG_QCOM_QFPROM=m
+CONFIG_QCOM_RMTFS_MEM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SMEM=m
CONFIG_QCOM_SMP2P=m
@@ -4749,12 +4785,15 @@ CONFIG_REISERFS_PROC_INFO=y
CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
# CONFIG_RESET_HSDK_V1 is not set
+CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SCI is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4782,6 +4821,7 @@ CONFIG_ROCKCHIP_EFUSE=m
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ROCKCHIP_PHY=m
CONFIG_ROCKCHIP_PM_DOMAINS=y
@@ -4797,6 +4837,7 @@ CONFIG_RPMSG=m
CONFIG_RPMSG_QCOM_GLINK_RPM=m
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
CONFIG_RPMSG_QCOM_SMD=m
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4892,6 +4933,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PL030=y
@@ -4980,6 +5022,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
CONFIG_SATA_HIGHBANK=m
# CONFIG_SATA_INIC162X is not set
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
# CONFIG_SATA_NV is not set
CONFIG_SATA_PMP=y
@@ -5243,8 +5286,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -5411,9 +5456,8 @@ CONFIG_SH_ETH=m
CONFIG_SI7005=m
CONFIG_SI7020=m
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-# CONFIG_SIMPLE_PM_BUS is not set
+CONFIG_SIMPLE_PM_BUS=y
CONFIG_SIS190=m
CONFIG_SIS900=m
# CONFIG_SKFP is not set
@@ -5437,7 +5481,6 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_SMC911X=m
CONFIG_SMC91X=m
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP_ON_UP=y
@@ -5636,6 +5679,7 @@ CONFIG_SND_SOC_ADI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_APQ8016_SBC is not set
CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631=m
# CONFIG_SND_SOC_BT_SCO is not set
@@ -5866,7 +5910,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_SPEAKUP is not set
# CONFIG_SPI_ALTERA is not set
@@ -6092,6 +6135,7 @@ CONFIG_TEGRA124_EMC=y
CONFIG_TEGRA20_APB_DMA=y
CONFIG_TEGRA20_MC=y
CONFIG_TEGRA_AHB=y
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEGRA_BPMP=y
CONFIG_TEGRA_GMI=m
CONFIG_TEGRA_HOST1X_FIREWALL=y
@@ -6104,12 +6148,12 @@ CONFIG_TEGRA_MC=y
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -6161,6 +6205,7 @@ CONFIG_TI_CPSW=m
CONFIG_TI_CPSW_PHY_SEL=y
CONFIG_TI_CPTS_MOD=m
CONFIG_TI_CPTS=y
+# CONFIG_TI_DAC082S085 is not set
CONFIG_TI_DAC7512=m
CONFIG_TI_DAVINCI_CPDMA=m
CONFIG_TI_DAVINCI_EMAC=m
@@ -6195,8 +6240,6 @@ CONFIG_TMP006=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -6219,11 +6262,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_IMX6UL_TSC=m
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -6238,6 +6283,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -6272,6 +6318,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -6306,8 +6353,10 @@ CONFIG_TWL6030_GPADC=m
CONFIG_TWL6030_USB=m
CONFIG_TWL6040_CORE=y
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -6419,7 +6468,6 @@ CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_EHCI_HCD_STI=m
CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_MSM=m
# CONFIG_USB_EHCI_MV is not set
CONFIG_USB_EHCI_MXC=m
CONFIG_USB_EHCI_ROOT_HUB_TT=y
@@ -6440,6 +6488,7 @@ CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_GADGET_VBUS_DRAW=100
@@ -6518,7 +6567,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -6542,7 +6590,6 @@ CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
CONFIG_USB_MON=y
CONFIG_USB_MR800=m
-CONFIG_USB_MSM_OTG=m
CONFIG_USB_MUSB_AM335X_CHILD=m
CONFIG_USB_MUSB_AM35X=m
CONFIG_USB_MUSB_DSPS=m
@@ -6603,7 +6650,6 @@ CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_PWC=m
# CONFIG_USB_PXA27X is not set
-CONFIG_USB_QCOM_8X16_PHY=m
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_R8A66597 is not set
CONFIG_USB_RAINSHADOW_CEC=m
@@ -6785,7 +6831,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6859,6 +6904,7 @@ CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_QCOM_CAMSS=m
CONFIG_VIDEO_QCOM_VENUS=m
+CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_S5P_FIMC=m
CONFIG_VIDEO_S5P_MIPI_CSIS=m
CONFIG_VIDEO_SAA6588=m
@@ -6892,6 +6938,7 @@ CONFIG_VIDEO_STI_HVA=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_TM6000=m
@@ -6934,10 +6981,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6974,6 +7021,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -7001,7 +7049,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -7046,6 +7093,7 @@ CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_MCELOG_LEGACY=y
CONFIG_X86_PTDUMP=y
# CONFIG_XEN is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -7053,6 +7101,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-armv7hl-lpae-debug.config b/kernel-armv7hl-lpae-debug.config
index 9abaef8..3f63064 100644
--- a/kernel-armv7hl-lpae-debug.config
+++ b/kernel-armv7hl-lpae-debug.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -151,7 +149,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -191,6 +188,7 @@ CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCM_53573 is not set
# CONFIG_ARCH_BCM_63XX is not set
# CONFIG_ARCH_BCM_CYGNUS is not set
+# CONFIG_ARCH_BCM_HR2 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCM_NSP is not set
CONFIG_ARCH_BCM=y
@@ -315,6 +313,7 @@ CONFIG_ARM_SCPI_POWER_DOMAIN=m
CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SMMU=y
CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA124_CPUFREQ=m
# CONFIG_ARM_TEGRA20_CPUFREQ is not set
CONFIG_ARM_TEGRA_DEVFREQ=m
@@ -535,6 +534,7 @@ CONFIG_BH1750=m
CONFIG_BIG_KEYS=y
CONFIG_BIG_LITTLE=y
# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_ELF_FDPIC is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_FLAT is not set
CONFIG_BINFMT_MISC=m
@@ -607,6 +607,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -667,6 +668,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -700,6 +702,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -837,6 +840,8 @@ CONFIG_CHARGER_MAX8997=m
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
CONFIG_CHARGER_TPS65090=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -850,6 +855,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -944,12 +950,14 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_SW_DOMAIN_PAN is not set
CONFIG_CPU_THERMAL=y
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -1067,6 +1075,7 @@ CONFIG_CRYPTO_SHA512_ARM64=m
CONFIG_CRYPTO_SHA512_ARM=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1117,6 +1126,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1248,9 +1258,9 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DOVE_THERMAL=m
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1258,6 +1268,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1302,7 +1315,8 @@ CONFIG_DRM_HDLCD=m
# CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1327,10 +1341,14 @@ CONFIG_DRM_NXP_PTN3460=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SIMPLE=m
@@ -1346,12 +1364,13 @@ CONFIG_DRM_RADEON_USERPTR=y
CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
CONFIG_DRM_STI=m
# CONFIG_DRM_STM is not set
CONFIG_DRM_SUN4I_BACKEND=m
-# CONFIG_DRM_SUN4I_HDMI_CEC is not set
+CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN4I=m
CONFIG_DRM_SUN8I_MIXER=m
@@ -1363,6 +1382,7 @@ CONFIG_DRM_TEGRA_STAGING=y
CONFIG_DRM_TINYDRM=m
CONFIG_DRM_TI_TFP410=m
CONFIG_DRM_TOSHIBA_TC358767=m
+CONFIG_DRM_TVE200=m
CONFIG_DRM_UDL=m
# CONFIG_DRM_VBOXVIDEO is not set
CONFIG_DRM_VC4_HDMI_CEC=y
@@ -1372,6 +1392,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTC=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1522,7 +1543,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1752,7 +1772,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1778,9 +1797,11 @@ CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
CONFIG_GPIO_MAX7301=m
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
CONFIG_GPIO_MC33880=m
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1798,6 +1819,7 @@ CONFIG_GPIO_PL061=y
# CONFIG_GPIO_SX150X is not set
CONFIG_GPIO_SYSCON=m
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
CONFIG_GPIO_TEGRA=y
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS65910=y
@@ -1816,6 +1838,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1972,6 +1995,7 @@ CONFIG_HISAX_TELES_CS=m
CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_W6692=y
# CONFIG_HISILICON_IRQ_MBIGEN is not set
+CONFIG_HISI_PMU=y
CONFIG_HIST_TRIGGERS=y
# CONFIG_HMC6352 is not set
# CONFIG_HMC_DRV is not set
@@ -2019,7 +2043,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -2141,6 +2165,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_IIO_CROS_EC_SENSORS_CORE=m
@@ -2296,6 +2321,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2330,7 +2356,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2349,6 +2375,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2457,13 +2484,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2475,13 +2497,11 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_CROSSBAR=y
@@ -2495,13 +2515,12 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2684,7 +2703,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2696,8 +2714,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
CONFIG_KS8851=m
CONFIG_KS8851_MLL=m
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KUSER_HELPERS=y
@@ -2776,6 +2792,7 @@ CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_CPU=y
@@ -2820,10 +2837,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2870,7 +2885,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2912,6 +2926,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2935,7 +2950,6 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -2943,7 +2957,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
CONFIG_MCPM=y
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -3006,7 +3019,11 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MESON_EFUSE=m
# CONFIG_MESON_GXBB_WATCHDOG is not set
# CONFIG_MESON_GXL_PHY is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
CONFIG_MESON_GX_SOCINFO=y
+CONFIG_MESON_IRQ_GPIO=y
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESON_SARADC=m
CONFIG_MESON_SM=y
CONFIG_MESON_WATCHDOG=m
@@ -3139,6 +3156,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3185,6 +3203,7 @@ CONFIG_MMC_DW_PCI=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_ROCKCHIP=m
# CONFIG_MMC_MESON_GX is not set
+CONFIG_MMC_MESON_MX_SDIO=m
# CONFIG_MMC_MTK is not set
CONFIG_MMC_MVSDIO=m
CONFIG_MMC_OMAP_HS=m
@@ -3200,6 +3219,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV3=m
@@ -3349,6 +3369,7 @@ CONFIG_MTD_PHYSMAP_OF_VERSATILE=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
CONFIG_MTD_SPINAND_MT29F=m
CONFIG_MTD_SPINAND_ONDIEECC=y
@@ -3584,6 +3605,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3898,20 +3920,23 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NVME_FC=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM=m
+# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SUNXI_SID=m
+CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_RDMA is not set
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3943,8 +3968,8 @@ CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMAP3_THERMAL is not set
+CONFIG_OMAP4_DSS_HDMI_CEC=y
# CONFIG_OMAP_GPMC_DEBUG is not set
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3961,6 +3986,7 @@ CONFIG_ORION_WATCHDOG=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -4055,6 +4081,7 @@ CONFIG_PCIE_DW_HOST=y
# CONFIG_PCIE_DW_PLAT is not set
CONFIG_PCIE_DW=y
CONFIG_PCIE_ECRC=y
+CONFIG_PCIE_HISI_STB=y
# CONFIG_PCI_ENDPOINT is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
CONFIG_PCIEPORTBUS=y
@@ -4077,6 +4104,7 @@ CONFIG_PCI_PRI=y
CONFIG_PCI_STUB=y
CONFIG_PCI_SW_SWITCHTEC=m
CONFIG_PCI_TEGRA=y
+CONFIG_PCI_V3_SEMI=y
CONFIG_PCI=y
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_3C589=m
@@ -4147,6 +4175,7 @@ CONFIG_PINCTRL_AS3722=y
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BROXTON is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_DOVE=y
# CONFIG_PINCTRL_GEMINILAKE is not set
@@ -4155,6 +4184,10 @@ CONFIG_PINCTRL_DOVE=y
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
+# CONFIG_PINCTRL_MESON8B is not set
+# CONFIG_PINCTRL_MESON8 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
# CONFIG_PINCTRL_MSM8994 is not set
# CONFIG_PINCTRL_MSM8996 is not set
CONFIG_PINCTRL_MVEBU=y
@@ -4237,6 +4270,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4290,6 +4324,8 @@ CONFIG_PWRSEQ_SIMPLE=y
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
CONFIG_QCOM_PM8XXX_XOADC=m
+CONFIG_QCOM_RMTFS_MEM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4457,12 +4493,15 @@ CONFIG_REISERFS_PROC_INFO=y
CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
# CONFIG_RESET_HSDK_V1 is not set
+CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SCI is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4490,6 +4529,7 @@ CONFIG_ROCKCHIP_EFUSE=m
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ROCKCHIP_PHY=m
CONFIG_ROCKCHIP_PM_DOMAINS=y
@@ -4503,6 +4543,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4590,6 +4631,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PL030=y
@@ -4674,6 +4716,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
CONFIG_SATA_HIGHBANK=m
# CONFIG_SATA_INIC162X is not set
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
# CONFIG_SATA_NV is not set
CONFIG_SATA_PMP=y
@@ -4935,8 +4978,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -5088,9 +5133,8 @@ CONFIG_SH_ETH=m
CONFIG_SI7005=m
CONFIG_SI7020=m
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-# CONFIG_SIMPLE_PM_BUS is not set
+CONFIG_SIMPLE_PM_BUS=y
CONFIG_SIS190=m
CONFIG_SIS900=m
# CONFIG_SKFP is not set
@@ -5114,7 +5158,6 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_SMC911X=m
CONFIG_SMC91X=m
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP_ON_UP=y
@@ -5291,6 +5334,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_APQ8016_SBC is not set
CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631=m
# CONFIG_SND_SOC_BT_SCO is not set
@@ -5482,7 +5526,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_SPEAKUP is not set
# CONFIG_SPI_ALTERA is not set
@@ -5692,6 +5735,7 @@ CONFIG_TEGRA124_EMC=y
CONFIG_TEGRA20_APB_DMA=y
# CONFIG_TEGRA20_MC is not set
CONFIG_TEGRA_AHB=y
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEGRA_BPMP=y
CONFIG_TEGRA_GMI=m
CONFIG_TEGRA_HOST1X_FIREWALL=y
@@ -5704,12 +5748,12 @@ CONFIG_TEGRA_MC=y
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5756,6 +5800,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS8688 is not set
CONFIG_TI_AEMIF=m
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_EDMA=y
@@ -5787,8 +5832,6 @@ CONFIG_TMP006=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5810,11 +5853,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5829,6 +5874,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5862,6 +5908,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5890,8 +5937,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -6018,6 +6067,7 @@ CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_GADGET_VBUS_DRAW=100
@@ -6094,7 +6144,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -6352,7 +6401,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6414,6 +6462,7 @@ CONFIG_VIDEO_NOON010PC30=m
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_S5P_FIMC=m
CONFIG_VIDEO_S5P_MIPI_CSIS=m
CONFIG_VIDEO_SAA6588=m
@@ -6440,6 +6489,7 @@ CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_TM6000=m
@@ -6482,10 +6532,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6521,6 +6571,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6548,7 +6599,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6603,6 +6653,7 @@ CONFIG_XEN_GRANT_DEV_ALLOC=m
# CONFIG_XEN is not set
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_NETDEV_FRONTEND=m
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_WDT=m
CONFIG_XFRM_MIGRATE=y
@@ -6612,6 +6663,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-armv7hl-lpae.config b/kernel-armv7hl-lpae.config
index 690d07f..b423565 100644
--- a/kernel-armv7hl-lpae.config
+++ b/kernel-armv7hl-lpae.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_ALS=m
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -151,7 +149,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -191,6 +188,7 @@ CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCM_53573 is not set
# CONFIG_ARCH_BCM_63XX is not set
# CONFIG_ARCH_BCM_CYGNUS is not set
+# CONFIG_ARCH_BCM_HR2 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCM_NSP is not set
CONFIG_ARCH_BCM=y
@@ -314,6 +312,7 @@ CONFIG_ARM_SCPI_POWER_DOMAIN=m
CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SMMU=y
CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_TEGRA124_CPUFREQ=m
# CONFIG_ARM_TEGRA20_CPUFREQ is not set
CONFIG_ARM_TEGRA_DEVFREQ=m
@@ -534,6 +533,7 @@ CONFIG_BH1750=m
CONFIG_BIG_KEYS=y
CONFIG_BIG_LITTLE=y
# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_ELF_FDPIC is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_FLAT is not set
CONFIG_BINFMT_MISC=m
@@ -606,6 +606,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -666,6 +667,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -699,6 +701,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -836,6 +839,8 @@ CONFIG_CHARGER_MAX8997=m
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
CONFIG_CHARGER_TPS65090=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -849,6 +854,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -943,11 +949,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_SW_DOMAIN_PAN is not set
CONFIG_CPU_THERMAL=y
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -1065,6 +1073,7 @@ CONFIG_CRYPTO_SHA512_ARM64=m
CONFIG_CRYPTO_SHA512_ARM=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1115,6 +1124,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1238,9 +1248,9 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DOVE_THERMAL=m
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1248,6 +1258,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1292,7 +1305,8 @@ CONFIG_DRM_HDLCD=m
# CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1317,10 +1331,14 @@ CONFIG_DRM_NXP_PTN3460=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SIMPLE=m
@@ -1336,12 +1354,13 @@ CONFIG_DRM_RADEON_USERPTR=y
CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
CONFIG_DRM_STI=m
# CONFIG_DRM_STM is not set
CONFIG_DRM_SUN4I_BACKEND=m
-# CONFIG_DRM_SUN4I_HDMI_CEC is not set
+CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN4I=m
CONFIG_DRM_SUN8I_MIXER=m
@@ -1353,6 +1372,7 @@ CONFIG_DRM_TEGRA_STAGING=y
CONFIG_DRM_TINYDRM=m
CONFIG_DRM_TI_TFP410=m
CONFIG_DRM_TOSHIBA_TC358767=m
+CONFIG_DRM_TVE200=m
CONFIG_DRM_UDL=m
# CONFIG_DRM_VBOXVIDEO is not set
CONFIG_DRM_VC4_HDMI_CEC=y
@@ -1362,6 +1382,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTC=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1512,7 +1533,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1735,7 +1755,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1761,9 +1780,11 @@ CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
CONFIG_GPIO_MAX7301=m
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
CONFIG_GPIO_MC33880=m
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1781,6 +1802,7 @@ CONFIG_GPIO_PL061=y
# CONFIG_GPIO_SX150X is not set
CONFIG_GPIO_SYSCON=m
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
CONFIG_GPIO_TEGRA=y
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS65910=y
@@ -1799,6 +1821,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1955,6 +1978,7 @@ CONFIG_HISAX_TELES_CS=m
CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_W6692=y
# CONFIG_HISILICON_IRQ_MBIGEN is not set
+CONFIG_HISI_PMU=y
CONFIG_HIST_TRIGGERS=y
# CONFIG_HMC6352 is not set
# CONFIG_HMC_DRV is not set
@@ -2002,7 +2026,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -2124,6 +2148,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_IIO_CROS_EC_SENSORS_CORE=m
@@ -2279,6 +2304,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2313,7 +2339,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2332,6 +2358,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2440,13 +2467,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2458,13 +2480,11 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_CROSSBAR=y
@@ -2478,13 +2498,12 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2665,7 +2684,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2677,8 +2695,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
CONFIG_KS8851=m
CONFIG_KS8851_MLL=m
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KUSER_HELPERS=y
@@ -2757,6 +2773,7 @@ CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_SYSCON=y
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_CPU=y
@@ -2801,10 +2818,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2851,7 +2866,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2893,6 +2907,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2915,7 +2930,6 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -2923,7 +2937,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
CONFIG_MCPM=y
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2986,7 +2999,11 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MESON_EFUSE=m
# CONFIG_MESON_GXBB_WATCHDOG is not set
# CONFIG_MESON_GXL_PHY is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
CONFIG_MESON_GX_SOCINFO=y
+CONFIG_MESON_IRQ_GPIO=y
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESON_SARADC=m
CONFIG_MESON_SM=y
CONFIG_MESON_WATCHDOG=m
@@ -3119,6 +3136,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3165,6 +3183,7 @@ CONFIG_MMC_DW_PCI=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_ROCKCHIP=m
# CONFIG_MMC_MESON_GX is not set
+CONFIG_MMC_MESON_MX_SDIO=m
# CONFIG_MMC_MTK is not set
CONFIG_MMC_MVSDIO=m
CONFIG_MMC_OMAP_HS=m
@@ -3180,6 +3199,7 @@ CONFIG_MMC_SDHCI=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV3=m
@@ -3328,6 +3348,7 @@ CONFIG_MTD_PHYSMAP_OF_VERSATILE=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
CONFIG_MTD_SPINAND_MT29F=m
CONFIG_MTD_SPINAND_ONDIEECC=y
@@ -3563,6 +3584,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3877,20 +3899,23 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NVME_FC=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM=m
+# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SUNXI_SID=m
+CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_RDMA is not set
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3922,8 +3947,8 @@ CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMAP3_THERMAL is not set
+CONFIG_OMAP4_DSS_HDMI_CEC=y
# CONFIG_OMAP_GPMC_DEBUG is not set
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3940,6 +3965,7 @@ CONFIG_ORION_WATCHDOG=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -4034,6 +4060,7 @@ CONFIG_PCIE_DW_HOST=y
# CONFIG_PCIE_DW_PLAT is not set
CONFIG_PCIE_DW=y
CONFIG_PCIE_ECRC=y
+CONFIG_PCIE_HISI_STB=y
# CONFIG_PCI_ENDPOINT is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
CONFIG_PCIEPORTBUS=y
@@ -4056,6 +4083,7 @@ CONFIG_PCI_PRI=y
CONFIG_PCI_STUB=y
CONFIG_PCI_SW_SWITCHTEC=m
CONFIG_PCI_TEGRA=y
+CONFIG_PCI_V3_SEMI=y
CONFIG_PCI=y
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_3C589=m
@@ -4126,6 +4154,7 @@ CONFIG_PINCTRL_AS3722=y
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BROXTON is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_DOVE=y
# CONFIG_PINCTRL_GEMINILAKE is not set
@@ -4134,6 +4163,10 @@ CONFIG_PINCTRL_DOVE=y
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
+# CONFIG_PINCTRL_MESON8B is not set
+# CONFIG_PINCTRL_MESON8 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
# CONFIG_PINCTRL_MSM8994 is not set
# CONFIG_PINCTRL_MSM8996 is not set
CONFIG_PINCTRL_MVEBU=y
@@ -4216,6 +4249,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4268,6 +4302,8 @@ CONFIG_PWRSEQ_SIMPLE=y
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
CONFIG_QCOM_PM8XXX_XOADC=m
+CONFIG_QCOM_RMTFS_MEM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4435,12 +4471,15 @@ CONFIG_REISERFS_PROC_INFO=y
CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
# CONFIG_RESET_HSDK_V1 is not set
+CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SCI is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4468,6 +4507,7 @@ CONFIG_ROCKCHIP_EFUSE=m
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ROCKCHIP_PHY=m
CONFIG_ROCKCHIP_PM_DOMAINS=y
@@ -4481,6 +4521,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4568,6 +4609,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PL030=y
@@ -4652,6 +4694,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
CONFIG_SATA_HIGHBANK=m
# CONFIG_SATA_INIC162X is not set
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
# CONFIG_SATA_NV is not set
CONFIG_SATA_PMP=y
@@ -4913,8 +4956,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -5066,9 +5111,8 @@ CONFIG_SH_ETH=m
CONFIG_SI7005=m
CONFIG_SI7020=m
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-# CONFIG_SIMPLE_PM_BUS is not set
+CONFIG_SIMPLE_PM_BUS=y
CONFIG_SIS190=m
CONFIG_SIS900=m
# CONFIG_SKFP is not set
@@ -5092,7 +5136,6 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_SMC911X=m
CONFIG_SMC91X=m
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP_ON_UP=y
@@ -5268,6 +5311,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_APQ8016_SBC is not set
CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631=m
# CONFIG_SND_SOC_BT_SCO is not set
@@ -5459,7 +5503,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_SPEAKUP is not set
# CONFIG_SPI_ALTERA is not set
@@ -5669,6 +5712,7 @@ CONFIG_TEGRA124_EMC=y
CONFIG_TEGRA20_APB_DMA=y
# CONFIG_TEGRA20_MC is not set
CONFIG_TEGRA_AHB=y
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEGRA_BPMP=y
CONFIG_TEGRA_GMI=m
CONFIG_TEGRA_HOST1X_FIREWALL=y
@@ -5681,12 +5725,12 @@ CONFIG_TEGRA_MC=y
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5733,6 +5777,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS8688 is not set
CONFIG_TI_AEMIF=m
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TI_DAVINCI_MDIO=m
CONFIG_TI_EDMA=y
@@ -5764,8 +5809,6 @@ CONFIG_TMP006=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5787,11 +5830,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5806,6 +5851,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5839,6 +5885,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5867,8 +5914,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5995,6 +6044,7 @@ CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_GADGET_VBUS_DRAW=100
@@ -6071,7 +6121,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -6329,7 +6378,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6391,6 +6439,7 @@ CONFIG_VIDEO_NOON010PC30=m
CONFIG_VIDEO_PVRUSB2_DVB=y
CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_S5P_FIMC=m
CONFIG_VIDEO_S5P_MIPI_CSIS=m
CONFIG_VIDEO_SAA6588=m
@@ -6417,6 +6466,7 @@ CONFIG_VIDEO_SR030PC30=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_TM6000=m
@@ -6459,10 +6509,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6498,6 +6548,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6525,7 +6576,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6580,6 +6630,7 @@ CONFIG_XEN_GRANT_DEV_ALLOC=m
# CONFIG_XEN is not set
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_NETDEV_FRONTEND=m
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_WDT=m
CONFIG_XFRM_MIGRATE=y
@@ -6589,6 +6640,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-armv7hl.config b/kernel-armv7hl.config
index 6660b1a..8f496be 100644
--- a/kernel-armv7hl.config
+++ b/kernel-armv7hl.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_ALS=m
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -153,7 +151,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -195,6 +192,7 @@ CONFIG_ARCH_BCM2835=y
# CONFIG_ARCH_BCM_53573 is not set
# CONFIG_ARCH_BCM_63XX is not set
# CONFIG_ARCH_BCM_CYGNUS is not set
+# CONFIG_ARCH_BCM_HR2 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCM_NSP is not set
CONFIG_ARCH_BCM=y
@@ -325,6 +323,7 @@ CONFIG_ARM_SCPI_POWER_DOMAIN=m
CONFIG_ARM_SCPI_PROTOCOL=m
CONFIG_ARM_SMMU=y
CONFIG_ARM_SP805_WATCHDOG=m
+CONFIG_ARM_SPE_PMU=m
CONFIG_ARM_STI_CPUFREQ=m
CONFIG_ARM_TEGRA124_CPUFREQ=m
# CONFIG_ARM_TEGRA20_CPUFREQ is not set
@@ -558,6 +557,7 @@ CONFIG_BH1750=m
CONFIG_BIG_KEYS=y
CONFIG_BIG_LITTLE=y
# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_ELF_FDPIC is not set
CONFIG_BINFMT_ELF=y
# CONFIG_BINFMT_FLAT is not set
CONFIG_BINFMT_MISC=m
@@ -630,6 +630,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -690,6 +691,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -724,6 +726,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -864,6 +867,8 @@ CONFIG_CHARGER_SMB347=m
CONFIG_CHARGER_TPS65090=m
CONFIG_CHARGER_TPS65217=m
CONFIG_CHARGER_TWL4030=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -877,6 +882,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -976,11 +982,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
CONFIG_CPU_SW_DOMAIN_PAN=y
CONFIG_CPU_THERMAL=y
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -1118,6 +1126,7 @@ CONFIG_CRYPTO_SHA512_ARM64=m
CONFIG_CRYPTO_SHA512_ARM=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1169,6 +1178,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1293,9 +1303,9 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DOVE_THERMAL=m
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1303,6 +1313,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1349,7 +1362,8 @@ CONFIG_DRM_HDLCD=m
# CONFIG_DRM_HDLCD_SHOW_UNDERRUN is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1403,10 +1417,14 @@ CONFIG_DRM_OMAP_PANEL_TPO_TD043MTEA1=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
CONFIG_DRM_PANEL_LG_LG4573=m
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=m
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
CONFIG_DRM_PANEL_SAMSUNG_LD9040=m
CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=m
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=m
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=m
CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
CONFIG_DRM_PANEL_SIMPLE=m
@@ -1422,12 +1440,13 @@ CONFIG_DRM_RADEON_USERPTR=y
CONFIG_DRM_ROCKCHIP=m
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
CONFIG_DRM_STI=m
# CONFIG_DRM_STM is not set
CONFIG_DRM_SUN4I_BACKEND=m
-# CONFIG_DRM_SUN4I_HDMI_CEC is not set
+CONFIG_DRM_SUN4I_HDMI_CEC=y
CONFIG_DRM_SUN4I_HDMI=m
CONFIG_DRM_SUN4I=m
CONFIG_DRM_SUN8I_MIXER=m
@@ -1440,6 +1459,7 @@ CONFIG_DRM_TILCDC_SLAVE_COMPAT=y
CONFIG_DRM_TINYDRM=m
CONFIG_DRM_TI_TFP410=m
CONFIG_DRM_TOSHIBA_TC358767=m
+CONFIG_DRM_TVE200=m
CONFIG_DRM_UDL=m
# CONFIG_DRM_VBOXVIDEO is not set
CONFIG_DRM_VC4_HDMI_CEC=y
@@ -1449,6 +1469,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTC=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1602,7 +1623,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1831,7 +1851,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1858,9 +1877,11 @@ CONFIG_GPIO_GENERIC=y
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
CONFIG_GPIO_MAX7301=m
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
CONFIG_GPIO_MC33880=m
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1881,6 +1902,7 @@ CONFIG_GPIO_STMPE=y
# CONFIG_GPIO_SX150X is not set
CONFIG_GPIO_SYSCON=m
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
CONFIG_GPIO_TEGRA=y
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS65218=m
@@ -1905,6 +1927,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
CONFIG_GS_FPGABOOT=m
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -2061,6 +2084,7 @@ CONFIG_HISAX_TELES_CS=m
CONFIG_HISAX_TELESPCI=y
CONFIG_HISAX_W6692=y
# CONFIG_HISILICON_IRQ_MBIGEN is not set
+CONFIG_HISI_PMU=y
CONFIG_HIST_TRIGGERS=y
# CONFIG_HMC6352 is not set
# CONFIG_HMC_DRV is not set
@@ -2110,9 +2134,9 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
CONFIG_HWSPINLOCK_OMAP=m
CONFIG_HWSPINLOCK_QCOM=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -2238,6 +2262,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
CONFIG_IIO_CROS_EC_BARO=m
CONFIG_IIO_CROS_EC_LIGHT_PROX=m
CONFIG_IIO_CROS_EC_SENSORS_CORE=m
@@ -2410,6 +2435,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2444,7 +2470,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2463,6 +2489,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2571,13 +2598,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2589,13 +2611,11 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_MESON=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_CROSSBAR=y
@@ -2610,13 +2630,12 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_SUNXI=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2802,7 +2821,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2814,8 +2832,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
CONFIG_KS8851=m
CONFIG_KS8851_MLL=m
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KUSER_HELPERS=y
@@ -2895,6 +2911,7 @@ CONFIG_LEDS_REGULATOR=m
CONFIG_LEDS_SYSCON=y
CONFIG_LEDS_TCA6507=m
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_LEDS_TRIGGER_CPU=y
@@ -2939,10 +2956,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2989,7 +3004,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -3038,6 +3052,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -3060,7 +3075,6 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -3068,7 +3082,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
CONFIG_MCPM=y
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -3133,7 +3146,11 @@ CONFIG_MEMSTICK_TIFM_MS=m
CONFIG_MESON_EFUSE=m
# CONFIG_MESON_GXBB_WATCHDOG is not set
# CONFIG_MESON_GXL_PHY is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
CONFIG_MESON_GX_SOCINFO=y
+CONFIG_MESON_IRQ_GPIO=y
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESON_SARADC=m
CONFIG_MESON_SM=y
CONFIG_MESON_WATCHDOG=m
@@ -3269,6 +3286,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3315,6 +3333,7 @@ CONFIG_MMC_DW_PCI=m
CONFIG_MMC_DW_PLTFM=m
CONFIG_MMC_DW_ROCKCHIP=m
# CONFIG_MMC_MESON_GX is not set
+CONFIG_MMC_MESON_MX_SDIO=m
# CONFIG_MMC_MTK is not set
CONFIG_MMC_MVSDIO=m
CONFIG_MMC_MXC=m
@@ -3335,6 +3354,7 @@ CONFIG_MMC_SDHCI_MSM=m
CONFIG_MMC_SDHCI_OF_ARASAN=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
CONFIG_MMC_SDHCI_OF_ESDHC=m
+CONFIG_MMC_SDHCI_OMAP=m
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_PXAV2=m
@@ -3500,6 +3520,7 @@ CONFIG_MTD_PHYSMAP_OF_VERSATILE=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
CONFIG_MTD_SPINAND_MT29F=m
CONFIG_MTD_SPINAND_ONDIEECC=y
@@ -3739,6 +3760,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -4056,14 +4078,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOUVEAU_PLATFORM_DRIVER=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NVEC_PAZ00=y
@@ -4072,7 +4095,9 @@ CONFIG_NVME_FC=m
CONFIG_NVMEM_IMX_IIM=m
CONFIG_NVMEM_IMX_OCOTP=m
CONFIG_NVMEM=m
+# CONFIG_NVMEM_SNVS_LPGPR is not set
CONFIG_NVMEM_SUNXI_SID=m
+CONFIG_NVME_MULTIPATH=y
# CONFIG_NVME_RDMA is not set
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -4104,7 +4129,6 @@ CONFIG_OF_RESERVED_MEM=y
CONFIG_OF_RESOLVE=y
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMAP2_DSS_COLLECT_IRQ_STATS is not set
# CONFIG_OMAP2_DSS_DEBUGFS is not set
# CONFIG_OMAP2_DSS_DEBUG is not set
@@ -4122,6 +4146,7 @@ CONFIG_OMAP_32K_TIMER=y
# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
# CONFIG_OMAP3_THERMAL is not set
+CONFIG_OMAP4_DSS_HDMI_CEC=y
CONFIG_OMAP4_DSS_HDMI=y
CONFIG_OMAP4_THERMAL=y
CONFIG_OMAP5_DSS_HDMI=y
@@ -4157,6 +4182,7 @@ CONFIG_ORION_WATCHDOG=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -4253,6 +4279,7 @@ CONFIG_PCIE_DW_HOST=y
# CONFIG_PCIE_DW_PLAT is not set
CONFIG_PCIE_DW=y
CONFIG_PCIE_ECRC=y
+CONFIG_PCIE_HISI_STB=y
# CONFIG_PCI_ENDPOINT is not set
# CONFIG_PCI_ENDPOINT_TEST is not set
CONFIG_PCIEPORTBUS=y
@@ -4277,6 +4304,7 @@ CONFIG_PCI_PRI=y
CONFIG_PCI_STUB=y
CONFIG_PCI_SW_SWITCHTEC=m
CONFIG_PCI_TEGRA=y
+CONFIG_PCI_V3_SEMI=y
CONFIG_PCI=y
CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_3C589=m
@@ -4358,6 +4386,7 @@ CONFIG_PINCTRL_AS3722=y
# CONFIG_PINCTRL_BAYTRAIL is not set
# CONFIG_PINCTRL_BROXTON is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_CHERRYVIEW is not set
CONFIG_PINCTRL_DOVE=y
# CONFIG_PINCTRL_GEMINILAKE is not set
@@ -4367,6 +4396,10 @@ CONFIG_PINCTRL_IMX6SL=y
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_MDM9615 is not set
+# CONFIG_PINCTRL_MESON8B is not set
+# CONFIG_PINCTRL_MESON8 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_MSM8660=m
CONFIG_PINCTRL_MSM8916=m
CONFIG_PINCTRL_MSM8960=m
@@ -4461,6 +4494,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4533,6 +4567,8 @@ CONFIG_QCOM_PM8XXX_XOADC=m
CONFIG_QCOM_PM=y
CONFIG_QCOM_Q6V5_PIL=m
CONFIG_QCOM_QFPROM=m
+CONFIG_QCOM_RMTFS_MEM=m
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QCOM_SMD_RPM=m
CONFIG_QCOM_SMEM=m
CONFIG_QCOM_SMP2P=m
@@ -4727,12 +4763,15 @@ CONFIG_REISERFS_PROC_INFO=y
CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
CONFIG_RESET_CONTROLLER=y
CONFIG_RESET_GPIO=y
# CONFIG_RESET_HSDK_V1 is not set
+CONFIG_RESET_SIMPLE=y
# CONFIG_RESET_TI_SCI is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4760,6 +4799,7 @@ CONFIG_ROCKCHIP_EFUSE=m
CONFIG_ROCKCHIP_INNO_HDMI=y
CONFIG_ROCKCHIP_IODOMAIN=m
CONFIG_ROCKCHIP_IOMMU=y
+CONFIG_ROCKCHIP_LVDS=y
CONFIG_ROCKCHIP_MBOX=y
CONFIG_ROCKCHIP_PHY=m
CONFIG_ROCKCHIP_PM_DOMAINS=y
@@ -4775,6 +4815,7 @@ CONFIG_RPMSG=m
CONFIG_RPMSG_QCOM_GLINK_RPM=m
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
CONFIG_RPMSG_QCOM_SMD=m
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4870,6 +4911,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PL030=y
@@ -4958,6 +5000,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
CONFIG_SATA_HIGHBANK=m
# CONFIG_SATA_INIC162X is not set
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
# CONFIG_SATA_NV is not set
CONFIG_SATA_PMP=y
@@ -5221,8 +5264,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -5389,9 +5434,8 @@ CONFIG_SH_ETH=m
CONFIG_SI7005=m
CONFIG_SI7020=m
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-# CONFIG_SIMPLE_PM_BUS is not set
+CONFIG_SIMPLE_PM_BUS=y
CONFIG_SIS190=m
CONFIG_SIS900=m
# CONFIG_SKFP is not set
@@ -5415,7 +5459,6 @@ CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
CONFIG_SMC911X=m
CONFIG_SMC91X=m
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP_ON_UP=y
@@ -5613,6 +5656,7 @@ CONFIG_SND_SOC_ADI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_APQ8016_SBC is not set
CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631=m
# CONFIG_SND_SOC_BT_SCO is not set
@@ -5843,7 +5887,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_SPEAKUP is not set
# CONFIG_SPI_ALTERA is not set
@@ -6069,6 +6112,7 @@ CONFIG_TEGRA124_EMC=y
CONFIG_TEGRA20_APB_DMA=y
CONFIG_TEGRA20_MC=y
CONFIG_TEGRA_AHB=y
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEGRA_BPMP=y
CONFIG_TEGRA_GMI=m
CONFIG_TEGRA_HOST1X_FIREWALL=y
@@ -6081,12 +6125,12 @@ CONFIG_TEGRA_MC=y
CONFIG_TEGRA_SOCTHERM=m
CONFIG_TEGRA_WATCHDOG=m
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -6138,6 +6182,7 @@ CONFIG_TI_CPSW=m
CONFIG_TI_CPSW_PHY_SEL=y
CONFIG_TI_CPTS_MOD=m
CONFIG_TI_CPTS=y
+# CONFIG_TI_DAC082S085 is not set
CONFIG_TI_DAC7512=m
CONFIG_TI_DAVINCI_CPDMA=m
CONFIG_TI_DAVINCI_EMAC=m
@@ -6172,8 +6217,6 @@ CONFIG_TMP006=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -6196,11 +6239,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
CONFIG_TOUCHSCREEN_IMX6UL_TSC=m
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -6215,6 +6260,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -6249,6 +6295,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -6283,8 +6330,10 @@ CONFIG_TWL6030_GPADC=m
CONFIG_TWL6030_USB=m
CONFIG_TWL6040_CORE=y
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -6396,7 +6445,6 @@ CONFIG_USB_EHCI_HCD_ORION=m
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_EHCI_HCD_STI=m
CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_MSM=m
# CONFIG_USB_EHCI_MV is not set
CONFIG_USB_EHCI_MXC=m
CONFIG_USB_EHCI_ROOT_HUB_TT=y
@@ -6417,6 +6465,7 @@ CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGET_DEBUG_FS is not set
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GADGET=m
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
CONFIG_USB_GADGET_VBUS_DRAW=100
@@ -6495,7 +6544,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -6519,7 +6567,6 @@ CONFIG_USB_MDC800=m
CONFIG_USB_MICROTEK=m
CONFIG_USB_MON=y
CONFIG_USB_MR800=m
-CONFIG_USB_MSM_OTG=m
CONFIG_USB_MUSB_AM335X_CHILD=m
CONFIG_USB_MUSB_AM35X=m
CONFIG_USB_MUSB_DSPS=m
@@ -6580,7 +6627,6 @@ CONFIG_USB_PULSE8_CEC=m
CONFIG_USB_PWC_INPUT_EVDEV=y
CONFIG_USB_PWC=m
# CONFIG_USB_PXA27X is not set
-CONFIG_USB_QCOM_8X16_PHY=m
# CONFIG_USB_R8A66597_HCD is not set
# CONFIG_USB_R8A66597 is not set
CONFIG_USB_RAINSHADOW_CEC=m
@@ -6762,7 +6808,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6836,6 +6881,7 @@ CONFIG_VIDEO_PVRUSB2=m
CONFIG_VIDEO_PVRUSB2_SYSFS=y
CONFIG_VIDEO_QCOM_CAMSS=m
CONFIG_VIDEO_QCOM_VENUS=m
+CONFIG_VIDEO_ROCKCHIP_RGA=m
CONFIG_VIDEO_S5P_FIMC=m
CONFIG_VIDEO_S5P_MIPI_CSIS=m
CONFIG_VIDEO_SAA6588=m
@@ -6869,6 +6915,7 @@ CONFIG_VIDEO_STI_HVA=m
CONFIG_VIDEO_STK1160_AC97=y
CONFIG_VIDEO_STK1160_COMMON=m
CONFIG_VIDEO_STK1160=m
+CONFIG_VIDEO_TEGRA_HDMI_CEC=m
CONFIG_VIDEO_TM6000_ALSA=m
CONFIG_VIDEO_TM6000_DVB=m
CONFIG_VIDEO_TM6000=m
@@ -6911,10 +6958,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6951,6 +6998,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6978,7 +7026,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -7023,6 +7070,7 @@ CONFIG_WM8350_WATCHDOG=m
CONFIG_X86_MCELOG_LEGACY=y
# CONFIG_X86_PTDUMP is not set
# CONFIG_XEN is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -7030,6 +7078,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-i686-PAE.config b/kernel-i686-PAE.config
index fb3af6c..7d2eeff 100644
--- a/kernel-i686-PAE.config
+++ b/kernel-i686-PAE.config
@@ -72,7 +72,7 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_PROCFS=y
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -82,8 +82,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_WMI=m
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -193,7 +191,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
CONFIG_ALIENWARE_WMI=m
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
# CONFIG_ALIX is not set
@@ -499,6 +496,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -559,6 +557,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -592,6 +591,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -716,6 +716,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -731,6 +733,7 @@ CONFIG_CHR_DEV_ST=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -803,10 +806,12 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -917,6 +922,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -969,6 +975,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1023,6 +1030,8 @@ CONFIG_DELL_LAPTOP=m
CONFIG_DELL_RBTN=m
# CONFIG_DELL_RBU is not set
CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_SMM=m
+CONFIG_DELL_SMBIOS_WMI=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_LED=m
@@ -1089,8 +1098,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1099,6 +1108,10 @@ CONFIG_DPTF_POWER=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+CONFIG_DRM_AMD_DC_DCN1_0=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1122,7 +1135,8 @@ CONFIG_DRM_GMA500=m
# CONFIG_DRM_GMA600 is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1151,10 +1165,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1168,7 +1186,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1183,6 +1202,7 @@ CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1354,7 +1374,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1586,7 +1605,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1616,9 +1634,11 @@ CONFIG_GPIO_ICH=m
CONFIG_GPIO_IT87=m
CONFIG_GPIOLIB=y
# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -1636,6 +1656,7 @@ CONFIG_GPIO_SCH=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1651,6 +1672,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1862,7 +1884,7 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYPERV_BALLOON=m
CONFIG_HYPERVISOR_GUEST=y
@@ -1990,6 +2012,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2165,11 +2188,13 @@ CONFIG_INTEL_RST=m
# CONFIG_INTEL_SCU_IPC is not set
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
CONFIG_INTEL_SOC_PMIC=y
# CONFIG_INTEL_TH is not set
# CONFIG_INTEL_TXT is not set
CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
CONFIG_INTEL_XWAY_PHY=m
# CONFIG_INTERVAL_TREE_TEST is not set
# CONFIG_INV_MPU6050_I2C is not set
@@ -2201,7 +2226,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2220,6 +2245,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2329,13 +2355,8 @@ CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2347,12 +2368,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2365,12 +2384,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2535,7 +2553,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2547,8 +2564,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_AMD=m
@@ -2586,6 +2601,7 @@ CONFIG_LCD_PLATFORM=m
# CONFIG_LDM_DEBUG is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LEDS_AAT1290 is not set
+CONFIG_LEDS_APU=m
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
@@ -2627,6 +2643,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2673,10 +2690,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2728,7 +2743,6 @@ CONFIG_LXT_PHY=m
# CONFIG_M586TSC is not set
# CONFIG_M62332 is not set
CONFIG_M686=y
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2756,6 +2770,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2780,7 +2795,6 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -2788,7 +2802,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
# CONFIG_MCRUSOE is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCYRIXIII is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2848,6 +2861,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2974,6 +2990,7 @@ CONFIG_MISDN_W6692=m
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3023,6 +3040,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -3147,6 +3165,7 @@ CONFIG_MTD_PHYSMAP_OF=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3188,7 +3207,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3376,6 +3395,7 @@ CONFIG_NETROM=m
# CONFIG_NET_SB1000 is not set
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3693,19 +3713,21 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NSC_GPIO=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
# CONFIG_NUMA is not set
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3724,7 +3746,6 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
CONFIG_OLPC_XO15_SCI=y
CONFIG_OLPC_XO1=m
CONFIG_OLPC_XO1_PM=y
@@ -3745,6 +3766,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3920,12 +3942,15 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_DENVERTON=m
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SINGLE is not set
# CONFIG_PINCTRL_SPRD is not set
@@ -3994,6 +4019,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4043,6 +4069,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4154,10 +4181,12 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RETPOLINE=y
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4186,6 +4215,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4266,6 +4296,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4339,6 +4370,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4615,8 +4647,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4751,7 +4785,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_SILEAD_DMI is not set
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4776,7 +4809,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4943,6 +4975,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4999,14 +5032,17 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_HASWELL=m
CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SST_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
CONFIG_SND_SOC=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9860 is not set
@@ -5072,6 +5108,7 @@ CONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_ZX_AUD96P22 is not set
CONFIG_SND_SONICVIBES=m
# CONFIG_SND_SPI is not set
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_TRIDENT=m
CONFIG_SND_USB_6FIRE=m
@@ -5109,7 +5146,6 @@ CONFIG_SONYPI_COMPAT=y
CONFIG_SONYPI=m
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SP5100_TCO=m
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSE_RCU_POINTER=y
@@ -5279,13 +5315,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5325,6 +5362,7 @@ CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THRUSTMASTER_FF=y
# CONFIG_THUNDERBOLT is not set
+CONFIG_THUNDERBOLT_NET=m
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
@@ -5336,6 +5374,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5357,10 +5396,8 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_TOSHIBA_BT_RFKILL=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA=m
CONFIG_TOSHIBA_WMI=m
@@ -5385,11 +5422,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5404,6 +5443,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5436,6 +5476,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5463,8 +5504,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5550,6 +5593,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5621,7 +5665,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5855,7 +5898,6 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5971,7 +6013,6 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMD=m
# CONFIG_VME_BUS is not set
CONFIG_VMWARE_BALLOON=m
@@ -5980,6 +6021,7 @@ CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6015,6 +6057,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6042,7 +6085,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6158,6 +6200,7 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
# CONFIG_XEN_PVCALLS_BACKEND is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVH=y
CONFIG_XEN_PV=y
@@ -6177,6 +6220,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-i686-PAEdebug.config b/kernel-i686-PAEdebug.config
index d6d3a04..66eff4b 100644
--- a/kernel-i686-PAEdebug.config
+++ b/kernel-i686-PAEdebug.config
@@ -72,7 +72,7 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_PROCFS=y
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -82,8 +82,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_WMI=m
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -193,7 +191,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
CONFIG_ALIENWARE_WMI=m
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
# CONFIG_ALIX is not set
@@ -500,6 +497,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -560,6 +558,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -593,6 +592,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -717,6 +717,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -732,6 +734,7 @@ CONFIG_CHR_DEV_ST=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -804,11 +807,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -919,6 +924,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -971,6 +977,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1033,6 +1040,8 @@ CONFIG_DELL_LAPTOP=m
CONFIG_DELL_RBTN=m
# CONFIG_DELL_RBU is not set
CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_SMM=m
+CONFIG_DELL_SMBIOS_WMI=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_LED=m
@@ -1100,8 +1109,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1110,6 +1119,10 @@ CONFIG_DPTF_POWER=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+CONFIG_DRM_AMD_DC_DCN1_0=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1133,7 +1146,8 @@ CONFIG_DRM_GMA500=m
# CONFIG_DRM_GMA600 is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1162,10 +1176,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1179,7 +1197,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1194,6 +1213,7 @@ CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1365,7 +1385,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1604,7 +1623,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1634,9 +1652,11 @@ CONFIG_GPIO_ICH=m
CONFIG_GPIO_IT87=m
CONFIG_GPIOLIB=y
# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -1654,6 +1674,7 @@ CONFIG_GPIO_SCH=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1669,6 +1690,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1880,7 +1902,7 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYPERV_BALLOON=m
CONFIG_HYPERVISOR_GUEST=y
@@ -2008,6 +2030,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2183,11 +2206,13 @@ CONFIG_INTEL_RST=m
# CONFIG_INTEL_SCU_IPC is not set
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
CONFIG_INTEL_SOC_PMIC=y
# CONFIG_INTEL_TH is not set
# CONFIG_INTEL_TXT is not set
CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
CONFIG_INTEL_XWAY_PHY=m
# CONFIG_INTERVAL_TREE_TEST is not set
# CONFIG_INV_MPU6050_I2C is not set
@@ -2219,7 +2244,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2238,6 +2263,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2347,13 +2373,8 @@ CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2365,12 +2386,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2383,12 +2402,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2555,7 +2573,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2567,8 +2584,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_AMD=m
@@ -2606,6 +2621,7 @@ CONFIG_LCD_PLATFORM=m
# CONFIG_LDM_DEBUG is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LEDS_AAT1290 is not set
+CONFIG_LEDS_APU=m
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
@@ -2647,6 +2663,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2693,10 +2710,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2748,7 +2763,6 @@ CONFIG_LXT_PHY=m
# CONFIG_M586TSC is not set
# CONFIG_M62332 is not set
CONFIG_M686=y
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2776,6 +2790,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2800,7 +2815,6 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -2808,7 +2822,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
# CONFIG_MCRUSOE is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCYRIXIII is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2868,6 +2881,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2994,6 +3010,7 @@ CONFIG_MISDN_W6692=m
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3043,6 +3060,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -3167,6 +3185,7 @@ CONFIG_MTD_PHYSMAP_OF=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3208,7 +3227,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3396,6 +3415,7 @@ CONFIG_NETROM=m
# CONFIG_NET_SB1000 is not set
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3713,19 +3733,21 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NSC_GPIO=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
# CONFIG_NUMA is not set
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3744,7 +3766,6 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
CONFIG_OLPC_XO15_SCI=y
CONFIG_OLPC_XO1=m
CONFIG_OLPC_XO1_PM=y
@@ -3765,6 +3786,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3940,12 +3962,15 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_DENVERTON=m
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SINGLE is not set
# CONFIG_PINCTRL_SPRD is not set
@@ -4014,6 +4039,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4064,6 +4090,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4175,10 +4202,12 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RETPOLINE=y
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4207,6 +4236,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4287,6 +4317,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4360,6 +4391,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4636,8 +4668,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4772,7 +4806,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_SILEAD_DMI is not set
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4797,7 +4830,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4965,6 +4997,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -5021,14 +5054,17 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_HASWELL=m
CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SST_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
CONFIG_SND_SOC=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9860 is not set
@@ -5094,6 +5130,7 @@ CONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_ZX_AUD96P22 is not set
CONFIG_SND_SONICVIBES=m
# CONFIG_SND_SPI is not set
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_TRIDENT=m
CONFIG_SND_USB_6FIRE=m
@@ -5131,7 +5168,6 @@ CONFIG_SONYPI_COMPAT=y
CONFIG_SONYPI=m
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SP5100_TCO=m
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSE_RCU_POINTER=y
@@ -5301,13 +5337,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5347,6 +5384,7 @@ CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THRUSTMASTER_FF=y
# CONFIG_THUNDERBOLT is not set
+CONFIG_THUNDERBOLT_NET=m
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
@@ -5358,6 +5396,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5379,10 +5418,8 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_TOSHIBA_BT_RFKILL=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA=m
CONFIG_TOSHIBA_WMI=m
@@ -5407,11 +5444,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5426,6 +5465,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5458,6 +5498,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5485,8 +5526,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5572,6 +5615,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5643,7 +5687,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5877,7 +5920,6 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5993,7 +6035,6 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMD=m
# CONFIG_VME_BUS is not set
CONFIG_VMWARE_BALLOON=m
@@ -6002,6 +6043,7 @@ CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6037,6 +6079,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6064,7 +6107,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6180,6 +6222,7 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
# CONFIG_XEN_PVCALLS_BACKEND is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVH=y
CONFIG_XEN_PV=y
@@ -6199,6 +6242,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-i686-debug.config b/kernel-i686-debug.config
index 9429d66..ae31477 100644
--- a/kernel-i686-debug.config
+++ b/kernel-i686-debug.config
@@ -72,7 +72,7 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_PROCFS=y
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -82,8 +82,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_WMI=m
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -193,7 +191,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
CONFIG_ALIENWARE_WMI=m
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
# CONFIG_ALIX is not set
@@ -500,6 +497,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -560,6 +558,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -593,6 +592,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -717,6 +717,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -732,6 +734,7 @@ CONFIG_CHR_DEV_ST=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -804,11 +807,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -919,6 +924,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -971,6 +977,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1033,6 +1040,8 @@ CONFIG_DELL_LAPTOP=m
CONFIG_DELL_RBTN=m
# CONFIG_DELL_RBU is not set
CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_SMM=m
+CONFIG_DELL_SMBIOS_WMI=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_LED=m
@@ -1100,8 +1109,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1110,6 +1119,10 @@ CONFIG_DPTF_POWER=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+CONFIG_DRM_AMD_DC_DCN1_0=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1133,7 +1146,8 @@ CONFIG_DRM_GMA500=m
# CONFIG_DRM_GMA600 is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1162,10 +1176,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1179,7 +1197,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1194,6 +1213,7 @@ CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1365,7 +1385,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1604,7 +1623,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1634,9 +1652,11 @@ CONFIG_GPIO_ICH=m
CONFIG_GPIO_IT87=m
CONFIG_GPIOLIB=y
# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -1654,6 +1674,7 @@ CONFIG_GPIO_SCH=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1669,6 +1690,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1880,7 +1902,7 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYPERV_BALLOON=m
CONFIG_HYPERVISOR_GUEST=y
@@ -2008,6 +2030,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2183,11 +2206,13 @@ CONFIG_INTEL_RST=m
# CONFIG_INTEL_SCU_IPC is not set
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
CONFIG_INTEL_SOC_PMIC=y
# CONFIG_INTEL_TH is not set
# CONFIG_INTEL_TXT is not set
CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
CONFIG_INTEL_XWAY_PHY=m
# CONFIG_INTERVAL_TREE_TEST is not set
# CONFIG_INV_MPU6050_I2C is not set
@@ -2219,7 +2244,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2238,6 +2263,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2347,13 +2373,8 @@ CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2365,12 +2386,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2383,12 +2402,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2555,7 +2573,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2567,8 +2584,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_AMD=m
@@ -2606,6 +2621,7 @@ CONFIG_LCD_PLATFORM=m
# CONFIG_LDM_DEBUG is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LEDS_AAT1290 is not set
+CONFIG_LEDS_APU=m
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
@@ -2647,6 +2663,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2693,10 +2710,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2748,7 +2763,6 @@ CONFIG_LXT_PHY=m
# CONFIG_M586TSC is not set
# CONFIG_M62332 is not set
CONFIG_M686=y
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2776,6 +2790,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2800,7 +2815,6 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -2808,7 +2822,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
# CONFIG_MCRUSOE is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCYRIXIII is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2868,6 +2881,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2994,6 +3010,7 @@ CONFIG_MISDN_W6692=m
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3043,6 +3060,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -3167,6 +3185,7 @@ CONFIG_MTD_PHYSMAP_OF=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3208,7 +3227,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3396,6 +3415,7 @@ CONFIG_NETROM=m
# CONFIG_NET_SB1000 is not set
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3713,19 +3733,21 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NSC_GPIO=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
# CONFIG_NUMA is not set
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3744,7 +3766,6 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
CONFIG_OLPC_XO15_SCI=y
CONFIG_OLPC_XO1=m
CONFIG_OLPC_XO1_PM=y
@@ -3765,6 +3786,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3940,12 +3962,15 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_DENVERTON=m
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SINGLE is not set
# CONFIG_PINCTRL_SPRD is not set
@@ -4014,6 +4039,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4064,6 +4090,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4175,10 +4202,12 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RETPOLINE=y
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4207,6 +4236,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4287,6 +4317,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4360,6 +4391,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4636,8 +4668,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4772,7 +4806,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_SILEAD_DMI is not set
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4797,7 +4830,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4965,6 +4997,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -5021,14 +5054,17 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_HASWELL=m
CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SST_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
CONFIG_SND_SOC=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9860 is not set
@@ -5094,6 +5130,7 @@ CONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_ZX_AUD96P22 is not set
CONFIG_SND_SONICVIBES=m
# CONFIG_SND_SPI is not set
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_TRIDENT=m
CONFIG_SND_USB_6FIRE=m
@@ -5131,7 +5168,6 @@ CONFIG_SONYPI_COMPAT=y
CONFIG_SONYPI=m
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SP5100_TCO=m
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSE_RCU_POINTER=y
@@ -5301,13 +5337,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5347,6 +5384,7 @@ CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THRUSTMASTER_FF=y
# CONFIG_THUNDERBOLT is not set
+CONFIG_THUNDERBOLT_NET=m
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
@@ -5358,6 +5396,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5379,10 +5418,8 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_TOSHIBA_BT_RFKILL=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA=m
CONFIG_TOSHIBA_WMI=m
@@ -5407,11 +5444,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5426,6 +5465,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5458,6 +5498,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5485,8 +5526,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5572,6 +5615,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5643,7 +5687,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5877,7 +5920,6 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5993,7 +6035,6 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMD=m
# CONFIG_VME_BUS is not set
CONFIG_VMWARE_BALLOON=m
@@ -6002,6 +6043,7 @@ CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6037,6 +6079,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6064,7 +6107,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6179,6 +6221,7 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
# CONFIG_XEN_PVCALLS_BACKEND is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVH=y
CONFIG_XEN_PV=y
@@ -6197,6 +6240,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-i686.config b/kernel-i686.config
index 860184f..e6a81c4 100644
--- a/kernel-i686.config
+++ b/kernel-i686.config
@@ -72,7 +72,7 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_PROCFS=y
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -82,8 +82,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_WMI=m
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -193,7 +191,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
CONFIG_ALIENWARE_WMI=m
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
# CONFIG_ALIX is not set
@@ -499,6 +496,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -559,6 +557,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -592,6 +591,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -716,6 +716,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -731,6 +733,7 @@ CONFIG_CHR_DEV_ST=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -803,10 +806,12 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -917,6 +922,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -969,6 +975,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1023,6 +1030,8 @@ CONFIG_DELL_LAPTOP=m
CONFIG_DELL_RBTN=m
# CONFIG_DELL_RBU is not set
CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_SMM=m
+CONFIG_DELL_SMBIOS_WMI=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_LED=m
@@ -1089,8 +1098,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1099,6 +1108,10 @@ CONFIG_DPTF_POWER=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+CONFIG_DRM_AMD_DC_DCN1_0=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1122,7 +1135,8 @@ CONFIG_DRM_GMA500=m
# CONFIG_DRM_GMA600 is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1151,10 +1165,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1168,7 +1186,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1183,6 +1202,7 @@ CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1354,7 +1374,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1586,7 +1605,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1616,9 +1634,11 @@ CONFIG_GPIO_ICH=m
CONFIG_GPIO_IT87=m
CONFIG_GPIOLIB=y
# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -1636,6 +1656,7 @@ CONFIG_GPIO_SCH=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1651,6 +1672,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1862,7 +1884,7 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYPERV_BALLOON=m
CONFIG_HYPERVISOR_GUEST=y
@@ -1990,6 +2012,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2165,11 +2188,13 @@ CONFIG_INTEL_RST=m
# CONFIG_INTEL_SCU_IPC is not set
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC_CHTWC is not set
CONFIG_INTEL_SOC_PMIC=y
# CONFIG_INTEL_TH is not set
# CONFIG_INTEL_TXT is not set
CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
CONFIG_INTEL_XWAY_PHY=m
# CONFIG_INTERVAL_TREE_TEST is not set
# CONFIG_INV_MPU6050_I2C is not set
@@ -2201,7 +2226,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2220,6 +2245,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2329,13 +2355,8 @@ CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2347,12 +2368,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2365,12 +2384,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2535,7 +2553,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2547,8 +2564,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_AMD=m
@@ -2586,6 +2601,7 @@ CONFIG_LCD_PLATFORM=m
# CONFIG_LDM_DEBUG is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LEDS_AAT1290 is not set
+CONFIG_LEDS_APU=m
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
@@ -2627,6 +2643,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2673,10 +2690,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2728,7 +2743,6 @@ CONFIG_LXT_PHY=m
# CONFIG_M586TSC is not set
# CONFIG_M62332 is not set
CONFIG_M686=y
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2756,6 +2770,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2780,7 +2795,6 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
@@ -2788,7 +2802,6 @@ CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
# CONFIG_MCRUSOE is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCYRIXIII is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2848,6 +2861,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2974,6 +2990,7 @@ CONFIG_MISDN_W6692=m
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3023,6 +3040,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -3147,6 +3165,7 @@ CONFIG_MTD_PHYSMAP_OF=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3188,7 +3207,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3376,6 +3395,7 @@ CONFIG_NETROM=m
# CONFIG_NET_SB1000 is not set
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3693,19 +3713,21 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=32
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NSC_GPIO=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
# CONFIG_NUMA is not set
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3724,7 +3746,6 @@ CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
CONFIG_OF=y
-CONFIG_OLD_BELKIN_DONGLE=m
CONFIG_OLPC_XO15_SCI=y
CONFIG_OLPC_XO1=m
CONFIG_OLPC_XO1_PM=y
@@ -3745,6 +3766,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3920,12 +3942,15 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_DENVERTON=m
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SINGLE is not set
# CONFIG_PINCTRL_SPRD is not set
@@ -3994,6 +4019,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4043,6 +4069,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4154,10 +4181,12 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RETPOLINE=y
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4186,6 +4215,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4266,6 +4296,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4339,6 +4370,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4615,8 +4647,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4751,7 +4785,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_SILEAD_DMI is not set
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4776,7 +4809,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4943,6 +4975,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4999,14 +5032,17 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_HASWELL=m
CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SST_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
CONFIG_SND_SOC=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9860 is not set
@@ -5072,6 +5108,7 @@ CONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_ZX_AUD96P22 is not set
CONFIG_SND_SONICVIBES=m
# CONFIG_SND_SPI is not set
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_TRIDENT=m
CONFIG_SND_USB_6FIRE=m
@@ -5109,7 +5146,6 @@ CONFIG_SONYPI_COMPAT=y
CONFIG_SONYPI=m
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SP5100_TCO=m
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSE_RCU_POINTER=y
@@ -5279,13 +5315,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5325,6 +5362,7 @@ CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THRUSTMASTER_FF=y
# CONFIG_THUNDERBOLT is not set
+CONFIG_THUNDERBOLT_NET=m
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
@@ -5336,6 +5374,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5357,10 +5396,8 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_TOSHIBA_BT_RFKILL=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA=m
CONFIG_TOSHIBA_WMI=m
@@ -5385,11 +5422,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5404,6 +5443,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5436,6 +5476,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5463,8 +5504,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5550,6 +5593,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5621,7 +5665,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5855,7 +5898,6 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5971,7 +6013,6 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMD=m
# CONFIG_VME_BUS is not set
CONFIG_VMWARE_BALLOON=m
@@ -5980,6 +6021,7 @@ CONFIG_VMWARE_VMCI=m
CONFIG_VMWARE_VMCI_VSOCKETS=m
CONFIG_VMXNET3=m
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6015,6 +6057,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6042,7 +6085,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6157,6 +6199,7 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
# CONFIG_XEN_PVCALLS_BACKEND is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVH=y
CONFIG_XEN_PV=y
@@ -6175,6 +6218,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-ppc64-debug.config b/kernel-ppc64-debug.config
index 2937c13..1d25295 100644
--- a/kernel-ppc64-debug.config
+++ b/kernel-ppc64-debug.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -150,7 +148,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -484,6 +481,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOOTX_TEXT=y
@@ -545,6 +543,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -578,6 +577,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -702,6 +702,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -715,6 +717,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -792,12 +795,14 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -848,7 +853,7 @@ CONFIG_CRYPTO_DEV_NX_COMPRESS=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
-CONFIG_CRYPTO_DEV_NX=y
+# CONFIG_CRYPTO_DEV_NX is not set
# CONFIG_CRYPTO_DEV_SP_CCP is not set
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
@@ -900,6 +905,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -951,6 +957,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1069,8 +1076,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1078,6 +1085,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1098,7 +1108,8 @@ CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1118,10 +1129,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1135,7 +1150,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1148,6 +1164,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTL=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1285,7 +1302,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1521,7 +1537,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1543,9 +1558,11 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1560,6 +1577,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1575,6 +1593,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1778,7 +1797,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -1902,6 +1921,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2043,6 +2063,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2074,7 +2095,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2094,6 +2115,7 @@ CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWERNV=m
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2198,13 +2220,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2216,12 +2233,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_ALL_CPUS=y
@@ -2236,12 +2251,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2405,7 +2419,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2417,8 +2430,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_BOOK3S_64_HV=m
@@ -2497,6 +2508,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2541,10 +2553,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2592,7 +2602,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2620,6 +2629,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2644,14 +2654,12 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCU_MPC8349EMITX is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2715,6 +2723,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2833,6 +2844,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -2883,6 +2895,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
# CONFIG_MMC_SDHCI_OF_HLWD is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -2999,6 +3012,7 @@ CONFIG_MTD_POWERNV_FLASH=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3033,7 +3047,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3219,6 +3233,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3535,14 +3550,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=1024
CONFIG_NR_DEV_DAX=32768
CONFIG_NR_IRQS=512
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -3550,6 +3566,7 @@ CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3566,7 +3583,6 @@ CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPAL_PRD=m
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3582,6 +3598,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3725,9 +3742,12 @@ CONFIG_PHYLINK=m
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -3790,6 +3810,7 @@ CONFIG_PPC_DT_CPU_FTRS=y
# CONFIG_PPC_EARLY_DEBUG is not set
CONFIG_PPC_EMULATED_STATS=y
# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set
+# CONFIG_PPC_FAST_ENDIAN_SWITCH is not set
# CONFIG_PPC_IBM_CELL_BLADE is not set
# CONFIG_PPC_ICSWX_PID is not set
# CONFIG_PPC_ICSWX_USE_SIGILL is not set
@@ -3805,6 +3826,7 @@ CONFIG_PPC_POWERNV=y
# CONFIG_PPC_PS3 is not set
CONFIG_PPC_PSERIES=y
# CONFIG_PPC_PTDUMP is not set
+CONFIG_PPC_RADIX_MMU_DEFAULT=y
CONFIG_PPC_RADIX_MMU=y
CONFIG_PPC_SMLPAR=y
CONFIG_PPC_SPLPAR=y
@@ -3830,6 +3852,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -3876,6 +3899,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -3986,9 +4010,11 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4017,6 +4043,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4101,6 +4128,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4172,6 +4200,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4439,8 +4468,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4577,7 +4608,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIMPLE_GPIO=y
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4602,7 +4632,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4778,6 +4807,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4916,7 +4946,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPAPR_TCE_IOMMU=y
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
@@ -5082,13 +5111,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5133,6 +5163,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5154,8 +5185,6 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5177,11 +5206,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5195,6 +5226,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5227,6 +5259,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5255,8 +5288,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5345,6 +5380,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5416,7 +5452,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5650,7 +5685,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5764,10 +5798,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
CONFIG_VSX=y
@@ -5804,6 +5838,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -5832,7 +5867,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WINDFARM_PM112=m
CONFIG_WINDFARM_PM121=m
CONFIG_WINDFARM_PM72=m
@@ -5881,6 +5915,7 @@ CONFIG_WQ_WATCHDOG=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_MCELOG_LEGACY=y
CONFIG_X86_PTDUMP=y
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -5888,6 +5923,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-ppc64.config b/kernel-ppc64.config
index 92a2912..d5d3f5d 100644
--- a/kernel-ppc64.config
+++ b/kernel-ppc64.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_ALS=m
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -150,7 +148,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -483,6 +480,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOOTX_TEXT=y
@@ -544,6 +542,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -577,6 +576,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -701,6 +701,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -714,6 +716,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -791,11 +794,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
# CONFIG_CPU_LITTLE_ENDIAN is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -846,7 +851,7 @@ CONFIG_CRYPTO_DEV_NX_COMPRESS=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
-CONFIG_CRYPTO_DEV_NX=y
+# CONFIG_CRYPTO_DEV_NX is not set
# CONFIG_CRYPTO_DEV_SP_CCP is not set
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
@@ -898,6 +903,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -949,6 +955,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1058,8 +1065,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1067,6 +1074,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1087,7 +1097,8 @@ CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1107,10 +1118,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1124,7 +1139,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1137,6 +1153,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTL=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1274,7 +1291,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1503,7 +1519,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1525,9 +1540,11 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1542,6 +1559,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1557,6 +1575,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1760,7 +1779,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -1884,6 +1903,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2025,6 +2045,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2056,7 +2077,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2076,6 +2097,7 @@ CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWERNV=m
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2180,13 +2202,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2198,12 +2215,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_ALL_CPUS=y
@@ -2218,12 +2233,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2385,7 +2399,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2397,8 +2410,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_BOOK3S_64_HV=m
@@ -2477,6 +2488,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2521,10 +2533,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2572,7 +2582,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2600,6 +2609,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2623,14 +2633,12 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCU_MPC8349EMITX is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2694,6 +2702,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2812,6 +2823,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -2862,6 +2874,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
# CONFIG_MMC_SDHCI_OF_HLWD is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -2977,6 +2990,7 @@ CONFIG_MTD_POWERNV_FLASH=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3011,7 +3025,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3197,6 +3211,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3513,14 +3528,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=1024
CONFIG_NR_DEV_DAX=32768
CONFIG_NR_IRQS=512
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -3528,6 +3544,7 @@ CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3544,7 +3561,6 @@ CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPAL_PRD=m
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3560,6 +3576,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3703,9 +3720,12 @@ CONFIG_PHYLINK=m
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -3768,6 +3788,7 @@ CONFIG_PPC_DT_CPU_FTRS=y
# CONFIG_PPC_EARLY_DEBUG is not set
CONFIG_PPC_EMULATED_STATS=y
# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set
+# CONFIG_PPC_FAST_ENDIAN_SWITCH is not set
# CONFIG_PPC_IBM_CELL_BLADE is not set
# CONFIG_PPC_ICSWX_PID is not set
# CONFIG_PPC_ICSWX_USE_SIGILL is not set
@@ -3783,6 +3804,7 @@ CONFIG_PPC_POWERNV=y
# CONFIG_PPC_PS3 is not set
CONFIG_PPC_PSERIES=y
# CONFIG_PPC_PTDUMP is not set
+CONFIG_PPC_RADIX_MMU_DEFAULT=y
CONFIG_PPC_RADIX_MMU=y
CONFIG_PPC_SMLPAR=y
CONFIG_PPC_SPLPAR=y
@@ -3808,6 +3830,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -3853,6 +3876,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -3963,9 +3987,11 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -3994,6 +4020,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4078,6 +4105,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4149,6 +4177,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4416,8 +4445,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4554,7 +4585,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIMPLE_GPIO=y
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4579,7 +4609,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4754,6 +4783,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4892,7 +4922,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPAPR_TCE_IOMMU=y
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
@@ -5058,13 +5087,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5109,6 +5139,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5130,8 +5161,6 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5153,11 +5182,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5171,6 +5202,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5203,6 +5235,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5231,8 +5264,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5321,6 +5356,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5392,7 +5428,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5626,7 +5661,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5740,10 +5774,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
CONFIG_VSX=y
@@ -5780,6 +5814,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -5808,7 +5843,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WINDFARM_PM112=m
CONFIG_WINDFARM_PM121=m
CONFIG_WINDFARM_PM72=m
@@ -5857,6 +5891,7 @@ CONFIG_WM8350_WATCHDOG=m
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set
CONFIG_X86_MCELOG_LEGACY=y
# CONFIG_X86_PTDUMP is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -5864,6 +5899,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-ppc64le-debug.config b/kernel-ppc64le-debug.config
index 285b298..6d5162f 100644
--- a/kernel-ppc64le-debug.config
+++ b/kernel-ppc64le-debug.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -145,7 +143,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -440,6 +437,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOOTX_TEXT=y
@@ -501,6 +499,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -534,6 +533,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -658,6 +658,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -671,6 +673,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -746,12 +749,14 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -802,7 +807,7 @@ CONFIG_CRYPTO_DEV_NX_COMPRESS=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
-CONFIG_CRYPTO_DEV_NX=y
+# CONFIG_CRYPTO_DEV_NX is not set
# CONFIG_CRYPTO_DEV_SP_CCP is not set
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
@@ -854,6 +859,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -905,6 +911,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1024,8 +1031,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1033,6 +1040,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1053,7 +1063,8 @@ CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1073,10 +1084,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1090,7 +1105,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1103,6 +1119,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTL=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1238,7 +1255,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1474,7 +1490,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1496,9 +1511,11 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1513,6 +1530,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1528,6 +1546,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1730,7 +1749,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -1847,6 +1866,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -1988,6 +2008,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2019,7 +2040,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2039,6 +2060,7 @@ CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWERNV=m
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2143,13 +2165,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2161,12 +2178,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_ALL_CPUS=y
@@ -2181,12 +2196,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2350,7 +2364,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2362,8 +2375,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_BOOK3S_64_HV=m
@@ -2442,6 +2453,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2486,10 +2498,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2537,7 +2547,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2565,6 +2574,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2589,14 +2599,12 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCU_MPC8349EMITX is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2660,6 +2668,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2778,6 +2789,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -2828,6 +2840,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
# CONFIG_MMC_SDHCI_OF_HLWD is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -2943,6 +2956,7 @@ CONFIG_MTD_POWERNV_FLASH=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -2977,7 +2991,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3163,6 +3177,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3479,14 +3494,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=1024
CONFIG_NR_DEV_DAX=32768
CONFIG_NR_IRQS=512
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -3494,6 +3510,7 @@ CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3510,7 +3527,6 @@ CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPAL_PRD=m
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3526,6 +3542,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3667,9 +3684,12 @@ CONFIG_PHYLINK=m
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -3729,6 +3749,7 @@ CONFIG_PPC_DT_CPU_FTRS=y
# CONFIG_PPC_EARLY_DEBUG is not set
CONFIG_PPC_EMULATED_STATS=y
# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set
+# CONFIG_PPC_FAST_ENDIAN_SWITCH is not set
# CONFIG_PPC_IBM_CELL_BLADE is not set
# CONFIG_PPC_ICSWX_PID is not set
# CONFIG_PPC_ICSWX_USE_SIGILL is not set
@@ -3744,6 +3765,7 @@ CONFIG_PPC_POWERNV=y
# CONFIG_PPC_PS3 is not set
CONFIG_PPC_PSERIES=y
# CONFIG_PPC_PTDUMP is not set
+CONFIG_PPC_RADIX_MMU_DEFAULT=y
CONFIG_PPC_RADIX_MMU=y
CONFIG_PPC_SMLPAR=y
CONFIG_PPC_SPLPAR=y
@@ -3769,6 +3791,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -3815,6 +3838,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -3925,9 +3949,11 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -3956,6 +3982,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4040,6 +4067,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4111,6 +4139,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4378,8 +4407,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4514,7 +4545,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIMPLE_GPIO=y
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4539,7 +4569,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4706,6 +4735,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4844,7 +4874,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPAPR_TCE_IOMMU=y
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
@@ -5010,13 +5039,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5061,6 +5091,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5082,8 +5113,6 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5105,11 +5134,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5123,6 +5154,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5155,6 +5187,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5183,8 +5216,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5273,6 +5308,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5344,7 +5380,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5578,7 +5613,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5692,10 +5726,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
CONFIG_VSX=y
@@ -5732,6 +5766,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -5760,7 +5795,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
# CONFIG_WINDFARM is not set
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
@@ -5803,6 +5837,7 @@ CONFIG_WQ_WATCHDOG=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_MCELOG_LEGACY=y
CONFIG_X86_PTDUMP=y
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -5810,6 +5845,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-ppc64le.config b/kernel-ppc64le.config
index 125388c..6b1a707 100644
--- a/kernel-ppc64le.config
+++ b/kernel-ppc64le.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_ALS=m
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -145,7 +143,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -439,6 +436,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOOTX_TEXT=y
@@ -500,6 +498,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -533,6 +532,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -657,6 +657,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -670,6 +672,7 @@ CONFIG_CHR_DEV_SCH=m
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -745,11 +748,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -800,7 +805,7 @@ CONFIG_CRYPTO_DEV_NX_COMPRESS=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_POWERNV=m
CONFIG_CRYPTO_DEV_NX_COMPRESS_PSERIES=m
CONFIG_CRYPTO_DEV_NX_ENCRYPT=m
-CONFIG_CRYPTO_DEV_NX=y
+# CONFIG_CRYPTO_DEV_NX is not set
# CONFIG_CRYPTO_DEV_SP_CCP is not set
CONFIG_CRYPTO_DEV_VIRTIO=m
CONFIG_CRYPTO_DEV_VMX_ENCRYPT=m
@@ -852,6 +857,7 @@ CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -903,6 +909,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1013,8 +1020,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1022,6 +1029,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1042,7 +1052,8 @@ CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1062,10 +1073,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1079,7 +1094,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1092,6 +1108,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DTL=y
CONFIG_DUMMY_CONSOLE_COLUMNS=80
@@ -1227,7 +1244,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1456,7 +1472,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1478,9 +1493,11 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
CONFIG_GPIOLIB=y
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1495,6 +1512,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1510,6 +1528,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1712,7 +1731,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -1829,6 +1848,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -1970,6 +1990,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -2001,7 +2022,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2021,6 +2042,7 @@ CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWERNV=m
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2125,13 +2147,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2143,12 +2160,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_ALL_CPUS=y
@@ -2163,12 +2178,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2330,7 +2344,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2342,8 +2355,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_BOOK3S_64_HV=m
@@ -2422,6 +2433,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2466,10 +2478,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2517,7 +2527,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2545,6 +2554,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2568,14 +2578,12 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
# CONFIG_MCU_MPC8349EMITX is not set
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
@@ -2639,6 +2647,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2757,6 +2768,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -2807,6 +2819,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
# CONFIG_MMC_SDHCI_OF_HLWD is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -2921,6 +2934,7 @@ CONFIG_MTD_POWERNV_FLASH=m
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -2955,7 +2969,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3141,6 +3155,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3457,14 +3472,15 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=1024
CONFIG_NR_DEV_DAX=32768
CONFIG_NR_IRQS=512
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
@@ -3472,6 +3488,7 @@ CONFIG_NUMA_BALANCING=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3488,7 +3505,6 @@ CONFIG_OCFS2_FS_O2CB=m
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF_OVERLAY is not set
# CONFIG_OF_UNITTEST is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPAL_PRD=m
CONFIG_OPENVSWITCH_GENEVE=m
@@ -3504,6 +3520,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3645,9 +3662,12 @@ CONFIG_PHYLINK=m
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -3707,6 +3727,7 @@ CONFIG_PPC_DT_CPU_FTRS=y
# CONFIG_PPC_EARLY_DEBUG is not set
CONFIG_PPC_EMULATED_STATS=y
# CONFIG_PPC_EPAPR_HV_BYTECHAN is not set
+# CONFIG_PPC_FAST_ENDIAN_SWITCH is not set
# CONFIG_PPC_IBM_CELL_BLADE is not set
# CONFIG_PPC_ICSWX_PID is not set
# CONFIG_PPC_ICSWX_USE_SIGILL is not set
@@ -3722,6 +3743,7 @@ CONFIG_PPC_POWERNV=y
# CONFIG_PPC_PS3 is not set
CONFIG_PPC_PSERIES=y
# CONFIG_PPC_PTDUMP is not set
+CONFIG_PPC_RADIX_MMU_DEFAULT=y
CONFIG_PPC_RADIX_MMU=y
CONFIG_PPC_SMLPAR=y
CONFIG_PPC_SPLPAR=y
@@ -3747,6 +3769,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -3792,6 +3815,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -3902,9 +3926,11 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -3933,6 +3959,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4017,6 +4044,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4088,6 +4116,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4355,8 +4384,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4491,7 +4522,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SIMPLE_GPIO=y
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4516,7 +4546,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4682,6 +4711,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4820,7 +4850,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPAPR_TCE_IOMMU=y
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_VMEMMAP=y
@@ -4986,13 +5015,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5037,6 +5067,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5058,8 +5089,6 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5081,11 +5110,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5099,6 +5130,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5131,6 +5163,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5159,8 +5192,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5249,6 +5284,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5320,7 +5356,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5554,7 +5589,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5668,10 +5702,10 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
# CONFIG_VME_BUS is not set
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
CONFIG_VSX=y
@@ -5708,6 +5742,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -5736,7 +5771,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
# CONFIG_WINDFARM is not set
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
@@ -5779,6 +5813,7 @@ CONFIG_WM8350_WATCHDOG=m
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set
CONFIG_X86_MCELOG_LEGACY=y
# CONFIG_X86_PTDUMP is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -5786,6 +5821,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-s390x-debug.config b/kernel-s390x-debug.config
index a1d4f94..598d716 100644
--- a/kernel-s390x-debug.config
+++ b/kernel-s390x-debug.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_DEBUG=y
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -145,7 +143,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
# CONFIG_ALIM7101_WDT is not set
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -153,6 +150,7 @@ CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
CONFIG_ALTERA_MSGDMA=m
# CONFIG_ALTERA_STAPL is not set
# CONFIG_ALTERA_TSE is not set
+CONFIG_ALTERNATIVES=y
CONFIG_ALX=m
# CONFIG_AM2315 is not set
CONFIG_AMD8111_ETH=m
@@ -441,6 +439,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -501,6 +500,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -534,6 +534,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -658,6 +659,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
# CONFIG_CHARGER_SMB347 is not set
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHECK_STACK=y
CONFIG_CHELSIO_T1_1G=y
@@ -673,6 +676,7 @@ CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHSC_SCH=m
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -747,11 +751,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
# CONFIG_CPU_IDLE is not set
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -851,6 +857,7 @@ CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SHA512_S390=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -907,6 +914,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1023,8 +1031,8 @@ CONFIG_DM_ZONED=m
# CONFIG_DNET is not set
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
# CONFIG_DP83640_PHY is not set
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1032,6 +1040,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1052,7 +1063,8 @@ CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1073,10 +1085,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1089,7 +1105,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1102,6 +1119,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1235,7 +1253,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
# CONFIG_ETHOC is not set
@@ -1449,7 +1466,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1470,9 +1486,11 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
# CONFIG_GPIOLIB is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1487,6 +1505,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1500,6 +1519,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1690,7 +1710,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -1799,6 +1819,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_IIO is not set
@@ -1940,6 +1961,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -1971,7 +1993,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -1991,6 +2013,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2095,13 +2118,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
+# CONFIG_IPX is not set
# CONFIG_IRDA is not set
-# CONFIG_IRDA_ULTRA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2113,12 +2131,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_DOMAIN_DEBUG=y
@@ -2131,12 +2147,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2299,7 +2314,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2311,8 +2325,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM=m
@@ -2385,6 +2397,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2429,10 +2442,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2479,7 +2490,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2506,6 +2516,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARCH_ZEC12=y
@@ -2531,14 +2542,12 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2602,6 +2611,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2719,6 +2731,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -2768,6 +2781,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -2879,6 +2893,7 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -2913,7 +2928,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3100,6 +3115,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3412,13 +3428,14 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=64
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set
@@ -3427,6 +3444,7 @@ CONFIG_NUMA_EMU=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3442,7 +3460,6 @@ CONFIG_OCFS2_FS_O2CB=m
# CONFIG_OCFS2_FS_STATS is not set
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
CONFIG_OPENVSWITCH_GRE=m
@@ -3457,6 +3474,7 @@ CONFIG_ORINOCO_USB=m
# CONFIG_OSF_PARTITION is not set
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3600,9 +3618,12 @@ CONFIG_PHYLINK=m
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -3662,6 +3683,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_TRACER is not set
@@ -3705,6 +3727,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QDIO=m
CONFIG_QEDE=m
CONFIG_QEDF=m
@@ -3818,10 +3841,12 @@ CONFIG_REISERFS_PROC_INFO=y
CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_CONTROLLER is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -3850,6 +3875,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -3930,6 +3956,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4011,6 +4038,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4281,8 +4309,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4413,7 +4443,6 @@ CONFIG_SHARED_KERNEL=y
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_SIMPLE_PM_BUS is not set
CONFIG_SIS190=m
@@ -4437,7 +4466,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4605,6 +4633,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4743,7 +4772,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
# CONFIG_SOUND is not set
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_SPEAKUP is not set
# CONFIG_SPI_ALTERA is not set
@@ -4905,13 +4933,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -4956,6 +4985,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
# CONFIG_TIFM_CORE is not set
@@ -4983,8 +5013,6 @@ CONFIG_TN3270_CONSOLE=y
CONFIG_TN3270_FS=m
CONFIG_TN3270_TTY=y
CONFIG_TN3270=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -5006,11 +5034,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5024,6 +5054,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5056,6 +5087,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5083,8 +5115,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5169,6 +5203,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5240,7 +5275,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5472,7 +5506,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5586,13 +5619,13 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMCP_CMA_SIZE=4
CONFIG_VMCP=y
# CONFIG_VME_BUS is not set
CONFIG_VMLOGRDR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -5628,6 +5661,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -5656,7 +5690,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
# CONFIG_WIRELESS_EXT is not set
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -5698,6 +5731,7 @@ CONFIG_WQ_WATCHDOG=y
CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
CONFIG_X86_MCELOG_LEGACY=y
CONFIG_X86_PTDUMP=y
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -5705,6 +5739,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-s390x.config b/kernel-s390x.config
index 1d2bfc3..1f7a53f 100644
--- a/kernel-s390x.config
+++ b/kernel-s390x.config
@@ -45,8 +45,6 @@ CONFIG_ACPI_ALS=m
# CONFIG_ACPI_NFIT is not set
CONFIG_ACPI_PCI_SLOT=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -145,7 +143,6 @@ CONFIG_AIX_PARTITION=y
# CONFIG_AK8974 is not set
# CONFIG_AK8975 is not set
# CONFIG_AL3320A is not set
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
# CONFIG_ALIM7101_WDT is not set
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -153,6 +150,7 @@ CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
CONFIG_ALTERA_MSGDMA=m
# CONFIG_ALTERA_STAPL is not set
# CONFIG_ALTERA_TSE is not set
+CONFIG_ALTERNATIVES=y
CONFIG_ALX=m
# CONFIG_AM2315 is not set
CONFIG_AMD8111_ETH=m
@@ -440,6 +438,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -500,6 +499,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -533,6 +533,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
# CONFIG_BTT is not set
@@ -657,6 +658,8 @@ CONFIG_CGROUPS=y
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
# CONFIG_CHARGER_SMB347 is not set
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHECK_STACK=y
CONFIG_CHELSIO_T1_1G=y
@@ -672,6 +675,7 @@ CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_ST=m
CONFIG_CHROME_PLATFORMS=y
CONFIG_CHSC_SCH=m
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
# CONFIG_CIFS_DEBUG2 is not set
@@ -746,10 +750,12 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
# CONFIG_CPU_IDLE is not set
+# CONFIG_CPU_ISOLATION is not set
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -849,6 +855,7 @@ CONFIG_CRYPTO_SHA3=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_SHA512_S390=m
CONFIG_CRYPTO_SIMD=y
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -905,6 +912,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1012,8 +1020,8 @@ CONFIG_DM_ZONED=m
# CONFIG_DNET is not set
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
# CONFIG_DP83640_PHY is not set
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1021,6 +1029,9 @@ CONFIG_DPOT_DAC=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1041,7 +1052,8 @@ CONFIG_DRM_FBDEV_EMULATION=y
CONFIG_DRM_FBDEV_OVERALLOC=100
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1062,10 +1074,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
# CONFIG_DRM_PANEL_LVDS is not set
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1078,7 +1094,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1091,6 +1108,7 @@ CONFIG_DRM_VIA=m
CONFIG_DRM_VIRTIO_GPU=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1224,7 +1242,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
# CONFIG_ETHOC is not set
@@ -1431,7 +1448,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1452,9 +1468,11 @@ CONFIG_GPIO_EXAR=m
# CONFIG_GPIO_GRGPIO is not set
# CONFIG_GPIO_IT87 is not set
# CONFIG_GPIOLIB is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MOCKUP is not set
@@ -1469,6 +1487,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1482,6 +1501,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1672,7 +1692,7 @@ CONFIG_HW_RANDOM_TIMERIOMEM=m
CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYSDN_CAPI=y
CONFIG_HYSDN=m
@@ -1781,6 +1801,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
# CONFIG_IIO is not set
@@ -1922,6 +1943,7 @@ CONFIG_INPUT=y
CONFIG_INPUT_YEALINK=m
# CONFIG_INTEGRITY is not set
# CONFIG_INTEL_IDMA64 is not set
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
# CONFIG_INTEL_SOC_PMIC is not set
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_XWAY_PHY=m
@@ -1953,7 +1975,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -1973,6 +1995,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2077,13 +2100,8 @@ CONFIG_IPVTAP=m
# CONFIG_IPW2200 is not set
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
+# CONFIG_IPX is not set
# CONFIG_IRDA is not set
-# CONFIG_IRDA_ULTRA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2095,12 +2113,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
CONFIG_IRQ_DOMAIN_DEBUG=y
@@ -2113,12 +2129,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2279,7 +2294,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2291,8 +2305,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM=m
@@ -2365,6 +2377,7 @@ CONFIG_LEDS_REGULATOR=m
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2409,10 +2422,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2459,7 +2470,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2486,6 +2496,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX is not set
# CONFIG_MAILBOX_TEST is not set
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARCH_ZEC12=y
@@ -2510,14 +2521,12 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2581,6 +2590,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -2698,6 +2710,7 @@ CONFIG_MISDN_NETJET=m
CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -2747,6 +2760,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -2857,6 +2871,7 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -2891,7 +2906,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3078,6 +3093,7 @@ CONFIG_NET_POLL_CONTROLLER=y
CONFIG_NETROM=m
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3390,13 +3406,14 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
# CONFIG_NOZOMI is not set
CONFIG_NR_CPUS=64
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_IDT=m
# CONFIG_NTB is not set
+CONFIG_NTB_SWITCHTEC=m
# CONFIG_NTFS_FS is not set
CONFIG_NTP_PPS=y
# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set
@@ -3405,6 +3422,7 @@ CONFIG_NUMA_EMU=y
CONFIG_NUMA=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3420,7 +3438,6 @@ CONFIG_OCFS2_FS_O2CB=m
# CONFIG_OCFS2_FS_STATS is not set
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
CONFIG_OPENVSWITCH_GRE=m
@@ -3435,6 +3452,7 @@ CONFIG_ORINOCO_USB=m
# CONFIG_OSF_PARTITION is not set
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3578,9 +3596,12 @@ CONFIG_PHYLINK=m
CONFIG_PID_NS=y
# CONFIG_PINCONF is not set
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
# CONFIG_PINCTRL_IPQ8074 is not set
# CONFIG_PINCTRL is not set
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -3640,6 +3661,7 @@ CONFIG_PPS_CLIENT_LDISC=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_TRACER is not set
@@ -3682,6 +3704,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QDIO=m
CONFIG_QEDE=m
CONFIG_QEDF=m
@@ -3795,10 +3818,12 @@ CONFIG_REISERFS_PROC_INFO=y
CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_CONTROLLER is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -3827,6 +3852,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -3907,6 +3933,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -3988,6 +4015,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4258,8 +4286,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4390,7 +4420,6 @@ CONFIG_SHARED_KERNEL=y
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
# CONFIG_SIMPLE_PM_BUS is not set
CONFIG_SIS190=m
@@ -4414,7 +4443,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4581,6 +4609,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -4719,7 +4748,6 @@ CONFIG_SONY_FF=y
# CONFIG_SONYPI is not set
# CONFIG_SOUND is not set
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SPARSE_RCU_POINTER=y
# CONFIG_SPEAKUP is not set
# CONFIG_SPI_ALTERA is not set
@@ -4881,13 +4909,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -4932,6 +4961,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
# CONFIG_TIFM_CORE is not set
@@ -4959,8 +4989,6 @@ CONFIG_TN3270_CONSOLE=y
CONFIG_TN3270_FS=m
CONFIG_TN3270_TTY=y
CONFIG_TN3270=y
-CONFIG_TOIM3232_DONGLE=m
-# CONFIG_TOSHIBA_FIR is not set
# CONFIG_TOUCHSCREEN_AD7877 is not set
CONFIG_TOUCHSCREEN_AD7879_I2C=m
# CONFIG_TOUCHSCREEN_AD7879 is not set
@@ -4982,11 +5010,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
# CONFIG_TOUCHSCREEN_GOODIX is not set
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5000,6 +5030,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5032,6 +5063,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5059,8 +5091,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5145,6 +5179,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5216,7 +5251,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5448,7 +5482,6 @@ CONFIG_VGA_CONSOLE=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -5562,13 +5595,13 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMCP_CMA_SIZE=4
CONFIG_VMCP=y
# CONFIG_VME_BUS is not set
CONFIG_VMLOGRDR=m
# CONFIG_VMXNET3 is not set
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -5604,6 +5637,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -5632,7 +5666,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
# CONFIG_WIRELESS_EXT is not set
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -5674,6 +5707,7 @@ CONFIG_WM8350_WATCHDOG=m
# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set
CONFIG_X86_MCELOG_LEGACY=y
# CONFIG_X86_PTDUMP is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_XFRM_SUB_POLICY=y
@@ -5681,6 +5715,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-x86_64-debug.config b/kernel-x86_64-debug.config
index e7b469b..a9ce3a5 100644
--- a/kernel-x86_64-debug.config
+++ b/kernel-x86_64-debug.config
@@ -75,7 +75,7 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_PROCFS=y
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -85,8 +85,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_WMI=m
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -196,7 +194,6 @@ CONFIG_AIX_PARTITION=y
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
CONFIG_ALIENWARE_WMI=m
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -512,6 +509,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -572,6 +570,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -605,6 +604,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
CONFIG_BTT=y
@@ -725,11 +725,14 @@ CONFIG_CHARGER_BQ24190=m
# CONFIG_CHARGER_ISP1704 is not set
# CONFIG_CHARGER_LP8727 is not set
# CONFIG_CHARGER_LTC3651 is not set
+# CONFIG_CHARGER_MANAGER is not set
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_CHARGER_PCF50633 is not set
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -745,6 +748,7 @@ CONFIG_CHR_DEV_ST=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CHT_WC_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
@@ -822,11 +826,13 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+CONFIG_CPU_ISOLATION=y
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPU_NOTIFIER_ERROR_INJECT=m
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -958,6 +964,7 @@ CONFIG_CRYPTO_SHA512_MB=m
CONFIG_CRYPTO_SHA512_SSSE3=m
CONFIG_CRYPTO_SIMD=y
# CONFIG_CRYPTO_SKEIN is not set
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1010,6 +1017,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y
CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4096
@@ -1072,6 +1080,8 @@ CONFIG_DELL_LAPTOP=m
CONFIG_DELL_RBTN=m
# CONFIG_DELL_RBU is not set
CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_SMM=m
+CONFIG_DELL_SMBIOS_WMI=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_LED=m
@@ -1145,8 +1155,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1155,6 +1165,10 @@ CONFIG_DPTF_POWER=m
CONFIG_DRAGONRISE_FF=y
CONFIG_DRBD_FAULT_INJECTION=y
CONFIG_DRM_AMD_ACP=y
+CONFIG_DRM_AMD_DC_DCN1_0=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1178,7 +1192,8 @@ CONFIG_DRM_GMA500=m
# CONFIG_DRM_GMA600 is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1207,10 +1222,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1224,7 +1243,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1239,6 +1259,7 @@ CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1410,7 +1431,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1646,7 +1666,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1676,9 +1695,11 @@ CONFIG_GPIO_ICH=m
CONFIG_GPIO_IT87=m
CONFIG_GPIOLIB=y
# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -1695,6 +1716,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1710,6 +1732,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1921,7 +1944,7 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYPERV_BALLOON=m
CONFIG_HYPERVISOR_GUEST=y
@@ -2053,6 +2076,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2185,6 +2209,7 @@ CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_POWERMATE=m
# CONFIG_INPUT_PWM_BEEPER is not set
# CONFIG_INPUT_PWM_VIBRA is not set
+# CONFIG_INPUT_REGULATOR_HAPTIC is not set
CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_RK805_PWRKEY=m
CONFIG_INPUT_SOC_BUTTON_ARRAY=m
@@ -2236,12 +2261,14 @@ CONFIG_INTEL_RST=m
# CONFIG_INTEL_SCU_IPC is not set
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
CONFIG_INTEL_SOC_PMIC_CHTWC=y
CONFIG_INTEL_SOC_PMIC=y
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_TURBO_MAX_3=y
CONFIG_INTEL_TXT=y
CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
CONFIG_INTEL_XWAY_PHY=m
# CONFIG_INTERVAL_TREE_TEST is not set
CONFIG_INV_MPU6050_I2C=m
@@ -2274,7 +2301,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2293,6 +2320,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2402,13 +2430,8 @@ CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2420,12 +2443,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2439,12 +2460,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2611,7 +2631,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2623,8 +2642,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_AMD=m
@@ -2661,6 +2678,7 @@ CONFIG_LCD_PLATFORM=m
# CONFIG_LDM_DEBUG is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LEDS_AAT1290 is not set
+CONFIG_LEDS_APU=m
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
@@ -2697,11 +2715,12 @@ CONFIG_LEDS_NIC78BX=m
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_PCA963X is not set
# CONFIG_LEDS_PWM is not set
-CONFIG_LEDS_REGULATOR=m
+# CONFIG_LEDS_REGULATOR is not set
# CONFIG_LEDS_S3C24XX is not set
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2748,10 +2767,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2798,7 +2815,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2826,6 +2842,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2849,14 +2866,12 @@ CONFIG_MAXSMP=y
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2919,6 +2934,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -3044,6 +3062,7 @@ CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
# CONFIG_MK8 is not set
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3094,6 +3113,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -3211,6 +3231,7 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3249,7 +3270,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3438,6 +3459,7 @@ CONFIG_NETROM=m
# CONFIG_NET_SB1000 is not set
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3759,11 +3781,11 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+CONFIG_NOUVEAU_DEBUG_MMU=y
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=8192
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_AMD=m
CONFIG_NTB_IDT=m
CONFIG_NTB_INTEL=m
@@ -3771,6 +3793,7 @@ CONFIG_NTB=m
CONFIG_NTB_NETDEV=m
CONFIG_NTB_PERF=m
CONFIG_NTB_PINGPONG=m
+CONFIG_NTB_SWITCHTEC=m
CONFIG_NTB_TOOL=m
CONFIG_NTB_TRANSPORT=m
# CONFIG_NTFS_FS is not set
@@ -3783,6 +3806,7 @@ CONFIG_NVDIMM_DAX=y
CONFIG_NVDIMM_PFN=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3799,7 +3823,6 @@ CONFIG_OCFS2_FS_O2CB=m
# CONFIG_OCFS2_FS_STATS is not set
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
CONFIG_OPENVSWITCH_GRE=m
@@ -3814,6 +3837,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3985,12 +4009,15 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_DENVERTON=m
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -4056,6 +4083,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4106,6 +4134,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4203,11 +4232,44 @@ CONFIG_REALTEK_PHY=m
CONFIG_REFCOUNT_FULL=y
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP=y
-CONFIG_REGULATOR_BD9571MWV=m
+# CONFIG_REGULATOR_ACT8865 is not set
+# CONFIG_REGULATOR_AD5398 is not set
+# CONFIG_REGULATOR_AXP20X is not set
+# CONFIG_REGULATOR_BD9571MWV is not set
+# CONFIG_REGULATOR_DA9210 is not set
+# CONFIG_REGULATOR_DA9211 is not set
# CONFIG_REGULATOR_DEBUG is not set
-# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FAN53555 is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_GPIO is not set
+# CONFIG_REGULATOR_ISL6271A is not set
+# CONFIG_REGULATOR_ISL9305 is not set
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_LP872X is not set
+# CONFIG_REGULATOR_LP8755 is not set
+# CONFIG_REGULATOR_LTC3589 is not set
+# CONFIG_REGULATOR_LTC3676 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
+# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_PFUZE100 is not set
+# CONFIG_REGULATOR_PV88060 is not set
+# CONFIG_REGULATOR_PV88080 is not set
+# CONFIG_REGULATOR_PV88090 is not set
+# CONFIG_REGULATOR_PWM is not set
+# CONFIG_REGULATOR_TPS51632 is not set
+# CONFIG_REGULATOR_TPS62360 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
# CONFIG_REGULATOR_TPS65132 is not set
+# CONFIG_REGULATOR_TPS6524X is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
CONFIG_REGULATOR_VCTRL=m
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+CONFIG_REGULATOR=y
# CONFIG_REISERFS_CHECK is not set
CONFIG_REISERFS_FS=m
CONFIG_REISERFS_FS_POSIX_ACL=y
@@ -4218,10 +4280,12 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RETPOLINE=y
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4250,6 +4314,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4330,6 +4395,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4403,6 +4469,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4664,6 +4731,7 @@ CONFIG_SENSORS_LM95241=m
CONFIG_SENSORS_LM95245=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC2978=m
+# CONFIG_SENSORS_LTC2978_REGULATOR is not set
CONFIG_SENSORS_LTC2990=m
CONFIG_SENSORS_LTC3815=m
CONFIG_SENSORS_LTC4151=m
@@ -4680,8 +4748,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4821,7 +4891,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SILEAD_DMI=y
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4846,7 +4915,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4941,7 +5009,7 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=0
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INTEL=m
CONFIG_SND_HDA_PATCH_LOADER=y
-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1
CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_PREALLOC_SIZE=4096
CONFIG_SND_HDA_RECONFIG=y
@@ -5014,6 +5082,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -5070,14 +5139,17 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_HASWELL=m
CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SST_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
CONFIG_SND_SOC=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9860 is not set
@@ -5143,6 +5215,7 @@ CONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_ZX_AUD96P22 is not set
CONFIG_SND_SONICVIBES=m
# CONFIG_SND_SPI is not set
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_TRIDENT=m
CONFIG_SND_USB_6FIRE=m
@@ -5180,7 +5253,6 @@ CONFIG_SONYPI_COMPAT=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SP5100_TCO=m
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_EXTREME=y
@@ -5353,13 +5425,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5399,6 +5472,7 @@ CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_THUNDERBOLT=m
+CONFIG_THUNDERBOLT_NET=m
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
@@ -5410,6 +5484,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5431,10 +5506,8 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_TOSHIBA_BT_RFKILL=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA_WMI=m
# CONFIG_TOUCHSCREEN_AD7877 is not set
@@ -5458,11 +5531,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5477,6 +5552,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5509,6 +5585,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5537,8 +5614,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5624,6 +5703,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5695,7 +5775,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5930,7 +6009,6 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6046,7 +6124,6 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMAP_STACK=y
CONFIG_VMD=m
# CONFIG_VME_BUS is not set
@@ -6058,6 +6135,7 @@ CONFIG_VMXNET3=m
CONFIG_VOP_BUS=m
CONFIG_VOP=m
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6093,6 +6171,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6120,7 +6199,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6228,6 +6306,7 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
# CONFIG_XEN_PVCALLS_BACKEND is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVH=y
CONFIG_XEN_PV=y
@@ -6248,6 +6327,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel-x86_64.config b/kernel-x86_64.config
index 9fdfed9..e35b4df 100644
--- a/kernel-x86_64.config
+++ b/kernel-x86_64.config
@@ -75,7 +75,7 @@ CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
CONFIG_ACPI_PROCESSOR=y
# CONFIG_ACPI_PROCFS_POWER is not set
CONFIG_ACPI_PROCFS=y
-# CONFIG_ACPI_REV_OVERRIDE_POSSIBLE is not set
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
CONFIG_ACPI_SBS=m
CONFIG_ACPI_SLEEP=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -85,8 +85,6 @@ CONFIG_ACPI_VIDEO=m
CONFIG_ACPI_WMI=m
CONFIG_ACPI=y
# CONFIG_ACQUIRE_WDT is not set
-CONFIG_ACT200L_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
# CONFIG_AD2S90 is not set
@@ -196,7 +194,6 @@ CONFIG_AIX_PARTITION=y
CONFIG_AK8975=m
# CONFIG_AL3320A is not set
CONFIG_ALIENWARE_WMI=m
-CONFIG_ALI_FIR=m
CONFIG_ALIM1535_WDT=m
CONFIG_ALIM7101_WDT=m
CONFIG_ALLOW_LOCKDOWN_LIFT_BY_SYSRQ=y
@@ -511,6 +508,7 @@ CONFIG_BONDING=m
# CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set
# CONFIG_BOOTPARAM_HOTPLUG_CPU0 is not set
# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+# CONFIG_BOOTPARAM_LOCKDEP_CROSSRELEASE_FULLSTACK is not set
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOT_PRINTK_DELAY=y
CONFIG_BOUNCE=y
@@ -571,6 +569,7 @@ CONFIG_BT_HCIBPA10X=m
CONFIG_BT_HCIBT3C=m
CONFIG_BT_HCIBTSDIO=m
CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
CONFIG_BT_HCIBTUSB_BCM=y
CONFIG_BT_HCIBTUSB=m
CONFIG_BT_HCIBTUSB_RTL=y
@@ -604,6 +603,7 @@ CONFIG_BT_RFCOMM_TTY=y
# CONFIG_BTRFS_FS_CHECK_INTEGRITY is not set
CONFIG_BTRFS_FS=m
CONFIG_BTRFS_FS_POSIX_ACL=y
+# CONFIG_BTRFS_FS_REF_VERIFY is not set
# CONFIG_BTRFS_FS_RUN_SANITY_TESTS is not set
# CONFIG_BT_SELFTEST is not set
CONFIG_BTT=y
@@ -724,11 +724,14 @@ CONFIG_CHARGER_BQ24190=m
# CONFIG_CHARGER_ISP1704 is not set
# CONFIG_CHARGER_LP8727 is not set
# CONFIG_CHARGER_LTC3651 is not set
+# CONFIG_CHARGER_MANAGER is not set
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_CHARGER_PCF50633 is not set
# CONFIG_CHARGER_RT9455 is not set
# CONFIG_CHARGER_SBS is not set
CONFIG_CHARGER_SMB347=m
+# CONFIG_CHASH_SELFTEST is not set
+# CONFIG_CHASH_STATS is not set
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_CHELSIO_T1_1G=y
CONFIG_CHELSIO_T1=m
@@ -744,6 +747,7 @@ CONFIG_CHR_DEV_ST=m
CONFIG_CHROMEOS_LAPTOP=m
CONFIG_CHROMEOS_PSTORE=m
CONFIG_CHROME_PLATFORMS=y
+CONFIG_CHT_DC_TI_PMIC_OPREGION=y
CONFIG_CHT_WC_PMIC_OPREGION=y
CONFIG_CICADA_PHY=m
CONFIG_CIFS_ACL=y
@@ -821,10 +825,12 @@ CONFIG_CPU_FREQ=y
# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
# CONFIG_CPU_IDLE_GOV_LADDER is not set
CONFIG_CPU_IDLE=y
+CONFIG_CPU_ISOLATION=y
CONFIG_CPUMASK_OFFSTACK=y
CONFIG_CPUSETS=y
# CONFIG_CPU_THERMAL is not set
CONFIG_CRAMFS=m
+# CONFIG_CRAMFS_MTD is not set
CONFIG_CRASH_DUMP=y
CONFIG_CRASH=m
CONFIG_CRC16=y
@@ -956,6 +962,7 @@ CONFIG_CRYPTO_SHA512_MB=m
CONFIG_CRYPTO_SHA512_SSSE3=m
CONFIG_CRYPTO_SIMD=y
# CONFIG_CRYPTO_SKEIN is not set
+CONFIG_CRYPTO_SM3=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_TGR192=m
@@ -1008,6 +1015,7 @@ CONFIG_DEBUG_HIGHMEM=y
# CONFIG_DEBUG_INFO_SPLIT is not set
CONFIG_DEBUG_INFO_VTA=y
CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_KERNEL_DC is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_KMEMLEAK_TEST is not set
@@ -1062,6 +1070,8 @@ CONFIG_DELL_LAPTOP=m
CONFIG_DELL_RBTN=m
# CONFIG_DELL_RBU is not set
CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_SMM=m
+CONFIG_DELL_SMBIOS_WMI=m
CONFIG_DELL_SMO8800=m
CONFIG_DELL_WMI_AIO=m
CONFIG_DELL_WMI_LED=m
@@ -1134,8 +1144,8 @@ CONFIG_DM_ZONED=m
CONFIG_DNET=m
CONFIG_DNOTIFY=y
CONFIG_DNS_RESOLVER=m
-CONFIG_DONGLE=y
CONFIG_DP83640_PHY=m
+CONFIG_DP83822_PHY=m
CONFIG_DP83848_PHY=m
# CONFIG_DP83867_PHY is not set
# CONFIG_DPM_WATCHDOG is not set # revisit this in debug
@@ -1144,6 +1154,10 @@ CONFIG_DPTF_POWER=m
CONFIG_DRAGONRISE_FF=y
# CONFIG_DRBD_FAULT_INJECTION is not set
CONFIG_DRM_AMD_ACP=y
+CONFIG_DRM_AMD_DC_DCN1_0=y
+# CONFIG_DRM_AMD_DC_FBC is not set
+# CONFIG_DRM_AMD_DC_PRE_VEGA is not set
+CONFIG_DRM_AMD_DC=y
CONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_GART_DEBUGFS is not set
CONFIG_DRM_AMDGPU=m
@@ -1167,7 +1181,8 @@ CONFIG_DRM_GMA500=m
# CONFIG_DRM_GMA600 is not set
CONFIG_DRM_HISI_HIBMC=m
CONFIG_DRM_I2C_ADV7511_AUDIO=y
-CONFIG_DRM_I2C_ADV7511=m
+# CONFIG_DRM_I2C_ADV7511_CEC is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
CONFIG_DRM_I2C_ADV7533=y
CONFIG_DRM_I2C_CH7006=m
CONFIG_DRM_I2C_NXP_TDA998X=m
@@ -1196,10 +1211,14 @@ CONFIG_DRM_NOUVEAU=m
# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
# CONFIG_DRM_PANEL_LG_LG4573 is not set
CONFIG_DRM_PANEL_LVDS=m
+CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m
# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m
# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+CONFIG_DRM_PANEL_SEIKO_43WVF1G=m
# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
# CONFIG_DRM_PANEL_SIMPLE is not set
@@ -1213,7 +1232,8 @@ CONFIG_DRM_RADEON_USERPTR=y
# CONFIG_DRM_RCAR_DW_HDMI is not set
# CONFIG_DRM_SAVAGE is not set
# CONFIG_DRM_SII902X is not set
-CONFIG_DRM_SIL_SII8620=m
+CONFIG_DRM_SII9234=m
+# CONFIG_DRM_SIL_SII8620 is not set
# CONFIG_DRM_SIS is not set
# CONFIG_DRM_TDFX is not set
# CONFIG_DRM_TINYDRM is not set
@@ -1228,6 +1248,7 @@ CONFIG_DRM_VMWGFX_FBCON=y
CONFIG_DRM_VMWGFX=m
# CONFIG_DS1682 is not set
# CONFIG_DS1803 is not set
+# CONFIG_DS4424 is not set
# CONFIG_DT3155 is not set
CONFIG_DUMMY_CONSOLE_COLUMNS=80
CONFIG_DUMMY_CONSOLE_ROWS=25
@@ -1399,7 +1420,6 @@ CONFIG_ENVELOPE_DETECTOR=m
CONFIG_EPIC100=m
CONFIG_EPOLL=y
CONFIG_EQUALIZER=m
-CONFIG_ESI_DONGLE=m
CONFIG_ET131X=m
CONFIG_ETHERNET=y
CONFIG_ETHOC=m
@@ -1628,7 +1648,6 @@ CONFIG_GIGASET_CAPI=y
# CONFIG_GIGASET_DEBUG is not set
CONFIG_GIGASET_M101=m
CONFIG_GIGASET_M105=m
-CONFIG_GIRBIL_DONGLE=m
# CONFIG_GLOB_SELFTEST is not set
# CONFIG_GOLDFISH is not set
# CONFIG_GOOGLE_FIRMWARE is not set
@@ -1658,9 +1677,11 @@ CONFIG_GPIO_ICH=m
CONFIG_GPIO_IT87=m
CONFIG_GPIOLIB=y
# CONFIG_GPIO_LYNXPOINT is not set
+# CONFIG_GPIO_MAX3191X is not set
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_MB86S7X is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_ML_IOH is not set
@@ -1677,6 +1698,7 @@ CONFIG_GPIO_PCI_IDIO_16=m
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_SYSCON is not set
# CONFIG_GPIO_SYSFS is not set
+# CONFIG_GPIO_TEGRA186 is not set
# CONFIG_GPIO_TPIC2810 is not set
CONFIG_GPIO_TPS68470=y
# CONFIG_GPIO_TS4900 is not set
@@ -1692,6 +1714,7 @@ CONFIG_GREENASIA_FF=y
# CONFIG_GREYBUS is not set
# CONFIG_GS_FPGABOOT is not set
CONFIG_GTP=m
+# CONFIG_GUP_BENCHMARK is not set
CONFIG_HAMACHI=m
CONFIG_HAMRADIO=y
CONFIG_HANGCHECK_TIMER=m
@@ -1903,7 +1926,7 @@ CONFIG_HW_RANDOM_TPM=m
CONFIG_HW_RANDOM_VIA=m
CONFIG_HW_RANDOM_VIRTIO=m
CONFIG_HW_RANDOM=y
-CONFIG_HWSPINLOCK=m
+CONFIG_HWSPINLOCK=y
# CONFIG_HX711 is not set
CONFIG_HYPERV_BALLOON=m
CONFIG_HYPERVISOR_GUEST=y
@@ -2035,6 +2058,7 @@ CONFIG_IIO_BUFFER_CB=m
CONFIG_IIO_BUFFER=y
CONFIG_IIO_CONFIGFS=m
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
+CONFIG_IIO_CROS_EC_ACCEL_LEGACY=m
# CONFIG_IIO_HRTIMER_TRIGGER is not set
CONFIG_IIO_INTERRUPT_TRIGGER=m
CONFIG_IIO_KFIFO_BUF=m
@@ -2167,6 +2191,7 @@ CONFIG_INPUT_POLLDEV=m
CONFIG_INPUT_POWERMATE=m
# CONFIG_INPUT_PWM_BEEPER is not set
# CONFIG_INPUT_PWM_VIBRA is not set
+# CONFIG_INPUT_REGULATOR_HAPTIC is not set
CONFIG_INPUT_RETU_PWRBUTTON=m
CONFIG_INPUT_RK805_PWRKEY=m
CONFIG_INPUT_SOC_BUTTON_ARRAY=m
@@ -2218,12 +2243,14 @@ CONFIG_INTEL_RST=m
# CONFIG_INTEL_SCU_IPC is not set
CONFIG_INTEL_SMARTCONNECT=y
CONFIG_INTEL_SOC_DTS_THERMAL=m
+CONFIG_INTEL_SOC_PMIC_CHTDC_TI=m
CONFIG_INTEL_SOC_PMIC_CHTWC=y
CONFIG_INTEL_SOC_PMIC=y
# CONFIG_INTEL_TH is not set
CONFIG_INTEL_TURBO_MAX_3=y
CONFIG_INTEL_TXT=y
CONFIG_INTEL_VBTN=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
CONFIG_INTEL_XWAY_PHY=m
# CONFIG_INTERVAL_TREE_TEST is not set
CONFIG_INV_MPU6050_I2C=m
@@ -2256,7 +2283,7 @@ CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
-# CONFIG_IP6_NF_TARGET_NPT is not set
+CONFIG_IP6_NF_TARGET_NPT=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_TARGET_SYNPROXY=m
# CONFIG_IPACK_BUS is not set
@@ -2275,6 +2302,7 @@ CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_POWEROFF=m
+# CONFIG_IPMI_PROC_INTERFACE is not set
CONFIG_IPMI_SI=m
CONFIG_IPMI_SSIF=m
CONFIG_IPMI_WATCHDOG=m
@@ -2384,13 +2412,8 @@ CONFIG_IPW2200_QOS=y
CONFIG_IPW2200_RADIOTAP=y
CONFIG_IPWIRELESS=m
# CONFIG_IPX_INTERN is not set
-CONFIG_IPX=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-# CONFIG_IRDA_DEBUG is not set
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRDA=m
-# CONFIG_IRDA_ULTRA is not set
+# CONFIG_IPX is not set
+# CONFIG_IRDA is not set
CONFIG_IR_ENE=m
CONFIG_IR_FINTEK=m
CONFIG_IR_GPIO_CIR=m
@@ -2402,12 +2425,10 @@ CONFIG_IR_IGUANA=m
CONFIG_IR_IMON=m
CONFIG_IR_ITE_CIR=m
CONFIG_IR_JVC_DECODER=m
-CONFIG_IRLAN=m
CONFIG_IR_LIRC_CODEC=m
CONFIG_IR_MCE_KBD_DECODER=m
CONFIG_IR_MCEUSB=m
CONFIG_IR_NEC_DECODER=m
-CONFIG_IRNET=m
CONFIG_IR_NUVOTON=m
CONFIG_IR_PWM_TX=m
# CONFIG_IRQ_DOMAIN_DEBUG is not set
@@ -2421,12 +2442,11 @@ CONFIG_IR_SANYO_DECODER=m
CONFIG_IR_SERIAL=m
CONFIG_IR_SERIAL_TRANSMITTER=y
CONFIG_IR_SHARP_DECODER=m
-CONFIG_IR_SIR=m
+# CONFIG_IR_SIR is not set
CONFIG_IR_SONY_DECODER=m
CONFIG_IR_SPI=m
CONFIG_IR_STREAMZAP=m
CONFIG_IR_TTUSBIR=m
-CONFIG_IRTTY_SIR=m
CONFIG_IR_WINBOND_CIR=m
CONFIG_IR_XMP_DECODER=m
# CONFIG_ISA is not set
@@ -2591,7 +2611,6 @@ CONFIG_KGDB_SERIAL_CONSOLE=y
# CONFIG_KGDB_TESTS_ON_BOOT is not set
CONFIG_KGDB_TESTS=y
CONFIG_KGDB=y
-CONFIG_KINGSUN_DONGLE=m
# CONFIG_KMX61 is not set
CONFIG_KPROBE_EVENTS=y
# CONFIG_KPROBES_SANITY_TEST is not set
@@ -2603,8 +2622,6 @@ CONFIG_KS0108_PORT=0x378
# CONFIG_KS8842 is not set
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
-CONFIG_KS959_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
CONFIG_KSM=y
CONFIG_KSZ884X_PCI=m
CONFIG_KVM_AMD=m
@@ -2641,6 +2658,7 @@ CONFIG_LCD_PLATFORM=m
# CONFIG_LDM_DEBUG is not set
CONFIG_LDM_PARTITION=y
# CONFIG_LEDS_AAT1290 is not set
+CONFIG_LEDS_APU=m
CONFIG_LEDS_AS3645A=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not set
@@ -2677,11 +2695,12 @@ CONFIG_LEDS_NIC78BX=m
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_PCA963X is not set
# CONFIG_LEDS_PWM is not set
-CONFIG_LEDS_REGULATOR=m
+# CONFIG_LEDS_REGULATOR is not set
# CONFIG_LEDS_S3C24XX is not set
# CONFIG_LEDS_SYSCON is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_TLC591XX is not set
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_CAMERA=m
# CONFIG_LEDS_TRIGGER_CPU is not set
@@ -2728,10 +2747,8 @@ CONFIG_LIRC=m
CONFIG_LIRC_PARALLEL=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
-CONFIG_LIRC_SIR=m
CONFIG_LIRC_STAGING=y
CONFIG_LIRC_ZILOG=m
-CONFIG_LITELINK_DONGLE=m
# CONFIG_LIVEPATCH is not set
# CONFIG_LKDTM is not set
# CONFIG_LLC2 is not set
@@ -2778,7 +2795,6 @@ CONFIG_LWTUNNEL_BPF=y
CONFIG_LWTUNNEL=y
CONFIG_LXT_PHY=m
# CONFIG_M62332 is not set
-CONFIG_MA600_DONGLE=m
CONFIG_MAC80211_DEBUGFS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
CONFIG_MAC80211_HWSIM=m
@@ -2806,6 +2822,7 @@ CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_MAILBOX_TEST is not set
CONFIG_MAILBOX=y
+# CONFIG_MANAGER_SBS is not set
# CONFIG_MANDATORY_FILE_LOCKING is not set
CONFIG_MANTIS_CORE=m
CONFIG_MARVELL_10G_PHY=m
@@ -2829,14 +2846,12 @@ CONFIG_MAX_RAW_DEVS=8192
# CONFIG_MC3230 is not set
# CONFIG_MCB is not set
# CONFIG_MCE_AMD_INJ is not set
-CONFIG_MCP2120_DONGLE=m
# CONFIG_MCP320X is not set
# CONFIG_MCP3422 is not set
# CONFIG_MCP4131 is not set
# CONFIG_MCP4531 is not set
# CONFIG_MCP4725 is not set
# CONFIG_MCP4922 is not set
-CONFIG_MCS_FIR=m
CONFIG_MD_AUTODETECT=y
# CONFIG_MD_CLUSTER is not set
CONFIG_MD_FAULTY=m
@@ -2899,6 +2914,9 @@ CONFIG_MEMSTICK_TIFM_MS=m
# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
# CONFIG_MEMTEST is not set
# CONFIG_MEN_A21_WDT is not set
+# CONFIG_MESON_GX_PM_DOMAINS is not set
+# CONFIG_MESON_MX_EFUSE is not set
+# CONFIG_MESON_MX_SOCINFO is not set
CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
# CONFIG_MFD_88PM800 is not set
# CONFIG_MFD_88PM805 is not set
@@ -3024,6 +3042,7 @@ CONFIG_MISDN_SPEEDFAX=m
CONFIG_MISDN_W6692=m
# CONFIG_MK8 is not set
CONFIG_MKISS=m
+CONFIG_MLX4_CORE_GEN2=y
CONFIG_MLX4_CORE=m
CONFIG_MLX4_EN_DCB=y
CONFIG_MLX4_EN=m
@@ -3074,6 +3093,7 @@ CONFIG_MMC_SDHCI=m
# CONFIG_MMC_SDHCI_OF_ARASAN is not set
# CONFIG_MMC_SDHCI_OF_AT91 is not set
# CONFIG_MMC_SDHCI_OF_ESDHC is not set
+# CONFIG_MMC_SDHCI_OMAP is not set
CONFIG_MMC_SDHCI_PCI=m
CONFIG_MMC_SDHCI_PLTFM=m
CONFIG_MMC_SDHCI_XENON=m
@@ -3191,6 +3211,7 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_SHARPSL_PARTS is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_SPI_NOR is not set
# CONFIG_MTD_SST25L is not set
@@ -3229,7 +3250,7 @@ CONFIG_NATSEMI=m
# CONFIG_NBPFAXI_DMA is not set
CONFIG_NCPFS_EXTRAS=y
CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCP_FS=m
+# CONFIG_NCP_FS is not set
CONFIG_NCPFS_NFS_NS=y
CONFIG_NCPFS_NLS=y
CONFIG_NCPFS_OS2_NS=y
@@ -3418,6 +3439,7 @@ CONFIG_NETROM=m
# CONFIG_NET_SB1000 is not set
CONFIG_NET_SCH_ATM=m
CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_CBS=m
CONFIG_NET_SCH_CHOKE=m
CONFIG_NET_SCH_CODEL=m
# CONFIG_NET_SCH_DEFAULT is not set
@@ -3739,11 +3761,11 @@ CONFIG_NORTEL_HERMES=m
# CONFIG_NOTIFIER_ERROR_INJECTION is not set
CONFIG_NOUVEAU_DEBUG=5
CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
CONFIG_NOZOMI=m
CONFIG_NR_CPUS=1024
CONFIG_NR_DEV_DAX=32768
CONFIG_NS83820=m
-CONFIG_NSC_FIR=m
CONFIG_NTB_AMD=m
CONFIG_NTB_IDT=m
CONFIG_NTB_INTEL=m
@@ -3751,6 +3773,7 @@ CONFIG_NTB=m
CONFIG_NTB_NETDEV=m
CONFIG_NTB_PERF=m
CONFIG_NTB_PINGPONG=m
+CONFIG_NTB_SWITCHTEC=m
CONFIG_NTB_TOOL=m
CONFIG_NTB_TRANSPORT=m
# CONFIG_NTFS_FS is not set
@@ -3763,6 +3786,7 @@ CONFIG_NVDIMM_DAX=y
CONFIG_NVDIMM_PFN=y
CONFIG_NVME_FC=m
CONFIG_NVMEM=m
+CONFIG_NVME_MULTIPATH=y
CONFIG_NVME_RDMA=m
CONFIG_NVME_TARGET_FCLOOP=m
CONFIG_NVME_TARGET_FC=m
@@ -3779,7 +3803,6 @@ CONFIG_OCFS2_FS_O2CB=m
# CONFIG_OCFS2_FS_STATS is not set
CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
# CONFIG_OF is not set
-CONFIG_OLD_BELKIN_DONGLE=m
# CONFIG_OMFS_FS is not set
CONFIG_OPENVSWITCH_GENEVE=m
CONFIG_OPENVSWITCH_GRE=m
@@ -3794,6 +3817,7 @@ CONFIG_ORINOCO_USB=m
CONFIG_OSF_PARTITION=y
# CONFIG_OVERLAY_FS_INDEX is not set
CONFIG_OVERLAY_FS=m
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
CONFIG_P54_COMMON=m
CONFIG_P54_PCI=m
@@ -3965,12 +3989,15 @@ CONFIG_PINCONF=y
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_PINCTRL_BROXTON=m
# CONFIG_PINCTRL_CANNONLAKE is not set
+CONFIG_PINCTRL_CEDARFORK=m
CONFIG_PINCTRL_CHERRYVIEW=y
CONFIG_PINCTRL_DENVERTON=m
# CONFIG_PINCTRL_GEMINILAKE is not set
# CONFIG_PINCTRL_IPQ8074 is not set
CONFIG_PINCTRL_LEWISBURG=m
# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MESON_GXBB is not set
+# CONFIG_PINCTRL_MESON_GXL is not set
CONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_SPRD is not set
# CONFIG_PINCTRL_SPRD_SC9860 is not set
@@ -4036,6 +4063,7 @@ CONFIG_PPS_CLIENT_PARPORT=m
# CONFIG_PPS_DEBUG is not set
CONFIG_PPS=m
CONFIG_PPTP=m
+# CONFIG_PREEMPTIRQ_EVENTS is not set
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
@@ -4085,6 +4113,7 @@ CONFIG_PWRSEQ_SIMPLE=m
# CONFIG_QCOM_GLINK_SSR is not set
# CONFIG_QCOM_HIDMA is not set
# CONFIG_QCOM_HIDMA_MGMT is not set
+# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set
CONFIG_QEDE=m
CONFIG_QEDF=m
CONFIG_QEDI=m
@@ -4182,11 +4211,44 @@ CONFIG_REALTEK_PHY=m
# CONFIG_REFCOUNT_FULL is not set
CONFIG_REGMAP_I2C=y
CONFIG_REGMAP=y
-CONFIG_REGULATOR_BD9571MWV=m
+# CONFIG_REGULATOR_ACT8865 is not set
+# CONFIG_REGULATOR_AD5398 is not set
+# CONFIG_REGULATOR_AXP20X is not set
+# CONFIG_REGULATOR_BD9571MWV is not set
+# CONFIG_REGULATOR_DA9210 is not set
+# CONFIG_REGULATOR_DA9211 is not set
# CONFIG_REGULATOR_DEBUG is not set
-# CONFIG_REGULATOR is not set
+# CONFIG_REGULATOR_FAN53555 is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_GPIO is not set
+# CONFIG_REGULATOR_ISL6271A is not set
+# CONFIG_REGULATOR_ISL9305 is not set
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_LP3972 is not set
+# CONFIG_REGULATOR_LP872X is not set
+# CONFIG_REGULATOR_LP8755 is not set
+# CONFIG_REGULATOR_LTC3589 is not set
+# CONFIG_REGULATOR_LTC3676 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_MAX8649 is not set
+# CONFIG_REGULATOR_MAX8660 is not set
+# CONFIG_REGULATOR_MAX8952 is not set
+# CONFIG_REGULATOR_MT6311 is not set
+# CONFIG_REGULATOR_PFUZE100 is not set
+# CONFIG_REGULATOR_PV88060 is not set
+# CONFIG_REGULATOR_PV88080 is not set
+# CONFIG_REGULATOR_PV88090 is not set
+# CONFIG_REGULATOR_PWM is not set
+# CONFIG_REGULATOR_TPS51632 is not set
+# CONFIG_REGULATOR_TPS62360 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
# CONFIG_REGULATOR_TPS65132 is not set
+# CONFIG_REGULATOR_TPS6524X is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
CONFIG_REGULATOR_VCTRL=m
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+CONFIG_REGULATOR=y
# CONFIG_REISERFS_CHECK is not set
CONFIG_REISERFS_FS=m
CONFIG_REISERFS_FS_POSIX_ACL=y
@@ -4197,10 +4259,12 @@ CONFIG_RELAY=y
# CONFIG_RELOCATABLE_TEST is not set
CONFIG_RELOCATABLE=y
CONFIG_REMOTEPROC=m
+CONFIG_RENESAS_PHY=m
# CONFIG_RESET_ATTACK_MITIGATION is not set
# CONFIG_RESET_HSDK_V1 is not set
# CONFIG_RESET_TI_SYSCON is not set
CONFIG_RETPOLINE=y
+# CONFIG_RFD77402 is not set
# CONFIG_RFD_FTL is not set
CONFIG_RFKILL_GPIO=m
CONFIG_RFKILL_INPUT=y
@@ -4229,6 +4293,7 @@ CONFIG_RPCSEC_GSS_KRB5=m
# CONFIG_RPMSG_CHAR is not set
# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
# CONFIG_RPMSG_QCOM_GLINK_SMEM is not set
+CONFIG_RPMSG_VIRTIO=m
CONFIG_RPR0521=m
CONFIG_RSI_91X=m
CONFIG_RSI_DEBUGFS=y
@@ -4309,6 +4374,7 @@ CONFIG_RTC_DRV_PCF2127=m
CONFIG_RTC_DRV_PCF50633=m
CONFIG_RTC_DRV_PCF85063=m
CONFIG_RTC_DRV_PCF8523=m
+# CONFIG_RTC_DRV_PCF85363 is not set
CONFIG_RTC_DRV_PCF8563=m
CONFIG_RTC_DRV_PCF8583=m
CONFIG_RTC_DRV_PM8XXX=m
@@ -4382,6 +4448,7 @@ CONFIG_SATA_AHCI=y
# CONFIG_SATA_DWC is not set
# CONFIG_SATA_HIGHBANK is not set
CONFIG_SATA_INIC162X=m
+CONFIG_SATA_MOBILE_LPM_POLICY=3
CONFIG_SATA_MV=m
CONFIG_SATA_NV=m
CONFIG_SATA_PMP=y
@@ -4643,6 +4710,7 @@ CONFIG_SENSORS_LM95241=m
CONFIG_SENSORS_LM95245=m
CONFIG_SENSORS_LTC2945=m
CONFIG_SENSORS_LTC2978=m
+# CONFIG_SENSORS_LTC2978_REGULATOR is not set
CONFIG_SENSORS_LTC2990=m
CONFIG_SENSORS_LTC3815=m
CONFIG_SENSORS_LTC4151=m
@@ -4659,8 +4727,10 @@ CONFIG_SENSORS_MAX1668=m
CONFIG_SENSORS_MAX197=m
CONFIG_SENSORS_MAX20751=m
CONFIG_SENSORS_MAX31722=m
+# CONFIG_SENSORS_MAX31785 is not set
CONFIG_SENSORS_MAX31790=m
CONFIG_SENSORS_MAX34440=m
+# CONFIG_SENSORS_MAX6621 is not set
CONFIG_SENSORS_MAX6639=m
CONFIG_SENSORS_MAX6642=m
CONFIG_SENSORS_MAX6650=m
@@ -4800,7 +4870,6 @@ CONFIG_SH_ETH=m
# CONFIG_SI7005 is not set
# CONFIG_SI7020 is not set
# CONFIG_SIGMA is not set
-CONFIG_SIGMATEL_FIR=m
CONFIG_SIGNED_PE_FILE_VERIFICATION=y
CONFIG_SILEAD_DMI=y
# CONFIG_SIMPLE_PM_BUS is not set
@@ -4825,7 +4894,6 @@ CONFIG_SLUB_CPU_PARTIAL=y
# CONFIG_SLUB_STATS is not set
CONFIG_SLUB=y
CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_SMC_IRCC_FIR=m
# CONFIG_SMC is not set
# CONFIG_SM_FTL is not set
CONFIG_SMP=y
@@ -4920,7 +4988,7 @@ CONFIG_SND_HDA_INPUT_BEEP_MODE=0
CONFIG_SND_HDA_INPUT_BEEP=y
CONFIG_SND_HDA_INTEL=m
CONFIG_SND_HDA_PATCH_LOADER=y
-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1
CONFIG_SND_HDA_POWER_SAVE=y
CONFIG_SND_HDA_PREALLOC_SIZE=4096
CONFIG_SND_HDA_RECONFIG=y
@@ -4992,6 +5060,7 @@ CONFIG_SND_SOC_ADAU1761_SPI=m
# CONFIG_SND_SOC_ALC5623 is not set
CONFIG_SND_SOC_ALL_CODECS=m
CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
# CONFIG_SND_SOC_ARNDALE_RT5631_ALC5631 is not set
# CONFIG_SND_SOC_BT_SCO is not set
# CONFIG_SND_SOC_CS35L32 is not set
@@ -5048,14 +5117,17 @@ CONFIG_SND_SOC_INTEL_BYT_RT5640_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_HASWELL=m
CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
+CONFIG_SND_SOC_INTEL_SKYLAKE=m
CONFIG_SND_SOC_INTEL_SST_ACPI=m
CONFIG_SND_SOC_INTEL_SST=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
CONFIG_SND_SOC=m
# CONFIG_SND_SOC_MAX98504 is not set
# CONFIG_SND_SOC_MAX9860 is not set
@@ -5121,6 +5193,7 @@ CONFIG_SND_SOC_WM8524=m
# CONFIG_SND_SOC_ZX_AUD96P22 is not set
CONFIG_SND_SONICVIBES=m
# CONFIG_SND_SPI is not set
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_TRIDENT=m
CONFIG_SND_USB_6FIRE=m
@@ -5158,7 +5231,6 @@ CONFIG_SONYPI_COMPAT=y
# CONFIG_SONYPI is not set
CONFIG_SOUND=m
CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-# CONFIG_SOUND_PRIME is not set
CONFIG_SP5100_TCO=m
CONFIG_SPARSE_IRQ=y
CONFIG_SPARSEMEM_EXTREME=y
@@ -5331,13 +5403,14 @@ CONFIG_TCP_MD5SIG=y
# CONFIG_TCS3414 is not set
# CONFIG_TCS3472 is not set
# CONFIG_TEE is not set
+# CONFIG_TEGRA_BPMP_THERMAL is not set
CONFIG_TEHUTI=m
-CONFIG_TEKRAM_DONGLE=m
CONFIG_TELCLOCK=m
CONFIG_TERANETICS_PHY=m
CONFIG_TEST_ASYNC_DRIVER_PROBE=m
# CONFIG_TEST_BITMAP is not set
# CONFIG_TEST_BPF is not set
+# CONFIG_TEST_FIND_BIT is not set
# CONFIG_TEST_FIRMWARE is not set
# CONFIG_TEST_HASH is not set
# CONFIG_TEST_HEXDUMP is not set
@@ -5377,6 +5450,7 @@ CONFIG_THINKPAD_ACPI=m
CONFIG_THINKPAD_ACPI_VIDEO=y
CONFIG_THRUSTMASTER_FF=y
CONFIG_THUNDERBOLT=m
+CONFIG_THUNDERBOLT_NET=m
# CONFIG_TI_ADC081C is not set
# CONFIG_TI_ADC0832 is not set
# CONFIG_TI_ADC084S021 is not set
@@ -5388,6 +5462,7 @@ CONFIG_TI_ADS1015=m
# CONFIG_TI_ADS7950 is not set
# CONFIG_TI_ADS8688 is not set
# CONFIG_TI_CPSW_ALE is not set
+# CONFIG_TI_DAC082S085 is not set
# CONFIG_TI_DAC7512 is not set
CONFIG_TIFM_7XX1=m
CONFIG_TIFM_CORE=m
@@ -5409,10 +5484,8 @@ CONFIG_TLS=m
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
CONFIG_TMPFS=y
-CONFIG_TOIM3232_DONGLE=m
CONFIG_TOPSTAR_LAPTOP=m
CONFIG_TOSHIBA_BT_RFKILL=m
-# CONFIG_TOSHIBA_FIR is not set
CONFIG_TOSHIBA_HAPS=m
CONFIG_TOSHIBA_WMI=m
# CONFIG_TOUCHSCREEN_AD7877 is not set
@@ -5436,11 +5509,13 @@ CONFIG_TOUCHSCREEN_EGALAX_SERIAL=m
# CONFIG_TOUCHSCREEN_EKTF2127 is not set
CONFIG_TOUCHSCREEN_ELAN=m
CONFIG_TOUCHSCREEN_ELO=m
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
# CONFIG_TOUCHSCREEN_FT6236 is not set
CONFIG_TOUCHSCREEN_FUJITSU=m
CONFIG_TOUCHSCREEN_GOODIX=m
CONFIG_TOUCHSCREEN_GUNZE=m
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
CONFIG_TOUCHSCREEN_ILI210X=m
# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
CONFIG_TOUCHSCREEN_INEXIO=m
@@ -5455,6 +5530,7 @@ CONFIG_TOUCHSCREEN_PENMOUNT=m
CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_RM_TS=m
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
CONFIG_TOUCHSCREEN_SILEAD=m
CONFIG_TOUCHSCREEN_SIS_I2C=m
CONFIG_TOUCHSCREEN_ST1232=m
@@ -5487,6 +5563,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
+# CONFIG_TPS68470_PMIC_OPREGION is not set
# CONFIG_TRACE_BRANCH_PROFILING is not set
# CONFIG_TRACE_ENUM_MAP_FILE is not set
CONFIG_TRACE_EVAL_MAP_FILE=y
@@ -5515,8 +5592,10 @@ CONFIG_TUN=m
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
CONFIG_TYPEC_FUSB302=m
+CONFIG_TYPEC=m
CONFIG_TYPEC_TCPCI=m
CONFIG_TYPEC_TCPM=m
+CONFIG_TYPEC_TPS6598X=m
CONFIG_TYPEC_UCSI=m
CONFIG_TYPEC_WCOVE=m
CONFIG_TYPHOON=m
@@ -5602,6 +5681,7 @@ CONFIG_USB_EZUSB=y
CONFIG_USB_FTDI_ELAN=m
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_GADGET is not set
+# CONFIG_USB_GADGET_LEGACY is not set
CONFIG_USB_GL860=m
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_GR_UDC is not set
@@ -5673,7 +5753,6 @@ CONFIG_USBIP_VHCI_HCD=m
CONFIG_USBIP_VHCI_HC_PORTS=8
CONFIG_USBIP_VHCI_NR_HCS=1
CONFIG_USBIP_VUDC=m
-CONFIG_USB_IRDA=m
CONFIG_USB_ISIGHTFW=m
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1301 is not set
@@ -5908,7 +5987,6 @@ CONFIG_VGA_SWITCHEROO=y
CONFIG_VHOST_NET=m
CONFIG_VHOST_SCSI=m
CONFIG_VHOST_VSOCK=m
-CONFIG_VIA_FIR=m
CONFIG_VIA_RHINE=m
CONFIG_VIA_RHINE_MMIO=y
CONFIG_VIA_VELOCITY=m
@@ -6024,7 +6102,6 @@ CONFIG_VL6180=m
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_VLSI_FIR=m
CONFIG_VMAP_STACK=y
CONFIG_VMD=m
# CONFIG_VME_BUS is not set
@@ -6036,6 +6113,7 @@ CONFIG_VMXNET3=m
CONFIG_VOP_BUS=m
CONFIG_VOP=m
CONFIG_VORTEX=m
+CONFIG_VSOCKETS_DIAG=m
CONFIG_VSOCKETS=m
CONFIG_VSOCKMON=m
# CONFIG_VT6655 is not set
@@ -6071,6 +6149,7 @@ CONFIG_W1_SLAVE_DS2780=m
CONFIG_W1_SLAVE_DS2781=m
CONFIG_W1_SLAVE_DS2805=m
CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
CONFIG_W1_SLAVE_SMEM=m
CONFIG_W1_SLAVE_THERM=m
CONFIG_W83627HF_WDT=m
@@ -6098,7 +6177,6 @@ CONFIG_WIL6210=m
CONFIG_WILINK_PLATFORM_DATA=y
# CONFIG_WIMAX is not set
CONFIG_WINBOND_840=m
-CONFIG_WINBOND_FIR=m
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS=y
CONFIG_WIZNET_W5100=m
@@ -6206,6 +6284,7 @@ CONFIG_XEN_NETDEV_FRONTEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PCIDEV_FRONTEND=m
# CONFIG_XEN_PVCALLS_BACKEND is not set
+# CONFIG_XEN_PVCALLS_FRONTEND is not set
CONFIG_XEN_PVHVM=y
CONFIG_XEN_PVH=y
CONFIG_XEN_PV=y
@@ -6226,6 +6305,7 @@ CONFIG_XFRM_USER=y
CONFIG_XFRM=y
# CONFIG_XFS_DEBUG is not set
CONFIG_XFS_FS=m
+# CONFIG_XFS_ONLINE_SCRUB is not set
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_QUOTA=y
# CONFIG_XFS_RT is not set
diff --git a/kernel.spec b/kernel.spec
index 01c0466..4b4a860 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -48,13 +48,13 @@ Summary: The Linux kernel
# base_sublevel is the kernel version we're starting with and patching
# on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base,
# which yields a base_sublevel of 0.
-%define base_sublevel 14
+%define base_sublevel 15
## If this is a released kernel ##
%if 0%{?released_kernel}
# Do we have a -stable update to apply?
-%define stable_update 18
+%define stable_update 2
# Set rpm version accordingly
%if 0%{?stable_update}
%define stablerev %{stable_update}
@@ -93,10 +93,6 @@ Summary: The Linux kernel
# kernel-headers
%define with_headers %{?_without_headers: 0} %{?!_without_headers: 1}
%define with_cross_headers %{?_without_cross_headers: 0} %{?!_without_cross_headers: 1}
-# perf
-%define with_perf %{?_without_perf: 0} %{?!_without_perf: 1}
-# tools
-%define with_tools %{?_without_tools: 0} %{?!_without_tools: 1}
# kernel-debuginfo
%define with_debuginfo %{?_without_debuginfo: 0} %{?!_without_debuginfo: 1}
# kernel-bootwrapper (for creating zImages from kernel + initrd)
@@ -122,11 +118,20 @@ Summary: The Linux kernel
# build a release kernel on rawhide
%define with_release %{?_with_release: 1} %{?!_with_release: 0}
+# verbose build, i.e. no silent rules and V=1
+%define with_verbose %{?_with_verbose: 1} %{?!_with_verbose: 0}
+
# Set debugbuildsenabled to 1 for production (build separate debug kernels)
# and 0 for rawhide (all kernels are debug kernels).
# See also 'make debug' and 'make release'.
%define debugbuildsenabled 1
+%if %{with_verbose}
+%define make_opts V=1
+%else
+%define make_opts -s
+%endif
+
# Want to build a vanilla kernel build without any non-upstream patches?
%define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0}
@@ -213,8 +218,6 @@ Summary: The Linux kernel
%define with_pae 0
%endif
%define with_pae 0
-%define with_tools 0
-%define with_perf 0
%endif
%define all_x86 i386 i686
@@ -235,8 +238,6 @@ Summary: The Linux kernel
%define with_up 0
%define with_headers 0
%define with_cross_headers 0
-%define with_tools 0
-%define with_perf 0
%define all_arch_configs kernel-%{version}-*.config
%endif
@@ -283,7 +284,6 @@ Summary: The Linux kernel
%define all_arch_configs kernel-%{version}-s390x.config
%define make_target image
%define kernel_image arch/s390/boot/image
-%define with_tools 0
%endif
%ifarch %{arm}
@@ -301,8 +301,6 @@ Summary: The Linux kernel
%ifnarch armv7hl
%define with_headers 0
%define with_cross_headers 0
-%define with_perf 0
-%define with_tools 0
%endif
%endif
@@ -337,8 +335,6 @@ Summary: The Linux kernel
%define with_up 0
%define with_pae 0
%define with_debuginfo 0
-%define with_perf 0
-%define with_tools 0
%define _enable_debug_packages 0
%endif
@@ -397,16 +393,6 @@ BuildRequires: net-tools, hostname, bc, elfutils-devel
%if %{with_sparse}
BuildRequires: sparse
%endif
-%if %{with_perf}
-BuildRequires: zlib-devel binutils-devel newt-devel python-devel perl(ExtUtils::Embed) bison flex xz-devel
-BuildRequires: audit-libs-devel
-%ifnarch s390x %{arm}
-BuildRequires: numactl-devel
-%endif
-%endif
-%if %{with_tools}
-BuildRequires: pciutils-devel gettext ncurses-devel
-%endif
BuildConflicts: rhbuildsys(DiskFree) < 500Mb
%if %{with_debuginfo}
BuildRequires: rpm-build, elfutils
@@ -439,7 +425,6 @@ BuildRequires: binutils-%{_build_arch}-linux-gnu, gcc-%{_build_arch}-linux-gnu
Source0: https://www.kernel.org/pub/linux/kernel/v4.x/linux-%{kversion}.tar.xz
-Source10: perf-man-%{kversion}.tar.gz
Source11: x509.genkey
Source12: remove-binary-diff.pl
Source15: merge.pl
@@ -581,11 +566,7 @@ Patch210: disable-i8042-check-on-apple-mac.patch
Patch211: drm-i915-hush-check-crtc-state.patch
# 300 - ARM patches
-
-# Reduces a number of primarily info logs to dmesg
-# https://patchwork.freedesktop.org/patch/180737/
-# https://patchwork.freedesktop.org/patch/180554/
-Patch300: drm-cma-reduce-dmesg-logs.patch
+Patch300: arm64-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch
# http://www.spinics.net/lists/linux-tegra/msg26029.html
Patch301: usb-phy-tegra-Add-38.4MHz-clock-table-entry.patch
@@ -596,46 +577,34 @@ Patch302: arm-revert-mmc-omap_hsmmc-Use-dma_request_chan-for-reque.patch
# http://patchwork.ozlabs.org/patch/587554/
Patch303: ARM-tegra-usb-no-reset.patch
-Patch304: allwinner-net-emac.patch
-
-Patch305: arm64-Revert-allwinner-a64-pine64-Use-dcdc1-regulato.patch
-
# https://www.spinics.net/lists/arm-kernel/msg554183.html
-Patch306: arm-imx6-hummingboard2.patch
+Patch304: arm-imx6-hummingboard2.patch
-Patch307: arm64-Add-option-of-13-for-FORCE_MAX_ZONEORDER.patch
+Patch305: arm64-Revert-allwinner-a64-pine64-Use-dcdc1-regulato.patch
# https://patchwork.kernel.org/patch/9820417/
-Patch310: qcom-msm89xx-fixes.patch
+Patch306: qcom-msm89xx-fixes.patch
-# Fix USB on the RPi https://patchwork.kernel.org/patch/9879371/
-Patch321: bcm283x-dma-mapping-skip-USB-devices-when-configuring-DMA-during-probe.patch
-
-# bcm2837 bluetooth support
-Patch323: bcm2837-bluetooth-support.patch
+# https://patchwork.kernel.org/patch/10173115/
+Patch307: arm-dts-imx6qdl-udoo-Disable-usbh1-to-avoid-kernel-hang.patch
-# Generic fixes and enablement for Socionext SoC and 96board
-# https://patchwork.kernel.org/patch/9980861/
-Patch331: PCI-aspm-deal-with-missing-root-ports-in-link-state-handling.patch
+# Fix USB on the RPi https://patchwork.kernel.org/patch/9879371/
+Patch308: bcm283x-dma-mapping-skip-USB-devices-when-configuring-DMA-during-probe.patch
# https://git.kernel.org/pub/scm/linux/kernel/git/ardb/linux.git/log/?h=syn...
-Patch332: arm64-socionext-96b-enablement.patch
+Patch330: arm64-socionext-96b-enablement.patch
-Patch335: arm-exynos-fix-usb3.patch
+# https://patchwork.kernel.org/patch/10149775/ MMC support for Synquacer
+Patch331: arm64-mmc-sdhci_f_sdh30-add-ACPI-support.patch
# 400 - IBM (ppc/s390x) patches
# 500 - Temp fixes/CVEs etc
-# rbhz 1519591 1520764
-Patch500: dccp-CVE-2017-8824-use-after-free-in-DCCP-code.patch
-
# 550-600 Meltdown and Spectre Fixes
# 600 - Patches for improved Bay and Cherry Trail device support
# Below patches are submitted upstream, awaiting review / merging
-Patch601: 0001-Input-gpio_keys-Allow-suppression-of-input-events-fo.patch
-Patch602: 0002-Input-soc_button_array-Suppress-power-button-presses.patch
Patch610: 0010-Input-silead-Add-support-for-capactive-home-button-f.patch
# rhbz 1476467
@@ -644,32 +613,35 @@ Patch617: Fix-for-module-sig-verification.patch
# rhbz 1431375
Patch619: input-rmi4-remove-the-need-for-artifical-IRQ.patch
-# Headed upstream
-Patch621: drm-i915-Boost-GPU-clocks-if-we-miss-the-pageflip-s-vblank.patch
-
# rhbz 1509461
Patch625: v3-2-2-Input-synaptics---Lenovo-X1-Carbon-5-should-use-SMBUS-RMI.patch
-# Fixes for QXL issues
-Patch627: qxl-fixes.patch
+# For https://fedoraproject.org/wiki/Changes/ImprovedLaptopBatteryLife
+# Queued in bluetooth-next for merging into 4.16
+Patch628: 0001-Bluetooth-btusb-Add-a-Kconfig-option-to-enable-USB-a.patch
-# rhbz 1462175
-Patch628: HID-rmi-Check-that-a-device-is-a-RMI-device-before-c.patch
+# Fix left-button not working with some hid-multitouch touchpads
+# Adding these suggested by Benjamin Tissoires
+# Queued in hid.git/for-4.16/hid-quirks-cleanup/multitouch for merging into 4.16
+Patch630: 0001-HID-multitouch-Properly-deal-with-Win8-PTP-reports-w.patch
+Patch631: 0002-HID-multitouch-Only-look-at-non-touch-fields-in-firs.patch
+Patch632: 0003-HID-multitouch-Combine-all-left-button-events-in-a-f.patch
-# rhbz1514969
-Patch633: 0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch
+# Make SATA link powermanagement policy configurable for:
+# https://fedoraproject.org/wiki/Changes/ImprovedLaptopBatteryLife
+# Queued upstream for merging into 4.16
+Patch636: 0001-ahci-Annotate-PCI-ids-for-mobile-Intel-chipsets-as-s.patch
+Patch637: 0002-ahci-Add-PCI-ids-for-Intel-Bay-Trail-Cherry-Trail-an.patch
+Patch638: 0003-ahci-Allow-setting-a-default-LPM-policy-for-mobile-c.patch
-# Fix crash on Xwayland using nouveau
-Patch634: dma-buf-fix-reservation_object_wait_timeout_rcu-once-more-v2.patch
+# rhbz1514969, submitted upstream
+Patch640: 0001-platform-x86-dell-laptop-Filter-out-spurious-keyboar.patch
-# rhbz 1539238
-Patch635: Add-support-for-One-by-Wacom-CTL-472-CTL-672.patch
+# rhbz1514836, submitted upstream
+Patch641: 0001-Bluetooth-btusb-Disable-autosuspend-on-QCA-Rome-devi.patch
-# CVE-2018-5750 rhbz 1539706 1539708
-Patch636: ACPI-sbshc-remove-raw-pointer-from-printk-message.patch
-
-# rhbz 1492664 1492665
-Patch637: 0001-mm-don-t-warn-about-allocations-which-stall-for-too-.patch
+# Fix crash on Xwayland using nouveau
+Patch650: dma-buf-fix-reservation_object_wait_timeout_rcu-once-more-v2.patch
# END OF PATCH DEFINITIONS
@@ -750,109 +722,6 @@ Provides: installonlypkg(kernel)
This package is required by %{name}-debuginfo subpackages.
It provides the kernel source files common to all builds.
-%if %{with_perf}
-%package -n perf
-Summary: Performance monitoring for the Linux kernel
-Group: Development/System
-License: GPLv2
-%description -n perf
-This package contains the perf tool, which enables performance monitoring
-of the Linux kernel.
-
-%package -n perf-debuginfo
-Summary: Debug information for package perf
-Group: Development/Debug
-Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
-AutoReqProv: no
-%description -n perf-debuginfo
-This package provides debug information for the perf package.
-
-# Note that this pattern only works right to match the .build-id
-# symlinks because of the trailing nonmatching alternation and
-# the leading .*, because of find-debuginfo.sh's buggy handling
-# of matching the pattern against the symlinks file.
-%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/perf(\.debug)?|.*%%{_libexecdir}/perf-core/.*|.*%%{_libdir}/traceevent/plugins/.*|XXX' -o perf-debuginfo.list}
-
-%package -n python-perf
-Summary: Python bindings for apps which will manipulate perf events
-Group: Development/Libraries
-%description -n python-perf
-The python-perf package contains a module that permits applications
-written in the Python programming language to use the interface
-to manipulate perf events.
-
-%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print get_python_lib(1)")}
-
-%package -n python-perf-debuginfo
-Summary: Debug information for package perf python bindings
-Group: Development/Debug
-Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
-AutoReqProv: no
-%description -n python-perf-debuginfo
-This package provides debug information for the perf python bindings.
-
-# the python_sitearch macro should already be defined from above
-%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{python_sitearch}/perf.so(\.debug)?|XXX' -o python-perf-debuginfo.list}
-
-
-%endif # with_perf
-
-%if %{with_tools}
-%package -n kernel-tools
-Summary: Assortment of tools for the Linux kernel
-Group: Development/System
-License: GPLv2
-Provides: cpupowerutils = 1:009-0.6.p1
-Obsoletes: cpupowerutils < 1:009-0.6.p1
-Provides: cpufreq-utils = 1:009-0.6.p1
-Provides: cpufrequtils = 1:009-0.6.p1
-Obsoletes: cpufreq-utils < 1:009-0.6.p1
-Obsoletes: cpufrequtils < 1:009-0.6.p1
-Obsoletes: cpuspeed < 1:1.5-16
-Requires: kernel-tools-libs = %{version}-%{release}
-%define __requires_exclude ^%{_bindir}/python
-%description -n kernel-tools
-This package contains the tools/ directory from the kernel source
-and the supporting documentation.
-
-%package -n kernel-tools-libs
-Summary: Libraries for the kernels-tools
-Group: Development/System
-License: GPLv2
-%description -n kernel-tools-libs
-This package contains the libraries built from the tools/ directory
-from the kernel source.
-
-%package -n kernel-tools-libs-devel
-Summary: Assortment of tools for the Linux kernel
-Group: Development/System
-License: GPLv2
-Requires: kernel-tools = %{version}-%{release}
-Provides: cpupowerutils-devel = 1:009-0.6.p1
-Obsoletes: cpupowerutils-devel < 1:009-0.6.p1
-Requires: kernel-tools-libs = %{version}-%{release}
-Provides: kernel-tools-devel
-%description -n kernel-tools-libs-devel
-This package contains the development files for the tools/ directory from
-the kernel source.
-
-%package -n kernel-tools-debuginfo
-Summary: Debug information for package kernel-tools
-Group: Development/Debug
-Requires: %{name}-debuginfo-common-%{_target_cpu} = %{version}-%{release}
-AutoReqProv: no
-%description -n kernel-tools-debuginfo
-This package provides debug information for package kernel-tools.
-
-# Note that this pattern only works right to match the .build-id
-# symlinks because of the trailing nonmatching alternation and
-# the leading .*, because of find-debuginfo.sh's buggy handling
-# of matching the pattern against the symlinks file.
-%{expand:%%global _find_debuginfo_opts %{?_find_debuginfo_opts} -p '.*%%{_bindir}/centrino-decode(\.debug)?|.*%%{_bindir}/powernow-k8-decode(\.debug)?|.*%%{_bindir}/cpupower(\.debug)?|.*%%{_libdir}/libcpupower.*|.*%%{_bindir}/turbostat(\.debug)?|.*%%{_bindir}/x86_energy_perf_policy(\.debug)?|.*%%{_bindir}/tmon(\.debug)?|.*%%{_bindir}/lsgpio(\.debug)?|.*%%{_bindir}/gpio-hammer(\.debug)?|.*%%{_bindir}/gpio-event-mon(\.debug)?|.*%%{_bindir}/iio_event_monitor(\.debug)?|.*%%{_bindir}/iio_generic_buffer(\.debug)?|.*%%{_bindir}/lsiio(\.debug)?|XXX' -o kernel-tools-debuginfo.list}
-
-%endif # with_tools
-
-
#
# This macro creates a kernel-<subpackage>-debuginfo package.
# %%kernel_debuginfo_package <subpackage>
@@ -971,6 +840,7 @@ Provides: installonlypkg(kernel)\
# Now, each variant package.
+%if %{with_pae}
%ifnarch armv7hl
%define variant_summary The Linux kernel compiled for PAE capable machines
%kernel_variant_package %{pae}
@@ -1000,7 +870,7 @@ Install the kernel-PAE package if your machine has more than 4GB of memory.
This variant of the kernel has numerous debugging options enabled.
It should only be installed when trying to gather additional information
on kernel bugs, as some of these options impact performance noticably.
-
+%endif
%define variant_summary The Linux kernel compiled with extra debugging enabled
%kernel_variant_package debug
@@ -1395,7 +1265,7 @@ BuildKernel() {
# and now to start the build process
- make -s mrproper
+ make %{?make_opts} mrproper
cp configs/$Config .config
%if %{signkernel}%{signmodules}
@@ -1405,9 +1275,9 @@ BuildKernel() {
Arch=`head -1 .config | cut -b 3-`
echo USING ARCH=$Arch
- make -s ARCH=$Arch oldnoconfig >/dev/null
- %{make} -s ARCH=$Arch V=1 %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags}
- %{make} -s ARCH=$Arch V=1 %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
+ make %{?make_opts} ARCH=$Arch olddefconfig >/dev/null
+ %{make} %{?make_opts} ARCH=$Arch %{?_smp_mflags} $MakeTarget %{?sparse_mflags} %{?kernel_mflags}
+ %{make} %{?make_opts} ARCH=$Arch %{?_smp_mflags} modules %{?sparse_mflags} || exit 1
mkdir -p $RPM_BUILD_ROOT/%{image_install_path}
mkdir -p $RPM_BUILD_ROOT/lib/modules/$KernelVer
@@ -1416,7 +1286,7 @@ BuildKernel() {
%endif
%ifarch %{arm} aarch64
- %{make} -s ARCH=$Arch V=1 dtbs dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
+ %{make} %{?make_opts} ARCH=$Arch dtbs dtbs_install INSTALL_DTBS_PATH=$RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer
cp -r $RPM_BUILD_ROOT/%{image_install_path}/dtb-$KernelVer $RPM_BUILD_ROOT/lib/modules/$KernelVer/dtb
find arch/$Arch/boot/dts -name '*.dtb' -type f | xargs rm -f
%endif
@@ -1457,10 +1327,10 @@ BuildKernel() {
# Override $(mod-fw) because we don't want it to install any firmware
# we'll get it from the linux-firmware package and we don't want conflicts
- %{make} -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
+ %{make} %{?make_opts} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT modules_install KERNELRELEASE=$KernelVer mod-fw=
if [ $DoVDSO -ne 0 ]; then
- %{make} -s ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
+ %{make} %{?make_opts} ARCH=$Arch INSTALL_MOD_PATH=$RPM_BUILD_ROOT vdso_install KERNELRELEASE=$KernelVer
if [ ! -s ldconfig-kernel.conf ]; then
echo > ldconfig-kernel.conf "\
# Placeholder file, no vDSO hwcap entries used in this kernel."
@@ -1718,51 +1588,6 @@ BuildKernel %make_target %kernel_image %{use_vdso} %{pae}
BuildKernel %make_target %kernel_image %{_use_vdso}
%endif
-%global perf_make \
- make -s EXTRA_CFLAGS="${RPM_OPT_FLAGS}" LDFLAGS="%{__global_ldflags}" %{?cross_opts} -C tools/perf V=1 NO_PERF_READ_VDSO32=1 NO_PERF_READ_VDSOX32=1 WERROR=0 NO_LIBUNWIND=1 HAVE_CPLUS_DEMANGLE=1 NO_GTK2=1 NO_STRLCPY=1 NO_BIONIC=1 NO_JVMTI=1 prefix=%{_prefix}
-%if %{with_perf}
-# perf
-# make sure check-headers.sh is executable
-chmod +x tools/perf/check-headers.sh
-%{perf_make} DESTDIR=$RPM_BUILD_ROOT all
-%endif
-
-%if %{with_tools}
-%ifarch %{cpupowerarchs}
-# cpupower
-# make sure version-gen.sh is executable.
-chmod +x tools/power/cpupower/utils/version-gen.sh
-%{make} %{?_smp_mflags} -C tools/power/cpupower CPUFREQ_BENCH=false
-%ifarch %{ix86}
- pushd tools/power/cpupower/debug/i386
- %{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
- popd
-%endif
-%ifarch x86_64
- pushd tools/power/cpupower/debug/x86_64
- %{make} %{?_smp_mflags} centrino-decode powernow-k8-decode
- popd
-%endif
-%ifarch %{ix86} x86_64
- pushd tools/power/x86/x86_energy_perf_policy/
- %{make}
- popd
- pushd tools/power/x86/turbostat
- %{make}
- popd
-%endif #turbostat/x86_energy_perf_policy
-%endif
-pushd tools/thermal/tmon/
-%{make}
-popd
-pushd tools/iio/
-%{make}
-popd
-pushd tools/gpio/
-%{make}
-popd
-%endif
-
# In the modsign case, we do 3 things. 1) We check the "flavour" and hard
# code the value in the following invocations. This is somewhat sub-optimal
# but we're doing this inside of an RPM macro and it isn't as easy as it
@@ -1871,73 +1696,6 @@ done
rm -rf $RPM_BUILD_ROOT/usr/tmp-headers
%endif
-%if %{with_perf}
-# perf tool binary and supporting scripts/binaries
-%{perf_make} DESTDIR=$RPM_BUILD_ROOT lib=%{_lib} install-bin install-traceevent-plugins
-# remove the 'trace' symlink.
-rm -f %{buildroot}%{_bindir}/trace
-# remove the perf-tips
-rm -rf %{buildroot}%{_docdir}/perf-tip
-
-# python-perf extension
-%{perf_make} DESTDIR=$RPM_BUILD_ROOT install-python_ext
-
-# perf man pages (note: implicit rpm magic compresses them later)
-mkdir -p %{buildroot}/%{_mandir}/man1
-pushd %{buildroot}/%{_mandir}/man1
-tar -xf %{SOURCE10}
-%if !%{with_tools}
- rm -f kvm_stat.1
-%endif
-popd
-%endif
-
-%if %{with_tools}
-%ifarch %{cpupowerarchs}
-%{make} -C tools/power/cpupower DESTDIR=$RPM_BUILD_ROOT libdir=%{_libdir} mandir=%{_mandir} CPUFREQ_BENCH=false install
-rm -f %{buildroot}%{_libdir}/*.{a,la}
-%find_lang cpupower
-mv cpupower.lang ../
-%ifarch %{ix86}
- pushd tools/power/cpupower/debug/i386
- install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
- install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
- popd
-%endif
-%ifarch x86_64
- pushd tools/power/cpupower/debug/x86_64
- install -m755 centrino-decode %{buildroot}%{_bindir}/centrino-decode
- install -m755 powernow-k8-decode %{buildroot}%{_bindir}/powernow-k8-decode
- popd
-%endif
-chmod 0755 %{buildroot}%{_libdir}/libcpupower.so*
-mkdir -p %{buildroot}%{_unitdir} %{buildroot}%{_sysconfdir}/sysconfig
-install -m644 %{SOURCE2000} %{buildroot}%{_unitdir}/cpupower.service
-install -m644 %{SOURCE2001} %{buildroot}%{_sysconfdir}/sysconfig/cpupower
-%endif
-%ifarch %{ix86} x86_64
- mkdir -p %{buildroot}%{_mandir}/man8
- pushd tools/power/x86/x86_energy_perf_policy
- make DESTDIR=%{buildroot} install
- popd
- pushd tools/power/x86/turbostat
- make DESTDIR=%{buildroot} install
- popd
-%endif #turbostat/x86_energy_perf_policy
-pushd tools/thermal/tmon
-make INSTALL_ROOT=%{buildroot} install
-popd
-pushd tools/iio
-make DESTDIR=%{buildroot} install
-popd
-pushd tools/gpio
-make DESTDIR=%{buildroot} install
-popd
-pushd tools/kvm/kvm_stat
-make INSTALL_ROOT=%{buildroot} install-tools
-popd
-%endif
-
%if %{with_bootwrapper}
make DESTDIR=$RPM_BUILD_ROOT bootwrapper_install WRAPPER_OBJDIR=%{_libdir}/kernel-wrapper WRAPPER_DTSDIR=%{_libdir}/kernel-wrapper/dts
%endif
@@ -1953,14 +1711,6 @@ rm -rf $RPM_BUILD_ROOT
### scripts
###
-%if %{with_tools}
-%post -n kernel-tools-libs
-/sbin/ldconfig
-
-%postun -n kernel-tools-libs
-/sbin/ldconfig
-%endif
-
#
# This macro defines a %%post script for a kernel*-devel package.
# %%kernel_devel_post [<subpackage>]
@@ -2045,11 +1795,13 @@ fi}\
%kernel_variant_preun
%kernel_variant_post -r kernel-smp
+%if %{with_pae}
%kernel_variant_preun %{pae}
%kernel_variant_post -v %{pae} -r (kernel|kernel-smp)
%kernel_variant_post -v %{pae}debug -r (kernel|kernel-smp)
%kernel_variant_preun %{pae}debug
+%endif
%kernel_variant_preun debug
%kernel_variant_post -v debug
@@ -2082,77 +1834,6 @@ fi
%{_libdir}/kernel-wrapper
%endif
-%if %{with_perf}
-%files -n perf
-%defattr(-,root,root)
-%{_bindir}/perf
-%dir %{_libdir}/traceevent/plugins
-%{_libdir}/traceevent/plugins/*
-%dir %{_libexecdir}/perf-core
-%{_libexecdir}/perf-core/*
-%{_datadir}/perf-core/*
-%{_mandir}/man[1-8]/perf*
-%{_sysconfdir}/bash_completion.d/perf
-%doc linux-%{KVERREL}/tools/perf/Documentation/examples.txt
-
-%files -n python-perf
-%defattr(-,root,root)
-%{python_sitearch}
-
-%if %{with_debuginfo}
-%files -f perf-debuginfo.list -n perf-debuginfo
-%defattr(-,root,root)
-
-%files -f python-perf-debuginfo.list -n python-perf-debuginfo
-%defattr(-,root,root)
-%endif
-%endif # with_perf
-
-%if %{with_tools}
-%files -n kernel-tools -f cpupower.lang
-%defattr(-,root,root)
-%ifarch %{cpupowerarchs}
-%{_bindir}/cpupower
-%ifarch %{ix86} x86_64
-%{_bindir}/centrino-decode
-%{_bindir}/powernow-k8-decode
-%endif
-%{_unitdir}/cpupower.service
-%{_mandir}/man[1-8]/cpupower*
-%config(noreplace) %{_sysconfdir}/sysconfig/cpupower
-%ifarch %{ix86} x86_64
-%{_bindir}/x86_energy_perf_policy
-%{_mandir}/man8/x86_energy_perf_policy*
-%{_bindir}/turbostat
-%{_mandir}/man8/turbostat*
-%endif
-%{_bindir}/tmon
-%{_bindir}/iio_event_monitor
-%{_bindir}/iio_generic_buffer
-%{_bindir}/lsiio
-%{_bindir}/lsgpio
-%{_bindir}/gpio-hammer
-%{_bindir}/gpio-event-mon
-%{_mandir}/man1/kvm_stat*
-%{_bindir}/kvm_stat
-%endif
-
-%if %{with_debuginfo}
-%files -f kernel-tools-debuginfo.list -n kernel-tools-debuginfo
-%defattr(-,root,root)
-%endif
-
-%ifarch %{cpupowerarchs}
-%files -n kernel-tools-libs
-%{_libdir}/libcpupower.so.0
-%{_libdir}/libcpupower.so.0.0.1
-
-%files -n kernel-tools-libs-devel
-%{_libdir}/libcpupower.so
-%{_includedir}/cpufreq.h
-%endif
-%endif # with_perf
-
# empty meta-package
%files
%defattr(-,root,root)
@@ -2228,6 +1909,9 @@ fi
#
#
%changelog
+* Wed Feb 07 2018 Laura Abbott <labbott(a)redhat.com> - 4.15.2-300
+- Linux v4.15.2 rebase
+
* Wed Feb 07 2018 Justin M. Forbes <jforbes(a)fedoraproject.org> - 4.14.18-300
- Linux v4.14.18
diff --git a/qxl-fixes.patch b/qxl-fixes.patch
deleted file mode 100644
index 933f27c..0000000
--- a/qxl-fixes.patch
+++ /dev/null
@@ -1,376 +0,0 @@
-From 56cbcb6c41932b19ef0d838f1ff25a662a2e403d Mon Sep 17 00:00:00 2001
-From: Gerd Hoffmann <kraxel(a)redhat.com>
-Date: Thu, 19 Oct 2017 08:21:49 +0200
-Subject: [PATCH] drm/qxl: replace QXL_INFO with DRM_DEBUG_DRIVER
-
-Signed-off-by: Gerd Hoffmann <kraxel(a)redhat.com>
-Reviewed-by: Dave Airlie <airlied(a)redhat.com>
-Link: http://patchwork.freedesktop.org/patch/msgid/20171019062150.28090-2-kraxe...
----
- drivers/gpu/drm/qxl/qxl_cmd.c | 16 +++++++---------
- drivers/gpu/drm/qxl/qxl_drv.h | 26 +-------------------------
- drivers/gpu/drm/qxl/qxl_fb.c | 13 +++++--------
- drivers/gpu/drm/qxl/qxl_release.c | 5 ++---
- drivers/gpu/drm/qxl/qxl_ttm.c | 4 ++--
- 5 files changed, 17 insertions(+), 47 deletions(-)
-
-diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
-index 74fc9362ecf9..8ec53d5abd62 100644
---- a/drivers/gpu/drm/qxl/qxl_cmd.c
-+++ b/drivers/gpu/drm/qxl/qxl_cmd.c
-@@ -219,7 +219,7 @@ int qxl_garbage_collect(struct qxl_device *qdev)
- union qxl_release_info *info;
-
- while (qxl_ring_pop(qdev->release_ring, &id)) {
-- QXL_INFO(qdev, "popped %lld\n", id);
-+ DRM_DEBUG_DRIVER("popped %lld\n", id);
- while (id) {
- release = qxl_release_from_id_locked(qdev, id);
- if (release == NULL)
-@@ -229,8 +229,8 @@ int qxl_garbage_collect(struct qxl_device *qdev)
- next_id = info->next;
- qxl_release_unmap(qdev, release, info);
-
-- QXL_INFO(qdev, "popped %lld, next %lld\n", id,
-- next_id);
-+ DRM_DEBUG_DRIVER("popped %lld, next %lld\n", id,
-+ next_id);
-
- switch (release->type) {
- case QXL_RELEASE_DRAWABLE:
-@@ -248,7 +248,7 @@ int qxl_garbage_collect(struct qxl_device *qdev)
- }
- }
-
-- QXL_INFO(qdev, "%s: %d\n", __func__, i);
-+ DRM_DEBUG_DRIVER("%d\n", i);
-
- return i;
- }
-@@ -381,8 +381,7 @@ void qxl_io_create_primary(struct qxl_device *qdev,
- {
- struct qxl_surface_create *create;
-
-- QXL_INFO(qdev, "%s: qdev %p, ram_header %p\n", __func__, qdev,
-- qdev->ram_header);
-+ DRM_DEBUG_DRIVER("qdev %p, ram_header %p\n", qdev, qdev->ram_header);
- create = &qdev->ram_header->create_surface;
- create->format = bo->surf.format;
- create->width = bo->surf.width;
-@@ -390,8 +389,7 @@ void qxl_io_create_primary(struct qxl_device *qdev,
- create->stride = bo->surf.stride;
- create->mem = qxl_bo_physical_address(qdev, bo, offset);
-
-- QXL_INFO(qdev, "%s: mem = %llx, from %p\n", __func__, create->mem,
-- bo->kptr);
-+ DRM_DEBUG_DRIVER("mem = %llx, from %p\n", create->mem, bo->kptr);
-
- create->flags = QXL_SURF_FLAG_KEEP_DATA;
- create->type = QXL_SURF_TYPE_PRIMARY;
-@@ -401,7 +399,7 @@ void qxl_io_create_primary(struct qxl_device *qdev,
-
- void qxl_io_memslot_add(struct qxl_device *qdev, uint8_t id)
- {
-- QXL_INFO(qdev, "qxl_memslot_add %d\n", id);
-+ DRM_DEBUG_DRIVER("qxl_memslot_add %d\n", id);
- wait_for_io_cmd(qdev, id, QXL_IO_MEMSLOT_ADD_ASYNC);
- }
-
-diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
-index 3397a1907336..d707b351875c 100644
---- a/drivers/gpu/drm/qxl/qxl_drv.h
-+++ b/drivers/gpu/drm/qxl/qxl_drv.h
-@@ -62,33 +62,9 @@
-
- #define QXL_DEBUGFS_MAX_COMPONENTS 32
-
--extern int qxl_log_level;
- extern int qxl_num_crtc;
- extern int qxl_max_ioctls;
-
--enum {
-- QXL_INFO_LEVEL = 1,
-- QXL_DEBUG_LEVEL = 2,
--};
--
--#define QXL_INFO(qdev, fmt, ...) do { \
-- if (qxl_log_level >= QXL_INFO_LEVEL) { \
-- qxl_io_log(qdev, fmt, __VA_ARGS__); \
-- } \
-- } while (0)
--#define QXL_DEBUG(qdev, fmt, ...) do { \
-- if (qxl_log_level >= QXL_DEBUG_LEVEL) { \
-- qxl_io_log(qdev, fmt, __VA_ARGS__); \
-- } \
-- } while (0)
--#define QXL_INFO_ONCE(qdev, fmt, ...) do { \
-- static int done; \
-- if (!done) { \
-- done = 1; \
-- QXL_INFO(qdev, fmt, __VA_ARGS__); \
-- } \
-- } while (0)
--
- #define DRM_FILE_OFFSET 0x100000000ULL
- #define DRM_FILE_PAGE_OFFSET (DRM_FILE_OFFSET >> PAGE_SHIFT)
-
-@@ -351,7 +327,7 @@ int qxl_check_idle(struct qxl_ring *ring);
- static inline void *
- qxl_fb_virtual_address(struct qxl_device *qdev, unsigned long physical)
- {
-- QXL_INFO(qdev, "not implemented (%lu)\n", physical);
-+ DRM_DEBUG_DRIVER("not implemented (%lu)\n", physical);
- return 0;
- }
-
-diff --git a/drivers/gpu/drm/qxl/qxl_fb.c b/drivers/gpu/drm/qxl/qxl_fb.c
-index 844c4a31ca13..23af3e352673 100644
---- a/drivers/gpu/drm/qxl/qxl_fb.c
-+++ b/drivers/gpu/drm/qxl/qxl_fb.c
-@@ -240,18 +240,15 @@ static int qxlfb_create(struct qxl_fbdev *qfbdev,
- return ret;
-
- qbo = gem_to_qxl_bo(gobj);
-- QXL_INFO(qdev, "%s: %dx%d %d\n", __func__, mode_cmd.width,
-- mode_cmd.height, mode_cmd.pitches[0]);
-+ DRM_DEBUG_DRIVER("%dx%d %d\n", mode_cmd.width,
-+ mode_cmd.height, mode_cmd.pitches[0]);
-
- shadow = vmalloc(mode_cmd.pitches[0] * mode_cmd.height);
- /* TODO: what's the usual response to memory allocation errors? */
- BUG_ON(!shadow);
-- QXL_INFO(qdev,
-- "surface0 at gpu offset %lld, mmap_offset %lld (virt %p, shadow %p)\n",
-- qxl_bo_gpu_offset(qbo),
-- qxl_bo_mmap_offset(qbo),
-- qbo->kptr,
-- shadow);
-+ DRM_DEBUG_DRIVER("surface0 at gpu offset %lld, mmap_offset %lld (virt %p, shadow %p)\n",
-+ qxl_bo_gpu_offset(qbo), qxl_bo_mmap_offset(qbo),
-+ qbo->kptr, shadow);
- size = mode_cmd.pitches[0] * mode_cmd.height;
-
- info = drm_fb_helper_alloc_fbi(&qfbdev->helper);
-diff --git a/drivers/gpu/drm/qxl/qxl_release.c b/drivers/gpu/drm/qxl/qxl_release.c
-index e6ec845b5be0..a6da6fa6ad58 100644
---- a/drivers/gpu/drm/qxl/qxl_release.c
-+++ b/drivers/gpu/drm/qxl/qxl_release.c
-@@ -154,7 +154,7 @@ qxl_release_alloc(struct qxl_device *qdev, int type,
- return handle;
- }
- *ret = release;
-- QXL_INFO(qdev, "allocated release %d\n", handle);
-+ DRM_DEBUG_DRIVER("allocated release %d\n", handle);
- release->id = handle;
- return handle;
- }
-@@ -179,8 +179,7 @@ void
- qxl_release_free(struct qxl_device *qdev,
- struct qxl_release *release)
- {
-- QXL_INFO(qdev, "release %d, type %d\n", release->id,
-- release->type);
-+ DRM_DEBUG_DRIVER("release %d, type %d\n", release->id, release->type);
-
- if (release->surface_release_id)
- qxl_surface_id_dealloc(qdev, release->surface_release_id);
-diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
-index 7ecf8a4b9fe6..ab4823875311 100644
---- a/drivers/gpu/drm/qxl/qxl_ttm.c
-+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
-@@ -136,8 +136,8 @@ int qxl_mmap(struct file *filp, struct vm_area_struct *vma)
- "filp->private_data->minor->dev->dev_private == NULL\n");
- return -EINVAL;
- }
-- QXL_INFO(qdev, "%s: filp->private_data = 0x%p, vma->vm_pgoff = %lx\n",
-- __func__, filp->private_data, vma->vm_pgoff);
-+ DRM_DEBUG_DRIVER("filp->private_data = 0x%p, vma->vm_pgoff = %lx\n",
-+ filp->private_data, vma->vm_pgoff);
-
- r = ttm_bo_mmap(filp, vma, &qdev->mman.bdev);
- if (unlikely(r != 0))
---
-2.14.3
-
-From 62676d10b483a2ff6e8b08c5e7c7d63a831343f5 Mon Sep 17 00:00:00 2001
-From: Gerd Hoffmann <kraxel(a)redhat.com>
-Date: Thu, 19 Oct 2017 08:21:50 +0200
-Subject: [PATCH] qxl: alloc & use shadow for dumb buffers
-
-This patch changes the way the primary surface is used for dumb
-framebuffers. Instead of configuring the bo itself as primary surface
-a shadow bo is created and used instead. Framebuffers can share the
-shadow bo in case they have the same format and resolution.
-
-On atomic plane updates we don't have to update the primary surface in
-case we pageflip from one framebuffer to another framebuffer which
-shares the same shadow. This in turn avoids the flicker caused by the
-primary-destroy + primary-create cycle, which is very annonying when
-running wayland on qxl.
-
-The qxl driver never actually writes to the shadow bo. It sends qxl
-blit commands which update it though, and the spice server might
-actually execute them (and thereby write to the shadow) in case the
-local rendering is kicked for some reason. This happens for example in
-case qemu is asked to write out a dump of the guest display (screendump
-monitor command).
-
-Signed-off-by: Gerd Hoffmann <kraxel(a)redhat.com>
-Reviewed-by: Dave Airlie <airlied(a)redhat.com>
-Link: http://patchwork.freedesktop.org/patch/msgid/20171019062150.28090-3-kraxe...
----
- drivers/gpu/drm/qxl/qxl_cmd.c | 6 ++++-
- drivers/gpu/drm/qxl/qxl_display.c | 49 ++++++++++++++++++++++++++++++++++++---
- drivers/gpu/drm/qxl/qxl_drv.h | 2 ++
- drivers/gpu/drm/qxl/qxl_dumb.c | 1 +
- 4 files changed, 54 insertions(+), 4 deletions(-)
-
-diff --git a/drivers/gpu/drm/qxl/qxl_cmd.c b/drivers/gpu/drm/qxl/qxl_cmd.c
-index 8ec53d5abd62..c0fb52c6d4ca 100644
---- a/drivers/gpu/drm/qxl/qxl_cmd.c
-+++ b/drivers/gpu/drm/qxl/qxl_cmd.c
-@@ -387,7 +387,11 @@ void qxl_io_create_primary(struct qxl_device *qdev,
- create->width = bo->surf.width;
- create->height = bo->surf.height;
- create->stride = bo->surf.stride;
-- create->mem = qxl_bo_physical_address(qdev, bo, offset);
-+ if (bo->shadow) {
-+ create->mem = qxl_bo_physical_address(qdev, bo->shadow, offset);
-+ } else {
-+ create->mem = qxl_bo_physical_address(qdev, bo, offset);
-+ }
-
- DRM_DEBUG_DRIVER("mem = %llx, from %p\n", create->mem, bo->kptr);
-
-diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
-index afbf50d0c08f..4756b3c9bf2c 100644
---- a/drivers/gpu/drm/qxl/qxl_display.c
-+++ b/drivers/gpu/drm/qxl/qxl_display.c
-@@ -305,7 +305,9 @@ static const struct drm_crtc_funcs qxl_crtc_funcs = {
- void qxl_user_framebuffer_destroy(struct drm_framebuffer *fb)
- {
- struct qxl_framebuffer *qxl_fb = to_qxl_framebuffer(fb);
-+ struct qxl_bo *bo = gem_to_qxl_bo(qxl_fb->obj);
-
-+ WARN_ON(bo->shadow);
- drm_gem_object_unreference_unlocked(qxl_fb->obj);
- drm_framebuffer_cleanup(fb);
- kfree(qxl_fb);
-@@ -508,6 +510,7 @@ static void qxl_primary_atomic_update(struct drm_plane *plane,
- .x2 = qfb->base.width,
- .y2 = qfb->base.height
- };
-+ bool same_shadow = false;
-
- if (old_state->fb) {
- qfb_old = to_qxl_framebuffer(old_state->fb);
-@@ -519,15 +522,23 @@ static void qxl_primary_atomic_update(struct drm_plane *plane,
- if (bo == bo_old)
- return;
-
-+ if (bo_old && bo_old->shadow && bo->shadow &&
-+ bo_old->shadow == bo->shadow) {
-+ same_shadow = true;
-+ }
-+
- if (bo_old && bo_old->is_primary) {
-- qxl_io_destroy_primary(qdev);
-+ if (!same_shadow)
-+ qxl_io_destroy_primary(qdev);
- bo_old->is_primary = false;
- }
-
- if (!bo->is_primary) {
-- qxl_io_create_primary(qdev, 0, bo);
-+ if (!same_shadow)
-+ qxl_io_create_primary(qdev, 0, bo);
- bo->is_primary = true;
- }
-+
- qxl_draw_dirty_fb(qdev, qfb, bo, 0, 0, &norect, 1, 1);
- }
-
-@@ -679,8 +690,9 @@ static void qxl_cursor_atomic_disable(struct drm_plane *plane,
- static int qxl_plane_prepare_fb(struct drm_plane *plane,
- struct drm_plane_state *new_state)
- {
-+ struct qxl_device *qdev = plane->dev->dev_private;
- struct drm_gem_object *obj;
-- struct qxl_bo *user_bo;
-+ struct qxl_bo *user_bo, *old_bo = NULL;
- int ret;
-
- if (!new_state->fb)
-@@ -689,6 +701,32 @@ static int qxl_plane_prepare_fb(struct drm_plane *plane,
- obj = to_qxl_framebuffer(new_state->fb)->obj;
- user_bo = gem_to_qxl_bo(obj);
-
-+ if (plane->type == DRM_PLANE_TYPE_PRIMARY &&
-+ user_bo->is_dumb && !user_bo->shadow) {
-+ if (plane->state->fb) {
-+ obj = to_qxl_framebuffer(plane->state->fb)->obj;
-+ old_bo = gem_to_qxl_bo(obj);
-+ }
-+ if (old_bo && old_bo->shadow &&
-+ user_bo->gem_base.size == old_bo->gem_base.size &&
-+ plane->state->crtc == new_state->crtc &&
-+ plane->state->crtc_w == new_state->crtc_w &&
-+ plane->state->crtc_h == new_state->crtc_h &&
-+ plane->state->src_x == new_state->src_x &&
-+ plane->state->src_y == new_state->src_y &&
-+ plane->state->src_w == new_state->src_w &&
-+ plane->state->src_h == new_state->src_h &&
-+ plane->state->rotation == new_state->rotation &&
-+ plane->state->zpos == new_state->zpos) {
-+ drm_gem_object_get(&old_bo->shadow->gem_base);
-+ user_bo->shadow = old_bo->shadow;
-+ } else {
-+ qxl_bo_create(qdev, user_bo->gem_base.size,
-+ true, true, QXL_GEM_DOMAIN_VRAM, NULL,
-+ &user_bo->shadow);
-+ }
-+ }
-+
- ret = qxl_bo_pin(user_bo, QXL_GEM_DOMAIN_CPU, NULL);
- if (ret)
- return ret;
-@@ -713,6 +751,11 @@ static void qxl_plane_cleanup_fb(struct drm_plane *plane,
- obj = to_qxl_framebuffer(old_state->fb)->obj;
- user_bo = gem_to_qxl_bo(obj);
- qxl_bo_unpin(user_bo);
-+
-+ if (user_bo->shadow && !user_bo->is_primary) {
-+ drm_gem_object_put_unlocked(&user_bo->shadow->gem_base);
-+ user_bo->shadow = NULL;
-+ }
- }
-
- static const uint32_t qxl_cursor_plane_formats[] = {
-diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h
-index d707b351875c..08752c0ffb35 100644
---- a/drivers/gpu/drm/qxl/qxl_drv.h
-+++ b/drivers/gpu/drm/qxl/qxl_drv.h
-@@ -89,6 +89,8 @@ struct qxl_bo {
- /* Constant after initialization */
- struct drm_gem_object gem_base;
- bool is_primary; /* is this now a primary surface */
-+ bool is_dumb;
-+ struct qxl_bo *shadow;
- bool hw_surf_alloc;
- struct qxl_surface surf;
- uint32_t surface_id;
-diff --git a/drivers/gpu/drm/qxl/qxl_dumb.c b/drivers/gpu/drm/qxl/qxl_dumb.c
-index 5e65d5d2d937..11085ab01374 100644
---- a/drivers/gpu/drm/qxl/qxl_dumb.c
-+++ b/drivers/gpu/drm/qxl/qxl_dumb.c
-@@ -63,6 +63,7 @@ int qxl_mode_dumb_create(struct drm_file *file_priv,
- &handle);
- if (r)
- return r;
-+ qobj->is_dumb = true;
- args->pitch = pitch;
- args->handle = handle;
- return 0;
---
-2.14.3
-
diff --git a/rpi-graphics-fix.patch b/rpi-graphics-fix.patch
deleted file mode 100644
index 89bfaf9..0000000
--- a/rpi-graphics-fix.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-From 253696ccd613fbdaa5aba1de44c461a058e0a114 Mon Sep 17 00:00:00 2001
-From: Stefan Schake <stschake(a)gmail.com>
-Date: Fri, 10 Nov 2017 02:05:06 +0100
-Subject: drm/vc4: Account for interrupts in flight
-
-Synchronously disable the IRQ to make the following cancel_work_sync
-invocation effective.
-
-An interrupt in flight could enqueue further overflow mem work. As we
-free the binner BO immediately following vc4_irq_uninstall this caused
-a NULL pointer dereference in the work callback vc4_overflow_mem_work.
-
-Link: https://github.com/anholt/linux/issues/114
-Signed-off-by: Stefan Schake <stschake(a)gmail.com>
-Fixes: d5b1a78a772f ("drm/vc4: Add support for drawing 3D frames.")
-Signed-off-by: Eric Anholt <eric(a)anholt.net>
-Reviewed-by: Eric Anholt <eric(a)anholt.net>
-Link: https://patchwork.freedesktop.org/patch/msgid/1510275907-993-2-git-send-e...
-
-diff --git a/drivers/gpu/drm/vc4/vc4_irq.c b/drivers/gpu/drm/vc4/vc4_irq.c
-index 7d7af3a..61b2e53 100644
---- a/drivers/gpu/drm/vc4/vc4_irq.c
-+++ b/drivers/gpu/drm/vc4/vc4_irq.c
-@@ -208,6 +208,9 @@ vc4_irq_postinstall(struct drm_device *dev)
- {
- struct vc4_dev *vc4 = to_vc4_dev(dev);
-
-+ /* Undo the effects of a previous vc4_irq_uninstall. */
-+ enable_irq(dev->irq);
-+
- /* Enable both the render done and out of memory interrupts. */
- V3D_WRITE(V3D_INTENA, V3D_DRIVER_IRQS);
-
-@@ -225,6 +228,9 @@ vc4_irq_uninstall(struct drm_device *dev)
- /* Clear any pending interrupts we might have left. */
- V3D_WRITE(V3D_INTCTL, V3D_DRIVER_IRQS);
-
-+ /* Finish any interrupt handler still in flight. */
-+ disable_irq(dev->irq);
-+
- cancel_work_sync(&vc4->overflow_mem_work);
- }
-
---
-cgit v0.10.2
-
diff --git a/sources b/sources
index 9b59b3f..0a3ef88 100644
--- a/sources
+++ b/sources
@@ -1,3 +1,2 @@
-SHA512 (linux-4.14.tar.xz) = 77e43a02d766c3d73b7e25c4aafb2e931d6b16e870510c22cef0cdb05c3acb7952b8908ebad12b10ef982c6efbe286364b1544586e715cf38390e483927904d8
-SHA512 (perf-man-4.14.tar.gz) = 76a9d8adc284cdffd4b3fbb060e7f9a14109267707ce1d03f4c3239cd70d8d164f697da3a0f90a363fbcac42a61d3c378afbcc2a86f112c501b9cb5ce74ef9f8
-SHA512 (patch-4.14.18.xz) = 3582494199ecb65e5c7a908a87e69c97005640f857c54487ff4a0cbd749c505d8d114fb9d4a01e081ab6e7982fc39b8c7077e6b4cc7e52bcdb904cffea637e62
+SHA512 (linux-4.15.tar.xz) = c00d92659df815a53dcac7dde145b742b1f20867d380c07cb09ddb3295d6ff10f8931b21ef0b09d7156923a3957b39d74d87c883300173b2e20690d2b4ec35ea
+SHA512 (patch-4.15.2.xz) = 883d36831ab6a785dda071c91502ca4401b4d4602901bb19716a390cf48ef21830ebb309fe77ec1b741519fa799de7e342df5d7689224a2989f2816bbeaded24
diff --git a/v3-2-2-Input-synaptics---Lenovo-X1-Carbon-5-should-use-SMBUS-RMI.patch b/v3-2-2-Input-synaptics---Lenovo-X1-Carbon-5-should-use-SMBUS-RMI.patch
index a37b15e..7e22e36 100644
--- a/v3-2-2-Input-synaptics---Lenovo-X1-Carbon-5-should-use-SMBUS-RMI.patch
+++ b/v3-2-2-Input-synaptics---Lenovo-X1-Carbon-5-should-use-SMBUS-RMI.patch
@@ -25,5 +25,5 @@ index ee5466a374bf..b3c683a84d3f 100644
"LEN004a", /* W541 */
+ "LEN0073", /* X1 Carbon 5 */
"LEN200f", /* T450s */
+ "LEN2018", /* T460p */
NULL
- };
6 years, 2 months
Architecture specific change in rpms/compat-gcc-34.git
by githook-noreply@fedoraproject.org
The package rpms/compat-gcc-34.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/compat-gcc-34.git/commit/?id=e9d2....
Change:
+%ifarch %{ix86} x86_64
Thanks.
Full change:
============
commit e9d293e6eeeb36254da25c5956e7d10689708910
Author: Jakub Jelinek <jakub(a)redhat.com>
Date: Thu Feb 8 16:02:53 2018 +0100
3.4.6-46
diff --git a/compat-gcc-34.spec b/compat-gcc-34.spec
index 08f927d..8dbda14 100644
--- a/compat-gcc-34.spec
+++ b/compat-gcc-34.spec
@@ -299,6 +299,10 @@ OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mtune=atom/-mtune=i686/g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mtune=nocona//g'`
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mtune=generic//g'`
%endif
+%ifarch %{ix86} x86_64
+OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcet//g'`
+OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-fcf-protection//g'`
+%endif
%ifarch sparc sparcv9 sparc64
OPT_FLAGS=`echo $OPT_FLAGS|sed -e 's/-mcpu=ultrasparc/-mtune=ultrasparc/g'`
%endif
@@ -704,6 +708,7 @@ fi
%changelog
* Thu Feb 08 2018 Jakub Jelinek <jakub(a)redhat.com> 3.4.6-46
- don't conflict with libstdc++ [78].x, it is still backwards ABI compatible
+- strip -mcet and -fcf-protection from OPT_FLAGS
* Thu Feb 08 2018 Rafal Luzynski <digitalfreak(a)lingonborough.com>
- add a patch to fix build of the info docs (#1423303)
6 years, 2 months