diff --git a/Makefile b/Makefile
index bde2119c2928..65a485bd9661 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
-SUBLEVEL = 57
+SUBLEVEL = 58
EXTRAVERSION =
NAME = Kleptomaniac Octopus
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
index c4fdc931507a..711eec745b0c 100644
--- a/android/abi_gki_aarch64.xml
+++ b/android/abi_gki_aarch64.xml
@@ -18,6 +18,7 @@
+
@@ -30,9 +31,9 @@
-
-
-
+
+
+
@@ -88,6 +89,7 @@
+
@@ -115,7 +117,10 @@
+
+
+
@@ -125,7 +130,9 @@
+
+
@@ -183,6 +190,7 @@
+
@@ -385,6 +393,7 @@
+
@@ -409,6 +418,7 @@
+
@@ -455,6 +465,9 @@
+
+
+
@@ -487,47 +500,47 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -852,6 +865,7 @@
+
@@ -888,10 +902,11 @@
+
-
+
@@ -961,6 +976,9 @@
+
+
+
@@ -1042,9 +1060,11 @@
+
+
@@ -1374,6 +1394,7 @@
+
@@ -1410,6 +1431,8 @@
+
+
@@ -1433,7 +1456,7 @@
-
+
@@ -1483,7 +1506,9 @@
+
+
@@ -1656,59 +1681,56 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1753,31 +1775,32 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
@@ -1878,6 +1901,7 @@
+
@@ -1911,6 +1935,7 @@
+
@@ -1940,7 +1965,9 @@
+
+
@@ -1962,6 +1989,7 @@
+
@@ -2019,6 +2047,7 @@
+
@@ -2082,7 +2111,9 @@
+
+
@@ -2135,6 +2166,7 @@
+
@@ -2387,6 +2419,7 @@
+
@@ -2532,11 +2565,20 @@
+
+
+
+
+
+
+
+
+
@@ -2544,10 +2586,17 @@
+
+
+
+
+
+
+
@@ -2824,8 +2873,8 @@
-
-
+
+
@@ -2884,7 +2933,9 @@
+
+
@@ -2931,6 +2982,8 @@
+
+
@@ -2943,6 +2996,7 @@
+
@@ -3035,6 +3089,7 @@
+
@@ -3091,6 +3146,7 @@
+
@@ -3182,9 +3238,9 @@
-
-
-
+
+
+
@@ -3297,6 +3353,7 @@
+
@@ -3653,6 +3710,7 @@
+
@@ -3770,6 +3828,7 @@
+
@@ -3789,11 +3848,13 @@
+
+
@@ -3999,12 +4060,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -5061,17 +5122,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -9987,29 +10037,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -14128,6 +14178,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -14956,6 +15017,12 @@
+
+
+
+
+
+
@@ -15020,22 +15087,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -15710,6 +15761,11 @@
+
+
+
+
+
@@ -15761,6 +15817,11 @@
+
+
+
+
+
@@ -15778,6 +15839,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -15928,6 +16093,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -15968,6 +16211,14 @@
+
+
+
+
+
+
+
+
@@ -16600,7 +16851,7 @@
-
+
@@ -29165,6 +29416,11 @@
+
+
+
+
+
@@ -35825,7 +36081,7 @@
-
+
@@ -35836,6 +36092,7 @@
+
@@ -36094,6 +36351,13 @@
+
+
+
+
+
+
+
@@ -36805,10 +37069,10 @@
-
+
-
+
@@ -44107,17 +44371,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -44164,6 +44417,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -44575,10 +44839,10 @@
-
+
-
+
@@ -44590,7 +44854,7 @@
-
+
@@ -44615,7 +44879,7 @@
-
+
@@ -44826,7 +45090,7 @@
-
+
@@ -45791,10 +46055,10 @@
-
+
-
+
@@ -46415,7 +46679,7 @@
-
+
@@ -46431,7 +46695,7 @@
-
+
@@ -46995,7 +47259,7 @@
-
+
@@ -47004,7 +47268,7 @@
-
+
@@ -49202,7 +49466,7 @@
-
+
@@ -49865,7 +50129,7 @@
-
+
@@ -50179,7 +50443,7 @@
-
+
@@ -50271,7 +50535,7 @@
-
+
@@ -50289,7 +50553,7 @@
-
+
@@ -50566,7 +50830,7 @@
-
+
@@ -50825,7 +51089,7 @@
-
+
@@ -50838,7 +51102,7 @@
-
+
@@ -51145,7 +51409,7 @@
-
+
@@ -51379,6 +51643,7 @@
+
@@ -51402,7 +51667,7 @@
-
+
@@ -51410,7 +51675,7 @@
-
+
@@ -51606,7 +51871,7 @@
-
+
@@ -51631,7 +51896,7 @@
-
+
@@ -51645,7 +51910,7 @@
-
+
@@ -51653,7 +51918,7 @@
-
+
@@ -51822,6 +52087,14 @@
+
+
+
+
+
+
+
+
@@ -52374,7 +52647,7 @@
-
+
@@ -52399,10 +52672,10 @@
-
+
-
+
@@ -52672,6 +52945,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -52690,6 +52993,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53146,12 +53474,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53160,6 +53515,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53294,6 +53677,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53305,10 +53710,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53715,7 +54145,7 @@
-
+
@@ -53750,7 +54180,7 @@
-
+
@@ -55310,6 +55740,11 @@
+
+
+
+
+
@@ -55719,6 +56154,11 @@
+
+
+
+
+
@@ -55806,6 +56246,10 @@
+
+
+
+
@@ -55834,6 +56278,11 @@
+
+
+
+
+
@@ -56491,10 +56940,10 @@
-
+
-
+
@@ -56521,7 +56970,7 @@
-
+
@@ -57127,6 +57576,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -58571,6 +59031,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -60324,6 +60798,7 @@
+
@@ -61255,7 +61730,7 @@
-
+
@@ -61306,7 +61781,7 @@
-
+
@@ -61390,7 +61865,7 @@
-
+
@@ -61398,17 +61873,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -61606,7 +62070,7 @@
-
+
@@ -61777,6 +62241,13 @@
+
+
+
+
+
+
+
@@ -64072,7 +64543,7 @@
-
+
@@ -64083,7 +64554,7 @@
-
+
@@ -64696,6 +65167,14 @@
+
+
+
+
+
+
+
+
@@ -66468,10 +66947,10 @@
-
+
-
+
@@ -66866,7 +67345,7 @@
-
+
@@ -67847,9 +68326,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -67857,7 +68354,7 @@
-
+
@@ -67865,7 +68362,7 @@
-
+
@@ -67897,6 +68394,14 @@
+
+
+
+
+
+
+
+
@@ -67907,6 +68412,10 @@
+
+
+
+
@@ -69492,10 +70001,10 @@
-
+
-
+
@@ -70954,7 +71463,7 @@
-
+
@@ -70963,7 +71472,7 @@
-
+
@@ -71565,7 +72074,7 @@
-
+
@@ -71612,7 +72121,7 @@
-
+
@@ -71872,7 +72381,7 @@
-
+
@@ -73167,7 +73676,7 @@
-
+
@@ -73188,7 +73697,7 @@
-
+
@@ -76631,6 +77140,11 @@
+
+
+
+
+
@@ -76879,7 +77393,7 @@
-
+
@@ -78762,7 +79276,7 @@
-
+
@@ -80603,14 +81117,6 @@
-
-
-
-
-
-
-
-
@@ -81414,7 +81920,7 @@
-
+
@@ -82143,7 +82649,7 @@
-
+
@@ -83195,7 +83701,7 @@
-
+
@@ -83214,7 +83720,7 @@
-
+
@@ -83716,7 +84222,7 @@
-
+
@@ -83801,6 +84307,11 @@
+
+
+
+
+
@@ -84354,7 +84865,7 @@
-
+
@@ -84398,7 +84909,7 @@
-
+
@@ -84713,10 +85224,10 @@
-
+
-
+
@@ -84743,10 +85254,10 @@
-
+
-
+
@@ -84983,7 +85494,7 @@
-
+
@@ -84996,7 +85507,7 @@
-
+
@@ -85012,7 +85523,7 @@
-
+
@@ -85090,7 +85601,7 @@
-
+
@@ -85098,7 +85609,7 @@
-
+
@@ -85126,7 +85637,7 @@
-
+
@@ -85231,6 +85742,13 @@
+
+
+
+
+
+
+
@@ -85377,7 +85895,7 @@
-
+
@@ -85389,15 +85907,15 @@
-
+
-
+
-
+
@@ -85545,7 +86063,7 @@
-
+
@@ -85659,7 +86177,7 @@
-
+
@@ -85674,7 +86192,7 @@
-
+
@@ -85733,7 +86251,7 @@
-
+
@@ -86356,23 +86874,11 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -87072,7 +87578,7 @@
-
+
@@ -87120,7 +87626,7 @@
-
+
@@ -87266,7 +87772,7 @@
-
+
@@ -87769,7 +88275,7 @@
-
+
@@ -87948,10 +88454,18 @@
+
+
+
+
+
+
+
+
@@ -88021,12 +88535,15 @@
-
+
-
+
-
+
+
+
+
@@ -88044,12 +88561,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
@@ -88183,7 +88700,7 @@
-
+
@@ -88271,7 +88788,7 @@
-
+
@@ -88284,7 +88801,7 @@
-
+
@@ -88300,7 +88817,7 @@
-
+
@@ -88336,25 +88853,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -88460,6 +88958,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -88487,6 +89026,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -88525,6 +89077,10 @@
+
+
+
+
@@ -88902,14 +89458,14 @@
-
+
-
+
@@ -88922,7 +89478,7 @@
-
+
@@ -88932,7 +89488,7 @@
-
+
@@ -91185,10 +91741,10 @@
-
+
-
+
@@ -91233,7 +91789,7 @@
-
+
@@ -91257,7 +91813,7 @@
-
+
@@ -92904,7 +93460,7 @@
-
+
@@ -97897,7 +98453,7 @@
-
+
@@ -99041,7 +99597,7 @@
-
+
@@ -99055,7 +99611,7 @@
-
+
@@ -99331,7 +99887,7 @@
-
+
@@ -99712,6 +100268,10 @@
+
+
+
+
@@ -99939,6 +100499,10 @@
+
+
+
+
@@ -99959,17 +100523,17 @@
-
-
-
+
+
+
-
-
+
+
-
-
+
+
@@ -100120,7 +100684,7 @@
-
+
@@ -100300,7 +100864,7 @@
-
+
@@ -100345,7 +100909,7 @@
-
+
@@ -100550,6 +101114,13 @@
+
+
+
+
+
+
+
@@ -100682,10 +101253,10 @@
-
+
-
+
@@ -100875,6 +101446,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -101346,16 +101936,16 @@
-
+
-
+
-
+
@@ -101363,7 +101953,7 @@
-
+
@@ -101441,7 +102031,7 @@
-
+
@@ -101697,7 +102287,7 @@
-
+
@@ -101818,7 +102408,7 @@
-
+
@@ -101907,7 +102497,7 @@
-
+
@@ -101925,10 +102515,10 @@
-
+
-
+
@@ -102055,6 +102645,11 @@
+
+
+
+
+
@@ -102759,7 +103354,7 @@
-
+
@@ -102999,184 +103594,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -103364,6 +103782,14 @@
+
+
+
+
+
+
+
+
@@ -103407,7 +103833,26 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -103418,8 +103863,8 @@
-
-
+
+
@@ -103437,7 +103882,7 @@
-
+
@@ -103505,6 +103950,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -103587,7 +104043,7 @@
-
+
@@ -103880,7 +104336,7 @@
-
+
@@ -104022,7 +104478,7 @@
-
+
@@ -104102,7 +104558,7 @@
-
+
@@ -104521,7 +104977,7 @@
-
+
@@ -104809,10 +105265,10 @@
-
+
-
+
@@ -104863,36 +105319,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -104916,25 +105342,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -105119,7 +105526,7 @@
-
+
@@ -105179,7 +105586,7 @@
-
+
@@ -105707,7 +106114,7 @@
-
+
@@ -105869,7 +106276,7 @@
-
+
@@ -105877,7 +106284,7 @@
-
+
@@ -105907,7 +106314,7 @@
-
+
@@ -105915,7 +106322,7 @@
-
+
@@ -105932,7 +106339,7 @@
-
+
@@ -106384,7 +106791,7 @@
-
+
@@ -106799,10 +107206,10 @@
-
+
-
+
@@ -107695,7 +108102,7 @@
-
+
@@ -107703,7 +108110,7 @@
-
+
@@ -107711,7 +108118,7 @@
-
+
@@ -107727,30 +108134,30 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
@@ -107787,14 +108194,6 @@
-
-
-
-
-
-
-
-
@@ -107807,9 +108206,9 @@
-
-
-
+
+
+
@@ -107818,12 +108217,12 @@
-
-
+
+
-
-
+
+
@@ -107931,8 +108330,8 @@
-
-
+
+
@@ -108019,7 +108418,7 @@
-
+
@@ -108039,7 +108438,7 @@
-
+
@@ -108070,7 +108469,7 @@
-
+
@@ -108079,7 +108478,7 @@
-
+
@@ -108830,6 +109229,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -109107,6 +109562,8 @@
+
+
@@ -109286,7 +109743,7 @@
-
+
@@ -109400,6 +109857,14 @@
+
+
+
+
+
+
+
+
@@ -109421,10 +109886,10 @@
-
+
-
+
@@ -109432,6 +109897,14 @@
+
+
+
+
+
+
+
+
@@ -109457,7 +109930,7 @@
-
+
@@ -109598,7 +110071,7 @@
-
+
@@ -109616,7 +110089,7 @@
-
+
@@ -109919,6 +110392,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -109931,7 +110415,7 @@
-
+
@@ -109950,7 +110434,7 @@
-
+
@@ -110364,11 +110848,19 @@
+
+
+
+
+
+
+
+
-
+
@@ -110377,7 +110869,7 @@
-
+
@@ -110401,13 +110893,13 @@
-
+
-
+
@@ -110421,7 +110913,7 @@
-
+
@@ -110440,7 +110932,7 @@
-
+
@@ -110649,612 +111141,612 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -111262,132 +111754,132 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -111416,36 +111908,36 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -111485,144 +111977,150 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
-
+
@@ -111633,15 +112131,15 @@
-
+
-
+
-
+
-
+
@@ -111670,81 +112168,81 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -111761,15 +112259,15 @@
-
+
-
+
-
+
-
+
@@ -111786,26 +112284,29 @@
-
+
-
+
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
@@ -111836,6 +112337,11 @@
+
+
+
+
+
@@ -111868,20 +112374,20 @@
-
+
-
+
-
+
@@ -112000,57 +112506,57 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -112059,7 +112565,7 @@
-
+
@@ -112086,591 +112592,591 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -112684,7 +113190,7 @@
-
+
@@ -112692,165 +113198,168 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
-
+
@@ -112859,506 +113368,506 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -113366,302 +113875,302 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -113670,172 +114179,172 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -113843,18 +114352,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -113862,175 +114371,175 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -114038,207 +114547,207 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -114297,6 +114806,8 @@
+
+
@@ -114454,25 +114965,25 @@
-
-
+
+
-
-
+
+
-
+
-
-
+
+
@@ -115125,7 +115636,7 @@
-
+
@@ -115200,7 +115711,7 @@
-
+
@@ -115208,7 +115719,7 @@
-
+
@@ -115216,7 +115727,7 @@
-
+
@@ -115224,7 +115735,7 @@
-
+
@@ -115238,7 +115749,7 @@
-
+
@@ -115246,7 +115757,7 @@
-
+
@@ -115432,7 +115943,7 @@
-
+
@@ -115723,208 +116234,209 @@
-
-
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -115941,34 +116453,34 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -115993,7 +116505,7 @@
-
+
@@ -116008,22 +116520,22 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
@@ -116031,39 +116543,39 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -116089,15 +116601,15 @@
-
+
-
+
-
+
@@ -116141,7 +116653,7 @@
-
+
@@ -116612,89 +117124,89 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -116725,74 +117237,60 @@
-
+
-
+
-
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
+
@@ -116801,13 +117299,13 @@
-
-
+
+
-
+
@@ -116959,7 +117457,7 @@
-
+
@@ -117174,7 +117672,7 @@
-
+
@@ -117908,7 +118406,7 @@
-
+
@@ -117918,12 +118416,12 @@
-
+
-
+
@@ -117943,7 +118441,7 @@
-
+
@@ -118002,7 +118500,7 @@
-
+
@@ -118022,7 +118520,7 @@
-
+
@@ -118061,7 +118559,7 @@
-
+
@@ -118139,13 +118637,13 @@
-
+
-
+
@@ -118665,36 +119163,36 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -118717,24 +119215,24 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
@@ -119053,7 +119551,7 @@
-
+
@@ -119221,7 +119719,7 @@
-
+
@@ -120022,10 +120520,10 @@
-
+
-
+
@@ -121229,6 +121727,11 @@
+
+
+
+
+
@@ -122192,7 +122695,7 @@
-
+
@@ -122807,7 +123310,7 @@
-
+
@@ -122823,6 +123326,6 @@
diff --git a/android/abi_gki_aarch64_3f413d0ec7.xml b/android/abi_gki_aarch64_3a9b53bc89.xml
similarity index 99%
rename from android/abi_gki_aarch64_3f413d0ec7.xml
rename to android/abi_gki_aarch64_3a9b53bc89.xml
index 757d6a0d1993..701a2778736e 100644
--- a/android/abi_gki_aarch64_3f413d0ec7.xml
+++ b/android/abi_gki_aarch64_3a9b53bc89.xml
@@ -579,7 +579,7 @@
-
+
@@ -1194,25 +1194,25 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -2104,7 +2104,7 @@
-
+
@@ -4989,20 +4989,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -6859,7 +6845,6 @@
-
@@ -7104,7 +7089,7 @@
-
+
@@ -7638,15 +7623,15 @@
-
+
-
+
-
+
@@ -7876,7 +7861,7 @@
-
+
@@ -7934,7 +7919,7 @@
-
+
@@ -8190,7 +8175,7 @@
-
+
@@ -8299,7 +8284,7 @@
-
+
@@ -9068,7 +9053,7 @@
-
+
@@ -9829,7 +9814,7 @@
-
+
@@ -12263,13 +12248,13 @@
-
+
-
+
@@ -12667,7 +12652,7 @@
-
+
@@ -13905,7 +13890,7 @@
-
+
@@ -18662,20 +18647,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -19749,7 +19720,7 @@
-
+
@@ -20015,10 +19986,10 @@
-
+
-
+
@@ -20087,10 +20058,10 @@
-
+
-
+
@@ -21686,7 +21657,7 @@
-
+
@@ -21703,7 +21674,7 @@
-
+
@@ -21988,7 +21959,7 @@
-
+
@@ -22055,7 +22026,7 @@
-
+
@@ -22449,7 +22420,7 @@
-
+
@@ -22901,7 +22872,7 @@
-
+
@@ -22916,7 +22887,7 @@
-
+
@@ -25156,10 +25127,10 @@
-
+
-
+
@@ -27411,7 +27382,7 @@
-
+
@@ -28074,7 +28045,7 @@
-
+
@@ -30210,7 +30181,58 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -30221,6 +30243,14 @@
+
+
+
+
+
+
+
+
@@ -30951,6 +30981,14 @@
+
+
+
+
+
+
+
+
@@ -31041,13 +31079,13 @@
-
+
-
+
@@ -31209,10 +31247,10 @@
-
+
-
+
@@ -31234,10 +31272,10 @@
-
+
-
+
@@ -34486,7 +34524,7 @@
-
+
@@ -34497,7 +34535,7 @@
-
+
@@ -36529,6 +36567,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -38425,7 +38480,7 @@
-
+
@@ -38662,15 +38717,30 @@
-
+
+
-
+
-
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
@@ -38681,106 +38751,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -38919,17 +38889,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -38960,6 +38919,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -38984,7 +38959,7 @@
-
+
@@ -38992,15 +38967,21 @@
-
+
-
+
-
+
+
+
+
+
+
+
-
+
@@ -39608,10 +39589,10 @@
-
+
-
+
@@ -39664,10 +39645,10 @@
-
+
-
+
@@ -40328,10 +40309,10 @@
-
+
-
+
@@ -40820,7 +40801,7 @@
-
+
@@ -40845,7 +40826,7 @@
-
+
@@ -40864,7 +40845,7 @@
-
+
@@ -40873,7 +40854,7 @@
-
+
@@ -41264,7 +41245,7 @@
-
+
@@ -41272,14 +41253,6 @@
-
-
-
-
-
-
-
-
@@ -43266,7 +43239,7 @@
-
+
@@ -43285,7 +43258,7 @@
-
+
@@ -46577,6 +46550,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -46606,17 +46590,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -49375,7 +49348,7 @@
-
+
@@ -49402,14 +49375,6 @@
-
-
-
-
-
-
-
-
@@ -49746,7 +49711,7 @@
-
+
@@ -49972,23 +49937,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -50058,7 +50006,7 @@
-
+
@@ -50080,7 +50028,7 @@
-
+
@@ -50091,12 +50039,12 @@
-
+
-
+
-
+
@@ -50415,7 +50363,7 @@
-
+
@@ -50630,7 +50578,7 @@
-
+
@@ -50645,7 +50593,7 @@
-
+
@@ -50872,25 +50820,25 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
@@ -51096,10 +51044,10 @@
-
+
-
+
@@ -52057,7 +52005,7 @@
-
+
@@ -52149,7 +52097,7 @@
-
+
@@ -52166,7 +52114,7 @@
-
+
@@ -52367,10 +52315,10 @@
-
+
-
+
@@ -53265,7 +53213,7 @@
-
+
@@ -53413,13 +53361,13 @@
-
+
-
+
@@ -56064,7 +56012,7 @@
-
+
@@ -56844,7 +56792,7 @@
-
+
@@ -56872,7 +56820,7 @@
-
+
@@ -57116,10 +57064,10 @@
-
+
-
+
@@ -59609,10 +59557,10 @@
-
+
-
+
@@ -67653,7 +67601,7 @@
-
+
@@ -67696,7 +67644,7 @@
-
+
@@ -67720,7 +67668,7 @@
-
+
@@ -67747,7 +67695,7 @@
-
+
@@ -67766,7 +67714,7 @@
-
+
@@ -67971,7 +67919,7 @@
-
+
@@ -67995,7 +67943,7 @@
-
+
@@ -68019,13 +67967,13 @@
-
+
-
+
@@ -68173,7 +68121,7 @@
-
+
@@ -68632,7 +68580,7 @@
-
+
@@ -68651,7 +68599,7 @@
-
+
@@ -69001,7 +68949,7 @@
-
+
@@ -69258,7 +69206,7 @@
-
+
@@ -69272,7 +69220,7 @@
-
+
@@ -70013,13 +69961,13 @@
-
+
-
+
@@ -70771,7 +70719,7 @@
-
+
@@ -70912,7 +70860,7 @@
-
+
@@ -71069,7 +71017,7 @@
-
+
@@ -76378,7 +76326,7 @@
-
+
@@ -76427,7 +76375,7 @@
-
+
@@ -76454,7 +76402,7 @@
-
+
@@ -76495,7 +76443,7 @@
-
+
@@ -76515,7 +76463,7 @@
-
+
@@ -77275,8 +77223,8 @@
-
-
+
+
@@ -77290,7 +77238,7 @@
-
+
@@ -78154,7 +78102,7 @@
-
+
@@ -78201,7 +78149,7 @@
-
+
@@ -78249,10 +78197,10 @@
-
+
-
+
@@ -79379,7 +79327,7 @@
-
+
@@ -79400,7 +79348,7 @@
-
+
@@ -80259,7 +80207,7 @@
-
+
@@ -80281,7 +80229,7 @@
-
+
@@ -80310,7 +80258,7 @@
-
+
@@ -81047,7 +80995,7 @@
-
+
@@ -81076,7 +81024,7 @@
-
+
@@ -81133,6 +81081,14 @@
+
+
+
+
+
+
+
+
@@ -81162,14 +81118,6 @@
-
-
-
-
-
-
-
-
@@ -81491,7 +81439,7 @@
-
+
@@ -81616,7 +81564,7 @@
-
+
@@ -81764,7 +81712,7 @@
-
+
@@ -81871,7 +81819,7 @@
-
+
@@ -82453,7 +82401,7 @@
-
+
@@ -83030,7 +82978,7 @@
-
+
@@ -83054,7 +83002,7 @@
-
+
@@ -83500,7 +83448,7 @@
-
+
@@ -83564,7 +83512,7 @@
-
+
@@ -84985,7 +84933,7 @@
-
+
@@ -85196,7 +85144,7 @@
-
+
@@ -85319,7 +85267,7 @@
-
+
@@ -85364,7 +85312,7 @@
-
+
@@ -86302,16 +86250,16 @@
-
+
-
+
-
+
@@ -86319,7 +86267,7 @@
-
+
@@ -86475,7 +86423,7 @@
-
+
@@ -86799,7 +86747,7 @@
-
+
@@ -86951,7 +86899,7 @@
-
+
@@ -87061,7 +87009,7 @@
-
+
@@ -87079,10 +87027,10 @@
-
+
-
+
@@ -87101,7 +87049,7 @@
-
+
@@ -87131,7 +87079,7 @@
-
+
@@ -87216,7 +87164,7 @@
-
+
@@ -87232,7 +87180,7 @@
-
+
@@ -87268,7 +87216,7 @@
-
+
@@ -87324,7 +87272,7 @@
-
+
@@ -87523,9 +87471,6 @@
-
-
-
@@ -87582,7 +87527,7 @@
-
+
@@ -87590,7 +87535,7 @@
-
+
@@ -87617,7 +87562,7 @@
-
+
@@ -87625,7 +87570,7 @@
-
+
@@ -87673,7 +87618,7 @@
-
+
@@ -87717,7 +87662,7 @@
-
+
@@ -87979,14 +87924,7 @@
-
-
-
-
-
-
-
@@ -87998,7 +87936,7 @@
-
+
@@ -88006,7 +87944,7 @@
-
+
@@ -88031,6 +87969,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -88445,8 +88438,486 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -88461,31 +88932,46 @@
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
@@ -88563,6 +89049,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -88573,6 +89069,11 @@
+
+
+
+
+
@@ -88606,47 +89107,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -88697,7 +89157,7 @@
-
+
@@ -88739,7 +89199,7 @@
-
+
@@ -88907,8 +89367,8 @@
-
-
+
+
@@ -89041,7 +89501,7 @@
-
+
@@ -89086,7 +89546,7 @@
-
+
@@ -89711,7 +90171,7 @@
-
+
@@ -89719,15 +90179,15 @@
-
+
-
+
-
+
@@ -89736,7 +90196,7 @@
-
+
@@ -89798,7 +90258,7 @@
-
+
@@ -89911,7 +90371,7 @@
-
+
@@ -90212,7 +90672,7 @@
-
+
@@ -91389,9 +91849,9 @@
-
+
-
+
@@ -91400,7 +91860,7 @@
-
+
@@ -91430,10 +91890,10 @@
-
+
-
+
@@ -91462,7 +91922,7 @@
-
+
@@ -92051,10 +92511,10 @@
-
+
-
+
@@ -93002,7 +93462,7 @@
-
+
@@ -93014,7 +93474,7 @@
-
+
@@ -94458,7 +94918,7 @@
-
+
@@ -94466,7 +94926,7 @@
-
+
@@ -94499,7 +94959,7 @@
-
+
@@ -94507,7 +94967,7 @@
-
+
@@ -94518,9 +94978,9 @@
-
+
-
+
@@ -94529,7 +94989,7 @@
-
+
@@ -94537,10 +94997,10 @@
-
+
-
+
@@ -94564,7 +95024,7 @@
-
+
@@ -94588,7 +95048,7 @@
-
+
@@ -94647,7 +95107,7 @@
-
+
@@ -94655,7 +95115,7 @@
-
+
@@ -95322,45 +95782,45 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -95374,7 +95834,7 @@
-
+
@@ -95390,7 +95850,7 @@
-
+
@@ -95418,12 +95878,12 @@
-
+
-
+
@@ -95437,12 +95897,12 @@
-
+
-
+
@@ -95456,29 +95916,29 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -95517,7 +95977,7 @@
-
+
@@ -95531,7 +95991,7 @@
-
+
@@ -95539,7 +95999,7 @@
-
+
@@ -95564,7 +96024,7 @@
-
+
@@ -95595,7 +96055,7 @@
-
+
@@ -95847,7 +96307,7 @@
-
+
@@ -95971,7 +96431,7 @@
-
+
@@ -95979,7 +96439,7 @@
-
+
@@ -96003,9 +96463,9 @@
-
+
-
+
@@ -96014,7 +96474,7 @@
-
+
@@ -96022,10 +96482,10 @@
-
+
-
+
@@ -96055,7 +96515,7 @@
-
+
@@ -96066,7 +96526,7 @@
-
+
@@ -96173,10 +96633,10 @@
-
+
-
+
@@ -96561,7 +97021,7 @@
-
+
@@ -96847,7 +97307,7 @@
-
+
@@ -96857,12 +97317,12 @@
-
+
-
+
-
+
@@ -96871,7 +97331,7 @@
-
+
@@ -96882,7 +97342,7 @@
-
+
@@ -96938,22 +97398,22 @@
-
+
-
+
-
+
-
+
-
+
@@ -96961,7 +97421,7 @@
-
+
@@ -96969,7 +97429,7 @@
-
+
@@ -96977,7 +97437,7 @@
-
+
@@ -97174,36 +97634,36 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -97225,10 +97685,10 @@
-
-
-
-
+
+
+
+
@@ -97385,7 +97845,7 @@
-
+
@@ -97559,7 +98019,7 @@
-
+
@@ -98233,7 +98693,7 @@
-
+
@@ -98350,10 +98810,10 @@
-
+
-
+
@@ -99670,7 +100130,7 @@
-
+
@@ -100627,7 +101087,7 @@
-
+
@@ -100873,7 +101333,7 @@
-
+
@@ -101268,7 +101728,7 @@
-
+
@@ -101329,7 +101789,7 @@
-
+
@@ -101343,8 +101803,3 @@
-
-
diff --git a/android/abi_gki_aarch64_cuttlefish b/android/abi_gki_aarch64_cuttlefish
index 7cd71df58c28..5dca8eeb1442 100644
--- a/android/abi_gki_aarch64_cuttlefish
+++ b/android/abi_gki_aarch64_cuttlefish
@@ -499,7 +499,6 @@
wiphy_unregister
# required by virt_wifi_sim.ko
- ieee80211_get_channel
kstrtoull
release_firmware
request_firmware
diff --git a/android/abi_gki_aarch64_hikey960 b/android/abi_gki_aarch64_hikey960
index 3903a3d5ce04..2b8c6946a594 100644
--- a/android/abi_gki_aarch64_hikey960
+++ b/android/abi_gki_aarch64_hikey960
@@ -195,7 +195,6 @@
ida_alloc_range
ida_destroy
ida_free
- ieee80211_channel_to_frequency
ieee80211_connection_loss
ieee80211_find_sta
ieee80211_get_hdrlen_from_skb
@@ -804,7 +803,6 @@
ieee80211_csa_finish
ieee80211_free_hw
ieee80211_free_txskb
- ieee80211_frequency_to_channel
ieee80211_hdrlen
ieee80211_iterate_active_interfaces_atomic
ieee80211_iterate_interfaces
diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc
index d6920827522a..f9bb5ced07c8 100644
--- a/android/abi_gki_aarch64_unisoc
+++ b/android/abi_gki_aarch64_unisoc
@@ -1858,9 +1858,6 @@
down_timeout
freq_reg_info
genlmsg_put
- ieee80211_channel_to_frequency
- ieee80211_frequency_to_channel
- ieee80211_get_channel
jiffies_to_usecs
kfree_skb_list
netdev_alloc_frag
diff --git a/android/abi_gki_aarch64_vivo b/android/abi_gki_aarch64_vivo
new file mode 100644
index 000000000000..2ddab083f547
--- /dev/null
+++ b/android/abi_gki_aarch64_vivo
@@ -0,0 +1,2347 @@
+[abi_whitelist]
+ add_device_randomness
+ add_timer
+ add_uevent_var
+ add_wait_queue
+ adjust_managed_page_count
+ alarm_cancel
+ alarm_init
+ alarm_start_relative
+ alloc_chrdev_region
+ __alloc_disk_node
+ alloc_etherdev_mqs
+ alloc_io_pgtable_ops
+ alloc_netdev_mqs
+ alloc_pages_exact
+ __alloc_pages_nodemask
+ __alloc_percpu
+ __alloc_skb
+ alloc_skb_with_frags
+ alloc_workqueue
+ amba_bustype
+ anon_inode_getfile
+ __arch_clear_user
+ __arch_copy_from_user
+ __arch_copy_in_user
+ __arch_copy_to_user
+ arm64_const_caps_ready
+ async_schedule_node
+ atomic_notifier_call_chain
+ atomic_notifier_chain_register
+ atomic_notifier_chain_unregister
+ autoremove_wake_function
+ backlight_device_get_by_type
+ backlight_device_register
+ backlight_device_set_brightness
+ backlight_device_unregister
+ bio_crypt_should_process
+ __bitmap_clear
+ bitmap_find_next_zero_area_off
+ bitmap_free
+ __bitmap_or
+ bitmap_parselist
+ bitmap_print_to_pagebuf
+ __bitmap_set
+ __bitmap_subset
+ bitmap_zalloc
+ blkdev_get_by_dev
+ blkdev_put
+ blk_execute_rq
+ blk_execute_rq_nowait
+ blk_get_request
+ blk_pm_runtime_init
+ blk_put_request
+ blk_queue_bounce_limit
+ blk_queue_max_hw_sectors
+ blk_queue_rq_timeout
+ blk_queue_update_dma_alignment
+ blk_queue_update_dma_pad
+ blk_rq_map_kern
+ blk_rq_map_user
+ blk_rq_map_user_iov
+ blk_rq_unmap_user
+ blk_verify_command
+ blocking_notifier_call_chain
+ blocking_notifier_chain_register
+ blocking_notifier_chain_unregister
+ bpf_trace_run10
+ bpf_trace_run11
+ bpf_trace_run12
+ bpf_trace_run1
+ bpf_trace_run2
+ bpf_trace_run3
+ bpf_trace_run4
+ bpf_trace_run5
+ bpf_trace_run6
+ bpf_trace_run7
+ bpf_trace_run8
+ __brelse
+ bsg_job_done
+ bsg_remove_queue
+ bsg_setup_queue
+ build_skb
+ bus_find_device
+ bus_for_each_dev
+ bus_register
+ bus_set_iommu
+ bus_unregister
+ cancel_delayed_work
+ cancel_delayed_work_sync
+ cancel_work_sync
+ capable
+ cdc_parse_cdc_header
+ cdev_add
+ cdev_alloc
+ cdev_del
+ cdev_init
+ __cfg80211_alloc_event_skb
+ __cfg80211_alloc_reply_skb
+ cfg80211_calculate_bitrate
+ cfg80211_chandef_create
+ cfg80211_ch_switch_notify
+ cfg80211_connect_done
+ cfg80211_del_sta_sinfo
+ cfg80211_disconnected
+ cfg80211_external_auth_request
+ cfg80211_ft_event
+ cfg80211_get_bss
+ cfg80211_gtk_rekey_notify
+ cfg80211_inform_bss_frame_data
+ cfg80211_mgmt_tx_status
+ cfg80211_michael_mic_failure
+ cfg80211_new_sta
+ cfg80211_pmksa_candidate_notify
+ cfg80211_put_bss
+ cfg80211_ready_on_channel
+ cfg80211_remain_on_channel_expired
+ cfg80211_roamed
+ cfg80211_rx_mgmt
+ cfg80211_rx_unprot_mlme_mgmt
+ cfg80211_scan_done
+ cfg80211_sched_scan_results
+ __cfg80211_send_event_skb
+ cfg80211_tdls_oper_request
+ cfg80211_unlink_bss
+ cfg80211_vendor_cmd_reply
+ __cfi_slowpath
+ __check_object_size
+ __class_create
+ class_destroy
+ class_find_device
+ class_interface_unregister
+ __class_register
+ class_unregister
+ cleanup_srcu_struct
+ clear_page
+ clk_bulk_disable
+ clk_bulk_enable
+ clk_bulk_get_all
+ clk_bulk_prepare
+ clk_bulk_put_all
+ clk_bulk_unprepare
+ __clk_determine_rate
+ clk_disable
+ clk_enable
+ clk_fixed_factor_ops
+ clk_fixed_rate_ops
+ clk_get
+ __clk_get_hw
+ __clk_get_name
+ clk_get_parent
+ clk_get_rate
+ clk_hw_get_flags
+ clk_hw_get_name
+ clk_hw_get_num_parents
+ clk_hw_get_parent
+ clk_hw_get_parent_by_index
+ clk_hw_get_rate
+ clk_hw_is_enabled
+ clk_hw_is_prepared
+ clk_hw_round_rate
+ __clk_is_enabled
+ __clk_mux_determine_rate_closest
+ clk_prepare
+ clk_put
+ clk_register
+ clk_round_rate
+ clk_set_parent
+ clk_set_rate
+ clk_sync_state
+ clk_unprepare
+ cma_alloc
+ cma_get_name
+ cma_release
+ compat_alloc_user_space
+ complete
+ complete_all
+ complete_and_exit
+ completion_done
+ component_add
+ component_bind_all
+ component_del
+ component_master_add_with_match
+ component_master_del
+ component_match_add_release
+ component_unbind_all
+ config_ep_by_speed
+ config_group_init_type_name
+ config_item_put
+ console_stop
+ console_suspend_enabled
+ __const_udelay
+ consume_skb
+ contig_page_data
+ _copy_from_iter_full
+ _copy_to_iter
+ cpu_bit_bitmap
+ cpufreq_quick_get_max
+ cpufreq_register_notifier
+ cpufreq_unregister_notifier
+ cpufreq_update_policy
+ __cpuhp_remove_state
+ __cpuhp_setup_state
+ cpu_hwcap_keys
+ cpu_hwcaps
+ cpumask_next
+ cpu_number
+ __cpu_online_mask
+ cpu_pm_register_notifier
+ cpu_pm_unregister_notifier
+ __cpu_possible_mask
+ __cpu_present_mask
+ cpus_read_lock
+ cpus_read_unlock
+ cpu_subsys
+ cpu_topology
+ crc32_le
+ crc8
+ crc8_populate_msb
+ crypto_aead_encrypt
+ crypto_aead_setauthsize
+ crypto_aead_setkey
+ crypto_alloc_aead
+ crypto_alloc_base
+ crypto_alloc_shash
+ crypto_alloc_skcipher
+ crypto_destroy_tfm
+ crypto_register_rngs
+ crypto_shash_final
+ crypto_shash_setkey
+ crypto_shash_update
+ crypto_skcipher_decrypt
+ crypto_skcipher_encrypt
+ crypto_unregister_rngs
+ csum_ipv6_magic
+ csum_partial
+ csum_tcpudp_nofold
+ _ctype
+ datagram_poll
+ default_wake_function
+ delayed_work_timer_fn
+ del_timer
+ del_timer_sync
+ dequeue_signal
+ desc_to_gpio
+ destroy_workqueue
+ dev_alloc_name
+ _dev_crit
+ dev_driver_string
+ _dev_emerg
+ _dev_err
+ devfreq_add_device
+ devfreq_add_governor
+ devfreq_cooling_unregister
+ devfreq_remove_device
+ devfreq_remove_governor
+ devfreq_resume_device
+ devfreq_suspend_device
+ dev_fwnode
+ __dev_get_by_index
+ dev_get_by_name
+ dev_get_regmap
+ device_add
+ device_connection_find_match
+ device_create
+ device_create_bin_file
+ device_create_file
+ device_create_with_groups
+ device_del
+ device_destroy
+ device_find_child
+ device_for_each_child
+ device_get_child_node_count
+ device_get_match_data
+ device_get_next_child_node
+ device_initialize
+ device_init_wakeup
+ device_link_add
+ device_link_del
+ device_match_fwnode
+ device_match_name
+ device_property_present
+ device_property_read_string
+ device_property_read_u32_array
+ device_property_read_u8_array
+ device_register
+ device_remove_bin_file
+ device_remove_file
+ device_set_wakeup_capable
+ device_set_wakeup_enable
+ device_show_int
+ device_store_int
+ device_unregister
+ device_wakeup_disable
+ device_wakeup_enable
+ _dev_info
+ __dev_kfree_skb_any
+ devm_add_action
+ devm_clk_bulk_get
+ devm_clk_bulk_get_all
+ devm_clk_get
+ devm_clk_get_optional
+ devm_clk_hw_register
+ devm_clk_put
+ devm_clk_register
+ devm_extcon_dev_allocate
+ devm_extcon_dev_register
+ devm_extcon_register_notifier
+ devm_free_irq
+ devm_fwnode_get_index_gpiod_from_child
+ devm_gpiod_get_optional
+ devm_gpiod_put
+ devm_gpio_free
+ devm_gpio_request
+ devm_gpio_request_one
+ devm_iio_channel_get
+ devm_iio_device_alloc
+ __devm_iio_device_register
+ devm_input_allocate_device
+ devm_ioremap
+ devm_ioremap_nocache
+ devm_ioremap_resource
+ devm_ioremap_wc
+ devm_iounmap
+ devm_kasprintf
+ devm_kfree
+ devm_kmalloc
+ devm_kmemdup
+ devm_kstrdup
+ devm_led_classdev_register_ext
+ devm_nvmem_cell_get
+ devm_nvmem_device_get
+ devm_nvmem_register
+ devm_of_clk_add_hw_provider
+ devm_of_pci_get_host_bridge_resources
+ __devm_of_phy_provider_register
+ devm_of_platform_populate
+ devm_of_pwm_get
+ devm_pci_alloc_host_bridge
+ devm_phy_create
+ devm_phy_get
+ devm_pinctrl_get
+ devm_pinctrl_put
+ devm_pinctrl_register
+ devm_platform_ioremap_resource
+ devm_power_supply_register
+ devm_pwm_put
+ devm_regmap_add_irq_chip
+ devm_regmap_del_irq_chip
+ devm_regmap_field_alloc
+ __devm_regmap_init
+ __devm_regmap_init_i2c
+ __devm_regmap_init_mmio_clk
+ devm_regulator_bulk_get
+ devm_regulator_get
+ devm_regulator_get_optional
+ devm_regulator_put
+ devm_regulator_register
+ devm_regulator_register_notifier
+ devm_request_any_context_irq
+ devm_request_pci_bus_resources
+ __devm_request_region
+ devm_request_threaded_irq
+ devm_reset_control_array_get
+ __devm_reset_control_get
+ devm_reset_controller_register
+ devm_rtc_device_register
+ devm_snd_soc_register_card
+ devm_thermal_zone_of_sensor_register
+ devm_usb_get_phy
+ devm_usb_get_phy_by_phandle
+ _dev_notice
+ dev_pm_opp_add
+ dev_pm_opp_find_freq_ceil
+ dev_pm_opp_find_freq_exact
+ dev_pm_opp_find_freq_floor
+ dev_pm_opp_get_opp_count
+ dev_pm_opp_get_voltage
+ dev_pm_opp_put
+ dev_pm_opp_register_notifier
+ dev_pm_opp_remove
+ dev_pm_opp_unregister_notifier
+ dev_pm_qos_add_request
+ dev_pm_qos_remove_request
+ dev_pm_qos_update_request
+ dev_printk
+ dev_queue_xmit
+ devres_add
+ devres_alloc_node
+ devres_free
+ devres_release
+ dev_set_name
+ _dev_warn
+ disable_irq
+ disable_irq_nosync
+ disable_percpu_irq
+ disk_part_iter_exit
+ disk_part_iter_init
+ disk_part_iter_next
+ divider_get_val
+ divider_recalc_rate
+ divider_ro_round_rate_parent
+ divider_round_rate_parent
+ dma_alloc_attrs
+ dma_async_device_register
+ dma_async_device_unregister
+ dma_async_tx_descriptor_init
+ dma_buf_attach
+ dma_buf_begin_cpu_access
+ dma_buf_begin_cpu_access_partial
+ dma_buf_detach
+ dma_buf_end_cpu_access
+ dma_buf_end_cpu_access_partial
+ dma_buf_export
+ dma_buf_fd
+ dma_buf_get
+ dma_buf_get_flags
+ dma_buf_kmap
+ dma_buf_kunmap
+ dma_buf_map_attachment
+ dma_buf_put
+ dma_buf_unmap_attachment
+ dma_buf_vmap
+ dma_buf_vunmap
+ dma_direct_map_page
+ dma_direct_map_resource
+ dma_direct_map_sg
+ dma_direct_sync_sg_for_cpu
+ dma_direct_sync_sg_for_device
+ dma_direct_sync_single_for_cpu
+ dma_direct_sync_single_for_device
+ dma_direct_unmap_page
+ dma_direct_unmap_sg
+ dma_fence_add_callback
+ dma_fence_array_create
+ dma_fence_array_ops
+ dma_fence_context_alloc
+ dma_fence_default_wait
+ dma_fence_enable_sw_signaling
+ dma_fence_get_status
+ dma_fence_init
+ dma_fence_release
+ dma_fence_remove_callback
+ dma_fence_signal
+ dma_fence_signal_locked
+ dma_fence_wait_timeout
+ dma_free_attrs
+ dma_get_sgtable_attrs
+ dma_get_slave_channel
+ dmam_alloc_attrs
+ dma_max_mapping_size
+ dma_mmap_attrs
+ dma_pool_alloc
+ dma_pool_create
+ dma_pool_destroy
+ dma_pool_free
+ dma_release_channel
+ dma_request_slave_channel
+ dma_resv_fini
+ dma_resv_init
+ dma_resv_wait_timeout_rcu
+ dma_set_coherent_mask
+ dma_set_mask
+ do_exit
+ done_path_create
+ do_wait_intr
+ down
+ down_interruptible
+ down_read
+ down_read_trylock
+ down_timeout
+ down_write
+ drain_workqueue
+ driver_find_device
+ driver_register
+ driver_unregister
+ drm_add_edid_modes
+ drm_add_modes_noedid
+ drm_atomic_commit
+ drm_atomic_get_connector_state
+ drm_atomic_get_crtc_state
+ drm_atomic_get_plane_state
+ drm_atomic_helper_check
+ drm_atomic_helper_cleanup_planes
+ drm_atomic_helper_commit_duplicated_state
+ drm_atomic_helper_commit_hw_done
+ drm_atomic_helper_commit_modeset_disables
+ drm_atomic_helper_commit_modeset_enables
+ drm_atomic_helper_commit_planes
+ __drm_atomic_helper_connector_destroy_state
+ __drm_atomic_helper_connector_duplicate_state
+ __drm_atomic_helper_connector_reset
+ __drm_atomic_helper_crtc_destroy_state
+ __drm_atomic_helper_crtc_duplicate_state
+ drm_atomic_helper_dirtyfb
+ drm_atomic_helper_disable_plane
+ drm_atomic_helper_duplicate_state
+ drm_atomic_helper_page_flip
+ __drm_atomic_helper_plane_duplicate_state
+ drm_atomic_helper_prepare_planes
+ drm_atomic_helper_set_config
+ drm_atomic_helper_shutdown
+ drm_atomic_helper_swap_state
+ drm_atomic_helper_update_legacy_modeset_state
+ drm_atomic_helper_update_plane
+ drm_atomic_helper_wait_for_fences
+ drm_atomic_helper_wait_for_vblanks
+ drm_atomic_set_crtc_for_connector
+ drm_atomic_set_fence_for_plane
+ drm_atomic_set_mode_for_crtc
+ drm_atomic_state_alloc
+ drm_atomic_state_clear
+ drm_atomic_state_default_clear
+ drm_atomic_state_default_release
+ __drm_atomic_state_free
+ drm_atomic_state_init
+ drm_bridge_attach
+ drm_bridge_disable
+ drm_bridge_enable
+ drm_bridge_mode_set
+ drm_bridge_post_disable
+ drm_bridge_pre_enable
+ drm_client_init
+ drm_client_modeset_commit_force
+ drm_client_register
+ drm_compat_ioctl
+ drm_connector_attach_encoder
+ drm_connector_cleanup
+ drm_connector_init
+ drm_connector_list_iter_begin
+ drm_connector_list_iter_end
+ drm_connector_list_iter_next
+ drm_connector_register
+ drm_connector_unregister
+ drm_connector_update_edid_property
+ drm_crtc_cleanup
+ drm_crtc_handle_vblank
+ drm_crtc_init_with_planes
+ drm_crtc_send_vblank_event
+ drm_crtc_vblank_off
+ drm_crtc_vblank_on
+ drm_crtc_vblank_reset
+ drm_crtc_wait_one_vblank
+ drm_dbg
+ drm_debug
+ drm_detect_hdmi_monitor
+ drm_detect_monitor_audio
+ drm_dev_alloc
+ drm_dev_dbg
+ drm_dev_printk
+ drm_dev_put
+ drm_dev_register
+ drm_dev_unregister
+ drm_dp_atomic_find_vcpi_slots
+ drm_dp_atomic_release_vcpi_slots
+ drm_dp_aux_register
+ drm_dp_aux_unregister
+ drm_dp_bw_code_to_link_rate
+ drm_dp_calc_pbn_mode
+ drm_dp_channel_eq_ok
+ drm_dp_check_act_status
+ drm_dp_clock_recovery_ok
+ drm_dp_dpcd_read
+ drm_dp_dpcd_read_link_status
+ drm_dp_dpcd_write
+ drm_dp_find_vcpi_slots
+ drm_dp_get_adjust_request_pre_emphasis
+ drm_dp_get_adjust_request_voltage
+ drm_dp_link_configure
+ drm_dp_link_power_down
+ drm_dp_link_power_up
+ drm_dp_link_probe
+ drm_dp_link_rate_to_bw_code
+ drm_dp_link_train_channel_eq_delay
+ drm_dp_link_train_clock_recovery_delay
+ drm_dp_mst_allocate_vcpi
+ drm_dp_mst_deallocate_vcpi
+ drm_dp_mst_detect_port
+ drm_dp_mst_get_edid
+ drm_dp_mst_hpd_irq
+ drm_dp_mst_reset_vcpi_slots
+ drm_dp_mst_topology_mgr_destroy
+ drm_dp_mst_topology_mgr_init
+ drm_dp_mst_topology_mgr_set_mst
+ drm_dp_send_power_updown_phy
+ drm_dp_update_payload_part1
+ drm_dp_update_payload_part2
+ drm_edid_duplicate
+ drm_encoder_cleanup
+ drm_encoder_init
+ drm_err
+ drm_event_reserve_init_locked
+ drm_format_info
+ drm_framebuffer_init
+ drm_framebuffer_lookup
+ drm_framebuffer_remove
+ drm_framebuffer_unregister_private
+ drm_gem_create_mmap_offset
+ drm_gem_fb_create_handle
+ drm_gem_fb_destroy
+ drm_gem_fb_get_obj
+ drm_gem_free_mmap_offset
+ drm_gem_get_pages
+ drm_gem_handle_create
+ drm_gem_mmap
+ drm_gem_mmap_obj
+ drm_gem_object_init
+ drm_gem_object_lookup
+ drm_gem_object_put
+ drm_gem_object_put_unlocked
+ drm_gem_object_release
+ drm_gem_prime_export
+ drm_gem_prime_fd_to_handle
+ drm_gem_prime_handle_to_fd
+ drm_gem_private_object_init
+ drm_gem_put_pages
+ drm_gem_vm_close
+ drm_gem_vm_open
+ drm_get_connector_status_name
+ drm_get_edid
+ drm_get_format_info
+ drm_helper_hpd_irq_event
+ drm_helper_mode_fill_fb_struct
+ drm_helper_probe_single_connector_modes
+ drm_ioctl
+ drm_irq_install
+ drm_irq_uninstall
+ drm_kms_helper_poll_disable
+ drm_kms_helper_poll_enable
+ drm_kms_helper_poll_fini
+ drm_kms_helper_poll_init
+ drm_match_cea_mode
+ drm_mm_init
+ drm_mm_insert_node_in_range
+ drm_mm_remove_node
+ drm_mm_takedown
+ drm_mode_config_cleanup
+ drm_mode_config_init
+ drm_mode_config_reset
+ drm_mode_convert_umode
+ drm_mode_copy
+ drm_mode_create
+ drm_mode_create_dp_colorspace_property
+ drm_mode_debug_printmodeline
+ drm_mode_duplicate
+ drm_mode_equal
+ drm_mode_object_find
+ drm_mode_object_get
+ drm_mode_object_put
+ drm_mode_probed_add
+ drm_modeset_acquire_fini
+ drm_modeset_acquire_init
+ drm_modeset_backoff
+ drm_mode_set_crtcinfo
+ drm_modeset_drop_locks
+ drm_modeset_lock
+ drm_modeset_lock_all
+ drm_modeset_lock_all_ctx
+ drm_mode_set_name
+ drm_modeset_unlock_all
+ drm_mode_vrefresh
+ drm_object_attach_property
+ drm_object_property_set_value
+ drm_of_component_match_add
+ drm_open
+ drm_panel_add
+ drm_panel_init
+ drm_panel_notifier_call_chain
+ drm_panel_notifier_register
+ drm_panel_notifier_unregister
+ drm_panel_remove
+ drm_plane_cleanup
+ drm_plane_create_rotation_property
+ drm_poll
+ drm_prime_gem_destroy
+ drm_prime_pages_to_sg
+ drm_property_blob_get
+ drm_property_blob_put
+ drm_property_create
+ drm_property_create_bitmask
+ drm_property_create_blob
+ drm_property_create_enum
+ drm_property_create_range
+ drm_property_lookup_blob
+ drm_read
+ drm_release
+ drm_rotation_simplify
+ drm_send_event_locked
+ drm_set_preferred_mode
+ drm_universal_plane_init
+ drm_vblank_init
+ drm_wait_one_vblank
+ dump_stack
+ enable_irq
+ enable_percpu_irq
+ end_buffer_read_sync
+ end_buffer_write_sync
+ ether_setup
+ eth_mac_addr
+ eth_platform_get_mac_address
+ ethtool_op_get_link
+ ethtool_op_get_ts_info
+ eth_type_trans
+ eth_validate_addr
+ event_triggers_call
+ extcon_find_edev_by_node
+ extcon_get_edev_by_phandle
+ extcon_get_edev_name
+ extcon_get_extcon_dev
+ extcon_get_property
+ extcon_get_state
+ extcon_register_notifier
+ extcon_set_state_sync
+ extcon_unregister_notifier
+ fasync_helper
+ fd_install
+ fget
+ file_path
+ find_last_bit
+ find_next_bit
+ find_next_zero_bit
+ find_snd_usb_substream
+ find_vma
+ finish_wait
+ firmware_request_nowarn
+ fixed_phy_register
+ fixed_phy_unregister
+ flush_delayed_work
+ flush_work
+ flush_workqueue
+ fput
+ frame_vector_create
+ frame_vector_destroy
+ frame_vector_to_pages
+ frame_vector_to_pfns
+ free_io_pgtable_ops
+ free_irq
+ free_netdev
+ __free_pages
+ free_pages
+ free_pages_exact
+ free_percpu
+ free_percpu_irq
+ freezing_slow_path
+ fwnode_connection_find_match
+ fwnode_get_parent
+ fwnode_handle_put
+ fwnode_property_present
+ fwnode_property_read_string
+ fwnode_property_read_u32_array
+ fwnode_usb_role_switch_get
+ gcd
+ generic_device_group
+ generic_handle_irq
+ generic_mii_ioctl
+ genlmsg_put
+ genl_register_family
+ genl_unregister_family
+ __genphy_config_aneg
+ genphy_read_status
+ genphy_resume
+ genphy_suspend
+ gen_pool_add_owner
+ gen_pool_alloc_algo_owner
+ gen_pool_avail
+ gen_pool_create
+ gen_pool_destroy
+ gen_pool_free_owner
+ gen_pool_size
+ __getblk_gfp
+ getboottime64
+ get_cpu_device
+ get_device
+ gether_cleanup
+ gether_connect
+ gether_disconnect
+ gether_get_dev_addr
+ gether_get_host_addr
+ gether_get_host_addr_cdc
+ gether_get_ifname
+ gether_get_qmult
+ gether_register_netdev
+ gether_set_dev_addr
+ gether_set_gadget
+ gether_set_host_addr
+ gether_set_qmult
+ gether_setup_name_default
+ get_random_bytes
+ get_random_u32
+ __get_task_comm
+ get_unmapped_area
+ get_unused_fd_flags
+ get_user_pages
+ get_vaddr_frames
+ get_zeroed_page
+ gpiochip_add_data_with_key
+ gpiochip_add_pin_range
+ gpiochip_generic_free
+ gpiochip_generic_request
+ gpiochip_get_data
+ gpiochip_remove
+ gpiod_direction_input
+ gpiod_direction_output
+ gpiod_direction_output_raw
+ gpiod_get_optional
+ gpiod_get_raw_value
+ gpiod_get_raw_value_cansleep
+ gpiod_get_value
+ gpiod_get_value_cansleep
+ gpiod_is_active_low
+ gpiod_set_debounce
+ gpiod_set_raw_value
+ gpiod_set_raw_value_cansleep
+ gpiod_set_value
+ gpiod_set_value_cansleep
+ gpiod_to_irq
+ gpio_free
+ gpio_free_array
+ gpio_request
+ gpio_request_one
+ gpio_to_desc
+ gro_cells_destroy
+ gro_cells_init
+ gro_cells_receive
+ handle_edge_irq
+ handle_level_irq
+ handle_nested_irq
+ handle_simple_irq
+ hex2bin
+ hex_dump_to_buffer
+ hex_to_bin
+ hrtimer_active
+ hrtimer_cancel
+ hrtimer_forward
+ hrtimer_init
+ hrtimer_start_range_ns
+ hrtimer_try_to_cancel
+ hvc_alloc
+ hvc_kick
+ hvc_remove
+ hwrng_register
+ hwrng_unregister
+ hwspin_lock_free
+ hwspin_lock_register
+ hwspin_lock_request_specific
+ __hwspin_lock_timeout
+ hwspin_lock_unregister
+ __hwspin_unlock
+ hypervisor_kobj
+ i2c_add_adapter
+ i2c_del_adapter
+ i2c_del_driver
+ i2c_get_dma_safe_msg_buf
+ i2c_put_dma_safe_msg_buf
+ i2c_register_driver
+ i2c_transfer
+ i2c_transfer_buffer_flags
+ i2c_unregister_device
+ icc_get
+ icc_link_create
+ icc_node_add
+ icc_node_create
+ icc_node_del
+ icc_node_destroy
+ icc_provider_add
+ icc_provider_del
+ icc_put
+ icc_set_bw
+ icc_set_tag
+ ida_alloc_range
+ ida_free
+ idr_alloc
+ idr_alloc_cyclic
+ idr_destroy
+ idr_find
+ idr_for_each
+ idr_get_next
+ idr_preload
+ idr_remove
+ idr_replace
+ ieee80211_hdrlen
+ iio_channel_get
+ iio_channel_release
+ iio_read_channel_processed
+ import_iovec
+ in_egroup_p
+ init_dummy_netdev
+ init_net
+ __init_rwsem
+ init_timer_key
+ init_uts_ns
+ init_wait_entry
+ __init_waitqueue_head
+ input_alloc_absinfo
+ input_allocate_device
+ input_close_device
+ input_event
+ input_ff_create
+ input_ff_destroy
+ input_free_device
+ input_mt_destroy_slots
+ input_mt_init_slots
+ input_mt_report_pointer_emulation
+ input_mt_report_slot_state
+ input_open_device
+ input_register_device
+ input_register_handle
+ input_register_handler
+ input_set_abs_params
+ input_set_capability
+ input_unregister_device
+ input_unregister_handle
+ input_unregister_handler
+ int_sqrt
+ invalidate_mapping_pages
+ iomem_resource
+ iommu_alloc_resv_region
+ iommu_attach_device
+ iommu_detach_device
+ iommu_device_register
+ iommu_device_unregister
+ iommu_dma_enable_best_fit_algo
+ iommu_dma_get_resv_regions
+ iommu_dma_reserve_iova
+ iommu_domain_alloc
+ iommu_domain_free
+ iommu_domain_get_attr
+ iommu_domain_set_attr
+ iommu_fwspec_add_ids
+ iommu_fwspec_free
+ iommu_get_dma_cookie
+ iommu_get_domain_for_dev
+ iommu_group_get
+ iommu_group_get_for_dev
+ iommu_group_get_iommudata
+ iommu_group_put
+ iommu_group_ref_get
+ iommu_group_remove_device
+ iommu_group_set_iommudata
+ iommu_map
+ iommu_map_sg
+ iommu_present
+ iommu_put_dma_cookie
+ iommu_set_fault_handler
+ iommu_unmap
+ ion_alloc
+ ion_buffer_zero
+ __ion_device_add_heap
+ ion_free
+ ion_heap_map_kernel
+ ion_heap_map_user
+ ion_heap_unmap_kernel
+ __ioremap
+ iounmap
+ __iowrite32_copy
+ ip_compute_csum
+ __ipv6_addr_type
+ ipv6_ext_hdr
+ ipv6_skip_exthdr
+ irq_chip_ack_parent
+ irq_chip_mask_parent
+ irq_chip_set_type_parent
+ irq_chip_set_wake_parent
+ irq_chip_unmask_parent
+ irq_create_fwspec_mapping
+ irq_create_mapping
+ irq_dispose_mapping
+ __irq_domain_add
+ irq_domain_add_simple
+ irq_domain_free_irqs_common
+ irq_domain_free_irqs_parent
+ irq_domain_get_irq_data
+ irq_domain_remove
+ irq_domain_set_info
+ irq_domain_xlate_onecell
+ irq_domain_xlate_twocell
+ irq_find_mapping
+ irq_find_matching_fwspec
+ irq_get_irq_data
+ irq_modify_status
+ irq_of_parse_and_map
+ irq_set_affinity_hint
+ irq_set_affinity_notifier
+ irq_set_chained_handler_and_data
+ irq_set_chip_and_handler_name
+ irq_set_chip_data
+ irq_set_irqchip_state
+ irq_set_irq_type
+ irq_set_irq_wake
+ irq_set_parent
+ irq_to_desc
+ iterate_fd
+ jiffies64_to_nsecs
+ jiffies
+ jiffies_to_msecs
+ jiffies_to_usecs
+ kasprintf
+ kernel_bind
+ kernel_connect
+ kernel_getsockname
+ kernel_kobj
+ kernel_read
+ kernel_recvmsg
+ kernel_sendmsg
+ kernel_sigaction
+ kernel_write
+ kernfs_find_and_get_ns
+ kernfs_notify
+ kernfs_put
+ keyslot_manager_create
+ keyslot_manager_destroy
+ keyslot_manager_private
+ keyslot_manager_reprogram_all_keys
+ __kfifo_in
+ __kfifo_in_r
+ __kfifo_len_r
+ __kfifo_out
+ __kfifo_out_r
+ kfree
+ kfree_skb
+ kill_fasync
+ kimage_vaddr
+ kimage_voffset
+ __kmalloc
+ kmalloc_caches
+ kmalloc_order_trace
+ kmem_cache_alloc
+ kmem_cache_alloc_trace
+ kmem_cache_create
+ kmem_cache_destroy
+ kmem_cache_free
+ kmemdup
+ kmemdup_nul
+ kmsg_dump_get_line
+ kobject_create_and_add
+ kobject_del
+ kobject_init_and_add
+ kobject_put
+ kobject_uevent
+ kobject_uevent_env
+ krealloc
+ kset_create_and_add
+ kset_unregister
+ ksize
+ kstrdup
+ kstrndup
+ kstrtobool
+ kstrtoint
+ kstrtoll
+ kstrtos8
+ kstrtou16
+ kstrtou8
+ kstrtouint
+ kstrtoull
+ kthread_cancel_delayed_work_sync
+ kthread_cancel_work_sync
+ kthread_create_on_node
+ kthread_delayed_work_timer_fn
+ kthread_flush_work
+ kthread_flush_worker
+ __kthread_init_worker
+ kthread_mod_delayed_work
+ kthread_park
+ kthread_parkme
+ kthread_queue_delayed_work
+ kthread_queue_work
+ kthread_should_park
+ kthread_should_stop
+ kthread_stop
+ kthread_unpark
+ kthread_worker_fn
+ ktime_get
+ ktime_get_coarse_ts64
+ ktime_get_mono_fast_ns
+ ktime_get_real_seconds
+ ktime_get_real_ts64
+ ktime_get_ts64
+ ktime_get_with_offset
+ kvfree
+ kvmalloc_node
+ kzfree
+ led_blink_set
+ led_classdev_register_ext
+ led_classdev_unregister
+ led_get_default_pattern
+ led_set_brightness
+ led_trigger_event
+ led_trigger_register
+ led_trigger_register_simple
+ led_trigger_unregister
+ led_trigger_unregister_simple
+ __list_add_valid
+ __list_del_entry_valid
+ list_sort
+ llist_add_batch
+ llist_reverse_order
+ __local_bh_enable_ip
+ __lock_buffer
+ lock_sock_nested
+ mac_pton
+ mbox_chan_received_data
+ mbox_chan_txdone
+ mbox_client_txdone
+ mbox_controller_register
+ mbox_controller_unregister
+ mbox_free_channel
+ mbox_request_channel
+ mbox_send_message
+ mdiobus_alloc_size
+ mdiobus_free
+ __mdiobus_read
+ mdiobus_read
+ __mdiobus_register
+ mdiobus_unregister
+ __mdiobus_write
+ mdiobus_write
+ media_create_pad_link
+ media_device_cleanup
+ media_device_init
+ __media_device_register
+ media_device_unregister
+ media_entity_pads_init
+ memchr
+ memcmp
+ memcpy
+ __memcpy_fromio
+ __memcpy_toio
+ memdup_user
+ memmove
+ memory_read_from_buffer
+ memparse
+ memset
+ __memset_io
+ memweight
+ mii_check_media
+ mii_ethtool_get_link_ksettings
+ mii_ethtool_gset
+ mii_ethtool_set_link_ksettings
+ mii_link_ok
+ mii_nway_restart
+ mipi_dsi_create_packet
+ mipi_dsi_dcs_set_display_brightness
+ mipi_dsi_dcs_set_tear_off
+ mipi_dsi_dcs_write
+ mipi_dsi_host_register
+ mipi_dsi_host_unregister
+ misc_deregister
+ misc_register
+ mmc_of_parse
+ mmc_send_tuning
+ mod_delayed_work_on
+ mod_node_page_state
+ mod_timer
+ __module_get
+ module_layout
+ module_put
+ __msecs_to_jiffies
+ msleep
+ msleep_interruptible
+ __mutex_init
+ mutex_is_locked
+ mutex_lock
+ mutex_lock_interruptible
+ mutex_trylock
+ mutex_unlock
+ napi_complete_done
+ napi_disable
+ napi_gro_flush
+ napi_gro_receive
+ __napi_schedule
+ napi_schedule_prep
+ __netdev_alloc_skb
+ netdev_err
+ netdev_info
+ netdev_rx_handler_register
+ netdev_rx_handler_unregister
+ netdev_warn
+ netif_carrier_off
+ netif_carrier_on
+ netif_device_attach
+ netif_device_detach
+ netif_napi_add
+ netif_napi_del
+ netif_receive_skb
+ netif_rx
+ netif_rx_ni
+ netif_schedule_queue
+ netif_tx_stop_all_queues
+ netif_tx_wake_queue
+ netlink_broadcast
+ __netlink_kernel_create
+ netlink_kernel_release
+ netlink_unicast
+ nla_memcpy
+ __nla_parse
+ nla_put_64bit
+ nla_put
+ __nlmsg_put
+ no_llseek
+ nonseekable_open
+ nr_cpu_ids
+ ns_capable
+ ns_to_timespec64
+ ns_to_timespec
+ __num_online_cpus
+ nvmem_cell_get
+ nvmem_cell_put
+ nvmem_cell_read
+ nvmem_cell_read_u32
+ nvmem_cell_write
+ nvmem_device_read
+ nvmem_device_write
+ of_address_to_resource
+ of_alias_get_id
+ of_clk_add_provider
+ of_clk_del_provider
+ of_clk_get
+ of_clk_get_from_provider
+ of_clk_get_parent_count
+ of_clk_src_onecell_get
+ of_clk_src_simple_get
+ of_count_phandle_with_args
+ of_devfreq_cooling_register
+ of_device_get_match_data
+ of_device_is_available
+ of_device_is_compatible
+ of_dma_configure
+ of_dma_controller_free
+ of_dma_controller_register
+ of_dma_is_coherent
+ of_drm_find_bridge
+ of_drm_find_panel
+ of_find_compatible_node
+ of_find_device_by_node
+ of_find_i2c_device_by_node
+ of_find_matching_node_and_match
+ of_find_node_by_name
+ of_find_node_opts_by_path
+ of_find_node_with_property
+ of_find_property
+ of_fwnode_ops
+ of_genpd_add_provider_onecell
+ of_genpd_add_provider_simple
+ of_genpd_del_provider
+ of_get_address
+ of_get_child_by_name
+ of_get_cpu_node
+ of_get_named_gpio_flags
+ of_get_next_available_child
+ of_get_next_child
+ of_get_parent
+ of_get_property
+ of_get_regulator_init_data
+ of_graph_get_next_endpoint
+ of_graph_get_remote_node
+ of_graph_get_remote_port_parent
+ of_graph_parse_endpoint
+ of_hwspin_lock_get_id
+ of_icc_get
+ of_icc_xlate_onecell
+ of_iomap
+ of_irq_find_parent
+ of_irq_get
+ of_irq_get_byname
+ of_irq_parse_and_map_pci
+ of_irq_parse_one
+ of_match_device
+ of_match_node
+ of_mdiobus_register
+ of_modalias_node
+ of_n_addr_cells
+ of_node_name_eq
+ of_n_size_cells
+ of_parse_phandle
+ of_parse_phandle_with_args
+ of_phandle_iterator_init
+ of_phandle_iterator_next
+ of_phy_simple_xlate
+ of_platform_depopulate
+ of_platform_device_create
+ of_platform_populate
+ of_property_count_elems_of_size
+ of_property_match_string
+ of_property_read_string
+ of_property_read_string_helper
+ of_property_read_u32_index
+ of_property_read_u64
+ of_property_read_u64_index
+ of_property_read_variable_u16_array
+ of_property_read_variable_u32_array
+ of_property_read_variable_u8_array
+ of_prop_next_string
+ of_prop_next_u32
+ of_reserved_mem_device_init_by_idx
+ of_reserved_mem_device_release
+ of_reserved_mem_lookup
+ of_reset_control_array_get
+ of_thermal_get_ntrips
+ of_thermal_get_trip_points
+ of_thermal_is_trip_valid
+ of_translate_address
+ of_usb_get_phy_mode
+ of_usb_host_tpl_support
+ oops_in_progress
+ panic
+ panic_notifier_list
+ panic_timeout
+ param_array_ops
+ param_get_int
+ param_get_string
+ param_ops_bool
+ param_ops_byte
+ param_ops_charp
+ param_ops_int
+ param_ops_long
+ param_ops_string
+ param_ops_uint
+ param_ops_ullong
+ param_ops_ulong
+ param_set_bool
+ param_set_copystring
+ param_set_int
+ pci_alloc_irq_vectors_affinity
+ pci_assign_resource
+ pci_assign_unassigned_bus_resources
+ pci_bus_add_devices
+ pci_bus_type
+ pci_clear_master
+ pci_common_swizzle
+ pci_d3cold_disable
+ pci_device_group
+ pci_disable_device
+ pci_disable_msi
+ pcie_capability_read_word
+ pci_enable_device
+ pci_find_ext_capability
+ pci_find_pcie_root_port
+ pci_free_irq_vectors
+ pci_get_device
+ pci_iomap
+ pci_irq_vector
+ pci_load_and_free_saved_state
+ pci_load_saved_state
+ pcim_enable_device
+ pci_msi_create_irq_domain
+ pci_msi_mask_irq
+ pci_msi_unmask_irq
+ pci_read_config_byte
+ pci_read_config_dword
+ pci_read_config_word
+ __pci_register_driver
+ pci_release_region
+ pci_request_region
+ pci_restore_state
+ pci_save_state
+ pci_scan_root_bus_bridge
+ pci_set_master
+ pci_set_mwi
+ pci_set_power_state
+ pci_store_saved_state
+ pci_unregister_driver
+ pci_walk_bus
+ pci_write_config_dword
+ pci_write_config_word
+ PDE_DATA
+ __per_cpu_offset
+ perf_trace_buf_alloc
+ perf_trace_run_bpf_submit
+ pfn_valid
+ phy_calibrate
+ phy_connect
+ phy_connect_direct
+ phy_disconnect
+ phy_drivers_register
+ phy_drivers_unregister
+ phy_ethtool_get_eee
+ phy_ethtool_get_link_ksettings
+ phy_ethtool_ksettings_get
+ phy_ethtool_ksettings_set
+ phy_ethtool_nway_reset
+ phy_ethtool_set_eee
+ phy_ethtool_set_link_ksettings
+ phy_ethtool_set_wol
+ phy_exit
+ phy_find_first
+ phy_init
+ phy_mii_ioctl
+ phy_pm_runtime_get_sync
+ phy_pm_runtime_put_sync
+ phy_power_off
+ phy_power_on
+ phy_print_status
+ phy_read_mmd
+ phy_register_fixup_for_uid
+ phy_remove_link_mode
+ phy_restore_page
+ phy_save_page
+ phy_set_mode_ext
+ phy_start
+ phy_stop
+ physvirt_offset
+ phy_unregister_fixup_for_uid
+ phy_write_mmd
+ pinconf_generic_dt_node_to_map
+ pinctrl_dev_get_drvdata
+ pinctrl_get
+ pinctrl_lookup_state
+ pinctrl_pm_select_default_state
+ pinctrl_pm_select_sleep_state
+ pinctrl_put
+ pinctrl_select_state
+ pinctrl_utils_free_map
+ platform_bus_type
+ platform_device_add
+ platform_device_add_data
+ platform_device_add_properties
+ platform_device_add_resources
+ platform_device_alloc
+ platform_device_put
+ platform_device_register
+ platform_device_register_full
+ platform_device_unregister
+ __platform_driver_register
+ platform_driver_unregister
+ platform_get_irq
+ platform_get_irq_byname
+ platform_get_irq_byname_optional
+ platform_get_resource
+ platform_get_resource_byname
+ platform_irq_count
+ pm_generic_resume
+ pm_generic_suspend
+ pm_genpd_add_subdomain
+ pm_genpd_init
+ pm_genpd_remove
+ pm_genpd_remove_subdomain
+ pm_power_off
+ pm_qos_add_notifier
+ pm_qos_add_request
+ pm_qos_remove_notifier
+ pm_qos_remove_request
+ pm_qos_request_active
+ pm_qos_update_request
+ __pm_relax
+ pm_relax
+ pm_runtime_allow
+ pm_runtime_barrier
+ __pm_runtime_disable
+ pm_runtime_enable
+ pm_runtime_forbid
+ pm_runtime_force_resume
+ pm_runtime_force_suspend
+ __pm_runtime_idle
+ pm_runtime_no_callbacks
+ __pm_runtime_resume
+ pm_runtime_set_autosuspend_delay
+ __pm_runtime_set_status
+ __pm_runtime_suspend
+ __pm_runtime_use_autosuspend
+ __pm_stay_awake
+ pm_stay_awake
+ pm_system_wakeup
+ pm_wakeup_dev_event
+ pm_wakeup_ws_event
+ power_supply_changed
+ power_supply_get_by_name
+ power_supply_get_drvdata
+ power_supply_get_property
+ power_supply_put
+ power_supply_reg_notifier
+ power_supply_set_property
+ power_supply_unreg_notifier
+ prandom_u32
+ preempt_schedule
+ preempt_schedule_notrace
+ prepare_to_wait_event
+ print_hex_dump
+ printk
+ proc_create
+ proc_create_data
+ proc_create_single_data
+ proc_dointvec
+ proc_mkdir
+ proc_mkdir_data
+ proc_remove
+ proc_set_user
+ proto_register
+ proto_unregister
+ pskb_expand_head
+ __pskb_pull_tail
+ ___pskb_trim
+ put_device
+ put_disk
+ __put_page
+ __put_task_struct
+ put_unused_fd
+ put_vaddr_frames
+ pwm_apply_state
+ pwmchip_add
+ pwmchip_remove
+ qcom_smem_state_get
+ qcom_smem_state_register
+ qcom_smem_state_unregister
+ qcom_smem_state_update_bits
+ qdisc_reset
+ queue_delayed_work_on
+ queue_work_on
+ radix_tree_delete
+ radix_tree_gang_lookup
+ radix_tree_insert
+ radix_tree_iter_delete
+ radix_tree_lookup
+ radix_tree_maybe_preload
+ radix_tree_next_chunk
+ ___ratelimit
+ rational_best_approximation
+ raw_notifier_call_chain
+ raw_notifier_chain_register
+ raw_notifier_chain_unregister
+ _raw_read_lock
+ _raw_read_lock_bh
+ _raw_read_lock_irq
+ _raw_read_lock_irqsave
+ _raw_read_unlock
+ _raw_read_unlock_bh
+ _raw_read_unlock_irq
+ _raw_read_unlock_irqrestore
+ _raw_spin_lock
+ _raw_spin_lock_bh
+ _raw_spin_lock_irq
+ _raw_spin_lock_irqsave
+ _raw_spin_trylock
+ _raw_spin_trylock_bh
+ _raw_spin_unlock
+ _raw_spin_unlock_bh
+ _raw_spin_unlock_irq
+ _raw_spin_unlock_irqrestore
+ _raw_write_lock
+ _raw_write_lock_bh
+ _raw_write_lock_irq
+ _raw_write_lock_irqsave
+ _raw_write_unlock
+ _raw_write_unlock_bh
+ _raw_write_unlock_irq
+ _raw_write_unlock_irqrestore
+ rb_erase
+ rb_first
+ rb_insert_color
+ rb_last
+ rb_next
+ rb_prev
+ __rcu_read_lock
+ __rcu_read_unlock
+ rdev_get_drvdata
+ refcount_dec_and_lock
+ refcount_dec_and_test_checked
+ refcount_dec_checked
+ refcount_dec_not_one
+ refcount_inc_checked
+ refcount_inc_not_zero_checked
+ __refrigerator
+ regcache_cache_only
+ regcache_mark_dirty
+ regcache_sync
+ regcache_sync_region
+ __register_chrdev
+ register_chrdev_region
+ register_inet6addr_notifier
+ register_inetaddr_notifier
+ register_netdev
+ register_netdevice
+ register_netdevice_notifier
+ register_netevent_notifier
+ register_oom_notifier
+ register_pm_notifier
+ register_reboot_notifier
+ register_restart_handler
+ __register_rpmsg_driver
+ register_shrinker
+ register_syscore_ops
+ register_sysctl_table
+ regmap_bulk_read
+ regmap_bulk_write
+ regmap_field_read
+ regmap_field_update_bits_base
+ __regmap_init
+ regmap_irq_get_virq
+ regmap_multi_reg_write
+ regmap_read
+ regmap_register_patch
+ regmap_update_bits_base
+ regmap_write
+ regulator_bulk_disable
+ regulator_count_voltages
+ regulator_disable
+ regulator_disable_deferred
+ regulator_enable
+ regulator_get
+ regulator_get_drvdata
+ regulator_get_mode
+ regulator_get_voltage
+ regulator_is_enabled
+ regulator_is_supported_voltage
+ regulator_list_voltage_linear
+ regulator_lock
+ regulator_notifier_call_chain
+ regulator_put
+ regulator_register_notifier
+ regulator_set_current_limit
+ regulator_set_load
+ regulator_set_mode
+ regulator_set_voltage
+ regulator_unlock
+ regulator_unregister_notifier
+ regulatory_set_wiphy_regd
+ release_firmware
+ __release_region
+ release_sock
+ remap_pfn_range
+ remap_vmalloc_range
+ remove_proc_entry
+ remove_wait_queue
+ report_iommu_fault
+ request_firmware
+ request_firmware_direct
+ request_firmware_into_buf
+ request_firmware_nowait
+ __request_percpu_irq
+ __request_region
+ request_threaded_irq
+ reset_control_assert
+ reset_control_deassert
+ reset_control_put
+ reset_control_reset
+ rfkill_alloc
+ rfkill_destroy
+ rfkill_init_sw_state
+ rfkill_register
+ rfkill_unregister
+ rndis_deregister
+ rndis_free_response
+ rndis_get_next_response
+ rndis_msg_parser
+ rndis_register
+ rndis_set_host_mac
+ rndis_set_param_dev
+ rndis_set_param_medium
+ rndis_set_param_vendor
+ rndis_signal_connect
+ rndis_uninit
+ rpmsg_create_ept
+ rpmsg_destroy_ept
+ rpmsg_poll
+ rpmsg_register_device
+ rpmsg_send
+ rpmsg_trysend
+ rpmsg_unregister_device
+ rtc_time64_to_tm
+ rtc_tm_to_time64
+ rtc_update_irq
+ rtc_valid_tm
+ rt_mutex_lock
+ rt_mutex_unlock
+ rtnl_is_locked
+ rtnl_link_register
+ rtnl_link_unregister
+ rtnl_lock
+ rtnl_trylock
+ rtnl_unlock
+ save_stack_trace
+ save_stack_trace_tsk
+ sched_clock
+ sched_setattr
+ sched_setscheduler
+ schedule
+ schedule_timeout
+ schedule_timeout_interruptible
+ schedule_timeout_uninterruptible
+ scnprintf
+ __scsi_add_device
+ scsi_add_host_with_dma
+ scsi_autopm_get_device
+ scsi_autopm_put_device
+ scsi_block_requests
+ scsi_block_when_processing_errors
+ scsi_change_queue_depth
+ scsi_command_size_tbl
+ scsi_device_get
+ scsi_device_put
+ scsi_dma_map
+ scsi_dma_unmap
+ scsi_eh_prep_cmnd
+ scsi_eh_restore_cmnd
+ __scsi_execute
+ scsi_get_host_dev
+ scsi_host_alloc
+ scsi_host_put
+ scsi_ioctl
+ scsi_ioctl_block_when_processing_errors
+ scsi_is_host_device
+ scsi_normalize_sense
+ scsi_print_command
+ __scsi_print_sense
+ scsi_print_sense_hdr
+ scsi_register_interface
+ scsi_remove_device
+ scsi_remove_host
+ scsi_report_bus_reset
+ scsi_report_device_reset
+ scsi_scan_host
+ scsi_sense_desc_find
+ scsi_unblock_requests
+ sdev_prefix_printk
+ sdhci_add_host
+ sdhci_enable_clk
+ sdhci_get_property
+ sdhci_pltfm_free
+ sdhci_pltfm_init
+ sdhci_remove_host
+ sdhci_reset
+ sdhci_set_bus_width
+ send_sig_info
+ seq_lseek
+ seq_open
+ seq_printf
+ seq_putc
+ seq_puts
+ seq_read
+ seq_release
+ seq_vprintf
+ seq_write
+ set_blocksize
+ set_cpus_allowed_ptr
+ set_freezable
+ set_normalized_timespec64
+ set_page_dirty_lock
+ set_user_nice
+ sg_alloc_table
+ sg_alloc_table_from_pages
+ sg_copy_from_buffer
+ sg_copy_to_buffer
+ sg_free_table
+ sg_init_one
+ sg_init_table
+ sg_miter_next
+ sg_miter_skip
+ sg_miter_start
+ sg_miter_stop
+ sg_nents
+ sg_next
+ __sg_page_iter_next
+ __sg_page_iter_start
+ sg_pcopy_from_buffer
+ sg_pcopy_to_buffer
+ sg_scsi_ioctl
+ shmem_truncate_range
+ sigprocmask
+ simple_read_from_buffer
+ simple_strtoul
+ single_open
+ single_open_size
+ single_release
+ sk_alloc
+ skb_add_rx_frag
+ skb_append_pagefrags
+ skb_checksum
+ skb_clone
+ skb_copy
+ skb_copy_bits
+ skb_copy_datagram_iter
+ skb_copy_expand
+ skb_dequeue
+ skb_dequeue_tail
+ skb_free_datagram
+ __skb_get_hash
+ __skb_gso_segment
+ __skb_pad
+ skb_pull
+ skb_push
+ skb_put
+ skb_queue_head
+ skb_queue_purge
+ skb_queue_tail
+ skb_recv_datagram
+ skb_set_owner_w
+ skb_store_bits
+ skb_trim
+ skb_tstamp_tx
+ sk_free
+ skip_spaces
+ smp_call_function_single
+ snd_ctl_add
+ snd_ctl_boolean_mono_info
+ snd_ctl_enum_info
+ snd_ctl_new1
+ snd_ctl_notify
+ snd_ctl_remove
+ snd_info_create_card_entry
+ snd_info_create_module_entry
+ snd_info_free_entry
+ snd_info_register
+ snd_jack_set_key
+ snd_pcm_add_chmap_ctls
+ snd_pcm_format_physical_width
+ snd_pcm_format_width
+ snd_pcm_hw_constraint_integer
+ snd_pcm_hw_constraint_list
+ snd_pcm_hw_constraint_minmax
+ snd_pcm_hw_constraint_step
+ snd_pcm_lib_ioctl
+ snd_pcm_period_elapsed
+ snd_pcm_std_chmaps
+ snd_pcm_stop
+ snd_soc_add_component_controls
+ snd_soc_bytes_tlv_callback
+ snd_soc_card_get_kcontrol
+ snd_soc_card_jack_new
+ snd_soc_component_exit_regmap
+ snd_soc_component_init_regmap
+ snd_soc_component_read32
+ snd_soc_component_update_bits
+ snd_soc_component_write
+ snd_soc_dai_get_channel_map
+ snd_soc_dai_set_channel_map
+ snd_soc_dai_set_sysclk
+ snd_soc_dai_set_tdm_slot
+ snd_soc_dapm_add_routes
+ snd_soc_dapm_disable_pin
+ snd_soc_dapm_force_enable_pin
+ snd_soc_dapm_get_enum_double
+ snd_soc_dapm_get_volsw
+ snd_soc_dapm_ignore_suspend
+ snd_soc_dapm_kcontrol_widget
+ snd_soc_dapm_mixer_update_power
+ snd_soc_dapm_mux_update_power
+ snd_soc_dapm_new_controls
+ snd_soc_dapm_new_widgets
+ snd_soc_dapm_put_enum_double
+ snd_soc_dapm_put_volsw
+ snd_soc_dapm_sync
+ snd_soc_get_enum_double
+ snd_soc_get_volsw
+ snd_soc_info_enum_double
+ snd_soc_info_multi_ext
+ snd_soc_info_volsw
+ snd_soc_jack_report
+ snd_soc_lookup_component
+ snd_soc_new_compress
+ snd_soc_of_parse_audio_routing
+ snd_soc_of_parse_card_name
+ snd_soc_pm_ops
+ snd_soc_put_enum_double
+ snd_soc_put_volsw
+ snd_soc_register_component
+ snd_soc_rtdcom_lookup
+ snd_soc_runtime_set_dai_fmt
+ snd_soc_unregister_card
+ snd_soc_unregister_component
+ snd_timer_interrupt
+ snd_usb_enable_audio_stream
+ snprintf
+ soc_device_register
+ soc_device_unregister
+ sock_alloc_send_skb
+ sock_create_kern
+ sock_gettstamp
+ sock_init_data
+ sock_no_accept
+ sock_no_getsockopt
+ sock_no_listen
+ sock_no_mmap
+ sock_no_sendpage
+ sock_no_setsockopt
+ sock_no_shutdown
+ sock_no_socketpair
+ sock_queue_rcv_skb
+ sock_register
+ sock_release
+ sock_unregister
+ softnet_data
+ sort
+ __spi_alloc_controller
+ spi_register_controller
+ __spi_register_driver
+ spi_setup
+ spi_sync
+ spi_unregister_controller
+ split_page
+ spmi_controller_add
+ spmi_controller_alloc
+ spmi_controller_remove
+ __spmi_driver_register
+ spmi_ext_register_read
+ spmi_ext_register_readl
+ spmi_ext_register_write
+ spmi_ext_register_writel
+ spmi_register_read
+ spmi_register_write
+ spmi_register_zero_write
+ sprintf
+ sprint_symbol
+ srcu_init_notifier_head
+ srcu_notifier_call_chain
+ srcu_notifier_chain_register
+ srcu_notifier_chain_unregister
+ sscanf
+ __stack_chk_fail
+ __stack_chk_guard
+ stack_trace_print
+ strcasecmp
+ strchr
+ strchrnul
+ strcmp
+ strcpy
+ strim
+ strlcat
+ strlcpy
+ strlen
+ strncasecmp
+ strncat
+ strnchr
+ strncmp
+ strncpy
+ strnlen
+ strnstr
+ strpbrk
+ strrchr
+ strreplace
+ strscpy
+ strsep
+ strstr
+ submit_bh
+ __sw_hweight32
+ __sw_hweight64
+ __sw_hweight8
+ sync_file_create
+ sync_file_get_fence
+ synchronize_irq
+ synchronize_rcu
+ syscon_node_to_regmap
+ syscon_regmap_lookup_by_phandle
+ sysfs_create_bin_file
+ sysfs_create_file_ns
+ sysfs_create_files
+ sysfs_create_group
+ sysfs_create_groups
+ sysfs_create_link
+ __sysfs_match_string
+ sysfs_notify
+ sysfs_remove_bin_file
+ sysfs_remove_file_ns
+ sysfs_remove_files
+ sysfs_remove_group
+ sysfs_remove_groups
+ sysfs_remove_link
+ sysfs_streq
+ system_freezable_wq
+ system_freezing_cnt
+ system_long_wq
+ system_power_efficient_wq
+ system_state
+ system_unbound_wq
+ system_wq
+ sys_tz
+ __tasklet_hi_schedule
+ tasklet_init
+ tasklet_kill
+ __tasklet_schedule
+ __task_pid_nr_ns
+ thermal_cdev_update
+ thermal_cooling_device_unregister
+ thermal_of_cooling_device_register
+ thermal_zone_device_update
+ thermal_zone_get_temp
+ thermal_zone_get_zone_by_name
+ time64_to_tm
+ timespec64_to_jiffies
+ _totalram_pages
+ __trace_bprintk
+ trace_define_field
+ trace_event_buffer_commit
+ trace_event_buffer_reserve
+ trace_event_ignore_this_pid
+ trace_event_raw_init
+ trace_event_reg
+ trace_handle_return
+ trace_print_array_seq
+ trace_print_flags_seq
+ trace_print_hex_seq
+ trace_print_symbols_seq
+ trace_raw_output_prep
+ trace_seq_printf
+ try_module_get
+ try_wait_for_completion
+ tty_flip_buffer_push
+ __tty_insert_flip_char
+ tty_insert_flip_string_fixed_flag
+ typec_altmode_get_partner
+ typec_altmode_update_active
+ typec_get_drvdata
+ typec_partner_register_altmode
+ typec_port_register_altmode
+ typec_register_partner
+ typec_register_port
+ typec_set_data_role
+ typec_set_pwr_opmode
+ typec_set_pwr_role
+ typec_unregister_altmode
+ typec_unregister_partner
+ typec_unregister_port
+ uart_add_one_port
+ uart_console_device
+ uart_console_write
+ uart_get_baud_rate
+ uart_insert_char
+ uart_parse_options
+ uart_register_driver
+ uart_remove_one_port
+ uart_resume_port
+ uart_set_options
+ uart_suspend_port
+ uart_unregister_driver
+ uart_update_timeout
+ uart_write_wakeup
+ __udelay
+ ufshcd_crypto_cap_find
+ ufshcd_crypto_disable_spec
+ ufshcd_crypto_enable_spec
+ ufshcd_dme_get_attr
+ ufshcd_dme_set_attr
+ ufshcd_dump_regs
+ ufshcd_get_local_unipro_ver
+ ufshcd_hold
+ ufshcd_pltfrm_init
+ ufshcd_pltfrm_resume
+ ufshcd_pltfrm_runtime_idle
+ ufshcd_pltfrm_runtime_resume
+ ufshcd_pltfrm_runtime_suspend
+ ufshcd_pltfrm_shutdown
+ ufshcd_pltfrm_suspend
+ ufshcd_query_attr
+ ufshcd_query_descriptor_retry
+ ufshcd_query_flag
+ ufshcd_release
+ ufshcd_remove
+ ufshcd_uic_hibern8_enter
+ ufshcd_uic_hibern8_exit
+ __uio_register_device
+ uio_unregister_device
+ unmap_mapping_range
+ __unregister_chrdev
+ unregister_chrdev_region
+ unregister_gadget_item
+ unregister_inet6addr_notifier
+ unregister_inetaddr_notifier
+ unregister_netdev
+ unregister_netdevice_many
+ unregister_netdevice_notifier
+ unregister_netdevice_queue
+ unregister_netevent_notifier
+ unregister_oom_notifier
+ unregister_pm_notifier
+ unregister_reboot_notifier
+ unregister_rpmsg_driver
+ unregister_shrinker
+ unregister_syscore_ops
+ unregister_sysctl_table
+ up
+ update_devfreq
+ up_read
+ up_write
+ usb_add_gadget_udc
+ usb_add_hcd
+ usb_add_phy_dev
+ usb_alloc_coherent
+ usb_alloc_dev
+ usb_alloc_urb
+ usb_altnum_to_altsetting
+ usb_amd_dev_put
+ usb_amd_pt_check_port
+ usb_amd_quirk_pll_check
+ usb_amd_quirk_pll_disable
+ usb_amd_quirk_pll_enable
+ usb_anchor_urb
+ usb_asmedia_modifyflowcontrol
+ usb_assign_descriptors
+ usb_autopm_get_interface
+ usb_autopm_get_interface_async
+ usb_autopm_get_interface_no_resume
+ usb_autopm_put_interface
+ usb_autopm_put_interface_async
+ usb_autopm_put_interface_no_suspend
+ usb_bulk_msg
+ usb_clear_halt
+ usb_composite_setup_continue
+ usb_control_msg
+ __usb_create_hcd
+ usb_create_shared_hcd
+ usb_decode_ctrl
+ usb_del_gadget_udc
+ usb_deregister
+ usb_disabled
+ usb_disable_xhci_ports
+ usb_driver_claim_interface
+ usb_driver_release_interface
+ usb_enable_autosuspend
+ usb_enable_intel_xhci_ports
+ usb_ep_alloc_request
+ usb_ep_autoconfig
+ usb_ep_clear_halt
+ usb_ep_dequeue
+ usb_ep_disable
+ usb_ep_enable
+ usb_ep_fifo_flush
+ usb_ep_free_request
+ usb_ep_queue
+ usb_ep_set_halt
+ usb_ep_set_maxpacket_limit
+ usb_ep_set_wedge
+ usb_find_common_endpoints
+ usb_free_all_descriptors
+ usb_free_coherent
+ usb_free_urb
+ usb_function_register
+ usb_function_unregister
+ usb_gadget_giveback_request
+ usb_gadget_map_request_by_dev
+ usb_gadget_set_state
+ usb_gadget_udc_reset
+ usb_gadget_unmap_request_by_dev
+ usb_gadget_vbus_connect
+ usb_gadget_vbus_disconnect
+ usb_gadget_vbus_draw
+ usb_gadget_wakeup
+ usb_get_current_frame_number
+ usb_get_dev
+ usb_get_dr_mode
+ usb_get_from_anchor
+ usb_get_intf
+ usb_get_maximum_speed
+ usb_get_urb
+ usb_gstrings_attach
+ usb_hcd_check_unlink_urb
+ usb_hcd_end_port_resume
+ usb_hcd_giveback_urb
+ usb_hc_died
+ usb_hcd_irq
+ usb_hcd_is_primary_hcd
+ usb_hcd_link_urb_to_ep
+ usb_hcd_map_urb_for_dma
+ usb_hcd_pci_pm_ops
+ usb_hcd_pci_probe
+ usb_hcd_pci_remove
+ usb_hcd_pci_shutdown
+ usb_hcd_platform_shutdown
+ usb_hcd_poll_rh_status
+ usb_hcd_resume_root_hub
+ usb_hcd_start_port_resume
+ usb_hcd_unlink_urb_from_ep
+ usb_hub_clear_tt_buffer
+ usb_hub_find_child
+ usb_ifnum_to_if
+ usb_interface_id
+ usb_kill_urb
+ usb_lock_device_for_reset
+ usb_match_one_id
+ usbnet_change_mtu
+ usbnet_disconnect
+ usbnet_get_drvinfo
+ usbnet_get_endpoints
+ usbnet_get_ethernet_addr
+ usbnet_get_link
+ usbnet_get_link_ksettings
+ usbnet_get_msglevel
+ usbnet_get_stats64
+ usbnet_link_change
+ usbnet_manage_power
+ usbnet_nway_reset
+ usbnet_open
+ usbnet_probe
+ usbnet_read_cmd
+ usbnet_read_cmd_nopm
+ usbnet_resume
+ usbnet_set_link_ksettings
+ usbnet_set_msglevel
+ usbnet_skb_return
+ usbnet_start_xmit
+ usbnet_stop
+ usbnet_suspend
+ usbnet_tx_timeout
+ usbnet_unlink_rx_urbs
+ usbnet_update_max_qlen
+ usbnet_write_cmd
+ usbnet_write_cmd_async
+ usbnet_write_cmd_nopm
+ usb_os_desc_prepare_interf_dir
+ usb_poison_urb
+ usb_put_dev
+ usb_put_function_instance
+ usb_put_hcd
+ usb_put_intf
+ usb_register_driver
+ usb_register_notify
+ usb_remove_hcd
+ usb_remove_phy
+ usb_reset_device
+ usb_reset_endpoint
+ usb_role_switch_register
+ usb_role_switch_set_role
+ usb_role_switch_unregister
+ usb_root_hub_lost_power
+ usb_scuttle_anchored_urbs
+ usb_set_device_state
+ usb_set_interface
+ usb_sg_cancel
+ usb_sg_init
+ usb_sg_wait
+ usb_speed_string
+ usb_string
+ usb_string_id
+ usb_submit_urb
+ usb_unlink_urb
+ usb_unregister_notify
+ usb_wakeup_notification
+ __usecs_to_jiffies
+ usleep_range
+ utf16s_to_utf8s
+ v4l2_ctrl_find
+ v4l2_ctrl_g_ctrl
+ v4l2_ctrl_get_name
+ v4l2_ctrl_handler_free
+ v4l2_ctrl_handler_init_class
+ v4l2_ctrl_handler_setup
+ v4l2_ctrl_merge
+ __v4l2_ctrl_modify_range
+ v4l2_ctrl_new_custom
+ v4l2_ctrl_new_std
+ v4l2_ctrl_new_std_menu
+ v4l2_ctrl_replace
+ __v4l2_ctrl_s_ctrl
+ v4l2_ctrl_subscribe_event
+ v4l2_device_disconnect
+ v4l2_device_put
+ v4l2_device_register
+ v4l2_device_register_subdev
+ v4l2_device_register_subdev_nodes
+ v4l2_device_unregister
+ v4l2_device_unregister_subdev
+ v4l2_event_dequeue
+ v4l2_event_pending
+ v4l2_event_queue
+ v4l2_event_queue_fh
+ v4l2_event_subscribe
+ v4l2_event_unsubscribe
+ v4l2_fh_add
+ v4l2_fh_del
+ v4l2_fh_exit
+ v4l2_fh_init
+ v4l2_fh_open
+ v4l2_fh_release
+ v4l2_format_info
+ v4l2_prio_init
+ v4l2_s_ctrl
+ v4l2_subdev_call_wrappers
+ v4l2_subdev_init
+ v4l2_type_names
+ vabits_actual
+ vb2_buffer_done
+ vb2_common_vm_ops
+ vb2_create_bufs
+ vb2_create_framevec
+ vb2_destroy_framevec
+ vb2_dqbuf
+ vb2_expbuf
+ vb2_fop_mmap
+ vb2_fop_poll
+ vb2_fop_read
+ vb2_fop_release
+ vb2_ioctl_create_bufs
+ vb2_ioctl_dqbuf
+ vb2_ioctl_expbuf
+ vb2_ioctl_prepare_buf
+ vb2_ioctl_qbuf
+ vb2_ioctl_querybuf
+ vb2_ioctl_reqbufs
+ vb2_ioctl_streamoff
+ vb2_ioctl_streamon
+ vb2_mmap
+ vb2_ops_wait_finish
+ vb2_ops_wait_prepare
+ vb2_plane_vaddr
+ vb2_poll
+ vb2_qbuf
+ vb2_querybuf
+ vb2_queue_error
+ vb2_queue_init
+ vb2_queue_release
+ vb2_reqbufs
+ vb2_streamoff
+ vb2_streamon
+ vchan_dma_desc_free_list
+ vchan_init
+ vchan_tx_desc_free
+ vchan_tx_submit
+ vfree
+ video_devdata
+ video_device_alloc
+ video_device_release
+ video_device_release_empty
+ video_ioctl2
+ __video_register_device
+ video_unregister_device
+ vmalloc
+ vmalloc_to_page
+ vmalloc_user
+ vmap
+ vmemmap
+ vmf_insert_mixed
+ vmf_insert_pfn
+ vm_get_page_prot
+ vm_insert_page
+ vm_iomap_memory
+ vm_map_ram
+ vm_unmap_ram
+ vprintk
+ vscnprintf
+ vsnprintf
+ vunmap
+ vzalloc
+ wait_for_completion
+ wait_for_completion_interruptible
+ wait_for_completion_interruptible_timeout
+ wait_for_completion_killable
+ wait_for_completion_timeout
+ __wait_on_buffer
+ wait_woken
+ __wake_up
+ __wake_up_locked
+ wake_up_process
+ wakeup_source_register
+ wakeup_source_unregister
+ __warn_printk
+ wiphy_free
+ wiphy_new_nm
+ wiphy_register
+ wiphy_unregister
+ woken_wake_function
+ work_busy
diff --git a/arch/powerpc/include/asm/kasan.h b/arch/powerpc/include/asm/kasan.h
index b68eeff77806..6db06f58deed 100644
--- a/arch/powerpc/include/asm/kasan.h
+++ b/arch/powerpc/include/asm/kasan.h
@@ -27,9 +27,11 @@
#ifdef CONFIG_KASAN
void kasan_early_init(void);
+void kasan_mmu_init(void);
void kasan_init(void);
#else
static inline void kasan_init(void) { }
+static inline void kasan_mmu_init(void) { }
#endif
#endif /* __ASSEMBLY */
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index 68f7446193d1..b04896a88d79 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -175,6 +175,8 @@ void __init MMU_init(void)
btext_unmap();
#endif
+ kasan_mmu_init();
+
setup_kup();
/* Shortly after that, the entire linear mapping will be available */
diff --git a/arch/powerpc/mm/kasan/kasan_init_32.c b/arch/powerpc/mm/kasan/kasan_init_32.c
index b01d4b72eccf..1cfe57b51d7e 100644
--- a/arch/powerpc/mm/kasan/kasan_init_32.c
+++ b/arch/powerpc/mm/kasan/kasan_init_32.c
@@ -129,7 +129,7 @@ static void __init kasan_remap_early_shadow_ro(void)
flush_tlb_kernel_range(KASAN_SHADOW_START, KASAN_SHADOW_END);
}
-static void __init kasan_mmu_init(void)
+void __init kasan_mmu_init(void)
{
int ret;
struct memblock_region *reg;
@@ -156,8 +156,6 @@ static void __init kasan_mmu_init(void)
void __init kasan_init(void)
{
- kasan_mmu_init();
-
kasan_remap_early_shadow_ro();
clear_page(kasan_early_shadow_page);
diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64
index 8f88343358ce..02fee05f1e98 100644
--- a/build.config.gki.aarch64
+++ b/build.config.gki.aarch64
@@ -13,6 +13,7 @@ android/abi_gki_aarch64_hikey960
android/abi_gki_aarch64_qcom
android/abi_gki_aarch64_sunxi
android/abi_gki_aarch64_unisoc
+android/abi_gki_aarch64_vivo
"
TRIM_NONLISTED_KMI=1
KMI_SYMBOL_LIST_STRICT_MODE=1
diff --git a/drivers/atm/atmtcp.c b/drivers/atm/atmtcp.c
index d9fd70280482..7f814da3c2d0 100644
--- a/drivers/atm/atmtcp.c
+++ b/drivers/atm/atmtcp.c
@@ -433,9 +433,15 @@ static int atmtcp_remove_persistent(int itf)
return -EMEDIUMTYPE;
}
dev_data = PRIV(dev);
- if (!dev_data->persist) return 0;
+ if (!dev_data->persist) {
+ atm_dev_put(dev);
+ return 0;
+ }
dev_data->persist = 0;
- if (PRIV(dev)->vcc) return 0;
+ if (PRIV(dev)->vcc) {
+ atm_dev_put(dev);
+ return 0;
+ }
kfree(dev_data);
atm_dev_put(dev);
atm_dev_deregister(dev);
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index f34ed9542abc..aa3577aac476 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -228,24 +228,35 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
blk_mq_unfreeze_queue(lo->lo_queue);
}
+/**
+ * loop_validate_block_size() - validates the passed in block size
+ * @bsize: size to validate
+ */
static int
-figure_loop_size(struct loop_device *lo, loff_t offset, loff_t sizelimit)
+loop_validate_block_size(unsigned short bsize)
+{
+ if (bsize < 512 || bsize > PAGE_SIZE || !is_power_of_2(bsize))
+ return -EINVAL;
+
+ return 0;
+}
+
+/**
+ * loop_set_size() - sets device size and notifies userspace
+ * @lo: struct loop_device to set the size for
+ * @size: new size of the loop device
+ *
+ * Callers must validate that the size passed into this function fits into
+ * a sector_t, eg using loop_validate_size()
+ */
+static void loop_set_size(struct loop_device *lo, loff_t size)
{
- loff_t size = get_size(offset, sizelimit, lo->lo_backing_file);
- sector_t x = (sector_t)size;
struct block_device *bdev = lo->lo_device;
- if (unlikely((loff_t)x != size))
- return -EFBIG;
- if (lo->lo_offset != offset)
- lo->lo_offset = offset;
- if (lo->lo_sizelimit != sizelimit)
- lo->lo_sizelimit = sizelimit;
- set_capacity(lo->lo_disk, x);
- bd_set_size(bdev, (loff_t)get_capacity(bdev->bd_disk) << 9);
+ set_capacity(lo->lo_disk, size);
+ bd_set_size(bdev, size << SECTOR_SHIFT);
/* let user-space know about the new size */
kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
- return 0;
}
static inline int
@@ -950,132 +961,6 @@ static void loop_update_rotational(struct loop_device *lo)
blk_queue_flag_clear(QUEUE_FLAG_NONROT, q);
}
-static int loop_set_fd(struct loop_device *lo, fmode_t mode,
- struct block_device *bdev, unsigned int arg)
-{
- struct file *file;
- struct inode *inode;
- struct address_space *mapping;
- struct block_device *claimed_bdev = NULL;
- int lo_flags = 0;
- int error;
- loff_t size;
- bool partscan;
-
- /* This is safe, since we have a reference from open(). */
- __module_get(THIS_MODULE);
-
- error = -EBADF;
- file = fget(arg);
- if (!file)
- goto out;
-
- /*
- * If we don't hold exclusive handle for the device, upgrade to it
- * here to avoid changing device under exclusive owner.
- */
- if (!(mode & FMODE_EXCL)) {
- claimed_bdev = bd_start_claiming(bdev, loop_set_fd);
- if (IS_ERR(claimed_bdev)) {
- error = PTR_ERR(claimed_bdev);
- goto out_putf;
- }
- }
-
- error = mutex_lock_killable(&loop_ctl_mutex);
- if (error)
- goto out_bdev;
-
- error = -EBUSY;
- if (lo->lo_state != Lo_unbound)
- goto out_unlock;
-
- error = loop_validate_file(file, bdev);
- if (error)
- goto out_unlock;
-
- mapping = file->f_mapping;
- inode = mapping->host;
-
- if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
- !file->f_op->write_iter)
- lo_flags |= LO_FLAGS_READ_ONLY;
-
- error = -EFBIG;
- size = get_loop_size(lo, file);
- if ((loff_t)(sector_t)size != size)
- goto out_unlock;
- error = loop_prepare_queue(lo);
- if (error)
- goto out_unlock;
-
- error = 0;
-
- set_device_ro(bdev, (lo_flags & LO_FLAGS_READ_ONLY) != 0);
-
- lo->use_dio = false;
- lo->lo_device = bdev;
- lo->lo_flags = lo_flags;
- lo->lo_backing_file = file;
- lo->transfer = NULL;
- lo->ioctl = NULL;
- lo->lo_sizelimit = 0;
- lo->old_gfp_mask = mapping_gfp_mask(mapping);
- mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
-
- if (!(lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
- blk_queue_write_cache(lo->lo_queue, true, false);
-
- if (io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev) {
- /* In case of direct I/O, match underlying block size */
- unsigned short bsize = bdev_logical_block_size(
- inode->i_sb->s_bdev);
-
- blk_queue_logical_block_size(lo->lo_queue, bsize);
- blk_queue_physical_block_size(lo->lo_queue, bsize);
- blk_queue_io_min(lo->lo_queue, bsize);
- }
-
- loop_update_rotational(lo);
- loop_update_dio(lo);
- set_capacity(lo->lo_disk, size);
- bd_set_size(bdev, size << 9);
- loop_sysfs_init(lo);
- /* let user-space know about the new size */
- kobject_uevent(&disk_to_dev(bdev->bd_disk)->kobj, KOBJ_CHANGE);
-
- set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
- block_size(inode->i_bdev) : PAGE_SIZE);
-
- lo->lo_state = Lo_bound;
- if (part_shift)
- lo->lo_flags |= LO_FLAGS_PARTSCAN;
- partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
-
- /* Grab the block_device to prevent its destruction after we
- * put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
- */
- bdgrab(bdev);
- mutex_unlock(&loop_ctl_mutex);
- if (partscan)
- loop_reread_partitions(lo, bdev);
- if (claimed_bdev)
- bd_abort_claiming(bdev, claimed_bdev, loop_set_fd);
- return 0;
-
-out_unlock:
- mutex_unlock(&loop_ctl_mutex);
-out_bdev:
- if (claimed_bdev)
- bd_abort_claiming(bdev, claimed_bdev, loop_set_fd);
-out_putf:
- fput(file);
-out:
- /* This is safe: open() is still holding a reference. */
- module_put(THIS_MODULE);
- return error;
-}
-
static int
loop_release_xfer(struct loop_device *lo)
{
@@ -1113,6 +998,205 @@ loop_init_xfer(struct loop_device *lo, struct loop_func_table *xfer,
return err;
}
+/**
+ * loop_set_status_from_info - configure device from loop_info
+ * @lo: struct loop_device to configure
+ * @info: struct loop_info64 to configure the device with
+ *
+ * Configures the loop device parameters according to the passed
+ * in loop_info64 configuration.
+ */
+static int
+loop_set_status_from_info(struct loop_device *lo,
+ const struct loop_info64 *info)
+{
+ int err;
+ struct loop_func_table *xfer;
+ kuid_t uid = current_uid();
+
+ if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE)
+ return -EINVAL;
+
+ err = loop_release_xfer(lo);
+ if (err)
+ return err;
+
+ if (info->lo_encrypt_type) {
+ unsigned int type = info->lo_encrypt_type;
+
+ if (type >= MAX_LO_CRYPT)
+ return -EINVAL;
+ xfer = xfer_funcs[type];
+ if (xfer == NULL)
+ return -EINVAL;
+ } else
+ xfer = NULL;
+
+ err = loop_init_xfer(lo, xfer, info);
+ if (err)
+ return err;
+
+ lo->lo_offset = info->lo_offset;
+ lo->lo_sizelimit = info->lo_sizelimit;
+ memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
+ memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
+ lo->lo_file_name[LO_NAME_SIZE-1] = 0;
+ lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
+
+ if (!xfer)
+ xfer = &none_funcs;
+ lo->transfer = xfer->transfer;
+ lo->ioctl = xfer->ioctl;
+
+ lo->lo_flags = info->lo_flags;
+
+ lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
+ lo->lo_init[0] = info->lo_init[0];
+ lo->lo_init[1] = info->lo_init[1];
+ if (info->lo_encrypt_key_size) {
+ memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
+ info->lo_encrypt_key_size);
+ lo->lo_key_owner = uid;
+ }
+
+ return 0;
+}
+
+static int loop_configure(struct loop_device *lo, fmode_t mode,
+ struct block_device *bdev,
+ const struct loop_config *config)
+{
+ struct file *file;
+ struct inode *inode;
+ struct address_space *mapping;
+ struct block_device *claimed_bdev = NULL;
+ int error;
+ loff_t size;
+ bool partscan;
+ unsigned short bsize;
+
+ /* This is safe, since we have a reference from open(). */
+ __module_get(THIS_MODULE);
+
+ error = -EBADF;
+ file = fget(config->fd);
+ if (!file)
+ goto out;
+
+ /*
+ * If we don't hold exclusive handle for the device, upgrade to it
+ * here to avoid changing device under exclusive owner.
+ */
+ if (!(mode & FMODE_EXCL)) {
+ claimed_bdev = bd_start_claiming(bdev, loop_configure);
+ if (IS_ERR(claimed_bdev)) {
+ error = PTR_ERR(claimed_bdev);
+ goto out_putf;
+ }
+ }
+
+ error = mutex_lock_killable(&loop_ctl_mutex);
+ if (error)
+ goto out_bdev;
+
+ error = -EBUSY;
+ if (lo->lo_state != Lo_unbound)
+ goto out_unlock;
+
+ error = loop_validate_file(file, bdev);
+ if (error)
+ goto out_unlock;
+
+ mapping = file->f_mapping;
+ inode = mapping->host;
+
+ size = get_loop_size(lo, file);
+
+ if ((config->info.lo_flags & ~LOOP_CONFIGURE_SETTABLE_FLAGS) != 0) {
+ error = -EINVAL;
+ goto out_unlock;
+ }
+
+ if (config->block_size) {
+ error = loop_validate_block_size(config->block_size);
+ if (error)
+ goto out_unlock;
+ }
+
+ error = loop_set_status_from_info(lo, &config->info);
+ if (error)
+ goto out_unlock;
+
+ if (!(file->f_mode & FMODE_WRITE) || !(mode & FMODE_WRITE) ||
+ !file->f_op->write_iter)
+ lo->lo_flags |= LO_FLAGS_READ_ONLY;
+
+ error = loop_prepare_queue(lo);
+ if (error)
+ goto out_unlock;
+
+ error = 0;
+
+ set_device_ro(bdev, (lo->lo_flags & LO_FLAGS_READ_ONLY) != 0);
+
+ lo->use_dio = lo->lo_flags & LO_FLAGS_DIRECT_IO;
+ lo->lo_device = bdev;
+ lo->lo_backing_file = file;
+ lo->old_gfp_mask = mapping_gfp_mask(mapping);
+ mapping_set_gfp_mask(mapping, lo->old_gfp_mask & ~(__GFP_IO|__GFP_FS));
+
+ if (!(lo->lo_flags & LO_FLAGS_READ_ONLY) && file->f_op->fsync)
+ blk_queue_write_cache(lo->lo_queue, true, false);
+
+ if (config->block_size)
+ bsize = config->block_size;
+ else if (io_is_direct(lo->lo_backing_file) && inode->i_sb->s_bdev)
+ /* In case of direct I/O, match underlying block size */
+ bsize = bdev_logical_block_size(inode->i_sb->s_bdev);
+ else
+ bsize = 512;
+
+ blk_queue_logical_block_size(lo->lo_queue, bsize);
+ blk_queue_physical_block_size(lo->lo_queue, bsize);
+ blk_queue_io_min(lo->lo_queue, bsize);
+
+ loop_update_rotational(lo);
+ loop_update_dio(lo);
+ loop_sysfs_init(lo);
+ loop_set_size(lo, size);
+
+ set_blocksize(bdev, S_ISBLK(inode->i_mode) ?
+ block_size(inode->i_bdev) : PAGE_SIZE);
+
+ lo->lo_state = Lo_bound;
+ if (part_shift)
+ lo->lo_flags |= LO_FLAGS_PARTSCAN;
+ partscan = lo->lo_flags & LO_FLAGS_PARTSCAN;
+
+ /* Grab the block_device to prevent its destruction after we
+ * put /dev/loopXX inode. Later in __loop_clr_fd() we bdput(bdev).
+ */
+ bdgrab(bdev);
+ mutex_unlock(&loop_ctl_mutex);
+ if (partscan)
+ loop_reread_partitions(lo, bdev);
+ if (claimed_bdev)
+ bd_abort_claiming(bdev, claimed_bdev, loop_configure);
+ return 0;
+
+out_unlock:
+ mutex_unlock(&loop_ctl_mutex);
+out_bdev:
+ if (claimed_bdev)
+ bd_abort_claiming(bdev, claimed_bdev, loop_configure);
+out_putf:
+ fput(file);
+out:
+ /* This is safe: open() is still holding a reference. */
+ module_put(THIS_MODULE);
+ return error;
+}
+
static int __loop_clr_fd(struct loop_device *lo, bool release)
{
struct file *filp = NULL;
@@ -1260,10 +1344,11 @@ static int
loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
{
int err;
- struct loop_func_table *xfer;
- kuid_t uid = current_uid();
struct block_device *bdev;
+ kuid_t uid = current_uid();
+ int prev_lo_flags;
bool partscan = false;
+ bool size_changed = false;
err = mutex_lock_killable(&loop_ctl_mutex);
if (err)
@@ -1278,13 +1363,10 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
err = -ENXIO;
goto out_unlock;
}
- if ((unsigned int) info->lo_encrypt_key_size > LO_KEY_SIZE) {
- err = -EINVAL;
- goto out_unlock;
- }
if (lo->lo_offset != info->lo_offset ||
lo->lo_sizelimit != info->lo_sizelimit) {
+ size_changed = true;
sync_blockdev(lo->lo_device);
invalidate_bdev(lo->lo_device);
}
@@ -1292,79 +1374,44 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info)
/* I/O need to be drained during transfer transition */
blk_mq_freeze_queue(lo->lo_queue);
- err = loop_release_xfer(lo);
+ if (size_changed && lo->lo_device->bd_inode->i_mapping->nrpages) {
+ /* If any pages were dirtied after kill_bdev(), try again */
+ err = -EAGAIN;
+ pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
+ __func__, lo->lo_number, lo->lo_file_name,
+ lo->lo_device->bd_inode->i_mapping->nrpages);
+ goto out_unfreeze;
+ }
+
+ prev_lo_flags = lo->lo_flags;
+
+ err = loop_set_status_from_info(lo, info);
if (err)
goto out_unfreeze;
- if (info->lo_encrypt_type) {
- unsigned int type = info->lo_encrypt_type;
+ /* Mask out flags that can't be set using LOOP_SET_STATUS. */
+ lo->lo_flags &= LOOP_SET_STATUS_SETTABLE_FLAGS;
+ /* For those flags, use the previous values instead */
+ lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_SETTABLE_FLAGS;
+ /* For flags that can't be cleared, use previous values too */
+ lo->lo_flags |= prev_lo_flags & ~LOOP_SET_STATUS_CLEARABLE_FLAGS;
- if (type >= MAX_LO_CRYPT) {
- err = -EINVAL;
- goto out_unfreeze;
- }
- xfer = xfer_funcs[type];
- if (xfer == NULL) {
- err = -EINVAL;
- goto out_unfreeze;
- }
- } else
- xfer = NULL;
-
- err = loop_init_xfer(lo, xfer, info);
- if (err)
- goto out_unfreeze;
-
- if (lo->lo_offset != info->lo_offset ||
- lo->lo_sizelimit != info->lo_sizelimit) {
- /* kill_bdev should have truncated all the pages */
- if (lo->lo_device->bd_inode->i_mapping->nrpages) {
- err = -EAGAIN;
- pr_warn("%s: loop%d (%s) has still dirty pages (nrpages=%lu)\n",
- __func__, lo->lo_number, lo->lo_file_name,
- lo->lo_device->bd_inode->i_mapping->nrpages);
- goto out_unfreeze;
- }
- if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) {
- err = -EFBIG;
- goto out_unfreeze;
- }
+ if (size_changed) {
+ loff_t new_size = get_size(lo->lo_offset, lo->lo_sizelimit,
+ lo->lo_backing_file);
+ loop_set_size(lo, new_size);
}
loop_config_discard(lo);
- memcpy(lo->lo_file_name, info->lo_file_name, LO_NAME_SIZE);
- memcpy(lo->lo_crypt_name, info->lo_crypt_name, LO_NAME_SIZE);
- lo->lo_file_name[LO_NAME_SIZE-1] = 0;
- lo->lo_crypt_name[LO_NAME_SIZE-1] = 0;
-
- if (!xfer)
- xfer = &none_funcs;
- lo->transfer = xfer->transfer;
- lo->ioctl = xfer->ioctl;
-
- if ((lo->lo_flags & LO_FLAGS_AUTOCLEAR) !=
- (info->lo_flags & LO_FLAGS_AUTOCLEAR))
- lo->lo_flags ^= LO_FLAGS_AUTOCLEAR;
-
- lo->lo_encrypt_key_size = info->lo_encrypt_key_size;
- lo->lo_init[0] = info->lo_init[0];
- lo->lo_init[1] = info->lo_init[1];
- if (info->lo_encrypt_key_size) {
- memcpy(lo->lo_encrypt_key, info->lo_encrypt_key,
- info->lo_encrypt_key_size);
- lo->lo_key_owner = uid;
- }
-
/* update dio if lo_offset or transfer is changed */
__loop_update_dio(lo, lo->use_dio);
out_unfreeze:
blk_mq_unfreeze_queue(lo->lo_queue);
- if (!err && (info->lo_flags & LO_FLAGS_PARTSCAN) &&
- !(lo->lo_flags & LO_FLAGS_PARTSCAN)) {
- lo->lo_flags |= LO_FLAGS_PARTSCAN;
+ if (!err && (lo->lo_flags & LO_FLAGS_PARTSCAN) &&
+ !(prev_lo_flags & LO_FLAGS_PARTSCAN)) {
lo->lo_disk->flags &= ~GENHD_FL_NO_PART_SCAN;
bdev = lo->lo_device;
partscan = true;
@@ -1528,10 +1575,15 @@ loop_get_status64(struct loop_device *lo, struct loop_info64 __user *arg) {
static int loop_set_capacity(struct loop_device *lo)
{
+ loff_t size;
+
if (unlikely(lo->lo_state != Lo_bound))
return -ENXIO;
- return figure_loop_size(lo, lo->lo_offset, lo->lo_sizelimit);
+ size = get_loop_size(lo, lo->lo_backing_file);
+ loop_set_size(lo, size);
+
+ return 0;
}
static int loop_set_dio(struct loop_device *lo, unsigned long arg)
@@ -1555,8 +1607,9 @@ static int loop_set_block_size(struct loop_device *lo, unsigned long arg)
if (lo->lo_state != Lo_bound)
return -ENXIO;
- if (arg < 512 || arg > PAGE_SIZE || !is_power_of_2(arg))
- return -EINVAL;
+ err = loop_validate_block_size(arg);
+ if (err)
+ return err;
if (lo->lo_queue->limits.logical_block_size == arg)
return 0;
@@ -1614,11 +1667,31 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
unsigned int cmd, unsigned long arg)
{
struct loop_device *lo = bdev->bd_disk->private_data;
+ void __user *argp = (void __user *) arg;
int err;
switch (cmd) {
- case LOOP_SET_FD:
- return loop_set_fd(lo, mode, bdev, arg);
+ case LOOP_SET_FD: {
+ /*
+ * Legacy case - pass in a zeroed out struct loop_config with
+ * only the file descriptor set , which corresponds with the
+ * default parameters we'd have used otherwise.
+ */
+ struct loop_config config;
+
+ memset(&config, 0, sizeof(config));
+ config.fd = arg;
+
+ return loop_configure(lo, mode, bdev, &config);
+ }
+ case LOOP_CONFIGURE: {
+ struct loop_config config;
+
+ if (copy_from_user(&config, argp, sizeof(config)))
+ return -EFAULT;
+
+ return loop_configure(lo, mode, bdev, &config);
+ }
case LOOP_CHANGE_FD:
return loop_change_fd(lo, bdev, arg);
case LOOP_CLR_FD:
@@ -1626,21 +1699,19 @@ static int lo_ioctl(struct block_device *bdev, fmode_t mode,
case LOOP_SET_STATUS:
err = -EPERM;
if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) {
- err = loop_set_status_old(lo,
- (struct loop_info __user *)arg);
+ err = loop_set_status_old(lo, argp);
}
break;
case LOOP_GET_STATUS:
- return loop_get_status_old(lo, (struct loop_info __user *) arg);
+ return loop_get_status_old(lo, argp);
case LOOP_SET_STATUS64:
err = -EPERM;
if ((mode & FMODE_WRITE) || capable(CAP_SYS_ADMIN)) {
- err = loop_set_status64(lo,
- (struct loop_info64 __user *) arg);
+ err = loop_set_status64(lo, argp);
}
break;
case LOOP_GET_STATUS64:
- return loop_get_status64(lo, (struct loop_info64 __user *) arg);
+ return loop_get_status64(lo, argp);
case LOOP_SET_CAPACITY:
case LOOP_SET_DIRECT_IO:
case LOOP_SET_BLOCK_SIZE:
@@ -1792,6 +1863,7 @@ static int lo_compat_ioctl(struct block_device *bdev, fmode_t mode,
case LOOP_CLR_FD:
case LOOP_GET_STATUS64:
case LOOP_SET_STATUS64:
+ case LOOP_CONFIGURE:
arg = (unsigned long) compat_ptr(arg);
/* fall through */
case LOOP_SET_FD:
diff --git a/drivers/firmware/qemu_fw_cfg.c b/drivers/firmware/qemu_fw_cfg.c
index 039e0f91dba8..6945c3c96637 100644
--- a/drivers/firmware/qemu_fw_cfg.c
+++ b/drivers/firmware/qemu_fw_cfg.c
@@ -605,8 +605,10 @@ static int fw_cfg_register_file(const struct fw_cfg_file *f)
/* register entry under "/sys/firmware/qemu_fw_cfg/by_key/" */
err = kobject_init_and_add(&entry->kobj, &fw_cfg_sysfs_entry_ktype,
fw_cfg_sel_ko, "%d", entry->select);
- if (err)
- goto err_register;
+ if (err) {
+ kobject_put(&entry->kobj);
+ return err;
+ }
/* add raw binary content access */
err = sysfs_create_bin_file(&entry->kobj, &fw_cfg_sysfs_attr_raw);
@@ -622,7 +624,6 @@ static int fw_cfg_register_file(const struct fw_cfg_file *f)
err_add_raw:
kobject_del(&entry->kobj);
-err_register:
kfree(entry);
return err;
}
diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
index f439f0a5b43a..5cf2381f667e 100644
--- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c
+++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c
@@ -315,7 +315,7 @@ nouveau_fbcon_create(struct drm_fb_helper *helper,
struct nouveau_framebuffer *fb;
struct nouveau_channel *chan;
struct nouveau_bo *nvbo;
- struct drm_mode_fb_cmd2 mode_cmd;
+ struct drm_mode_fb_cmd2 mode_cmd = {};
int ret;
mode_cmd.width = sizes->surface_width;
@@ -592,6 +592,7 @@ fini:
drm_fb_helper_fini(&fbcon->helper);
free:
kfree(fbcon);
+ drm->fbcon = NULL;
return ret;
}
diff --git a/drivers/hv/channel_mgmt.c b/drivers/hv/channel_mgmt.c
index c8296d5e74c3..501c43c5851d 100644
--- a/drivers/hv/channel_mgmt.c
+++ b/drivers/hv/channel_mgmt.c
@@ -1354,6 +1354,8 @@ channel_message_table[CHANNELMSG_COUNT] = {
{ CHANNELMSG_19, 0, NULL },
{ CHANNELMSG_20, 0, NULL },
{ CHANNELMSG_TL_CONNECT_REQUEST, 0, NULL },
+ { CHANNELMSG_22, 0, NULL },
+ { CHANNELMSG_TL_CONNECT_RESULT, 0, NULL },
};
/*
@@ -1365,25 +1367,16 @@ void vmbus_onmessage(void *context)
{
struct hv_message *msg = context;
struct vmbus_channel_message_header *hdr;
- int size;
hdr = (struct vmbus_channel_message_header *)msg->u.payload;
- size = msg->header.payload_size;
trace_vmbus_on_message(hdr);
- if (hdr->msgtype >= CHANNELMSG_COUNT) {
- pr_err("Received invalid channel message type %d size %d\n",
- hdr->msgtype, size);
- print_hex_dump_bytes("", DUMP_PREFIX_NONE,
- (unsigned char *)msg->u.payload, size);
- return;
- }
-
- if (channel_message_table[hdr->msgtype].message_handler)
- channel_message_table[hdr->msgtype].message_handler(hdr);
- else
- pr_err("Unhandled channel message type %d\n", hdr->msgtype);
+ /*
+ * vmbus_on_msg_dpc() makes sure the hdr->msgtype here can not go
+ * out of bound and the message_handler pointer can not be NULL.
+ */
+ channel_message_table[hdr->msgtype].message_handler(hdr);
}
/*
diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index 160ff640485b..24c38e44ed3b 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -1073,6 +1073,10 @@ void vmbus_on_msg_dpc(unsigned long data)
}
entry = &channel_message_table[hdr->msgtype];
+
+ if (!entry->message_handler)
+ goto msg_handled;
+
if (entry->handler_type == VMHT_BLOCKING) {
ctx = kmalloc(sizeof(*ctx), GFP_ATOMIC);
if (ctx == NULL)
diff --git a/drivers/i2c/i2c-core-slave.c b/drivers/i2c/i2c-core-slave.c
index 5427f047faf0..1589179d5eb9 100644
--- a/drivers/i2c/i2c-core-slave.c
+++ b/drivers/i2c/i2c-core-slave.c
@@ -18,10 +18,8 @@ int i2c_slave_register(struct i2c_client *client, i2c_slave_cb_t slave_cb)
{
int ret;
- if (!client || !slave_cb) {
- WARN(1, "insufficient data\n");
+ if (WARN(IS_ERR_OR_NULL(client) || !slave_cb, "insufficient data\n"))
return -EINVAL;
- }
if (!(client->flags & I2C_CLIENT_SLAVE))
dev_warn(&client->dev, "%s: client slave flag not set. You might see address collisions\n",
@@ -60,6 +58,9 @@ int i2c_slave_unregister(struct i2c_client *client)
{
int ret;
+ if (IS_ERR_OR_NULL(client))
+ return -EINVAL;
+
if (!client->adapter->algo->unreg_slave) {
dev_err(&client->dev, "%s: not supported by adapter\n", __func__);
return -EOPNOTSUPP;
diff --git a/drivers/leds/leds-88pm860x.c b/drivers/leds/leds-88pm860x.c
index b3044c9a8120..465c3755cf2e 100644
--- a/drivers/leds/leds-88pm860x.c
+++ b/drivers/leds/leds-88pm860x.c
@@ -203,21 +203,33 @@ static int pm860x_led_probe(struct platform_device *pdev)
data->cdev.brightness_set_blocking = pm860x_led_set;
mutex_init(&data->lock);
- ret = devm_led_classdev_register(chip->dev, &data->cdev);
+ ret = led_classdev_register(chip->dev, &data->cdev);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to register LED: %d\n", ret);
return ret;
}
pm860x_led_set(&data->cdev, 0);
+
+ platform_set_drvdata(pdev, data);
+
return 0;
}
+static int pm860x_led_remove(struct platform_device *pdev)
+{
+ struct pm860x_led *data = platform_get_drvdata(pdev);
+
+ led_classdev_unregister(&data->cdev);
+
+ return 0;
+}
static struct platform_driver pm860x_led_driver = {
.driver = {
.name = "88pm860x-led",
},
.probe = pm860x_led_probe,
+ .remove = pm860x_led_remove,
};
module_platform_driver(pm860x_led_driver);
diff --git a/drivers/leds/leds-da903x.c b/drivers/leds/leds-da903x.c
index ed1b303f699f..2b5fb00438a2 100644
--- a/drivers/leds/leds-da903x.c
+++ b/drivers/leds/leds-da903x.c
@@ -110,12 +110,23 @@ static int da903x_led_probe(struct platform_device *pdev)
led->flags = pdata->flags;
led->master = pdev->dev.parent;
- ret = devm_led_classdev_register(led->master, &led->cdev);
+ ret = led_classdev_register(led->master, &led->cdev);
if (ret) {
dev_err(&pdev->dev, "failed to register LED %d\n", id);
return ret;
}
+ platform_set_drvdata(pdev, led);
+
+ return 0;
+}
+
+static int da903x_led_remove(struct platform_device *pdev)
+{
+ struct da903x_led *led = platform_get_drvdata(pdev);
+
+ led_classdev_unregister(&led->cdev);
+
return 0;
}
@@ -124,6 +135,7 @@ static struct platform_driver da903x_led_driver = {
.name = "da903x-led",
},
.probe = da903x_led_probe,
+ .remove = da903x_led_remove,
};
module_platform_driver(da903x_led_driver);
diff --git a/drivers/leds/leds-lm3533.c b/drivers/leds/leds-lm3533.c
index 9504ad405aef..b3edee703193 100644
--- a/drivers/leds/leds-lm3533.c
+++ b/drivers/leds/leds-lm3533.c
@@ -694,7 +694,7 @@ static int lm3533_led_probe(struct platform_device *pdev)
platform_set_drvdata(pdev, led);
- ret = devm_led_classdev_register(pdev->dev.parent, &led->cdev);
+ ret = led_classdev_register(pdev->dev.parent, &led->cdev);
if (ret) {
dev_err(&pdev->dev, "failed to register LED %d\n", pdev->id);
return ret;
@@ -704,13 +704,18 @@ static int lm3533_led_probe(struct platform_device *pdev)
ret = lm3533_led_setup(led, pdata);
if (ret)
- return ret;
+ goto err_deregister;
ret = lm3533_ctrlbank_enable(&led->cb);
if (ret)
- return ret;
+ goto err_deregister;
return 0;
+
+err_deregister:
+ led_classdev_unregister(&led->cdev);
+
+ return ret;
}
static int lm3533_led_remove(struct platform_device *pdev)
@@ -720,6 +725,7 @@ static int lm3533_led_remove(struct platform_device *pdev)
dev_dbg(&pdev->dev, "%s\n", __func__);
lm3533_ctrlbank_disable(&led->cb);
+ led_classdev_unregister(&led->cdev);
return 0;
}
diff --git a/drivers/leds/leds-lm36274.c b/drivers/leds/leds-lm36274.c
index 836b60c9a2b8..db842eeb7ca2 100644
--- a/drivers/leds/leds-lm36274.c
+++ b/drivers/leds/leds-lm36274.c
@@ -133,7 +133,7 @@ static int lm36274_probe(struct platform_device *pdev)
lm36274_data->pdev = pdev;
lm36274_data->dev = lmu->dev;
lm36274_data->regmap = lmu->regmap;
- dev_set_drvdata(&pdev->dev, lm36274_data);
+ platform_set_drvdata(pdev, lm36274_data);
ret = lm36274_parse_dt(lm36274_data);
if (ret) {
@@ -147,8 +147,16 @@ static int lm36274_probe(struct platform_device *pdev)
return ret;
}
- return devm_led_classdev_register(lm36274_data->dev,
- &lm36274_data->led_dev);
+ return led_classdev_register(lm36274_data->dev, &lm36274_data->led_dev);
+}
+
+static int lm36274_remove(struct platform_device *pdev)
+{
+ struct lm36274 *lm36274_data = platform_get_drvdata(pdev);
+
+ led_classdev_unregister(&lm36274_data->led_dev);
+
+ return 0;
}
static const struct of_device_id of_lm36274_leds_match[] = {
@@ -159,6 +167,7 @@ MODULE_DEVICE_TABLE(of, of_lm36274_leds_match);
static struct platform_driver lm36274_driver = {
.probe = lm36274_probe,
+ .remove = lm36274_remove,
.driver = {
.name = "lm36274-leds",
},
diff --git a/drivers/leds/leds-wm831x-status.c b/drivers/leds/leds-wm831x-status.c
index 082df7f1dd90..67f4235cb28a 100644
--- a/drivers/leds/leds-wm831x-status.c
+++ b/drivers/leds/leds-wm831x-status.c
@@ -269,12 +269,23 @@ static int wm831x_status_probe(struct platform_device *pdev)
drvdata->cdev.blink_set = wm831x_status_blink_set;
drvdata->cdev.groups = wm831x_status_groups;
- ret = devm_led_classdev_register(wm831x->dev, &drvdata->cdev);
+ ret = led_classdev_register(wm831x->dev, &drvdata->cdev);
if (ret < 0) {
dev_err(&pdev->dev, "Failed to register LED: %d\n", ret);
return ret;
}
+ platform_set_drvdata(pdev, drvdata);
+
+ return 0;
+}
+
+static int wm831x_status_remove(struct platform_device *pdev)
+{
+ struct wm831x_status *drvdata = platform_get_drvdata(pdev);
+
+ led_classdev_unregister(&drvdata->cdev);
+
return 0;
}
@@ -283,6 +294,7 @@ static struct platform_driver wm831x_status_driver = {
.name = "wm831x-status",
},
.probe = wm831x_status_probe,
+ .remove = wm831x_status_remove,
};
module_platform_driver(wm831x_status_driver);
diff --git a/drivers/mtd/mtdchar.c b/drivers/mtd/mtdchar.c
index 975aed94f06c..48832f9b215c 100644
--- a/drivers/mtd/mtdchar.c
+++ b/drivers/mtd/mtdchar.c
@@ -354,9 +354,6 @@ static int mtdchar_writeoob(struct file *file, struct mtd_info *mtd,
uint32_t retlen;
int ret = 0;
- if (!(file->f_mode & FMODE_WRITE))
- return -EPERM;
-
if (length > 4096)
return -EINVAL;
@@ -641,6 +638,48 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
pr_debug("MTD_ioctl\n");
+ /*
+ * Check the file mode to require "dangerous" commands to have write
+ * permissions.
+ */
+ switch (cmd) {
+ /* "safe" commands */
+ case MEMGETREGIONCOUNT:
+ case MEMGETREGIONINFO:
+ case MEMGETINFO:
+ case MEMREADOOB:
+ case MEMREADOOB64:
+ case MEMLOCK:
+ case MEMUNLOCK:
+ case MEMISLOCKED:
+ case MEMGETOOBSEL:
+ case MEMGETBADBLOCK:
+ case MEMSETBADBLOCK:
+ case OTPSELECT:
+ case OTPGETREGIONCOUNT:
+ case OTPGETREGIONINFO:
+ case OTPLOCK:
+ case ECCGETLAYOUT:
+ case ECCGETSTATS:
+ case MTDFILEMODE:
+ case BLKPG:
+ case BLKRRPART:
+ break;
+
+ /* "dangerous" commands */
+ case MEMERASE:
+ case MEMERASE64:
+ case MEMWRITEOOB:
+ case MEMWRITEOOB64:
+ case MEMWRITE:
+ if (!(file->f_mode & FMODE_WRITE))
+ return -EPERM;
+ break;
+
+ default:
+ return -ENOTTY;
+ }
+
switch (cmd) {
case MEMGETREGIONCOUNT:
if (copy_to_user(argp, &(mtd->numeraseregions), sizeof(int)))
@@ -688,9 +727,6 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
{
struct erase_info *erase;
- if(!(file->f_mode & FMODE_WRITE))
- return -EPERM;
-
erase=kzalloc(sizeof(struct erase_info),GFP_KERNEL);
if (!erase)
ret = -ENOMEM;
@@ -983,9 +1019,6 @@ static int mtdchar_ioctl(struct file *file, u_int cmd, u_long arg)
ret = 0;
break;
}
-
- default:
- ret = -ENOTTY;
}
return ret;
@@ -1029,6 +1062,11 @@ static long mtdchar_compat_ioctl(struct file *file, unsigned int cmd,
struct mtd_oob_buf32 buf;
struct mtd_oob_buf32 __user *buf_user = argp;
+ if (!(file->f_mode & FMODE_WRITE)) {
+ ret = -EPERM;
+ break;
+ }
+
if (copy_from_user(&buf, argp, sizeof(buf)))
ret = -EFAULT;
else
diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_main.c b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
index 40a44dcb3d9b..f414f5651dbd 100644
--- a/drivers/net/ethernet/cavium/thunder/nicvf_main.c
+++ b/drivers/net/ethernet/cavium/thunder/nicvf_main.c
@@ -2047,11 +2047,11 @@ static void nicvf_set_rx_mode_task(struct work_struct *work_arg)
/* Save message data locally to prevent them from
* being overwritten by next ndo_set_rx_mode call().
*/
- spin_lock(&nic->rx_mode_wq_lock);
+ spin_lock_bh(&nic->rx_mode_wq_lock);
mode = vf_work->mode;
mc = vf_work->mc;
vf_work->mc = NULL;
- spin_unlock(&nic->rx_mode_wq_lock);
+ spin_unlock_bh(&nic->rx_mode_wq_lock);
__nicvf_set_rx_mode_task(mode, mc, nic);
}
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
index 3177dd8ede8e..7a248cc1055a 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
@@ -2090,7 +2090,7 @@ close:
free:
fsl_mc_object_free(dpcon);
- return NULL;
+ return ERR_PTR(err);
}
static void free_dpcon(struct dpaa2_eth_priv *priv,
@@ -2114,8 +2114,8 @@ alloc_channel(struct dpaa2_eth_priv *priv)
return NULL;
channel->dpcon = setup_dpcon(priv);
- if (IS_ERR_OR_NULL(channel->dpcon)) {
- err = PTR_ERR_OR_ZERO(channel->dpcon);
+ if (IS_ERR(channel->dpcon)) {
+ err = PTR_ERR(channel->dpcon);
goto err_setup;
}
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index ed7e667d7eb2..3e41b20ed8eb 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -6194,9 +6194,18 @@ static void igb_reset_task(struct work_struct *work)
struct igb_adapter *adapter;
adapter = container_of(work, struct igb_adapter, reset_task);
+ rtnl_lock();
+ /* If we're already down or resetting, just bail */
+ if (test_bit(__IGB_DOWN, &adapter->state) ||
+ test_bit(__IGB_RESETTING, &adapter->state)) {
+ rtnl_unlock();
+ return;
+ }
+
igb_dump(adapter);
netdev_err(adapter->netdev, "Reset adapter\n");
igb_reinit_locked(adapter);
+ rtnl_unlock();
}
/**
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 997dc811382a..d01b3a1b40f4 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -171,11 +171,21 @@ static int mt7621_gmac0_rgmii_adjust(struct mtk_eth *eth,
return 0;
}
-static void mtk_gmac0_rgmii_adjust(struct mtk_eth *eth, int speed)
+static void mtk_gmac0_rgmii_adjust(struct mtk_eth *eth,
+ phy_interface_t interface, int speed)
{
u32 val;
int ret;
+ if (interface == PHY_INTERFACE_MODE_TRGMII) {
+ mtk_w32(eth, TRGMII_MODE, INTF_MODE);
+ val = 500000000;
+ ret = clk_set_rate(eth->clks[MTK_CLK_TRGPLL], val);
+ if (ret)
+ dev_err(eth->dev, "Failed to set trgmii pll: %d\n", ret);
+ return;
+ }
+
val = (speed == SPEED_1000) ?
INTF_MODE_RGMII_1000 : INTF_MODE_RGMII_10_100;
mtk_w32(eth, val, INTF_MODE);
@@ -262,10 +272,9 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode,
state->interface))
goto err_phy;
} else {
- if (state->interface !=
- PHY_INTERFACE_MODE_TRGMII)
- mtk_gmac0_rgmii_adjust(mac->hw,
- state->speed);
+ mtk_gmac0_rgmii_adjust(mac->hw,
+ state->interface,
+ state->speed);
/* mt7623_pad_clk_setup */
for (i = 0 ; i < NUM_TRGMII_CTRL; i++)
@@ -2869,6 +2878,8 @@ static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
eth->netdev[id]->irq = eth->irq[0];
eth->netdev[id]->dev.of_node = np;
+ eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH - MTK_RX_ETH_HLEN;
+
return 0;
free_netdev:
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index ca16ae8c8332..24bb721a12bc 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -531,12 +531,13 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net)
u32 hash;
struct hv_page_buffer pb[MAX_PAGE_BUFFER_COUNT];
- /* if VF is present and up then redirect packets
- * already called with rcu_read_lock_bh
+ /* If VF is present and up then redirect packets to it.
+ * Skip the VF if it is marked down or has no carrier.
+ * If netpoll is in uses, then VF can not be used either.
*/
vf_netdev = rcu_dereference_bh(net_device_ctx->vf_netdev);
if (vf_netdev && netif_running(vf_netdev) &&
- !netpoll_tx_running(net))
+ netif_carrier_ok(vf_netdev) && !netpoll_tx_running(net))
return netvsc_vf_xmit(net, vf_netdev, skb);
/* We will atmost need two pages to describe the rndis
diff --git a/drivers/net/usb/hso.c b/drivers/net/usb/hso.c
index 66a8b835aa94..7449b97a3c89 100644
--- a/drivers/net/usb/hso.c
+++ b/drivers/net/usb/hso.c
@@ -2260,12 +2260,14 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs,
minor = get_free_serial_index();
if (minor < 0)
- goto exit;
+ goto exit2;
/* register our minor number */
serial->parent->dev = tty_port_register_device_attr(&serial->port,
tty_drv, minor, &serial->parent->interface->dev,
serial->parent, hso_serial_dev_groups);
+ if (IS_ERR(serial->parent->dev))
+ goto exit2;
/* fill in specific data for later use */
serial->minor = minor;
@@ -2310,6 +2312,7 @@ static int hso_serial_common_create(struct hso_serial *serial, int num_urbs,
return 0;
exit:
hso_serial_tty_unregister(serial);
+exit2:
hso_serial_common_free(serial);
return -1;
}
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
index 1da99abc6ed1..71cc5b63d8ce 100644
--- a/drivers/net/usb/lan78xx.c
+++ b/drivers/net/usb/lan78xx.c
@@ -377,10 +377,6 @@ struct lan78xx_net {
struct tasklet_struct bh;
struct delayed_work wq;
- struct usb_host_endpoint *ep_blkin;
- struct usb_host_endpoint *ep_blkout;
- struct usb_host_endpoint *ep_intr;
-
int msg_enable;
struct urb *urb_intr;
@@ -2868,78 +2864,12 @@ lan78xx_start_xmit(struct sk_buff *skb, struct net_device *net)
return NETDEV_TX_OK;
}
-static int
-lan78xx_get_endpoints(struct lan78xx_net *dev, struct usb_interface *intf)
-{
- int tmp;
- struct usb_host_interface *alt = NULL;
- struct usb_host_endpoint *in = NULL, *out = NULL;
- struct usb_host_endpoint *status = NULL;
-
- for (tmp = 0; tmp < intf->num_altsetting; tmp++) {
- unsigned ep;
-
- in = NULL;
- out = NULL;
- status = NULL;
- alt = intf->altsetting + tmp;
-
- for (ep = 0; ep < alt->desc.bNumEndpoints; ep++) {
- struct usb_host_endpoint *e;
- int intr = 0;
-
- e = alt->endpoint + ep;
- switch (e->desc.bmAttributes) {
- case USB_ENDPOINT_XFER_INT:
- if (!usb_endpoint_dir_in(&e->desc))
- continue;
- intr = 1;
- /* FALLTHROUGH */
- case USB_ENDPOINT_XFER_BULK:
- break;
- default:
- continue;
- }
- if (usb_endpoint_dir_in(&e->desc)) {
- if (!intr && !in)
- in = e;
- else if (intr && !status)
- status = e;
- } else {
- if (!out)
- out = e;
- }
- }
- if (in && out)
- break;
- }
- if (!alt || !in || !out)
- return -EINVAL;
-
- dev->pipe_in = usb_rcvbulkpipe(dev->udev,
- in->desc.bEndpointAddress &
- USB_ENDPOINT_NUMBER_MASK);
- dev->pipe_out = usb_sndbulkpipe(dev->udev,
- out->desc.bEndpointAddress &
- USB_ENDPOINT_NUMBER_MASK);
- dev->ep_intr = status;
-
- return 0;
-}
-
static int lan78xx_bind(struct lan78xx_net *dev, struct usb_interface *intf)
{
struct lan78xx_priv *pdata = NULL;
int ret;
int i;
- ret = lan78xx_get_endpoints(dev, intf);
- if (ret) {
- netdev_warn(dev->net, "lan78xx_get_endpoints failed: %d\n",
- ret);
- return ret;
- }
-
dev->data[0] = (unsigned long)kzalloc(sizeof(*pdata), GFP_KERNEL);
pdata = (struct lan78xx_priv *)(dev->data[0]);
@@ -3708,6 +3638,7 @@ static void lan78xx_stat_monitor(struct timer_list *t)
static int lan78xx_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
+ struct usb_host_endpoint *ep_blkin, *ep_blkout, *ep_intr;
struct lan78xx_net *dev;
struct net_device *netdev;
struct usb_device *udev;
@@ -3756,6 +3687,34 @@ static int lan78xx_probe(struct usb_interface *intf,
mutex_init(&dev->stats.access_lock);
+ if (intf->cur_altsetting->desc.bNumEndpoints < 3) {
+ ret = -ENODEV;
+ goto out2;
+ }
+
+ dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
+ ep_blkin = usb_pipe_endpoint(udev, dev->pipe_in);
+ if (!ep_blkin || !usb_endpoint_is_bulk_in(&ep_blkin->desc)) {
+ ret = -ENODEV;
+ goto out2;
+ }
+
+ dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
+ ep_blkout = usb_pipe_endpoint(udev, dev->pipe_out);
+ if (!ep_blkout || !usb_endpoint_is_bulk_out(&ep_blkout->desc)) {
+ ret = -ENODEV;
+ goto out2;
+ }
+
+ ep_intr = &intf->cur_altsetting->endpoint[2];
+ if (!usb_endpoint_is_int_in(&ep_intr->desc)) {
+ ret = -ENODEV;
+ goto out2;
+ }
+
+ dev->pipe_intr = usb_rcvintpipe(dev->udev,
+ usb_endpoint_num(&ep_intr->desc));
+
ret = lan78xx_bind(dev, intf);
if (ret < 0)
goto out2;
@@ -3767,23 +3726,7 @@ static int lan78xx_probe(struct usb_interface *intf,
netdev->max_mtu = MAX_SINGLE_PACKET_SIZE;
netif_set_gso_max_size(netdev, MAX_SINGLE_PACKET_SIZE - MAX_HEADER);
- if (intf->cur_altsetting->desc.bNumEndpoints < 3) {
- ret = -ENODEV;
- goto out3;
- }
-
- dev->ep_blkin = (intf->cur_altsetting)->endpoint + 0;
- dev->ep_blkout = (intf->cur_altsetting)->endpoint + 1;
- dev->ep_intr = (intf->cur_altsetting)->endpoint + 2;
-
- dev->pipe_in = usb_rcvbulkpipe(udev, BULK_IN_PIPE);
- dev->pipe_out = usb_sndbulkpipe(udev, BULK_OUT_PIPE);
-
- dev->pipe_intr = usb_rcvintpipe(dev->udev,
- dev->ep_intr->desc.bEndpointAddress &
- USB_ENDPOINT_NUMBER_MASK);
- period = dev->ep_intr->desc.bInterval;
-
+ period = ep_intr->desc.bInterval;
maxp = usb_maxpacket(dev->udev, dev->pipe_intr, 0);
buf = kmalloc(maxp, GFP_KERNEL);
if (buf) {
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
index b49b6f0cee50..f9edc76580d9 100644
--- a/drivers/net/vxlan.c
+++ b/drivers/net/vxlan.c
@@ -1225,6 +1225,7 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
for (h = 0; h < FDB_HASH_SIZE; ++h) {
struct vxlan_fdb *f;
+ rcu_read_lock();
hlist_for_each_entry_rcu(f, &vxlan->fdb_head[h], hlist) {
struct vxlan_rdst *rd;
@@ -1237,12 +1238,15 @@ static int vxlan_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
cb->nlh->nlmsg_seq,
RTM_NEWNEIGH,
NLM_F_MULTI, rd);
- if (err < 0)
+ if (err < 0) {
+ rcu_read_unlock();
goto out;
+ }
skip:
*idx += 1;
}
}
+ rcu_read_unlock();
}
out:
return err;
@@ -2546,7 +2550,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
ndst = &rt->dst;
skb_tunnel_check_pmtu(skb, ndst, VXLAN_HEADROOM);
- tos = ip_tunnel_ecn_encap(RT_TOS(tos), old_iph, skb);
+ tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
ttl = ttl ? : ip4_dst_hoplimit(&rt->dst);
err = vxlan_build_skb(skb, ndst, sizeof(struct iphdr),
vni, md, flags, udp_sum);
@@ -2586,7 +2590,7 @@ static void vxlan_xmit_one(struct sk_buff *skb, struct net_device *dev,
skb_tunnel_check_pmtu(skb, ndst, VXLAN6_HEADROOM);
- tos = ip_tunnel_ecn_encap(RT_TOS(tos), old_iph, skb);
+ tos = ip_tunnel_ecn_encap(tos, old_iph, skb);
ttl = ttl ? : ip6_dst_hoplimit(ndst);
skb_scrub_packet(skb, xnet);
err = vxlan_build_skb(skb, ndst, sizeof(struct ipv6hdr),
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index a13cae190196..ee7669f23cff 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -3140,6 +3140,8 @@ static const struct pci_device_id nvme_id_table[] = {
{ PCI_DEVICE(0x1cc1, 0x8201), /* ADATA SX8200PNP 512GB */
.driver_data = NVME_QUIRK_NO_DEEPEST_PS |
NVME_QUIRK_IGNORE_DEV_SUBNQN, },
+ { PCI_DEVICE(0x1c5c, 0x1504), /* SK Hynix PC400 */
+ .driver_data = NVME_QUIRK_DISABLE_WRITE_ZEROES, },
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001),
.driver_data = NVME_QUIRK_SINGLE_VECTOR },
diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pci-tegra.c
index ac93f5a0398e..b71e753419c2 100644
--- a/drivers/pci/controller/pci-tegra.c
+++ b/drivers/pci/controller/pci-tegra.c
@@ -181,13 +181,6 @@
#define AFI_PEXBIAS_CTRL_0 0x168
-#define RP_PRIV_XP_DL 0x00000494
-#define RP_PRIV_XP_DL_GEN2_UPD_FC_TSHOLD (0x1ff << 1)
-
-#define RP_RX_HDR_LIMIT 0x00000e00
-#define RP_RX_HDR_LIMIT_PW_MASK (0xff << 8)
-#define RP_RX_HDR_LIMIT_PW (0x0e << 8)
-
#define RP_ECTL_2_R1 0x00000e84
#define RP_ECTL_2_R1_RX_CTLE_1C_MASK 0xffff
@@ -323,7 +316,6 @@ struct tegra_pcie_soc {
bool program_uphy;
bool update_clamp_threshold;
bool program_deskew_time;
- bool raw_violation_fixup;
bool update_fc_timer;
bool has_cache_bars;
struct {
@@ -669,23 +661,6 @@ static void tegra_pcie_apply_sw_fixup(struct tegra_pcie_port *port)
writel(value, port->base + RP_VEND_CTL0);
}
- /* Fixup for read after write violation. */
- if (soc->raw_violation_fixup) {
- value = readl(port->base + RP_RX_HDR_LIMIT);
- value &= ~RP_RX_HDR_LIMIT_PW_MASK;
- value |= RP_RX_HDR_LIMIT_PW;
- writel(value, port->base + RP_RX_HDR_LIMIT);
-
- value = readl(port->base + RP_PRIV_XP_DL);
- value |= RP_PRIV_XP_DL_GEN2_UPD_FC_TSHOLD;
- writel(value, port->base + RP_PRIV_XP_DL);
-
- value = readl(port->base + RP_VEND_XP);
- value &= ~RP_VEND_XP_UPDATE_FC_THRESHOLD_MASK;
- value |= soc->update_fc_threshold;
- writel(value, port->base + RP_VEND_XP);
- }
-
if (soc->update_fc_timer) {
value = readl(port->base + RP_VEND_XP);
value &= ~RP_VEND_XP_UPDATE_FC_THRESHOLD_MASK;
@@ -2511,7 +2486,6 @@ static const struct tegra_pcie_soc tegra20_pcie = {
.program_uphy = true,
.update_clamp_threshold = false,
.program_deskew_time = false,
- .raw_violation_fixup = false,
.update_fc_timer = false,
.has_cache_bars = true,
.ectl.enable = false,
@@ -2541,7 +2515,6 @@ static const struct tegra_pcie_soc tegra30_pcie = {
.program_uphy = true,
.update_clamp_threshold = false,
.program_deskew_time = false,
- .raw_violation_fixup = false,
.update_fc_timer = false,
.has_cache_bars = false,
.ectl.enable = false,
@@ -2554,8 +2527,6 @@ static const struct tegra_pcie_soc tegra124_pcie = {
.pads_pll_ctl = PADS_PLL_CTL_TEGRA30,
.tx_ref_sel = PADS_PLL_CTL_TXCLKREF_BUF_EN,
.pads_refclk_cfg0 = 0x44ac44ac,
- /* FC threshold is bit[25:18] */
- .update_fc_threshold = 0x03fc0000,
.has_pex_clkreq_en = true,
.has_pex_bias_ctrl = true,
.has_intr_prsnt_sense = true,
@@ -2565,7 +2536,6 @@ static const struct tegra_pcie_soc tegra124_pcie = {
.program_uphy = true,
.update_clamp_threshold = true,
.program_deskew_time = false,
- .raw_violation_fixup = true,
.update_fc_timer = false,
.has_cache_bars = false,
.ectl.enable = false,
@@ -2589,7 +2559,6 @@ static const struct tegra_pcie_soc tegra210_pcie = {
.program_uphy = true,
.update_clamp_threshold = true,
.program_deskew_time = true,
- .raw_violation_fixup = false,
.update_fc_timer = true,
.has_cache_bars = false,
.ectl = {
@@ -2631,7 +2600,6 @@ static const struct tegra_pcie_soc tegra186_pcie = {
.program_uphy = false,
.update_clamp_threshold = false,
.program_deskew_time = false,
- .raw_violation_fixup = false,
.update_fc_timer = false,
.has_cache_bars = false,
.ectl.enable = false,
diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
index c6695354b123..19b0cc5ea33f 100644
--- a/drivers/staging/android/ashmem.c
+++ b/drivers/staging/android/ashmem.c
@@ -95,6 +95,15 @@ static DEFINE_MUTEX(ashmem_mutex);
static struct kmem_cache *ashmem_area_cachep __read_mostly;
static struct kmem_cache *ashmem_range_cachep __read_mostly;
+/*
+ * A separate lockdep class for the backing shmem inodes to resolve the lockdep
+ * warning about the race between kswapd taking fs_reclaim before inode_lock
+ * and write syscall taking inode_lock and then fs_reclaim.
+ * Note that such race is impossible because ashmem does not support write
+ * syscalls operating on the backing shmem.
+ */
+static struct lock_class_key backing_shmem_inode_class;
+
static inline unsigned long range_size(struct ashmem_range *range)
{
return range->pgend - range->pgstart + 1;
@@ -396,6 +405,7 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
if (!asma->file) {
char *name = ASHMEM_NAME_DEF;
struct file *vmfile;
+ struct inode *inode;
if (asma->name[ASHMEM_NAME_PREFIX_LEN] != '\0')
name = asma->name;
@@ -407,6 +417,8 @@ static int ashmem_mmap(struct file *file, struct vm_area_struct *vma)
goto out;
}
vmfile->f_mode |= FMODE_LSEEK;
+ inode = file_inode(vmfile);
+ lockdep_set_class(&inode->i_rwsem, &backing_shmem_inode_class);
asma->file = vmfile;
/*
* override mmap operation of the vmfile so that it can't be
diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c b/drivers/staging/rtl8188eu/core/rtw_mlme.c
index 1ec3b237212e..7cee7b4d5270 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c
@@ -1729,9 +1729,11 @@ int rtw_restruct_sec_ie(struct adapter *adapter, u8 *in_ie, u8 *out_ie, uint in_
if ((ndisauthmode == Ndis802_11AuthModeWPA) ||
(ndisauthmode == Ndis802_11AuthModeWPAPSK))
authmode = _WPA_IE_ID_;
- if ((ndisauthmode == Ndis802_11AuthModeWPA2) ||
+ else if ((ndisauthmode == Ndis802_11AuthModeWPA2) ||
(ndisauthmode == Ndis802_11AuthModeWPA2PSK))
authmode = _WPA2_IE_ID_;
+ else
+ authmode = 0x0;
if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
memcpy(out_ie+ielength, psecuritypriv->wps_ie, psecuritypriv->wps_ie_len);
diff --git a/drivers/staging/rtl8712/hal_init.c b/drivers/staging/rtl8712/hal_init.c
index 40145c0338e4..42c0a3c947f1 100644
--- a/drivers/staging/rtl8712/hal_init.c
+++ b/drivers/staging/rtl8712/hal_init.c
@@ -33,7 +33,6 @@ static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
{
struct _adapter *adapter = context;
- complete(&adapter->rtl8712_fw_ready);
if (!firmware) {
struct usb_device *udev = adapter->dvobjpriv.pusbdev;
struct usb_interface *usb_intf = adapter->pusb_intf;
@@ -41,11 +40,13 @@ static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context)
dev_err(&udev->dev, "r8712u: Firmware request failed\n");
usb_put_dev(udev);
usb_set_intfdata(usb_intf, NULL);
+ complete(&adapter->rtl8712_fw_ready);
return;
}
adapter->fw = firmware;
/* firmware available - start netdev */
register_netdev(adapter->pnetdev);
+ complete(&adapter->rtl8712_fw_ready);
}
static const char firmware_file[] = "rtlwifi/rtl8712u.bin";
diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c
index a87562f632a7..2fcd65260f4c 100644
--- a/drivers/staging/rtl8712/usb_intf.c
+++ b/drivers/staging/rtl8712/usb_intf.c
@@ -595,13 +595,17 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
if (pnetdev) {
struct _adapter *padapter = netdev_priv(pnetdev);
- usb_set_intfdata(pusb_intf, NULL);
- release_firmware(padapter->fw);
/* never exit with a firmware callback pending */
wait_for_completion(&padapter->rtl8712_fw_ready);
+ pnetdev = usb_get_intfdata(pusb_intf);
+ usb_set_intfdata(pusb_intf, NULL);
+ if (!pnetdev)
+ goto firmware_load_fail;
+ release_firmware(padapter->fw);
if (drvpriv.drv_registered)
padapter->surprise_removed = true;
- unregister_netdev(pnetdev); /* will call netdev_close() */
+ if (pnetdev->reg_state != NETREG_UNINITIALIZED)
+ unregister_netdev(pnetdev); /* will call netdev_close() */
flush_scheduled_work();
udelay(1);
/* Stop driver mlme relation timer */
@@ -614,6 +618,7 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
*/
usb_put_dev(udev);
}
+firmware_load_fail:
/* If we didn't unplug usb dongle and remove/insert module, driver
* fails on sitesurvey for the first time when device is up.
* Reset usb port for sitesurvey fail issue.
diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c
index 1119fa3e1571..00dfe42c9b29 100644
--- a/drivers/usb/host/xhci-pci.c
+++ b/drivers/usb/host/xhci-pci.c
@@ -56,7 +56,10 @@
#define PCI_DEVICE_ID_AMD_PROMONTORYA_3 0x43ba
#define PCI_DEVICE_ID_AMD_PROMONTORYA_2 0x43bb
#define PCI_DEVICE_ID_AMD_PROMONTORYA_1 0x43bc
+#define PCI_DEVICE_ID_ASMEDIA_1042_XHCI 0x1042
#define PCI_DEVICE_ID_ASMEDIA_1042A_XHCI 0x1142
+#define PCI_DEVICE_ID_ASMEDIA_1142_XHCI 0x1242
+#define PCI_DEVICE_ID_ASMEDIA_2142_XHCI 0x2142
static const char hcd_name[] = "xhci_hcd";
@@ -244,13 +247,14 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)
xhci->quirks |= XHCI_BROKEN_STREAMS;
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
- pdev->device == 0x1042)
+ pdev->device == PCI_DEVICE_ID_ASMEDIA_1042_XHCI)
xhci->quirks |= XHCI_BROKEN_STREAMS;
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
- pdev->device == 0x1142)
+ pdev->device == PCI_DEVICE_ID_ASMEDIA_1042A_XHCI)
xhci->quirks |= XHCI_TRUST_TX_LENGTH;
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
- pdev->device == 0x2142)
+ (pdev->device == PCI_DEVICE_ID_ASMEDIA_1142_XHCI ||
+ pdev->device == PCI_DEVICE_ID_ASMEDIA_2142_XHCI))
xhci->quirks |= XHCI_NO_64BIT_SUPPORT;
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA &&
diff --git a/drivers/usb/misc/iowarrior.c b/drivers/usb/misc/iowarrior.c
index dce20301e367..103c69c692ba 100644
--- a/drivers/usb/misc/iowarrior.c
+++ b/drivers/usb/misc/iowarrior.c
@@ -2,8 +2,9 @@
/*
* Native support for the I/O-Warrior USB devices
*
- * Copyright (c) 2003-2005 Code Mercenaries GmbH
- * written by Christian Lucht
+ * Copyright (c) 2003-2005, 2020 Code Mercenaries GmbH
+ * written by Christian Lucht and
+ * Christoph Jung
*
* based on
@@ -802,14 +803,28 @@ static int iowarrior_probe(struct usb_interface *interface,
/* we have to check the report_size often, so remember it in the endianness suitable for our machine */
dev->report_size = usb_endpoint_maxp(dev->int_in_endpoint);
- if ((dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) &&
- ((dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56) ||
- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW56AM) ||
- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28) ||
- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW28L) ||
- (dev->product_id == USB_DEVICE_ID_CODEMERCS_IOW100)))
- /* IOWarrior56 has wMaxPacketSize different from report size */
- dev->report_size = 7;
+
+ /*
+ * Some devices need the report size to be different than the
+ * endpoint size.
+ */
+ if (dev->interface->cur_altsetting->desc.bInterfaceNumber == 0) {
+ switch (dev->product_id) {
+ case USB_DEVICE_ID_CODEMERCS_IOW56:
+ case USB_DEVICE_ID_CODEMERCS_IOW56AM:
+ dev->report_size = 7;
+ break;
+
+ case USB_DEVICE_ID_CODEMERCS_IOW28:
+ case USB_DEVICE_ID_CODEMERCS_IOW28L:
+ dev->report_size = 4;
+ break;
+
+ case USB_DEVICE_ID_CODEMERCS_IOW100:
+ dev->report_size = 13;
+ break;
+ }
+ }
/* create the urb and buffer for reading */
dev->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
index d147feae83e6..0f60363c1bbc 100644
--- a/drivers/usb/serial/qcserial.c
+++ b/drivers/usb/serial/qcserial.c
@@ -155,6 +155,7 @@ static const struct usb_device_id id_table[] = {
{DEVICE_SWI(0x1199, 0x9056)}, /* Sierra Wireless Modem */
{DEVICE_SWI(0x1199, 0x9060)}, /* Sierra Wireless Modem */
{DEVICE_SWI(0x1199, 0x9061)}, /* Sierra Wireless Modem */
+ {DEVICE_SWI(0x1199, 0x9062)}, /* Sierra Wireless EM7305 QDL */
{DEVICE_SWI(0x1199, 0x9063)}, /* Sierra Wireless EM7305 */
{DEVICE_SWI(0x1199, 0x9070)}, /* Sierra Wireless MC74xx */
{DEVICE_SWI(0x1199, 0x9071)}, /* Sierra Wireless MC74xx */
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
index bfaa9ec4bc1f..e079b910feb2 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
@@ -251,6 +251,10 @@ static void vgacon_scrollback_update(struct vc_data *c, int t, int count)
p = (void *) (c->vc_origin + t * c->vc_size_row);
while (count--) {
+ if ((vgacon_scrollback_cur->tail + c->vc_size_row) >
+ vgacon_scrollback_cur->size)
+ vgacon_scrollback_cur->tail = 0;
+
scr_memcpyw(vgacon_scrollback_cur->data +
vgacon_scrollback_cur->tail,
p, c->vc_size_row);
diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
index 7252d22dd117..bfc5c4c5a26a 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c
@@ -833,7 +833,7 @@ static const struct dss_features omap34xx_dss_feats = {
};
static const struct dss_features omap3630_dss_feats = {
- .fck_div_max = 32,
+ .fck_div_max = 31,
.dss_fck_multiplier = 1,
.parent_clk_name = "dpll4_ck",
.dpi_select_source = &dss_dpi_select_source_omap2_omap3,
diff --git a/fs/io_uring.c b/fs/io_uring.c
index e0200406765c..be3d595a607f 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -279,6 +279,7 @@ struct sqe_submit {
bool has_user;
bool needs_lock;
bool needs_fixed_file;
+ u8 opcode;
};
/*
@@ -505,7 +506,7 @@ static inline void io_queue_async_work(struct io_ring_ctx *ctx,
int rw = 0;
if (req->submit.sqe) {
- switch (req->submit.sqe->opcode) {
+ switch (req->submit.opcode) {
case IORING_OP_WRITEV:
case IORING_OP_WRITE_FIXED:
rw = !(req->rw.ki_flags & IOCB_DIRECT);
@@ -1254,23 +1255,15 @@ static int io_import_fixed(struct io_ring_ctx *ctx, int rw,
}
static ssize_t io_import_iovec(struct io_ring_ctx *ctx, int rw,
- const struct sqe_submit *s, struct iovec **iovec,
+ struct io_kiocb *req, struct iovec **iovec,
struct iov_iter *iter)
{
- const struct io_uring_sqe *sqe = s->sqe;
+ const struct io_uring_sqe *sqe = req->submit.sqe;
void __user *buf = u64_to_user_ptr(READ_ONCE(sqe->addr));
size_t sqe_len = READ_ONCE(sqe->len);
u8 opcode;
- /*
- * We're reading ->opcode for the second time, but the first read
- * doesn't care whether it's _FIXED or not, so it doesn't matter
- * whether ->opcode changes concurrently. The first read does care
- * about whether it is a READ or a WRITE, so we don't trust this read
- * for that purpose and instead let the caller pass in the read/write
- * flag.
- */
- opcode = READ_ONCE(sqe->opcode);
+ opcode = req->submit.opcode;
if (opcode == IORING_OP_READ_FIXED ||
opcode == IORING_OP_WRITE_FIXED) {
ssize_t ret = io_import_fixed(ctx, rw, sqe, iter);
@@ -1278,7 +1271,7 @@ static ssize_t io_import_iovec(struct io_ring_ctx *ctx, int rw,
return ret;
}
- if (!s->has_user)
+ if (!req->submit.has_user)
return -EFAULT;
#ifdef CONFIG_COMPAT
@@ -1425,7 +1418,7 @@ static int io_read(struct io_kiocb *req, const struct sqe_submit *s,
if (unlikely(!(file->f_mode & FMODE_READ)))
return -EBADF;
- ret = io_import_iovec(req->ctx, READ, s, &iovec, &iter);
+ ret = io_import_iovec(req->ctx, READ, req, &iovec, &iter);
if (ret < 0)
return ret;
@@ -1490,7 +1483,7 @@ static int io_write(struct io_kiocb *req, const struct sqe_submit *s,
if (unlikely(!(file->f_mode & FMODE_WRITE)))
return -EBADF;
- ret = io_import_iovec(req->ctx, WRITE, s, &iovec, &iter);
+ ret = io_import_iovec(req->ctx, WRITE, req, &iovec, &iter);
if (ret < 0)
return ret;
@@ -2109,15 +2102,14 @@ static int io_req_defer(struct io_ring_ctx *ctx, struct io_kiocb *req,
static int __io_submit_sqe(struct io_ring_ctx *ctx, struct io_kiocb *req,
const struct sqe_submit *s, bool force_nonblock)
{
- int ret, opcode;
+ int ret;
req->user_data = READ_ONCE(s->sqe->user_data);
if (unlikely(s->index >= ctx->sq_entries))
return -EINVAL;
- opcode = READ_ONCE(s->sqe->opcode);
- switch (opcode) {
+ switch (req->submit.opcode) {
case IORING_OP_NOP:
ret = io_nop(req, req->user_data);
break;
@@ -2181,10 +2173,10 @@ static int __io_submit_sqe(struct io_ring_ctx *ctx, struct io_kiocb *req,
return 0;
}
-static struct async_list *io_async_list_from_sqe(struct io_ring_ctx *ctx,
- const struct io_uring_sqe *sqe)
+static struct async_list *io_async_list_from_req(struct io_ring_ctx *ctx,
+ struct io_kiocb *req)
{
- switch (sqe->opcode) {
+ switch (req->submit.opcode) {
case IORING_OP_READV:
case IORING_OP_READ_FIXED:
return &ctx->pending_async[READ];
@@ -2196,12 +2188,10 @@ static struct async_list *io_async_list_from_sqe(struct io_ring_ctx *ctx,
}
}
-static inline bool io_sqe_needs_user(const struct io_uring_sqe *sqe)
+static inline bool io_req_needs_user(struct io_kiocb *req)
{
- u8 opcode = READ_ONCE(sqe->opcode);
-
- return !(opcode == IORING_OP_READ_FIXED ||
- opcode == IORING_OP_WRITE_FIXED);
+ return !(req->submit.opcode == IORING_OP_READ_FIXED ||
+ req->submit.opcode == IORING_OP_WRITE_FIXED);
}
static void io_sq_wq_submit_work(struct work_struct *work)
@@ -2217,7 +2207,7 @@ static void io_sq_wq_submit_work(struct work_struct *work)
int ret;
old_cred = override_creds(ctx->creds);
- async_list = io_async_list_from_sqe(ctx, req->submit.sqe);
+ async_list = io_async_list_from_req(ctx, req);
allow_kernel_signal(SIGINT);
restart:
@@ -2239,9 +2229,10 @@ restart:
}
ret = 0;
- if (io_sqe_needs_user(sqe) && !cur_mm) {
+ if (io_req_needs_user(req) && !cur_mm) {
if (!mmget_not_zero(ctx->sqo_mm)) {
ret = -EFAULT;
+ goto end_req;
} else {
cur_mm = ctx->sqo_mm;
use_mm(cur_mm);
@@ -2387,11 +2378,9 @@ static bool io_add_to_prev_work(struct async_list *list, struct io_kiocb *req)
return ret;
}
-static bool io_op_needs_file(const struct io_uring_sqe *sqe)
+static bool io_op_needs_file(struct io_kiocb *req)
{
- int op = READ_ONCE(sqe->opcode);
-
- switch (op) {
+ switch (req->submit.opcode) {
case IORING_OP_NOP:
case IORING_OP_POLL_REMOVE:
case IORING_OP_TIMEOUT:
@@ -2419,7 +2408,7 @@ static int io_req_set_file(struct io_ring_ctx *ctx, const struct sqe_submit *s,
*/
req->sequence = s->sequence;
- if (!io_op_needs_file(s->sqe))
+ if (!io_op_needs_file(req))
return 0;
if (flags & IOSQE_FIXED_FILE) {
@@ -2460,7 +2449,7 @@ static int __io_queue_sqe(struct io_ring_ctx *ctx, struct io_kiocb *req,
s->sqe = sqe_copy;
memcpy(&req->submit, s, sizeof(*s));
- list = io_async_list_from_sqe(ctx, s->sqe);
+ list = io_async_list_from_req(ctx, req);
if (!io_add_to_prev_work(list, req)) {
if (list)
atomic_inc(&list->cnt);
@@ -2582,7 +2571,7 @@ err:
req->user_data = s->sqe->user_data;
#if defined(CONFIG_NET)
- switch (READ_ONCE(s->sqe->opcode)) {
+ switch (req->submit.opcode) {
case IORING_OP_SENDMSG:
case IORING_OP_RECVMSG:
spin_lock(¤t->fs->lock);
@@ -2697,6 +2686,7 @@ static bool io_get_sqring(struct io_ring_ctx *ctx, struct sqe_submit *s)
if (head < ctx->sq_entries) {
s->index = head;
s->sqe = &ctx->sq_sqes[head];
+ s->opcode = READ_ONCE(s->sqe->opcode);
s->sequence = ctx->cached_sq_head;
ctx->cached_sq_head++;
return true;
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 533d0fc3c96b..d6f244559e75 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3530,17 +3530,17 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
u32 zzz = 0;
int pad;
+ /*
+ * svcrdma requires every READ payload to start somewhere
+ * in xdr->pages.
+ */
+ if (xdr->iov == xdr->buf->head) {
+ xdr->iov = NULL;
+ xdr->end = xdr->p;
+ }
+
len = maxcount;
v = 0;
-
- thislen = min_t(long, len, ((void *)xdr->end - (void *)xdr->p));
- p = xdr_reserve_space(xdr, (thislen+3)&~3);
- WARN_ON_ONCE(!p);
- resp->rqstp->rq_vec[v].iov_base = p;
- resp->rqstp->rq_vec[v].iov_len = thislen;
- v++;
- len -= thislen;
-
while (len) {
thislen = min_t(long, len, PAGE_SIZE);
p = xdr_reserve_space(xdr, (thislen+3)&~3);
@@ -3559,6 +3559,8 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp,
read->rd_length = maxcount;
if (nfserr)
return nfserr;
+ if (svc_encode_read_payload(resp->rqstp, starting_len + 8, maxcount))
+ return nfserr_io;
xdr_truncate_encode(xdr, starting_len + 8 + ((maxcount+3)&~3));
tmp = htonl(eof);
diff --git a/fs/xattr.c b/fs/xattr.c
index f8ef34db162f..fb2a563529f2 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -204,10 +204,22 @@ int __vfs_setxattr_noperm(struct dentry *dentry, const char *name,
return error;
}
-
+/**
+ * __vfs_setxattr_locked: set an extended attribute while holding the inode
+ * lock
+ *
+ * @dentry - object to perform setxattr on
+ * @name - xattr name to set
+ * @value - value to set @name to
+ * @size - size of @value
+ * @flags - flags to pass into filesystem operations
+ * @delegated_inode - on return, will contain an inode pointer that
+ * a delegation was broken on, NULL if none.
+ */
int
-vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
- size_t size, int flags)
+__vfs_setxattr_locked(struct dentry *dentry, const char *name,
+ const void *value, size_t size, int flags,
+ struct inode **delegated_inode)
{
struct inode *inode = dentry->d_inode;
int error;
@@ -216,15 +228,40 @@ vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
if (error)
return error;
- inode_lock(inode);
error = security_inode_setxattr(dentry, name, value, size, flags);
if (error)
goto out;
+ error = try_break_deleg(inode, delegated_inode);
+ if (error)
+ goto out;
+
error = __vfs_setxattr_noperm(dentry, name, value, size, flags);
out:
+ return error;
+}
+EXPORT_SYMBOL_GPL(__vfs_setxattr_locked);
+
+int
+vfs_setxattr(struct dentry *dentry, const char *name, const void *value,
+ size_t size, int flags)
+{
+ struct inode *inode = dentry->d_inode;
+ struct inode *delegated_inode = NULL;
+ int error;
+
+retry_deleg:
+ inode_lock(inode);
+ error = __vfs_setxattr_locked(dentry, name, value, size, flags,
+ &delegated_inode);
inode_unlock(inode);
+
+ if (delegated_inode) {
+ error = break_deleg_wait(&delegated_inode);
+ if (!error)
+ goto retry_deleg;
+ }
return error;
}
EXPORT_SYMBOL_NS_GPL(vfs_setxattr, ANDROID_GKI_VFS_EXPORT_ONLY);
@@ -378,8 +415,18 @@ __vfs_removexattr(struct dentry *dentry, const char *name)
}
EXPORT_SYMBOL(__vfs_removexattr);
+/**
+ * __vfs_removexattr_locked: set an extended attribute while holding the inode
+ * lock
+ *
+ * @dentry - object to perform setxattr on
+ * @name - name of xattr to remove
+ * @delegated_inode - on return, will contain an inode pointer that
+ * a delegation was broken on, NULL if none.
+ */
int
-vfs_removexattr(struct dentry *dentry, const char *name)
+__vfs_removexattr_locked(struct dentry *dentry, const char *name,
+ struct inode **delegated_inode)
{
struct inode *inode = dentry->d_inode;
int error;
@@ -388,11 +435,14 @@ vfs_removexattr(struct dentry *dentry, const char *name)
if (error)
return error;
- inode_lock(inode);
error = security_inode_removexattr(dentry, name);
if (error)
goto out;
+ error = try_break_deleg(inode, delegated_inode);
+ if (error)
+ goto out;
+
error = __vfs_removexattr(dentry, name);
if (!error) {
@@ -401,12 +451,32 @@ vfs_removexattr(struct dentry *dentry, const char *name)
}
out:
+ return error;
+}
+EXPORT_SYMBOL_GPL(__vfs_removexattr_locked);
+
+int
+vfs_removexattr(struct dentry *dentry, const char *name)
+{
+ struct inode *inode = dentry->d_inode;
+ struct inode *delegated_inode = NULL;
+ int error;
+
+retry_deleg:
+ inode_lock(inode);
+ error = __vfs_removexattr_locked(dentry, name, &delegated_inode);
inode_unlock(inode);
+
+ if (delegated_inode) {
+ error = break_deleg_wait(&delegated_inode);
+ if (!error)
+ goto retry_deleg;
+ }
+
return error;
}
EXPORT_SYMBOL_GPL(vfs_removexattr);
-
/*
* Extended attribute SET operations
*/
diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
index b4a017093b69..67d9b5a37460 100644
--- a/include/linux/hyperv.h
+++ b/include/linux/hyperv.h
@@ -423,6 +423,8 @@ enum vmbus_channel_message_type {
CHANNELMSG_19 = 19,
CHANNELMSG_20 = 20,
CHANNELMSG_TL_CONNECT_REQUEST = 21,
+ CHANNELMSG_22 = 22,
+ CHANNELMSG_TL_CONNECT_RESULT = 23,
CHANNELMSG_COUNT
};
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index 2b9c506a5282..3de7fa8a7bf5 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -318,7 +318,7 @@ struct pcmcia_device_id {
#define INPUT_DEVICE_ID_LED_MAX 0x0f
#define INPUT_DEVICE_ID_SND_MAX 0x07
#define INPUT_DEVICE_ID_FF_MAX 0x7f
-#define INPUT_DEVICE_ID_SW_MAX 0x20
+#define INPUT_DEVICE_ID_SW_MAX 0x10
#define INPUT_DEVICE_ID_PROP_MAX 0x1f
#define INPUT_DEVICE_ID_MATCH_BUS 1
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index 1afe38eb33f7..82665ff360fd 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -517,6 +517,9 @@ void svc_wake_up(struct svc_serv *);
void svc_reserve(struct svc_rqst *rqstp, int space);
struct svc_pool * svc_pool_for_cpu(struct svc_serv *serv, int cpu);
char * svc_print_addr(struct svc_rqst *, char *, size_t);
+int svc_encode_read_payload(struct svc_rqst *rqstp,
+ unsigned int offset,
+ unsigned int length);
unsigned int svc_fill_write_vector(struct svc_rqst *rqstp,
struct page **pages,
struct kvec *first, size_t total);
diff --git a/include/linux/sunrpc/svc_rdma.h b/include/linux/sunrpc/svc_rdma.h
index fddad9f5b390..26f282e5e082 100644
--- a/include/linux/sunrpc/svc_rdma.h
+++ b/include/linux/sunrpc/svc_rdma.h
@@ -137,6 +137,8 @@ struct svc_rdma_recv_ctxt {
unsigned int rc_page_count;
unsigned int rc_hdr_count;
u32 rc_inv_rkey;
+ unsigned int rc_read_payload_offset;
+ unsigned int rc_read_payload_length;
struct page *rc_pages[RPCSVC_MAXPAGES];
};
@@ -171,7 +173,9 @@ extern int svc_rdma_recv_read_chunk(struct svcxprt_rdma *rdma,
struct svc_rqst *rqstp,
struct svc_rdma_recv_ctxt *head, __be32 *p);
extern int svc_rdma_send_write_chunk(struct svcxprt_rdma *rdma,
- __be32 *wr_ch, struct xdr_buf *xdr);
+ __be32 *wr_ch, struct xdr_buf *xdr,
+ unsigned int offset,
+ unsigned long length);
extern int svc_rdma_send_reply_chunk(struct svcxprt_rdma *rdma,
__be32 *rp_ch, bool writelist,
struct xdr_buf *xdr);
@@ -190,6 +194,8 @@ extern int svc_rdma_map_reply_msg(struct svcxprt_rdma *rdma,
struct svc_rdma_send_ctxt *ctxt,
struct xdr_buf *xdr, __be32 *wr_lst);
extern int svc_rdma_sendto(struct svc_rqst *);
+extern int svc_rdma_read_payload(struct svc_rqst *rqstp, unsigned int offset,
+ unsigned int length);
/* svc_rdma_transport.c */
extern int svc_rdma_create_listen(struct svc_serv *, int, struct sockaddr *);
diff --git a/include/linux/sunrpc/svc_xprt.h b/include/linux/sunrpc/svc_xprt.h
index ea6f46be9cb7..9e1e046de176 100644
--- a/include/linux/sunrpc/svc_xprt.h
+++ b/include/linux/sunrpc/svc_xprt.h
@@ -21,6 +21,8 @@ struct svc_xprt_ops {
int (*xpo_has_wspace)(struct svc_xprt *);
int (*xpo_recvfrom)(struct svc_rqst *);
int (*xpo_sendto)(struct svc_rqst *);
+ int (*xpo_read_payload)(struct svc_rqst *, unsigned int,
+ unsigned int);
void (*xpo_release_rqst)(struct svc_rqst *);
void (*xpo_detach)(struct svc_xprt *);
void (*xpo_free)(struct svc_xprt *);
diff --git a/include/linux/xattr.h b/include/linux/xattr.h
index 4df9dcdc48c5..0d970fdc66e1 100644
--- a/include/linux/xattr.h
+++ b/include/linux/xattr.h
@@ -52,8 +52,10 @@ ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
int __vfs_setxattr(struct dentry *, struct inode *, const char *, const void *, size_t, int);
int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int);
+int __vfs_setxattr_locked(struct dentry *, const char *, const void *, size_t, int, struct inode **);
int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);
int __vfs_removexattr(struct dentry *, const char *);
+int __vfs_removexattr_locked(struct dentry *, const char *, struct inode **);
int vfs_removexattr(struct dentry *, const char *);
ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size);
diff --git a/include/net/addrconf.h b/include/net/addrconf.h
index 2306098a7f2d..f6361e233697 100644
--- a/include/net/addrconf.h
+++ b/include/net/addrconf.h
@@ -285,6 +285,7 @@ int ipv6_sock_ac_join(struct sock *sk, int ifindex,
const struct in6_addr *addr);
int ipv6_sock_ac_drop(struct sock *sk, int ifindex,
const struct in6_addr *addr);
+void __ipv6_sock_ac_close(struct sock *sk);
void ipv6_sock_ac_close(struct sock *sk);
int __ipv6_dev_ac_inc(struct inet6_dev *idev, const struct in6_addr *addr);
diff --git a/include/sound/jack.h b/include/sound/jack.h
index 19020ee43a19..3b6c552f709d 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -58,6 +58,9 @@ enum snd_jack_types {
SND_JACK_BTN_5 = 0x0200,
};
+/* Keep in sync with definitions above */
+#define SND_JACK_SWITCH_TYPES 6
+
struct snd_jack {
struct list_head kctl_list;
struct snd_card *card;
diff --git a/include/trace/hooks/vendor_hooks.h b/include/trace/hooks/vendor_hooks.h
index 9d9ae21895dd..8a3fdb9222e5 100644
--- a/include/trace/hooks/vendor_hooks.h
+++ b/include/trace/hooks/vendor_hooks.h
@@ -1,7 +1,11 @@
/* SPDX-License-Identifier: GPL-2.0 */
-#if !defined(_TRACE_VENDOR_HOOKS_H) || defined(TRACE_HEADER_MULTI_READ)
-#define _TRACE_VENDOR_HOOKS_H
+/*
+ * Note: we intentionally omit include file ifdef protection
+ * This is due to the way trace events work. If a file includes two
+ * trace event headers under one "CREATE_TRACE_POINTS" the first include
+ * will override the DECLARE_RESTRICTED_HOOK and break the second include.
+ */
#include
@@ -13,6 +17,7 @@
#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond) \
DEFINE_TRACE(name)
+
/* prevent additional recursion */
#undef TRACE_HEADER_MULTI_READ
#else /* TRACE_HEADER_MULTI_READ */
@@ -61,6 +66,7 @@
} \
/* vendor hooks cannot be unregistered */ \
+#undef DECLARE_RESTRICTED_HOOK
#define DECLARE_RESTRICTED_HOOK(name, proto, args, cond) \
__DECLARE_HOOK(name, PARAMS(proto), PARAMS(args), \
cond, \
@@ -68,5 +74,3 @@
PARAMS(__data, args))
#endif /* TRACE_HEADER_MULTI_READ */
-
-#endif /* _TRACE_VENDOR_HOOKS_H */
diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
index 76b1de5e909f..472cd5bc5567 100644
--- a/include/uapi/linux/input-event-codes.h
+++ b/include/uapi/linux/input-event-codes.h
@@ -809,10 +809,7 @@
#define SW_MUTE_DEVICE 0x0e /* set = device disabled */
#define SW_PEN_INSERTED 0x0f /* set = pen inserted */
#define SW_MACHINE_COVER 0x10 /* set = cover closed */
-#define SW_HPHL_OVERCURRENT 0x11 /* set = over current on left hph */
-#define SW_HPHR_OVERCURRENT 0x12 /* set = over current on right hph */
-#define SW_UNSUPPORT_INSERT 0x13 /* set = unsupported device inserted */
-#define SW_MAX 0x20
+#define SW_MAX 0x10
#define SW_CNT (SW_MAX+1)
/*
diff --git a/include/uapi/linux/loop.h b/include/uapi/linux/loop.h
index 080a8df134ef..24a1c45bd1ae 100644
--- a/include/uapi/linux/loop.h
+++ b/include/uapi/linux/loop.h
@@ -25,6 +25,16 @@ enum {
LO_FLAGS_DIRECT_IO = 16,
};
+/* LO_FLAGS that can be set using LOOP_SET_STATUS(64) */
+#define LOOP_SET_STATUS_SETTABLE_FLAGS (LO_FLAGS_AUTOCLEAR | LO_FLAGS_PARTSCAN)
+
+/* LO_FLAGS that can be cleared using LOOP_SET_STATUS(64) */
+#define LOOP_SET_STATUS_CLEARABLE_FLAGS (LO_FLAGS_AUTOCLEAR)
+
+/* LO_FLAGS that can be set using LOOP_CONFIGURE */
+#define LOOP_CONFIGURE_SETTABLE_FLAGS (LO_FLAGS_READ_ONLY | LO_FLAGS_AUTOCLEAR \
+ | LO_FLAGS_PARTSCAN | LO_FLAGS_DIRECT_IO)
+
#include /* for __kernel_old_dev_t */
#include /* for __u64 */
@@ -37,7 +47,7 @@ struct loop_info {
int lo_offset;
int lo_encrypt_type;
int lo_encrypt_key_size; /* ioctl w/o */
- int lo_flags; /* ioctl r/o */
+ int lo_flags;
char lo_name[LO_NAME_SIZE];
unsigned char lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
unsigned long lo_init[2];
@@ -53,13 +63,29 @@ struct loop_info64 {
__u32 lo_number; /* ioctl r/o */
__u32 lo_encrypt_type;
__u32 lo_encrypt_key_size; /* ioctl w/o */
- __u32 lo_flags; /* ioctl r/o */
+ __u32 lo_flags;
__u8 lo_file_name[LO_NAME_SIZE];
__u8 lo_crypt_name[LO_NAME_SIZE];
__u8 lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */
__u64 lo_init[2];
};
+/**
+ * struct loop_config - Complete configuration for a loop device.
+ * @fd: fd of the file to be used as a backing file for the loop device.
+ * @block_size: block size to use; ignored if 0.
+ * @info: struct loop_info64 to configure the loop device with.
+ *
+ * This structure is used with the LOOP_CONFIGURE ioctl, and can be used to
+ * atomically setup and configure all loop device parameters at once.
+ */
+struct loop_config {
+ __u32 fd;
+ __u32 block_size;
+ struct loop_info64 info;
+ __u64 __reserved[8];
+};
+
/*
* Loop filter types
*/
@@ -90,6 +116,7 @@ struct loop_info64 {
#define LOOP_SET_CAPACITY 0x4C07
#define LOOP_SET_DIRECT_IO 0x4C08
#define LOOP_SET_BLOCK_SIZE 0x4C09
+#define LOOP_CONFIGURE 0x4C0A
/* /dev/loop-control interface */
#define LOOP_CTL_ADD 0x4C80
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 0ac39045d040..ea0064f6af9d 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -2196,6 +2196,7 @@ __perf_remove_from_context(struct perf_event *event,
if (!ctx->nr_events && ctx->is_active) {
ctx->is_active = 0;
+ ctx->rotate_necessary = 0;
if (ctx->task) {
WARN_ON_ONCE(cpuctx->task_ctx != ctx);
cpuctx->task_ctx = NULL;
@@ -3072,12 +3073,6 @@ static void ctx_sched_out(struct perf_event_context *ctx,
if (!ctx->nr_active || !(is_active & EVENT_ALL))
return;
- /*
- * If we had been multiplexing, no rotations are necessary, now no events
- * are active.
- */
- ctx->rotate_necessary = 0;
-
perf_pmu_disable(ctx->pmu);
if (is_active & EVENT_PINNED) {
list_for_each_entry_safe(event, tmp, &ctx->pinned_active, active_list)
@@ -3087,6 +3082,13 @@ static void ctx_sched_out(struct perf_event_context *ctx,
if (is_active & EVENT_FLEXIBLE) {
list_for_each_entry_safe(event, tmp, &ctx->flexible_active, active_list)
group_sched_out(event, cpuctx, ctx);
+
+ /*
+ * Since we cleared EVENT_FLEXIBLE, also clear
+ * rotate_necessary, is will be reset by
+ * ctx_flexible_sched_in() when needed.
+ */
+ ctx->rotate_necessary = 0;
}
perf_pmu_enable(ctx->pmu);
}
@@ -3825,6 +3827,12 @@ ctx_event_to_rotate(struct perf_event_context *ctx)
typeof(*event), group_node);
}
+ /*
+ * Unconditionally clear rotate_necessary; if ctx_flexible_sched_in()
+ * finds there are unschedulable events, it will set it again.
+ */
+ ctx->rotate_necessary = 0;
+
return event;
}
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
index 3f67803123be..12ecacf0c55f 100644
--- a/net/9p/trans_fd.c
+++ b/net/9p/trans_fd.c
@@ -816,20 +816,28 @@ static int p9_fd_open(struct p9_client *client, int rfd, int wfd)
return -ENOMEM;
ts->rd = fget(rfd);
+ if (!ts->rd)
+ goto out_free_ts;
+ if (!(ts->rd->f_mode & FMODE_READ))
+ goto out_put_rd;
ts->wr = fget(wfd);
- if (!ts->rd || !ts->wr) {
- if (ts->rd)
- fput(ts->rd);
- if (ts->wr)
- fput(ts->wr);
- kfree(ts);
- return -EIO;
- }
+ if (!ts->wr)
+ goto out_put_rd;
+ if (!(ts->wr->f_mode & FMODE_WRITE))
+ goto out_put_wr;
client->trans = ts;
client->status = Connected;
return 0;
+
+out_put_wr:
+ fput(ts->wr);
+out_put_rd:
+ fput(ts->rd);
+out_free_ts:
+ kfree(ts);
+ return -EIO;
}
static int p9_socket_open(struct p9_client *client, struct socket *csocket)
diff --git a/net/appletalk/atalk_proc.c b/net/appletalk/atalk_proc.c
index 550c6ca007cc..9c1241292d1d 100644
--- a/net/appletalk/atalk_proc.c
+++ b/net/appletalk/atalk_proc.c
@@ -229,6 +229,8 @@ int __init atalk_proc_init(void)
sizeof(struct aarp_iter_state), NULL))
goto out;
+ return 0;
+
out:
remove_proc_subtree("atalk", init_net.proc_net);
return -ENOMEM;
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 44385252d7b6..7bf6860fed78 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -2444,7 +2444,7 @@ static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
- if (!num_rsp)
+ if (!num_rsp || skb->len < num_rsp * sizeof(*info) + 1)
return;
if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
@@ -4067,6 +4067,9 @@ static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
struct inquiry_info_with_rssi_and_pscan_mode *info;
info = (void *) (skb->data + 1);
+ if (skb->len < num_rsp * sizeof(*info) + 1)
+ goto unlock;
+
for (; num_rsp; num_rsp--, info++) {
u32 flags;
@@ -4088,6 +4091,9 @@ static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
} else {
struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
+ if (skb->len < num_rsp * sizeof(*info) + 1)
+ goto unlock;
+
for (; num_rsp; num_rsp--, info++) {
u32 flags;
@@ -4108,6 +4114,7 @@ static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
}
}
+unlock:
hci_dev_unlock(hdev);
}
@@ -4270,7 +4277,7 @@ static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
- if (!num_rsp)
+ if (!num_rsp || skb->len < num_rsp * sizeof(*info) + 1)
return;
if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index 1b851fd82613..47b6d73d30e5 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1751,7 +1751,7 @@ struct fib_table *fib_trie_unmerge(struct fib_table *oldtb)
while ((l = leaf_walk_rcu(&tp, key)) != NULL) {
struct key_vector *local_l = NULL, *local_tp;
- hlist_for_each_entry_rcu(fa, &l->leaf, fa_list) {
+ hlist_for_each_entry(fa, &l->leaf, fa_list) {
struct fib_alias *new_fa;
if (local_tb->tb_id != fa->tb_id)
diff --git a/net/ipv4/gre_offload.c b/net/ipv4/gre_offload.c
index 4de7e962d3da..c840141876bc 100644
--- a/net/ipv4/gre_offload.c
+++ b/net/ipv4/gre_offload.c
@@ -15,12 +15,12 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb,
netdev_features_t features)
{
int tnl_hlen = skb_inner_mac_header(skb) - skb_transport_header(skb);
+ bool need_csum, need_recompute_csum, gso_partial;
struct sk_buff *segs = ERR_PTR(-EINVAL);
u16 mac_offset = skb->mac_header;
__be16 protocol = skb->protocol;
u16 mac_len = skb->mac_len;
int gre_offset, outer_hlen;
- bool need_csum, gso_partial;
if (!skb->encapsulation)
goto out;
@@ -41,6 +41,7 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb,
skb->protocol = skb->inner_protocol;
need_csum = !!(skb_shinfo(skb)->gso_type & SKB_GSO_GRE_CSUM);
+ need_recompute_csum = skb->csum_not_inet;
skb->encap_hdr_csum = need_csum;
features &= skb->dev->hw_enc_features;
@@ -98,7 +99,15 @@ static struct sk_buff *gre_gso_segment(struct sk_buff *skb,
}
*(pcsum + 1) = 0;
- *pcsum = gso_make_checksum(skb, 0);
+ if (need_recompute_csum && !skb_is_gso(skb)) {
+ __wsum csum;
+
+ csum = skb_checksum(skb, gre_offset,
+ skb->len - gre_offset, 0);
+ *pcsum = csum_fold(csum);
+ } else {
+ *pcsum = gso_make_checksum(skb, 0);
+ }
} while ((skb = skb->next));
out:
return segs;
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 5040f7ca37ec..ab5358281000 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2944,6 +2944,8 @@ static bool tcp_ack_update_rtt(struct sock *sk, const int flag,
u32 delta = tcp_time_stamp(tp) - tp->rx_opt.rcv_tsecr;
if (likely(delta < INT_MAX / (USEC_PER_SEC / TCP_TS_HZ))) {
+ if (!delta)
+ delta = 1;
seq_rtt_us = delta * (USEC_PER_SEC / TCP_TS_HZ);
ca_rtt_us = seq_rtt_us;
}
diff --git a/net/ipv6/anycast.c b/net/ipv6/anycast.c
index fed91ab7ec46..cf3a88a10ddd 100644
--- a/net/ipv6/anycast.c
+++ b/net/ipv6/anycast.c
@@ -183,7 +183,7 @@ int ipv6_sock_ac_drop(struct sock *sk, int ifindex, const struct in6_addr *addr)
return 0;
}
-void ipv6_sock_ac_close(struct sock *sk)
+void __ipv6_sock_ac_close(struct sock *sk)
{
struct ipv6_pinfo *np = inet6_sk(sk);
struct net_device *dev = NULL;
@@ -191,10 +191,7 @@ void ipv6_sock_ac_close(struct sock *sk)
struct net *net = sock_net(sk);
int prev_index;
- if (!np->ipv6_ac_list)
- return;
-
- rtnl_lock();
+ ASSERT_RTNL();
pac = np->ipv6_ac_list;
np->ipv6_ac_list = NULL;
@@ -211,6 +208,16 @@ void ipv6_sock_ac_close(struct sock *sk)
sock_kfree_s(sk, pac, sizeof(*pac));
pac = next;
}
+}
+
+void ipv6_sock_ac_close(struct sock *sk)
+{
+ struct ipv6_pinfo *np = inet6_sk(sk);
+
+ if (!np->ipv6_ac_list)
+ return;
+ rtnl_lock();
+ __ipv6_sock_ac_close(sk);
rtnl_unlock();
}
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c
index 5af97b4f5df3..5352c7e68c42 100644
--- a/net/ipv6/ipv6_sockglue.c
+++ b/net/ipv6/ipv6_sockglue.c
@@ -205,6 +205,7 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname,
fl6_free_socklist(sk);
__ipv6_sock_mc_close(sk);
+ __ipv6_sock_ac_close(sk);
/*
* Sock is moving from IPv6 to IPv4 (sk_prot), so
diff --git a/net/ipv6/route.c b/net/ipv6/route.c
index 9f2b085bc616..792656cabe0a 100644
--- a/net/ipv6/route.c
+++ b/net/ipv6/route.c
@@ -3686,14 +3686,14 @@ static struct fib6_info *ip6_route_info_create(struct fib6_config *cfg,
rt->fib6_src.plen = cfg->fc_src_len;
#endif
if (nh) {
- if (!nexthop_get(nh)) {
- NL_SET_ERR_MSG(extack, "Nexthop has been deleted");
- goto out;
- }
if (rt->fib6_src.plen) {
NL_SET_ERR_MSG(extack, "Nexthops can not be used with source routing");
goto out;
}
+ if (!nexthop_get(nh)) {
+ NL_SET_ERR_MSG(extack, "Nexthop has been deleted");
+ goto out;
+ }
rt->nh = nh;
fib6_nh = nexthop_fib6_nh(rt->nh);
} else {
diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
index 8b70298857e3..c86e404cd65b 100644
--- a/net/openvswitch/conntrack.c
+++ b/net/openvswitch/conntrack.c
@@ -276,10 +276,6 @@ void ovs_ct_fill_key(const struct sk_buff *skb, struct sw_flow_key *key)
ovs_ct_update_key(skb, NULL, key, false, false);
}
-#define IN6_ADDR_INITIALIZER(ADDR) \
- { (ADDR).s6_addr32[0], (ADDR).s6_addr32[1], \
- (ADDR).s6_addr32[2], (ADDR).s6_addr32[3] }
-
int ovs_ct_put_key(const struct sw_flow_key *swkey,
const struct sw_flow_key *output, struct sk_buff *skb)
{
@@ -301,24 +297,30 @@ int ovs_ct_put_key(const struct sw_flow_key *swkey,
if (swkey->ct_orig_proto) {
if (swkey->eth.type == htons(ETH_P_IP)) {
- struct ovs_key_ct_tuple_ipv4 orig = {
- output->ipv4.ct_orig.src,
- output->ipv4.ct_orig.dst,
- output->ct.orig_tp.src,
- output->ct.orig_tp.dst,
- output->ct_orig_proto,
- };
+ struct ovs_key_ct_tuple_ipv4 orig;
+
+ memset(&orig, 0, sizeof(orig));
+ orig.ipv4_src = output->ipv4.ct_orig.src;
+ orig.ipv4_dst = output->ipv4.ct_orig.dst;
+ orig.src_port = output->ct.orig_tp.src;
+ orig.dst_port = output->ct.orig_tp.dst;
+ orig.ipv4_proto = output->ct_orig_proto;
+
if (nla_put(skb, OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4,
sizeof(orig), &orig))
return -EMSGSIZE;
} else if (swkey->eth.type == htons(ETH_P_IPV6)) {
- struct ovs_key_ct_tuple_ipv6 orig = {
- IN6_ADDR_INITIALIZER(output->ipv6.ct_orig.src),
- IN6_ADDR_INITIALIZER(output->ipv6.ct_orig.dst),
- output->ct.orig_tp.src,
- output->ct.orig_tp.dst,
- output->ct_orig_proto,
- };
+ struct ovs_key_ct_tuple_ipv6 orig;
+
+ memset(&orig, 0, sizeof(orig));
+ memcpy(orig.ipv6_src, output->ipv6.ct_orig.src.s6_addr32,
+ sizeof(orig.ipv6_src));
+ memcpy(orig.ipv6_dst, output->ipv6.ct_orig.dst.s6_addr32,
+ sizeof(orig.ipv6_dst));
+ orig.src_port = output->ct.orig_tp.src;
+ orig.dst_port = output->ct.orig_tp.dst;
+ orig.ipv6_proto = output->ct_orig_proto;
+
if (nla_put(skb, OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6,
sizeof(orig), &orig))
return -EMSGSIZE;
diff --git a/net/rxrpc/call_object.c b/net/rxrpc/call_object.c
index f07970207b54..38a46167523f 100644
--- a/net/rxrpc/call_object.c
+++ b/net/rxrpc/call_object.c
@@ -288,7 +288,7 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx,
*/
ret = rxrpc_connect_call(rx, call, cp, srx, gfp);
if (ret < 0)
- goto error;
+ goto error_attached_to_socket;
trace_rxrpc_call(call->debug_id, rxrpc_call_connected,
atomic_read(&call->usage), here, NULL);
@@ -308,18 +308,29 @@ struct rxrpc_call *rxrpc_new_client_call(struct rxrpc_sock *rx,
error_dup_user_ID:
write_unlock(&rx->call_lock);
release_sock(&rx->sk);
- ret = -EEXIST;
-
-error:
__rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR,
- RX_CALL_DEAD, ret);
+ RX_CALL_DEAD, -EEXIST);
trace_rxrpc_call(call->debug_id, rxrpc_call_error,
- atomic_read(&call->usage), here, ERR_PTR(ret));
+ atomic_read(&call->usage), here, ERR_PTR(-EEXIST));
rxrpc_release_call(rx, call);
mutex_unlock(&call->user_mutex);
rxrpc_put_call(call, rxrpc_call_put);
- _leave(" = %d", ret);
- return ERR_PTR(ret);
+ _leave(" = -EEXIST");
+ return ERR_PTR(-EEXIST);
+
+ /* We got an error, but the call is attached to the socket and is in
+ * need of release. However, we might now race with recvmsg() when
+ * completing the call queues it. Return 0 from sys_sendmsg() and
+ * leave the error to recvmsg() to deal with.
+ */
+error_attached_to_socket:
+ trace_rxrpc_call(call->debug_id, rxrpc_call_error,
+ atomic_read(&call->usage), here, ERR_PTR(ret));
+ set_bit(RXRPC_CALL_DISCONNECTED, &call->flags);
+ __rxrpc_set_call_completion(call, RXRPC_CALL_LOCAL_ERROR,
+ RX_CALL_DEAD, ret);
+ _leave(" = c=%08x [err]", call->debug_id);
+ return call;
}
/*
diff --git a/net/rxrpc/conn_object.c b/net/rxrpc/conn_object.c
index 19e141eeed17..8cbe0bf20ed5 100644
--- a/net/rxrpc/conn_object.c
+++ b/net/rxrpc/conn_object.c
@@ -212,9 +212,11 @@ void rxrpc_disconnect_call(struct rxrpc_call *call)
call->peer->cong_cwnd = call->cong_cwnd;
- spin_lock_bh(&conn->params.peer->lock);
- hlist_del_rcu(&call->error_link);
- spin_unlock_bh(&conn->params.peer->lock);
+ if (!hlist_unhashed(&call->error_link)) {
+ spin_lock_bh(&call->peer->lock);
+ hlist_del_rcu(&call->error_link);
+ spin_unlock_bh(&call->peer->lock);
+ }
if (rxrpc_is_client_call(call))
return rxrpc_disconnect_client_call(call);
diff --git a/net/rxrpc/recvmsg.c b/net/rxrpc/recvmsg.c
index 6896a33ef842..4f48e3bdd4b4 100644
--- a/net/rxrpc/recvmsg.c
+++ b/net/rxrpc/recvmsg.c
@@ -541,7 +541,7 @@ try_again:
goto error_unlock_call;
}
- if (msg->msg_name) {
+ if (msg->msg_name && call->peer) {
struct sockaddr_rxrpc *srx = msg->msg_name;
size_t len = sizeof(call->peer->srx);
diff --git a/net/rxrpc/sendmsg.c b/net/rxrpc/sendmsg.c
index 49d03c8c64da..1a340eb0abf7 100644
--- a/net/rxrpc/sendmsg.c
+++ b/net/rxrpc/sendmsg.c
@@ -683,6 +683,9 @@ int rxrpc_do_sendmsg(struct rxrpc_sock *rx, struct msghdr *msg, size_t len)
if (IS_ERR(call))
return PTR_ERR(call);
/* ... and we have the call lock. */
+ ret = 0;
+ if (READ_ONCE(call->state) == RXRPC_CALL_COMPLETE)
+ goto out_put_unlock;
} else {
switch (READ_ONCE(call->state)) {
case RXRPC_CALL_UNINITIALISED:
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
index d11b70552c33..f0dcb6d14bbb 100644
--- a/net/sunrpc/svc.c
+++ b/net/sunrpc/svc.c
@@ -1634,6 +1634,22 @@ u32 svc_max_payload(const struct svc_rqst *rqstp)
}
EXPORT_SYMBOL_GPL(svc_max_payload);
+/**
+ * svc_encode_read_payload - mark a range of bytes as a READ payload
+ * @rqstp: svc_rqst to operate on
+ * @offset: payload's byte offset in rqstp->rq_res
+ * @length: size of payload, in bytes
+ *
+ * Returns zero on success, or a negative errno if a permanent
+ * error occurred.
+ */
+int svc_encode_read_payload(struct svc_rqst *rqstp, unsigned int offset,
+ unsigned int length)
+{
+ return rqstp->rq_xprt->xpt_ops->xpo_read_payload(rqstp, offset, length);
+}
+EXPORT_SYMBOL_GPL(svc_encode_read_payload);
+
/**
* svc_fill_write_vector - Construct data argument for VFS write call
* @rqstp: svc_rqst to operate on
diff --git a/net/sunrpc/svcsock.c b/net/sunrpc/svcsock.c
index 4260924ad9db..d52abde51f1b 100644
--- a/net/sunrpc/svcsock.c
+++ b/net/sunrpc/svcsock.c
@@ -279,6 +279,12 @@ out:
return len;
}
+static int svc_sock_read_payload(struct svc_rqst *rqstp, unsigned int offset,
+ unsigned int length)
+{
+ return 0;
+}
+
/*
* Report socket names for nfsdfs
*/
@@ -655,6 +661,7 @@ static const struct svc_xprt_ops svc_udp_ops = {
.xpo_create = svc_udp_create,
.xpo_recvfrom = svc_udp_recvfrom,
.xpo_sendto = svc_udp_sendto,
+ .xpo_read_payload = svc_sock_read_payload,
.xpo_release_rqst = svc_release_udp_skb,
.xpo_detach = svc_sock_detach,
.xpo_free = svc_sock_free,
@@ -1175,6 +1182,7 @@ static const struct svc_xprt_ops svc_tcp_ops = {
.xpo_create = svc_tcp_create,
.xpo_recvfrom = svc_tcp_recvfrom,
.xpo_sendto = svc_tcp_sendto,
+ .xpo_read_payload = svc_sock_read_payload,
.xpo_release_rqst = svc_release_skb,
.xpo_detach = svc_tcp_sock_detach,
.xpo_free = svc_sock_free,
diff --git a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
index b8ee91ffedda..0ce4e75b2981 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_recvfrom.c
@@ -193,6 +193,7 @@ svc_rdma_recv_ctxt_get(struct svcxprt_rdma *rdma)
out:
ctxt->rc_page_count = 0;
+ ctxt->rc_read_payload_length = 0;
return ctxt;
out_empty:
diff --git a/net/sunrpc/xprtrdma/svc_rdma_rw.c b/net/sunrpc/xprtrdma/svc_rdma_rw.c
index a59912e2666d..066af6b2eb01 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_rw.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_rw.c
@@ -481,18 +481,19 @@ static int svc_rdma_send_xdr_kvec(struct svc_rdma_write_info *info,
vec->iov_len);
}
-/* Send an xdr_buf's page list by itself. A Write chunk is
- * just the page list. a Reply chunk is the head, page list,
- * and tail. This function is shared between the two types
- * of chunk.
+/* Send an xdr_buf's page list by itself. A Write chunk is just
+ * the page list. A Reply chunk is @xdr's head, page list, and
+ * tail. This function is shared between the two types of chunk.
*/
static int svc_rdma_send_xdr_pagelist(struct svc_rdma_write_info *info,
- struct xdr_buf *xdr)
+ struct xdr_buf *xdr,
+ unsigned int offset,
+ unsigned long length)
{
info->wi_xdr = xdr;
- info->wi_next_off = 0;
+ info->wi_next_off = offset - xdr->head[0].iov_len;
return svc_rdma_build_writes(info, svc_rdma_pagelist_to_sg,
- xdr->page_len);
+ length);
}
/**
@@ -500,6 +501,8 @@ static int svc_rdma_send_xdr_pagelist(struct svc_rdma_write_info *info,
* @rdma: controlling RDMA transport
* @wr_ch: Write chunk provided by client
* @xdr: xdr_buf containing the data payload
+ * @offset: payload's byte offset in @xdr
+ * @length: size of payload, in bytes
*
* Returns a non-negative number of bytes the chunk consumed, or
* %-E2BIG if the payload was larger than the Write chunk,
@@ -509,19 +512,20 @@ static int svc_rdma_send_xdr_pagelist(struct svc_rdma_write_info *info,
* %-EIO if rdma_rw initialization failed (DMA mapping, etc).
*/
int svc_rdma_send_write_chunk(struct svcxprt_rdma *rdma, __be32 *wr_ch,
- struct xdr_buf *xdr)
+ struct xdr_buf *xdr,
+ unsigned int offset, unsigned long length)
{
struct svc_rdma_write_info *info;
int ret;
- if (!xdr->page_len)
+ if (!length)
return 0;
info = svc_rdma_write_info_alloc(rdma, wr_ch);
if (!info)
return -ENOMEM;
- ret = svc_rdma_send_xdr_pagelist(info, xdr);
+ ret = svc_rdma_send_xdr_pagelist(info, xdr, offset, length);
if (ret < 0)
goto out_err;
@@ -530,7 +534,7 @@ int svc_rdma_send_write_chunk(struct svcxprt_rdma *rdma, __be32 *wr_ch,
goto out_err;
trace_svcrdma_encode_write(xdr->page_len);
- return xdr->page_len;
+ return length;
out_err:
svc_rdma_write_info_free(info);
@@ -570,7 +574,9 @@ int svc_rdma_send_reply_chunk(struct svcxprt_rdma *rdma, __be32 *rp_ch,
* client did not provide Write chunks.
*/
if (!writelist && xdr->page_len) {
- ret = svc_rdma_send_xdr_pagelist(info, xdr);
+ ret = svc_rdma_send_xdr_pagelist(info, xdr,
+ xdr->head[0].iov_len,
+ xdr->page_len);
if (ret < 0)
goto out_err;
consumed += xdr->page_len;
diff --git a/net/sunrpc/xprtrdma/svc_rdma_sendto.c b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
index 93ff7967389a..217106c66a13 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_sendto.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_sendto.c
@@ -856,7 +856,18 @@ int svc_rdma_sendto(struct svc_rqst *rqstp)
if (wr_lst) {
/* XXX: Presume the client sent only one Write chunk */
- ret = svc_rdma_send_write_chunk(rdma, wr_lst, xdr);
+ unsigned long offset;
+ unsigned int length;
+
+ if (rctxt->rc_read_payload_length) {
+ offset = rctxt->rc_read_payload_offset;
+ length = rctxt->rc_read_payload_length;
+ } else {
+ offset = xdr->head[0].iov_len;
+ length = xdr->page_len;
+ }
+ ret = svc_rdma_send_write_chunk(rdma, wr_lst, xdr, offset,
+ length);
if (ret < 0)
goto err2;
svc_rdma_xdr_encode_write_list(rdma_resp, wr_lst, ret);
@@ -891,3 +902,30 @@ int svc_rdma_sendto(struct svc_rqst *rqstp)
set_bit(XPT_CLOSE, &xprt->xpt_flags);
return -ENOTCONN;
}
+
+/**
+ * svc_rdma_read_payload - special processing for a READ payload
+ * @rqstp: svc_rqst to operate on
+ * @offset: payload's byte offset in @xdr
+ * @length: size of payload, in bytes
+ *
+ * Returns zero on success.
+ *
+ * For the moment, just record the xdr_buf location of the READ
+ * payload. svc_rdma_sendto will use that location later when
+ * we actually send the payload.
+ */
+int svc_rdma_read_payload(struct svc_rqst *rqstp, unsigned int offset,
+ unsigned int length)
+{
+ struct svc_rdma_recv_ctxt *rctxt = rqstp->rq_xprt_ctxt;
+
+ /* XXX: Just one READ payload slot for now, since our
+ * transport implementation currently supports only one
+ * Write chunk.
+ */
+ rctxt->rc_read_payload_offset = offset;
+ rctxt->rc_read_payload_length = length;
+
+ return 0;
+}
diff --git a/net/sunrpc/xprtrdma/svc_rdma_transport.c b/net/sunrpc/xprtrdma/svc_rdma_transport.c
index 889220f11a70..89a12676c59d 100644
--- a/net/sunrpc/xprtrdma/svc_rdma_transport.c
+++ b/net/sunrpc/xprtrdma/svc_rdma_transport.c
@@ -81,6 +81,7 @@ static const struct svc_xprt_ops svc_rdma_ops = {
.xpo_create = svc_rdma_create,
.xpo_recvfrom = svc_rdma_recvfrom,
.xpo_sendto = svc_rdma_sendto,
+ .xpo_read_payload = svc_rdma_read_payload,
.xpo_release_rqst = svc_rdma_release_rqst,
.xpo_detach = svc_rdma_detach,
.xpo_free = svc_rdma_free,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 36df826c1939..3f7dcbc753a4 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -13172,13 +13172,13 @@ static int nl80211_vendor_cmd(struct sk_buff *skb, struct genl_info *info)
if (!wdev_running(wdev))
return -ENETDOWN;
}
-
- if (!vcmd->doit)
- return -EOPNOTSUPP;
} else {
wdev = NULL;
}
+ if (!vcmd->doit)
+ return -EOPNOTSUPP;
+
if (info->attrs[NL80211_ATTR_VENDOR_DATA]) {
data = nla_data(info->attrs[NL80211_ATTR_VENDOR_DATA]);
len = nla_len(info->attrs[NL80211_ATTR_VENDOR_DATA]);
diff --git a/scripts/coccinelle/misc/add_namespace.cocci b/scripts/coccinelle/misc/add_namespace.cocci
index 99e93a6c2e24..cbf1614163cb 100644
--- a/scripts/coccinelle/misc/add_namespace.cocci
+++ b/scripts/coccinelle/misc/add_namespace.cocci
@@ -6,6 +6,7 @@
/// add a missing namespace tag to a module source file.
///
+virtual nsdeps
virtual report
@has_ns_import@
@@ -16,10 +17,15 @@ MODULE_IMPORT_NS(ns);
// Add missing imports, but only adjacent to a MODULE_LICENSE statement.
// That ensures we are adding it only to the main module source file.
-@do_import depends on !has_ns_import@
+@do_import depends on !has_ns_import && nsdeps@
declarer name MODULE_LICENSE;
expression license;
identifier virtual.ns;
@@
MODULE_LICENSE(license);
+ MODULE_IMPORT_NS(ns);
+
+// Dummy rule for report mode that would otherwise be empty and make spatch
+// fail ("No rules apply.")
+@script:python depends on report@
+@@
diff --git a/scripts/nsdeps b/scripts/nsdeps
index 04cea0921673..e547f33b96a6 100644
--- a/scripts/nsdeps
+++ b/scripts/nsdeps
@@ -23,7 +23,7 @@ fi
generate_deps_for_ns() {
$SPATCH --very-quiet --in-place --sp-file \
- $srctree/scripts/coccinelle/misc/add_namespace.cocci -D ns=$1 $2
+ $srctree/scripts/coccinelle/misc/add_namespace.cocci -D nsdeps -D ns=$1 $2
}
generate_deps() {
diff --git a/security/integrity/ima/Kconfig b/security/integrity/ima/Kconfig
index 838476d780e5..d2054bec4909 100644
--- a/security/integrity/ima/Kconfig
+++ b/security/integrity/ima/Kconfig
@@ -227,7 +227,7 @@ config IMA_APPRAISE_REQUIRE_POLICY_SIGS
config IMA_APPRAISE_BOOTPARAM
bool "ima_appraise boot parameter"
- depends on IMA_APPRAISE && !IMA_ARCH_POLICY
+ depends on IMA_APPRAISE
default y
help
This option enables the different "ima_appraise=" modes
diff --git a/security/integrity/ima/ima_appraise.c b/security/integrity/ima/ima_appraise.c
index 136ae4e0ee92..23b04c6521b2 100644
--- a/security/integrity/ima/ima_appraise.c
+++ b/security/integrity/ima/ima_appraise.c
@@ -18,6 +18,12 @@
static int __init default_appraise_setup(char *str)
{
#ifdef CONFIG_IMA_APPRAISE_BOOTPARAM
+ if (arch_ima_get_secureboot()) {
+ pr_info("Secure boot enabled: ignoring ima_appraise=%s boot parameter option",
+ str);
+ return 1;
+ }
+
if (strncmp(str, "off", 3) == 0)
ima_appraise = 0;
else if (strncmp(str, "log", 3) == 0)
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
index c21b656b3263..840a192e9337 100644
--- a/security/smack/smackfs.c
+++ b/security/smack/smackfs.c
@@ -2720,7 +2720,6 @@ static int smk_open_relabel_self(struct inode *inode, struct file *file)
static ssize_t smk_write_relabel_self(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
- struct task_smack *tsp = smack_cred(current_cred());
char *data;
int rc;
LIST_HEAD(list_tmp);
@@ -2745,11 +2744,21 @@ static ssize_t smk_write_relabel_self(struct file *file, const char __user *buf,
kfree(data);
if (!rc || (rc == -EINVAL && list_empty(&list_tmp))) {
+ struct cred *new;
+ struct task_smack *tsp;
+
+ new = prepare_creds();
+ if (!new) {
+ rc = -ENOMEM;
+ goto out;
+ }
+ tsp = smack_cred(new);
smk_destroy_label_list(&tsp->smk_relabel);
list_splice(&list_tmp, &tsp->smk_relabel);
+ commit_creds(new);
return count;
}
-
+out:
smk_destroy_label_list(&list_tmp);
return rc;
}
diff --git a/sound/core/jack.c b/sound/core/jack.c
index e1594d0ca61f..fb26196571a7 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -19,16 +19,13 @@ struct snd_jack_kctl {
};
#ifdef CONFIG_SND_JACK_INPUT_DEV
-static int jack_switch_types[] = {
+static int jack_switch_types[SND_JACK_SWITCH_TYPES] = {
SW_HEADPHONE_INSERT,
SW_MICROPHONE_INSERT,
SW_LINEOUT_INSERT,
SW_JACK_PHYSICAL_INSERT,
SW_VIDEOOUT_INSERT,
SW_LINEIN_INSERT,
- SW_HPHL_OVERCURRENT,
- SW_HPHR_OVERCURRENT,
- SW_UNSUPPORT_INSERT,
};
#endif /* CONFIG_SND_JACK_INPUT_DEV */
@@ -239,7 +236,7 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
jack->type = type;
- for (i = 0; i < ARRAY_SIZE(jack_switch_types); i++)
+ for (i = 0; i < SND_JACK_SWITCH_TYPES; i++)
if (type & (1 << i))
input_set_capability(jack->input_dev, EV_SW,
jack_switch_types[i]);
diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
index 17f913657304..c8b9c0b315d8 100644
--- a/sound/core/seq/oss/seq_oss.c
+++ b/sound/core/seq/oss/seq_oss.c
@@ -168,10 +168,16 @@ static long
odev_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct seq_oss_devinfo *dp;
+ long rc;
+
dp = file->private_data;
if (snd_BUG_ON(!dp))
return -ENXIO;
- return snd_seq_oss_ioctl(dp, cmd, arg);
+
+ mutex_lock(®ister_mutex);
+ rc = snd_seq_oss_ioctl(dp, cmd, arg);
+ mutex_unlock(®ister_mutex);
+ return rc;
}
#ifdef CONFIG_COMPAT
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 07c03c32715a..801abf0fc98b 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -2924,6 +2924,10 @@ static int hda_codec_runtime_suspend(struct device *dev)
struct hda_codec *codec = dev_to_hda_codec(dev);
unsigned int state;
+ /* Nothing to do if card registration fails and the component driver never probes */
+ if (!codec->card)
+ return 0;
+
cancel_delayed_work_sync(&codec->jackpoll_work);
state = hda_call_codec_suspend(codec);
if (codec->link_down_at_suspend ||
@@ -2938,6 +2942,10 @@ static int hda_codec_runtime_resume(struct device *dev)
{
struct hda_codec *codec = dev_to_hda_codec(dev);
+ /* Nothing to do if card registration fails and the component driver never probes */
+ if (!codec->card)
+ return 0;
+
codec_display_power(codec, true);
snd_hdac_codec_link_up(&codec->core);
hda_call_codec_resume(codec);
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 95b0fdffc504..7353d2ec359a 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2306,7 +2306,6 @@ static int azx_probe_continue(struct azx *chip)
if (azx_has_pm_runtime(chip)) {
pm_runtime_use_autosuspend(&pci->dev);
- pm_runtime_allow(&pci->dev);
pm_runtime_put_autosuspend(&pci->dev);
}
diff --git a/sound/pci/hda/patch_ca0132.c b/sound/pci/hda/patch_ca0132.c
index 1e904dd15ab3..6aa39339db0a 100644
--- a/sound/pci/hda/patch_ca0132.c
+++ b/sound/pci/hda/patch_ca0132.c
@@ -1182,6 +1182,7 @@ static const struct snd_pci_quirk ca0132_quirks[] = {
SND_PCI_QUIRK(0x1458, 0xA036, "Gigabyte GA-Z170X-Gaming 7", QUIRK_R3DI),
SND_PCI_QUIRK(0x3842, 0x1038, "EVGA X99 Classified", QUIRK_R3DI),
SND_PCI_QUIRK(0x1102, 0x0013, "Recon3D", QUIRK_R3D),
+ SND_PCI_QUIRK(0x1102, 0x0018, "Recon3D", QUIRK_R3D),
SND_PCI_QUIRK(0x1102, 0x0051, "Sound Blaster AE-5", QUIRK_AE5),
{}
};
@@ -4670,7 +4671,7 @@ static int ca0132_alt_select_in(struct hda_codec *codec)
tmp = FLOAT_ONE;
break;
case QUIRK_AE5:
- ca0113_mmio_command_set(codec, 0x48, 0x28, 0x00);
+ ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00);
tmp = FLOAT_THREE;
break;
default:
@@ -4716,7 +4717,7 @@ static int ca0132_alt_select_in(struct hda_codec *codec)
r3di_gpio_mic_set(codec, R3DI_REAR_MIC);
break;
case QUIRK_AE5:
- ca0113_mmio_command_set(codec, 0x48, 0x28, 0x00);
+ ca0113_mmio_command_set(codec, 0x30, 0x28, 0x00);
break;
default:
break;
@@ -4755,7 +4756,7 @@ static int ca0132_alt_select_in(struct hda_codec *codec)
tmp = FLOAT_ONE;
break;
case QUIRK_AE5:
- ca0113_mmio_command_set(codec, 0x48, 0x28, 0x3f);
+ ca0113_mmio_command_set(codec, 0x30, 0x28, 0x3f);
tmp = FLOAT_THREE;
break;
default:
@@ -5747,6 +5748,11 @@ static int ca0132_switch_get(struct snd_kcontrol *kcontrol,
return 0;
}
+ if (nid == ZXR_HEADPHONE_GAIN) {
+ *valp = spec->zxr_gain_set;
+ return 0;
+ }
+
return 0;
}
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index f50d71da1226..ea25b8d0350d 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -6131,6 +6131,11 @@ enum {
ALC289_FIXUP_ASUS_GA502,
ALC256_FIXUP_ACER_MIC_NO_PRESENCE,
ALC285_FIXUP_HP_GPIO_AMP_INIT,
+ ALC269_FIXUP_CZC_B20,
+ ALC269_FIXUP_CZC_TMI,
+ ALC269_FIXUP_CZC_L101,
+ ALC269_FIXUP_LEMOTE_A1802,
+ ALC269_FIXUP_LEMOTE_A190X,
};
static const struct hda_fixup alc269_fixups[] = {
@@ -7369,6 +7374,89 @@ static const struct hda_fixup alc269_fixups[] = {
.chained = true,
.chain_id = ALC285_FIXUP_HP_GPIO_LED
},
+ [ALC269_FIXUP_CZC_B20] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x12, 0x411111f0 },
+ { 0x14, 0x90170110 }, /* speaker */
+ { 0x15, 0x032f1020 }, /* HP out */
+ { 0x17, 0x411111f0 },
+ { 0x18, 0x03ab1040 }, /* mic */
+ { 0x19, 0xb7a7013f },
+ { 0x1a, 0x0181305f },
+ { 0x1b, 0x411111f0 },
+ { 0x1d, 0x411111f0 },
+ { 0x1e, 0x411111f0 },
+ { }
+ },
+ .chain_id = ALC269_FIXUP_DMIC,
+ },
+ [ALC269_FIXUP_CZC_TMI] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x12, 0x4000c000 },
+ { 0x14, 0x90170110 }, /* speaker */
+ { 0x15, 0x0421401f }, /* HP out */
+ { 0x17, 0x411111f0 },
+ { 0x18, 0x04a19020 }, /* mic */
+ { 0x19, 0x411111f0 },
+ { 0x1a, 0x411111f0 },
+ { 0x1b, 0x411111f0 },
+ { 0x1d, 0x40448505 },
+ { 0x1e, 0x411111f0 },
+ { 0x20, 0x8000ffff },
+ { }
+ },
+ .chain_id = ALC269_FIXUP_DMIC,
+ },
+ [ALC269_FIXUP_CZC_L101] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x12, 0x40000000 },
+ { 0x14, 0x01014010 }, /* speaker */
+ { 0x15, 0x411111f0 }, /* HP out */
+ { 0x16, 0x411111f0 },
+ { 0x18, 0x01a19020 }, /* mic */
+ { 0x19, 0x02a19021 },
+ { 0x1a, 0x0181302f },
+ { 0x1b, 0x0221401f },
+ { 0x1c, 0x411111f0 },
+ { 0x1d, 0x4044c601 },
+ { 0x1e, 0x411111f0 },
+ { }
+ },
+ .chain_id = ALC269_FIXUP_DMIC,
+ },
+ [ALC269_FIXUP_LEMOTE_A1802] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x12, 0x40000000 },
+ { 0x14, 0x90170110 }, /* speaker */
+ { 0x17, 0x411111f0 },
+ { 0x18, 0x03a19040 }, /* mic1 */
+ { 0x19, 0x90a70130 }, /* mic2 */
+ { 0x1a, 0x411111f0 },
+ { 0x1b, 0x411111f0 },
+ { 0x1d, 0x40489d2d },
+ { 0x1e, 0x411111f0 },
+ { 0x20, 0x0003ffff },
+ { 0x21, 0x03214020 },
+ { }
+ },
+ .chain_id = ALC269_FIXUP_DMIC,
+ },
+ [ALC269_FIXUP_LEMOTE_A190X] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ { 0x14, 0x99130110 }, /* speaker */
+ { 0x15, 0x0121401f }, /* HP out */
+ { 0x18, 0x01a19c20 }, /* rear mic */
+ { 0x19, 0x99a3092f }, /* front mic */
+ { 0x1b, 0x0201401f }, /* front lineout */
+ { }
+ },
+ .chain_id = ALC269_FIXUP_DMIC,
+ },
};
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
@@ -7658,9 +7746,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS),
+ SND_PCI_QUIRK(0x1b35, 0x1235, "CZC B20", ALC269_FIXUP_CZC_B20),
+ SND_PCI_QUIRK(0x1b35, 0x1236, "CZC TMI", ALC269_FIXUP_CZC_TMI),
+ SND_PCI_QUIRK(0x1b35, 0x1237, "CZC L101", ALC269_FIXUP_CZC_L101),
SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
SND_PCI_QUIRK(0x1d72, 0x1901, "RedmiBook 14", ALC256_FIXUP_ASUS_HEADSET_MIC),
SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
+ SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
+ SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
#if 0
/* Below is a quirk table taken from the old code.
@@ -8945,6 +9038,7 @@ enum {
ALC662_FIXUP_LED_GPIO1,
ALC662_FIXUP_IDEAPAD,
ALC272_FIXUP_MARIO,
+ ALC662_FIXUP_CZC_ET26,
ALC662_FIXUP_CZC_P10T,
ALC662_FIXUP_SKU_IGNORE,
ALC662_FIXUP_HP_RP5800,
@@ -9014,6 +9108,25 @@ static const struct hda_fixup alc662_fixups[] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc272_fixup_mario,
},
+ [ALC662_FIXUP_CZC_ET26] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = (const struct hda_pintbl[]) {
+ {0x12, 0x403cc000},
+ {0x14, 0x90170110}, /* speaker */
+ {0x15, 0x411111f0},
+ {0x16, 0x411111f0},
+ {0x18, 0x01a19030}, /* mic */
+ {0x19, 0x90a7013f}, /* int-mic */
+ {0x1a, 0x01014020},
+ {0x1b, 0x0121401f},
+ {0x1c, 0x411111f0},
+ {0x1d, 0x411111f0},
+ {0x1e, 0x40478e35},
+ {}
+ },
+ .chained = true,
+ .chain_id = ALC662_FIXUP_SKU_IGNORE
+ },
[ALC662_FIXUP_CZC_P10T] = {
.type = HDA_FIXUP_VERBS,
.v.verbs = (const struct hda_verb[]) {
@@ -9397,6 +9510,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = {
SND_PCI_QUIRK(0x1849, 0x5892, "ASRock B150M", ALC892_FIXUP_ASROCK_MOBO),
SND_PCI_QUIRK(0x19da, 0xa130, "Zotac Z68", ALC662_FIXUP_ZOTAC_Z68),
SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON),
+ SND_PCI_QUIRK(0x1b35, 0x1234, "CZC ET26", ALC662_FIXUP_CZC_ET26),
SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T),
SND_PCI_QUIRK(0x1025, 0x0566, "Acer Aspire Ethos 8951G", ALC669_FIXUP_ACER_ASPIRE_ETHOS),
diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
index 798284f511f1..4559a15e6657 100644
--- a/tools/lib/traceevent/event-parse.c
+++ b/tools/lib/traceevent/event-parse.c
@@ -2861,6 +2861,7 @@ process_dynamic_array_len(struct tep_event *event, struct tep_print_arg *arg,
if (read_expected(TEP_EVENT_DELIM, ")") < 0)
goto out_err;
+ free_token(token);
type = read_token(&token);
*tok = token;
diff --git a/tools/testing/selftests/net/msg_zerocopy.c b/tools/testing/selftests/net/msg_zerocopy.c
index 4b02933cab8a..bdc03a2097e8 100644
--- a/tools/testing/selftests/net/msg_zerocopy.c
+++ b/tools/testing/selftests/net/msg_zerocopy.c
@@ -125,9 +125,8 @@ static int do_setcpu(int cpu)
CPU_ZERO(&mask);
CPU_SET(cpu, &mask);
if (sched_setaffinity(0, sizeof(mask), &mask))
- error(1, 0, "setaffinity %d", cpu);
-
- if (cfg_verbose)
+ fprintf(stderr, "cpu: unable to pin, may increase variance.\n");
+ else if (cfg_verbose)
fprintf(stderr, "cpu: %u\n", cpu);
return 0;