diff --git a/Documentation/devicetree/writing-schema.rst b/Documentation/devicetree/writing-schema.rst index f4a638072262..83e04e5c342d 100644 --- a/Documentation/devicetree/writing-schema.rst +++ b/Documentation/devicetree/writing-schema.rst @@ -130,11 +130,13 @@ binding schema. All of the DT binding documents can be validated using the make dt_binding_check -In order to perform validation of DT source files, use the `dtbs_check` target:: +In order to perform validation of DT source files, use the ``dtbs_check`` target:: make dtbs_check -This will first run the `dt_binding_check` which generates the processed schema. +Note that ``dtbs_check`` will skip any binding schema files with errors. It is +necessary to use ``dt_binding_check`` to get all the validation errors in the +binding schema files. It is also possible to run checks with a single schema file by setting the ``DT_SCHEMA_FILES`` variable to a specific schema file. diff --git a/Makefile b/Makefile index ad4c0190712a..d09716c9e405 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Kleptomaniac Octopus diff --git a/abi_gki_aarch64_0dccdc03.xml b/abi_gki_aarch64_de197c5a4f.xml similarity index 92% rename from abi_gki_aarch64_0dccdc03.xml rename to abi_gki_aarch64_de197c5a4f.xml index 214e169d8173..88600e98cdf9 100644 --- a/abi_gki_aarch64_0dccdc03.xml +++ b/abi_gki_aarch64_de197c5a4f.xml @@ -10528,7 +10528,7 @@ - + @@ -11918,14 +11918,6 @@ - - - - - - - - @@ -11934,6 +11926,14 @@ + + + + + + + + @@ -19107,18 +19107,18 @@ - + - + - + - + - + @@ -19508,22 +19508,22 @@ - + - + - + - + - + - + @@ -21803,6 +21803,7 @@ + @@ -26931,65 +26932,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -27015,13 +26958,13 @@ - + - + - + @@ -27035,7 +26978,7 @@ - + @@ -27043,10 +26986,10 @@ - + - + @@ -27071,7 +27014,7 @@ - + @@ -27085,7 +27028,7 @@ - + @@ -27093,16 +27036,16 @@ - - + + - + - + @@ -27114,7 +27057,7 @@ - + @@ -27123,7 +27066,7 @@ - + @@ -27135,19 +27078,19 @@ - + - + - + - + - + @@ -27156,20 +27099,20 @@ - + - + - + - + - + @@ -27178,16 +27121,16 @@ - + - + - - + + @@ -27224,15 +27167,15 @@ - + - + - + @@ -27261,7 +27204,7 @@ - + @@ -27269,7 +27212,7 @@ - + @@ -27277,7 +27220,7 @@ - + @@ -27285,17 +27228,17 @@ - + - + - + - + @@ -27316,15 +27259,15 @@ - + - + - + - + @@ -27338,7 +27281,7 @@ - + @@ -27352,18 +27295,18 @@ - + - + - + - + @@ -27390,10 +27333,10 @@ - + - + @@ -27404,22 +27347,22 @@ - + - + - + - + - + @@ -27430,7 +27373,7 @@ - + @@ -27441,40 +27384,40 @@ - + - + - + - + - + - + - - + + - + - + - + - + @@ -27486,25 +27429,25 @@ - + - + - + - + - + @@ -27528,18 +27471,18 @@ - + - + - + @@ -27553,8 +27496,8 @@ - - + + @@ -27576,28 +27519,28 @@ - - - - + + + + - + - + - + @@ -27609,53 +27552,53 @@ - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -27673,64 +27616,64 @@ - + - + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -27744,217 +27687,217 @@ - - - + + + - - - + + + - + - - - + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + @@ -27962,65 +27905,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -28028,47 +27971,47 @@ - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -28083,17 +28026,17 @@ - + - + - + - + @@ -28103,15 +28046,15 @@ - + - + - + @@ -28121,66 +28064,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -28191,137 +28134,137 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - + - + - + - + @@ -28331,42 +28274,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -28378,7 +28321,7 @@ - + @@ -28394,6 +28337,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -28579,7 +28580,7 @@ - + @@ -28595,7 +28596,7 @@ - + @@ -30247,7 +30248,7 @@ - + @@ -31402,7 +31403,7 @@ - + @@ -31698,16 +31699,16 @@ - - + + - - - + + + - + @@ -32441,7 +32442,7 @@ - + @@ -33969,10 +33970,10 @@ - + - + @@ -33981,7 +33982,7 @@ - + @@ -34011,7 +34012,7 @@ - + @@ -34042,7 +34043,7 @@ - + @@ -34072,7 +34073,7 @@ - + @@ -35876,7 +35877,7 @@ - + @@ -36210,10 +36211,10 @@ - + - + @@ -37373,7 +37374,7 @@ - + @@ -37937,7 +37938,7 @@ - + @@ -38381,56 +38382,56 @@ - - - - - + + + + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + @@ -39101,24 +39102,21 @@ - + - + - + - + - + - - - - + @@ -39126,34 +39124,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -39182,7 +39180,7 @@ - + @@ -39215,7 +39213,7 @@ - + @@ -39223,88 +39221,83 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + + + + + - + + - - - - - - + - - + + - - + + - - + + - - - + + + - - - + + + - - - - - + - + - + - + @@ -39322,7 +39315,7 @@ - + @@ -39331,28 +39324,28 @@ - + - + - + - + - + - + - + - + @@ -39382,7 +39375,7 @@ - + @@ -39390,76 +39383,76 @@ - - - - - - + + + + + + - + - + - + - + + + + + + + + + + - + + - - - - - - - - - - - + - + - + - + - + - + @@ -39481,8 +39474,8 @@ - - + + @@ -39494,7 +39487,7 @@ - + @@ -39531,7 +39524,7 @@ - + @@ -39540,7 +39533,7 @@ - + @@ -39560,22 +39553,22 @@ - + - + - + - + @@ -39586,19 +39579,19 @@ - + - + - + @@ -39609,7 +39602,7 @@ - + @@ -39617,19 +39610,19 @@ - - - - - - - + + + + + + + + - - + @@ -39655,8 +39648,8 @@ - - + + @@ -39704,27 +39697,27 @@ - + - - + + - - + + - + - + @@ -39738,7 +39731,7 @@ - + @@ -39747,22 +39740,22 @@ - + - - + + - + - - + + + + - - - + @@ -39774,18 +39767,18 @@ - + - + - + @@ -39794,23 +39787,23 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -39820,7 +39813,7 @@ - + @@ -39852,7 +39845,7 @@ - + @@ -39881,129 +39874,133 @@ - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + + + + + @@ -40013,51 +40010,47 @@ - + - - - - - + - - + + - + - + - + - + - - + + - + - + - + @@ -40068,7 +40061,7 @@ - + @@ -40076,18 +40069,18 @@ - + - + - + - + @@ -40095,7 +40088,7 @@ - + @@ -40131,28 +40124,28 @@ - + - + - + - + - + - + - + - + @@ -40161,7 +40154,7 @@ - + @@ -40179,22 +40172,22 @@ - + - + - + - + - + - + @@ -40278,13 +40271,13 @@ - + - + - + @@ -40296,25 +40289,25 @@ - + - + - + - + - + - + @@ -40323,22 +40316,22 @@ - + - + - + - + @@ -40347,13 +40340,13 @@ - + - + @@ -40362,10 +40355,10 @@ - + - + @@ -40377,13 +40370,13 @@ - + - + - + @@ -40398,37 +40391,37 @@ - + - + - + - + - + - + - + @@ -40437,19 +40430,19 @@ - + - + - + - + - + @@ -40470,7 +40463,7 @@ - + @@ -40478,7 +40471,7 @@ - + @@ -40486,8 +40479,8 @@ - - + + @@ -40558,241 +40551,241 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -40804,7 +40797,7 @@ - + @@ -40816,20 +40809,20 @@ - + - + - + - + - - - + + + @@ -40849,7 +40842,7 @@ - + @@ -40857,34 +40850,34 @@ - + - + - + - + - + - + - + - + - + - - + + @@ -40892,8 +40885,8 @@ - - + + @@ -40901,8 +40894,8 @@ - - + + @@ -40925,14 +40918,14 @@ - - + + - - + + @@ -40940,8 +40933,8 @@ - - + + @@ -40952,8 +40945,8 @@ - - + + @@ -40967,21 +40960,21 @@ - + - + - + - + - + @@ -40999,23 +40992,23 @@ - + - - - + + + - + - + - + @@ -41066,13 +41059,13 @@ - + - + - + @@ -41081,13 +41074,13 @@ - + - + - + @@ -41101,31 +41094,31 @@ - + - + - + - + - + - + - + @@ -41170,24 +41163,24 @@ - + - + - + - + - + - + - + @@ -41196,24 +41189,24 @@ - + - + - + - + - + @@ -41221,7 +41214,7 @@ - + @@ -41259,21 +41252,21 @@ - + - + - + - + @@ -41281,27 +41274,27 @@ - + - + - + - + - + - + - + @@ -41375,12 +41368,12 @@ - + - + @@ -41410,7 +41403,7 @@ - + @@ -41436,7 +41429,7 @@ - + @@ -41453,7 +41446,7 @@ - + @@ -41476,18 +41469,18 @@ - + - + - + - + @@ -41496,7 +41489,7 @@ - + @@ -41517,10 +41510,10 @@ - + - + @@ -41537,7 +41530,7 @@ - + @@ -41545,15 +41538,15 @@ - + - + - + - + @@ -41563,9 +41556,9 @@ - + - + @@ -41575,31 +41568,31 @@ - + - + - + - + - + - + - + - + @@ -41634,10 +41627,10 @@ - + - + @@ -41646,22 +41639,22 @@ - + - + - + - + - + - + @@ -41690,7 +41683,7 @@ - + @@ -41717,7 +41710,7 @@ - + @@ -41752,7 +41745,7 @@ - + @@ -41764,13 +41757,13 @@ - + - + - + @@ -41779,7 +41772,7 @@ - + @@ -41788,16 +41781,16 @@ - + - + - + - + @@ -41812,20 +41805,20 @@ - + - + - + - + - + - + @@ -41841,7 +41834,7 @@ - + @@ -41902,7 +41895,7 @@ - + @@ -41915,7 +41908,7 @@ - + @@ -41931,9 +41924,9 @@ - + - + @@ -41944,7 +41937,7 @@ - + @@ -41963,25 +41956,25 @@ - + - + - + - + - + - + - + @@ -42019,7 +42012,7 @@ - + @@ -42057,7 +42050,7 @@ - + @@ -42071,7 +42064,7 @@ - + @@ -42082,7 +42075,7 @@ - + @@ -42102,7 +42095,7 @@ - + @@ -42110,7 +42103,7 @@ - + @@ -42139,18 +42132,18 @@ - + - + - + - + @@ -42180,10 +42173,10 @@ - + - + @@ -42204,72 +42197,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42280,14 +42273,14 @@ - + - - + + @@ -42316,7 +42309,7 @@ - + @@ -42324,15 +42317,15 @@ - + - + - + - + @@ -42353,7 +42346,7 @@ - + @@ -42361,7 +42354,7 @@ - + @@ -42375,7 +42368,7 @@ - + @@ -42386,15 +42379,15 @@ - + - + - + @@ -42408,15 +42401,15 @@ - + - + - + - + @@ -42425,29 +42418,29 @@ - + - + - + - + - + - + - + - + @@ -42461,13 +42454,13 @@ - + - + - + @@ -42475,177 +42468,177 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42665,7 +42658,7 @@ - + @@ -42683,7 +42676,7 @@ - + @@ -42697,7 +42690,7 @@ - + @@ -42708,10 +42701,10 @@ - + - + @@ -42728,7 +42721,7 @@ - + @@ -42799,7 +42792,7 @@ - + @@ -42828,7 +42821,7 @@ - + @@ -42842,7 +42835,7 @@ - + @@ -42859,14 +42852,14 @@ - + - + @@ -42877,7 +42870,7 @@ - + @@ -42888,30 +42881,30 @@ - + - + - + - + - + - + - + @@ -42920,51 +42913,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -42981,7 +42974,7 @@ - + @@ -42995,7 +42988,7 @@ - + @@ -43015,7 +43008,7 @@ - + @@ -43032,7 +43025,7 @@ - + @@ -43046,7 +43039,7 @@ - + @@ -43063,23 +43056,23 @@ - + - + - + - + - + - + @@ -43088,10 +43081,10 @@ - + - + @@ -43099,7 +43092,7 @@ - + @@ -43110,7 +43103,7 @@ - + @@ -43139,7 +43132,7 @@ - + @@ -43156,7 +43149,7 @@ - + @@ -43179,7 +43172,7 @@ - + @@ -43190,10 +43183,10 @@ - + - + @@ -43222,7 +43215,7 @@ - + @@ -43239,15 +43232,15 @@ - + - + - + - + @@ -43285,13 +43278,13 @@ - + - + @@ -43302,7 +43295,7 @@ - + @@ -43316,27 +43309,27 @@ - + - + - + - + - + - + - + - + @@ -43344,24 +43337,24 @@ - + - + - + - + - + - + @@ -43369,10 +43362,10 @@ - + - + @@ -43380,10 +43373,10 @@ - + - + @@ -43394,9 +43387,9 @@ - + - + @@ -43405,97 +43398,97 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43503,7 +43496,7 @@ - + @@ -43520,7 +43513,7 @@ - + @@ -43528,63 +43521,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + @@ -43594,10 +43590,10 @@ - + - + @@ -43615,7 +43611,7 @@ - + @@ -43630,19 +43626,19 @@ - + - + - + - + - + @@ -43699,13 +43695,13 @@ - + - + - + @@ -43753,7 +43749,7 @@ - + @@ -43810,7 +43806,7 @@ - + @@ -43819,65 +43815,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -43888,21 +43884,21 @@ - + - + - + - + @@ -43913,7 +43909,7 @@ - + @@ -43926,7 +43922,7 @@ - + @@ -43939,13 +43935,13 @@ - + - + @@ -43963,10 +43959,10 @@ - + - + @@ -43993,8 +43989,8 @@ - - + + @@ -44002,8 +43998,8 @@ - - + + @@ -44011,168 +44007,168 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -44195,8 +44191,8 @@ - - + + @@ -44204,8 +44200,8 @@ - - + + @@ -44216,7 +44212,7 @@ - + @@ -44230,7 +44226,7 @@ - + @@ -44238,10 +44234,10 @@ - + - + @@ -44255,9 +44251,9 @@ - + - + @@ -44269,10 +44265,10 @@ - + - + @@ -44299,7 +44295,7 @@ - + @@ -44314,9 +44310,9 @@ - + - + @@ -44328,17 +44324,17 @@ - + - + - + - - + + @@ -44346,7 +44342,7 @@ - + @@ -44354,89 +44350,89 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -44444,13 +44440,13 @@ - + - + @@ -44458,21 +44454,21 @@ - - + + - + - + - + - + @@ -44486,7 +44482,7 @@ - + @@ -44509,37 +44505,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -44554,7 +44550,7 @@ - + @@ -44592,10 +44588,10 @@ - + - + @@ -44619,20 +44615,20 @@ - + - + - + - - + + @@ -44640,7 +44636,7 @@ - + @@ -44648,26 +44644,26 @@ - + - + - + - + - + - + - + - + @@ -44696,20 +44692,20 @@ - + - + - + - + - + @@ -44718,18 +44714,18 @@ - + - + - + - + - + @@ -44738,10 +44734,10 @@ - + - + @@ -44749,7 +44745,7 @@ - + @@ -44757,23 +44753,23 @@ - + - + - + - - + + - + - + @@ -44785,27 +44781,27 @@ - + - + - + - + - + - + - + @@ -44816,7 +44812,7 @@ - + @@ -44825,7 +44821,7 @@ - + @@ -44854,7 +44850,7 @@ - + @@ -44865,34 +44861,34 @@ - + - + - + - + - + - + - + - - - + + + @@ -44900,10 +44896,10 @@ - + - + @@ -44912,15 +44908,15 @@ - + - + - + @@ -44928,104 +44924,104 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -45034,10 +45030,10 @@ - + - + @@ -45049,16 +45045,16 @@ - + - + - + - + @@ -45070,22 +45066,22 @@ - + - + - + - + @@ -45103,12 +45099,12 @@ - + - + - + @@ -45120,107 +45116,107 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -45232,7 +45228,7 @@ - + @@ -45247,10 +45243,10 @@ - + - + @@ -45291,7 +45287,7 @@ - + @@ -45314,7 +45310,7 @@ - + @@ -45322,7 +45318,7 @@ - + @@ -45340,10 +45336,10 @@ - + - + @@ -45369,7 +45365,7 @@ - + @@ -45377,16 +45373,16 @@ - + - + - + @@ -45412,15 +45408,15 @@ - + - + - + @@ -45428,7 +45424,7 @@ - + @@ -45442,28 +45438,28 @@ - + - + - + - + - + - + - + @@ -45474,10 +45470,10 @@ - + - + @@ -45486,12 +45482,12 @@ - + - + @@ -45502,7 +45498,7 @@ - + @@ -45519,7 +45515,7 @@ - + @@ -45530,70 +45526,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -45601,18 +45597,18 @@ - + - + - + @@ -45642,7 +45638,7 @@ - + @@ -45654,7 +45650,7 @@ - + @@ -45665,13 +45661,13 @@ - + - + - + @@ -45679,7 +45675,7 @@ - + @@ -45688,7 +45684,7 @@ - + @@ -45696,68 +45692,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -45786,17 +45782,17 @@ - + - + - + - - - + + + @@ -45810,20 +45806,20 @@ - + - + - + - + - + @@ -45835,7 +45831,7 @@ - + @@ -45843,18 +45839,18 @@ - + - + - + - + @@ -45862,17 +45858,17 @@ - + - + - + @@ -45880,455 +45876,456 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - + - + - + - + - + @@ -46339,320 +46336,320 @@ - - + + - + - - - + + + - - - + + + + + + + + - - + + + - - - + + - - + + + + + + - - - - - - - - - - + - - + + + + + + + + + + - + - - - + - + - + + - - - - + - + + - + + - + + - - - - - - - - + + + + + + - + + - - - - - - - + + + + + + + - - - + + + + - - - - - - - - + - - + + - - - + + + + + + + - + + - - - - - - + - - + + + + + + - + + + - - - + + + - - + + + - - - - + + + - + - + + + - - - - - - - - - + - + - + - - - - + + + + + + + + + + + + + + - - - - - - - + - + + - - + + + + + - - - - + - + + + + + + + + + + + - - - - - + - - - - - - - - + - - - - - + - - - + + + - - - + + + - - - + + + - - + + - - + + @@ -46660,716 +46657,720 @@ - - - + + + - - - + + + + + + + + - + - - + + - - - - - - - + + - - - + + + - - - + + + + + + + + - + - + - + - + - - + + - + - - - - - - - + + + + + + + - + - - + + - + + - - + - + + - + - + + - - + + - - - + + - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + + + + + + - - + + - - + + - - + + + - - - + + + + + - - - - - + + - + - - + + + + - + - - + - - + + + - - - - - - - - + - - + + - - + + + + + + + - - + + - + + - + + - - - - + + - + + + - - - - - - - - + - - + + + + + + + + - - - + - - - - - + + + + + + + - - + - + + - - - - - - - + - + - - + + - + - + - + + + + + + - + + + + - - - - - - - - - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - - - + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - + + + + + + + + + - - + + + - - - - + + - - - - - - - + + - - + + - - + + + + + + - + + + + + - - - - - - - - - + - + - - + + - - - + + + - - - - + + + + - - + + - - + + - + - - + + - - + + - - + + - + - + - + - - + + - + - - + + - - + + + + + + + - - + - - - - - + + + + + + - - + - - - + + + - - - + + + - - + + - - - + + + - + - - + + - + - + - + @@ -47377,7 +47378,7 @@ - + @@ -47385,22 +47386,22 @@ - + - + - + - - + + - + @@ -47412,189 +47413,189 @@ - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -47605,94 +47606,94 @@ - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -47896,18 +47897,18 @@ - + - + - + @@ -47916,14 +47917,14 @@ - + - + @@ -48010,7 +48011,7 @@ - + @@ -48355,11 +48356,11 @@ - + - + @@ -48370,7 +48371,7 @@ - + @@ -48385,21 +48386,21 @@ - + - + - + - + @@ -48477,7 +48478,7 @@ - + @@ -48519,7 +48520,7 @@ - + @@ -48597,7 +48598,7 @@ - + @@ -48610,7 +48611,7 @@ - + @@ -48763,7 +48764,7 @@ - + @@ -48828,10 +48829,10 @@ - + - + @@ -48893,8 +48894,8 @@ - - + + @@ -48919,7 +48920,7 @@ - + @@ -48927,7 +48928,7 @@ - + @@ -48950,7 +48951,7 @@ - + @@ -48999,23 +49000,23 @@ - - + + - + - + - + @@ -49139,7 +49140,7 @@ - + @@ -49157,7 +49158,7 @@ - + @@ -49278,14 +49279,14 @@ - + - + @@ -49295,25 +49296,25 @@ - + - + - + - + @@ -49321,7 +49322,7 @@ - + @@ -49330,7 +49331,7 @@ - + @@ -49340,7 +49341,7 @@ - + @@ -49351,7 +49352,7 @@ - + @@ -49363,7 +49364,7 @@ - + @@ -49376,7 +49377,7 @@ - + @@ -49390,7 +49391,7 @@ - + @@ -49405,7 +49406,7 @@ - + @@ -49441,14 +49442,14 @@ - + - + @@ -49481,7 +49482,7 @@ - + @@ -49492,57 +49493,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + @@ -49552,7 +49553,7 @@ - + @@ -49576,7 +49577,7 @@ - + @@ -50017,7 +50018,7 @@ - + @@ -50053,7 +50054,7 @@ - + @@ -50183,9 +50184,9 @@ - + - + @@ -50206,14 +50207,14 @@ - + - - + + @@ -50226,9 +50227,9 @@ - - - + + + @@ -50244,8 +50245,8 @@ - - + + @@ -50289,35 +50290,35 @@ - - + + - - + + - - + + - + - + - + - + @@ -50333,7 +50334,7 @@ - + @@ -50343,7 +50344,7 @@ - + @@ -50354,7 +50355,7 @@ - + @@ -50383,27 +50384,27 @@ - + - + - - + + - - - + + + - + - + @@ -50411,7 +50412,7 @@ - + @@ -50422,11 +50423,11 @@ - + - + @@ -50435,7 +50436,7 @@ - + @@ -50451,7 +50452,12 @@ - + + + + + + @@ -50543,13 +50549,13 @@ - + - + @@ -50572,7 +50578,7 @@ - + @@ -50620,15 +50626,15 @@ - + - + - + @@ -50648,7 +50654,7 @@ - + @@ -50656,31 +50662,31 @@ - + - + - + - + - - - - - - + + + + + - + + @@ -50719,11 +50725,11 @@ - + - + @@ -50735,7 +50741,7 @@ - + @@ -50745,7 +50751,7 @@ - + @@ -50756,7 +50762,7 @@ - + @@ -50771,34 +50777,34 @@ - + - + - + - + - + - + - + - + @@ -50810,13 +50816,38 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -50824,36 +50855,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + - + @@ -50861,7 +50867,7 @@ - + @@ -50869,42 +50875,42 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -50912,13 +50918,13 @@ - + - + - + @@ -50932,7 +50938,7 @@ - + @@ -50940,57 +50946,57 @@ - - - - + + + - - + + + - + - + - + - - + + - - - - - - - - + + - + + + + + + + - - + + @@ -51021,7 +51027,7 @@ - + @@ -51041,9 +51047,9 @@ - + - + @@ -51055,8 +51061,8 @@ - - + + @@ -51073,13 +51079,13 @@ - + - + - + @@ -51087,14 +51093,14 @@ - + - + @@ -51114,7 +51120,7 @@ - + @@ -51124,118 +51130,118 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - + + - + + + + + + + + + + + + + + + + + - + + + + + - + - - + + - - - + + + - - + + - + - - + + - - + + - - + + @@ -51249,7 +51255,7 @@ - + @@ -51422,7 +51428,7 @@ - + @@ -51459,7 +51465,7 @@ - + @@ -51526,16 +51532,16 @@ - + - + - + @@ -51545,15 +51551,15 @@ - + - + - + @@ -51565,7 +51571,7 @@ - + @@ -51574,21 +51580,21 @@ - + - + - + - + @@ -51669,7 +51675,7 @@ - + @@ -51683,7 +51689,7 @@ - + @@ -51734,14 +51740,14 @@ - + - - - + + + @@ -51765,8 +51771,8 @@ - - + + @@ -51780,7 +51786,7 @@ - + @@ -51796,7 +51802,7 @@ - + @@ -51821,19 +51827,19 @@ - + - + - + - + - + @@ -51846,7 +51852,7 @@ - + @@ -51857,7 +51863,7 @@ - + @@ -51868,7 +51874,7 @@ - + @@ -51876,13 +51882,13 @@ - + - + @@ -51896,15 +51902,15 @@ - + - + - + @@ -51915,22 +51921,22 @@ - + - + - + - + @@ -51938,14 +51944,14 @@ - + - + @@ -51955,11 +51961,11 @@ - + - + @@ -51967,10 +51973,10 @@ - + - + @@ -52001,7 +52007,7 @@ - + @@ -52010,53 +52016,53 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -52070,7 +52076,7 @@ - + @@ -52090,17 +52096,17 @@ - - - - - - - - - - - + + + + + + + + + + + @@ -52159,18 +52165,18 @@ - + - + - + - + @@ -52180,43 +52186,43 @@ - + - + - + - + - + - + - + - + - + @@ -52231,24 +52237,24 @@ - + - + - + - + - + @@ -52256,10 +52262,10 @@ - + - + @@ -52267,9 +52273,9 @@ - + - + @@ -52296,7 +52302,7 @@ - + @@ -52320,10 +52326,10 @@ - + - + @@ -52332,18 +52338,18 @@ - + - + - + - + - + @@ -52352,15 +52358,15 @@ - + - + - + @@ -52369,7 +52375,7 @@ - + @@ -52379,7 +52385,7 @@ - + @@ -52387,13 +52393,13 @@ - + - + @@ -52407,7 +52413,7 @@ - + @@ -52424,16 +52430,16 @@ - + - + - + @@ -52443,7 +52449,7 @@ - + @@ -52451,13 +52457,13 @@ - + - + @@ -52475,30 +52481,30 @@ - + - + - - - - - - - - - - + + + + + + + + + - + + @@ -52524,23 +52530,23 @@ - - - - - - + - - + + - + + + + + + @@ -52647,7 +52653,7 @@ - + @@ -52666,7 +52672,7 @@ - + @@ -52708,66 +52714,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -52834,12 +52840,12 @@ - + - + @@ -52857,21 +52863,21 @@ - + - + - + - + @@ -52885,7 +52891,7 @@ - + @@ -52893,22 +52899,22 @@ - + - + - + - + - + @@ -52922,20 +52928,20 @@ - + - + - + - + - + @@ -52947,15 +52953,15 @@ - + - + - + @@ -52963,7 +52969,7 @@ - + @@ -52983,17 +52989,17 @@ - - - - + + + + - + @@ -53002,7 +53008,7 @@ - + @@ -53012,7 +53018,7 @@ - + @@ -53056,7 +53062,7 @@ - + @@ -53077,8 +53083,8 @@ - - + + @@ -53086,15 +53092,15 @@ - - + + - + - + @@ -53110,50 +53116,50 @@ - + - + - + - + - + - + - + - + - + - + @@ -53164,7 +53170,7 @@ - + @@ -53191,7 +53197,7 @@ - + @@ -53200,7 +53206,7 @@ - + @@ -53234,14 +53240,14 @@ - - + + - - + + @@ -53249,12 +53255,12 @@ - - - - - - + + + + + + @@ -53306,13 +53312,13 @@ - + - + @@ -53333,14 +53339,14 @@ - + - - + + @@ -53353,10 +53359,10 @@ - - - - + + + + @@ -53373,7 +53379,7 @@ - + @@ -53552,7 +53558,7 @@ - + @@ -53561,15 +53567,15 @@ - + - + - + @@ -53586,12 +53592,12 @@ - + - + @@ -53630,10 +53636,10 @@ - - + - + + @@ -53656,7 +53662,7 @@ - + @@ -53679,7 +53685,7 @@ - + @@ -53705,7 +53711,7 @@ - + @@ -53713,11 +53719,11 @@ - + - + @@ -53737,10 +53743,10 @@ - + - + @@ -53761,7 +53767,7 @@ - + @@ -53785,13 +53791,13 @@ - + - + - + @@ -53802,28 +53808,28 @@ - + - + - + - + - + - - - + + + - + @@ -53839,7 +53845,7 @@ - + @@ -53865,27 +53871,27 @@ - + - + - + - + - + @@ -53896,38 +53902,38 @@ - + - + - + - + - + - + - + - - - - + + + + @@ -53974,15 +53980,15 @@ - - + + - + - + @@ -54003,7 +54009,7 @@ - + @@ -54043,7 +54049,7 @@ - + @@ -54077,20 +54083,20 @@ - + - - + + - + - + @@ -54102,7 +54108,7 @@ - + @@ -54123,12 +54129,12 @@ - + - + @@ -54143,84 +54149,84 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - - - - - + + + + + - + @@ -54232,16 +54238,16 @@ - + - + - + @@ -54334,12 +54340,12 @@ - - + + - + @@ -54347,15 +54353,15 @@ - + - - - + + + @@ -54372,10 +54378,10 @@ - + - + @@ -54392,9 +54398,9 @@ - - - + + + @@ -54499,14 +54505,14 @@ - + - + @@ -54565,7 +54571,7 @@ - + @@ -54590,25 +54596,25 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -54626,15 +54632,15 @@ - - - + + + - - + + @@ -54649,7 +54655,7 @@ - + @@ -54666,7 +54672,7 @@ - + @@ -54688,39 +54694,39 @@ - + - - - + + + - - + + - - + + - - + + - - + + - - + + @@ -54728,7 +54734,7 @@ - + @@ -54739,18 +54745,18 @@ - + - + - + @@ -54778,55 +54784,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -54840,7 +54846,7 @@ - + @@ -54966,7 +54972,7 @@ - + @@ -54978,8 +54984,8 @@ - - + + @@ -54991,7 +54997,7 @@ - + @@ -55010,7 +55016,7 @@ - + @@ -55018,7 +55024,7 @@ - + @@ -55026,7 +55032,7 @@ - + @@ -55116,8 +55122,8 @@ - - + + @@ -55254,14 +55260,14 @@ - + - + @@ -55333,13 +55339,13 @@ - + - + @@ -55360,14 +55366,14 @@ - + - + @@ -55376,7 +55382,7 @@ - + @@ -55385,7 +55391,7 @@ - + @@ -55434,7 +55440,7 @@ - + @@ -55442,7 +55448,7 @@ - + @@ -55460,24 +55466,24 @@ - + - + - - + + - + @@ -55495,7 +55501,7 @@ - + @@ -55510,10 +55516,10 @@ - - - - + + + + @@ -55538,7 +55544,7 @@ - + @@ -55546,7 +55552,7 @@ - + @@ -55555,15 +55561,15 @@ - + - + - - + + @@ -55576,29 +55582,29 @@ - + - - + + - + - + - + - + - + @@ -55613,21 +55619,21 @@ - + - + - + - + - + - + @@ -55641,7 +55647,7 @@ - + @@ -55649,18 +55655,18 @@ - + - + - + - + @@ -55668,35 +55674,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -55735,7 +55741,7 @@ - + @@ -55753,7 +55759,7 @@ - + @@ -55762,13 +55768,13 @@ - + - + @@ -55786,21 +55792,21 @@ - + - + - + - + - + @@ -55833,9 +55839,9 @@ - + - + @@ -55853,7 +55859,7 @@ - + @@ -55861,7 +55867,7 @@ - + @@ -55882,7 +55888,7 @@ - + @@ -55890,7 +55896,7 @@ - + @@ -55898,23 +55904,23 @@ - + - + - + - + - + - + @@ -55923,17 +55929,17 @@ - + - + - + - + @@ -55954,10 +55960,10 @@ - + - + @@ -55969,136 +55975,136 @@ - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - + + + + - - + + - + - + - - - + + + - - - + + + - + - - - + + + - + - - + + - - + + - - + + - - + + - + - + - - - - + + + + @@ -56108,13 +56114,13 @@ - - + + - + @@ -56122,7 +56128,7 @@ - + @@ -56134,12 +56140,12 @@ - + - + @@ -56301,13 +56307,13 @@ - + - - - + + + @@ -56324,14 +56330,14 @@ - + - - - - - + + + + + @@ -56343,8 +56349,8 @@ - - + + @@ -56433,23 +56439,23 @@ - - + + - - + + - + @@ -56465,7 +56471,7 @@ - + @@ -56477,7 +56483,7 @@ - + @@ -56488,7 +56494,7 @@ - + @@ -56583,25 +56589,25 @@ - - + + - + - + - - + + @@ -56614,20 +56620,20 @@ - + - + - + @@ -56646,7 +56652,7 @@ - + @@ -56680,11 +56686,11 @@ - + - + @@ -56736,11 +56742,11 @@ - + - + @@ -57081,11 +57087,11 @@ - + - + @@ -57099,7 +57105,7 @@ - + @@ -57110,13 +57116,13 @@ - - - - - - - + + + + + + + @@ -57129,8 +57135,8 @@ - - + + @@ -57197,9 +57203,9 @@ - + - + @@ -57267,17 +57273,17 @@ - + - + - + @@ -57343,18 +57349,18 @@ - + - + - + - + @@ -57408,18 +57414,18 @@ - + - + - + @@ -57433,16 +57439,16 @@ - + - + - + @@ -57484,7 +57490,7 @@ - + @@ -57494,12 +57500,12 @@ - + - + @@ -57511,10 +57517,10 @@ - + - + @@ -57525,7 +57531,7 @@ - + @@ -57536,7 +57542,7 @@ - + @@ -57551,7 +57557,7 @@ - + @@ -57562,18 +57568,18 @@ - - - - - - - - + + + + + + + + - + @@ -57591,8 +57597,8 @@ - - + + @@ -57613,8 +57619,8 @@ - - + + @@ -57626,19 +57632,19 @@ - + - + - + - + - - + + @@ -57709,10 +57715,10 @@ - + - + @@ -57743,7 +57749,7 @@ - + @@ -57751,62 +57757,62 @@ - + - - + + - + - - + + - + - + - + - + - + - + - + @@ -57814,7 +57820,7 @@ - + @@ -57822,13 +57828,13 @@ - + - + @@ -57836,10 +57842,10 @@ - + - + @@ -57853,43 +57859,43 @@ - - - + + + - + - + - - + + - - + + - + - + - + - + @@ -57899,30 +57905,30 @@ - + - + - + - + - + - + @@ -57933,22 +57939,22 @@ - + - + - + - + @@ -57969,28 +57975,28 @@ - + - + - + - + - + - + @@ -57998,7 +58004,7 @@ - + @@ -58011,7 +58017,7 @@ - + @@ -58037,9 +58043,9 @@ - - - + + + @@ -58052,7 +58058,7 @@ - + @@ -58061,7 +58067,7 @@ - + @@ -58092,13 +58098,13 @@ - + - + @@ -58114,7 +58120,7 @@ - + @@ -58127,7 +58133,7 @@ - + @@ -58137,7 +58143,7 @@ - + @@ -58152,46 +58158,46 @@ - - + + - + - + - - + + - + - + - + - + @@ -58199,20 +58205,20 @@ - + - + - + - + - + @@ -58225,7 +58231,7 @@ - + @@ -58236,7 +58242,7 @@ - + @@ -58247,7 +58253,7 @@ - + @@ -58255,18 +58261,18 @@ - + - + - + @@ -58331,7 +58337,7 @@ - + @@ -58434,7 +58440,7 @@ - + @@ -58444,12 +58450,12 @@ - - - - - - + + + + + + @@ -58459,20 +58465,20 @@ - - - + + + - + - + @@ -58488,24 +58494,24 @@ - + - + - - + + - - + + @@ -58536,13 +58542,13 @@ - + - + - + @@ -58584,35 +58590,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -58621,7 +58627,7 @@ - + @@ -58629,7 +58635,7 @@ - + @@ -58650,7 +58656,7 @@ - + @@ -58658,7 +58664,7 @@ - + @@ -58669,96 +58675,96 @@ - - - - - - - - - - - + + + + + + + + + + + - - + + - + - - + + - + - - - - - + - + - - + - + + + + + + - + - + - + - + - - + + - + - + - - + + - - + + @@ -58782,7 +58788,7 @@ - + @@ -58795,7 +58801,7 @@ - + @@ -58812,14 +58818,14 @@ - - + + - + - + @@ -58827,7 +58833,7 @@ - + @@ -58871,19 +58877,19 @@ - + - + - - - + + + - + @@ -58892,7 +58898,7 @@ - + @@ -58904,32 +58910,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -58944,7 +58950,7 @@ - + @@ -58964,7 +58970,7 @@ - + @@ -58984,7 +58990,7 @@ - + @@ -58998,10 +59004,10 @@ - + - + @@ -59015,13 +59021,13 @@ - + - + @@ -59029,12 +59035,12 @@ - + - + @@ -59043,74 +59049,74 @@ - + - + - + - + - - - - - - - - - - + + + + + + + + + - + + - + - + - - + + - + - - + + - - + + - - + + @@ -59133,21 +59139,21 @@ - + - + - + @@ -59249,12 +59255,12 @@ - + - - + + @@ -59272,7 +59278,7 @@ - + @@ -59284,7 +59290,7 @@ - + @@ -59296,10 +59302,10 @@ - - + + - + @@ -59311,9 +59317,9 @@ - + - + @@ -59343,9 +59349,9 @@ - + - + @@ -59357,10 +59363,10 @@ - - - - + + + + @@ -59514,9 +59520,9 @@ - + - + @@ -59540,7 +59546,7 @@ - + @@ -59563,17 +59569,17 @@ - - - + + + - + - + @@ -59581,43 +59587,43 @@ - + - + - + - - - + + + - + - + - - + + - + - + - - - + + + @@ -59662,12 +59668,12 @@ - + - - + + @@ -59676,13 +59682,13 @@ - + - + - + @@ -59694,15 +59700,15 @@ - - - + + + - - + + @@ -59713,7 +59719,7 @@ - + @@ -59748,42 +59754,42 @@ - - + + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + @@ -59817,14 +59823,14 @@ - + - + @@ -59832,76 +59838,76 @@ - + - + - + - + - - - - - - - - - + + - + + + + + + + + - + - + - + - - - + + + - - - - - + + + + + - + @@ -59915,13 +59921,13 @@ - + - + @@ -59929,20 +59935,20 @@ - + - + - + - + @@ -59957,7 +59963,7 @@ - + @@ -59987,42 +59993,38 @@ - + - + - + - + - + - - - - - + - + - + @@ -60768,7 +60770,7 @@ - + @@ -61092,7 +61094,7 @@ - + @@ -61244,7 +61246,7 @@ - + @@ -61370,7 +61372,7 @@ - + @@ -61552,7 +61554,7 @@ - + @@ -61709,32 +61711,32 @@ - + - + - + - + - + - + @@ -61772,12 +61774,12 @@ - + - + @@ -61792,7 +61794,7 @@ - + @@ -61949,7 +61951,7 @@ - + @@ -61966,52 +61968,44 @@ - + - + - + - + - + - + - + - - - - - - - - - + - + - + - - + + @@ -62021,12 +62015,12 @@ - + - + @@ -62038,7 +62032,7 @@ - + @@ -62099,12 +62093,12 @@ - - + + - + @@ -62163,13 +62157,13 @@ - + - + - + @@ -62187,7 +62181,7 @@ - + @@ -62202,13 +62196,13 @@ - + - + @@ -62217,7 +62211,7 @@ - + @@ -62300,7 +62294,7 @@ - + @@ -62308,10 +62302,10 @@ - + - + @@ -62323,18 +62317,18 @@ - + - - - - - - - - - + + + + + + + + + @@ -62343,10 +62337,10 @@ - + - - + + @@ -62362,14 +62356,14 @@ - + - + - - + + @@ -62380,55 +62374,55 @@ - + - + - + - + - + - + - - + + - - - + + + - + - + @@ -62436,68 +62430,68 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -62517,10 +62511,10 @@ - + - + @@ -62529,30 +62523,30 @@ - + - + - + - + - + - + - + - - + + @@ -62560,7 +62554,7 @@ - + @@ -62595,7 +62589,7 @@ - + @@ -62784,7 +62778,7 @@ - + @@ -62796,7 +62790,7 @@ - + @@ -62808,7 +62802,7 @@ - + @@ -62816,7 +62810,7 @@ - + @@ -62825,18 +62819,18 @@ - + - + - + - + @@ -62872,16 +62866,16 @@ - + - + - + - + @@ -62889,12 +62883,12 @@ - + - + - + @@ -62902,10 +62896,10 @@ - + - + @@ -62920,12 +62914,12 @@ - + - + - + @@ -62933,50 +62927,50 @@ - + - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - + + - - + + - + - + - + @@ -62984,23 +62978,23 @@ + + + + - + + + - - - - - - - + @@ -63011,7 +63005,7 @@ - + @@ -63029,7 +63023,7 @@ - + @@ -63041,15 +63035,15 @@ - + - + - + - + @@ -63066,7 +63060,7 @@ - + @@ -63089,12 +63083,12 @@ - + - + - + @@ -63115,7 +63109,7 @@ - + @@ -63127,20 +63121,20 @@ - + - + - + - + - + @@ -63149,10 +63143,10 @@ - + - + @@ -63166,7 +63160,7 @@ - + @@ -63207,25 +63201,25 @@ - - - - + + + + - + - - + + - + @@ -63240,23 +63234,23 @@ - + - + - + - + - + @@ -63270,7 +63264,7 @@ - + @@ -63329,50 +63323,50 @@ - - + + - + - + - + - - + + - + - + - + - - + + - - + + - + - + @@ -63381,8 +63375,8 @@ - - + + @@ -63421,7 +63415,7 @@ - + @@ -63449,14 +63443,14 @@ - + - + @@ -63464,7 +63458,7 @@ - + @@ -63472,9 +63466,9 @@ - + - + @@ -63483,11 +63477,11 @@ - - - - - + + + + + @@ -63525,7 +63519,7 @@ - + @@ -63560,7 +63554,7 @@ - + @@ -63616,7 +63610,7 @@ - + @@ -63629,7 +63623,7 @@ - + @@ -63639,7 +63633,7 @@ - + @@ -63651,7 +63645,7 @@ - + @@ -63677,30 +63671,30 @@ - + - + - + - + - + - + - + - + - + @@ -63730,7 +63724,7 @@ - + @@ -63743,49 +63737,49 @@ - + + - - - - + + + - + - + - + - + + + + + - + - - - - - + - - + + - - + + @@ -63793,8 +63787,8 @@ - - + + @@ -63841,17 +63835,17 @@ - + - + - + @@ -63862,7 +63856,7 @@ - + @@ -63875,7 +63869,7 @@ - + @@ -63896,14 +63890,14 @@ - + - + - + @@ -63931,15 +63925,15 @@ - + - + - + @@ -63948,7 +63942,7 @@ - + @@ -63989,16 +63983,16 @@ - + - + - + @@ -64010,28 +64004,28 @@ - + - + - - - - - + + + + + - - + + @@ -64042,7 +64036,7 @@ - + @@ -64054,11 +64048,11 @@ - + - + - + @@ -64071,7 +64065,7 @@ - + @@ -64082,7 +64076,7 @@ - + @@ -64093,7 +64087,7 @@ - + @@ -64101,13 +64095,13 @@ - + - + @@ -64115,7 +64109,7 @@ - + @@ -64123,7 +64117,7 @@ - + @@ -64148,23 +64142,23 @@ - - - - - - - - - - - + + + + + + + + + + + + - - + @@ -64198,7 +64192,7 @@ - + @@ -64231,7 +64225,7 @@ - + @@ -64269,7 +64263,7 @@ - + @@ -64283,18 +64277,18 @@ - + - + - + @@ -64357,55 +64351,55 @@ - - + + - - + + - + - - + + - + - + - - + + - + - - + + - + @@ -64443,42 +64437,42 @@ - - + + - + - + - + - + - + - - + + - + @@ -64487,7 +64481,7 @@ - + @@ -64498,19 +64492,19 @@ - + - + - + - + @@ -64524,19 +64518,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -64552,7 +64546,7 @@ - + @@ -64620,41 +64614,41 @@ - - - + + + - - - + + + - + - + - + - + - - + + - + @@ -64669,7 +64663,7 @@ - + @@ -64677,7 +64671,7 @@ - + @@ -64686,7 +64680,7 @@ - + @@ -64694,7 +64688,7 @@ - + @@ -64708,9 +64702,9 @@ + - - + @@ -64745,69 +64739,69 @@ - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + @@ -64819,32 +64813,32 @@ - - + + - + - + - + - + - + @@ -64856,17 +64850,17 @@ - + - + - + @@ -64894,7 +64888,7 @@ - + @@ -64902,10 +64896,10 @@ - + - + @@ -64926,7 +64920,7 @@ - + @@ -64937,7 +64931,7 @@ - + @@ -64960,48 +64954,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -65016,140 +65010,140 @@ - + - + - - - - - + + + + + + - + - - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + + + + + - + - - - - - + - - + + - - + + - - + + - + - + - + - + - + @@ -65170,7 +65164,7 @@ - + @@ -65178,40 +65172,40 @@ - + - + - + - + - + - + - + - + - + @@ -65241,15 +65235,15 @@ - + - + - + - + @@ -65257,7 +65251,7 @@ - + @@ -65265,54 +65259,54 @@ - + - + - + - + - + - - + + - + - + - + - + - + @@ -65348,15 +65342,15 @@ - + - + - + - + @@ -65364,31 +65358,31 @@ - + - + - + - + - + - + - + - + - + - + @@ -65409,92 +65403,92 @@ - + - + - + - + - + - + - + - + - + + - - - - - - - + + + + + + - + - + - - + + - + - - + + - - + + - - + + - - + + - + - + - + @@ -65504,13 +65498,13 @@ - + - + @@ -65519,49 +65513,49 @@ - + - + - + - + - - + + - - - - + + + + - - + + - - + + - - + + - + @@ -65587,7 +65581,7 @@ - + @@ -65607,36 +65601,36 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -65647,64 +65641,64 @@ - + - + - + - + - - - - - - + + + + + + + - - + - - + + - - + + - + - + - + - + - + @@ -65713,66 +65707,66 @@ - + - + - + - + - - + + - + - - - + + + - + - + - + - - + + - - + + - - + + - + @@ -65780,30 +65774,30 @@ - + - + - + - + - + - + - + - + - + @@ -65818,26 +65812,26 @@ - + - + - + - + - - + + + - - - - - - - + + + + + + @@ -65851,43 +65845,43 @@ - + - + - + - + - - + + - - + + - - + + @@ -65897,116 +65891,116 @@ - + - + - + - + - - + + - + - - - + + + - + - + - + + + + + - + + + - + + - - - + - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66015,7 +66009,7 @@ - + @@ -66035,35 +66029,35 @@ - + - + - + - + - + - + - - - - - - - + + + + + + + + - - - + + - + @@ -66073,72 +66067,72 @@ - + - + - + - - + + + + + + - - - - - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -66147,7 +66141,7 @@ - + @@ -66167,53 +66161,53 @@ - - + + + - - - - - + + + + - + - + - + - - + + - - + + - - + + - - + + - - + + - + @@ -66263,30 +66257,30 @@ - + - + - + - + - + - + - + @@ -66295,7 +66289,7 @@ - + @@ -66318,21 +66312,21 @@ - + - + - + - + - + - + @@ -66341,110 +66335,110 @@ - - - - + + + + + - - + - - - - + + + + - + - + - + - + - + + + + + - - - - - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - - + + @@ -66452,13 +66446,13 @@ - - + + - - + + @@ -66473,33 +66467,33 @@ - + - + - + - - + + - + - + - + @@ -66507,24 +66501,24 @@ - + - + - - + + - + - + @@ -66532,24 +66526,24 @@ - + - + - - + + - + - + @@ -66557,106 +66551,106 @@ - + - + - - + + - + - + - - - + + + - + - + - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - - + + + @@ -66664,128 +66658,128 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - - + + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + @@ -66794,65 +66788,65 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + @@ -66864,59 +66858,59 @@ - + - - - - - - - + + + + + + + - + - + - + - - + + - + - + - + - + @@ -66930,29 +66924,29 @@ - + - + - + - + - + - + - + @@ -66961,14 +66955,14 @@ - - - - - - + + + + + + - + @@ -66977,7 +66971,7 @@ - + @@ -66989,46 +66983,46 @@ - + - + - + - + - - + + - - + + - - + + - + @@ -67039,12 +67033,12 @@ - + - + @@ -67059,14 +67053,14 @@ - - - - - - + + + + + + - + @@ -67083,46 +67077,46 @@ - - + + - - + + - - - + + + - - + + - - - - - - + + + + + + - + @@ -67135,26 +67129,26 @@ - + - - + + - - + + - + @@ -67165,32 +67159,32 @@ - - - + + + - + - + - + - + - + @@ -67198,7 +67192,7 @@ - + @@ -67209,25 +67203,25 @@ - + + - - - - + + + - - + + - - + + @@ -67235,30 +67229,30 @@ - + - - + + - + - + - + - + - + @@ -67282,44 +67276,44 @@ - - - + + + - + - - + + - + - + - + - - + + - + @@ -67330,22 +67324,22 @@ - + - + - + - + - + @@ -67353,7 +67347,7 @@ - + @@ -67371,7 +67365,7 @@ - + @@ -67449,39 +67443,39 @@ - - - - - + + + + + - + - - + + - - - + + + - + - + - + - + - + @@ -67490,10 +67484,10 @@ - + - + @@ -67559,10 +67553,10 @@ - - + + - + @@ -67570,25 +67564,25 @@ - + - + - + - + - + - + @@ -67597,7 +67591,7 @@ - + @@ -67609,12 +67603,12 @@ - + - + - + @@ -67644,24 +67638,24 @@ - + - - - - + + + + - + - + - + @@ -67670,108 +67664,108 @@ - + - - + + - - + + - - + + - - + + - + - + - + - + + - - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -67868,9 +67862,9 @@ - + - + @@ -67945,42 +67939,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -67995,13 +67989,13 @@ - + - + @@ -68009,15 +68003,15 @@ - + - + - + @@ -68035,16 +68029,16 @@ - + - + - + @@ -68056,7 +68050,7 @@ - + @@ -68068,10 +68062,10 @@ - + - + @@ -68080,7 +68074,7 @@ - + @@ -68116,10 +68110,10 @@ - + - + @@ -68130,7 +68124,7 @@ - + @@ -68147,7 +68141,7 @@ - + @@ -68162,7 +68156,7 @@ - + @@ -68173,10 +68167,10 @@ - + - + @@ -68190,7 +68184,7 @@ - + @@ -68201,24 +68195,24 @@ - + - + - + - + - + - + @@ -68230,7 +68224,7 @@ - + @@ -68242,7 +68236,7 @@ - + @@ -68250,74 +68244,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -68325,23 +68319,23 @@ - - - - - + + + + + - - - - - - + + + + + + - + @@ -68374,7 +68368,7 @@ - + @@ -68383,7 +68377,7 @@ - + @@ -68394,52 +68388,52 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -68461,17 +68455,17 @@ - + - + - + @@ -68493,123 +68487,123 @@ - + - + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - - + + - + - + - - + + - - + + - - + + - + + + + + - + + - - + + - - - - - - + - + - - + + - + - - - - + + + + @@ -68692,7 +68686,7 @@ - + @@ -68717,11 +68711,11 @@ - + - + @@ -68748,7 +68742,7 @@ - + @@ -68772,23 +68766,23 @@ - + - + - + - - + + @@ -68808,7 +68802,7 @@ - + @@ -68816,11 +68810,11 @@ - + - + @@ -68894,7 +68888,7 @@ - + @@ -68904,7 +68898,7 @@ - + @@ -68919,13 +68913,13 @@ - - + + - + @@ -68987,13 +68981,13 @@ - + - + @@ -69013,27 +69007,27 @@ - - - - + + + + - + - - + + - + @@ -69072,7 +69066,7 @@ - + @@ -69095,7 +69089,7 @@ - + @@ -69119,7 +69113,7 @@ - + @@ -69134,7 +69128,7 @@ - + @@ -69176,19 +69170,19 @@ - + - + - + @@ -69237,7 +69231,7 @@ - + @@ -69246,17 +69240,17 @@ - + - + - + @@ -69265,7 +69259,7 @@ - + @@ -69273,7 +69267,7 @@ - + @@ -69281,7 +69275,7 @@ - + @@ -69291,28 +69285,28 @@ - + - + - + - + - + @@ -69328,23 +69322,23 @@ - - + + - - + + - + - + @@ -69358,9 +69352,9 @@ - + - + @@ -69371,14 +69365,14 @@ - + - + @@ -69399,7 +69393,7 @@ - + @@ -69408,11 +69402,11 @@ - - - - - + + + + + @@ -69435,33 +69429,33 @@ - + - + - + - + - + - + - + - + @@ -69470,7 +69464,7 @@ - + @@ -69499,7 +69493,7 @@ - + @@ -69513,10 +69507,10 @@ + - - - + + @@ -69528,17 +69522,17 @@ - + - + - + @@ -69560,8 +69554,8 @@ - - + + @@ -69631,12 +69625,12 @@ - + - + @@ -69644,13 +69638,13 @@ - - + + - + @@ -69669,12 +69663,12 @@ - + - + @@ -69690,7 +69684,7 @@ - + @@ -69698,61 +69692,61 @@ - + - + - + - + - + - + - + - + - - + + - + - + @@ -69763,9 +69757,9 @@ - + - + @@ -69789,17 +69783,17 @@ - - - + + + + - - + - + @@ -69828,7 +69822,7 @@ - + @@ -69844,12 +69838,12 @@ - + - + @@ -69860,51 +69854,51 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -69915,31 +69909,31 @@ - - - + + - - + + - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -69953,8 +69947,8 @@ - - + + @@ -69993,97 +69987,97 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + @@ -70092,7 +70086,7 @@ - + @@ -70143,7 +70137,7 @@ - + @@ -70152,7 +70146,7 @@ - + @@ -70212,7 +70206,7 @@ - + @@ -70221,7 +70215,7 @@ - + @@ -70233,7 +70227,7 @@ - + @@ -70347,7 +70341,7 @@ - + @@ -70365,16 +70359,16 @@ - + - + - + @@ -70389,12 +70383,12 @@ - + - + @@ -70403,13 +70397,13 @@ - + - + @@ -70418,10 +70412,10 @@ - + - + @@ -70451,7 +70445,7 @@ - + @@ -70469,33 +70463,33 @@ - + - + - + - + - + - + - - + + - + - + @@ -70504,7 +70498,7 @@ - + @@ -70512,34 +70506,34 @@ - + - + - + - + - + - + - + - + - + - + @@ -70548,10 +70542,10 @@ - + - + @@ -70574,34 +70568,34 @@ - + - + - + - + - + - + - + - - + + - + @@ -70609,114 +70603,114 @@ - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + + + + + - + + - - - - - - + - - + + + + + + - - + + + - - - + + - + - - - - - + - + - - + + - + @@ -70736,13 +70730,13 @@ - + - + - + @@ -70754,7 +70748,7 @@ - + @@ -70762,59 +70756,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -70826,16 +70820,16 @@ - - + + - + - + - + @@ -70855,187 +70849,187 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - + + - - + + - - + + - - + + + + + + - + + + + + + + - + - - - - - + + - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + @@ -71052,6 +71046,14 @@ + + + + + + + + @@ -71953,7 +71955,7 @@ - + @@ -71986,11 +71988,11 @@ - + - + @@ -72037,7 +72039,7 @@ - + @@ -72406,7 +72408,7 @@ - + @@ -72479,7 +72481,7 @@ - + @@ -72581,7 +72583,7 @@ - + @@ -72744,7 +72746,7 @@ - + @@ -72785,7 +72787,7 @@ - + @@ -72863,7 +72865,7 @@ - + @@ -73094,7 +73096,7 @@ - + @@ -73129,27 +73131,27 @@ - + - + - + - + @@ -73226,34 +73228,34 @@ - + - + - + - + - + - + @@ -73367,7 +73369,7 @@ - + @@ -73399,19 +73401,19 @@ - + - + - + - + - + @@ -73422,7 +73424,7 @@ - + @@ -73449,7 +73451,7 @@ - + @@ -73479,7 +73481,7 @@ - + @@ -74333,7 +74335,7 @@ - + @@ -75338,7 +75340,7 @@ - + @@ -75594,33 +75596,33 @@ - + - + - + - + - + - + @@ -75628,60 +75630,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -75689,14 +75691,14 @@ - + - + @@ -75707,14 +75709,14 @@ - + - + @@ -75823,35 +75825,35 @@ - + - + - + - + - + - + - + @@ -76085,7 +76087,7 @@ - + @@ -76095,7 +76097,7 @@ - + @@ -76145,10 +76147,10 @@ - + - - + + @@ -76242,7 +76244,7 @@ - + @@ -76252,14 +76254,14 @@ - + - + @@ -76871,7 +76873,7 @@ - + @@ -76913,10 +76915,10 @@ - + - + @@ -77038,7 +77040,7 @@ - + @@ -77622,7 +77624,7 @@ - + @@ -77823,7 +77825,7 @@ - + @@ -77849,7 +77851,7 @@ - + @@ -77977,7 +77979,7 @@ - + @@ -79082,10 +79084,10 @@ - + - + @@ -79093,49 +79095,49 @@ - + - + - + - + - + - + - + - + @@ -79143,7 +79145,7 @@ - + @@ -79151,7 +79153,7 @@ - + @@ -79159,72 +79161,72 @@ - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -79236,7 +79238,7 @@ - + @@ -79248,7 +79250,7 @@ - + @@ -79260,14 +79262,14 @@ - + - + @@ -79287,7 +79289,7 @@ - + @@ -79316,7 +79318,7 @@ - + @@ -79327,7 +79329,7 @@ - + @@ -79335,13 +79337,13 @@ - + - + @@ -79352,10 +79354,10 @@ - + - + @@ -79501,63 +79503,63 @@ - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + @@ -79570,19 +79572,19 @@ - + - + - + - + - + @@ -79592,7 +79594,7 @@ - + @@ -79602,44 +79604,44 @@ - + - + - + - + - + - + - + - + @@ -79647,7 +79649,7 @@ - + @@ -79679,13 +79681,13 @@ - + - + @@ -79693,23 +79695,23 @@ - + - + - + - + - + @@ -79791,13 +79793,13 @@ - + - + @@ -79806,55 +79808,55 @@ - + - + - + - + - + - + - + - + - + - + @@ -79864,174 +79866,174 @@ - + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -80062,151 +80064,151 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -80214,7 +80216,7 @@ - + @@ -80225,30 +80227,30 @@ - - - + + + - + - + - + - - + + - + @@ -80256,90 +80258,90 @@ - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + @@ -80354,11 +80356,11 @@ - + - + @@ -80368,7 +80370,7 @@ - + @@ -80391,21 +80393,21 @@ - + - + - + @@ -80424,12 +80426,12 @@ - + - + @@ -80438,11 +80440,11 @@ - + - + @@ -80450,29 +80452,29 @@ - + - + - + - + - - + + - + @@ -80531,7 +80533,7 @@ - + @@ -80562,10 +80564,10 @@ - + - + @@ -80582,7 +80584,7 @@ - + @@ -80599,7 +80601,7 @@ - + @@ -80634,17 +80636,17 @@ - + - + - + @@ -80743,7 +80745,7 @@ - + @@ -80759,63 +80761,63 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -80862,7 +80864,7 @@ - + @@ -81013,10 +81015,10 @@ - + - + @@ -81483,7 +81485,7 @@ - + @@ -81492,7 +81494,7 @@ - + @@ -82399,7 +82401,7 @@ - + @@ -82457,7 +82459,7 @@ - + @@ -82468,7 +82470,7 @@ - + @@ -83570,7 +83572,7 @@ - + @@ -84099,132 +84101,132 @@ - - - + + + - - - + + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - + + - + - + - - - - - - - - - + + + + + + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - - + + - - + + - - - + + + - - - + + + - - + + - - - + + + - - - - + + + + @@ -84483,7 +84485,7 @@ - + @@ -84497,7 +84499,7 @@ - + @@ -84511,7 +84513,7 @@ - + @@ -84524,7 +84526,7 @@ - + @@ -84598,7 +84600,7 @@ - + @@ -84607,7 +84609,7 @@ - + @@ -84683,7 +84685,7 @@ - + @@ -85852,47 +85854,47 @@ - + - + - + - + - + - + - + - + @@ -86552,7 +86554,7 @@ - + @@ -86676,15 +86678,15 @@ - + - + - + @@ -87100,7 +87102,7 @@ - + @@ -87156,15 +87158,15 @@ - + - + - + @@ -87367,7 +87369,7 @@ - + @@ -89003,7 +89005,7 @@ - + @@ -89032,16 +89034,16 @@ - + - + - + @@ -89070,7 +89072,7 @@ - + @@ -90527,7 +90529,7 @@ - + @@ -91645,7 +91647,7 @@ - + @@ -91805,13 +91807,13 @@ - + - + - + @@ -92155,7 +92157,7 @@ - + @@ -93012,7 +93014,7 @@ - + @@ -93972,7 +93974,7 @@ - + @@ -94054,7 +94056,7 @@ - + @@ -94183,7 +94185,7 @@ - + @@ -94195,7 +94197,7 @@ - + @@ -94240,7 +94242,7 @@ - + @@ -94298,7 +94300,7 @@ - + @@ -94316,9 +94318,9 @@ - - - + + + @@ -94502,13 +94504,13 @@ - + - + @@ -94585,7 +94587,7 @@ - + @@ -95491,7 +95493,7 @@ - + @@ -95675,7 +95677,7 @@ - + @@ -95705,7 +95707,7 @@ - + @@ -95713,7 +95715,7 @@ - + @@ -95791,7 +95793,7 @@ - + @@ -95802,7 +95804,7 @@ - + @@ -95834,7 +95836,7 @@ - + @@ -95948,7 +95950,7 @@ - + @@ -96053,7 +96055,7 @@ - + @@ -96195,7 +96197,7 @@ - + @@ -96248,7 +96250,7 @@ - + @@ -96283,7 +96285,7 @@ - + @@ -96803,9 +96805,9 @@ - - - + + + @@ -97712,7 +97714,7 @@ - + @@ -98171,7 +98173,7 @@ - + @@ -98414,19 +98416,19 @@ - - + + - + - + @@ -98714,7 +98716,7 @@ - + @@ -99060,7 +99062,7 @@ - + @@ -99262,10 +99264,10 @@ - + - + @@ -99355,7 +99357,7 @@ - + @@ -99393,18 +99395,45 @@ - + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + - + - + @@ -99548,7 +99577,7 @@ - + @@ -99563,37 +99592,37 @@ - + - + - + - + - + - + - + @@ -99601,12 +99630,12 @@ - + - + @@ -99621,42 +99650,42 @@ - - - - + + + + - + - - + + - + - + - + - + - + - - + + @@ -99945,7 +99974,7 @@ - + @@ -99953,8 +99982,8 @@ - - + + @@ -100003,15 +100032,15 @@ - + - + - + @@ -100023,7 +100052,7 @@ - + @@ -100056,7 +100085,7 @@ - + @@ -100104,7 +100133,7 @@ - + @@ -100190,43 +100219,43 @@ - + - + - + - + - + - + - + - + - + - + @@ -100234,10 +100263,10 @@ - - - - + + + + @@ -100249,13 +100278,13 @@ - + - + @@ -100268,25 +100297,25 @@ - + - + - - + + - - + + @@ -100308,31 +100337,31 @@ - - + + - - + + - - - + + + - - - - - - - + + + + + + + - - - + + + @@ -100376,7 +100405,7 @@ - + @@ -100387,8 +100416,8 @@ - - + + @@ -100396,9 +100425,9 @@ - + - + @@ -100415,7 +100444,7 @@ - + @@ -100463,14 +100492,14 @@ - + - + @@ -100489,7 +100518,7 @@ - + @@ -100607,7 +100636,7 @@ - + @@ -100624,7 +100653,7 @@ - + @@ -100647,24 +100676,24 @@ - - - - + + + + - + - - + + - + - + @@ -100673,7 +100702,7 @@ - + @@ -100681,24 +100710,24 @@ - + - + - + - + @@ -100802,7 +100831,7 @@ - + @@ -100845,8 +100874,8 @@ - - + + @@ -101006,8 +101035,8 @@ - - + + @@ -101015,7 +101044,7 @@ - + @@ -101026,13 +101055,13 @@ - - - + - - - + + + + + @@ -101045,7 +101074,7 @@ - + @@ -101053,26 +101082,26 @@ - + - + - - + + - + @@ -101086,17 +101115,17 @@ - - + + - + - + @@ -101112,13 +101141,13 @@ - + - + - + @@ -101133,7 +101162,7 @@ - + @@ -101145,29 +101174,29 @@ - + - + - + - + - + - + - + @@ -101196,14 +101225,14 @@ - + - + @@ -101214,12 +101243,12 @@ - + - + @@ -101228,70 +101257,70 @@ - + - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - - - + + + - + - + - + - + - + - + @@ -101303,31 +101332,31 @@ - - + + - + - + - + - + - + @@ -101335,125 +101364,125 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - - + + - - - + + + - - - + + + - - + + @@ -101465,7 +101494,7 @@ - + @@ -101473,30 +101502,30 @@ - + - + - + - + - + @@ -101505,7 +101534,7 @@ - + @@ -101513,37 +101542,37 @@ - + - + - + - + - + - - - - - - - - + + + + + + + + - + @@ -101551,20 +101580,20 @@ - - + + - - + + - + @@ -101579,33 +101608,33 @@ - + - + - + - + - + - + @@ -101613,21 +101642,21 @@ - + - + - + - + - + - + @@ -101642,7 +101671,7 @@ - + @@ -101650,13 +101679,13 @@ - + - + - + @@ -101667,7 +101696,7 @@ - + @@ -101684,10 +101713,10 @@ - + - + @@ -101705,15 +101734,15 @@ - + - + - + @@ -101722,7 +101751,7 @@ - + @@ -101736,7 +101765,7 @@ - + @@ -101754,7 +101783,7 @@ - + @@ -101763,21 +101792,21 @@ - + - - - - - + + + - - + + + + @@ -101786,14 +101815,14 @@ - + - + @@ -101806,45 +101835,45 @@ - + - + - + - + - + - + - + @@ -101880,17 +101909,17 @@ - + - + - + @@ -102002,68 +102031,68 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -102075,7 +102104,7 @@ - + @@ -102108,40 +102137,40 @@ - - + + - + - + - + - + - + - + - + - + - + @@ -102152,34 +102181,34 @@ - + - + - - - - - - - - - - + + + + + + + + + + - + - + @@ -102206,7 +102235,7 @@ - + @@ -102237,34 +102266,34 @@ - + - + - + - + - + - + - + @@ -102277,35 +102306,35 @@ - - - - - - - + + - + + + + + + - + - + - + - + @@ -102331,7 +102360,7 @@ - + @@ -102345,7 +102374,7 @@ - + @@ -102353,30 +102382,30 @@ - + - + - + - + - + - - - - + + + + @@ -102393,12 +102422,12 @@ - + - + @@ -102414,12 +102443,12 @@ - + - + @@ -102427,26 +102456,26 @@ - + - + - + - + - + - + @@ -102454,36 +102483,36 @@ - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + @@ -102507,18 +102536,18 @@ - + - + - + @@ -102536,65 +102565,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -102626,24 +102655,24 @@ - + - + - + - + - + - + - + @@ -102655,18 +102684,18 @@ - - - + - - - - - - - - + + + + + + + + + + @@ -102711,7 +102740,7 @@ - + @@ -102758,27 +102787,27 @@ - + - + - + - - + + - - + + @@ -102787,31 +102816,31 @@ - + - + - + - + - + - + @@ -102839,12 +102868,12 @@ - - - - + + + + - + @@ -102853,10 +102882,10 @@ - - + + - + @@ -102871,36 +102900,36 @@ - - + + - + - - + + - - + + - - + + @@ -103009,13 +103038,13 @@ - + - + @@ -103023,12 +103052,12 @@ - + - + @@ -103037,90 +103066,90 @@ - + - + - - - + + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + @@ -103143,15 +103172,15 @@ - - + + - + @@ -103188,14 +103217,14 @@ - + - + @@ -103271,7 +103300,7 @@ - + @@ -103344,7 +103373,7 @@ - + @@ -103400,7 +103429,7 @@ - + @@ -103416,17 +103445,17 @@ - + - - + + - + @@ -103435,20 +103464,20 @@ - - + + - + - + @@ -103457,36 +103486,36 @@ - + - + - - + + - + - + - + - + @@ -103494,12 +103523,12 @@ - + - + - + @@ -103508,47 +103537,47 @@ - - - - - - + + + + + + - + - + - + - + - + - + - + - + @@ -103562,11 +103591,11 @@ - + - + @@ -103686,7 +103715,7 @@ - + @@ -103696,7 +103725,7 @@ - + @@ -104004,9 +104033,9 @@ - - - + + + @@ -104026,7 +104055,7 @@ - + @@ -104044,7 +104073,7 @@ - + @@ -104059,25 +104088,25 @@ - + - + - + - + - + - + - + @@ -104092,19 +104121,19 @@ - + - + - + - + @@ -104119,26 +104148,26 @@ - + - + - + - + - + - + - + @@ -104146,7 +104175,7 @@ - + @@ -104166,29 +104195,29 @@ - + - + - + - + - + - + - + - + @@ -104196,39 +104225,39 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -104243,7 +104272,7 @@ - + @@ -104252,33 +104281,33 @@ - - + + - - + + - - + + - + - + - + @@ -104297,7 +104326,7 @@ - + @@ -104310,73 +104339,73 @@ - + - + - + - - - - - - - - - - + - - + + + + + + + + + + + - + - - - + + + - - - - - - - - - - - + - + + + + + + + + + + + - + - + @@ -104384,10 +104413,10 @@ - + - + @@ -104447,16 +104476,16 @@ - + - + - + @@ -104470,11 +104499,11 @@ - - + + - + @@ -104488,24 +104517,24 @@ - - - + + + - + - + - + @@ -104516,7 +104545,7 @@ - + @@ -104524,7 +104553,7 @@ - + @@ -104534,11 +104563,11 @@ - + - - + + @@ -104565,16 +104594,16 @@ - - + + - + - + - + @@ -104589,10 +104618,10 @@ - + - + @@ -104646,49 +104675,49 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -104709,10 +104738,10 @@ - + - + @@ -104736,7 +104765,7 @@ - + @@ -104751,7 +104780,7 @@ - + @@ -104778,12 +104807,12 @@ - + - - - + + + @@ -104797,60 +104826,60 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -104859,48 +104888,48 @@ - - - - + + + + - + - - - - - - - + + + + + + + - + - + - + - + @@ -104908,43 +104937,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -104952,7 +104981,7 @@ - + @@ -104963,7 +104992,7 @@ - + @@ -104980,40 +105009,40 @@ - + - + - + - + - + - + - + - + - + - + @@ -105022,31 +105051,31 @@ - + - + - + - + - + - + - + - + @@ -105073,13 +105102,13 @@ - + - + - + @@ -105094,7 +105123,7 @@ - + @@ -105120,9 +105149,9 @@ - + - + @@ -105140,7 +105169,7 @@ - + @@ -105157,169 +105186,169 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + + + - + - + - + - - + + - + - + - + - - + + - - - + + + - + - + - + - - - + + + - + - - - + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -105328,7 +105357,7 @@ - + @@ -105338,7 +105367,7 @@ - + @@ -105348,120 +105377,108 @@ - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + - + - + @@ -105470,103 +105487,115 @@ - - - + + - - - - + + + + + + + + + - - + + + + + + + + + + - + - - - - - - - - - - + + + + + + + + + + - + - + - + - + - + - + - + - + - + @@ -105592,38 +105621,38 @@ - + - - + + - + - - + + - + - - - + + + - + - + - + @@ -105665,10 +105694,10 @@ - + - + @@ -105676,7 +105705,7 @@ - + @@ -105703,10 +105732,10 @@ - + - + @@ -105721,19 +105750,19 @@ - + - + - + - + - + @@ -105754,7 +105783,7 @@ - + @@ -105784,52 +105813,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -105838,15 +105867,15 @@ - + - + - + @@ -105876,7 +105905,7 @@ - + @@ -105935,7 +105964,7 @@ - + @@ -105970,101 +105999,101 @@ - + - - - - - - - - - - - - - - + + + + + + + + + - - - - - + + + + + + + + + + - - + + - + - - + + - + - - - - - - - - - - - - + - - + + + - + + - - + + + + + + - - - - - - - - + + + - - - + + + + - - + + - - + + - + + + + + + + + + + @@ -106076,32 +106105,32 @@ - + - + - + - + - + - + - + @@ -106112,7 +106141,7 @@ - + @@ -106172,7 +106201,7 @@ - + @@ -106193,7 +106222,7 @@ - + @@ -106201,7 +106230,7 @@ - + @@ -106209,10 +106238,10 @@ - + - + @@ -106235,7 +106264,7 @@ - + @@ -106243,10 +106272,10 @@ - + - + @@ -106294,59 +106323,59 @@ - - - - - - - + + + + + + + - + - - + + - + - + - - + + - + - + - + - + - + @@ -106354,30 +106383,30 @@ - - + + - + - + - + - + @@ -106400,7 +106429,7 @@ - + @@ -106414,31 +106443,31 @@ - + - + - + - + - + - + - + @@ -106455,7 +106484,7 @@ - + @@ -106470,7 +106499,7 @@ - + @@ -106479,7 +106508,7 @@ - + @@ -106515,13 +106544,13 @@ - + - + @@ -106550,45 +106579,45 @@ - + - + - + - - - - - + + + - - + + + + - + - - - - - - - - - - + + + + + + + + + + @@ -106598,27 +106627,27 @@ - - + + - + - + - - - - + + + + @@ -106630,7 +106659,7 @@ - + @@ -106644,7 +106673,7 @@ - + @@ -106678,10 +106707,10 @@ - - + + - + @@ -106841,7 +106870,7 @@ - + @@ -106850,7 +106879,7 @@ - + @@ -106864,21 +106893,21 @@ - + - + - + - + @@ -106893,25 +106922,25 @@ - - + + - + - + - - + + - + @@ -106931,9 +106960,9 @@ - - - + + + @@ -106965,9 +106994,9 @@ - + - + @@ -106987,7 +107016,7 @@ - + @@ -107010,10 +107039,10 @@ - + - + @@ -107021,12 +107050,12 @@ - - - - + + + + - + @@ -107119,19 +107148,19 @@ - + - + - + - + @@ -107317,7 +107346,7 @@ - + @@ -107329,7 +107358,7 @@ - + @@ -107338,7 +107367,7 @@ - + @@ -107370,13 +107399,13 @@ - + - + - + @@ -107511,7 +107540,7 @@ - + @@ -107529,7 +107558,7 @@ - + @@ -107537,79 +107566,79 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -107675,10 +107704,10 @@ - + - + @@ -107690,18 +107719,18 @@ - + - + - + - + @@ -107746,10 +107775,10 @@ - + - + @@ -107764,10 +107793,10 @@ - + - + @@ -107785,7 +107814,7 @@ - + @@ -107793,7 +107822,7 @@ - + @@ -107810,24 +107839,24 @@ - + - + - + - + - + - + - + @@ -107878,7 +107907,7 @@ - + @@ -107887,7 +107916,7 @@ - + @@ -107895,7 +107924,7 @@ - + @@ -107905,7 +107934,7 @@ - + @@ -107916,8 +107945,8 @@ - - + + @@ -107929,220 +107958,220 @@ - - - - - - - - + + + + + + - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + - + - + - + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - - - + + + - + - - - + + + - + - - + + - - - + + + - - + + - - + + - - + + - - - - - - - - - - - + + - + + - + + + + + + + + + - - + + - - + + - - - - - - - + + - - - - - - - + + + - + - + + - - + + + + + - + + + + + + - - + + - + - + - + - + @@ -108163,78 +108192,78 @@ - + - - - + + + - + - + - + - + - + - - + + - + - + - + - + - + - - - - + + + + - + - + - + @@ -108261,7 +108290,7 @@ - + @@ -108272,28 +108301,28 @@ - + - + - + - + - + - + - + - + @@ -108319,8 +108348,8 @@ - - + + @@ -108346,57 +108375,57 @@ - + - + - - - - - - - - - - + + + + + + + + + + - + - + - + - - + + - - + + - - + + - + @@ -108406,7 +108435,7 @@ - + @@ -108416,12 +108445,12 @@ - + - + @@ -108432,35 +108461,35 @@ - - + + - - - + + + - - - + + + - - + + - + - + @@ -108480,7 +108509,7 @@ - + @@ -108494,24 +108523,24 @@ - + - + - - + + - + - + @@ -108520,28 +108549,28 @@ - + - + - + - + - + - + @@ -108549,73 +108578,73 @@ - - + + - + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - - + + @@ -108624,7 +108653,7 @@ - + @@ -108639,44 +108668,44 @@ - + - + - + - + - + - + - + - + @@ -108685,17 +108714,17 @@ - - - + + + - + - - - + + + @@ -108708,26 +108737,26 @@ - + - + - - + + - + - + @@ -108739,62 +108768,62 @@ - + - + - - + + - + - - + + - + - + - - + + - + - + - - - + + + - + @@ -108802,7 +108831,7 @@ - + @@ -108815,28 +108844,28 @@ - + - + - + - + - + - + @@ -108844,38 +108873,38 @@ - + - + - + - + - + - + - + - + @@ -108908,47 +108937,47 @@ - + - + - - + + - + - + - + - + - + - + - + - + @@ -108960,31 +108989,31 @@ - + - + - + - + - + - + - + - + @@ -108993,7 +109022,7 @@ - + @@ -109017,13 +109046,13 @@ - + - + @@ -109032,7 +109061,7 @@ - + @@ -109053,7 +109082,7 @@ - + @@ -109095,25 +109124,25 @@ - + - + - + - + @@ -109128,28 +109157,28 @@ - + - + - + - + - + - + @@ -109158,7 +109187,7 @@ - + @@ -109170,10 +109199,10 @@ - + - + @@ -109182,18 +109211,18 @@ - + - + - + - + - + @@ -109207,9 +109236,9 @@ - + - + @@ -109218,19 +109247,19 @@ - + - + - + - + - + @@ -109244,12 +109273,12 @@ - + - + - + @@ -109261,10 +109290,10 @@ - + - + @@ -109273,10 +109302,10 @@ - + - + @@ -109287,35 +109316,35 @@ - + - + - + - + - + - + - + @@ -109325,18 +109354,18 @@ - + - + - + - + - + @@ -109351,7 +109380,7 @@ - + @@ -109393,29 +109422,29 @@ - + - + - + - + - + - + - + - + - + @@ -109423,7 +109452,7 @@ - + @@ -109446,26 +109475,26 @@ - + - + - + - + - + - + - + - + @@ -109476,77 +109505,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109569,7 +109598,7 @@ - + @@ -109585,21 +109614,21 @@ - + - + - + - + - + @@ -109625,45 +109654,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109671,7 +109700,7 @@ - + @@ -109694,7 +109723,7 @@ - + @@ -109702,59 +109731,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -109766,42 +109795,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -109815,21 +109844,21 @@ - + - + - + - + - + - + @@ -109849,15 +109878,15 @@ - + - + - + @@ -109865,7 +109894,7 @@ - + @@ -109874,10 +109903,10 @@ - + - + @@ -109889,14 +109918,14 @@ - + - + @@ -109907,10 +109936,10 @@ - + - + @@ -109925,7 +109954,7 @@ - + @@ -109970,7 +109999,7 @@ - + @@ -109978,13 +110007,13 @@ - + - + - + @@ -109996,7 +110025,7 @@ - + @@ -110010,7 +110039,7 @@ - + @@ -110024,10 +110053,10 @@ - + - + @@ -110048,15 +110077,15 @@ - + - + - + @@ -110064,7 +110093,7 @@ - + @@ -110087,7 +110116,7 @@ - + @@ -110101,7 +110130,7 @@ - + @@ -110115,7 +110144,7 @@ - + @@ -110127,7 +110156,7 @@ - + @@ -110141,7 +110170,7 @@ - + @@ -110168,7 +110197,7 @@ - + @@ -110182,50 +110211,50 @@ - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -110233,58 +110262,58 @@ - + - - - - + + + + - + - + - + - + - - - + + + - - - + + + - - - + + + @@ -110292,199 +110321,199 @@ - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - + - + - + - + - - - - - - - - - - - - + - - + + - - - + + - + - - - + + + + - - + + - - - + + + - + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - + + - - + + - - + + - + - + - + - + - + - + - - - + + + - + @@ -110522,7 +110551,7 @@ - + @@ -110548,25 +110577,25 @@ - - - + + + - + - + - + - + @@ -110575,21 +110604,21 @@ - + - + - + - + - + - + @@ -110597,7 +110626,7 @@ - + @@ -110608,7 +110637,7 @@ - + @@ -110616,27 +110645,27 @@ - + - + - + - + - + @@ -110644,12 +110673,12 @@ - + - + - + @@ -110658,9 +110687,9 @@ - + - + @@ -110669,7 +110698,7 @@ - + @@ -110677,24 +110706,24 @@ - + - + - + - + - + - + @@ -110723,10 +110752,10 @@ - - + + - + @@ -110741,45 +110770,45 @@ - + - - - + - - - - + + + + + - - - - - - - - + + + + + + + + - - - + + + + - + - + - + @@ -110787,79 +110816,79 @@ - - - + + + - - + + - + - - + + - + - - - + + + - + - + - - + + - + - + - + - + - + - + - + - - + + @@ -110869,131 +110898,131 @@ - + - - + + - - + + - + - + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - - - - - - - + + - + + - - - - + + + - + + + + + + - - - - + + + + - - - + + + - - + + - + - + - + @@ -111001,133 +111030,133 @@ - + - + - + - + - + - + - - - + - - - - + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + @@ -111135,8 +111164,8 @@ - - + + @@ -111144,19 +111173,19 @@ - - + + - - + + - - - + + + @@ -111179,16 +111208,16 @@ - + - + - + - + @@ -111241,7 +111270,7 @@ - + @@ -111255,63 +111284,63 @@ - - - - - + + + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + @@ -111319,23 +111348,23 @@ - + - - + + - + - + - + @@ -111343,19 +111372,19 @@ - + - + - + - + @@ -111364,13 +111393,13 @@ - + - + @@ -111379,7 +111408,7 @@ - + @@ -111388,19 +111417,19 @@ - + - + - + @@ -111409,10 +111438,10 @@ - + - + @@ -111433,7 +111462,7 @@ - + @@ -111447,67 +111476,67 @@ - - - - - - - - - - + + + + + + + + + + - - + + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - + + - - + + - + - + - + @@ -111546,13 +111575,13 @@ - + - + @@ -111594,10 +111623,10 @@ - + - + @@ -111606,15 +111635,15 @@ - + - + - + - + @@ -111626,7 +111655,7 @@ - + @@ -111635,109 +111664,109 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111745,15 +111774,15 @@ - + - + - + @@ -111762,8 +111791,8 @@ - - + + @@ -111791,306 +111820,306 @@ - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - - - - - - - - - - - + - - + + + - - - + + - - + + - - + + + - - + + - - - + + - + + + + + + + + + + + + - - + + - - + + - - - - - - - - - - - - + - + + + + + + + + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -112101,8 +112130,8 @@ - - + + @@ -112116,77 +112145,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -112194,7 +112223,7 @@ - + @@ -112202,7 +112231,7 @@ - + @@ -112210,7 +112239,7 @@ - + @@ -112218,35 +112247,35 @@ - + - + - + - + - + - + @@ -112254,7 +112283,7 @@ - + @@ -112263,38 +112292,38 @@ - + - + - + - + - + - - - - - - - + + + + + + + - + - - + + @@ -112305,25 +112334,25 @@ - + - + - + - + @@ -112342,227 +112371,227 @@ - + - + - + - + - - + + - - - - + + + + - - + + - + - + - - - + + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -112571,88 +112600,88 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -112663,56 +112692,56 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - + @@ -112729,76 +112758,129 @@ - - + + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + @@ -112824,7 +112906,7 @@ - + @@ -112843,21 +112925,21 @@ - + - + - - + + - + @@ -112875,56 +112957,56 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -112933,7 +113015,7 @@ - + @@ -112959,82 +113041,82 @@ - + - - - - - - - - - + + + + + - - - - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + @@ -113043,67 +113125,67 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - + + + - + @@ -113111,123 +113193,123 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -113262,7 +113344,7 @@ - + @@ -113315,20 +113397,20 @@ - - - + + + - + - + - + @@ -113337,76 +113419,76 @@ - + - + - + - + - - - - + + + + - + - + - - - - - - - - - + + + + + + + + + - + - + - + - + - + @@ -113442,9 +113524,9 @@ - + - + @@ -113453,13 +113535,13 @@ - + - + @@ -113488,15 +113570,15 @@ - + - + - + - + @@ -113505,7 +113587,7 @@ - + @@ -113520,7 +113602,7 @@ - + @@ -113534,7 +113616,7 @@ - + @@ -113546,7 +113628,7 @@ - + @@ -113560,10 +113642,10 @@ - + - + @@ -113571,13 +113653,13 @@ - + - + @@ -113603,14 +113685,14 @@ - + - + @@ -113651,15 +113733,15 @@ - + - + - + - + @@ -113698,7 +113780,7 @@ - + @@ -113710,13 +113792,13 @@ - + - + @@ -113728,7 +113810,7 @@ - + @@ -113743,7 +113825,7 @@ - + @@ -113752,13 +113834,13 @@ - + - + @@ -113767,7 +113849,7 @@ - + @@ -113778,10 +113860,10 @@ - + - + @@ -113790,7 +113872,7 @@ - + @@ -113799,34 +113881,34 @@ - + - + - + - + - + - + - + - + - + @@ -113922,22 +114004,22 @@ - + - + - + - + - + @@ -113946,7 +114028,7 @@ - + @@ -113958,7 +114040,7 @@ - + @@ -113968,7 +114050,7 @@ - + @@ -114009,13 +114091,13 @@ - + - + - + @@ -114030,12 +114112,12 @@ - + - + @@ -114043,7 +114125,7 @@ - + @@ -114058,13 +114140,13 @@ - + - + - + @@ -114079,27 +114161,27 @@ - + - + - + - + - + - + - + - + @@ -114107,13 +114189,13 @@ - + - + @@ -114127,7 +114209,7 @@ - + @@ -114141,7 +114223,7 @@ - + @@ -114150,10 +114232,10 @@ - + - + @@ -114170,16 +114252,16 @@ - + - + - + - + @@ -114196,7 +114278,7 @@ - + @@ -114207,21 +114289,21 @@ - + - + - + - + - + @@ -114230,7 +114312,7 @@ - + @@ -114238,7 +114320,7 @@ - + @@ -114256,7 +114338,7 @@ - + @@ -114264,16 +114346,16 @@ - + - + - + @@ -114281,7 +114363,7 @@ - + @@ -114295,7 +114377,7 @@ - + @@ -114303,46 +114385,46 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -114354,7 +114436,7 @@ - + @@ -114377,13 +114459,13 @@ - + - + - + @@ -114440,13 +114522,13 @@ - + - + - + @@ -114463,8 +114545,8 @@ - - + + @@ -114478,184 +114560,184 @@ - - - - - - - - - + + + + + - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + @@ -114665,7 +114747,7 @@ - + @@ -114675,7 +114757,7 @@ - + @@ -114685,7 +114767,7 @@ - + @@ -114695,7 +114777,7 @@ - + @@ -114704,68 +114786,68 @@ - - + + - - + + - - + + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -114774,10 +114856,10 @@ - + - + @@ -114789,22 +114871,22 @@ - + - + - + - + - + - + @@ -114824,7 +114906,7 @@ - + @@ -114836,7 +114918,7 @@ - + @@ -114856,18 +114938,18 @@ - + - + - + - + @@ -114881,64 +114963,64 @@ - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + - + - - + + - - + + - - + + - + - + - + @@ -114955,14 +115037,14 @@ - + - + @@ -114976,13 +115058,13 @@ - + - + - + @@ -114991,21 +115073,21 @@ - + - + - + - + @@ -115013,7 +115095,7 @@ - + @@ -115034,45 +115116,45 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -115087,7 +115169,7 @@ - + @@ -115095,7 +115177,7 @@ - + @@ -115103,93 +115185,93 @@ - - - - + - - - - - - - - + + + + + + + + + + + - - - - - + + + + + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + @@ -115201,140 +115283,140 @@ - + - + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + @@ -115352,7 +115434,7 @@ - + @@ -115361,19 +115443,19 @@ - + - + - + - + @@ -115427,10 +115509,10 @@ - + - + @@ -115439,13 +115521,13 @@ - + - + - + @@ -115457,7 +115539,7 @@ - + @@ -115468,140 +115550,140 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -115612,28 +115694,28 @@ - + - + - + - + - + - + @@ -115645,13 +115727,13 @@ - + - + - + @@ -115669,40 +115751,40 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -115710,7 +115792,7 @@ - + @@ -115718,42 +115800,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -115761,13 +115843,13 @@ - + - + @@ -115793,13 +115875,13 @@ - + - + @@ -115813,94 +115895,94 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + - - + + - + - - + + - + - - + + - - + + - + - + @@ -115912,51 +115994,51 @@ - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + @@ -115966,38 +116048,38 @@ - + - + - - + + - + - + - - + + - + - + - + @@ -116005,43 +116087,43 @@ - + - - - - - - - - - - - - - - - - - - - - - + - - + - + + + + + + + + + + + + + + + + + + + + + + @@ -116049,263 +116131,263 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + - - - - - + + - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - - + + - - + + - + + - + + + + + + + + - + + - - - + + - - - - - - - - + + - - + - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -116316,7 +116398,7 @@ - + @@ -116325,7 +116407,7 @@ - + @@ -116334,54 +116416,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -116398,7 +116480,7 @@ - + @@ -116409,10 +116491,10 @@ - + - + @@ -116429,7 +116511,7 @@ - + @@ -116443,7 +116525,7 @@ - + @@ -116457,10 +116539,10 @@ - + - + @@ -116483,7 +116565,7 @@ - + @@ -116500,16 +116582,16 @@ - + - + - + @@ -116523,10 +116605,10 @@ - + - + @@ -116537,13 +116619,13 @@ - + - + @@ -116560,7 +116642,7 @@ - + @@ -116571,10 +116653,10 @@ - + - + @@ -116585,13 +116667,13 @@ - + - + @@ -116602,10 +116684,10 @@ - + - + @@ -116614,13 +116696,13 @@ - + - + @@ -116631,34 +116713,34 @@ - + - + - - - - + - + + + + + + - + - - - - - - + + + + - + @@ -116670,7 +116752,7 @@ - + @@ -116679,7 +116761,7 @@ - + @@ -116688,8 +116770,8 @@ - - + + @@ -116699,15 +116781,15 @@ - + - + - + @@ -116715,14 +116797,14 @@ - + - + @@ -116730,176 +116812,176 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - - - - + + + + + - - + + - + - - + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + @@ -116913,7 +116995,7 @@ - + @@ -116921,15 +117003,15 @@ - + - - + + - - + + @@ -116945,86 +117027,86 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -117035,7 +117117,7 @@ - + @@ -117045,7 +117127,7 @@ - + @@ -117061,7 +117143,7 @@ - + @@ -117076,34 +117158,34 @@ - + - + - + - + - + - + - + @@ -117111,23 +117193,23 @@ - - - + + + - + - - + + - + @@ -117135,72 +117217,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -117209,27 +117291,27 @@ - + - + - + - + - + - + @@ -117244,7 +117326,7 @@ - + @@ -117268,10 +117350,10 @@ - + - + @@ -117279,27 +117361,27 @@ - + - + - + - + - + - + - + - + @@ -117308,7 +117390,7 @@ - + @@ -117317,7 +117399,7 @@ - + @@ -117326,7 +117408,7 @@ - + @@ -117350,30 +117432,30 @@ - + - + - + - + - + - + - + @@ -117394,7 +117476,7 @@ - + @@ -117448,50 +117530,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -117500,33 +117582,33 @@ - + - + - + - + - + - + - + - + - + @@ -117541,7 +117623,7 @@ - + @@ -117549,13 +117631,13 @@ - + - + @@ -117582,48 +117664,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -117658,7 +117740,7 @@ - + @@ -117676,7 +117758,7 @@ - + @@ -117696,50 +117778,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -117762,7 +117844,7 @@ - + @@ -117770,19 +117852,19 @@ - + - + - + - + - + @@ -117793,314 +117875,314 @@ - + - + - - - - - + - - - - - - - - - - - - - - + + + + + + + + + + + + - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + - - - - - + + + + + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - - + - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - - - + + + + + - - - + + + - - - - - - - - - - - - - - - + + - - - - - - - + + + - - + - + + - + - - + + - - + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - + + + - + - + - + @@ -118120,118 +118202,118 @@ - - + + - - - + + + - - + + - + - - + + - + - - + + - - + + - - - + + + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - - + + - + - + - + - + - + @@ -118239,7 +118321,7 @@ - + @@ -118251,170 +118333,170 @@ - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + - - - - + + + + - - + + - + - - + + - + @@ -118423,52 +118505,52 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + @@ -118480,21 +118562,21 @@ - + - + - + - + - + - + @@ -118503,7 +118585,7 @@ - + @@ -118515,13 +118597,13 @@ - + - + - + @@ -118530,7 +118612,7 @@ - + @@ -118581,7 +118663,7 @@ - + @@ -118599,13 +118681,13 @@ - + - + @@ -118620,10 +118702,10 @@ - + - + @@ -118631,15 +118713,15 @@ - + - + - + @@ -118648,44 +118730,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -118694,7 +118776,15 @@ - + + + + + + + + + @@ -118705,24 +118795,24 @@ - + - + - + - + - + @@ -118734,7 +118824,7 @@ - + @@ -118745,12 +118835,12 @@ - + - + - + @@ -118759,49 +118849,49 @@ - - - - - - - - - - - - + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - + + - - + + @@ -118809,7 +118899,7 @@ - + @@ -118826,28 +118916,28 @@ - + - + - + - + - + - + - + @@ -118859,7 +118949,7 @@ - + @@ -118874,7 +118964,7 @@ - + @@ -118888,126 +118978,126 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + - + - + - + - + - + - + - + - - + + - + - + - - + + - - - + + + - - + + - - + + - - + + - + - + @@ -119019,7 +119109,7 @@ - + @@ -119028,103 +119118,103 @@ - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - - + + - + - + - + - + @@ -119135,7 +119225,7 @@ - + @@ -119144,7 +119234,7 @@ - + @@ -119180,16 +119270,16 @@ - + - + - + - + @@ -119201,13 +119291,13 @@ - + - + - + @@ -119219,19 +119309,19 @@ - + - + - + - + - + @@ -119261,16 +119351,16 @@ - + - + - + @@ -119284,7 +119374,7 @@ - + @@ -119298,27 +119388,27 @@ - + - + - + - + - + - + - + - + @@ -119333,33 +119423,33 @@ - + - + - + - + - + - + - + - + @@ -119367,7 +119457,7 @@ - + @@ -119375,32 +119465,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -119414,18 +119504,18 @@ - + - + - + - + - + @@ -119433,25 +119523,25 @@ - + - + - + - + - + @@ -119459,19 +119549,19 @@ - + - + - + - + @@ -119479,7 +119569,7 @@ - + @@ -119499,12 +119589,12 @@ - + - + - + @@ -119513,7 +119603,7 @@ - + @@ -119533,7 +119623,7 @@ - + @@ -119544,10 +119634,10 @@ - + - + @@ -119556,30 +119646,30 @@ - + - + - + - + - + - + - + - + @@ -119591,7 +119681,7 @@ - + @@ -119600,7 +119690,7 @@ - + @@ -119611,7 +119701,7 @@ - + @@ -119628,100 +119718,100 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + @@ -119730,107 +119820,107 @@ - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -119843,98 +119933,98 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - - - - + + + - - + + + + + + + - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + - - + + - - + + - - - + + + - - + + @@ -119942,7 +120032,7 @@ - + @@ -119959,139 +120049,139 @@ - - - + + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + @@ -120111,17 +120201,17 @@ - + - + - + - - + + - + @@ -120229,7 +120319,7 @@ - + @@ -120243,13 +120333,13 @@ - + - + @@ -120261,10 +120351,10 @@ - + - + @@ -120285,7 +120375,7 @@ - + @@ -120302,25 +120392,25 @@ - + - - - - - - + + + + + + - + - + @@ -120346,7 +120436,7 @@ - + @@ -120354,7 +120444,7 @@ - + @@ -120374,39 +120464,39 @@ - + - + - + - + - + - + - + - + - + - + @@ -120415,12 +120505,12 @@ - + - + @@ -120431,23 +120521,23 @@ - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + @@ -120456,9 +120546,9 @@ - - - + + + @@ -120470,43 +120560,43 @@ - + - + - + - + - + - + - + - + - + @@ -120531,7 +120621,7 @@ - + @@ -120542,19 +120632,19 @@ - + - + - - + + - + @@ -120576,15 +120666,15 @@ - + - - + + @@ -120594,10 +120684,10 @@ - - - - + + + + @@ -120618,51 +120708,51 @@ - + - - + + - - - + + + - - - + + + - - + + - - + + - - - + + + - + - + - + @@ -120676,54 +120766,54 @@ - + - + - + - + - + - + - + - + - + @@ -120740,7 +120830,7 @@ - + @@ -120748,20 +120838,20 @@ - - + + - + - + @@ -120773,7 +120863,7 @@ - + @@ -120790,20 +120880,20 @@ - + - - + + - + - + @@ -120851,19 +120941,19 @@ - + - + - + - + @@ -120872,12 +120962,12 @@ - + - + - + @@ -120895,10 +120985,10 @@ - + - + @@ -120924,34 +121014,34 @@ - + - + - + - + - + - + - + - + @@ -120972,13 +121062,13 @@ - + - + @@ -120987,15 +121077,15 @@ - + - + - + - + @@ -121004,73 +121094,73 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -121079,20 +121169,20 @@ - + - + - + - + - + - + @@ -121104,15 +121194,15 @@ - + - + - + @@ -121120,7 +121210,7 @@ - + @@ -121128,35 +121218,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -121177,7 +121267,7 @@ - + @@ -121187,7 +121277,7 @@ - + @@ -121195,159 +121285,159 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - - + + - - + + - + - - + + - - + + - - + + - - - - + + + + - - - + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + @@ -121356,166 +121446,166 @@ - - - - - + + + + + - + - + - + - + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + @@ -121527,85 +121617,85 @@ - + - + - + - + - + - + - - - - - + + + + + - + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - - + + - + - + - + @@ -121613,104 +121703,104 @@ - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + @@ -121722,28 +121812,28 @@ - + - + - + - + - + - + @@ -121767,13 +121857,13 @@ - + - + - + @@ -121782,7 +121872,7 @@ - + @@ -121814,12 +121904,12 @@ - + - + @@ -121828,27 +121918,27 @@ - + - + - + - + - + - + - + @@ -121863,16 +121953,16 @@ - + - + - + - + @@ -121887,7 +121977,7 @@ - + @@ -121899,83 +121989,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -121992,18 +122082,18 @@ - + - + - + - + @@ -122024,7 +122114,7 @@ - + @@ -122032,7 +122122,7 @@ - + @@ -122046,42 +122136,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -122092,10 +122182,10 @@ - + - + @@ -122118,15 +122208,15 @@ - + - + - + @@ -122153,15 +122243,15 @@ - + - + - + @@ -122182,7 +122272,7 @@ - + @@ -122190,84 +122280,84 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -122275,34 +122365,34 @@ - + - + - + - + - + - + - + - + - + @@ -122352,7 +122442,7 @@ - + @@ -122361,18 +122451,18 @@ - + - + - + - + @@ -122382,30 +122472,30 @@ - + - + - + - + - + - + - + - + - + @@ -122419,7 +122509,7 @@ - + @@ -122433,15 +122523,15 @@ - + - + - + @@ -122450,7 +122540,7 @@ - + @@ -122464,7 +122554,7 @@ - + @@ -122476,12 +122566,12 @@ - + - + @@ -122490,32 +122580,32 @@ - + - + - + - + - + - + - + - + - + @@ -122557,77 +122647,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -122653,10 +122743,10 @@ - + - + @@ -122670,7 +122760,7 @@ - + @@ -122684,10 +122774,10 @@ - + - + @@ -122713,10 +122803,10 @@ - + - + @@ -122733,16 +122823,16 @@ - + - + - + @@ -122750,13 +122840,13 @@ - + - + - + @@ -122770,13 +122860,13 @@ - + - + - + @@ -122793,7 +122883,7 @@ - + @@ -122804,18 +122894,18 @@ - + - + - + - + - + @@ -122841,10 +122931,10 @@ - + - + @@ -122855,20 +122945,20 @@ - + - + - + - + - + @@ -122877,42 +122967,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -122921,14 +123011,14 @@ - + - + @@ -122936,13 +123026,13 @@ - + - + - + @@ -122950,26 +123040,26 @@ - + - + - + - + - + - + - + @@ -122984,20 +123074,20 @@ - + - + - + - + - + - + @@ -123006,12 +123096,12 @@ - + - + - + @@ -123021,380 +123111,380 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -123409,7 +123499,7 @@ - + @@ -123420,50 +123510,50 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -123492,7 +123582,7 @@ - + @@ -123501,7 +123591,7 @@ - + @@ -123509,7 +123599,7 @@ - + @@ -123526,7 +123616,7 @@ - + @@ -123535,7 +123625,7 @@ - + @@ -123544,10 +123634,10 @@ - + - + @@ -123555,10 +123645,10 @@ - + - + @@ -123566,9 +123656,9 @@ - + - + @@ -123577,7 +123667,7 @@ - + @@ -123589,15 +123679,15 @@ - + - + - + - + @@ -123605,10 +123695,10 @@ - + - + @@ -123616,7 +123706,7 @@ - + @@ -123630,10 +123720,10 @@ - + - + @@ -123653,7 +123743,7 @@ - + @@ -123662,7 +123752,7 @@ - + @@ -123671,10 +123761,10 @@ - + - + @@ -123694,10 +123784,10 @@ - + - + @@ -123705,13 +123795,13 @@ - + - + @@ -123719,16 +123809,16 @@ - + - + - + @@ -123739,7 +123829,7 @@ - + @@ -123747,7 +123837,7 @@ - + @@ -123764,10 +123854,10 @@ - + - + @@ -123778,16 +123868,16 @@ - + - + - + @@ -123798,10 +123888,10 @@ - + - + @@ -123827,7 +123917,7 @@ - + @@ -123845,12 +123935,12 @@ - + - + @@ -123862,7 +123952,7 @@ - + @@ -123874,12 +123964,12 @@ - + - + @@ -123891,7 +123981,7 @@ - + @@ -123900,7 +123990,7 @@ - + @@ -123908,7 +123998,7 @@ - + @@ -123929,7 +124019,7 @@ - + @@ -123964,13 +124054,13 @@ - + - + - + @@ -123978,9 +124068,9 @@ - + - + @@ -123992,18 +124082,18 @@ - + - + - + - + @@ -124011,13 +124101,13 @@ - + - + - + @@ -124034,13 +124124,13 @@ - + - + @@ -124048,26 +124138,26 @@ - + - + - + - + - + @@ -124079,12 +124169,12 @@ - + - + @@ -124096,7 +124186,7 @@ - + @@ -124107,13 +124197,13 @@ - + - + - + @@ -124124,19 +124214,19 @@ - + - + - + @@ -124144,13 +124234,13 @@ - + - + - + @@ -124167,7 +124257,7 @@ - + @@ -124175,20 +124265,20 @@ - + - + - + - + - + - + @@ -124196,26 +124286,26 @@ - + - + - + - + - + - + - + @@ -124223,31 +124313,31 @@ - + - + - + - + - + - + - + - + - + @@ -124255,7 +124345,7 @@ - + @@ -124264,10 +124354,10 @@ - + - + @@ -124275,7 +124365,7 @@ - + @@ -124284,10 +124374,10 @@ - + - + @@ -124313,7 +124403,7 @@ - + @@ -124324,21 +124414,21 @@ - + - + - + - + - + @@ -124346,7 +124436,7 @@ - + @@ -124366,7 +124456,7 @@ - + @@ -124383,426 +124473,396 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + - + - - - - - + + + + + - + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - - + - + - + - + - + - + + - + - + - + @@ -124814,31 +124874,31 @@ - + - + - + - + - + @@ -124856,55 +124916,55 @@ - + - + - + - + - + - + - + - + - + @@ -124922,43 +124982,43 @@ - + - + - + - + - + - + - + @@ -124970,283 +125030,313 @@ - + - + - + - + + + - - - + + + - - + + + - + + + - - + + + - - + - - + + + - - + + - - + - - + + - - + + - - - - + + - - + + - - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + + + - - + + - - + + - - + + + + - - + + + - - - + + - - + + - - + + - - + + - - + + - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - + - - - + + + + + + + - - - - + + + - - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -125254,91 +125344,91 @@ - - + + - - + + - + - + - - - - + + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - - - + + + - + - + - + @@ -125356,37 +125446,37 @@ - + - + - - + + - + - + - + - + @@ -125396,28 +125486,28 @@ - + - + - - + + - + - + @@ -125431,13 +125521,13 @@ - + - + - + @@ -125458,21 +125548,21 @@ - + - + - + - + - + @@ -125481,21 +125571,21 @@ - + - + - + - + - + - + @@ -125506,10 +125596,10 @@ - + - + @@ -125551,10 +125641,10 @@ - + - + @@ -125563,7 +125653,7 @@ - + @@ -125587,7 +125677,7 @@ - + @@ -125599,52 +125689,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -125653,37 +125743,37 @@ - + - + - + - + - + - + - + - + - + - + @@ -125697,16 +125787,16 @@ - + - + - + @@ -125726,12 +125816,12 @@ - + - + @@ -125764,7 +125854,7 @@ - + @@ -125778,19 +125868,19 @@ - + - + - + - + - + @@ -125819,7 +125909,7 @@ - + @@ -125857,7 +125947,7 @@ - + @@ -125875,7 +125965,7 @@ - + @@ -125910,15 +126000,15 @@ - + - + - + - + @@ -125962,7 +126052,7 @@ - + @@ -125998,16 +126088,16 @@ - + - + - + @@ -126015,26 +126105,26 @@ - + - + - + - + - + - + - + - + @@ -126052,7 +126142,7 @@ - + @@ -126072,21 +126162,21 @@ - + - + - + - + - + - + @@ -126125,7 +126215,7 @@ - + @@ -126140,12 +126230,12 @@ - + - + - + @@ -126157,12 +126247,12 @@ - + - + - + @@ -126177,7 +126267,7 @@ - + @@ -126200,24 +126290,24 @@ - + - + - + - + - + @@ -126231,7 +126321,7 @@ - + @@ -126247,7 +126337,7 @@ - + @@ -126255,120 +126345,120 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - + @@ -126376,11 +126466,11 @@ - + - + @@ -126388,23 +126478,23 @@ - + - - - + + + - + - + @@ -126419,35 +126509,35 @@ - + - + - + - + - + - + - + - + - + - + @@ -126455,7 +126545,7 @@ - + @@ -126473,7 +126563,7 @@ - + @@ -126481,17 +126571,17 @@ - + - + - + @@ -126502,21 +126592,21 @@ - + - + - + - + - + - + @@ -126530,13 +126620,13 @@ - + - + @@ -126548,115 +126638,115 @@ - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + - - + + - - + + - - + + - + - - + + - + - + - - + + - - - + + + - - + + - - - + + + - - + + - - - + + + - - - + + + - - + + - + - + - + @@ -126665,7 +126755,7 @@ - + @@ -126692,36 +126782,36 @@ - + - + - - - - + + + + - + - + - + - + @@ -126729,216 +126819,216 @@ - - - + + + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - - + + + - + - + - - - - + + + + - - + + - + - + - - - - + + + + - - - - - + + + + + - - - + + + - + - + - + - - + + - - + + - - + + - + @@ -126946,13 +127036,13 @@ - - + + - - + + @@ -126961,14 +127051,14 @@ - - + + - - - + + + @@ -126976,50 +127066,50 @@ - - + + - + - - - - + + + + - + - - + + - + - - + + - - + + - + - + @@ -127040,158 +127130,158 @@ - + - + - + - + - + - - - - - - - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -127202,7 +127292,7 @@ - + @@ -127211,24 +127301,24 @@ - + - + - - - - - - + + + + + + - + - + @@ -127258,32 +127348,32 @@ - - - + + + - - - + + + - + - + - + @@ -127305,22 +127395,22 @@ - - - - + + + + - + - + - + @@ -127367,13 +127457,13 @@ - + - + - + @@ -127391,7 +127481,7 @@ - + @@ -127403,7 +127493,7 @@ - + @@ -127454,53 +127544,53 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -127518,13 +127608,13 @@ - + - + - + @@ -127536,7 +127626,7 @@ - + @@ -127545,7 +127635,7 @@ - + @@ -127555,7 +127645,7 @@ - + @@ -127575,13 +127665,13 @@ - + - + @@ -127592,18 +127682,18 @@ - + - + - + - + @@ -127615,7 +127705,7 @@ - + @@ -127633,158 +127723,158 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - + @@ -127795,20 +127885,20 @@ - - - + + + - - - - + + + + - + @@ -127816,64 +127906,64 @@ - - + + - - + + - - - + + + - + - - - + + + - + - - + + - + - - + + - - + + - + - + - + - + - + @@ -127889,7 +127979,7 @@ - + @@ -127900,13 +127990,13 @@ - + - + @@ -127917,60 +128007,60 @@ - - - - - - + + + + + + - - - + + + - - - + + + - - + + - + - - + + - + - + - - + + - - + + @@ -127979,7 +128069,7 @@ - + @@ -127988,20 +128078,20 @@ - - + + - + - + @@ -128022,22 +128112,22 @@ - - + + - - + + - + - + @@ -128051,8 +128141,8 @@ - - + + @@ -128060,107 +128150,107 @@ - + - - + + - + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -128169,22 +128259,22 @@ - + - + - + - + - + @@ -128192,7 +128282,7 @@ - + @@ -128200,14 +128290,14 @@ - - + + - + @@ -128218,128 +128308,128 @@ - - + + - + - - + + - - + + - - - + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -128372,38 +128462,38 @@ - + - + - + - + - + - - + + - - + + - + - + @@ -128448,75 +128538,75 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -128525,7 +128615,7 @@ - + @@ -128540,7 +128630,7 @@ - + @@ -128553,7 +128643,7 @@ - + @@ -128627,7 +128717,7 @@ - + @@ -128635,7 +128725,7 @@ - + @@ -128649,13 +128739,13 @@ - + - + - + @@ -128697,13 +128787,13 @@ - + - + - + @@ -128724,65 +128814,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -128802,7 +128892,7 @@ - + @@ -128817,39 +128907,39 @@ - + - + - + - + - + - + - + - + - + - + @@ -128857,7 +128947,7 @@ - + @@ -128868,7 +128958,7 @@ - + @@ -128895,9 +128985,9 @@ - + - + @@ -128909,27 +128999,27 @@ - + - + - + - + - + - + @@ -128940,15 +129030,15 @@ - + - + - + @@ -128963,15 +129053,15 @@ - + - + - + @@ -128980,22 +129070,22 @@ - + - + - + - + - + - + @@ -129025,7 +129115,7 @@ - + @@ -129037,7 +129127,7 @@ - + @@ -129052,14 +129142,14 @@ - + - + @@ -129067,7 +129157,7 @@ - + @@ -129096,16 +129186,16 @@ - + - + - + - + @@ -129113,7 +129203,7 @@ - + @@ -129133,151 +129223,151 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - - - + + + - - - + + + - - + + - + - + @@ -129291,188 +129381,188 @@ - - - + + + - - - + + + - - - + + + - - - + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - + + - + @@ -129484,78 +129574,78 @@ - - + + - + - - + + - - + + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + @@ -129563,10 +129653,10 @@ - + - + @@ -129587,13 +129677,13 @@ - + - + @@ -129605,42 +129695,42 @@ - + - + - - + + - + - + - + - + - + - + - + @@ -129651,100 +129741,100 @@ - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - - + + - + - + - + @@ -129756,7 +129846,7 @@ - + @@ -129780,7 +129870,7 @@ - + @@ -129801,10 +129891,10 @@ - + - + @@ -129849,13 +129939,13 @@ - + - + @@ -129864,7 +129954,7 @@ - + @@ -129875,30 +129965,30 @@ - + - + - + - + - + - + - + - + @@ -129910,7 +130000,7 @@ - + @@ -129921,121 +130011,121 @@ - + - - - - - - - + + + + + + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - + - - - - + + + + - - - + + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + @@ -130080,9 +130170,9 @@ - + - + @@ -130094,107 +130184,107 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - + + + + + + - + @@ -130203,158 +130293,150 @@ - - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - + - - + + - - + + - - - + + + - - - + + + - + - + - - - - - - - - - - - + + + @@ -130374,7 +130456,7 @@ - + @@ -130389,10 +130471,10 @@ - + - + @@ -130401,7 +130483,7 @@ - + @@ -130452,16 +130534,16 @@ - + - + - + @@ -130470,7 +130552,7 @@ - + @@ -130478,7 +130560,7 @@ - + @@ -130486,7 +130568,7 @@ - + @@ -130494,7 +130576,7 @@ - + @@ -130503,11 +130585,11 @@ - - - - - + + + + + @@ -130519,30 +130601,30 @@ - + - + - + - - + + - - + + - + @@ -130552,68 +130634,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -130624,7 +130706,7 @@ - + @@ -130632,20 +130714,20 @@ - + - + - - - - - - + + + + + + @@ -130656,92 +130738,92 @@ - + - + - - + + - - + + - - + + - + - + - - + + - + - + - + - - + + - - + + - + - + - - + + - + - + - + @@ -130749,7 +130831,7 @@ - + @@ -130757,36 +130839,36 @@ - + - + - + - + - + - + - + - + - + @@ -130798,24 +130880,24 @@ - + - + - + - + - - + + @@ -130826,35 +130908,35 @@ - - - - - + + + + + - + - + - + - + - + - + - + @@ -130866,7 +130948,7 @@ - + @@ -130881,7 +130963,7 @@ - + @@ -130902,7 +130984,7 @@ - + @@ -130919,36 +131001,36 @@ - - - - + + + + - - + + - + - + - - + + - + - + - + - - + + @@ -130959,10 +131041,10 @@ - + - + @@ -130970,19 +131052,11 @@ - - - - - - - - - + @@ -130993,12 +131067,12 @@ - + - + @@ -131013,10 +131087,10 @@ - + - + @@ -131025,7 +131099,7 @@ - + @@ -131055,7 +131129,7 @@ - + @@ -131108,150 +131182,150 @@ - + - + - - - - - + + + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + @@ -131284,10 +131358,10 @@ - + - + @@ -131296,10 +131370,10 @@ - + - + @@ -131308,13 +131382,13 @@ - + - + @@ -131332,7 +131406,7 @@ - + @@ -131340,15 +131414,15 @@ - + - + - + - + @@ -131366,7 +131440,7 @@ - + @@ -131374,128 +131448,128 @@ - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - - + + - - - - - - - - - - - + + + + + + + + + + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - - - + + + + + + + + + + + + + - - + + - - - + + + - + - - + + @@ -131503,49 +131577,49 @@ - + - + - + - + - + - + - + - - + + - - + + - + - + - + @@ -131571,25 +131645,25 @@ - + - + - + - + - + - + @@ -131601,7 +131675,7 @@ - + @@ -131610,7 +131684,7 @@ - + @@ -131643,22 +131717,22 @@ - + - + - + - + @@ -131676,7 +131750,7 @@ - + @@ -131689,7 +131763,7 @@ - + @@ -131712,30 +131786,30 @@ - + - + - + - + - + - + @@ -131746,19 +131820,19 @@ - + - + - + - + @@ -131773,7 +131847,7 @@ - + @@ -131784,7 +131858,7 @@ - + @@ -131809,7 +131883,7 @@ - + @@ -131822,9 +131896,9 @@ - + - + @@ -131833,7 +131907,7 @@ - + @@ -131841,12 +131915,12 @@ - + - + @@ -131882,7 +131956,7 @@ - + @@ -131890,25 +131964,25 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - + + @@ -131919,12 +131993,12 @@ - + - + - + @@ -131932,38 +132006,38 @@ - + - + - + - + - + - - - + + + - - + + @@ -131975,32 +132049,32 @@ - - + + - - + + - - + + - - + + - - + + - + @@ -132026,7 +132100,7 @@ - + @@ -132038,7 +132112,7 @@ - + @@ -132068,47 +132142,47 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -132116,27 +132190,27 @@ - + - + - + - + - + @@ -132147,20 +132221,20 @@ - + - - - - - - - - + + + + + + + + @@ -132171,50 +132245,50 @@ - + - + - + - + - + - + - + - - + + - - + + - - + + @@ -132240,7 +132314,7 @@ - + @@ -132257,7 +132331,7 @@ - + @@ -132284,13 +132358,13 @@ - + - + @@ -132298,61 +132372,61 @@ - - + + - + - + - + - + - + - + - - + + - + - + - - + + - + @@ -132366,21 +132440,21 @@ - + - + - + - + - + @@ -132392,35 +132466,35 @@ - + - + - - - - - - - + + + + + + + - + - + - + - + @@ -132428,7 +132502,7 @@ - + @@ -132451,27 +132525,27 @@ - + - + - + - + - + @@ -132479,12 +132553,12 @@ - + - + @@ -132499,57 +132573,57 @@ - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + @@ -132582,21 +132656,21 @@ - - + + - + - + - + @@ -132651,7 +132725,7 @@ - + @@ -132660,9 +132734,9 @@ - + - + @@ -132674,7 +132748,7 @@ - + @@ -132685,31 +132759,31 @@ - + - + - + - + - + - + - + - + - + @@ -132718,31 +132792,31 @@ - + - + - + - + - + - + - + - + - + @@ -132751,31 +132825,31 @@ - + - + - + - - - - - - - - + + + + + + + + - + @@ -132785,14 +132859,14 @@ - - + + - + @@ -132800,38 +132874,38 @@ - + - + - - + + - - + + - + - + - + - + @@ -132840,7 +132914,7 @@ - + @@ -132856,11 +132930,11 @@ - + - + @@ -132882,26 +132956,26 @@ - + - + - + - + - + @@ -132920,73 +132994,73 @@ - + - + - - + + - + - - + + - - + + - - + + - - - - + + + + - + - - + + - + - + - + - + @@ -133000,9 +133074,9 @@ - + - + @@ -133023,63 +133097,63 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -133108,7 +133182,7 @@ - + @@ -133138,11 +133212,11 @@ - + - + @@ -133156,71 +133230,71 @@ - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - + - + - + - + @@ -133228,93 +133302,93 @@ - - + + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - + - + @@ -133322,36 +133396,36 @@ - + - + - + - + - + - + - + - + - + - + @@ -133363,22 +133437,22 @@ - + - + - + - + - + - + @@ -133386,10 +133460,10 @@ - + - + @@ -133397,7 +133471,7 @@ - + @@ -133411,98 +133485,98 @@ - - - - - - - + + + + - - - - + + + - - + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - + - + - + - + - + - + - + @@ -133513,30 +133587,30 @@ - + - + - + - + - + - + - + - + @@ -133554,7 +133628,7 @@ - + @@ -133577,59 +133651,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -133637,26 +133711,26 @@ - + - + - + - + - + - + - + @@ -133667,38 +133741,38 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -133718,222 +133792,222 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - - - - - - - - - - - - - - - + - + - + - - - + - + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - + + - + + + + + - + - + @@ -133993,61 +134067,61 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -134074,10 +134148,10 @@ - + - + @@ -134086,8 +134160,8 @@ - - + + @@ -134104,58 +134178,58 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + @@ -134181,7 +134255,7 @@ - + @@ -134190,8 +134264,8 @@ - - + + @@ -134202,13 +134276,13 @@ - - - - - - - + + + + + + + @@ -134228,18 +134302,18 @@ - - - - - - - - - - + + + + + + + + + + - + @@ -134251,12 +134325,12 @@ - - - - + + + + - + @@ -134265,19 +134339,19 @@ - + - + - + - + - + @@ -134307,7 +134381,7 @@ - + @@ -134316,13 +134390,13 @@ - + - + @@ -134337,7 +134411,7 @@ - + @@ -134370,7 +134444,7 @@ - + @@ -134391,9 +134465,9 @@ - - - + + + @@ -134416,196 +134490,196 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - - + + - + - - - + + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + - - + + - + - - - - + + + + + + + + - - - - + + + + + + - + + - + + - + - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + @@ -134620,27 +134694,27 @@ - + - + - + - + - + - + @@ -134648,75 +134722,75 @@ - + - + - + - + - + - + - + - - - - - - - + + + + + - + + + - - + + - + - + - + - + - + - + - + @@ -134724,15 +134798,15 @@ - - + + - + - - + + @@ -134740,26 +134814,26 @@ - + - + - + - + @@ -134773,14 +134847,14 @@ - + - + - + @@ -134792,32 +134866,32 @@ - - + + - + - - - + + + - - + + - + - + @@ -134825,22 +134899,22 @@ - + - + - + - + @@ -134849,10 +134923,10 @@ - + - + @@ -134861,37 +134935,37 @@ - + - + - + - - + + - + - + - + - + - + @@ -134905,7 +134979,7 @@ - + @@ -134932,13 +135006,13 @@ - + - + @@ -134950,10 +135024,10 @@ - + - + @@ -134995,19 +135069,19 @@ - + - + - + - + - + @@ -135031,7 +135105,7 @@ - + @@ -135045,13 +135119,13 @@ - + - + @@ -135059,10 +135133,10 @@ - + - + @@ -135079,7 +135153,7 @@ - + @@ -135088,10 +135162,10 @@ - + - + @@ -135102,7 +135176,7 @@ - + @@ -135123,7 +135197,7 @@ - + @@ -135144,19 +135218,19 @@ - + - + - + @@ -135188,18 +135262,18 @@ - + - + - + - + @@ -135214,12 +135288,12 @@ - + - + @@ -135228,58 +135302,58 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -135296,12 +135370,12 @@ - + - + @@ -135312,288 +135386,288 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - + + + + + - - - + + + - - - + + + - - + + - + - + - - - - + + + + - - - - - - - + + + + + + + - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - + + - - - + + + - - + + - - + + - - + + - - - - + + + + - - - - + + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - - - + + + + - - - + + + - - - - - + + + + + - - - + + + - - + + - - + + - - + + - - + + @@ -135601,113 +135675,113 @@ - - + + - - + + - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + - - - + + + - + - - + + - + - + - - + + - + - + - + - - + + - - - - + + + + - - + + - - + + - + - + @@ -135717,57 +135791,57 @@ - + - + - - + + - + - + - + - + - + - - - + + + - + @@ -135778,13 +135852,13 @@ - + - + - + @@ -135796,11 +135870,11 @@ - - - - - + + + + + @@ -135936,7 +136010,7 @@ - + @@ -135950,7 +136024,7 @@ - + @@ -135958,7 +136032,7 @@ - + @@ -136016,7 +136090,7 @@ - + @@ -136024,7 +136098,7 @@ - + @@ -136037,7 +136111,7 @@ - + @@ -136050,7 +136124,7 @@ - + @@ -136070,7 +136144,7 @@ - + @@ -136084,8 +136158,8 @@ - - + + @@ -136111,13 +136185,13 @@ - + - + @@ -136142,7 +136216,7 @@ - + @@ -136150,7 +136224,7 @@ - + @@ -136182,7 +136256,7 @@ - + @@ -136231,9 +136305,9 @@ - + - + @@ -136282,20 +136356,20 @@ - + - + - + - + @@ -136304,7 +136378,7 @@ - + @@ -136321,14 +136395,14 @@ - - + + - + @@ -136337,34 +136411,34 @@ - + - + - - - + + + - + - + - + @@ -136372,7 +136446,7 @@ - + @@ -136420,7 +136494,7 @@ - + @@ -136464,27 +136538,27 @@ - + - + - + - + - - + + - + - - + + @@ -136495,11 +136569,11 @@ - + - - + + @@ -136507,7 +136581,7 @@ - + @@ -136518,7 +136592,7 @@ - + @@ -136530,19 +136604,19 @@ - + - + - + - - - - + + + + @@ -136555,26 +136629,26 @@ - + - - + + - - + + - + - + @@ -136604,15 +136678,15 @@ - + - + - + @@ -136663,7 +136737,7 @@ - + @@ -136673,23 +136747,31 @@ - + - + - + - + - - - - + + + + + + + + + + + - + + @@ -136697,78 +136779,78 @@ - + - + - + - - - + + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - + - + - + @@ -136783,7 +136865,7 @@ - + @@ -136792,15 +136874,15 @@ - + - + - + @@ -136815,7 +136897,7 @@ - + @@ -136824,27 +136906,27 @@ - + - + - + - + - + - + - + - + @@ -136858,139 +136940,139 @@ - + - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - - - - - + + + + + + - - + + - - + + - - + + - + - + - + @@ -136999,40 +137081,40 @@ - + - + - + - + - + - - - - - + + + + + - + - + - + @@ -137048,228 +137130,228 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + @@ -137304,7 +137386,7 @@ - + @@ -137313,12 +137395,12 @@ - + - + - + @@ -137327,25 +137409,25 @@ - + - + - + - + - + - + - + @@ -137360,179 +137442,179 @@ - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + - + @@ -137549,10 +137631,10 @@ - + - + @@ -137579,19 +137661,19 @@ - + - + - + - + @@ -137606,7 +137688,7 @@ - + @@ -137615,13 +137697,13 @@ - + - + @@ -137636,9 +137718,9 @@ - + - + @@ -137653,7 +137735,7 @@ - + @@ -137680,13 +137762,13 @@ - + - + @@ -137707,7 +137789,7 @@ - + @@ -137745,7 +137827,7 @@ - + @@ -137762,21 +137844,21 @@ - + - + - + - + - + @@ -137791,7 +137873,7 @@ - + @@ -137800,39 +137882,39 @@ - + - + - + - + - + - + - + - - + + @@ -137840,52 +137922,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -137894,117 +137976,117 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - + @@ -138022,7 +138104,7 @@ - + @@ -138034,202 +138116,202 @@ - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - + + + + + + - - - - - + + + + - - - + + + + + - - - + + + + + - - - - + + + + + - - + + + + + - - + + + + + + - - + + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + - - + + - - - - + + + + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + @@ -138237,20 +138319,20 @@ - - - - + + + + - + - - + + @@ -138264,18 +138346,18 @@ - + - + - + - + @@ -138303,145 +138385,145 @@ - - - - - + + + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + @@ -138467,18 +138549,18 @@ - + - + - + - + - + @@ -138496,10 +138578,10 @@ - + - + @@ -138507,10 +138589,10 @@ - + - + @@ -138521,10 +138603,10 @@ - + - + @@ -138533,139 +138615,139 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -138677,7 +138759,7 @@ - + @@ -138685,102 +138767,102 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + @@ -138795,21 +138877,21 @@ - + - - + + - + - + @@ -138827,22 +138909,22 @@ - + - + - + - + - + - + @@ -138850,7 +138932,7 @@ - + @@ -138862,7 +138944,7 @@ - + @@ -138874,7 +138956,7 @@ - + @@ -138883,10 +138965,10 @@ - + - + @@ -138894,16 +138976,16 @@ - + - + - + @@ -138912,7 +138994,7 @@ - + @@ -138929,7 +139011,7 @@ - + @@ -138937,12 +139019,12 @@ - + - + @@ -138951,67 +139033,67 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + - + @@ -139020,65 +139102,65 @@ - + - + - + - + - - + + - - + + - + - + - - + + - - + + - - - + + + - - + + @@ -139087,18 +139169,18 @@ - - + + - - + + - - + + @@ -139109,7 +139191,7 @@ - + @@ -139138,7 +139220,7 @@ - + @@ -139150,16 +139232,16 @@ - + - + - + @@ -139179,18 +139261,18 @@ - + - + - + @@ -139199,7 +139281,7 @@ - + @@ -139216,13 +139298,13 @@ - - - - - - - + + + + + + + @@ -139232,78 +139314,78 @@ - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -139311,7 +139393,7 @@ - + @@ -139321,56 +139403,56 @@ - - + + - - + + - + - + - + - + - + - + - + - + @@ -139381,7 +139463,7 @@ - + @@ -139390,7 +139472,7 @@ - + @@ -139402,7 +139484,7 @@ - + @@ -139414,7 +139496,7 @@ - + @@ -139422,26 +139504,26 @@ - + - + - + - + - + - + - + @@ -139452,7 +139534,7 @@ - + @@ -139461,55 +139543,55 @@ - - - - - + + + + + - + - + - + - + - + - - + + - - + + - - + + - + - + @@ -139517,13 +139599,13 @@ - + - + @@ -139532,7 +139614,7 @@ - + @@ -139550,7 +139632,7 @@ - + @@ -139558,16 +139640,16 @@ - + - + - + - + @@ -139579,20 +139661,20 @@ - + - + - + - + @@ -139607,31 +139689,31 @@ - - - - - - - - + + + + + + + + - + - + - + - + @@ -139640,59 +139722,59 @@ - + - + - + - + - - + + - - + + - + - + - + - + - + - - - + + + - - + + @@ -139700,8 +139782,8 @@ - - + + @@ -139710,12 +139792,12 @@ - - + + - - + + @@ -139729,13 +139811,13 @@ - + - + @@ -139747,7 +139829,7 @@ - + @@ -139777,7 +139859,7 @@ - + @@ -139786,7 +139868,7 @@ - + @@ -139804,7 +139886,7 @@ - + @@ -139819,7 +139901,7 @@ - + @@ -139833,10 +139915,10 @@ - + - + @@ -139845,7 +139927,7 @@ - + @@ -139860,15 +139942,15 @@ - + - + - + - + @@ -139888,48 +139970,48 @@ - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -139943,7 +140025,7 @@ - + @@ -139954,51 +140036,51 @@ - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + @@ -140006,8 +140088,8 @@ - - + + @@ -140015,95 +140097,95 @@ - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -140125,64 +140207,64 @@ - + - + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + @@ -140191,34 +140273,34 @@ - + - - + + - + - + - + - + - + @@ -140227,19 +140309,19 @@ - + - + - - + + - + - + @@ -140251,31 +140333,31 @@ - + - + - + - - + + - + - + - + - + - + @@ -140286,7 +140368,7 @@ - + @@ -140297,7 +140379,7 @@ - + @@ -140314,119 +140396,119 @@ - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -140450,9 +140532,9 @@ - + - + @@ -140473,170 +140555,170 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - + - + - + - + - + - - + + - - + + - - + + - - + + - - - + + + - - + + - - - + + + - + - + - + - + - + - + - + - - + + - - + + - + - + - - - + + + - - + + - - - + + + - - - + + + - - + + - + @@ -140650,8 +140732,8 @@ - - + + @@ -140659,18 +140741,18 @@ - - + + - - - + + + - - + + @@ -140685,86 +140767,86 @@ - + - + - + - + - + - + - + - + - + - + - - - - + + + + - - + + - + - + - + - + - - + + - + - + - + - + @@ -140778,78 +140860,78 @@ - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - - + + + - + - + - + - + @@ -140858,7 +140940,7 @@ - + @@ -140867,10 +140949,10 @@ - + - + @@ -140887,49 +140969,49 @@ - - - + + + - + - + - + - + - - + + - + - - + + - + - + @@ -140941,13 +141023,13 @@ - + - + @@ -140956,7 +141038,7 @@ - + @@ -140974,42 +141056,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -141026,15 +141108,15 @@ - + - + - + @@ -141046,89 +141128,89 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + - - + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - + - - + + - + @@ -141145,12 +141227,12 @@ - + - + @@ -141165,7 +141247,7 @@ - + @@ -141180,10 +141262,10 @@ - + - + @@ -141213,7 +141295,7 @@ - + @@ -141230,30 +141312,30 @@ - + - + - + - + - + - + - + - + - + @@ -141265,16 +141347,16 @@ - + - + - + - + @@ -141316,157 +141398,157 @@ - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - + - + - - + + - + @@ -141487,10 +141569,10 @@ - + - + @@ -141502,7 +141584,7 @@ - + @@ -141514,12 +141596,12 @@ - + - + @@ -141528,21 +141610,21 @@ - + - + - + - + - + @@ -141563,19 +141645,19 @@ - + - + - + - + @@ -141584,16 +141666,16 @@ - + - + - + @@ -141605,7 +141687,7 @@ - + @@ -141617,9 +141699,9 @@ - + - + @@ -141634,7 +141716,7 @@ - + @@ -141642,68 +141724,68 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -141724,18 +141806,18 @@ - + - + - + - + - + @@ -141755,8 +141837,8 @@ - - + + @@ -141764,7 +141846,7 @@ - + @@ -141778,9 +141860,9 @@ - + - + @@ -141792,13 +141874,13 @@ - + - + - + @@ -141807,19 +141889,19 @@ - + - + - + - + @@ -141828,16 +141910,16 @@ - + - + - + @@ -141867,37 +141949,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -141912,13 +141994,13 @@ - + - + - + @@ -141936,62 +142018,62 @@ - + - + - + - - - - + + + + - + - + - + - + - + - + - - + + - + - + - + @@ -142032,12 +142114,12 @@ - + - + - + @@ -142046,10 +142128,10 @@ - + - + @@ -142060,14 +142142,14 @@ - + - - + + @@ -142081,230 +142163,230 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - + + + + + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -142318,9 +142400,9 @@ - - - + + + @@ -142331,34 +142413,34 @@ - + - + - + - + - + - + - + @@ -142372,18 +142454,18 @@ - + - + - + - + @@ -142395,250 +142477,252 @@ - - - - - - - - - + + + + + - + - + - - - - - - - - + + + + + + + + + + + + - + - + - + - - + + - + - + - + - + - + - + - + - - - + + + - - + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + + + - + - + - + - + - + - + - + - + - + - + - + @@ -142661,14 +142745,12 @@ - - - + - + @@ -142676,7 +142758,7 @@ - + @@ -142684,26 +142766,26 @@ - + - + - + - + - + @@ -142713,46 +142795,46 @@ - + - + - + - - + + - + - + - + - + @@ -142778,38 +142860,38 @@ - - - - + + + + - + - - + + - - + + - + - - + + - - + + @@ -142817,38 +142899,38 @@ - + - + - + - + - - + + - - + + - + - + @@ -142863,19 +142945,19 @@ - + - + - + - + @@ -142887,21 +142969,21 @@ - + - + - + - + - + - + @@ -142912,7 +142994,7 @@ - + @@ -142938,27 +143020,27 @@ - + - + - + - + - + - + @@ -142994,7 +143076,7 @@ - + @@ -143003,35 +143085,35 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -143048,10 +143130,10 @@ - + - + @@ -143063,10 +143145,10 @@ - + - + @@ -143080,178 +143162,178 @@ - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - + - + - + - + @@ -143259,13 +143341,13 @@ - + - + @@ -143277,65 +143359,65 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -143347,15 +143429,15 @@ - + - + - + - + @@ -143382,23 +143464,23 @@ - + - + - + - + - + @@ -143406,7 +143488,7 @@ - + @@ -143441,59 +143523,59 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -143510,7 +143592,7 @@ - + @@ -143521,7 +143603,7 @@ - + @@ -143529,15 +143611,15 @@ - + - + - + @@ -143545,7 +143627,7 @@ - + @@ -143562,7 +143644,7 @@ - + @@ -143600,7 +143682,7 @@ - + @@ -143632,7 +143714,7 @@ - + @@ -143655,7 +143737,7 @@ - + @@ -143666,25 +143748,25 @@ - + - + - + - + - + @@ -143701,7 +143783,7 @@ - + @@ -143721,13 +143803,13 @@ - + - + - + @@ -143735,21 +143817,21 @@ - + - + - + - + @@ -143770,172 +143852,172 @@ - + - - - - - + - - - - + + + + - - - - - - - - - - + + + + + + + + + + + + + + - + - + - + - - + + - + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - + + - - - + + - + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -143968,7 +144050,7 @@ - + @@ -143983,13 +144065,13 @@ - + - + @@ -144001,47 +144083,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -144062,24 +144144,24 @@ - + - + - + - + - + - + @@ -144103,27 +144185,27 @@ - + - + - + - + - + - + @@ -144131,21 +144213,21 @@ - + - + - + - + - + - + @@ -144154,15 +144236,15 @@ - + - + - + @@ -144174,10 +144256,10 @@ - + - + @@ -144197,113 +144279,113 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + - - - + + + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + @@ -144311,7 +144393,7 @@ - + @@ -144320,66 +144402,66 @@ - - + + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + @@ -144391,13 +144473,13 @@ - + - + - + @@ -144448,10 +144530,10 @@ - + - + @@ -144472,7 +144554,7 @@ - + @@ -144484,21 +144566,21 @@ - + - + - + - + - + @@ -144507,24 +144589,24 @@ - + - + - + - + - + @@ -144590,13 +144672,13 @@ - + - + - + @@ -144605,10 +144687,10 @@ - + - + @@ -144673,7 +144755,7 @@ - + @@ -144685,7 +144767,7 @@ - + @@ -144696,9 +144778,9 @@ - + - + @@ -144713,25 +144795,25 @@ - + - + - + - + - + - + - + @@ -144827,18 +144909,18 @@ - + - + - + - + @@ -144847,21 +144929,21 @@ - + - + - + - + @@ -144872,70 +144954,70 @@ - + - + - + - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - + + - - - + + + - + - + - + - + @@ -144946,7 +145028,7 @@ - + @@ -144958,14 +145040,14 @@ - - - + + + - - + + - + @@ -144991,50 +145073,42 @@ - - + + - + - - + + - - + + - + - + - + - + - + - - - - - - - - @@ -145044,7 +145118,15 @@ - + + + + + + + + + @@ -145055,7 +145137,7 @@ - + @@ -145064,7 +145146,7 @@ - + @@ -145079,7 +145161,7 @@ - + @@ -145091,43 +145173,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -145142,13 +145224,13 @@ - + - + @@ -145157,31 +145239,31 @@ - + - + - + - + - + @@ -145211,13 +145293,13 @@ - + - + - + @@ -145232,14 +145314,14 @@ - + - + - + @@ -145251,35 +145333,35 @@ - + - + - + - + - + - + - + @@ -145293,7 +145375,7 @@ - + @@ -145311,7 +145393,7 @@ - + @@ -145332,10 +145414,10 @@ - + - + @@ -145344,81 +145426,81 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -145451,7 +145533,7 @@ - + @@ -145460,9 +145542,9 @@ - + - + @@ -145474,7 +145556,7 @@ - + @@ -145534,28 +145616,28 @@ - + - + - + - + - + - + @@ -145576,7 +145658,7 @@ - + @@ -145618,9 +145700,9 @@ - + - + @@ -145629,16 +145711,16 @@ - + - + - + @@ -145651,66 +145733,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -145718,19 +145800,19 @@ - + - + - + - + @@ -145741,7 +145823,7 @@ - + @@ -145749,18 +145831,18 @@ - + - + - + - + - + @@ -145771,7 +145853,7 @@ - + @@ -145782,13 +145864,13 @@ - + - + - + @@ -145796,10 +145878,10 @@ - + - + @@ -145820,35 +145902,35 @@ - + - + - + - + - + - + - + - + @@ -145859,21 +145941,21 @@ - + - + - + - + - + - + @@ -145881,7 +145963,7 @@ - + @@ -145889,15 +145971,15 @@ - + - + - + @@ -145908,37 +145990,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -145959,7 +146041,7 @@ - + @@ -145970,7 +146052,7 @@ - + @@ -145985,10 +146067,10 @@ - + - + @@ -146006,7 +146088,7 @@ - + @@ -146018,42 +146100,42 @@ - + - + - + - + - + - + - + - + - + - + @@ -146083,7 +146165,7 @@ - + @@ -146091,19 +146173,19 @@ - + - + - + @@ -146112,7 +146194,7 @@ - + @@ -146121,19 +146203,19 @@ - + - + - + - + - + @@ -146190,10 +146272,10 @@ - + - + @@ -146204,7 +146286,7 @@ - + @@ -146233,47 +146315,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -146284,28 +146366,28 @@ - + - + - + - + - + - + @@ -146318,109 +146400,109 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -146438,13 +146520,13 @@ - + - + @@ -146453,18 +146535,18 @@ - + - + - + - + @@ -146479,15 +146561,15 @@ - + - + - + @@ -146526,7 +146608,7 @@ - + @@ -146534,19 +146616,19 @@ - + - + - + - + @@ -146561,10 +146643,10 @@ - + - + @@ -146593,7 +146675,7 @@ - + @@ -146620,16 +146702,16 @@ - + - + - + @@ -146658,7 +146740,7 @@ - + @@ -146681,48 +146763,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -146731,20 +146813,20 @@ - + - + - + - + @@ -146759,12 +146841,12 @@ - + - + - + @@ -146775,15 +146857,15 @@ - + - + - + - + @@ -146794,9 +146876,9 @@ - + - + @@ -146820,138 +146902,138 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + @@ -146962,15 +147044,15 @@ - - + + - + - + @@ -146979,20 +147061,20 @@ - + - - + + - - + + - + @@ -147001,65 +147083,65 @@ - + - + - + - + - - + + - - + + - - + + - + - - + + - + - + - - - + + + - - + + @@ -147068,12 +147150,12 @@ - + - + @@ -147093,21 +147175,21 @@ - + - + - - + + @@ -147115,8 +147197,8 @@ - - + + @@ -147130,353 +147212,353 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - + + + - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - + + + - - - + + + - + + - - + - - + + - - + + + - - - - - + - - - - - + + - - - - + + - + - - - - + + + + - - - + - + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + - - - + + - - - + - - - - + - - + + - - - - - + + + - + + + - - - - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - + - - + + + - - + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + @@ -147493,7 +147575,7 @@ - + @@ -147502,212 +147584,220 @@ - + - - - - + + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - - + + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - - - + + + - + + + + + + + + + @@ -147721,7 +147811,7 @@ - + @@ -147738,7 +147828,7 @@ - + @@ -147764,7 +147854,7 @@ - + @@ -147782,68 +147872,68 @@ - - - + + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -147855,7 +147945,7 @@ - + @@ -147866,26 +147956,26 @@ - + - + - + - + @@ -147893,17 +147983,17 @@ - + - + - + @@ -147911,7 +148001,7 @@ - + @@ -147919,7 +148009,7 @@ - + @@ -147927,12 +148017,12 @@ - + - + @@ -147940,7 +148030,7 @@ - + @@ -147948,7 +148038,7 @@ - + @@ -147956,149 +148046,149 @@ - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -148106,15 +148196,15 @@ - + - + - + - + @@ -148123,179 +148213,179 @@ - + - + - - - - + + + + - - + + - + - + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - + @@ -148306,23 +148396,15 @@ - + - + - - - - - - - - - + @@ -148330,7 +148412,7 @@ - + @@ -148338,27 +148420,27 @@ - - + + - + - + - + - - + + @@ -148366,7 +148448,7 @@ - + @@ -148377,7 +148459,7 @@ - + @@ -148391,12 +148473,12 @@ - + - + @@ -148405,7 +148487,7 @@ - + @@ -148419,7 +148501,7 @@ - + @@ -148433,77 +148515,77 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -148520,56 +148602,56 @@ - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + @@ -148578,76 +148660,76 @@ - - + + - + - + - - - - - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -148655,53 +148737,53 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -148709,15 +148791,15 @@ - + - + - + @@ -148728,11 +148810,11 @@ - + - + @@ -148741,7 +148823,7 @@ - + @@ -148749,11 +148831,11 @@ - + - + @@ -148761,41 +148843,41 @@ - - + + - + - - + + - - + + - - + + - - + + - + @@ -148803,7 +148885,7 @@ - + @@ -148811,7 +148893,7 @@ - + @@ -148819,7 +148901,7 @@ - + @@ -148827,89 +148909,89 @@ - - + + - + - + - + - - - - - - - - - - - - - - - - - - + - - - + + + + - + + + + + + + + + + + + + + + + + - + - - - + + + - + - + - + - + - - + + - + - + @@ -148917,18 +148999,26 @@ - + - + - + - + - + + + + + + + + + @@ -148936,12 +149026,12 @@ - + - + - + @@ -148974,8 +149064,8 @@ - - + + @@ -148986,7 +149076,7 @@ - + @@ -149012,7 +149102,7 @@ - + @@ -149026,7 +149116,7 @@ - + @@ -149034,7 +149124,7 @@ - + @@ -149045,7 +149135,7 @@ - + @@ -149062,12 +149152,12 @@ - + - + - + @@ -149097,9 +149187,9 @@ - + - + @@ -149108,12 +149198,12 @@ - + - + - + @@ -149128,13 +149218,13 @@ - + - + - + @@ -149146,55 +149236,55 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -149209,16 +149299,16 @@ - + - + - + @@ -149230,28 +149320,28 @@ - + - + - + - + - + - + - + @@ -149268,15 +149358,15 @@ - + - + - + - + @@ -149288,7 +149378,7 @@ - + @@ -149314,7 +149404,7 @@ - + @@ -149326,10 +149416,10 @@ - + - + @@ -149343,7 +149433,7 @@ - + @@ -149354,7 +149444,7 @@ - + @@ -149368,7 +149458,7 @@ - + @@ -149379,10 +149469,10 @@ - + - + @@ -149393,7 +149483,7 @@ - + @@ -149416,24 +149506,24 @@ - + - + - + - + - + - + - + @@ -149444,9 +149534,9 @@ - + - + @@ -149458,7 +149548,7 @@ - + @@ -149472,25 +149562,25 @@ - + - + - + - + - + - + - + @@ -149501,7 +149591,7 @@ - + @@ -149512,16 +149602,16 @@ - + - + - + - + @@ -149532,43 +149622,43 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -149577,7 +149667,7 @@ - + @@ -149586,7 +149676,7 @@ - + @@ -149597,7 +149687,7 @@ - + @@ -149638,18 +149728,18 @@ - + - + - + - + - + @@ -149661,19 +149751,19 @@ - + - + - + - + @@ -149706,13 +149796,13 @@ - + - + - + @@ -149723,7 +149813,7 @@ - + @@ -149735,18 +149825,18 @@ - + - + - + - + - + @@ -149758,13 +149848,13 @@ - + - + @@ -149772,7 +149862,7 @@ - + @@ -149780,23 +149870,23 @@ - + - + - + - + - + - + @@ -149814,10 +149904,10 @@ - + - + @@ -149826,18 +149916,18 @@ - + - + - + - + - + @@ -149861,7 +149951,7 @@ - + @@ -149873,17 +149963,17 @@ - + - + - + - + - + @@ -149904,10 +149994,10 @@ - + - + @@ -149916,24 +150006,24 @@ - + - + - + - + - + - + @@ -149942,13 +150032,13 @@ - + - + @@ -149956,7 +150046,7 @@ - + @@ -149967,124 +150057,124 @@ - + - + - + - + - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + @@ -150092,21 +150182,21 @@ - + - + - + - + - + - + @@ -150114,33 +150204,33 @@ - + - + - + - + - - - + + + - + - - + + @@ -150149,7 +150239,7 @@ - + @@ -150165,40 +150255,40 @@ - + - + - + - + - + - + - + @@ -150207,119 +150297,119 @@ - + - - - - + + + + - - - + + + - + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + - + - + - + - + @@ -150327,7 +150417,7 @@ - + @@ -150335,32 +150425,32 @@ - - + + - - + + - - + + - + - + @@ -150368,7 +150458,7 @@ - + @@ -150376,51 +150466,51 @@ - + - + - + - - + + - + - + - + - - + + - + @@ -150428,7 +150518,7 @@ - + @@ -150436,14 +150526,14 @@ - - + + - + @@ -150451,7 +150541,7 @@ - + @@ -150459,18 +150549,18 @@ - + - + - + @@ -150478,12 +150568,12 @@ - + - + @@ -150496,101 +150586,101 @@ - - + + - - + + - - + + - + - - + + - - + + - - - - - - - + - + + + + + + + - + - - + + - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -150598,7 +150688,7 @@ - + @@ -150606,7 +150696,7 @@ - + @@ -150614,7 +150704,7 @@ - + @@ -150624,19 +150714,19 @@ - + - + - + - + - + @@ -150650,13 +150740,13 @@ - + - + - + @@ -150680,7 +150770,7 @@ - + @@ -150688,7 +150778,7 @@ - + @@ -150696,7 +150786,7 @@ - + @@ -150704,23 +150794,23 @@ - + - + - + - + - + - + @@ -150736,10 +150826,10 @@ - + - + @@ -150747,7 +150837,7 @@ - + @@ -150770,40 +150860,40 @@ - + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - + @@ -150839,13 +150929,13 @@ - + - + @@ -150901,51 +150991,51 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -150970,11 +151060,11 @@ - + - + @@ -150984,7 +151074,7 @@ - + @@ -151010,7 +151100,7 @@ - + @@ -151049,7 +151139,7 @@ - + @@ -151062,7 +151152,7 @@ - + @@ -151070,7 +151160,7 @@ - + @@ -151084,15 +151174,15 @@ - + - + - + @@ -151109,7 +151199,7 @@ - + @@ -151120,41 +151210,41 @@ - + - + - + - + - + - + - + - + @@ -151167,17 +151257,17 @@ - + - + - + @@ -151201,7 +151291,7 @@ - + @@ -151226,16 +151316,16 @@ - + - + - + @@ -151244,19 +151334,19 @@ - + - - + + - + @@ -151278,11 +151368,11 @@ - + - + @@ -151303,12 +151393,12 @@ - + - + @@ -151366,48 +151456,48 @@ - + - + - - + + - + - + - + - - + + - + @@ -151421,7 +151511,7 @@ - + @@ -151435,73 +151525,73 @@ - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -151515,7 +151605,7 @@ - + @@ -151529,73 +151619,73 @@ - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - + - + @@ -151606,10 +151696,10 @@ - + - + @@ -151620,26 +151710,26 @@ - + - + - - - + + + - + - - - + + + - + @@ -151647,39 +151737,39 @@ - - + + - - + + - - + + - - + + - - - - - - + + + + + + - + @@ -151687,63 +151777,63 @@ - + - - - - + + + + - - - - + + + + - - - - + + + + - - + + - - - + + + - - - + + + - + - + - + @@ -151751,56 +151841,56 @@ - - + + - - - + + + - - + + - + - - - + + + - - + + - + - - + + - + - + - + - + - + @@ -151809,10 +151899,10 @@ - - - - + + + + @@ -151837,53 +151927,53 @@ - + - + - + - + - + - + - + - - + + - - - + + + - - + + - - + + @@ -151902,60 +151992,60 @@ - - + + - + - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -151986,32 +152076,9 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - + @@ -152020,13 +152087,36 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + @@ -152037,22 +152127,22 @@ - + - + - + - + @@ -152087,23 +152177,23 @@ - + - + - + - + - + - + @@ -152112,29 +152202,29 @@ - + - + - + - + - + - + - + - + @@ -152143,7 +152233,7 @@ - + @@ -152187,7 +152277,7 @@ - + @@ -152199,16 +152289,16 @@ - + - + - + @@ -152219,12 +152309,12 @@ - + - + - + @@ -152236,12 +152326,12 @@ - + - + - + @@ -152250,9 +152340,9 @@ - + - + @@ -152261,7 +152351,7 @@ - + @@ -152270,175 +152360,175 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -152447,52 +152537,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -152506,67 +152596,67 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -152574,9 +152664,9 @@ - + - + @@ -152585,7 +152675,7 @@ - + @@ -152593,19 +152683,19 @@ - + - + - + - + - + @@ -152620,64 +152710,64 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -152688,7 +152778,7 @@ - + @@ -152699,12 +152789,12 @@ - + - + @@ -152718,25 +152808,25 @@ - + - + - + - + - + - + @@ -152744,23 +152834,23 @@ - + - + - + - + - + - + - + @@ -152768,7 +152858,7 @@ - + @@ -152776,52 +152866,52 @@ - + - + - + - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - + @@ -152829,29 +152919,29 @@ - - + + - - + + - + - - + + - - - + + + @@ -152861,24 +152951,24 @@ - + - + - + - - + + - + @@ -152886,28 +152976,28 @@ - - + + - - + + - + - + - + - + - - - + + + @@ -152916,14 +153006,14 @@ - - + + - + - + @@ -152932,13 +153022,13 @@ - + - + - + @@ -152947,7 +153037,7 @@ - + @@ -152980,7 +153070,7 @@ - + @@ -152989,15 +153079,15 @@ - + - + - + @@ -153042,7 +153132,7 @@ - + @@ -153053,7 +153143,7 @@ - + @@ -153064,15 +153154,15 @@ - + - + - + - + @@ -153089,22 +153179,22 @@ - + - + - + - + - + @@ -153113,7 +153203,7 @@ - + @@ -153128,10 +153218,10 @@ - + - + @@ -153142,13 +153232,13 @@ - + - + - + @@ -153156,7 +153246,7 @@ - + @@ -153164,7 +153254,7 @@ - + @@ -153172,16 +153262,16 @@ - + - + - + - + @@ -153190,7 +153280,7 @@ - + @@ -153198,24 +153288,24 @@ - + - + - + - + - + - + @@ -153252,13 +153342,13 @@ - + - - + + @@ -153267,16 +153357,16 @@ - + - + - + - - + + @@ -153293,8 +153383,8 @@ - - + + @@ -153305,239 +153395,239 @@ - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - - + + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -153546,24 +153636,24 @@ - + - + - + - - + + - + @@ -153593,78 +153683,78 @@ - - + + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + @@ -153672,37 +153762,37 @@ - + - + - + - + - + - + - + - + @@ -153711,44 +153801,44 @@ - + - + - + - - - + + + - + - + - + - + @@ -153757,21 +153847,21 @@ - + - + - + - + - + - + @@ -153780,7 +153870,7 @@ - + @@ -153789,7 +153879,7 @@ - + @@ -153797,11 +153887,11 @@ - + - + @@ -153810,8 +153900,8 @@ - - + + @@ -153828,86 +153918,86 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + @@ -153915,335 +154005,335 @@ - - - + + + - - + + - - + + - - + + - - + + - + - - + + - - - + + + - - + + - + - - - - + + + + - - - + + + - - - + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - - + + - + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - - + + - - - + + + - - + + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - - - + + + - + - + - + - - - + + + - + - + - - + + - - - + + + - + - + - + - + - + - + - + @@ -154252,29 +154342,29 @@ - + - + - + - + - + - + - + @@ -154304,22 +154394,22 @@ - - + + - + - + - + - + @@ -154331,28 +154421,28 @@ - + - + - + - + - + - + - + - + @@ -154363,9 +154453,9 @@ - + - + @@ -154377,7 +154467,7 @@ - + @@ -154386,7 +154476,7 @@ - + @@ -154397,9 +154487,9 @@ - + - + @@ -154411,7 +154501,7 @@ - + @@ -154419,7 +154509,7 @@ - + @@ -154427,7 +154517,7 @@ - + @@ -154444,12 +154534,12 @@ - + - + @@ -154463,25 +154553,25 @@ - + - + - - - - - - - - + + + + + + + + - - + + @@ -154490,21 +154580,21 @@ - - + + - + - - + + - - + + @@ -154518,198 +154608,198 @@ - + - - - + + + - + - + - - + + - - + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + @@ -154730,15 +154820,15 @@ - + - + - + - + @@ -154746,7 +154836,7 @@ - + @@ -154754,101 +154844,101 @@ - + - + - + - + - - - - + + + + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -154868,7 +154958,7 @@ - + @@ -154876,71 +154966,71 @@ - + - + - + - + - - + + - - + + - - + + - + - - + + - + - + - + - + - + - + - - + + - + - + - + @@ -154948,71 +155038,71 @@ - + - + - - + + - + - + - + - - + + - - - + + + - - + + - + - + - - + + - - + + - + @@ -155020,7 +155110,7 @@ - + @@ -155036,7 +155126,7 @@ - + @@ -155064,25 +155154,25 @@ - - + + - + - - + + - - - + + + @@ -155090,25 +155180,25 @@ - + - + - + - + - + - + - + @@ -155128,24 +155218,24 @@ - - - - - + - - - - + + + + + + + + - - - - + + + + @@ -155175,8 +155265,8 @@ - - + + @@ -155190,27 +155280,27 @@ - + - + - + - + - + - + @@ -155224,7 +155314,7 @@ - + @@ -155241,60 +155331,60 @@ - + - + - - + + - + - + - + - - + + - - - + + + - - - + + + - - - + + + @@ -155302,51 +155392,51 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - - + + - + + + + + + + + + + + + + - + @@ -155372,18 +155462,18 @@ - + - + - + - + @@ -155391,15 +155481,15 @@ - + - - + + - + @@ -155408,12 +155498,12 @@ - + - + @@ -155424,52 +155514,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + @@ -155486,180 +155576,180 @@ - + - - - - - - - - - - + + + + + + + + + + - - + + - + - - + + - - - + + + - + - - + + - - - + + + - + - - + + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -155667,8 +155757,8 @@ - - + + @@ -155676,7 +155766,7 @@ - + @@ -155696,7 +155786,7 @@ - + @@ -155704,58 +155794,58 @@ - + - + - + - + - - + + - + - + - + - - + + - + - + @@ -155768,7 +155858,7 @@ - + @@ -155776,29 +155866,29 @@ - + - - - - + + + + - - + + - - + + - + @@ -155806,29 +155896,29 @@ - + - + - + - + - + - + - + @@ -155836,38 +155926,38 @@ - - + + - - + + - + - + - - + + - + - + - - + + @@ -155880,108 +155970,108 @@ - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -155989,57 +156079,57 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -156053,23 +156143,23 @@ - + - + - + - + - + - + - + @@ -156080,7 +156170,7 @@ - + @@ -156088,7 +156178,7 @@ - + @@ -156103,12 +156193,12 @@ - + - + - + @@ -156120,7 +156210,7 @@ - + @@ -156129,266 +156219,266 @@ - + - + - + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - - + + + - + - + - - + + - + - - - + + + - + @@ -156396,43 +156486,43 @@ - + - + - + - + - + - + - + - + - + - + - - - - + + + + @@ -156440,41 +156530,41 @@ - - + + - - + + - + - + - + - + - + - - + + - + @@ -156500,113 +156590,113 @@ - + - + - - + + - - + + - - - + + + - - + + - - - + + + - - - + + + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + @@ -156620,10 +156710,10 @@ - + - + @@ -156635,7 +156725,7 @@ - + @@ -156644,35 +156734,35 @@ - + - + - + - + - - + + - + - + - + @@ -156683,8 +156773,8 @@ - - + + @@ -156697,7 +156787,7 @@ - + @@ -156707,7 +156797,7 @@ - + @@ -156715,77 +156805,77 @@ - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + @@ -156815,39 +156905,39 @@ - + - + - + - + - + - - + + - - + + - + - - + + @@ -156856,63 +156946,63 @@ - - + + - + - + - + - + - - - + + + - + - + - - + + - + - + - + - + - + - + - + - + @@ -156932,119 +157022,119 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - + + + + + + + + - - + + - - + + - + - + - + - + - + - + - - - + + + - + - + - - + + - - + + - - - + + + - + - + - + - + @@ -157052,168 +157142,168 @@ - + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - + - - - - + + + + - - - - - + + + + + - + - + - + - + - + - + - + - - + + - - + + - + - + - - + + - + - + - - + + - - + + - + - - + + - + - + - + - + - + - + - + - + - + @@ -157222,8 +157312,8 @@ - - + + @@ -157231,7 +157321,7 @@ - + @@ -157243,9 +157333,9 @@ - + - + @@ -157254,7 +157344,7 @@ - + @@ -157269,40 +157359,40 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -157310,7 +157400,7 @@ - + @@ -157319,37 +157409,37 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -157374,8 +157464,8 @@ - - + + @@ -157386,7 +157476,7 @@ - + @@ -157400,7 +157490,7 @@ - + @@ -157411,41 +157501,41 @@ - - - - - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + @@ -157453,226 +157543,226 @@ - - - - + + + + - - + + - - - - + + + + - - - - - + + + + + - - + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - + + - - - - - + + + + + - - + + - - - - - - - - - + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - + + + + + + + + + + - - + + - - - - + + + + - - + + - + - - - + + + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + + + - - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + @@ -157681,126 +157771,126 @@ - + - + - + - - - + + + - - - + + + - + - + - - + + - + - - + + - + - - + + - + - - - + + + - - + + - + - + - + - - + + - - + + - - + + - + - + - + - - + + - + - - + + - - + + - + @@ -157808,16 +157898,16 @@ - + - + - + - + @@ -157826,9 +157916,9 @@ - + - + @@ -157846,7 +157936,7 @@ - + @@ -157854,23 +157944,23 @@ - + - + - + - + - + - + - + @@ -157878,69 +157968,69 @@ - - - + + + + - - - - + + + - + - + - - - + + + - + - + - - + + - + - - - - - - - - - - - - - + + + + + + + + + + + + + - + @@ -157948,7 +158038,7 @@ - + @@ -157963,19 +158053,19 @@ - + - + - + - + @@ -157983,9 +158073,9 @@ - + - + @@ -157994,9 +158084,9 @@ - + - + @@ -158008,7 +158098,7 @@ - + @@ -158017,7 +158107,7 @@ - + @@ -158031,24 +158121,24 @@ - + - + - + - + - + - + - + @@ -158060,60 +158150,60 @@ - - - - - + - - - - - - - + + + + + + + + + + + - + - + - + - + - + - + - + - + - + @@ -158122,17 +158212,17 @@ - + - + - + @@ -158140,7 +158230,7 @@ - + @@ -158150,11 +158240,11 @@ - - + + - + @@ -158164,29 +158254,29 @@ - + - + - - + + - + - + - + - + @@ -158202,30 +158292,30 @@ - + - - + + - + - + - + - + @@ -158248,28 +158338,28 @@ - + - + - + - + - + - + - + - + @@ -158284,18 +158374,18 @@ - + - + - + - + - + @@ -158310,7 +158400,7 @@ - + @@ -158318,28 +158408,28 @@ - + - + - + - + - + - + @@ -158350,31 +158440,31 @@ - + - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + @@ -158382,28 +158472,28 @@ - + - + - + - - + + - + @@ -158411,37 +158501,37 @@ - + - + - - + + - + - + - + - - + + - + - - + + - - + + @@ -158452,18 +158542,18 @@ - + - + - + - + @@ -158477,33 +158567,33 @@ - + - + - + - + - + - + - + - + - + @@ -158514,40 +158604,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -158556,259 +158646,259 @@ - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - + + - + - - + + - + - + - + - - + + - + - + - - + + - - - + + + - - - + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - + @@ -158816,7 +158906,7 @@ - + @@ -158826,79 +158916,79 @@ - - + + - + - + - + - + - + - + - + - - - - + + + + - + - - - - + + + + - + - + - + - + - - - - + + + + @@ -158914,11 +159004,11 @@ - + - + @@ -158927,24 +159017,24 @@ - + - + - + - + @@ -158953,10 +159043,10 @@ - + - + @@ -158965,67 +159055,67 @@ - + - + - - - + + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + @@ -159033,7 +159123,7 @@ - + @@ -159067,15 +159157,15 @@ - - + + - + @@ -159086,50 +159176,50 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - + + + + + + + + + @@ -159139,11 +159229,11 @@ - + - + @@ -159174,66 +159264,66 @@ - + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - - - - - - + + + + + + - + - + - - + + @@ -159241,42 +159331,42 @@ - + - + - + - - + + - + - + - + - + - - - + + + - + @@ -159284,54 +159374,54 @@ - - + + - - - + + + - + - + - - - + + + - + - - + + - - - + + + - + - - + + @@ -159340,14 +159430,14 @@ - + - + @@ -159361,16 +159451,16 @@ - - + + - + - + @@ -159379,39 +159469,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -159420,69 +159510,69 @@ - + - - - - - - - - - - + + + + + + + + + + - - + + - - + + - - - + + + - - - + + + - + - + - + - - + + - + - - + + - + - + - + @@ -159493,131 +159583,131 @@ - - - - - - - - - - - + + + + + + + + + + + - + - + - + - - - + + + - - - + + + - + - + - - + + - + - - - - - - + + + + + + - + - + - + - - - + + + - + - + - + - - + + - - + + - - + + - + - + - + - + @@ -159625,10 +159715,10 @@ - + - + @@ -159639,25 +159729,25 @@ - - - + + + - + - + - + @@ -159667,89 +159757,89 @@ - + - + - + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + @@ -159758,10 +159848,10 @@ - - + + - + @@ -159770,21 +159860,21 @@ - - + + - + - - + + @@ -159798,16 +159888,16 @@ - + - + - + @@ -159816,12 +159906,12 @@ - + - + - + @@ -159830,58 +159920,58 @@ - - + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + @@ -159889,13 +159979,13 @@ - + - + @@ -159921,80 +160011,80 @@ - - - + + + - + - - - + + + - + - + - + - - - + + + - - + + - + - - + + - + - + - + - + - + - - + + - + - + - + @@ -160004,16 +160094,16 @@ - + - + - + - - + + @@ -160021,8 +160111,8 @@ - - + + @@ -160030,16 +160120,16 @@ - - + + - + - + - + @@ -160049,16 +160139,16 @@ - + - + - + - - + + @@ -160066,8 +160156,8 @@ - - + + @@ -160075,133 +160165,133 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + - - + + - + - + - - + + - + - + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + @@ -160209,48 +160299,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -160270,13 +160360,13 @@ - + - + - + @@ -160299,13 +160389,13 @@ - + - + - + @@ -160316,7 +160406,7 @@ - + @@ -160327,7 +160417,7 @@ - + @@ -160359,13 +160449,13 @@ - + - + - + @@ -160394,7 +160484,7 @@ - + @@ -160414,16 +160504,16 @@ - + - + - + - + @@ -160446,7 +160536,7 @@ - + @@ -160466,7 +160556,7 @@ - + @@ -160474,7 +160564,7 @@ - + @@ -160491,10 +160581,10 @@ - + - + @@ -160520,7 +160610,7 @@ - + @@ -160534,54 +160624,54 @@ - - - - - - - - - + + + + + + + + + - - + + - - + + - - - + + + - - - + + + - - + + - + - + - + - + - + @@ -160589,34 +160679,34 @@ - + - + - + - + - + - + - + - - - + + + @@ -160624,23 +160714,23 @@ - - + + - - - + + + - + - - + + @@ -160648,52 +160738,52 @@ - + - - + + - + - + - - + + - + - + - - + + @@ -160704,8 +160794,8 @@ - - + + @@ -160714,25 +160804,25 @@ - - + + - + - + - + - + @@ -160743,23 +160833,23 @@ - + - + - - + + - + - + @@ -160768,14 +160858,14 @@ - - + + - - + + @@ -160786,16 +160876,16 @@ - + - + - + @@ -160810,7 +160900,7 @@ - + @@ -160821,63 +160911,63 @@ - - + + - + - - - + + + - + - + - + - - + + - + - + - + - + - + - + @@ -160888,7 +160978,7 @@ - + @@ -160897,30 +160987,30 @@ - + - + - + - + - + - + - + @@ -160953,10 +161043,10 @@ - + - + @@ -160966,10 +161056,10 @@ - + - + @@ -160981,32 +161071,32 @@ - + - + - + - + - + - + - + - + - + @@ -161039,7 +161129,7 @@ - + @@ -161050,7 +161140,7 @@ - + @@ -161059,117 +161149,117 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -161177,10 +161267,10 @@ - + - + @@ -161188,7 +161278,7 @@ - + @@ -161196,58 +161286,58 @@ - - - - - - - - - + + + - + - - - - - - - + + + + + + + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -161256,38 +161346,38 @@ - + - + - + - + - + - + - + - + @@ -161295,19 +161385,19 @@ - + - + - + @@ -161318,13 +161408,13 @@ - - + + - - + + @@ -161341,17 +161431,17 @@ - + - + - + @@ -161361,17 +161451,17 @@ - + - + - + @@ -161403,43 +161493,43 @@ - + - + - + - + - + - + - + - + @@ -161448,29 +161538,29 @@ - + - + - + - + - + - - - + + + @@ -161478,144 +161568,144 @@ - - - + + + - + - + - - + + - + - - + + - - + + - - - + + + - + - + - - + + - - + + - + - - - - - - - + + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - + + + - - - - - - - - + + + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - - + + + + + - + - + @@ -161630,7 +161720,7 @@ - + @@ -161639,17 +161729,17 @@ - + - + - + - + @@ -161658,7 +161748,7 @@ - + @@ -161666,67 +161756,67 @@ - + - + - + - - - + + + - - - - - + + + + + - - + + - - - + + + - - + + - + - + - + - + - + - + - + @@ -161738,43 +161828,43 @@ - + - + - - - - - - - - + + + + + + + + - + - + - + - + - + @@ -161795,7 +161885,7 @@ - + @@ -161845,41 +161935,41 @@ - + - + - + - + - + - + - + - + - + @@ -161888,7 +161978,7 @@ - + @@ -161914,44 +162004,44 @@ - - - + + + - + - + - + - + - + - + - + - + - + @@ -161960,17 +162050,17 @@ - + - + - + @@ -161987,15 +162077,15 @@ - - + + - + @@ -162003,7 +162093,7 @@ - + @@ -162011,7 +162101,7 @@ - + @@ -162019,7 +162109,7 @@ - + @@ -162029,12 +162119,12 @@ - + - - + + @@ -162042,16 +162132,16 @@ - + - - + + - + - + @@ -162061,39 +162151,39 @@ - - - + + + - + - - + + - - - + + + - - + + - - + + - - - + + + - - + + @@ -162106,15 +162196,15 @@ - + - + - + @@ -162147,12 +162237,12 @@ - + - + - + @@ -162188,30 +162278,30 @@ - - + + - + - - + + - - + + - + - + - + @@ -162224,8 +162314,8 @@ - - + + @@ -162236,113 +162326,113 @@ - + - + - + - + - + - + - + - - - - + + + + - - - - + + + + - - + + - - + + - - + + - - + + - - - - + + + + - + - + - + - - - - + + + + - - - + + + - + - + - - + + - + @@ -162350,7 +162440,7 @@ - + @@ -162358,13 +162448,13 @@ - + - + - + @@ -162531,11 +162621,11 @@ - + - - + + @@ -162549,31 +162639,31 @@ - + - + - + - - + + - + - + @@ -162581,7 +162671,7 @@ - + @@ -162589,7 +162679,7 @@ - + @@ -162597,7 +162687,7 @@ - + @@ -162605,60 +162695,60 @@ - - + + - - + + - - - + + + - + - + - + - + - + - + - + - + @@ -162666,7 +162756,7 @@ - + @@ -162674,12 +162764,12 @@ - - + + - + @@ -162687,7 +162777,7 @@ - + @@ -162695,21 +162785,29 @@ - + - + - + - + + + + + + + + + @@ -162756,9 +162854,9 @@ - + - + @@ -162767,211 +162865,211 @@ - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + - + - + - - - + + + - + - + - + - - + + - + - - - - + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - + + + + - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - + + - - - + + + - - + + - - - + + + - - - - - - + + + + + + - - + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + @@ -162983,228 +163081,228 @@ - + - + - + - + - + - + - - - - - - - + + + + + + + - - + + - - + + - + - + - + - + - + - - - + + + - + - - + + - + - + - + - + - - - + + + - - - - + + + + - - - + + + - - + + - + - - + + - - - + + + - + - - - + + + - - - + + + - + - - - - + + + + - + - - + + - + - + - - - + + + - - + + - - + + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + @@ -163297,7 +163395,7 @@ - + @@ -163309,7 +163407,7 @@ - + @@ -163402,7 +163500,7 @@ - + @@ -163435,7 +163533,7 @@ - + @@ -163525,13 +163623,13 @@ - + - + - + @@ -163582,36 +163680,36 @@ - + - + - + - + - + - + - + - + - + @@ -163629,25 +163727,25 @@ - + - + - + - + - + @@ -163677,30 +163775,30 @@ - + - + - + - + - + - + - + @@ -163712,7 +163810,7 @@ - + @@ -163775,21 +163873,21 @@ - + - + - + - + - + @@ -163801,7 +163899,7 @@ - + @@ -163810,7 +163908,7 @@ - + @@ -163819,7 +163917,7 @@ - + @@ -163870,16 +163968,16 @@ - + - + - + - + @@ -163888,10 +163986,10 @@ - + - + @@ -163899,7 +163997,7 @@ - + @@ -163946,7 +164044,7 @@ - + @@ -163957,19 +164055,19 @@ - + - + - + @@ -163977,10 +164075,10 @@ - + - + @@ -163988,23 +164086,23 @@ - + - + - + - + - + - + @@ -164016,7 +164114,7 @@ - + @@ -164028,7 +164126,7 @@ - + @@ -164040,7 +164138,7 @@ - + @@ -164054,22 +164152,22 @@ - + - + - + - + - + @@ -164077,7 +164175,7 @@ - + @@ -164091,9 +164189,9 @@ - + - + @@ -164102,15 +164200,15 @@ - + - + - + - + @@ -164118,7 +164216,7 @@ - + @@ -164127,7 +164225,7 @@ - + @@ -164136,7 +164234,7 @@ - + @@ -164151,7 +164249,7 @@ - + @@ -164168,21 +164266,21 @@ - + - + - + - + - + - + @@ -164197,24 +164295,24 @@ - + - + - + - + - + - + @@ -164223,7 +164321,7 @@ - + @@ -164252,7 +164350,7 @@ - + @@ -164269,7 +164367,7 @@ - + @@ -164295,12 +164393,12 @@ - + - + - + @@ -164308,7 +164406,7 @@ - + @@ -164316,7 +164414,7 @@ - + @@ -164327,7 +164425,7 @@ - + @@ -164338,7 +164436,7 @@ - + @@ -164346,12 +164444,12 @@ - + - + - + @@ -164360,35 +164458,35 @@ - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - + - + @@ -164403,50 +164501,50 @@ - + - + - + - + - + - - + + - - + + - - + + - - - + + + - + @@ -164454,9 +164552,9 @@ - + - + @@ -164465,25 +164563,25 @@ - + - + - + - + - + @@ -164495,44 +164593,44 @@ - - + + - - + + - + - + - + - + - + - + - + @@ -164554,16 +164652,16 @@ - + - + - + @@ -164578,13 +164676,13 @@ - + - + @@ -164593,13 +164691,13 @@ - + - + @@ -164617,53 +164715,53 @@ - + - - - + + + - - + + - + - + - + - + - + - + - + @@ -164671,46 +164769,46 @@ - - + + - + - + - + - + - - + + - + - + - + @@ -164719,12 +164817,12 @@ - - + + - + @@ -164746,25 +164844,25 @@ - + - + - + - + - + - - + + - + @@ -164778,47 +164876,47 @@ - - - + + + - + - + - - + + - + - + - + - + - + @@ -164829,7 +164927,7 @@ - + @@ -164842,11 +164940,11 @@ - + - + @@ -164854,19 +164952,19 @@ - - - - + + + + - - - - - - + + + + + + @@ -164875,26 +164973,26 @@ - + - + - + - + - + @@ -164918,7 +165016,7 @@ - + @@ -164926,7 +165024,7 @@ - + @@ -164937,84 +165035,84 @@ - + - + - - - + + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - + @@ -165022,43 +165120,43 @@ - - + + - + - + - + - + - + - + - + @@ -165075,7 +165173,7 @@ - + @@ -165095,9 +165193,9 @@ - + - + @@ -165115,46 +165213,46 @@ - + - + - + - + - + - + - - + + - + - - + + - + - + @@ -165163,13 +165261,13 @@ - - + + - + @@ -165195,15 +165293,15 @@ - + - + - - - + + + @@ -165224,65 +165322,65 @@ - + - + - - + + - + - + - + - + - + - + - + - - - + + + - - + + - + - + - + - + @@ -165290,14 +165388,14 @@ - + - + @@ -165317,10 +165415,10 @@ - + - + @@ -165329,19 +165427,19 @@ - - - + + + - - + + - + @@ -165349,8 +165447,8 @@ - - + + @@ -165360,7 +165458,7 @@ - + @@ -165374,7 +165472,7 @@ - + @@ -165412,58 +165510,58 @@ - + - + - + - + - + - + - + - - - - - - - + + + + + + + - + - + - + - + - + - - + + @@ -165484,15 +165582,15 @@ - + - - + + @@ -165500,7 +165598,7 @@ - + @@ -165511,7 +165609,7 @@ - + @@ -165525,34 +165623,34 @@ - + - - + + - - - + + + - + - - - + + + - - + + @@ -165562,26 +165660,26 @@ - + - + - + - + - + - + - + @@ -165595,18 +165693,18 @@ - + - + - + - + - + @@ -165638,31 +165736,31 @@ - + - + - + - - - - - - - - - - - + + + + + + + + + + + - - + + - - + + @@ -165682,9 +165780,9 @@ - + - + @@ -165692,8 +165790,8 @@ - - + + @@ -165702,54 +165800,54 @@ - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + @@ -165802,7 +165900,7 @@ - + @@ -165811,21 +165909,21 @@ - + - + - + - + - + @@ -165840,13 +165938,13 @@ - - - + + + - - - + + + @@ -165856,35 +165954,35 @@ - + - + - + - - + + - - + + - + - + - + @@ -165917,10 +166015,10 @@ - + - + @@ -165932,10 +166030,10 @@ - + - + @@ -165944,7 +166042,7 @@ - + @@ -165956,7 +166054,7 @@ - + @@ -165976,12 +166074,12 @@ - + - + - + @@ -165993,24 +166091,24 @@ - + - + - + - + - + - + @@ -166027,204 +166125,196 @@ - + - + - + - - - - - - - - + + + + + + + + - + - + - + - - + + - + - + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - - - + + + - - - + + + - + - + - + - - - - - - - - - + - - + + - + - + - + - - - - + + + + - + - + - + - + - + - + - + @@ -166235,7 +166325,7 @@ - + @@ -166259,15 +166349,15 @@ - + - + - + @@ -166275,75 +166365,75 @@ - + - + - + - + - + - - - - - - + + + + + + - + - + - - - - + + + + - - + + - - + + - - + + - - + + - + - + - - + + @@ -166357,37 +166447,37 @@ - + - + - + - - + + - - + + - + - + - + @@ -166414,7 +166504,7 @@ - + @@ -166425,18 +166515,18 @@ - - + + - + - + - + - + @@ -166446,28 +166536,28 @@ - + - + - + - + - + - + - + @@ -166481,8 +166571,8 @@ - - + + @@ -166494,58 +166584,58 @@ - + - + - + - + - + - + - + - - - + + + - + - + - - + + - - - - - - - + + + + + + + @@ -166557,21 +166647,21 @@ - + - + - + - + - - + + @@ -166588,11 +166678,11 @@ - + - + @@ -166606,24 +166696,24 @@ - + - + - + - + - + - + @@ -166638,24 +166728,24 @@ - + - + - + - + - + - + @@ -166664,10 +166754,10 @@ - + - + @@ -166679,40 +166769,40 @@ - - - + + + - + - + - - - - + + + + - + - + - + @@ -166735,15 +166825,15 @@ - + - + - + - + @@ -166755,24 +166845,24 @@ - + - + - + - + - + - + @@ -166781,10 +166871,10 @@ - + - + @@ -166811,10 +166901,10 @@ - + - + @@ -166823,7 +166913,7 @@ - + @@ -166831,35 +166921,35 @@ - - + + - + - + - - - - + + + + - + - + @@ -166873,7 +166963,7 @@ - + @@ -166891,7 +166981,7 @@ - + @@ -166911,15 +167001,15 @@ - + - + - + @@ -166936,27 +167026,27 @@ - + - + - + - + - + - + - + - + @@ -166965,111 +167055,111 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - + + - + - + - - + + - + - + - - + + - - + + - - + + - - - + + + - - + + - - + + - + - + - + - - + + - - + + - - + + - + - - - + + + - - - + + + @@ -167081,28 +167171,28 @@ - + - + - + - + - + - + - - + + @@ -167111,19 +167201,19 @@ - + - + - + @@ -167132,7 +167222,7 @@ - + @@ -167158,9 +167248,9 @@ - + - + @@ -167169,38 +167259,38 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -167227,40 +167317,40 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -167268,25 +167358,25 @@ - - - + + + + + + + + + + + + - - - - - - - - - - - - - + + + + - + @@ -167296,24 +167386,24 @@ - - + + - + - + - + - + @@ -167322,7 +167412,7 @@ - + @@ -167332,11 +167422,11 @@ - - + + - + @@ -167347,7 +167437,7 @@ - + @@ -167356,61 +167446,61 @@ - + - - + + - + - + - + - - - + + + - + - - - + + + - + - - - + + + - + - + @@ -167421,77 +167511,77 @@ - - + + - + - + - + - + - + - - + + - + - - + + - + - + - - + + - - - - + + + + - - + + - + - + - + - + @@ -167506,7 +167596,7 @@ - + @@ -167523,7 +167613,7 @@ - + @@ -167534,47 +167624,47 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -167595,12 +167685,12 @@ - + - + - + @@ -167609,7 +167699,7 @@ - + @@ -167617,121 +167707,121 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - + - + - + @@ -167742,64 +167832,64 @@ - + - + - + - - - + + + - - + + - + - + - + - + - + - + - + @@ -167807,39 +167897,39 @@ - + - + - - + + - + - + - - + + - + - + @@ -167848,43 +167938,43 @@ - + - - + + - + - + - + - + - + - - + + - + @@ -167893,72 +167983,72 @@ - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -167976,88 +168066,88 @@ - + - - + + - + - - + + - + - - + + - - + + - + - - - + + + - - + + - - - + + + - - - - + + + + - - + + - - + + - + - + - + - + - + - + @@ -168065,15 +168155,15 @@ - + - + - + - + @@ -168085,7 +168175,7 @@ - + @@ -168093,27 +168183,27 @@ - - - - + + + + - + - + - + - - + + @@ -168133,7 +168223,7 @@ - + @@ -168147,7 +168237,7 @@ - + @@ -168159,17 +168249,17 @@ - + - + - + @@ -168183,27 +168273,27 @@ - + - + - + - + - + - + - + - + @@ -168211,7 +168301,7 @@ - + @@ -168219,7 +168309,7 @@ - + @@ -168230,12 +168320,12 @@ - + - + @@ -168252,47 +168342,47 @@ - + - + - + - + - + - + - + - + - + - + @@ -168306,41 +168396,41 @@ - + - + - + - + - + - + - - + + - + - + @@ -168350,15 +168440,15 @@ - + - + - + @@ -168368,60 +168458,60 @@ - - + + - - + + - + - + - - + + - + - + - + - + - - - + + + - + - + @@ -168439,7 +168529,7 @@ - + @@ -168465,7 +168555,7 @@ - + @@ -168497,37 +168587,37 @@ - + - + - + - + - + - - - - - + + + + + - + - + - + @@ -168538,12 +168628,12 @@ - + - + @@ -168555,56 +168645,56 @@ - + - + - - - + + + - - - - + + + + - - - + + + - + - - + + - - - + + + - + - + - + @@ -168623,45 +168713,45 @@ - - + + - + - - + + - - + + - + - + - - + + - - - - + + + + @@ -168671,93 +168761,93 @@ - - + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - - - + + + + + + - - - + + + @@ -168769,17 +168859,17 @@ - + - + - + @@ -168787,7 +168877,7 @@ - + @@ -168795,7 +168885,7 @@ - + @@ -168803,7 +168893,7 @@ - + @@ -168812,7 +168902,7 @@ - + @@ -168822,9 +168912,9 @@ - + - + @@ -168833,55 +168923,63 @@ - + - + - + - + - + - + - + - - - + + + + + + + + + + + - + - - + + - + - + - + @@ -168902,109 +169000,109 @@ - + - + - - + + - + - + - - + + - + - - + + - + - - - + + + - - - + + + - - - - + + + + - + - - + + - - + + - - + + - - + + - - + + - - - - + + + + - + - + @@ -169012,57 +169110,57 @@ - + - + - + - - - - + + + + - - - + + + - + - - + + - + - + - + - + - - + + - + - + @@ -169071,60 +169169,60 @@ - - + + - + - + - + - + - + - + - + - + - + - + - - - - - + + + + + - - + + @@ -169135,22 +169233,22 @@ - + - - + + - + - - + + - + @@ -169158,7 +169256,7 @@ - + @@ -169167,12 +169265,12 @@ - + - + @@ -169181,15 +169279,15 @@ - + - + - + - + @@ -169201,48 +169299,48 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -169256,24 +169354,24 @@ - + - + - + - + - + - + @@ -169288,13 +169386,13 @@ - + - + @@ -169314,10 +169412,10 @@ - + - + @@ -169332,30 +169430,30 @@ - - + + - + - + - - - - + + + + - + @@ -169376,52 +169474,44 @@ - - - + + + - - - - - - - - - - - + + + - - - - + + + + - - - - - - - + + + + + + + - + @@ -169431,22 +169521,22 @@ - + - + - + - + - - + + @@ -169465,7 +169555,7 @@ - + @@ -169530,157 +169620,157 @@ - - - + + + - - - + + + - + - - + + - - - + + + - + - + - + - + - + - + - + - - + + - + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + @@ -169710,92 +169800,92 @@ - + - + - - - - + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - + + - - + + - + - - + + + + + + - - - - - - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -169809,20 +169899,20 @@ - + - + - + - + @@ -169832,8 +169922,8 @@ - - + + @@ -169841,28 +169931,28 @@ - + - - + + - - + + - + - + @@ -169872,12 +169962,12 @@ - + - + @@ -169889,38 +169979,38 @@ - - + + - + - + - + - + - + - + @@ -169928,37 +170018,37 @@ - + - + - - - - - + + + + + - + - + - + - + @@ -169967,63 +170057,63 @@ - - - + + + - + - - - - + + + + - + - - - - + + + + - + - - + + - + - - + + - - + + - - - + + + @@ -170034,9 +170124,9 @@ - + - + @@ -170058,35 +170148,35 @@ - + - + - - - + + + - + - + - + - + - + - + @@ -170095,7 +170185,7 @@ - + @@ -170113,16 +170203,16 @@ - + - + - + - + @@ -170149,16 +170239,16 @@ - + - + - + @@ -170179,7 +170269,7 @@ - + @@ -170190,10 +170280,10 @@ - + - + @@ -170208,10 +170298,10 @@ - + - + @@ -170253,7 +170343,7 @@ - + @@ -170307,25 +170397,25 @@ - + - + - + - + - + - + - + @@ -170349,22 +170439,22 @@ - - + + - + - + - + @@ -170372,7 +170462,7 @@ - + @@ -170380,17 +170470,17 @@ - + - + - + - + - + @@ -170399,7 +170489,7 @@ - + @@ -170407,15 +170497,15 @@ - + - + - + @@ -170465,26 +170555,26 @@ - - - - - - + + + + + + - + - + - + @@ -170493,7 +170583,7 @@ - + @@ -170501,38 +170591,38 @@ - + - + - + - + - + - + - + @@ -170543,16 +170633,16 @@ - + - + - + @@ -170560,71 +170650,71 @@ - - + + - - + + - - + + - + - - - + + + - - + + - - + + - - + + - + - + - + - + @@ -170638,35 +170728,35 @@ - + - - + + - - + + - + - + - - + + - - - + + + @@ -170689,31 +170779,31 @@ - + - + - + - + - + - + - + - + @@ -170731,10 +170821,10 @@ - + - + @@ -170746,10 +170836,10 @@ - + - + @@ -170935,7 +171025,7 @@ - + @@ -171094,10 +171184,10 @@ - + - + @@ -171139,7 +171229,7 @@ - + @@ -171157,7 +171247,7 @@ - + @@ -171166,13 +171256,13 @@ - + - + @@ -171202,52 +171292,52 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + @@ -171261,15 +171351,15 @@ - + - + - + @@ -171284,7 +171374,7 @@ - + @@ -171296,7 +171386,7 @@ - + @@ -171317,7 +171407,7 @@ - + @@ -171326,7 +171416,7 @@ - + @@ -171334,7 +171424,7 @@ - + @@ -171354,7 +171444,7 @@ - + @@ -171386,7 +171476,7 @@ - + @@ -171394,22 +171484,22 @@ - + - + - + - + - + - + @@ -171417,25 +171507,25 @@ - + - + - + - + @@ -171465,7 +171555,7 @@ - + @@ -171528,7 +171618,7 @@ - + @@ -171594,7 +171684,7 @@ - + @@ -171603,168 +171693,168 @@ - + - + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + - - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - + - - + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + @@ -171812,7 +171902,7 @@ - + @@ -171827,7 +171917,7 @@ - + @@ -171835,7 +171925,7 @@ - + @@ -171847,15 +171937,15 @@ - + - + - + - + @@ -171867,22 +171957,22 @@ - + - + - + - + @@ -171915,7 +172005,7 @@ - + @@ -172089,10 +172179,10 @@ - + - + @@ -172104,13 +172194,13 @@ - + - + @@ -172124,121 +172214,121 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + - - + + + + + + + + + + - - + + - + - + - + - + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + @@ -172249,15 +172339,15 @@ - + - + - + - + @@ -172266,120 +172356,120 @@ - - - - - + + + + + - + - + - - - + + + - - - + + + - + - + - + - - - + + + - + - - - + + + - + - + - + - + - - + + - - + + - - + + - + - - + + - - + + - + - - - + + + - - - + + + - + @@ -172390,8 +172480,8 @@ - - + + @@ -172415,9 +172505,9 @@ - + - + @@ -172427,7 +172517,7 @@ - + @@ -172436,7 +172526,7 @@ - + @@ -172445,11 +172535,11 @@ - + - + @@ -172466,7 +172556,7 @@ - + @@ -172484,10 +172574,10 @@ - + - + @@ -172499,10 +172589,10 @@ - + - + @@ -172511,12 +172601,12 @@ - + - + @@ -172545,7 +172635,7 @@ - + @@ -172553,7 +172643,7 @@ - + @@ -172562,13 +172652,13 @@ - + - + @@ -172634,31 +172724,31 @@ - + - + - + - + - + - + - + @@ -172668,24 +172758,24 @@ - + - + - + - + - + - + @@ -172703,9 +172793,9 @@ - + - + @@ -172723,13 +172813,13 @@ - + - + @@ -172741,55 +172831,55 @@ - - - - - - - - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + @@ -172798,17 +172888,17 @@ - + - + - + @@ -172819,51 +172909,51 @@ - - + + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + @@ -172871,90 +172961,90 @@ - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + @@ -172962,13 +173052,13 @@ - + - + - + @@ -172995,13 +173085,13 @@ - + - + @@ -173067,10 +173157,10 @@ - + - + @@ -173097,7 +173187,7 @@ - + @@ -173106,13 +173196,13 @@ - + - + - + @@ -173124,25 +173214,25 @@ - + - + - + - + - + - + @@ -173181,18 +173271,18 @@ - + - + - + @@ -173200,9 +173290,9 @@ - + - + @@ -173226,7 +173316,7 @@ - + @@ -173234,13 +173324,13 @@ - + - + @@ -173260,12 +173350,12 @@ - + - + - + @@ -173280,7 +173370,7 @@ - + @@ -173291,7 +173381,7 @@ - + @@ -173314,19 +173404,19 @@ - + - + - + - + @@ -173340,9 +173430,9 @@ - + - + @@ -173366,7 +173456,7 @@ - + @@ -173384,10 +173474,10 @@ - + - + @@ -173398,7 +173488,7 @@ - + @@ -173409,12 +173499,12 @@ - + - + @@ -173423,7 +173513,7 @@ - + @@ -173435,7 +173525,7 @@ - + @@ -173447,7 +173537,7 @@ - + @@ -173465,13 +173555,13 @@ - + - + - + @@ -173492,26 +173582,26 @@ - + - + - + - + - + - + @@ -173520,10 +173610,10 @@ - + - + @@ -173531,15 +173621,15 @@ - + - + - + @@ -173547,18 +173637,18 @@ - + - + - + - + @@ -173582,7 +173672,7 @@ - + @@ -173594,13 +173684,13 @@ - + - + - + @@ -173618,13 +173708,13 @@ - + - + - + @@ -173660,7 +173750,7 @@ - + @@ -173672,7 +173762,7 @@ - + @@ -173690,18 +173780,18 @@ - + - + - + - + @@ -173718,16 +173808,16 @@ - + - + - + @@ -173735,7 +173825,7 @@ - + @@ -173764,30 +173854,30 @@ - + - + - + - + - + - + - + - + - + @@ -173808,7 +173898,7 @@ - + @@ -173817,12 +173907,12 @@ - + - + - + @@ -173855,7 +173945,7 @@ - + @@ -173864,13 +173954,13 @@ - + - + @@ -173884,15 +173974,15 @@ - + - + - + - + @@ -173901,10 +173991,10 @@ - + - + @@ -173915,15 +174005,15 @@ - + - + - + @@ -173938,7 +174028,7 @@ - + @@ -173949,12 +174039,12 @@ - + - + - + @@ -173966,15 +174056,15 @@ - + - + - + - + @@ -173983,22 +174073,22 @@ - + - + - + - + - + @@ -174012,7 +174102,7 @@ - + @@ -174026,15 +174116,15 @@ - + - + - + - + @@ -174043,7 +174133,7 @@ - + @@ -174051,74 +174141,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -174126,16 +174216,16 @@ - + - + - + - + @@ -174144,39 +174234,39 @@ - + - + - + - + - + - + @@ -174184,24 +174274,24 @@ - + - + - + - + - + - + - + @@ -174213,7 +174303,7 @@ - + @@ -174224,7 +174314,7 @@ - + @@ -174232,15 +174322,15 @@ - + - + - + - + @@ -174254,18 +174344,18 @@ - + - + - + - + @@ -174274,15 +174364,15 @@ - + - + - + @@ -174302,27 +174392,27 @@ - + - + - + - + - + - + @@ -174330,9 +174420,9 @@ - + - + @@ -174341,7 +174431,7 @@ - + @@ -174349,10 +174439,18 @@ - + - + + + + + + + + + @@ -174363,10 +174461,10 @@ - + - + @@ -174395,333 +174493,333 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -174738,12 +174836,12 @@ - + - + - + @@ -174758,19 +174856,19 @@ - + - + - + - + @@ -174782,22 +174880,22 @@ - + - + - + - + - + @@ -174812,10 +174910,10 @@ - + - + @@ -174868,13 +174966,13 @@ - + - + @@ -174906,7 +175004,7 @@ - + @@ -174921,7 +175019,7 @@ - + @@ -174935,7 +175033,7 @@ - + @@ -174943,48 +175041,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -174995,12 +175093,12 @@ - + - + @@ -175030,10 +175128,10 @@ - + - + @@ -175042,7 +175140,7 @@ - + @@ -175075,7 +175173,7 @@ - + @@ -175084,10 +175182,10 @@ - + - + @@ -175096,21 +175194,21 @@ - + - + - + - + - + @@ -175121,7 +175219,7 @@ - + @@ -175159,16 +175257,16 @@ - + - + - + - + @@ -175186,10 +175284,10 @@ - + - + @@ -175207,13 +175305,13 @@ - + - + - + @@ -175234,7 +175332,7 @@ - + @@ -175255,7 +175353,7 @@ - + @@ -175284,7 +175382,7 @@ - + @@ -175295,7 +175393,7 @@ - + @@ -175303,7 +175401,7 @@ - + @@ -175320,10 +175418,10 @@ - + - + @@ -175361,7 +175459,7 @@ - + @@ -175396,7 +175494,7 @@ - + @@ -175476,7 +175574,7 @@ - + @@ -175485,9 +175583,9 @@ - + - + @@ -175535,7 +175633,7 @@ - + @@ -175544,12 +175642,12 @@ - + - + - + @@ -175578,9 +175676,9 @@ - + - + @@ -175595,7 +175693,7 @@ - + @@ -175603,9 +175701,9 @@ - + - + @@ -175614,7 +175712,7 @@ - + @@ -175635,7 +175733,7 @@ - + @@ -175647,13 +175745,13 @@ - + - + @@ -175662,10 +175760,10 @@ - + - + @@ -175676,9 +175774,9 @@ - + - + @@ -175687,7 +175785,7 @@ - + @@ -175705,9 +175803,9 @@ - + - + @@ -175719,7 +175817,7 @@ - + @@ -175728,16 +175826,16 @@ - + - + - + - + @@ -175749,7 +175847,7 @@ - + @@ -175766,9 +175864,9 @@ - + - + @@ -175783,12 +175881,12 @@ - + - + - + @@ -175803,7 +175901,7 @@ - + @@ -175815,10 +175913,10 @@ - + - + @@ -175836,22 +175934,22 @@ - + - + - + - + - + @@ -175881,24 +175979,24 @@ - + - + - + - + - + - + @@ -175907,15 +176005,15 @@ - + - + - + - + @@ -175923,7 +176021,7 @@ - + @@ -175959,21 +176057,21 @@ - + - + - + - + - + @@ -176003,7 +176101,7 @@ - + @@ -176026,9 +176124,9 @@ - + - + @@ -176055,7 +176153,7 @@ - + @@ -176066,7 +176164,7 @@ - + @@ -176074,7 +176172,7 @@ - + @@ -176085,7 +176183,7 @@ - + @@ -176093,39 +176191,39 @@ - + - + - + - + - + - + - + - + - + @@ -176140,7 +176238,7 @@ - + @@ -176152,18 +176250,18 @@ - + - + - + - + @@ -176171,7 +176269,7 @@ - + @@ -176179,7 +176277,7 @@ - + @@ -176187,9 +176285,9 @@ - + - + @@ -176213,7 +176311,7 @@ - + @@ -176237,16 +176335,16 @@ - + - + - + @@ -176261,7 +176359,7 @@ - + @@ -176269,7 +176367,7 @@ - + @@ -176277,7 +176375,7 @@ - + @@ -176291,15 +176389,15 @@ - + - + - + @@ -176311,12 +176409,12 @@ - + - + @@ -176348,7 +176446,7 @@ - + @@ -176374,26 +176472,26 @@ - + - + - + - + - + - + @@ -176423,14 +176521,14 @@ - + - + @@ -176444,500 +176542,500 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + - - - + + - - - + + - - - + + - - - + + - - - - + + + - - + + - - - - - - - - - + + - - - + + + - - - + + + - - - + + + - - - - + + + + + - - - + + + + + + + + + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + - - - - + + + + - - + + - - - + + - - - - + - - + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -176948,377 +177046,377 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - + + + - - - + + + - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - + + + + - - - - - + + - - - - - + + + + - - - - - - + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - + + - - - + + - - - + + + - - - + + - - - + + + - - - - + + + + - - - - + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - + + - - - + + + - + - + - + - + @@ -177327,7 +177425,7 @@ - + @@ -177354,7 +177452,7 @@ - + @@ -177362,23 +177460,23 @@ - + - + - + - + - + @@ -177390,7 +177488,7 @@ - + @@ -177398,41 +177496,41 @@ - - - - - - - - - + + + + + + + + + - - + + - + - + - + - + - + - + - + @@ -177449,7 +177547,7 @@ - + @@ -177457,10 +177555,10 @@ - + - + @@ -177484,7 +177582,7 @@ - + @@ -177492,44 +177590,44 @@ - + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - - + + - + @@ -177537,35 +177635,35 @@ - + - + - + - + - + - + - + - + - + @@ -177573,22 +177671,22 @@ - + - + - + - + - + @@ -177605,128 +177703,128 @@ - + - + - - - + + + - - + + - - + + - + - + - + - + - + - + - - + + - - + + - - - - + + + + - - + + - + - + - + - + - - + + - + - - + + - + - + - + - + - + @@ -177744,21 +177842,21 @@ - + - + - + - + - + @@ -177770,205 +177868,205 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -177979,29 +178077,29 @@ - + - + - + - + - + - + - + @@ -178015,7 +178113,7 @@ - + @@ -178029,10 +178127,10 @@ - + - + @@ -178043,10 +178141,10 @@ - + - + @@ -178054,19 +178152,19 @@ - + - + - + - + - + @@ -178074,43 +178172,43 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -178118,7 +178216,7 @@ - + @@ -178126,7 +178224,7 @@ - + @@ -178134,7 +178232,7 @@ - + @@ -178142,13 +178240,13 @@ - + - + - + @@ -178156,18 +178254,18 @@ - + - + - + - + @@ -178181,10 +178279,10 @@ - + - + @@ -178192,7 +178290,7 @@ - + @@ -178209,41 +178307,41 @@ - + - + - + - - - - + + + + - + - - + + - - + + - + - + @@ -178254,38 +178352,38 @@ - + - + - - + + - - - + + + - - + + - - - + + + @@ -178293,70 +178391,51 @@ - + - - - + + + - + - - + + - - + + - - + + - - - + + + - - - + + + - + - - - - - - - - - - - - - - - - - - - - + @@ -178364,7 +178443,7 @@ - + @@ -178376,7 +178455,7 @@ - + @@ -178523,7 +178602,7 @@ - + @@ -178811,9 +178890,9 @@ - + - + @@ -178834,38 +178913,38 @@ - + - + - + - + - + - + - + @@ -178909,20 +178988,20 @@ - + - + - + - + - + @@ -178931,7 +179010,7 @@ - + @@ -178948,23 +179027,23 @@ - - - - - - + + + + + + - - - + + + - - - - + + + + @@ -178977,23 +179056,23 @@ - - + + - + - + - - - + + + @@ -179002,17 +179081,17 @@ - + - + - + @@ -179021,62 +179100,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -179085,20 +179164,20 @@ - + - - + + - + @@ -179107,26 +179186,26 @@ - + - + - + - + @@ -179134,25 +179213,25 @@ - - + + - - + + - + - + - + @@ -179162,7 +179241,7 @@ - + @@ -179170,51 +179249,51 @@ - - + + - + - + - - + + - + - - + + - - + + - + - + @@ -179223,11 +179302,11 @@ - - + + - - + + @@ -179236,43 +179315,43 @@ - + - + - - + + - - + + - + - + - + - + @@ -179281,45 +179360,30 @@ - - + + - - - + + + - + - + - - - - - - - - - - - - - - - - + @@ -179327,7 +179391,7 @@ - + @@ -179342,13 +179406,13 @@ - + - + - + @@ -179371,19 +179435,19 @@ - + - + - + - + @@ -179401,31 +179465,31 @@ - + - - + + - - + + - - + + - + - + @@ -179435,7 +179499,7 @@ - + @@ -179443,54 +179507,54 @@ - - - + + + - - - + + + - + - - - + + + - - - + + + - - + + - - - + + + - - + + - + @@ -179498,7 +179562,7 @@ - + @@ -179510,32 +179574,32 @@ - + - + - + - + - + - + - + @@ -179549,7 +179613,7 @@ - + @@ -179558,7 +179622,7 @@ - + @@ -179579,10 +179643,10 @@ - + - + @@ -179639,7 +179703,7 @@ - + @@ -179650,29 +179714,37 @@ - + - - - + + + - - + + + + + + + + + + - + - + @@ -179680,118 +179752,118 @@ - + - + - + - + - + - + - + - + - + - + - + - - - + + + - - - + + + - - - + + + - - - + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -179857,10 +179929,10 @@ - + - + @@ -179872,7 +179944,7 @@ - + @@ -179887,7 +179959,7 @@ - + @@ -179910,16 +179982,16 @@ - + - + - + @@ -179927,23 +179999,7 @@ - - - - - - - - - - - - - - - - - + @@ -179951,7 +180007,7 @@ - + @@ -179962,15 +180018,15 @@ - + - + - + @@ -179999,311 +180055,311 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -180314,13 +180370,13 @@ - + - + - + @@ -180338,13 +180394,13 @@ - + - + - + @@ -180368,34 +180424,34 @@ - + - + - + - + - + - + - + - + @@ -180412,20 +180468,20 @@ - + - + - + - + - + - + @@ -180434,15 +180490,15 @@ - + - + - + - + @@ -180460,13 +180516,13 @@ - + - + - + @@ -180475,13 +180531,13 @@ - + - + - + @@ -180561,7 +180617,7 @@ - + @@ -180582,10 +180638,10 @@ - + - + @@ -180603,7 +180659,7 @@ - + @@ -180615,10 +180671,10 @@ - + - + @@ -180633,7 +180689,7 @@ - + @@ -180654,21 +180710,21 @@ - + - + - + - + - + - + @@ -180676,10 +180732,10 @@ - + - + @@ -180693,7 +180749,7 @@ - + @@ -180707,23 +180763,23 @@ - + - + - + - + - + - + @@ -180735,15 +180791,15 @@ - + - + - + @@ -180769,23 +180825,23 @@ - + - + - + - + - + - + - + @@ -180794,7 +180850,7 @@ - + @@ -180808,32 +180864,32 @@ - + - + - + - + - + - + - + - + - + - + @@ -180841,40 +180897,40 @@ - + - + - + - + - + - + - + - + @@ -180882,7 +180938,7 @@ - + @@ -180905,10 +180961,10 @@ - + - + @@ -180919,12 +180975,12 @@ - + - + - + @@ -180942,7 +180998,7 @@ - + @@ -180952,7 +181008,7 @@ - + @@ -180963,7 +181019,7 @@ - + @@ -180972,74 +181028,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -181048,38 +181104,38 @@ - + - + - + - + - + - + - + - + - + - + @@ -181103,574 +181159,574 @@ - - - - - - - + + + + + - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - - - - - - - - - - - - - + - - + + - + + + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - + + + - - - - - - - + + + - - - + + + + + - - - + + + + + + + - - - - + + + - - - - + + + - - - + + + + - - + + + + - - - + + + - + + + + + + + + + + + + - - - - - - - - - - - - - + + - - - + + + + - - - + + + - - + + + - - - + + + - - - - - - - - - - - - - + + + + + + + + + + - - - - - - + + + - - - + + + - - + + + + + + - - + + + - - - + + - - - + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - - + + + - - - - + + + + - - - + + + + + + - - + - - - - - - + + + - - - + + + - - - - + + + + + + - - - - + + + - - - + + + + - - - + + + + - - - + + + - - - + + + - - - + + + - - + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - + + + + - + + + + + + + + + + + - - + + @@ -181678,33 +181734,33 @@ - + - + - + - + - + - + - + - + @@ -181718,54 +181774,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -181783,7 +181839,7 @@ - + @@ -181794,15 +181850,15 @@ - - + + - + - + @@ -181826,86 +181882,86 @@ - + - + - + - + - - + + - + - + - + - - + + - - - + + + - + - + - + - + - + - - + + - + - + - + - + @@ -181914,63 +181970,63 @@ - - + + - + - + - + - + - - + + - + - + - + - + - + @@ -181978,19 +182034,19 @@ - + - + - + @@ -181998,14 +182054,14 @@ - + - + @@ -182013,54 +182069,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -182078,126 +182134,142 @@ - - - - - - - - - + + + + + + + - - + + + + - + - + - - + + - + - - - + + + - - - - - - - - - - - - - - - - + - - - + - + - - + + + - - + + + - + + + + + + + + + + + + + + + + - - + + - + - + + + + + + + + + + + + + + + + + - + - + - + - + - + - + @@ -182205,47 +182277,47 @@ - + - + - + - - + + - - + + - + - + - + - + - + @@ -182253,17 +182325,17 @@ - + - + - + @@ -182271,15 +182343,15 @@ - + - + - + - + @@ -182288,101 +182360,101 @@ - + - + - + - - - - - - + + + + + + - - + + - + - - + + - + - + - - + + - - + + - + - + - + - + - - - + + + - - - - + + + + - - + + - - + + - - + + - + @@ -182390,98 +182462,98 @@ - - + + - - + + - - + + - - + + - - + + - + - + - + - - - + + + - - - + + + - + - + - + - + - + - + - - - + + + - - - - - + + + + + - + - + @@ -182492,13 +182564,13 @@ - + - + - + @@ -182509,220 +182581,209 @@ - - - - - + + + + + - + - + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - - + + - - - + + + - - - - - - - - - - - - - + + - + - + - + - - + + - + - + - + @@ -182730,22 +182791,22 @@ - - + + - + - - - + + + - + @@ -182754,27 +182815,27 @@ - + - + - + - + - + - + - + - + @@ -182798,23 +182859,23 @@ - + - + - + - + - + - + @@ -182832,7 +182893,7 @@ - + @@ -182871,30 +182932,30 @@ - + - + - + - + - + - + @@ -182905,21 +182966,21 @@ - + - + - + - + - + - + @@ -182927,7 +182988,7 @@ - + @@ -182938,15 +182999,15 @@ - + - + - + @@ -182954,7 +183015,7 @@ - + @@ -182968,88 +183029,88 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + - - + + - + - + - - + + - + - - - - - - - - - - - - - - - - - - + + + + + + - - + + - - - + + + - + + + + + + + + + + + + + - - + + - - + + - + @@ -183062,95 +183123,95 @@ - + - + - + - + - - - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - - + + @@ -183260,11 +183321,11 @@ - + - + @@ -183285,13 +183346,13 @@ - - - - - + + + + + - + @@ -183299,7 +183360,7 @@ - + @@ -183307,7 +183368,7 @@ - + @@ -183315,54 +183376,54 @@ - + - + - - + + - + - + - + - + - + - + - + @@ -183370,70 +183431,70 @@ - + - + - - - + + + - - + + - - + + - - + + - - + + - + - + - + - - - + + + - - + + - + - - + + - - + + @@ -183530,7 +183591,7 @@ - + @@ -183544,7 +183605,7 @@ - + @@ -183556,7 +183617,7 @@ - + @@ -183568,26 +183629,26 @@ - - + + - + - + - + - + @@ -183598,18 +183659,18 @@ - + - + - + - + - + @@ -183626,19 +183687,19 @@ - + - + - + - + @@ -183646,10 +183707,10 @@ - - - - + + + + @@ -183665,12 +183726,12 @@ - + - + @@ -183693,31 +183754,31 @@ - + - + - - + + - + - + @@ -183725,8 +183786,8 @@ - - + + @@ -183734,7 +183795,7 @@ - + @@ -183750,7 +183811,7 @@ - + @@ -183759,83 +183820,83 @@ - + - + - + - - - - - + + + + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + @@ -183843,47 +183904,47 @@ - + - + - + - - + + - - + + - + - + - + - + @@ -183891,43 +183952,43 @@ - + - + - + - + - + - + - + @@ -183935,7 +183996,7 @@ - + @@ -184042,13 +184103,13 @@ - + - + @@ -184067,7 +184128,7 @@ - + @@ -184112,21 +184173,21 @@ - - + + - - + + - - + + - - + + @@ -184229,9 +184290,9 @@ - + - + @@ -184239,7 +184300,7 @@ - + @@ -184259,17 +184320,17 @@ - + - + - + - - + + @@ -184277,72 +184338,72 @@ - - - - + + + + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + @@ -184393,7 +184454,7 @@ - + @@ -184401,7 +184462,7 @@ - + @@ -184409,45 +184470,45 @@ - + - + - + - + - + - + - + @@ -184456,1016 +184517,15 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -185571,17 +184631,17 @@ - - - + + + - + - + @@ -185592,10 +184652,10 @@ - + - + @@ -185640,7 +184700,7 @@ - + @@ -185667,7 +184727,7 @@ - + @@ -185721,19 +184781,19 @@ - + - + - + @@ -185742,10 +184802,10 @@ - + - + @@ -185766,22 +184826,22 @@ - + - + - + - + @@ -185796,7 +184856,7 @@ - + @@ -185814,83 +184874,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -185899,13 +184959,13 @@ - + - + - + @@ -185914,7 +184974,7 @@ - + @@ -185940,13 +185000,13 @@ - + - + - + @@ -185972,10 +185032,10 @@ - + - + @@ -185990,7 +185050,7 @@ - + @@ -186025,9 +185085,9 @@ - + - + @@ -186084,22 +185144,22 @@ - + - + - + - + - + - + @@ -186108,16 +185168,16 @@ - + - + - + - + @@ -186126,7 +185186,7 @@ - + @@ -186141,7 +185201,7 @@ - + @@ -186153,7 +185213,7 @@ - + @@ -186182,7 +185242,7 @@ - + @@ -186235,7 +185295,7 @@ - + @@ -186363,7 +185423,7 @@ - + @@ -186447,7 +185507,7 @@ - + @@ -186462,7 +185522,7 @@ - + @@ -186482,7 +185542,7 @@ - + @@ -186493,7 +185553,7 @@ - + @@ -186510,7 +185570,7 @@ - + @@ -186536,7 +185596,7 @@ - + @@ -186550,7 +185610,7 @@ - + @@ -186567,9 +185627,9 @@ - + - + @@ -186581,27 +185641,27 @@ - + - + - + - + - + - - + + - + @@ -186612,42 +185672,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -186655,324 +185715,324 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - + + - - - + + + - - + + - - + + - - - + + + - - - + + + - - - + + + - - - + + + - - + + - + - + - + - + - - - + + + - + - + - - + + - - + + @@ -186980,26 +186040,26 @@ - + - + - + - + - + - + @@ -187008,37 +186068,37 @@ - + - + - + - + - + - - + + - + @@ -187046,59 +186106,59 @@ - + - + - + - + - + - + - - + + - + - + - + - + - + @@ -187112,211 +186172,211 @@ - - - - - - - + + + + + + + - + - + - - - + + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + @@ -187325,11 +186385,11 @@ - + - + @@ -187337,34 +186397,34 @@ - + - + - - + + - + - + - + @@ -187384,11 +186444,11 @@ - + - + @@ -187414,19 +186474,19 @@ - + - + - + - + @@ -187474,16 +186534,16 @@ - + - + - + - + @@ -187603,92 +186663,92 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -187697,32 +186757,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -187731,9 +186791,9 @@ - + - + @@ -187741,7 +186801,7 @@ - + @@ -187757,94 +186817,94 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + @@ -187895,24 +186955,24 @@ - + - + - + - + - + @@ -187920,123 +186980,123 @@ - - + + - + - + - + - + - + - - + + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -188045,74 +187105,448 @@ - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -188146,9 +187580,9 @@ - + - + @@ -188163,10 +187597,11 @@ - + - + + @@ -188176,9 +187611,9 @@ - + - + @@ -188193,27 +187628,27 @@ - + - + - + - + - + - + - + - + @@ -188240,10 +187675,10 @@ - + - + @@ -188261,31 +187696,31 @@ - + - + - + - + - + - + - + - + @@ -188305,7 +187740,7 @@ - + @@ -188331,7 +187766,7 @@ - + @@ -188360,18 +187795,18 @@ - + - + - + @@ -188379,19 +187814,19 @@ - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -188401,45 +187836,45 @@ - - - - + + + + - + - + - + - + - - + + - - + + - - + + @@ -188447,69 +187882,69 @@ - + - + - + - + - + - + - + - + - - + + - - - + + + - - - + + + - - - + + + - - + + - + - + - + @@ -188524,88 +187959,72 @@ - + - - + + - + - + - + - + - + - - + + - - + + - + - + - + - - - + + + - - - - - - - - - - - - - - - - @@ -188680,16 +188099,16 @@ - + - + - + @@ -188701,27 +188120,27 @@ - + - + - + - + - + - + @@ -188733,39 +188152,39 @@ - + - + - + - + - + - + - + - + - + @@ -188776,32 +188195,32 @@ - + - - - - - + + + + + - - + + - - - + + + - - - + + + @@ -188809,21 +188228,21 @@ - - + + - + - + - + - + @@ -188841,24 +188260,24 @@ - + - + - + - + - + - + @@ -188879,74 +188298,74 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -188961,13 +188380,13 @@ - + - + @@ -188994,7 +188413,7 @@ - + @@ -189003,13 +188422,13 @@ - + - + @@ -189032,10 +188451,10 @@ - + - + @@ -189055,12 +188474,12 @@ - + - + - + @@ -189072,10 +188491,10 @@ - + - + @@ -189084,7 +188503,7 @@ - + @@ -189105,30 +188524,30 @@ - + - + - + - + - + - + - + - + @@ -189139,46 +188558,46 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -189187,392 +188606,392 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - - + + - - + + - + - - - + + + - - - + + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - - - - + + + + + - - + + - - + + - - - + + + - - - + + + - - + + - + - - - + + + - - + + - - - + + + - - + + - - - + + + - - + + - + - - + + - - - + + + - - + + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - + - - + + - - + + - - - - + + + + - - + + - - - + + + - - + + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + @@ -189580,43 +188999,43 @@ - + - + - + - + - - - + + + - + - + - - + + - - + + @@ -189630,9 +189049,9 @@ - - - + + + @@ -189641,28 +189060,28 @@ - + - + - + - + - + - + - + @@ -189670,12 +189089,12 @@ - + - + @@ -189702,23 +189121,23 @@ - - + + - + - - + + - + @@ -189728,17 +189147,17 @@ - + - + - + - + @@ -189749,327 +189168,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -190081,169 +189179,63 @@ - + - + - + - + - + - + - - - - - + + + + + - + - + - + - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -190427,6 +189419,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -190435,6 +189480,14 @@ + + + + + + + + @@ -190472,14 +189525,6 @@ - - - - - - - - @@ -190572,59 +189617,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -190638,6 +189630,969 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -190657,13 +190612,13 @@ - - + + - + - + @@ -190684,7 +190639,7 @@ - + @@ -190693,10 +190648,10 @@ - + - + @@ -190711,86 +190666,192 @@ - - + + - + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/arch/arm/boot/compressed/libfdt_env.h b/arch/arm/boot/compressed/libfdt_env.h index b36c0289a308..6a0f1f524466 100644 --- a/arch/arm/boot/compressed/libfdt_env.h +++ b/arch/arm/boot/compressed/libfdt_env.h @@ -2,11 +2,13 @@ #ifndef _ARM_LIBFDT_ENV_H #define _ARM_LIBFDT_ENV_H +#include #include #include #include -#define INT_MAX ((int)(~0U>>1)) +#define INT32_MAX S32_MAX +#define UINT32_MAX U32_MAX typedef __be16 fdt16_t; typedef __be32 fdt32_t; diff --git a/arch/arm/mm/dma-mapping-nommu.c b/arch/arm/mm/dma-mapping-nommu.c index cbf1632db30a..e862b053833f 100644 --- a/arch/arm/mm/dma-mapping-nommu.c +++ b/arch/arm/mm/dma-mapping-nommu.c @@ -35,7 +35,7 @@ static void *arm_nommu_dma_alloc(struct device *dev, size_t size, unsigned long attrs) { - void *ret = dma_alloc_from_global_coherent(size, dma_handle); + void *ret = dma_alloc_from_global_coherent(dev, size, dma_handle); /* * dma_alloc_from_global_coherent() may fail because: diff --git a/arch/arm/mm/proc-v7-bugs.c b/arch/arm/mm/proc-v7-bugs.c index 9a07916af8dd..a6554fdb56c5 100644 --- a/arch/arm/mm/proc-v7-bugs.c +++ b/arch/arm/mm/proc-v7-bugs.c @@ -65,6 +65,9 @@ static void cpu_v7_spectre_init(void) break; #ifdef CONFIG_ARM_PSCI + case ARM_CPU_PART_BRAHMA_B53: + /* Requires no workaround */ + break; default: /* Other ARM CPUs require no workaround */ if (read_cpuid_implementor() == ARM_CPU_IMP_ARM) diff --git a/arch/mips/include/asm/barrier.h b/arch/mips/include/asm/barrier.h index fb842965d541..9228f7386220 100644 --- a/arch/mips/include/asm/barrier.h +++ b/arch/mips/include/asm/barrier.h @@ -218,14 +218,13 @@ * ordering will be done by smp_llsc_mb() and friends. */ #if defined(CONFIG_WEAK_REORDERING_BEYOND_LLSC) && defined(CONFIG_SMP) -# define __WEAK_LLSC_MB sync -# define smp_llsc_mb() \ - __asm__ __volatile__(__stringify(__WEAK_LLSC_MB) : : :"memory") -# define __LLSC_CLOBBER +#define __WEAK_LLSC_MB " sync \n" +#define smp_llsc_mb() __asm__ __volatile__(__WEAK_LLSC_MB : : :"memory") +#define __LLSC_CLOBBER #else -# define __WEAK_LLSC_MB -# define smp_llsc_mb() do { } while (0) -# define __LLSC_CLOBBER "memory" +#define __WEAK_LLSC_MB " \n" +#define smp_llsc_mb() do { } while (0) +#define __LLSC_CLOBBER "memory" #endif #ifdef CONFIG_CPU_CAVIUM_OCTEON diff --git a/arch/mips/include/asm/futex.h b/arch/mips/include/asm/futex.h index 110220705e97..b83b0397462d 100644 --- a/arch/mips/include/asm/futex.h +++ b/arch/mips/include/asm/futex.h @@ -16,7 +16,6 @@ #include #include #include -#include #include #define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \ @@ -33,7 +32,7 @@ " .set arch=r4000 \n" \ "2: sc $1, %2 \n" \ " beqzl $1, 1b \n" \ - __stringify(__WEAK_LLSC_MB) " \n" \ + __WEAK_LLSC_MB \ "3: \n" \ " .insn \n" \ " .set pop \n" \ @@ -51,19 +50,19 @@ "i" (-EFAULT) \ : "memory"); \ } else if (cpu_has_llsc) { \ + loongson_llsc_mb(); \ __asm__ __volatile__( \ " .set push \n" \ " .set noat \n" \ " .set push \n" \ " .set "MIPS_ISA_ARCH_LEVEL" \n" \ - " " __SYNC(full, loongson3_war) " \n" \ "1: "user_ll("%1", "%4")" # __futex_atomic_op\n" \ " .set pop \n" \ " " insn " \n" \ " .set "MIPS_ISA_ARCH_LEVEL" \n" \ "2: "user_sc("$1", "%2")" \n" \ " beqz $1, 1b \n" \ - __stringify(__WEAK_LLSC_MB) " \n" \ + __WEAK_LLSC_MB \ "3: \n" \ " .insn \n" \ " .set pop \n" \ @@ -148,7 +147,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, " .set arch=r4000 \n" "2: sc $1, %2 \n" " beqzl $1, 1b \n" - __stringify(__WEAK_LLSC_MB) " \n" + __WEAK_LLSC_MB "3: \n" " .insn \n" " .set pop \n" @@ -165,13 +164,13 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, "i" (-EFAULT) : "memory"); } else if (cpu_has_llsc) { + loongson_llsc_mb(); __asm__ __volatile__( "# futex_atomic_cmpxchg_inatomic \n" " .set push \n" " .set noat \n" " .set push \n" " .set "MIPS_ISA_ARCH_LEVEL" \n" - " " __SYNC(full, loongson3_war) " \n" "1: "user_ll("%1", "%3")" \n" " bne %1, %z4, 3f \n" " .set pop \n" @@ -179,7 +178,8 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, " .set "MIPS_ISA_ARCH_LEVEL" \n" "2: "user_sc("$1", "%2")" \n" " beqz $1, 1b \n" - "3: " __SYNC_ELSE(full, loongson3_war, __WEAK_LLSC_MB) "\n" + __WEAK_LLSC_MB + "3: \n" " .insn \n" " .set pop \n" " .section .fixup,\"ax\" \n" @@ -194,6 +194,7 @@ futex_atomic_cmpxchg_inatomic(u32 *uval, u32 __user *uaddr, : GCC_OFF_SMALL_ASM() (*uaddr), "Jr" (oldval), "Jr" (newval), "i" (-EFAULT) : "memory"); + loongson_llsc_mb(); } else return -ENOSYS; diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile index 83522c9fc7b6..37ac731a556b 100644 --- a/arch/powerpc/Makefile +++ b/arch/powerpc/Makefile @@ -91,11 +91,13 @@ MULTIPLEWORD := -mmultiple endif ifdef CONFIG_PPC64 +ifndef CONFIG_CC_IS_CLANG cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1) cflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mcall-aixdesc) aflags-$(CONFIG_CPU_BIG_ENDIAN) += $(call cc-option,-mabi=elfv1) aflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mabi=elfv2 endif +endif ifndef CONFIG_CC_IS_CLANG cflags-$(CONFIG_CPU_LITTLE_ENDIAN) += -mno-strict-align @@ -141,6 +143,7 @@ endif endif CFLAGS-$(CONFIG_PPC64) := $(call cc-option,-mtraceback=no) +ifndef CONFIG_CC_IS_CLANG ifdef CONFIG_CPU_LITTLE_ENDIAN CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2,$(call cc-option,-mcall-aixdesc)) AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv2) @@ -149,6 +152,7 @@ CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1) CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcall-aixdesc) AFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mabi=elfv1) endif +endif CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mcmodel=medium,$(call cc-option,-mminimal-toc)) CFLAGS-$(CONFIG_PPC64) += $(call cc-option,-mno-pointers-to-nested-functions) diff --git a/arch/powerpc/boot/libfdt_env.h b/arch/powerpc/boot/libfdt_env.h index 2abc8e83b95e..9757d4f6331e 100644 --- a/arch/powerpc/boot/libfdt_env.h +++ b/arch/powerpc/boot/libfdt_env.h @@ -6,6 +6,8 @@ #include #define INT_MAX ((int)(~0U>>1)) +#define UINT32_MAX ((u32)~0U) +#define INT32_MAX ((s32)(UINT32_MAX >> 1)) #include "of.h" diff --git a/arch/powerpc/include/asm/fixmap.h b/arch/powerpc/include/asm/fixmap.h index 0cfc365d814b..722289a1d000 100644 --- a/arch/powerpc/include/asm/fixmap.h +++ b/arch/powerpc/include/asm/fixmap.h @@ -77,7 +77,12 @@ enum fixed_addresses { static inline void __set_fixmap(enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags) { - map_kernel_page(fix_to_virt(idx), phys, flags); + if (__builtin_constant_p(idx)) + BUILD_BUG_ON(idx >= __end_of_fixed_addresses); + else if (WARN_ON(idx >= __end_of_fixed_addresses)) + return; + + map_kernel_page(__fix_to_virt(idx), phys, flags); } #endif /* !__ASSEMBLY__ */ diff --git a/arch/powerpc/include/asm/spinlock.h b/arch/powerpc/include/asm/spinlock.h index cac95a3f30c2..e9a960e28f3c 100644 --- a/arch/powerpc/include/asm/spinlock.h +++ b/arch/powerpc/include/asm/spinlock.h @@ -36,12 +36,10 @@ #endif #ifdef CONFIG_PPC_PSERIES -DECLARE_STATIC_KEY_FALSE(shared_processor); - #define vcpu_is_preempted vcpu_is_preempted static inline bool vcpu_is_preempted(int cpu) { - if (!static_branch_unlikely(&shared_processor)) + if (!firmware_has_feature(FW_FEATURE_SPLPAR)) return false; return !!(be32_to_cpu(lppaca_of(cpu).yield_count) & 1); } diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h index 15002b51ff18..c92fe7fe9692 100644 --- a/arch/powerpc/include/asm/uaccess.h +++ b/arch/powerpc/include/asm/uaccess.h @@ -401,7 +401,7 @@ copy_to_user_mcsafe(void __user *to, const void *from, unsigned long n) return n; } -extern unsigned long __clear_user(void __user *addr, unsigned long size); +unsigned long __arch_clear_user(void __user *addr, unsigned long size); static inline unsigned long clear_user(void __user *addr, unsigned long size) { @@ -409,12 +409,17 @@ static inline unsigned long clear_user(void __user *addr, unsigned long size) might_fault(); if (likely(access_ok(addr, size))) { allow_write_to_user(addr, size); - ret = __clear_user(addr, size); + ret = __arch_clear_user(addr, size); prevent_write_to_user(addr, size); } return ret; } +static inline unsigned long __clear_user(void __user *addr, unsigned long size) +{ + return clear_user(addr, size); +} + extern long strncpy_from_user(char *dst, const char __user *src, long count); extern __must_check long strnlen_user(const char __user *str, long n); diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c index d9279d0ee9f5..c031be8d41ff 100644 --- a/arch/powerpc/kernel/eeh_driver.c +++ b/arch/powerpc/kernel/eeh_driver.c @@ -897,12 +897,12 @@ void eeh_handle_normal_event(struct eeh_pe *pe) /* Log the event */ if (pe->type & EEH_PE_PHB) { - pr_err("EEH: PHB#%x failure detected, location: %s\n", + pr_err("EEH: Recovering PHB#%x, location: %s\n", pe->phb->global_number, eeh_pe_loc_get(pe)); } else { struct eeh_pe *phb_pe = eeh_phb_pe_get(pe->phb); - pr_err("EEH: Frozen PHB#%x-PE#%x detected\n", + pr_err("EEH: Recovering PHB#%x-PE#%x\n", pe->phb->global_number, pe->addr); pr_err("EEH: PE location: %s, PHB location: %s\n", eeh_pe_loc_get(pe), eeh_pe_loc_get(phb_pe)); diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c index bd91dceb7010..d341b464f23c 100644 --- a/arch/powerpc/kernel/security.c +++ b/arch/powerpc/kernel/security.c @@ -142,32 +142,33 @@ ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, cha thread_priv = security_ftr_enabled(SEC_FTR_L1D_THREAD_PRIV); - if (rfi_flush || thread_priv) { + if (rfi_flush) { struct seq_buf s; seq_buf_init(&s, buf, PAGE_SIZE - 1); - seq_buf_printf(&s, "Mitigation: "); - - if (rfi_flush) - seq_buf_printf(&s, "RFI Flush"); - - if (rfi_flush && thread_priv) - seq_buf_printf(&s, ", "); - + seq_buf_printf(&s, "Mitigation: RFI Flush"); if (thread_priv) - seq_buf_printf(&s, "L1D private per thread"); + seq_buf_printf(&s, ", L1D private per thread"); seq_buf_printf(&s, "\n"); return s.len; } + if (thread_priv) + return sprintf(buf, "Vulnerable: L1D private per thread\n"); + if (!security_ftr_enabled(SEC_FTR_L1D_FLUSH_HV) && !security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR)) return sprintf(buf, "Not affected\n"); return sprintf(buf, "Vulnerable\n"); } + +ssize_t cpu_show_l1tf(struct device *dev, struct device_attribute *attr, char *buf) +{ + return cpu_show_meltdown(dev, attr, buf); +} #endif ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf) diff --git a/arch/powerpc/kernel/time.c b/arch/powerpc/kernel/time.c index 619447b1b797..11301a1187f3 100644 --- a/arch/powerpc/kernel/time.c +++ b/arch/powerpc/kernel/time.c @@ -232,7 +232,7 @@ static u64 scan_dispatch_log(u64 stop_tb) * Accumulate stolen time by scanning the dispatch trace log. * Called on entry from user mode. */ -void accumulate_stolen_time(void) +void notrace accumulate_stolen_time(void) { u64 sst, ust; unsigned long save_irq_soft_mask = irq_soft_mask_return(); diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 82f43535e686..014ff0701f24 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -250,15 +250,22 @@ static void oops_end(unsigned long flags, struct pt_regs *regs, } NOKPROBE_SYMBOL(oops_end); +static char *get_mmu_str(void) +{ + if (early_radix_enabled()) + return " MMU=Radix"; + if (early_mmu_has_feature(MMU_FTR_HPTE_TABLE)) + return " MMU=Hash"; + return ""; +} + static int __die(const char *str, struct pt_regs *regs, long err) { printk("Oops: %s, sig: %ld [#%d]\n", str, err, ++die_counter); - printk("%s PAGE_SIZE=%luK%s%s%s%s%s%s%s %s\n", + printk("%s PAGE_SIZE=%luK%s%s%s%s%s%s %s\n", IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN) ? "LE" : "BE", - PAGE_SIZE / 1024, - early_radix_enabled() ? " MMU=Radix" : "", - early_mmu_has_feature(MMU_FTR_HPTE_TABLE) ? " MMU=Hash" : "", + PAGE_SIZE / 1024, get_mmu_str(), IS_ENABLED(CONFIG_PREEMPT) ? " PREEMPT" : "", IS_ENABLED(CONFIG_SMP) ? " SMP" : "", IS_ENABLED(CONFIG_SMP) ? (" NR_CPUS=" __stringify(NR_CPUS)) : "", diff --git a/arch/powerpc/lib/string_32.S b/arch/powerpc/lib/string_32.S index f69a6aab7bfb..1ddb26394e8a 100644 --- a/arch/powerpc/lib/string_32.S +++ b/arch/powerpc/lib/string_32.S @@ -17,7 +17,7 @@ CACHELINE_BYTES = L1_CACHE_BYTES LG_CACHELINE_BYTES = L1_CACHE_SHIFT CACHELINE_MASK = (L1_CACHE_BYTES-1) -_GLOBAL(__clear_user) +_GLOBAL(__arch_clear_user) /* * Use dcbz on the complete cache lines in the destination * to set them to zero. This requires that the destination @@ -87,4 +87,4 @@ _GLOBAL(__clear_user) EX_TABLE(8b, 91b) EX_TABLE(9b, 91b) -EXPORT_SYMBOL(__clear_user) +EXPORT_SYMBOL(__arch_clear_user) diff --git a/arch/powerpc/lib/string_64.S b/arch/powerpc/lib/string_64.S index 507b18b1660e..169872bc0892 100644 --- a/arch/powerpc/lib/string_64.S +++ b/arch/powerpc/lib/string_64.S @@ -17,7 +17,7 @@ PPC64_CACHES: .section ".text" /** - * __clear_user: - Zero a block of memory in user space, with less checking. + * __arch_clear_user: - Zero a block of memory in user space, with less checking. * @to: Destination address, in user space. * @n: Number of bytes to zero. * @@ -58,7 +58,7 @@ err3; stb r0,0(r3) mr r3,r4 blr -_GLOBAL_TOC(__clear_user) +_GLOBAL_TOC(__arch_clear_user) cmpdi r4,32 neg r6,r3 li r0,0 @@ -181,4 +181,4 @@ err1; dcbz 0,r3 cmpdi r4,32 blt .Lshort_clear b .Lmedium_clear -EXPORT_SYMBOL(__clear_user) +EXPORT_SYMBOL(__arch_clear_user) diff --git a/arch/powerpc/mm/book3s64/hash_utils.c b/arch/powerpc/mm/book3s64/hash_utils.c index 6c123760164e..83c51a7d7eee 100644 --- a/arch/powerpc/mm/book3s64/hash_utils.c +++ b/arch/powerpc/mm/book3s64/hash_utils.c @@ -294,10 +294,18 @@ int htab_bolt_mapping(unsigned long vstart, unsigned long vend, ret = mmu_hash_ops.hpte_insert(hpteg, vpn, paddr, tprot, HPTE_V_BOLTED, psize, psize, ssize); - + if (ret == -1) { + /* Try to remove a non bolted entry */ + ret = mmu_hash_ops.hpte_remove(hpteg); + if (ret != -1) + ret = mmu_hash_ops.hpte_insert(hpteg, vpn, paddr, tprot, + HPTE_V_BOLTED, psize, psize, + ssize); + } if (ret < 0) break; + cond_resched(); #ifdef CONFIG_DEBUG_PAGEALLOC if (debug_pagealloc_enabled() && (paddr >> PAGE_SHIFT) < linear_map_hash_count) diff --git a/arch/powerpc/platforms/pseries/cmm.c b/arch/powerpc/platforms/pseries/cmm.c index b33251d75927..572651a5c87b 100644 --- a/arch/powerpc/platforms/pseries/cmm.c +++ b/arch/powerpc/platforms/pseries/cmm.c @@ -411,6 +411,10 @@ static struct bus_type cmm_subsys = { .dev_name = "cmm", }; +static void cmm_release_device(struct device *dev) +{ +} + /** * cmm_sysfs_register - Register with sysfs * @@ -426,6 +430,7 @@ static int cmm_sysfs_register(struct device *dev) dev->id = 0; dev->bus = &cmm_subsys; + dev->release = cmm_release_device; if ((rc = device_register(dev))) goto subsys_unregister; diff --git a/arch/powerpc/platforms/pseries/papr_scm.c b/arch/powerpc/platforms/pseries/papr_scm.c index 61883291defc..ee07d0718bf1 100644 --- a/arch/powerpc/platforms/pseries/papr_scm.c +++ b/arch/powerpc/platforms/pseries/papr_scm.c @@ -152,7 +152,7 @@ static int papr_scm_meta_get(struct papr_scm_priv *p, int len, read; int64_t ret; - if ((hdr->in_offset + hdr->in_length) >= p->metadata_size) + if ((hdr->in_offset + hdr->in_length) > p->metadata_size) return -EINVAL; for (len = hdr->in_length; len; len -= read) { @@ -206,7 +206,7 @@ static int papr_scm_meta_set(struct papr_scm_priv *p, __be64 data_be; int64_t ret; - if ((hdr->in_offset + hdr->in_length) >= p->metadata_size) + if ((hdr->in_offset + hdr->in_length) > p->metadata_size) return -EINVAL; for (len = hdr->in_length; len; len -= wrote) { diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c index 0c8421dd01ab..0a40201f315f 100644 --- a/arch/powerpc/platforms/pseries/setup.c +++ b/arch/powerpc/platforms/pseries/setup.c @@ -74,9 +74,6 @@ #include "pseries.h" #include "../../../../drivers/pci/pci.h" -DEFINE_STATIC_KEY_FALSE(shared_processor); -EXPORT_SYMBOL_GPL(shared_processor); - int CMO_PrPSP = -1; int CMO_SecPSP = -1; unsigned long CMO_PageSize = (ASM_CONST(1) << IOMMU_PAGE_SHIFT_4K); @@ -761,10 +758,6 @@ static void __init pSeries_setup_arch(void) if (firmware_has_feature(FW_FEATURE_LPAR)) { vpa_init(boot_cpuid); - - if (lppaca_shared_proc(get_lppaca())) - static_branch_enable(&shared_processor); - ppc_md.power_save = pseries_lpar_idle; ppc_md.enable_pmcs = pseries_lpar_enable_pmcs; #ifdef CONFIG_PCI_IOV diff --git a/arch/powerpc/tools/relocs_check.sh b/arch/powerpc/tools/relocs_check.sh index 2b4e959caa36..7b9fe0a567cf 100755 --- a/arch/powerpc/tools/relocs_check.sh +++ b/arch/powerpc/tools/relocs_check.sh @@ -20,7 +20,7 @@ objdump="$1" vmlinux="$2" bad_relocs=$( -"$objdump" -R "$vmlinux" | +$objdump -R "$vmlinux" | # Only look at relocation lines. grep -E '\:' | awk '{print $1}' ) BRANCHES=$( -"$objdump" -R "$vmlinux" -D --start-address=0xc000000000000000 \ +$objdump -R "$vmlinux" -D --start-address=0xc000000000000000 \ --stop-address=${end_intr} | grep -e "^c[0-9a-f]*:[[:space:]]*\([0-9a-f][0-9a-f][[:space:]]\)\{4\}[[:space:]]*b" | grep -v '\<__start_initialization_multiplatform>' | diff --git a/arch/s390/kernel/machine_kexec.c b/arch/s390/kernel/machine_kexec.c index d402ced7f7c3..cb8b1cc285c9 100644 --- a/arch/s390/kernel/machine_kexec.c +++ b/arch/s390/kernel/machine_kexec.c @@ -164,7 +164,9 @@ static bool kdump_csum_valid(struct kimage *image) #ifdef CONFIG_CRASH_DUMP int rc; + preempt_disable(); rc = CALL_ON_STACK(do_start_kdump, S390_lowcore.nodat_stack, 1, image); + preempt_enable(); return rc == 0; #else return false; diff --git a/arch/s390/kernel/perf_cpum_sf.c b/arch/s390/kernel/perf_cpum_sf.c index 3d8b12a9a6ff..7511b71d2931 100644 --- a/arch/s390/kernel/perf_cpum_sf.c +++ b/arch/s390/kernel/perf_cpum_sf.c @@ -193,7 +193,7 @@ static int realloc_sampling_buffer(struct sf_buffer *sfb, unsigned long num_sdb, gfp_t gfp_flags) { int i, rc; - unsigned long *new, *tail; + unsigned long *new, *tail, *tail_prev = NULL; if (!sfb->sdbt || !sfb->tail) return -EINVAL; @@ -232,6 +232,7 @@ static int realloc_sampling_buffer(struct sf_buffer *sfb, sfb->num_sdbt++; /* Link current page to tail of chain */ *tail = (unsigned long)(void *) new + 1; + tail_prev = tail; tail = new; } @@ -241,10 +242,22 @@ static int realloc_sampling_buffer(struct sf_buffer *sfb, * issue, a new realloc call (if required) might succeed. */ rc = alloc_sample_data_block(tail, gfp_flags); - if (rc) + if (rc) { + /* Undo last SDBT. An SDBT with no SDB at its first + * entry but with an SDBT entry instead can not be + * handled by the interrupt handler code. + * Avoid this situation. + */ + if (tail_prev) { + sfb->num_sdbt--; + free_page((unsigned long) new); + tail = tail_prev; + } break; + } sfb->num_sdb++; tail++; + tail_prev = new = NULL; /* Allocated at least one SBD */ } /* Link sampling buffer to its origin */ diff --git a/arch/s390/kernel/unwind_bc.c b/arch/s390/kernel/unwind_bc.c index a8204f952315..6e609b13c0ce 100644 --- a/arch/s390/kernel/unwind_bc.c +++ b/arch/s390/kernel/unwind_bc.c @@ -60,6 +60,11 @@ bool unwind_next_frame(struct unwind_state *state) ip = READ_ONCE_NOCHECK(sf->gprs[8]); reliable = false; regs = NULL; + if (!__kernel_text_address(ip)) { + /* skip bogus %r14 */ + state->regs = NULL; + return unwind_next_frame(state); + } } else { sf = (struct stack_frame *) state->sp; sp = READ_ONCE_NOCHECK(sf->back_chain); diff --git a/arch/s390/mm/maccess.c b/arch/s390/mm/maccess.c index 59ad7997fed1..de7ca4b6718f 100644 --- a/arch/s390/mm/maccess.c +++ b/arch/s390/mm/maccess.c @@ -119,9 +119,15 @@ static unsigned long __no_sanitize_address _memcpy_real(unsigned long dest, */ int memcpy_real(void *dest, void *src, size_t count) { - if (S390_lowcore.nodat_stack != 0) - return CALL_ON_STACK(_memcpy_real, S390_lowcore.nodat_stack, - 3, dest, src, count); + int rc; + + if (S390_lowcore.nodat_stack != 0) { + preempt_disable(); + rc = CALL_ON_STACK(_memcpy_real, S390_lowcore.nodat_stack, 3, + dest, src, count); + preempt_enable(); + return rc; + } /* * This is a really early memcpy_real call, the stacks are * not set up yet. Just call _memcpy_real on the early boot diff --git a/arch/um/drivers/virtio_uml.c b/arch/um/drivers/virtio_uml.c index fc8c52cff5aa..c5643a59a8c7 100644 --- a/arch/um/drivers/virtio_uml.c +++ b/arch/um/drivers/virtio_uml.c @@ -83,7 +83,7 @@ static int full_sendmsg_fds(int fd, const void *buf, unsigned int len, return 0; } -static int full_read(int fd, void *buf, int len) +static int full_read(int fd, void *buf, int len, bool abortable) { int rc; @@ -93,7 +93,7 @@ static int full_read(int fd, void *buf, int len) buf += rc; len -= rc; } - } while (len && (rc > 0 || rc == -EINTR)); + } while (len && (rc > 0 || rc == -EINTR || (!abortable && rc == -EAGAIN))); if (rc < 0) return rc; @@ -104,7 +104,7 @@ static int full_read(int fd, void *buf, int len) static int vhost_user_recv_header(int fd, struct vhost_user_msg *msg) { - return full_read(fd, msg, sizeof(msg->header)); + return full_read(fd, msg, sizeof(msg->header), true); } static int vhost_user_recv(int fd, struct vhost_user_msg *msg, @@ -118,7 +118,7 @@ static int vhost_user_recv(int fd, struct vhost_user_msg *msg, size = msg->header.size; if (size > max_payload_size) return -EPROTO; - return full_read(fd, &msg->payload, size); + return full_read(fd, &msg->payload, size, false); } static int vhost_user_recv_resp(struct virtio_uml_device *vu_dev, diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c index ac42ae4651ce..eebdcbef0578 100644 --- a/drivers/cdrom/cdrom.c +++ b/drivers/cdrom/cdrom.c @@ -996,6 +996,12 @@ static void cdrom_count_tracks(struct cdrom_device_info *cdi, tracktype *tracks) tracks->xa = 0; tracks->error = 0; cd_dbg(CD_COUNT_TRACKS, "entering cdrom_count_tracks\n"); + + if (!CDROM_CAN(CDC_PLAY_AUDIO)) { + tracks->error = CDS_NO_INFO; + return; + } + /* Grab the TOC header so we can see how many tracks there are */ ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCHDR, &header); if (ret) { @@ -1162,7 +1168,8 @@ int cdrom_open(struct cdrom_device_info *cdi, struct block_device *bdev, ret = open_for_data(cdi); if (ret) goto err; - cdrom_mmc3_profile(cdi); + if (CDROM_CAN(CDC_GENERIC_PACKET)) + cdrom_mmc3_profile(cdi); if (mode & FMODE_WRITE) { ret = -EROFS; if (cdrom_open_write(cdi)) @@ -2882,6 +2889,9 @@ int cdrom_get_last_written(struct cdrom_device_info *cdi, long *last_written) it doesn't give enough information or fails. then we return the toc contents. */ use_toc: + if (!CDROM_CAN(CDC_PLAY_AUDIO)) + return -ENOSYS; + toc.cdte_format = CDROM_MSF; toc.cdte_track = CDROM_LEADOUT; if ((ret = cdi->ops->audio_ioctl(cdi, CDROMREADTOCENTRY, &toc))) diff --git a/drivers/clk/clk-gpio.c b/drivers/clk/clk-gpio.c index 8147c66ad9ad..b9a4bf951324 100644 --- a/drivers/clk/clk-gpio.c +++ b/drivers/clk/clk-gpio.c @@ -280,7 +280,7 @@ static int gpio_clk_driver_probe(struct platform_device *pdev) else clk = clk_register_gpio_gate(&pdev->dev, node->name, parent_names ? parent_names[0] : NULL, gpiod, - 0); + CLK_SET_RATE_PARENT); if (IS_ERR(clk)) return PTR_ERR(clk); diff --git a/drivers/clk/pxa/clk-pxa27x.c b/drivers/clk/pxa/clk-pxa27x.c index 287fdeae7c7c..7b123105b5de 100644 --- a/drivers/clk/pxa/clk-pxa27x.c +++ b/drivers/clk/pxa/clk-pxa27x.c @@ -459,6 +459,7 @@ struct dummy_clk { }; static struct dummy_clk dummy_clks[] __initdata = { DUMMY_CLK(NULL, "pxa27x-gpio", "osc_32_768khz"), + DUMMY_CLK(NULL, "pxa-rtc", "osc_32_768khz"), DUMMY_CLK(NULL, "sa1100-rtc", "osc_32_768khz"), DUMMY_CLK("UARTCLK", "pxa2xx-ir", "STUART"), }; diff --git a/drivers/clk/qcom/clk-rcg2.c b/drivers/clk/qcom/clk-rcg2.c index 2e42e627af4a..a5d1ff2acd00 100644 --- a/drivers/clk/qcom/clk-rcg2.c +++ b/drivers/clk/qcom/clk-rcg2.c @@ -343,6 +343,8 @@ static int _freq_tbl_determine_rate(struct clk_hw *hw, const struct freq_tbl *f, if (clk_flags & CLK_SET_RATE_PARENT) { rate = f->freq; if (f->pre_div) { + if (!rate) + rate = req->rate; rate /= 2; rate *= f->pre_div + 1; } diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c index fef5e8157061..930fa4a4c52a 100644 --- a/drivers/clk/qcom/clk-smd-rpm.c +++ b/drivers/clk/qcom/clk-smd-rpm.c @@ -648,6 +648,7 @@ static const struct rpm_smd_clk_desc rpm_clk_qcs404 = { }; /* msm8998 */ +DEFINE_CLK_SMD_RPM(msm8998, pcnoc_clk, pcnoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 0); DEFINE_CLK_SMD_RPM(msm8998, snoc_clk, snoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 1); DEFINE_CLK_SMD_RPM(msm8998, cnoc_clk, cnoc_a_clk, QCOM_SMD_RPM_BUS_CLK, 2); DEFINE_CLK_SMD_RPM(msm8998, ce1_clk, ce1_a_clk, QCOM_SMD_RPM_CE_CLK, 0); @@ -670,6 +671,8 @@ DEFINE_CLK_SMD_RPM_XO_BUFFER_PINCTRL(msm8998, rf_clk2_pin, rf_clk2_a_pin, 5); DEFINE_CLK_SMD_RPM_XO_BUFFER(msm8998, rf_clk3, rf_clk3_a, 6); DEFINE_CLK_SMD_RPM_XO_BUFFER_PINCTRL(msm8998, rf_clk3_pin, rf_clk3_a_pin, 6); static struct clk_smd_rpm *msm8998_clks[] = { + [RPM_SMD_PCNOC_CLK] = &msm8998_pcnoc_clk, + [RPM_SMD_PCNOC_A_CLK] = &msm8998_pcnoc_a_clk, [RPM_SMD_SNOC_CLK] = &msm8998_snoc_clk, [RPM_SMD_SNOC_A_CLK] = &msm8998_snoc_a_clk, [RPM_SMD_CNOC_CLK] = &msm8998_cnoc_clk, diff --git a/drivers/clk/qcom/common.c b/drivers/clk/qcom/common.c index b57bf6561558..b299fed00907 100644 --- a/drivers/clk/qcom/common.c +++ b/drivers/clk/qcom/common.c @@ -32,6 +32,9 @@ struct freq_tbl *qcom_find_freq(const struct freq_tbl *f, unsigned long rate) if (!f) return NULL; + if (!f->freq) + return f; + for (; f->freq; f++) if (rate <= f->freq) return f; diff --git a/drivers/clocksource/asm9260_timer.c b/drivers/clocksource/asm9260_timer.c index 9f09a59161e7..5b39d3701fa3 100644 --- a/drivers/clocksource/asm9260_timer.c +++ b/drivers/clocksource/asm9260_timer.c @@ -194,6 +194,10 @@ static int __init asm9260_timer_init(struct device_node *np) } clk = of_clk_get(np, 0); + if (IS_ERR(clk)) { + pr_err("Failed to get clk!\n"); + return PTR_ERR(clk); + } ret = clk_prepare_enable(clk); if (ret) { diff --git a/drivers/clocksource/timer-of.c b/drivers/clocksource/timer-of.c index 11ff701ff4bb..a3c73e972fce 100644 --- a/drivers/clocksource/timer-of.c +++ b/drivers/clocksource/timer-of.c @@ -192,7 +192,7 @@ int __init timer_of_init(struct device_node *np, struct timer_of *to) } if (!to->clkevt.name) - to->clkevt.name = np->name; + to->clkevt.name = np->full_name; to->np = np; diff --git a/drivers/dma/fsl-qdma.c b/drivers/dma/fsl-qdma.c index 06664fbd2d91..89792083d62c 100644 --- a/drivers/dma/fsl-qdma.c +++ b/drivers/dma/fsl-qdma.c @@ -1155,6 +1155,9 @@ static int fsl_qdma_probe(struct platform_device *pdev) return ret; fsl_qdma->irq_base = platform_get_irq_byname(pdev, "qdma-queue0"); + if (fsl_qdma->irq_base < 0) + return fsl_qdma->irq_base; + fsl_qdma->feature = of_property_read_bool(np, "big-endian"); INIT_LIST_HEAD(&fsl_qdma->dma_dev.channels); diff --git a/drivers/dma/xilinx/xilinx_dma.c b/drivers/dma/xilinx/xilinx_dma.c index 5d56f1e4d332..43acba2a1c0e 100644 --- a/drivers/dma/xilinx/xilinx_dma.c +++ b/drivers/dma/xilinx/xilinx_dma.c @@ -1433,6 +1433,7 @@ static int xilinx_dma_reset(struct xilinx_dma_chan *chan) chan->err = false; chan->idle = true; + chan->desc_pendingcount = 0; chan->desc_submitcount = 0; return err; diff --git a/drivers/gpio/gpio-lynxpoint.c b/drivers/gpio/gpio-lynxpoint.c index e9e47c0d5be7..490ce7bae25e 100644 --- a/drivers/gpio/gpio-lynxpoint.c +++ b/drivers/gpio/gpio-lynxpoint.c @@ -164,6 +164,12 @@ static int lp_irq_type(struct irq_data *d, unsigned type) value |= TRIG_SEL_BIT | INT_INV_BIT; outl(value, reg); + + if (type & IRQ_TYPE_EDGE_BOTH) + irq_set_handler_locked(d, handle_edge_irq); + else if (type & IRQ_TYPE_LEVEL_MASK) + irq_set_handler_locked(d, handle_level_irq); + spin_unlock_irqrestore(&lg->lock, flags); return 0; diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c index 16a47de29c94..a031cbcdf6ef 100644 --- a/drivers/gpio/gpio-mpc8xxx.c +++ b/drivers/gpio/gpio-mpc8xxx.c @@ -377,7 +377,8 @@ static int mpc8xxx_probe(struct platform_device *pdev) * It's assumed that only a single type of gpio controller is available * on the current machine, so overwriting global data is fine. */ - mpc8xxx_irq_chip.irq_set_type = devtype->irq_set_type; + if (devtype->irq_set_type) + mpc8xxx_irq_chip.irq_set_type = devtype->irq_set_type; if (devtype->gpio_dir_out) gc->direction_output = devtype->gpio_dir_out; @@ -386,6 +387,9 @@ static int mpc8xxx_probe(struct platform_device *pdev) gc->to_irq = mpc8xxx_gpio_to_irq; + if (of_device_is_compatible(np, "fsl,qoriq-gpio")) + gc->write_reg(mpc8xxx_gc->regs + GPIO_IBE, 0xffffffff); + ret = gpiochip_add_data(gc, mpc8xxx_gc); if (ret) { pr_err("%pOF: GPIO chip registration failed with status %d\n", diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c index 7907a8755866..c77d474185f3 100644 --- a/drivers/gpio/gpio-mxc.c +++ b/drivers/gpio/gpio-mxc.c @@ -411,6 +411,7 @@ static int mxc_gpio_probe(struct platform_device *pdev) { struct device_node *np = pdev->dev.of_node; struct mxc_gpio_port *port; + int irq_count; int irq_base; int err; @@ -426,9 +427,15 @@ static int mxc_gpio_probe(struct platform_device *pdev) if (IS_ERR(port->base)) return PTR_ERR(port->base); - port->irq_high = platform_get_irq(pdev, 1); - if (port->irq_high < 0) - port->irq_high = 0; + irq_count = platform_irq_count(pdev); + if (irq_count < 0) + return irq_count; + + if (irq_count > 1) { + port->irq_high = platform_get_irq(pdev, 1); + if (port->irq_high < 0) + port->irq_high = 0; + } port->irq = platform_get_irq(pdev, 0); if (port->irq < 0) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index dff41d0a85fe..c0e41f1f0c23 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -788,7 +789,7 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) struct hmm_mirror *mirror = bo->mn ? &bo->mn->mirror : NULL; struct ttm_tt *ttm = bo->tbo.ttm; struct amdgpu_ttm_tt *gtt = (void *)ttm; - struct mm_struct *mm = gtt->usertask->mm; + struct mm_struct *mm; unsigned long start = gtt->userptr; struct vm_area_struct *vma; struct hmm_range *range; @@ -796,25 +797,14 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) uint64_t *pfns; int r = 0; - if (!mm) /* Happens during process shutdown */ - return -ESRCH; - if (unlikely(!mirror)) { DRM_DEBUG_DRIVER("Failed to get hmm_mirror\n"); - r = -EFAULT; - goto out; + return -EFAULT; } - vma = find_vma(mm, start); - if (unlikely(!vma || start < vma->vm_start)) { - r = -EFAULT; - goto out; - } - if (unlikely((gtt->userflags & AMDGPU_GEM_USERPTR_ANONONLY) && - vma->vm_file)) { - r = -EPERM; - goto out; - } + mm = mirror->hmm->mmu_notifier.mm; + if (!mmget_not_zero(mm)) /* Happens during process shutdown */ + return -ESRCH; range = kzalloc(sizeof(*range), GFP_KERNEL); if (unlikely(!range)) { @@ -847,6 +837,17 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) hmm_range_wait_until_valid(range, HMM_RANGE_DEFAULT_TIMEOUT); down_read(&mm->mmap_sem); + vma = find_vma(mm, start); + if (unlikely(!vma || start < vma->vm_start)) { + r = -EFAULT; + goto out_unlock; + } + if (unlikely((gtt->userflags & AMDGPU_GEM_USERPTR_ANONONLY) && + vma->vm_file)) { + r = -EPERM; + goto out_unlock; + } + r = hmm_range_fault(range, 0); up_read(&mm->mmap_sem); @@ -865,15 +866,19 @@ int amdgpu_ttm_tt_get_user_pages(struct amdgpu_bo *bo, struct page **pages) } gtt->range = range; + mmput(mm); return 0; +out_unlock: + up_read(&mm->mmap_sem); out_free_pfns: hmm_range_unregister(range); kvfree(pfns); out_free_ranges: kfree(range); out: + mmput(mm); return r; } diff --git a/drivers/gpu/drm/drm_property.c b/drivers/gpu/drm/drm_property.c index 29dd4a93838b..b363578f576d 100644 --- a/drivers/gpu/drm/drm_property.c +++ b/drivers/gpu/drm/drm_property.c @@ -564,8 +564,7 @@ drm_property_create_blob(struct drm_device *dev, size_t length, struct drm_property_blob *blob; int ret; - if (!length || length > MAX_BLOB_PROP_SIZE - - sizeof(struct drm_property_blob)) + if (!length || length > INT_MAX - sizeof(struct drm_property_blob)) return ERR_PTR(-EINVAL); blob = kvzalloc(sizeof(struct drm_property_blob)+length, GFP_KERNEL); diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 2fa3587d974f..e0b241bd3070 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -781,6 +781,10 @@ static void hid_scan_feature_usage(struct hid_parser *parser, u32 usage) if (usage == 0xff0000c5 && parser->global.report_count == 256 && parser->global.report_size == 8) parser->scan_flags |= HID_SCAN_FLAG_MT_WIN_8; + + if (usage == 0xff0000c6 && parser->global.report_count == 1 && + parser->global.report_size == 8) + parser->scan_flags |= HID_SCAN_FLAG_MT_WIN_8; } static void hid_scan_collection(struct hid_parser *parser, unsigned type) diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index b7b883b6ddcc..41e6b5d9e62b 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -573,6 +573,7 @@ #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A 0x094a #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941 0x0941 #define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641 0x0641 +#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_1f4a 0x1f4a #define USB_VENDOR_ID_HUION 0x256c #define USB_DEVICE_ID_HUION_TABLET 0x006e @@ -959,6 +960,7 @@ #define I2C_VENDOR_ID_RAYDIUM 0x2386 #define I2C_PRODUCT_ID_RAYDIUM_4B33 0x4b33 +#define I2C_PRODUCT_ID_RAYDIUM_3118 0x3118 #define USB_VENDOR_ID_RAZER 0x1532 #define USB_DEVICE_ID_RAZER_BLADE_14 0x011D diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c index 8e91e2f06cb4..cd9193078525 100644 --- a/drivers/hid/hid-logitech-hidpp.c +++ b/drivers/hid/hid-logitech-hidpp.c @@ -1102,6 +1102,9 @@ static int hidpp20_batterylevel_get_battery_capacity(struct hidpp_device *hidpp, ret = hidpp_send_fap_command_sync(hidpp, feature_index, CMD_BATTERY_LEVEL_STATUS_GET_BATTERY_LEVEL_STATUS, NULL, 0, &response); + /* Ignore these intermittent errors */ + if (ret == HIDPP_ERROR_RESOURCE_ERROR) + return -EIO; if (ret > 0) { hid_err(hidpp->hid_dev, "%s: received protocol error 0x%02x\n", __func__, ret); diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c index d835e44dfefe..a8ed4fc040d8 100644 --- a/drivers/hid/hid-quirks.c +++ b/drivers/hid/hid-quirks.c @@ -94,6 +94,7 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_094A), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0941), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_0641), HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE_1f4a), HID_QUIRK_ALWAYS_POLL }, { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATARI), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X), HID_QUIRK_MULTI_INPUT }, diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c index 7c6abd7e0979..9ce22acdfaca 100644 --- a/drivers/hid/hid-rmi.c +++ b/drivers/hid/hid-rmi.c @@ -744,7 +744,8 @@ static void rmi_remove(struct hid_device *hdev) { struct rmi_data *hdata = hid_get_drvdata(hdev); - if (hdata->device_flags & RMI_DEVICE) { + if ((hdata->device_flags & RMI_DEVICE) + && test_bit(RMI_STARTED, &hdata->flags)) { clear_bit(RMI_STARTED, &hdata->flags); cancel_work_sync(&hdata->reset_work); rmi_unregister_transport_device(&hdata->xport); diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c index 04c088131e04..7608ee053114 100644 --- a/drivers/hid/i2c-hid/i2c-hid-core.c +++ b/drivers/hid/i2c-hid/i2c-hid-core.c @@ -170,6 +170,8 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV }, { I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288, I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, + { I2C_VENDOR_ID_RAYDIUM, I2C_PRODUCT_ID_RAYDIUM_3118, + I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, { USB_VENDOR_ID_ELAN, HID_ANY_ID, I2C_HID_QUIRK_BOGUS_IRQ }, { 0, 0 } diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 53a60c81e220..05ead1735c6e 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2308,7 +2308,7 @@ static void hv_crash_handler(struct pt_regs *regs) vmbus_connection.conn_state = DISCONNECTED; cpu = smp_processor_id(); hv_stimer_cleanup(cpu); - hv_synic_cleanup(cpu); + hv_synic_disable_regs(cpu); hyperv_cleanup(); }; diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c index b24e7b937f21..84cfed17ff4f 100644 --- a/drivers/i2c/busses/i2c-stm32f7.c +++ b/drivers/i2c/busses/i2c-stm32f7.c @@ -1985,6 +1985,11 @@ pm_disable: pm_runtime_set_suspended(i2c_dev->dev); pm_runtime_dont_use_autosuspend(i2c_dev->dev); + if (i2c_dev->dma) { + stm32_i2c_dma_free(i2c_dev->dma); + i2c_dev->dma = NULL; + } + clk_free: clk_disable_unprepare(i2c_dev->clk); @@ -1995,21 +2000,21 @@ static int stm32f7_i2c_remove(struct platform_device *pdev) { struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev); - if (i2c_dev->dma) { - stm32_i2c_dma_free(i2c_dev->dma); - i2c_dev->dma = NULL; - } - i2c_del_adapter(&i2c_dev->adap); pm_runtime_get_sync(i2c_dev->dev); - clk_disable_unprepare(i2c_dev->clk); - pm_runtime_put_noidle(i2c_dev->dev); pm_runtime_disable(i2c_dev->dev); pm_runtime_set_suspended(i2c_dev->dev); pm_runtime_dont_use_autosuspend(i2c_dev->dev); + if (i2c_dev->dma) { + stm32_i2c_dma_free(i2c_dev->dma); + i2c_dev->dma = NULL; + } + + clk_disable_unprepare(i2c_dev->clk); + return 0; } diff --git a/drivers/input/touchscreen/atmel_mxt_ts.c b/drivers/input/touchscreen/atmel_mxt_ts.c index 24c4b691b1c9..ae60442efda0 100644 --- a/drivers/input/touchscreen/atmel_mxt_ts.c +++ b/drivers/input/touchscreen/atmel_mxt_ts.c @@ -3156,6 +3156,8 @@ static int __maybe_unused mxt_suspend(struct device *dev) mutex_unlock(&input_dev->mutex); + disable_irq(data->irq); + return 0; } @@ -3168,6 +3170,8 @@ static int __maybe_unused mxt_resume(struct device *dev) if (!input_dev) return 0; + enable_irq(data->irq); + mutex_lock(&input_dev->mutex); if (input_dev->users) diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c index e9006407c9bc..f4ebdab06280 100644 --- a/drivers/input/touchscreen/ili210x.c +++ b/drivers/input/touchscreen/ili210x.c @@ -334,7 +334,12 @@ static int ili210x_i2c_probe(struct i2c_client *client, input_set_abs_params(input, ABS_MT_POSITION_X, 0, 0xffff, 0, 0); input_set_abs_params(input, ABS_MT_POSITION_Y, 0, 0xffff, 0, 0); touchscreen_parse_properties(input, true, &priv->prop); - input_mt_init_slots(input, priv->max_touches, INPUT_MT_DIRECT); + + error = input_mt_init_slots(input, priv->max_touches, INPUT_MT_DIRECT); + if (error) { + dev_err(dev, "Unable to set up slots, err: %d\n", error); + return error; + } error = devm_add_action(dev, ili210x_cancel_work, priv); if (error) diff --git a/drivers/input/touchscreen/st1232.c b/drivers/input/touchscreen/st1232.c index 1139714e72e2..1c5f8875cb79 100644 --- a/drivers/input/touchscreen/st1232.c +++ b/drivers/input/touchscreen/st1232.c @@ -149,6 +149,11 @@ static void st1232_ts_power(struct st1232_ts_data *ts, bool poweron) gpiod_set_value_cansleep(ts->reset_gpio, !poweron); } +static void st1232_ts_power_off(void *data) +{ + st1232_ts_power(data, false); +} + static const struct st_chip_info st1232_chip_info = { .have_z = true, .max_x = 0x31f, /* 800 - 1 */ @@ -229,6 +234,13 @@ static int st1232_ts_probe(struct i2c_client *client, st1232_ts_power(ts, true); + error = devm_add_action_or_reset(&client->dev, st1232_ts_power_off, ts); + if (error) { + dev_err(&client->dev, + "Failed to install power off action: %d\n", error); + return error; + } + input_dev->name = "st1232-touchscreen"; input_dev->id.bustype = BUS_I2C; input_dev->dev.parent = &client->dev; @@ -271,15 +283,6 @@ static int st1232_ts_probe(struct i2c_client *client, return 0; } -static int st1232_ts_remove(struct i2c_client *client) -{ - struct st1232_ts_data *ts = i2c_get_clientdata(client); - - st1232_ts_power(ts, false); - - return 0; -} - static int __maybe_unused st1232_ts_suspend(struct device *dev) { struct i2c_client *client = to_i2c_client(dev); @@ -329,7 +332,6 @@ MODULE_DEVICE_TABLE(of, st1232_ts_dt_ids); static struct i2c_driver st1232_ts_driver = { .probe = st1232_ts_probe, - .remove = st1232_ts_remove, .id_table = st1232_ts_id, .driver = { .name = ST1232_TS_NAME, diff --git a/drivers/iommu/arm-smmu-v3.c b/drivers/iommu/arm-smmu-v3.c index 7669beafc493..0382a523c4c5 100644 --- a/drivers/iommu/arm-smmu-v3.c +++ b/drivers/iommu/arm-smmu-v3.c @@ -3644,19 +3644,19 @@ static int arm_smmu_device_probe(struct platform_device *pdev) /* Interrupt lines */ - irq = platform_get_irq_byname(pdev, "combined"); + irq = platform_get_irq_byname_optional(pdev, "combined"); if (irq > 0) smmu->combined_irq = irq; else { - irq = platform_get_irq_byname(pdev, "eventq"); + irq = platform_get_irq_byname_optional(pdev, "eventq"); if (irq > 0) smmu->evtq.q.irq = irq; - irq = platform_get_irq_byname(pdev, "priq"); + irq = platform_get_irq_byname_optional(pdev, "priq"); if (irq > 0) smmu->priq.q.irq = irq; - irq = platform_get_irq_byname(pdev, "gerror"); + irq = platform_get_irq_byname_optional(pdev, "gerror"); if (irq > 0) smmu->gerr_irq = irq; } diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c index 4dcbf68dfda4..0df091934361 100644 --- a/drivers/iommu/rockchip-iommu.c +++ b/drivers/iommu/rockchip-iommu.c @@ -980,13 +980,13 @@ static struct iommu_domain *rk_iommu_domain_alloc(unsigned type) if (!dma_dev) return NULL; - rk_domain = devm_kzalloc(dma_dev, sizeof(*rk_domain), GFP_KERNEL); + rk_domain = kzalloc(sizeof(*rk_domain), GFP_KERNEL); if (!rk_domain) return NULL; if (type == IOMMU_DOMAIN_DMA && iommu_get_dma_cookie(&rk_domain->domain)) - return NULL; + goto err_free_domain; /* * rk32xx iommus use a 2 level pagetable. @@ -1021,6 +1021,8 @@ err_free_dt: err_put_cookie: if (type == IOMMU_DOMAIN_DMA) iommu_put_dma_cookie(&rk_domain->domain); +err_free_domain: + kfree(rk_domain); return NULL; } @@ -1049,6 +1051,7 @@ static void rk_iommu_domain_free(struct iommu_domain *domain) if (domain->type == IOMMU_DOMAIN_DMA) iommu_put_dma_cookie(&rk_domain->domain); + kfree(rk_domain); } static int rk_iommu_add_device(struct device *dev) diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c index 7293fc3f796d..dd486233e282 100644 --- a/drivers/iommu/tegra-smmu.c +++ b/drivers/iommu/tegra-smmu.c @@ -159,9 +159,9 @@ static bool smmu_dma_addr_valid(struct tegra_smmu *smmu, dma_addr_t addr) return (addr & smmu->pfn_mask) == addr; } -static dma_addr_t smmu_pde_to_dma(u32 pde) +static dma_addr_t smmu_pde_to_dma(struct tegra_smmu *smmu, u32 pde) { - return pde << 12; + return (dma_addr_t)(pde & smmu->pfn_mask) << 12; } static void smmu_flush_ptc_all(struct tegra_smmu *smmu) @@ -549,6 +549,7 @@ static u32 *tegra_smmu_pte_lookup(struct tegra_smmu_as *as, unsigned long iova, dma_addr_t *dmap) { unsigned int pd_index = iova_pd_index(iova); + struct tegra_smmu *smmu = as->smmu; struct page *pt_page; u32 *pd; @@ -557,7 +558,7 @@ static u32 *tegra_smmu_pte_lookup(struct tegra_smmu_as *as, unsigned long iova, return NULL; pd = page_address(as->pd); - *dmap = smmu_pde_to_dma(pd[pd_index]); + *dmap = smmu_pde_to_dma(smmu, pd[pd_index]); return tegra_smmu_pte_offset(pt_page, iova); } @@ -599,7 +600,7 @@ static u32 *as_get_pte(struct tegra_smmu_as *as, dma_addr_t iova, } else { u32 *pd = page_address(as->pd); - *dmap = smmu_pde_to_dma(pd[pde]); + *dmap = smmu_pde_to_dma(smmu, pd[pde]); } return tegra_smmu_pte_offset(as->pts[pde], iova); @@ -624,7 +625,7 @@ static void tegra_smmu_pte_put_use(struct tegra_smmu_as *as, unsigned long iova) if (--as->count[pde] == 0) { struct tegra_smmu *smmu = as->smmu; u32 *pd = page_address(as->pd); - dma_addr_t pte_dma = smmu_pde_to_dma(pd[pde]); + dma_addr_t pte_dma = smmu_pde_to_dma(smmu, pd[pde]); tegra_smmu_set_pde(as, iova, 0); diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038-l1.c index fc75c61233aa..58bec2126966 100644 --- a/drivers/irqchip/irq-bcm7038-l1.c +++ b/drivers/irqchip/irq-bcm7038-l1.c @@ -281,6 +281,10 @@ static int __init bcm7038_l1_init_one(struct device_node *dn, pr_err("failed to map parent interrupt %d\n", parent_irq); return -EINVAL; } + + if (of_property_read_bool(dn, "brcm,irq-can-wake")) + enable_irq_wake(parent_irq); + irq_set_chained_handler_and_data(parent_irq, bcm7038_l1_irq_handle, intc); diff --git a/drivers/irqchip/irq-ingenic.c b/drivers/irqchip/irq-ingenic.c index f126255b3260..dda512dfe2c1 100644 --- a/drivers/irqchip/irq-ingenic.c +++ b/drivers/irqchip/irq-ingenic.c @@ -108,6 +108,14 @@ static int __init ingenic_intc_of_init(struct device_node *node, goto out_unmap_irq; } + domain = irq_domain_add_legacy(node, num_chips * 32, + JZ4740_IRQ_BASE, 0, + &irq_domain_simple_ops, NULL); + if (!domain) { + err = -ENOMEM; + goto out_unmap_base; + } + for (i = 0; i < num_chips; i++) { /* Mask all irqs */ writel(0xffffffff, intc->base + (i * CHIP_SIZE) + @@ -134,14 +142,11 @@ static int __init ingenic_intc_of_init(struct device_node *node, IRQ_NOPROBE | IRQ_LEVEL); } - domain = irq_domain_add_legacy(node, num_chips * 32, JZ4740_IRQ_BASE, 0, - &irq_domain_simple_ops, NULL); - if (!domain) - pr_warn("unable to register IRQ domain\n"); - setup_irq(parent_irq, &intc_cascade_action); return 0; +out_unmap_base: + iounmap(intc->base); out_unmap_irq: irq_dispose_mapping(parent_irq); out_free: diff --git a/drivers/leds/leds-an30259a.c b/drivers/leds/leds-an30259a.c index 250dc9d6f635..82350a28a564 100644 --- a/drivers/leds/leds-an30259a.c +++ b/drivers/leds/leds-an30259a.c @@ -305,6 +305,13 @@ static int an30259a_probe(struct i2c_client *client) chip->regmap = devm_regmap_init_i2c(client, &an30259a_regmap_config); + if (IS_ERR(chip->regmap)) { + err = PTR_ERR(chip->regmap); + dev_err(&client->dev, "Failed to allocate register map: %d\n", + err); + goto exit; + } + for (i = 0; i < chip->num_leds; i++) { struct led_init_data init_data = {}; diff --git a/drivers/leds/leds-lm3692x.c b/drivers/leds/leds-lm3692x.c index 3d381f2f73d0..1ac9a44570ee 100644 --- a/drivers/leds/leds-lm3692x.c +++ b/drivers/leds/leds-lm3692x.c @@ -334,9 +334,18 @@ static int lm3692x_probe_dt(struct lm3692x_led *led) return ret; } - led->regulator = devm_regulator_get(&led->client->dev, "vled"); - if (IS_ERR(led->regulator)) + led->regulator = devm_regulator_get_optional(&led->client->dev, "vled"); + if (IS_ERR(led->regulator)) { + ret = PTR_ERR(led->regulator); + if (ret != -ENODEV) { + if (ret != -EPROBE_DEFER) + dev_err(&led->client->dev, + "Failed to get vled regulator: %d\n", + ret); + return ret; + } led->regulator = NULL; + } child = device_get_next_child_node(&led->client->dev, child); if (!child) { diff --git a/drivers/leds/trigger/ledtrig-netdev.c b/drivers/leds/trigger/ledtrig-netdev.c index 136f86a1627d..d5e774d83021 100644 --- a/drivers/leds/trigger/ledtrig-netdev.c +++ b/drivers/leds/trigger/ledtrig-netdev.c @@ -302,10 +302,12 @@ static int netdev_trig_notify(struct notifier_block *nb, container_of(nb, struct led_netdev_data, notifier); if (evt != NETDEV_UP && evt != NETDEV_DOWN && evt != NETDEV_CHANGE - && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER) + && evt != NETDEV_REGISTER && evt != NETDEV_UNREGISTER + && evt != NETDEV_CHANGENAME) return NOTIFY_DONE; if (!(dev == trigger_data->net_dev || + (evt == NETDEV_CHANGENAME && !strcmp(dev->name, trigger_data->device_name)) || (evt == NETDEV_REGISTER && !strcmp(dev->name, trigger_data->device_name)))) return NOTIFY_DONE; @@ -315,6 +317,7 @@ static int netdev_trig_notify(struct notifier_block *nb, clear_bit(NETDEV_LED_MODE_LINKUP, &trigger_data->mode); switch (evt) { + case NETDEV_CHANGENAME: case NETDEV_REGISTER: if (trigger_data->net_dev) dev_put(trigger_data->net_dev); diff --git a/drivers/mailbox/imx-mailbox.c b/drivers/mailbox/imx-mailbox.c index 9f74dee1a58c..afe625e88a5c 100644 --- a/drivers/mailbox/imx-mailbox.c +++ b/drivers/mailbox/imx-mailbox.c @@ -214,11 +214,24 @@ static void imx_mu_shutdown(struct mbox_chan *chan) struct imx_mu_priv *priv = to_imx_mu_priv(chan->mbox); struct imx_mu_con_priv *cp = chan->con_priv; - if (cp->type == IMX_MU_TYPE_TXDB) + if (cp->type == IMX_MU_TYPE_TXDB) { tasklet_kill(&cp->txdb_tasklet); + return; + } - imx_mu_xcr_rmw(priv, 0, IMX_MU_xCR_TIEn(cp->idx) | - IMX_MU_xCR_RIEn(cp->idx) | IMX_MU_xCR_GIEn(cp->idx)); + switch (cp->type) { + case IMX_MU_TYPE_TX: + imx_mu_xcr_rmw(priv, 0, IMX_MU_xCR_TIEn(cp->idx)); + break; + case IMX_MU_TYPE_RX: + imx_mu_xcr_rmw(priv, 0, IMX_MU_xCR_RIEn(cp->idx)); + break; + case IMX_MU_TYPE_RXDB: + imx_mu_xcr_rmw(priv, 0, IMX_MU_xCR_GIEn(cp->idx)); + break; + default: + break; + } free_irq(priv->irq, chan); } diff --git a/drivers/md/bcache/btree.c b/drivers/md/bcache/btree.c index ba434d9ac720..46a8b5a91c38 100644 --- a/drivers/md/bcache/btree.c +++ b/drivers/md/bcache/btree.c @@ -723,6 +723,8 @@ static unsigned long bch_mca_scan(struct shrinker *shrink, * IO can always make forward progress: */ nr /= c->btree_pages; + if (nr == 0) + nr = 1; nr = min_t(unsigned long, nr, mca_can_free(c)); i = 0; diff --git a/drivers/md/md.c b/drivers/md/md.c index 805b33e27496..4e7c9f398bc6 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -1159,6 +1159,7 @@ static int super_90_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor /* not spare disk, or LEVEL_MULTIPATH */ if (sb->level == LEVEL_MULTIPATH || (rdev->desc_nr >= 0 && + rdev->desc_nr < MD_SB_DISKS && sb->disks[rdev->desc_nr].state & ((1<hdev; struct hl_vm_phys_pg_pack *phys_pg_pack = NULL; struct hl_vm_hash_node *hnode = NULL; struct hl_userptr *userptr = NULL; + struct hl_va_range *va_range; enum vm_type_t *vm_type; u64 next_vaddr, i; u32 page_size; @@ -1003,6 +1005,7 @@ static int unmap_device_va(struct hl_ctx *ctx, u64 vaddr) if (*vm_type == VM_TYPE_USERPTR) { is_userptr = true; + va_range = &ctx->host_va_range; userptr = hnode->ptr; rc = init_phys_pg_pack_from_userptr(ctx, userptr, &phys_pg_pack); @@ -1014,6 +1017,7 @@ static int unmap_device_va(struct hl_ctx *ctx, u64 vaddr) } } else if (*vm_type == VM_TYPE_PHYS_PACK) { is_userptr = false; + va_range = &ctx->dram_va_range; phys_pg_pack = hnode->ptr; } else { dev_warn(hdev->dev, @@ -1052,12 +1056,18 @@ static int unmap_device_va(struct hl_ctx *ctx, u64 vaddr) mutex_unlock(&ctx->mmu_lock); - if (add_va_block(hdev, - is_userptr ? &ctx->host_va_range : &ctx->dram_va_range, - vaddr, - vaddr + phys_pg_pack->total_size - 1)) - dev_warn(hdev->dev, "add va block failed for vaddr: 0x%llx\n", - vaddr); + /* + * No point in maintaining the free VA block list if the context is + * closing as the list will be freed anyway + */ + if (!ctx_free) { + rc = add_va_block(hdev, va_range, vaddr, + vaddr + phys_pg_pack->total_size - 1); + if (rc) + dev_warn(hdev->dev, + "add va block failed for vaddr: 0x%llx\n", + vaddr); + } atomic_dec(&phys_pg_pack->mapping_cnt); kfree(hnode); @@ -1189,8 +1199,8 @@ int hl_mem_ioctl(struct hl_fpriv *hpriv, void *data) break; case HL_MEM_OP_UNMAP: - rc = unmap_device_va(ctx, - args->in.unmap.device_virt_addr); + rc = unmap_device_va(ctx, args->in.unmap.device_virt_addr, + false); break; default: @@ -1620,7 +1630,7 @@ void hl_vm_ctx_fini(struct hl_ctx *ctx) dev_dbg(hdev->dev, "hl_mem_hash_node of vaddr 0x%llx of asid %d is still alive\n", hnode->vaddr, ctx->asid); - unmap_device_va(ctx, hnode->vaddr); + unmap_device_va(ctx, hnode->vaddr, true); } spin_lock(&vm->idr_lock); diff --git a/drivers/mmc/host/sdhci-esdhc.h b/drivers/mmc/host/sdhci-esdhc.h index 57b582bf73d9..9289bb4d633e 100644 --- a/drivers/mmc/host/sdhci-esdhc.h +++ b/drivers/mmc/host/sdhci-esdhc.h @@ -51,6 +51,11 @@ #define ESDHC_CLOCK_HCKEN 0x00000002 #define ESDHC_CLOCK_IPGEN 0x00000001 +/* System Control 2 Register */ +#define ESDHC_SYSTEM_CONTROL_2 0x3c +#define ESDHC_SMPCLKSEL 0x00800000 +#define ESDHC_EXTN 0x00400000 + /* Host Controller Capabilities Register 2 */ #define ESDHC_CAPABILITIES_1 0x114 @@ -59,7 +64,16 @@ #define ESDHC_HS400_WNDW_ADJUST 0x00000040 #define ESDHC_HS400_MODE 0x00000010 #define ESDHC_TB_EN 0x00000004 +#define ESDHC_TB_MODE_MASK 0x00000003 +#define ESDHC_TB_MODE_SW 0x00000003 +#define ESDHC_TB_MODE_3 0x00000002 + +#define ESDHC_TBSTAT 0x124 + #define ESDHC_TBPTR 0x128 +#define ESDHC_WNDW_STRT_PTR_SHIFT 8 +#define ESDHC_WNDW_STRT_PTR_MASK (0x7f << 8) +#define ESDHC_WNDW_END_PTR_MASK 0x7f /* SD Clock Control Register */ #define ESDHC_SDCLKCTL 0x144 diff --git a/drivers/mmc/host/sdhci-of-esdhc.c b/drivers/mmc/host/sdhci-of-esdhc.c index 889ed98ec0e7..fcfb50f84c8b 100644 --- a/drivers/mmc/host/sdhci-of-esdhc.c +++ b/drivers/mmc/host/sdhci-of-esdhc.c @@ -77,8 +77,11 @@ struct sdhci_esdhc { bool quirk_incorrect_hostver; bool quirk_limited_clk_division; bool quirk_unreliable_pulse_detection; - bool quirk_fixup_tuning; + bool quirk_tuning_erratum_type1; + bool quirk_tuning_erratum_type2; bool quirk_ignore_data_inhibit; + bool quirk_delay_before_data_reset; + bool in_sw_tuning; unsigned int peripheral_clock; const struct esdhc_clk_fixup *clk_fixup; u32 div_ratio; @@ -408,6 +411,8 @@ static void esdhc_le_writel(struct sdhci_host *host, u32 val, int reg) static void esdhc_be_writew(struct sdhci_host *host, u16 val, int reg) { + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); + struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); int base = reg & ~0x3; u32 value; u32 ret; @@ -416,10 +421,24 @@ static void esdhc_be_writew(struct sdhci_host *host, u16 val, int reg) ret = esdhc_writew_fixup(host, reg, val, value); if (reg != SDHCI_TRANSFER_MODE) iowrite32be(ret, host->ioaddr + base); + + /* Starting SW tuning requires ESDHC_SMPCLKSEL to be set + * 1us later after ESDHC_EXTN is set. + */ + if (base == ESDHC_SYSTEM_CONTROL_2) { + if (!(value & ESDHC_EXTN) && (ret & ESDHC_EXTN) && + esdhc->in_sw_tuning) { + udelay(1); + ret |= ESDHC_SMPCLKSEL; + iowrite32be(ret, host->ioaddr + base); + } + } } static void esdhc_le_writew(struct sdhci_host *host, u16 val, int reg) { + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); + struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); int base = reg & ~0x3; u32 value; u32 ret; @@ -428,6 +447,18 @@ static void esdhc_le_writew(struct sdhci_host *host, u16 val, int reg) ret = esdhc_writew_fixup(host, reg, val, value); if (reg != SDHCI_TRANSFER_MODE) iowrite32(ret, host->ioaddr + base); + + /* Starting SW tuning requires ESDHC_SMPCLKSEL to be set + * 1us later after ESDHC_EXTN is set. + */ + if (base == ESDHC_SYSTEM_CONTROL_2) { + if (!(value & ESDHC_EXTN) && (ret & ESDHC_EXTN) && + esdhc->in_sw_tuning) { + udelay(1); + ret |= ESDHC_SMPCLKSEL; + iowrite32(ret, host->ioaddr + base); + } + } } static void esdhc_be_writeb(struct sdhci_host *host, u8 val, int reg) @@ -705,6 +736,11 @@ static void esdhc_reset(struct sdhci_host *host, u8 mask) struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); u32 val; + if (esdhc->quirk_delay_before_data_reset && + (mask & SDHCI_RESET_DATA) && + (host->flags & SDHCI_REQ_USE_DMA)) + mdelay(5); + sdhci_reset(host, mask); sdhci_writel(host, host->ier, SDHCI_INT_ENABLE); @@ -793,16 +829,21 @@ static int esdhc_signal_voltage_switch(struct mmc_host *mmc, } } -static struct soc_device_attribute soc_fixup_tuning[] = { +static struct soc_device_attribute soc_tuning_erratum_type1[] = { + { .family = "QorIQ T1023", .revision = "1.0", }, { .family = "QorIQ T1040", .revision = "1.0", }, { .family = "QorIQ T2080", .revision = "1.0", }, - { .family = "QorIQ T1023", .revision = "1.0", }, { .family = "QorIQ LS1021A", .revision = "1.0", }, - { .family = "QorIQ LS1080A", .revision = "1.0", }, - { .family = "QorIQ LS2080A", .revision = "1.0", }, + { }, +}; + +static struct soc_device_attribute soc_tuning_erratum_type2[] = { { .family = "QorIQ LS1012A", .revision = "1.0", }, { .family = "QorIQ LS1043A", .revision = "1.*", }, { .family = "QorIQ LS1046A", .revision = "1.0", }, + { .family = "QorIQ LS1080A", .revision = "1.0", }, + { .family = "QorIQ LS2080A", .revision = "1.0", }, + { .family = "QorIQ LA1575A", .revision = "1.0", }, { }, }; @@ -826,15 +867,97 @@ static void esdhc_tuning_block_enable(struct sdhci_host *host, bool enable) esdhc_clock_enable(host, true); } +static void esdhc_prepare_sw_tuning(struct sdhci_host *host, u8 *window_start, + u8 *window_end) +{ + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); + struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); + u8 tbstat_15_8, tbstat_7_0; + u32 val; + + if (esdhc->quirk_tuning_erratum_type1) { + *window_start = 5 * esdhc->div_ratio; + *window_end = 3 * esdhc->div_ratio; + return; + } + + /* Write TBCTL[11:8]=4'h8 */ + val = sdhci_readl(host, ESDHC_TBCTL); + val &= ~(0xf << 8); + val |= 8 << 8; + sdhci_writel(host, val, ESDHC_TBCTL); + + mdelay(1); + + /* Read TBCTL[31:0] register and rewrite again */ + val = sdhci_readl(host, ESDHC_TBCTL); + sdhci_writel(host, val, ESDHC_TBCTL); + + mdelay(1); + + /* Read the TBSTAT[31:0] register twice */ + val = sdhci_readl(host, ESDHC_TBSTAT); + val = sdhci_readl(host, ESDHC_TBSTAT); + + /* Reset data lines by setting ESDHCCTL[RSTD] */ + sdhci_reset(host, SDHCI_RESET_DATA); + /* Write 32'hFFFF_FFFF to IRQSTAT register */ + sdhci_writel(host, 0xFFFFFFFF, SDHCI_INT_STATUS); + + /* If TBSTAT[15:8]-TBSTAT[7:0] > 4 * div_ratio + * or TBSTAT[7:0]-TBSTAT[15:8] > 4 * div_ratio, + * then program TBPTR[TB_WNDW_END_PTR] = 4 * div_ratio + * and program TBPTR[TB_WNDW_START_PTR] = 8 * div_ratio. + */ + tbstat_7_0 = val & 0xff; + tbstat_15_8 = (val >> 8) & 0xff; + + if (abs(tbstat_15_8 - tbstat_7_0) > (4 * esdhc->div_ratio)) { + *window_start = 8 * esdhc->div_ratio; + *window_end = 4 * esdhc->div_ratio; + } else { + *window_start = 5 * esdhc->div_ratio; + *window_end = 3 * esdhc->div_ratio; + } +} + +static int esdhc_execute_sw_tuning(struct mmc_host *mmc, u32 opcode, + u8 window_start, u8 window_end) +{ + struct sdhci_host *host = mmc_priv(mmc); + struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); + struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); + u32 val; + int ret; + + /* Program TBPTR[TB_WNDW_END_PTR] and TBPTR[TB_WNDW_START_PTR] */ + val = ((u32)window_start << ESDHC_WNDW_STRT_PTR_SHIFT) & + ESDHC_WNDW_STRT_PTR_MASK; + val |= window_end & ESDHC_WNDW_END_PTR_MASK; + sdhci_writel(host, val, ESDHC_TBPTR); + + /* Program the software tuning mode by setting TBCTL[TB_MODE]=2'h3 */ + val = sdhci_readl(host, ESDHC_TBCTL); + val &= ~ESDHC_TB_MODE_MASK; + val |= ESDHC_TB_MODE_SW; + sdhci_writel(host, val, ESDHC_TBCTL); + + esdhc->in_sw_tuning = true; + ret = sdhci_execute_tuning(mmc, opcode); + esdhc->in_sw_tuning = false; + return ret; +} + static int esdhc_execute_tuning(struct mmc_host *mmc, u32 opcode) { struct sdhci_host *host = mmc_priv(mmc); struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_esdhc *esdhc = sdhci_pltfm_priv(pltfm_host); + u8 window_start, window_end; + int ret, retries = 1; bool hs400_tuning; unsigned int clk; u32 val; - int ret; /* For tuning mode, the sd clock divisor value * must be larger than 3 according to reference manual. @@ -843,39 +966,73 @@ static int esdhc_execute_tuning(struct mmc_host *mmc, u32 opcode) if (host->clock > clk) esdhc_of_set_clock(host, clk); - if (esdhc->quirk_limited_clk_division && - host->flags & SDHCI_HS400_TUNING) - esdhc_of_set_clock(host, host->clock); - esdhc_tuning_block_enable(host, true); hs400_tuning = host->flags & SDHCI_HS400_TUNING; - ret = sdhci_execute_tuning(mmc, opcode); - if (hs400_tuning) { + do { + if (esdhc->quirk_limited_clk_division && + hs400_tuning) + esdhc_of_set_clock(host, host->clock); + + /* Do HW tuning */ + val = sdhci_readl(host, ESDHC_TBCTL); + val &= ~ESDHC_TB_MODE_MASK; + val |= ESDHC_TB_MODE_3; + sdhci_writel(host, val, ESDHC_TBCTL); + + ret = sdhci_execute_tuning(mmc, opcode); + if (ret) + break; + + /* If HW tuning fails and triggers erratum, + * try workaround. + */ + ret = host->tuning_err; + if (ret == -EAGAIN && + (esdhc->quirk_tuning_erratum_type1 || + esdhc->quirk_tuning_erratum_type2)) { + /* Recover HS400 tuning flag */ + if (hs400_tuning) + host->flags |= SDHCI_HS400_TUNING; + pr_info("%s: Hold on to use fixed sampling clock. Try SW tuning!\n", + mmc_hostname(mmc)); + /* Do SW tuning */ + esdhc_prepare_sw_tuning(host, &window_start, + &window_end); + ret = esdhc_execute_sw_tuning(mmc, opcode, + window_start, + window_end); + if (ret) + break; + + /* Retry both HW/SW tuning with reduced clock. */ + ret = host->tuning_err; + if (ret == -EAGAIN && retries) { + /* Recover HS400 tuning flag */ + if (hs400_tuning) + host->flags |= SDHCI_HS400_TUNING; + + clk = host->max_clk / (esdhc->div_ratio + 1); + esdhc_of_set_clock(host, clk); + pr_info("%s: Hold on to use fixed sampling clock. Try tuning with reduced clock!\n", + mmc_hostname(mmc)); + } else { + break; + } + } else { + break; + } + } while (retries--); + + if (ret) { + esdhc_tuning_block_enable(host, false); + } else if (hs400_tuning) { val = sdhci_readl(host, ESDHC_SDTIMNGCTL); val |= ESDHC_FLW_CTL_BG; sdhci_writel(host, val, ESDHC_SDTIMNGCTL); } - if (host->tuning_err == -EAGAIN && esdhc->quirk_fixup_tuning) { - - /* program TBPTR[TB_WNDW_END_PTR] = 3*DIV_RATIO and - * program TBPTR[TB_WNDW_START_PTR] = 5*DIV_RATIO - */ - val = sdhci_readl(host, ESDHC_TBPTR); - val = (val & ~((0x7f << 8) | 0x7f)) | - (3 * esdhc->div_ratio) | ((5 * esdhc->div_ratio) << 8); - sdhci_writel(host, val, ESDHC_TBPTR); - - /* program the software tuning mode by setting - * TBCTL[TB_MODE]=2'h3 - */ - val = sdhci_readl(host, ESDHC_TBCTL); - val |= 0x3; - sdhci_writel(host, val, ESDHC_TBCTL); - sdhci_execute_tuning(mmc, opcode); - } return ret; } @@ -1046,6 +1203,10 @@ static void esdhc_init(struct platform_device *pdev, struct sdhci_host *host) if (match) esdhc->clk_fixup = match->data; np = pdev->dev.of_node; + + if (of_device_is_compatible(np, "fsl,p2020-esdhc")) + esdhc->quirk_delay_before_data_reset = true; + clk = of_clk_get(np, 0); if (!IS_ERR(clk)) { /* @@ -1111,10 +1272,15 @@ static int sdhci_esdhc_probe(struct platform_device *pdev) pltfm_host = sdhci_priv(host); esdhc = sdhci_pltfm_priv(pltfm_host); - if (soc_device_match(soc_fixup_tuning)) - esdhc->quirk_fixup_tuning = true; + if (soc_device_match(soc_tuning_erratum_type1)) + esdhc->quirk_tuning_erratum_type1 = true; else - esdhc->quirk_fixup_tuning = false; + esdhc->quirk_tuning_erratum_type1 = false; + + if (soc_device_match(soc_tuning_erratum_type2)) + esdhc->quirk_tuning_erratum_type2 = true; + else + esdhc->quirk_tuning_erratum_type2 = false; if (esdhc->vendor_ver == VENDOR_V_22) host->quirks2 |= SDHCI_QUIRK2_HOST_NO_CMD23; diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index face00c622ed..7dcd709f4ac3 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -2225,9 +2225,6 @@ static void bond_miimon_commit(struct bonding *bond) } else if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) { /* make it immediately active */ bond_set_active_slave(slave); - } else if (slave != primary) { - /* prevent it from being the active one */ - bond_set_backup_slave(slave); } slave_info(bond->dev, slave->dev, "link status definitely up, %u Mbps %s duplex\n", diff --git a/drivers/net/dsa/bcm_sf2_cfp.c b/drivers/net/dsa/bcm_sf2_cfp.c index d264776a95a3..471837cf0b21 100644 --- a/drivers/net/dsa/bcm_sf2_cfp.c +++ b/drivers/net/dsa/bcm_sf2_cfp.c @@ -358,7 +358,7 @@ static int bcm_sf2_cfp_ipv4_rule_set(struct bcm_sf2_priv *priv, int port, return -EINVAL; } - ip_frag = be32_to_cpu(fs->m_ext.data[0]); + ip_frag = !!(be32_to_cpu(fs->h_ext.data[0]) & 1); /* Locate the first rule available */ if (fs->location == RX_CLS_LOC_ANY) @@ -569,7 +569,7 @@ static int bcm_sf2_cfp_rule_cmp(struct bcm_sf2_priv *priv, int port, if (rule->fs.flow_type != fs->flow_type || rule->fs.ring_cookie != fs->ring_cookie || - rule->fs.m_ext.data[0] != fs->m_ext.data[0]) + rule->fs.h_ext.data[0] != fs->h_ext.data[0]) continue; switch (fs->flow_type & ~FLOW_EXT) { @@ -621,7 +621,7 @@ static int bcm_sf2_cfp_ipv6_rule_set(struct bcm_sf2_priv *priv, int port, return -EINVAL; } - ip_frag = be32_to_cpu(fs->m_ext.data[0]); + ip_frag = !!(be32_to_cpu(fs->h_ext.data[0]) & 1); layout = &udf_tcpip6_layout; slice_num = bcm_sf2_get_slice_number(layout, 0); diff --git a/drivers/net/dsa/sja1105/sja1105_main.c b/drivers/net/dsa/sja1105/sja1105_main.c index 4e5a428ab1a4..7763221286d4 100644 --- a/drivers/net/dsa/sja1105/sja1105_main.c +++ b/drivers/net/dsa/sja1105/sja1105_main.c @@ -1560,8 +1560,8 @@ static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled) if (enabled) { /* Enable VLAN filtering. */ - tpid = ETH_P_8021AD; - tpid2 = ETH_P_8021Q; + tpid = ETH_P_8021Q; + tpid2 = ETH_P_8021AD; } else { /* Disable VLAN filtering. */ tpid = ETH_P_SJA1105; @@ -1570,9 +1570,9 @@ static int sja1105_vlan_filtering(struct dsa_switch *ds, int port, bool enabled) table = &priv->static_config.tables[BLK_IDX_GENERAL_PARAMS]; general_params = table->entries; - /* EtherType used to identify outer tagged (S-tag) VLAN traffic */ - general_params->tpid = tpid; /* EtherType used to identify inner tagged (C-tag) VLAN traffic */ + general_params->tpid = tpid; + /* EtherType used to identify outer tagged (S-tag) VLAN traffic */ general_params->tpid2 = tpid2; /* When VLAN filtering is on, we need to at least be able to * decode management traffic through the "backup plan". diff --git a/drivers/net/dsa/sja1105/sja1105_static_config.c b/drivers/net/dsa/sja1105/sja1105_static_config.c index 0d03e13e9909..63d2311817c4 100644 --- a/drivers/net/dsa/sja1105/sja1105_static_config.c +++ b/drivers/net/dsa/sja1105/sja1105_static_config.c @@ -142,6 +142,9 @@ static size_t sja1105et_general_params_entry_packing(void *buf, void *entry_ptr, return size; } +/* TPID and TPID2 are intentionally reversed so that semantic + * compatibility with E/T is kept. + */ static size_t sja1105pqrs_general_params_entry_packing(void *buf, void *entry_ptr, enum packing_op op) @@ -166,9 +169,9 @@ sja1105pqrs_general_params_entry_packing(void *buf, void *entry_ptr, sja1105_packing(buf, &entry->mirr_port, 141, 139, size, op); sja1105_packing(buf, &entry->vlmarker, 138, 107, size, op); sja1105_packing(buf, &entry->vlmask, 106, 75, size, op); - sja1105_packing(buf, &entry->tpid, 74, 59, size, op); + sja1105_packing(buf, &entry->tpid2, 74, 59, size, op); sja1105_packing(buf, &entry->ignore2stf, 58, 58, size, op); - sja1105_packing(buf, &entry->tpid2, 57, 42, size, op); + sja1105_packing(buf, &entry->tpid, 57, 42, size, op); sja1105_packing(buf, &entry->queue_ts, 41, 41, size, op); sja1105_packing(buf, &entry->egrmirrvid, 40, 29, size, op); sja1105_packing(buf, &entry->egrmirrpcp, 28, 26, size, op); diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c index c487d2a7d6dd..b4a145220aba 100644 --- a/drivers/net/ethernet/amazon/ena/ena_netdev.c +++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c @@ -1238,8 +1238,8 @@ static int ena_io_poll(struct napi_struct *napi, int budget) struct ena_napi *ena_napi = container_of(napi, struct ena_napi, napi); struct ena_ring *tx_ring, *rx_ring; - u32 tx_work_done; - u32 rx_work_done; + int tx_work_done; + int rx_work_done = 0; int tx_budget; int napi_comp_call = 0; int ret; @@ -1256,7 +1256,11 @@ static int ena_io_poll(struct napi_struct *napi, int budget) } tx_work_done = ena_clean_tx_irq(tx_ring, tx_budget); - rx_work_done = ena_clean_rx_irq(rx_ring, napi, budget); + /* On netpoll the budget is zero and the handler should only clean the + * tx completions. + */ + if (likely(budget)) + rx_work_done = ena_clean_rx_irq(rx_ring, napi, budget); /* If the device is about to reset or down, avoid unmask * the interrupt and return 0 so NAPI won't reschedule diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 527e1bf93116..5c75b061243f 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -1995,6 +1995,9 @@ static int bnxt_async_event_process(struct bnxt *bp, case ASYNC_EVENT_CMPL_EVENT_ID_RESET_NOTIFY: { u32 data1 = le32_to_cpu(cmpl->event_data1); + if (!bp->fw_health) + goto async_event_process_exit; + bp->fw_reset_timestamp = jiffies; bp->fw_reset_min_dsecs = cmpl->timestamp_lo; if (!bp->fw_reset_min_dsecs) @@ -4438,8 +4441,9 @@ static int bnxt_hwrm_func_drv_rgtr(struct bnxt *bp) FUNC_DRV_RGTR_REQ_ENABLES_VER); req.os_type = cpu_to_le16(FUNC_DRV_RGTR_REQ_OS_TYPE_LINUX); - flags = FUNC_DRV_RGTR_REQ_FLAGS_16BIT_VER_MODE | - FUNC_DRV_RGTR_REQ_FLAGS_HOT_RESET_SUPPORT; + flags = FUNC_DRV_RGTR_REQ_FLAGS_16BIT_VER_MODE; + if (bp->fw_cap & BNXT_FW_CAP_HOT_RESET) + flags |= FUNC_DRV_RGTR_REQ_FLAGS_HOT_RESET_SUPPORT; if (bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY) flags |= FUNC_DRV_RGTR_REQ_FLAGS_ERROR_RECOVERY_SUPPORT; req.flags = cpu_to_le32(flags); @@ -6174,7 +6178,7 @@ static void bnxt_hwrm_set_coal_params(struct bnxt *bp, tmr = bnxt_usec_to_coal_tmr(bp, hw_coal->coal_ticks_irq); val = clamp_t(u16, tmr, 1, coal_cap->cmpl_aggr_dma_tmr_during_int_max); - req->cmpl_aggr_dma_tmr_during_int = cpu_to_le16(tmr); + req->cmpl_aggr_dma_tmr_during_int = cpu_to_le16(val); req->enables |= cpu_to_le16(BNXT_COAL_CMPL_AGGR_TMR_DURING_INT_ENABLE); } @@ -7096,14 +7100,6 @@ static int bnxt_hwrm_error_recovery_qcfg(struct bnxt *bp) rc = _hwrm_send_message(bp, &req, sizeof(req), HWRM_CMD_TIMEOUT); if (rc) goto err_recovery_out; - if (!fw_health) { - fw_health = kzalloc(sizeof(*fw_health), GFP_KERNEL); - bp->fw_health = fw_health; - if (!fw_health) { - rc = -ENOMEM; - goto err_recovery_out; - } - } fw_health->flags = le32_to_cpu(resp->flags); if ((fw_health->flags & ERROR_RECOVERY_QCFG_RESP_FLAGS_CO_CPU) && !(bp->fw_cap & BNXT_FW_CAP_KONG_MB_CHNL)) { @@ -8766,6 +8762,9 @@ static int bnxt_hwrm_if_change(struct bnxt *bp, bool up) } if (resc_reinit || fw_reset) { if (fw_reset) { + bnxt_free_ctx_mem(bp); + kfree(bp->ctx); + bp->ctx = NULL; rc = bnxt_fw_init_one(bp); if (rc) { set_bit(BNXT_STATE_ABORT_ERR, &bp->state); @@ -9954,8 +9953,7 @@ static void bnxt_fw_health_check(struct bnxt *bp) struct bnxt_fw_health *fw_health = bp->fw_health; u32 val; - if (!fw_health || !fw_health->enabled || - test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) + if (!fw_health->enabled || test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) return; if (fw_health->tmr_counter) { @@ -10416,6 +10414,23 @@ static void bnxt_init_dflt_coal(struct bnxt *bp) bp->stats_coal_ticks = BNXT_DEF_STATS_COAL_TICKS; } +static void bnxt_alloc_fw_health(struct bnxt *bp) +{ + if (bp->fw_health) + return; + + if (!(bp->fw_cap & BNXT_FW_CAP_HOT_RESET) && + !(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)) + return; + + bp->fw_health = kzalloc(sizeof(*bp->fw_health), GFP_KERNEL); + if (!bp->fw_health) { + netdev_warn(bp->dev, "Failed to allocate fw_health\n"); + bp->fw_cap &= ~BNXT_FW_CAP_HOT_RESET; + bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY; + } +} + static int bnxt_fw_init_one_p1(struct bnxt *bp) { int rc; @@ -10462,6 +10477,7 @@ static int bnxt_fw_init_one_p2(struct bnxt *bp) netdev_warn(bp->dev, "hwrm query adv flow mgnt failure rc: %d\n", rc); + bnxt_alloc_fw_health(bp); rc = bnxt_hwrm_error_recovery_qcfg(bp); if (rc) netdev_warn(bp->dev, "hwrm query error recovery failure rc: %d\n", @@ -10547,6 +10563,12 @@ static int bnxt_fw_init_one(struct bnxt *bp) rc = bnxt_approve_mac(bp, bp->dev->dev_addr, false); if (rc) return rc; + + /* In case fw capabilities have changed, destroy the unneeded + * reporters and create newly capable ones. + */ + bnxt_dl_fw_reporters_destroy(bp, false); + bnxt_dl_fw_reporters_create(bp); bnxt_fw_init_one_p3(bp); return 0; } @@ -10680,8 +10702,7 @@ static void bnxt_fw_reset_task(struct work_struct *work) bnxt_queue_fw_reset_work(bp, bp->fw_reset_min_dsecs * HZ / 10); return; case BNXT_FW_RESET_STATE_ENABLE_DEV: - if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state) && - bp->fw_health) { + if (test_bit(BNXT_STATE_FW_FATAL_COND, &bp->state)) { u32 val; val = bnxt_fw_health_readl(bp, @@ -11322,11 +11343,11 @@ static void bnxt_remove_one(struct pci_dev *pdev) struct net_device *dev = pci_get_drvdata(pdev); struct bnxt *bp = netdev_priv(dev); - if (BNXT_PF(bp)) { + if (BNXT_PF(bp)) bnxt_sriov_disable(bp); - bnxt_dl_unregister(bp); - } + bnxt_dl_fw_reporters_destroy(bp, true); + bnxt_dl_unregister(bp); pci_disable_pcie_error_reporting(pdev); unregister_netdev(dev); bnxt_shutdown_tc(bp); @@ -11341,6 +11362,8 @@ static void bnxt_remove_one(struct pci_dev *pdev) bnxt_dcb_free(bp); kfree(bp->edev); bp->edev = NULL; + kfree(bp->fw_health); + bp->fw_health = NULL; bnxt_cleanup_pci(bp); bnxt_free_ctx_mem(bp); kfree(bp->ctx); @@ -11820,8 +11843,8 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) if (rc) goto init_err_cleanup_tc; - if (BNXT_PF(bp)) - bnxt_dl_register(bp); + bnxt_dl_register(bp); + bnxt_dl_fw_reporters_create(bp); netdev_info(dev, "%s found at mem %lx, node addr %pM\n", board_info[ent->driver_data].name, diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethernet/broadcom/bnxt/bnxt.h index 5163bb848618..dc26e3ace43f 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -1658,6 +1658,7 @@ struct bnxt { #define BNXT_FW_CAP_PCIE_STATS_SUPPORTED 0x00020000 #define BNXT_FW_CAP_EXT_STATS_SUPPORTED 0x00040000 #define BNXT_FW_CAP_ERR_RECOVER_RELOAD 0x00100000 + #define BNXT_FW_CAP_HOT_RESET 0x00200000 #define BNXT_NEW_RM(bp) ((bp)->fw_cap & BNXT_FW_CAP_NEW_RM) u32 hwrm_spec_code; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c index 7d2cfea05737..1e236e74ff2f 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c @@ -19,11 +19,10 @@ static int bnxt_fw_reporter_diagnose(struct devlink_health_reporter *reporter, struct devlink_fmsg *fmsg) { struct bnxt *bp = devlink_health_reporter_priv(reporter); - struct bnxt_fw_health *health = bp->fw_health; u32 val, health_status; int rc; - if (!health || test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) + if (test_bit(BNXT_STATE_IN_FW_RESET, &bp->state)) return 0; val = bnxt_fw_health_readl(bp, BNXT_FW_HEALTH_REG); @@ -103,21 +102,15 @@ struct devlink_health_reporter_ops bnxt_dl_fw_fatal_reporter_ops = { .recover = bnxt_fw_fatal_recover, }; -static void bnxt_dl_fw_reporters_create(struct bnxt *bp) +void bnxt_dl_fw_reporters_create(struct bnxt *bp) { struct bnxt_fw_health *health = bp->fw_health; - if (!health) + if (!bp->dl || !health) return; - health->fw_reporter = - devlink_health_reporter_create(bp->dl, &bnxt_dl_fw_reporter_ops, - 0, false, bp); - if (IS_ERR(health->fw_reporter)) { - netdev_warn(bp->dev, "Failed to create FW health reporter, rc = %ld\n", - PTR_ERR(health->fw_reporter)); - health->fw_reporter = NULL; - } + if (!(bp->fw_cap & BNXT_FW_CAP_HOT_RESET) || health->fw_reset_reporter) + goto err_recovery; health->fw_reset_reporter = devlink_health_reporter_create(bp->dl, @@ -127,8 +120,30 @@ static void bnxt_dl_fw_reporters_create(struct bnxt *bp) netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n", PTR_ERR(health->fw_reset_reporter)); health->fw_reset_reporter = NULL; + bp->fw_cap &= ~BNXT_FW_CAP_HOT_RESET; } +err_recovery: + if (!(bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY)) + return; + + if (!health->fw_reporter) { + health->fw_reporter = + devlink_health_reporter_create(bp->dl, + &bnxt_dl_fw_reporter_ops, + 0, false, bp); + if (IS_ERR(health->fw_reporter)) { + netdev_warn(bp->dev, "Failed to create FW health reporter, rc = %ld\n", + PTR_ERR(health->fw_reporter)); + health->fw_reporter = NULL; + bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY; + return; + } + } + + if (health->fw_fatal_reporter) + return; + health->fw_fatal_reporter = devlink_health_reporter_create(bp->dl, &bnxt_dl_fw_fatal_reporter_ops, @@ -137,24 +152,35 @@ static void bnxt_dl_fw_reporters_create(struct bnxt *bp) netdev_warn(bp->dev, "Failed to create FW fatal health reporter, rc = %ld\n", PTR_ERR(health->fw_fatal_reporter)); health->fw_fatal_reporter = NULL; + bp->fw_cap &= ~BNXT_FW_CAP_ERROR_RECOVERY; } } -static void bnxt_dl_fw_reporters_destroy(struct bnxt *bp) +void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all) { struct bnxt_fw_health *health = bp->fw_health; - if (!health) + if (!bp->dl || !health) return; - if (health->fw_reporter) - devlink_health_reporter_destroy(health->fw_reporter); - - if (health->fw_reset_reporter) + if ((all || !(bp->fw_cap & BNXT_FW_CAP_HOT_RESET)) && + health->fw_reset_reporter) { devlink_health_reporter_destroy(health->fw_reset_reporter); + health->fw_reset_reporter = NULL; + } - if (health->fw_fatal_reporter) + if ((bp->fw_cap & BNXT_FW_CAP_ERROR_RECOVERY) && !all) + return; + + if (health->fw_reporter) { + devlink_health_reporter_destroy(health->fw_reporter); + health->fw_reporter = NULL; + } + + if (health->fw_fatal_reporter) { devlink_health_reporter_destroy(health->fw_fatal_reporter); + health->fw_fatal_reporter = NULL; + } } void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event) @@ -162,9 +188,6 @@ void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event) struct bnxt_fw_health *fw_health = bp->fw_health; struct bnxt_fw_reporter_ctx fw_reporter_ctx; - if (!fw_health) - return; - fw_reporter_ctx.sp_event = event; switch (event) { case BNXT_FW_RESET_NOTIFY_SP_EVENT: @@ -203,6 +226,8 @@ static const struct devlink_ops bnxt_dl_ops = { #endif /* CONFIG_BNXT_SRIOV */ }; +static const struct devlink_ops bnxt_vf_dl_ops; + enum bnxt_dl_param_id { BNXT_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX, BNXT_DEVLINK_PARAM_ID_GRE_VER_CHECK, @@ -416,7 +441,10 @@ int bnxt_dl_register(struct bnxt *bp) return -ENOTSUPP; } - dl = devlink_alloc(&bnxt_dl_ops, sizeof(struct bnxt_dl)); + if (BNXT_PF(bp)) + dl = devlink_alloc(&bnxt_dl_ops, sizeof(struct bnxt_dl)); + else + dl = devlink_alloc(&bnxt_vf_dl_ops, sizeof(struct bnxt_dl)); if (!dl) { netdev_warn(bp->dev, "devlink_alloc failed"); return -ENOMEM; @@ -435,6 +463,9 @@ int bnxt_dl_register(struct bnxt *bp) goto err_dl_free; } + if (!BNXT_PF(bp)) + return 0; + rc = devlink_params_register(dl, bnxt_dl_params, ARRAY_SIZE(bnxt_dl_params)); if (rc) { @@ -462,8 +493,6 @@ int bnxt_dl_register(struct bnxt *bp) devlink_params_publish(dl); - bnxt_dl_fw_reporters_create(bp); - return 0; err_dl_port_unreg: @@ -486,12 +515,14 @@ void bnxt_dl_unregister(struct bnxt *bp) if (!dl) return; - bnxt_dl_fw_reporters_destroy(bp); - devlink_port_params_unregister(&bp->dl_port, bnxt_dl_port_params, - ARRAY_SIZE(bnxt_dl_port_params)); - devlink_port_unregister(&bp->dl_port); - devlink_params_unregister(dl, bnxt_dl_params, - ARRAY_SIZE(bnxt_dl_params)); + if (BNXT_PF(bp)) { + devlink_port_params_unregister(&bp->dl_port, + bnxt_dl_port_params, + ARRAY_SIZE(bnxt_dl_port_params)); + devlink_port_unregister(&bp->dl_port); + devlink_params_unregister(dl, bnxt_dl_params, + ARRAY_SIZE(bnxt_dl_params)); + } devlink_unregister(dl); devlink_free(dl); } diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h index 2f4fd0a7d04b..689c47ab2155 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h @@ -57,6 +57,8 @@ struct bnxt_dl_nvm_param { }; void bnxt_devlink_health_report(struct bnxt *bp, unsigned long event); +void bnxt_dl_fw_reporters_create(struct bnxt *bp); +void bnxt_dl_fw_reporters_destroy(struct bnxt *bp, bool all); int bnxt_dl_register(struct bnxt *bp); void bnxt_dl_unregister(struct bnxt *bp); diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c index 89f95428556e..ece70f61c89a 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -3064,8 +3064,15 @@ static int bnxt_hwrm_dbg_dma_data(struct bnxt *bp, void *msg, int msg_len, } } - if (info->dest_buf) - memcpy(info->dest_buf + off, dma_buf, len); + if (info->dest_buf) { + if ((info->seg_start + off + len) <= + BNXT_COREDUMP_BUF_LEN(info->buf_len)) { + memcpy(info->dest_buf + off, dma_buf, len); + } else { + rc = -ENOBUFS; + break; + } + } if (cmn_req->req_type == cpu_to_le16(HWRM_DBG_COREDUMP_RETRIEVE)) @@ -3119,7 +3126,7 @@ static int bnxt_hwrm_dbg_coredump_initiate(struct bnxt *bp, u16 component_id, static int bnxt_hwrm_dbg_coredump_retrieve(struct bnxt *bp, u16 component_id, u16 segment_id, u32 *seg_len, - void *buf, u32 offset) + void *buf, u32 buf_len, u32 offset) { struct hwrm_dbg_coredump_retrieve_input req = {0}; struct bnxt_hwrm_dbg_dma_info info = {NULL}; @@ -3134,8 +3141,11 @@ static int bnxt_hwrm_dbg_coredump_retrieve(struct bnxt *bp, u16 component_id, seq_no); info.data_len_off = offsetof(struct hwrm_dbg_coredump_retrieve_output, data_len); - if (buf) + if (buf) { info.dest_buf = buf + offset; + info.buf_len = buf_len; + info.seg_start = offset; + } rc = bnxt_hwrm_dbg_dma_data(bp, &req, sizeof(req), &info); if (!rc) @@ -3225,14 +3235,17 @@ bnxt_fill_coredump_record(struct bnxt *bp, struct bnxt_coredump_record *record, static int bnxt_get_coredump(struct bnxt *bp, void *buf, u32 *dump_len) { u32 ver_get_resp_len = sizeof(struct hwrm_ver_get_output); + u32 offset = 0, seg_hdr_len, seg_record_len, buf_len = 0; struct coredump_segment_record *seg_record = NULL; - u32 offset = 0, seg_hdr_len, seg_record_len; struct bnxt_coredump_segment_hdr seg_hdr; struct bnxt_coredump coredump = {NULL}; time64_t start_time; u16 start_utc; int rc = 0, i; + if (buf) + buf_len = *dump_len; + start_time = ktime_get_real_seconds(); start_utc = sys_tz.tz_minuteswest * 60; seg_hdr_len = sizeof(seg_hdr); @@ -3265,6 +3278,12 @@ static int bnxt_get_coredump(struct bnxt *bp, void *buf, u32 *dump_len) u32 duration = 0, seg_len = 0; unsigned long start, end; + if (buf && ((offset + seg_hdr_len) > + BNXT_COREDUMP_BUF_LEN(buf_len))) { + rc = -ENOBUFS; + goto err; + } + start = jiffies; rc = bnxt_hwrm_dbg_coredump_initiate(bp, comp_id, seg_id); @@ -3277,9 +3296,11 @@ static int bnxt_get_coredump(struct bnxt *bp, void *buf, u32 *dump_len) /* Write segment data into the buffer */ rc = bnxt_hwrm_dbg_coredump_retrieve(bp, comp_id, seg_id, - &seg_len, buf, + &seg_len, buf, buf_len, offset + seg_hdr_len); - if (rc) + if (rc && rc == -ENOBUFS) + goto err; + else if (rc) netdev_err(bp->dev, "Failed to retrieve coredump for seg = %d\n", seg_record->segment_id); @@ -3309,7 +3330,8 @@ err: rc); kfree(coredump.data); *dump_len += sizeof(struct bnxt_coredump_record); - + if (rc == -ENOBUFS) + netdev_err(bp->dev, "Firmware returned large coredump buffer"); return rc; } diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h index b5b65b3f8534..3998f6e809a9 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h @@ -31,6 +31,8 @@ struct bnxt_coredump { u16 total_segs; }; +#define BNXT_COREDUMP_BUF_LEN(len) ((len) - sizeof(struct bnxt_coredump_record)) + struct bnxt_hwrm_dbg_dma_info { void *dest_buf; int dest_buf_size; @@ -38,6 +40,8 @@ struct bnxt_hwrm_dbg_dma_info { u16 seq_off; u16 data_len_off; u16 segs; + u32 seg_start; + u32 buf_len; }; struct hwrm_dbg_cmn_input { diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c index b2c160947fc8..30816ec4fa91 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c @@ -113,8 +113,10 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id, { struct net_device *dev = edev->net; struct bnxt *bp = netdev_priv(dev); + struct bnxt_hw_resc *hw_resc; int max_idx, max_cp_rings; int avail_msix, idx; + int total_vecs; int rc = 0; ASSERT_RTNL(); @@ -142,7 +144,10 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id, } edev->ulp_tbl[ulp_id].msix_base = idx; edev->ulp_tbl[ulp_id].msix_requested = avail_msix; - if (bp->total_irqs < (idx + avail_msix)) { + hw_resc = &bp->hw_resc; + total_vecs = idx + avail_msix; + if (bp->total_irqs < total_vecs || + (BNXT_NEW_RM(bp) && hw_resc->resv_irqs < total_vecs)) { if (netif_running(dev)) { bnxt_close_nic(bp, true, false); rc = bnxt_open_nic(bp, true, false); @@ -156,7 +161,6 @@ static int bnxt_req_msix_vecs(struct bnxt_en_dev *edev, int ulp_id, } if (BNXT_NEW_RM(bp)) { - struct bnxt_hw_resc *hw_resc = &bp->hw_resc; int resv_msix; resv_msix = hw_resc->resv_irqs - bp->cp_nr_rings; diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h index 1fbb640e896a..4025a683fa7d 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h @@ -503,6 +503,7 @@ struct link_config { enum cc_pause requested_fc; /* flow control user has requested */ enum cc_pause fc; /* actual link flow control */ + enum cc_pause advertised_fc; /* actual advertised flow control */ enum cc_fec requested_fec; /* Forward Error Correction: */ enum cc_fec fec; /* requested and actual in use */ diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c index 76538f4cd595..f537be9cb315 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c @@ -793,8 +793,8 @@ static void get_pauseparam(struct net_device *dev, struct port_info *p = netdev_priv(dev); epause->autoneg = (p->link_cfg.requested_fc & PAUSE_AUTONEG) != 0; - epause->rx_pause = (p->link_cfg.fc & PAUSE_RX) != 0; - epause->tx_pause = (p->link_cfg.fc & PAUSE_TX) != 0; + epause->rx_pause = (p->link_cfg.advertised_fc & PAUSE_RX) != 0; + epause->tx_pause = (p->link_cfg.advertised_fc & PAUSE_TX) != 0; } static int set_pauseparam(struct net_device *dev, diff --git a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c index f2a7824da42b..3f6813daf3c1 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4/t4_hw.c @@ -4089,7 +4089,8 @@ static inline fw_port_cap32_t cc_to_fwcap_pause(enum cc_pause cc_pause) if (cc_pause & PAUSE_TX) fw_pause |= FW_PORT_CAP32_802_3_PAUSE; else - fw_pause |= FW_PORT_CAP32_802_3_ASM_DIR; + fw_pause |= FW_PORT_CAP32_802_3_ASM_DIR | + FW_PORT_CAP32_802_3_PAUSE; } else if (cc_pause & PAUSE_TX) { fw_pause |= FW_PORT_CAP32_802_3_ASM_DIR; } @@ -8563,17 +8564,17 @@ static fw_port_cap32_t lstatus_to_fwcap(u32 lstatus) void t4_handle_get_port_info(struct port_info *pi, const __be64 *rpl) { const struct fw_port_cmd *cmd = (const void *)rpl; - int action = FW_PORT_CMD_ACTION_G(be32_to_cpu(cmd->action_to_len16)); - struct adapter *adapter = pi->adapter; - struct link_config *lc = &pi->link_cfg; - int link_ok, linkdnrc; - enum fw_port_type port_type; - enum fw_port_module_type mod_type; - unsigned int speed, fc, fec; fw_port_cap32_t pcaps, acaps, lpacaps, linkattr; + struct link_config *lc = &pi->link_cfg; + struct adapter *adapter = pi->adapter; + unsigned int speed, fc, fec, adv_fc; + enum fw_port_module_type mod_type; + int action, link_ok, linkdnrc; + enum fw_port_type port_type; /* Extract the various fields from the Port Information message. */ + action = FW_PORT_CMD_ACTION_G(be32_to_cpu(cmd->action_to_len16)); switch (action) { case FW_PORT_ACTION_GET_PORT_INFO: { u32 lstatus = be32_to_cpu(cmd->u.info.lstatus_to_modtype); @@ -8611,6 +8612,7 @@ void t4_handle_get_port_info(struct port_info *pi, const __be64 *rpl) } fec = fwcap_to_cc_fec(acaps); + adv_fc = fwcap_to_cc_pause(acaps); fc = fwcap_to_cc_pause(linkattr); speed = fwcap_to_speed(linkattr); @@ -8667,7 +8669,9 @@ void t4_handle_get_port_info(struct port_info *pi, const __be64 *rpl) } if (link_ok != lc->link_ok || speed != lc->speed || - fc != lc->fc || fec != lc->fec) { /* something changed */ + fc != lc->fc || adv_fc != lc->advertised_fc || + fec != lc->fec) { + /* something changed */ if (!link_ok && lc->link_ok) { lc->link_down_rc = linkdnrc; dev_warn_ratelimited(adapter->pdev_dev, @@ -8677,6 +8681,7 @@ void t4_handle_get_port_info(struct port_info *pi, const __be64 *rpl) } lc->link_ok = link_ok; lc->speed = speed; + lc->advertised_fc = adv_fc; lc->fc = fc; lc->fec = fec; diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c index f6fc0875d5b0..f4d41f968afa 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/cxgb4vf_main.c @@ -1690,8 +1690,8 @@ static void cxgb4vf_get_pauseparam(struct net_device *dev, struct port_info *pi = netdev_priv(dev); pauseparam->autoneg = (pi->link_cfg.requested_fc & PAUSE_AUTONEG) != 0; - pauseparam->rx_pause = (pi->link_cfg.fc & PAUSE_RX) != 0; - pauseparam->tx_pause = (pi->link_cfg.fc & PAUSE_TX) != 0; + pauseparam->rx_pause = (pi->link_cfg.advertised_fc & PAUSE_RX) != 0; + pauseparam->tx_pause = (pi->link_cfg.advertised_fc & PAUSE_TX) != 0; } /* diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h b/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h index ccca67cf4487..57cfd10a99ec 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h +++ b/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_common.h @@ -135,6 +135,7 @@ struct link_config { enum cc_pause requested_fc; /* flow control user has requested */ enum cc_pause fc; /* actual link flow control */ + enum cc_pause advertised_fc; /* actual advertised flow control */ enum cc_fec auto_fec; /* Forward Error Correction: */ enum cc_fec requested_fec; /* "automatic" (IEEE 802.3), */ diff --git a/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c b/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c index 8a389d617a23..9d49ff211cc1 100644 --- a/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c +++ b/drivers/net/ethernet/chelsio/cxgb4vf/t4vf_hw.c @@ -1913,16 +1913,16 @@ static const char *t4vf_link_down_rc_str(unsigned char link_down_rc) static void t4vf_handle_get_port_info(struct port_info *pi, const struct fw_port_cmd *cmd) { - int action = FW_PORT_CMD_ACTION_G(be32_to_cpu(cmd->action_to_len16)); - struct adapter *adapter = pi->adapter; - struct link_config *lc = &pi->link_cfg; - int link_ok, linkdnrc; - enum fw_port_type port_type; - enum fw_port_module_type mod_type; - unsigned int speed, fc, fec; fw_port_cap32_t pcaps, acaps, lpacaps, linkattr; + struct link_config *lc = &pi->link_cfg; + struct adapter *adapter = pi->adapter; + unsigned int speed, fc, fec, adv_fc; + enum fw_port_module_type mod_type; + int action, link_ok, linkdnrc; + enum fw_port_type port_type; /* Extract the various fields from the Port Information message. */ + action = FW_PORT_CMD_ACTION_G(be32_to_cpu(cmd->action_to_len16)); switch (action) { case FW_PORT_ACTION_GET_PORT_INFO: { u32 lstatus = be32_to_cpu(cmd->u.info.lstatus_to_modtype); @@ -1982,6 +1982,7 @@ static void t4vf_handle_get_port_info(struct port_info *pi, } fec = fwcap_to_cc_fec(acaps); + adv_fc = fwcap_to_cc_pause(acaps); fc = fwcap_to_cc_pause(linkattr); speed = fwcap_to_speed(linkattr); @@ -2012,7 +2013,9 @@ static void t4vf_handle_get_port_info(struct port_info *pi, } if (link_ok != lc->link_ok || speed != lc->speed || - fc != lc->fc || fec != lc->fec) { /* something changed */ + fc != lc->fc || adv_fc != lc->advertised_fc || + fec != lc->fec) { + /* something changed */ if (!link_ok && lc->link_ok) { lc->link_down_rc = linkdnrc; dev_warn_ratelimited(adapter->pdev_dev, @@ -2022,6 +2025,7 @@ static void t4vf_handle_get_port_info(struct port_info *pi, } lc->link_ok = link_ok; lc->speed = speed; + lc->advertised_fc = adv_fc; lc->fc = fc; lc->fec = fec; diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c index 111b3b8239e1..ef44c6979a31 100644 --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c @@ -3674,7 +3674,7 @@ static int mvpp2_open(struct net_device *dev) valid = true; } - if (priv->hw_version == MVPP22 && port->link_irq && !port->phylink) { + if (priv->hw_version == MVPP22 && port->link_irq) { err = request_irq(port->link_irq, mvpp2_link_status_isr, 0, dev->name, port); if (err) { diff --git a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c index 544344ac4894..79057af4fe99 100644 --- a/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c +++ b/drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include "mlxfw_mfa2.h" #include "mlxfw_mfa2_file.h" @@ -548,7 +549,7 @@ mlxfw_mfa2_file_component_get(const struct mlxfw_mfa2_file *mfa2_file, comp_size = be32_to_cpu(comp->size); comp_buf_size = comp_size + mlxfw_mfa2_comp_magic_len; - comp_data = kmalloc(sizeof(*comp_data) + comp_buf_size, GFP_KERNEL); + comp_data = vzalloc(sizeof(*comp_data) + comp_buf_size); if (!comp_data) return ERR_PTR(-ENOMEM); comp_data->comp.data_size = comp_size; @@ -570,7 +571,7 @@ mlxfw_mfa2_file_component_get(const struct mlxfw_mfa2_file *mfa2_file, comp_data->comp.data = comp_data->buff + mlxfw_mfa2_comp_magic_len; return &comp_data->comp; err_out: - kfree(comp_data); + vfree(comp_data); return ERR_PTR(err); } @@ -579,7 +580,7 @@ void mlxfw_mfa2_file_component_put(struct mlxfw_mfa2_component *comp) const struct mlxfw_mfa2_comp_data *comp_data; comp_data = container_of(comp, struct mlxfw_mfa2_comp_data, comp); - kfree(comp_data); + vfree(comp_data); } void mlxfw_mfa2_file_fini(struct mlxfw_mfa2_file *mfa2_file) diff --git a/drivers/net/ethernet/mellanox/mlxsw/reg.h b/drivers/net/ethernet/mellanox/mlxsw/reg.h index 5494cf93f34c..8e42ebdbd487 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/reg.h +++ b/drivers/net/ethernet/mellanox/mlxsw/reg.h @@ -5421,6 +5421,7 @@ enum mlxsw_reg_htgt_trap_group { MLXSW_REG_HTGT_TRAP_GROUP_SP_LBERROR, MLXSW_REG_HTGT_TRAP_GROUP_SP_PTP0, MLXSW_REG_HTGT_TRAP_GROUP_SP_PTP1, + MLXSW_REG_HTGT_TRAP_GROUP_SP_VRRP, __MLXSW_REG_HTGT_TRAP_GROUP_MAX, MLXSW_REG_HTGT_TRAP_GROUP_MAX = __MLXSW_REG_HTGT_TRAP_GROUP_MAX - 1 diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c index dcf9562bce8a..3ec18fb0d479 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c @@ -4398,8 +4398,8 @@ static const struct mlxsw_listener mlxsw_sp_listener[] = { MLXSW_SP_RXL_MARK(ROUTER_ALERT_IPV6, TRAP_TO_CPU, ROUTER_EXP, false), MLXSW_SP_RXL_MARK(IPIP_DECAP_ERROR, TRAP_TO_CPU, ROUTER_EXP, false), MLXSW_SP_RXL_MARK(DECAP_ECN0, TRAP_TO_CPU, ROUTER_EXP, false), - MLXSW_SP_RXL_MARK(IPV4_VRRP, TRAP_TO_CPU, ROUTER_EXP, false), - MLXSW_SP_RXL_MARK(IPV6_VRRP, TRAP_TO_CPU, ROUTER_EXP, false), + MLXSW_SP_RXL_MARK(IPV4_VRRP, TRAP_TO_CPU, VRRP, false), + MLXSW_SP_RXL_MARK(IPV6_VRRP, TRAP_TO_CPU, VRRP, false), /* PKT Sample trap */ MLXSW_RXL(mlxsw_sp_rx_listener_sample_func, PKT_SAMPLE, MIRROR_TO_CPU, false, SP_IP2ME, DISCARD), @@ -4483,6 +4483,10 @@ static int mlxsw_sp_cpu_policers_set(struct mlxsw_core *mlxsw_core) rate = 19 * 1024; burst_size = 12; break; + case MLXSW_REG_HTGT_TRAP_GROUP_SP_VRRP: + rate = 360; + burst_size = 7; + break; default: continue; } @@ -4522,6 +4526,7 @@ static int mlxsw_sp_trap_groups_set(struct mlxsw_core *mlxsw_core) case MLXSW_REG_HTGT_TRAP_GROUP_SP_OSPF: case MLXSW_REG_HTGT_TRAP_GROUP_SP_PIM: case MLXSW_REG_HTGT_TRAP_GROUP_SP_PTP0: + case MLXSW_REG_HTGT_TRAP_GROUP_SP_VRRP: priority = 5; tc = 5; break; diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c index 210ebc91d3d6..efdf8cb5114c 100644 --- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c +++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c @@ -6985,6 +6985,9 @@ static int mlxsw_sp_router_port_check_rif_addr(struct mlxsw_sp *mlxsw_sp, for (i = 0; i < MLXSW_CORE_RES_GET(mlxsw_sp->core, MAX_RIFS); i++) { rif = mlxsw_sp->router->rifs[i]; + if (rif && rif->ops && + rif->ops->type == MLXSW_SP_RIF_TYPE_IPIP_LB) + continue; if (rif && rif->dev && rif->dev != dev && !ether_addr_equal_masked(rif->dev->dev_addr, dev_addr, mlxsw_sp->mac_mask)) { diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c index 306da8f6b7d5..33ce139f090f 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-meson8b.c @@ -112,6 +112,14 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac) struct device *dev = dwmac->dev; const char *parent_name, *mux_parent_names[MUX_CLK_NUM_PARENTS]; struct meson8b_dwmac_clk_configs *clk_configs; + static const struct clk_div_table div_table[] = { + { .div = 2, .val = 2, }, + { .div = 3, .val = 3, }, + { .div = 4, .val = 4, }, + { .div = 5, .val = 5, }, + { .div = 6, .val = 6, }, + { .div = 7, .val = 7, }, + }; clk_configs = devm_kzalloc(dev, sizeof(*clk_configs), GFP_KERNEL); if (!clk_configs) @@ -146,9 +154,9 @@ static int meson8b_init_rgmii_tx_clk(struct meson8b_dwmac *dwmac) clk_configs->m250_div.reg = dwmac->regs + PRG_ETH0; clk_configs->m250_div.shift = PRG_ETH0_CLK_M250_DIV_SHIFT; clk_configs->m250_div.width = PRG_ETH0_CLK_M250_DIV_WIDTH; - clk_configs->m250_div.flags = CLK_DIVIDER_ONE_BASED | - CLK_DIVIDER_ALLOW_ZERO | - CLK_DIVIDER_ROUND_CLOSEST; + clk_configs->m250_div.table = div_table; + clk_configs->m250_div.flags = CLK_DIVIDER_ALLOW_ZERO | + CLK_DIVIDER_ROUND_CLOSEST; clk = meson8b_dwmac_register_clk(dwmac, "m250_div", &parent_name, 1, &clk_divider_ops, &clk_configs->m250_div.hw); diff --git a/drivers/net/gtp.c b/drivers/net/gtp.c index ecfe26215935..fca471e27f39 100644 --- a/drivers/net/gtp.c +++ b/drivers/net/gtp.c @@ -38,7 +38,6 @@ struct pdp_ctx { struct hlist_node hlist_addr; union { - u64 tid; struct { u64 tid; u16 flow; @@ -541,7 +540,7 @@ static int gtp_build_skb_ip4(struct sk_buff *skb, struct net_device *dev, mtu = dst_mtu(&rt->dst); } - rt->dst.ops->update_pmtu(&rt->dst, NULL, skb, mtu); + rt->dst.ops->update_pmtu(&rt->dst, NULL, skb, mtu, false); if (!skb_is_gso(skb) && (iph->frag_off & htons(IP_DF)) && mtu < ntohs(iph->tot_len)) { @@ -641,9 +640,16 @@ static void gtp_link_setup(struct net_device *dev) } static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize); -static void gtp_hashtable_free(struct gtp_dev *gtp); static int gtp_encap_enable(struct gtp_dev *gtp, struct nlattr *data[]); +static void gtp_destructor(struct net_device *dev) +{ + struct gtp_dev *gtp = netdev_priv(dev); + + kfree(gtp->addr_hash); + kfree(gtp->tid_hash); +} + static int gtp_newlink(struct net *src_net, struct net_device *dev, struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack) @@ -661,10 +667,13 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev, if (err < 0) return err; - if (!data[IFLA_GTP_PDP_HASHSIZE]) + if (!data[IFLA_GTP_PDP_HASHSIZE]) { hashsize = 1024; - else + } else { hashsize = nla_get_u32(data[IFLA_GTP_PDP_HASHSIZE]); + if (!hashsize) + hashsize = 1024; + } err = gtp_hashtable_new(gtp, hashsize); if (err < 0) @@ -678,13 +687,15 @@ static int gtp_newlink(struct net *src_net, struct net_device *dev, gn = net_generic(dev_net(dev), gtp_net_id); list_add_rcu(>p->list, &gn->gtp_dev_list); + dev->priv_destructor = gtp_destructor; netdev_dbg(dev, "registered new GTP interface\n"); return 0; out_hashtable: - gtp_hashtable_free(gtp); + kfree(gtp->addr_hash); + kfree(gtp->tid_hash); out_encap: gtp_encap_disable(gtp); return err; @@ -693,8 +704,13 @@ out_encap: static void gtp_dellink(struct net_device *dev, struct list_head *head) { struct gtp_dev *gtp = netdev_priv(dev); + struct pdp_ctx *pctx; + int i; + + for (i = 0; i < gtp->hash_size; i++) + hlist_for_each_entry_rcu(pctx, >p->tid_hash[i], hlist_tid) + pdp_context_delete(pctx); - gtp_hashtable_free(gtp); list_del_rcu(>p->list); unregister_netdevice_queue(dev, head); } @@ -772,20 +788,6 @@ err1: return -ENOMEM; } -static void gtp_hashtable_free(struct gtp_dev *gtp) -{ - struct pdp_ctx *pctx; - int i; - - for (i = 0; i < gtp->hash_size; i++) - hlist_for_each_entry_rcu(pctx, >p->tid_hash[i], hlist_tid) - pdp_context_delete(pctx); - - synchronize_rcu(); - kfree(gtp->addr_hash); - kfree(gtp->tid_hash); -} - static struct sock *gtp_encap_enable_socket(int fd, int type, struct gtp_dev *gtp) { @@ -926,24 +928,31 @@ static void ipv4_pdp_fill(struct pdp_ctx *pctx, struct genl_info *info) } } -static int ipv4_pdp_add(struct gtp_dev *gtp, struct sock *sk, - struct genl_info *info) +static int gtp_pdp_add(struct gtp_dev *gtp, struct sock *sk, + struct genl_info *info) { + struct pdp_ctx *pctx, *pctx_tid = NULL; struct net_device *dev = gtp->dev; u32 hash_ms, hash_tid = 0; - struct pdp_ctx *pctx; + unsigned int version; bool found = false; __be32 ms_addr; ms_addr = nla_get_be32(info->attrs[GTPA_MS_ADDRESS]); hash_ms = ipv4_hashfn(ms_addr) % gtp->hash_size; + version = nla_get_u32(info->attrs[GTPA_VERSION]); - hlist_for_each_entry_rcu(pctx, >p->addr_hash[hash_ms], hlist_addr) { - if (pctx->ms_addr_ip4.s_addr == ms_addr) { - found = true; - break; - } - } + pctx = ipv4_pdp_find(gtp, ms_addr); + if (pctx) + found = true; + if (version == GTP_V0) + pctx_tid = gtp0_pdp_find(gtp, + nla_get_u64(info->attrs[GTPA_TID])); + else if (version == GTP_V1) + pctx_tid = gtp1_pdp_find(gtp, + nla_get_u32(info->attrs[GTPA_I_TEI])); + if (pctx_tid) + found = true; if (found) { if (info->nlhdr->nlmsg_flags & NLM_F_EXCL) @@ -951,6 +960,11 @@ static int ipv4_pdp_add(struct gtp_dev *gtp, struct sock *sk, if (info->nlhdr->nlmsg_flags & NLM_F_REPLACE) return -EOPNOTSUPP; + if (pctx && pctx_tid) + return -EEXIST; + if (!pctx) + pctx = pctx_tid; + ipv4_pdp_fill(pctx, info); if (pctx->gtp_version == GTP_V0) @@ -1074,7 +1088,7 @@ static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info) goto out_unlock; } - err = ipv4_pdp_add(gtp, sk, info); + err = gtp_pdp_add(gtp, sk, info); out_unlock: rcu_read_unlock(); @@ -1232,43 +1246,46 @@ static int gtp_genl_dump_pdp(struct sk_buff *skb, struct netlink_callback *cb) { struct gtp_dev *last_gtp = (struct gtp_dev *)cb->args[2], *gtp; + int i, j, bucket = cb->args[0], skip = cb->args[1]; struct net *net = sock_net(skb->sk); - struct gtp_net *gn = net_generic(net, gtp_net_id); - unsigned long tid = cb->args[1]; - int i, k = cb->args[0], ret; struct pdp_ctx *pctx; + struct gtp_net *gn; + + gn = net_generic(net, gtp_net_id); if (cb->args[4]) return 0; + rcu_read_lock(); list_for_each_entry_rcu(gtp, &gn->gtp_dev_list, list) { if (last_gtp && last_gtp != gtp) continue; else last_gtp = NULL; - for (i = k; i < gtp->hash_size; i++) { - hlist_for_each_entry_rcu(pctx, >p->tid_hash[i], hlist_tid) { - if (tid && tid != pctx->u.tid) - continue; - else - tid = 0; - - ret = gtp_genl_fill_info(skb, - NETLINK_CB(cb->skb).portid, - cb->nlh->nlmsg_seq, - cb->nlh->nlmsg_type, pctx); - if (ret < 0) { + for (i = bucket; i < gtp->hash_size; i++) { + j = 0; + hlist_for_each_entry_rcu(pctx, >p->tid_hash[i], + hlist_tid) { + if (j >= skip && + gtp_genl_fill_info(skb, + NETLINK_CB(cb->skb).portid, + cb->nlh->nlmsg_seq, + cb->nlh->nlmsg_type, pctx)) { cb->args[0] = i; - cb->args[1] = pctx->u.tid; + cb->args[1] = j; cb->args[2] = (unsigned long)gtp; goto out; } + j++; } + skip = 0; } + bucket = 0; } cb->args[4] = 1; out: + rcu_read_unlock(); return skb->len; } diff --git a/drivers/net/hamradio/6pack.c b/drivers/net/hamradio/6pack.c index 23281aeeb222..71d6629e65c9 100644 --- a/drivers/net/hamradio/6pack.c +++ b/drivers/net/hamradio/6pack.c @@ -654,10 +654,10 @@ static void sixpack_close(struct tty_struct *tty) { struct sixpack *sp; - write_lock_bh(&disc_data_lock); + write_lock_irq(&disc_data_lock); sp = tty->disc_data; tty->disc_data = NULL; - write_unlock_bh(&disc_data_lock); + write_unlock_irq(&disc_data_lock); if (!sp) return; diff --git a/drivers/net/hamradio/mkiss.c b/drivers/net/hamradio/mkiss.c index c5bfa19ddb93..deef14215110 100644 --- a/drivers/net/hamradio/mkiss.c +++ b/drivers/net/hamradio/mkiss.c @@ -773,10 +773,10 @@ static void mkiss_close(struct tty_struct *tty) { struct mkiss *ax; - write_lock_bh(&disc_data_lock); + write_lock_irq(&disc_data_lock); ax = tty->disc_data; tty->disc_data = NULL; - write_unlock_bh(&disc_data_lock); + write_unlock_irq(&disc_data_lock); if (!ax) return; diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c index abaf8156d19d..e3d3c9097ff1 100644 --- a/drivers/net/hyperv/rndis_filter.c +++ b/drivers/net/hyperv/rndis_filter.c @@ -1165,6 +1165,9 @@ int rndis_set_subchannel(struct net_device *ndev, wait_event(nvdev->subchan_open, atomic_read(&nvdev->open_chn) == nvdev->num_chn); + for (i = 0; i < VRSS_SEND_TAB_SIZE; i++) + ndev_ctx->tx_table[i] = i % nvdev->num_chn; + /* ignore failures from setting rss parameters, still have channels */ if (dev_info) rndis_filter_set_rss_param(rdev, dev_info->rss_key); @@ -1174,9 +1177,6 @@ int rndis_set_subchannel(struct net_device *ndev, netif_set_real_num_tx_queues(ndev, nvdev->num_chn); netif_set_real_num_rx_queues(ndev, nvdev->num_chn); - for (i = 0; i < VRSS_SEND_TAB_SIZE; i++) - ndev_ctx->tx_table[i] = i % nvdev->num_chn; - return 0; } diff --git a/drivers/net/phy/aquantia_main.c b/drivers/net/phy/aquantia_main.c index 3b29d381116f..975789d9349d 100644 --- a/drivers/net/phy/aquantia_main.c +++ b/drivers/net/phy/aquantia_main.c @@ -627,6 +627,8 @@ static struct phy_driver aqr_driver[] = { .config_intr = aqr_config_intr, .ack_interrupt = aqr_ack_interrupt, .read_status = aqr_read_status, + .suspend = aqr107_suspend, + .resume = aqr107_resume, }, { PHY_ID_MATCH_MODEL(PHY_ID_AQR106), diff --git a/drivers/net/phy/phylink.c b/drivers/net/phy/phylink.c index 536236fdb232..bf5bbb565cf5 100644 --- a/drivers/net/phy/phylink.c +++ b/drivers/net/phy/phylink.c @@ -444,8 +444,7 @@ static void phylink_mac_link_up(struct phylink *pl, pl->cur_interface = link_state.interface; pl->ops->mac_link_up(pl->config, pl->link_an_mode, - pl->phy_state.interface, - pl->phydev); + pl->cur_interface, pl->phydev); if (ndev) netif_carrier_on(ndev); diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c index 040cec17d3ad..b0b7eca1754e 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/drv.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/drv.c @@ -1111,18 +1111,18 @@ static int iwl_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) /* same thing for QuZ... */ if (iwl_trans->hw_rev == CSR_HW_REV_TYPE_QUZ) { - if (iwl_trans->cfg == &iwl_ax101_cfg_qu_hr) - iwl_trans->cfg = &iwl_ax101_cfg_quz_hr; - else if (iwl_trans->cfg == &iwl_ax201_cfg_qu_hr) - iwl_trans->cfg = &iwl_ax201_cfg_quz_hr; - else if (iwl_trans->cfg == &iwl9461_2ac_cfg_qu_b0_jf_b0) - iwl_trans->cfg = &iwl9461_2ac_cfg_quz_a0_jf_b0_soc; - else if (iwl_trans->cfg == &iwl9462_2ac_cfg_qu_b0_jf_b0) - iwl_trans->cfg = &iwl9462_2ac_cfg_quz_a0_jf_b0_soc; - else if (iwl_trans->cfg == &iwl9560_2ac_cfg_qu_b0_jf_b0) - iwl_trans->cfg = &iwl9560_2ac_cfg_quz_a0_jf_b0_soc; - else if (iwl_trans->cfg == &iwl9560_2ac_160_cfg_qu_b0_jf_b0) - iwl_trans->cfg = &iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc; + if (cfg == &iwl_ax101_cfg_qu_hr) + cfg = &iwl_ax101_cfg_quz_hr; + else if (cfg == &iwl_ax201_cfg_qu_hr) + cfg = &iwl_ax201_cfg_quz_hr; + else if (cfg == &iwl9461_2ac_cfg_qu_b0_jf_b0) + cfg = &iwl9461_2ac_cfg_quz_a0_jf_b0_soc; + else if (cfg == &iwl9462_2ac_cfg_qu_b0_jf_b0) + cfg = &iwl9462_2ac_cfg_quz_a0_jf_b0_soc; + else if (cfg == &iwl9560_2ac_cfg_qu_b0_jf_b0) + cfg = &iwl9560_2ac_cfg_quz_a0_jf_b0_soc; + else if (cfg == &iwl9560_2ac_160_cfg_qu_b0_jf_b0) + cfg = &iwl9560_2ac_160_cfg_quz_a0_jf_b0_soc; } #endif diff --git a/drivers/nvdimm/btt.c b/drivers/nvdimm/btt.c index 3e9f45aec8d1..5129543a0473 100644 --- a/drivers/nvdimm/btt.c +++ b/drivers/nvdimm/btt.c @@ -1261,11 +1261,11 @@ static int btt_read_pg(struct btt *btt, struct bio_integrity_payload *bip, ret = btt_data_read(arena, page, off, postmap, cur_len); if (ret) { - int rc; - /* Media error - set the e_flag */ - rc = btt_map_write(arena, premap, postmap, 0, 1, - NVDIMM_IO_ATOMIC); + if (btt_map_write(arena, premap, postmap, 0, 1, NVDIMM_IO_ATOMIC)) + dev_warn_ratelimited(to_dev(arena), + "Error persistently tracking bad blocks at %#x\n", + premap); goto out_rtt; } diff --git a/drivers/of/unittest.c b/drivers/of/unittest.c index 92e895d86458..ca7823eef2b4 100644 --- a/drivers/of/unittest.c +++ b/drivers/of/unittest.c @@ -1146,8 +1146,10 @@ static void attach_node_and_children(struct device_node *np) full_name = kasprintf(GFP_KERNEL, "%pOF", np); if (!strcmp(full_name, "/__local_fixups__") || - !strcmp(full_name, "/__fixups__")) + !strcmp(full_name, "/__fixups__")) { + kfree(full_name); return; + } dup = of_find_node_by_path(full_name); kfree(full_name); diff --git a/drivers/pci/hotplug/rpaphp_core.c b/drivers/pci/hotplug/rpaphp_core.c index 18627bb21e9e..32eab1776cfe 100644 --- a/drivers/pci/hotplug/rpaphp_core.c +++ b/drivers/pci/hotplug/rpaphp_core.c @@ -154,11 +154,11 @@ static enum pci_bus_speed get_max_bus_speed(struct slot *slot) return speed; } -static int get_children_props(struct device_node *dn, const int **drc_indexes, - const int **drc_names, const int **drc_types, - const int **drc_power_domains) +static int get_children_props(struct device_node *dn, const __be32 **drc_indexes, + const __be32 **drc_names, const __be32 **drc_types, + const __be32 **drc_power_domains) { - const int *indexes, *names, *types, *domains; + const __be32 *indexes, *names, *types, *domains; indexes = of_get_property(dn, "ibm,drc-indexes", NULL); names = of_get_property(dn, "ibm,drc-names", NULL); @@ -194,8 +194,8 @@ static int rpaphp_check_drc_props_v1(struct device_node *dn, char *drc_name, char *drc_type, unsigned int my_index) { char *name_tmp, *type_tmp; - const int *indexes, *names; - const int *types, *domains; + const __be32 *indexes, *names; + const __be32 *types, *domains; int i, rc; rc = get_children_props(dn->parent, &indexes, &names, &types, &domains); @@ -208,7 +208,7 @@ static int rpaphp_check_drc_props_v1(struct device_node *dn, char *drc_name, /* Iterate through parent properties, looking for my-drc-index */ for (i = 0; i < be32_to_cpu(indexes[0]); i++) { - if ((unsigned int) indexes[i + 1] == my_index) + if (be32_to_cpu(indexes[i + 1]) == my_index) break; name_tmp += (strlen(name_tmp) + 1); @@ -239,6 +239,8 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name, value = of_prop_next_u32(info, NULL, &entries); if (!value) return -EINVAL; + else + value++; for (j = 0; j < entries; j++) { of_read_drc_info_cell(&info, &value, &drc); @@ -246,9 +248,10 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name, /* Should now know end of current entry */ /* Found it */ - if (my_index <= drc.last_drc_index) { + if (my_index >= drc.drc_index_start && my_index <= drc.last_drc_index) { + int index = my_index - drc.drc_index_start; sprintf(cell_drc_name, "%s%d", drc.drc_name_prefix, - my_index); + drc.drc_name_suffix_start + index); break; } } @@ -265,7 +268,7 @@ static int rpaphp_check_drc_props_v2(struct device_node *dn, char *drc_name, int rpaphp_check_drc_props(struct device_node *dn, char *drc_name, char *drc_type) { - const unsigned int *my_index; + const __be32 *my_index; my_index = of_get_property(dn, "ibm,my-drc-index", NULL); if (!my_index) { @@ -273,12 +276,12 @@ int rpaphp_check_drc_props(struct device_node *dn, char *drc_name, return -EINVAL; } - if (firmware_has_feature(FW_FEATURE_DRC_INFO)) + if (of_find_property(dn->parent, "ibm,drc-info", NULL)) return rpaphp_check_drc_props_v2(dn, drc_name, drc_type, - *my_index); + be32_to_cpu(*my_index)); else return rpaphp_check_drc_props_v1(dn, drc_name, drc_type, - *my_index); + be32_to_cpu(*my_index)); } EXPORT_SYMBOL_GPL(rpaphp_check_drc_props); @@ -309,10 +312,11 @@ static int is_php_type(char *drc_type) * for built-in pci slots (even when the built-in slots are * dlparable.) */ -static int is_php_dn(struct device_node *dn, const int **indexes, - const int **names, const int **types, const int **power_domains) +static int is_php_dn(struct device_node *dn, const __be32 **indexes, + const __be32 **names, const __be32 **types, + const __be32 **power_domains) { - const int *drc_types; + const __be32 *drc_types; int rc; rc = get_children_props(dn, indexes, names, &drc_types, power_domains); @@ -347,7 +351,7 @@ int rpaphp_add_slot(struct device_node *dn) struct slot *slot; int retval = 0; int i; - const int *indexes, *names, *types, *power_domains; + const __be32 *indexes, *names, *types, *power_domains; char *name, *type; if (!dn->name || strcmp(dn->name, "pci")) diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig index ae21d08c65e8..1cab99320514 100644 --- a/drivers/platform/x86/Kconfig +++ b/drivers/platform/x86/Kconfig @@ -806,7 +806,6 @@ config PEAQ_WMI tristate "PEAQ 2-in-1 WMI hotkey driver" depends on ACPI_WMI depends on INPUT - select INPUT_POLLDEV help Say Y here if you want to support WMI-based hotkeys on PEAQ 2-in-1s. diff --git a/drivers/platform/x86/intel_pmc_core.c b/drivers/platform/x86/intel_pmc_core.c index 94a008efb09b..571b4754477c 100644 --- a/drivers/platform/x86/intel_pmc_core.c +++ b/drivers/platform/x86/intel_pmc_core.c @@ -158,8 +158,9 @@ static const struct pmc_reg_map spt_reg_map = { .pm_vric1_offset = SPT_PMC_VRIC1_OFFSET, }; -/* Cannonlake: PGD PFET Enable Ack Status Register(s) bitmap */ +/* Cannon Lake: PGD PFET Enable Ack Status Register(s) bitmap */ static const struct pmc_bit_map cnp_pfear_map[] = { + /* Reserved for Cannon Lake but valid for Comet Lake */ {"PMC", BIT(0)}, {"OPI-DMI", BIT(1)}, {"SPI/eSPI", BIT(2)}, @@ -185,7 +186,7 @@ static const struct pmc_bit_map cnp_pfear_map[] = { {"SDX", BIT(4)}, {"SPE", BIT(5)}, {"Fuse", BIT(6)}, - /* Reserved for Cannonlake but valid for Icelake */ + /* Reserved for Cannon Lake but valid for Ice Lake and Comet Lake */ {"SBR8", BIT(7)}, {"CSME_FSC", BIT(0)}, @@ -229,12 +230,12 @@ static const struct pmc_bit_map cnp_pfear_map[] = { {"HDA_PGD4", BIT(2)}, {"HDA_PGD5", BIT(3)}, {"HDA_PGD6", BIT(4)}, - /* Reserved for Cannonlake but valid for Icelake */ + /* Reserved for Cannon Lake but valid for Ice Lake and Comet Lake */ {"PSF6", BIT(5)}, {"PSF7", BIT(6)}, {"PSF8", BIT(7)}, - /* Icelake generation onwards only */ + /* Ice Lake generation onwards only */ {"RES_65", BIT(0)}, {"RES_66", BIT(1)}, {"RES_67", BIT(2)}, @@ -324,7 +325,7 @@ static const struct pmc_bit_map cnp_ltr_show_map[] = { {"ISH", CNP_PMC_LTR_ISH}, {"UFSX2", CNP_PMC_LTR_UFSX2}, {"EMMC", CNP_PMC_LTR_EMMC}, - /* Reserved for Cannonlake but valid for Icelake */ + /* Reserved for Cannon Lake but valid for Ice Lake */ {"WIGIG", ICL_PMC_LTR_WIGIG}, /* Below two cannot be used for LTR_IGNORE */ {"CURRENT_PLATFORM", CNP_PMC_LTR_CUR_PLT}, @@ -813,6 +814,8 @@ static const struct x86_cpu_id intel_pmc_core_ids[] = { INTEL_CPU_FAM6(CANNONLAKE_L, cnp_reg_map), INTEL_CPU_FAM6(ICELAKE_L, icl_reg_map), INTEL_CPU_FAM6(ICELAKE_NNPI, icl_reg_map), + INTEL_CPU_FAM6(COMETLAKE, cnp_reg_map), + INTEL_CPU_FAM6(COMETLAKE_L, cnp_reg_map), {} }; @@ -871,8 +874,8 @@ static int pmc_core_probe(struct platform_device *pdev) pmcdev->map = (struct pmc_reg_map *)cpu_id->driver_data; /* - * Coffeelake has CPU ID of Kabylake and Cannonlake PCH. So here - * Sunrisepoint PCH regmap can't be used. Use Cannonlake PCH regmap + * Coffee Lake has CPU ID of Kaby Lake and Cannon Lake PCH. So here + * Sunrisepoint PCH regmap can't be used. Use Cannon Lake PCH regmap * in this case. */ if (pmcdev->map == &spt_reg_map && !pci_dev_present(pmc_pci_ids)) diff --git a/drivers/platform/x86/peaq-wmi.c b/drivers/platform/x86/peaq-wmi.c index fdeb3624c529..cf9c44c20a82 100644 --- a/drivers/platform/x86/peaq-wmi.c +++ b/drivers/platform/x86/peaq-wmi.c @@ -6,7 +6,7 @@ #include #include -#include +#include #include #include @@ -18,8 +18,7 @@ MODULE_ALIAS("wmi:"PEAQ_DOLBY_BUTTON_GUID); -static unsigned int peaq_ignore_events_counter; -static struct input_polled_dev *peaq_poll_dev; +static struct input_dev *peaq_poll_dev; /* * The Dolby button (yes really a Dolby button) causes an ACPI variable to get @@ -28,8 +27,10 @@ static struct input_polled_dev *peaq_poll_dev; * (if polling after the release) or twice (polling between press and release). * We ignore events for 0.5s after the first event to avoid reporting 2 presses. */ -static void peaq_wmi_poll(struct input_polled_dev *dev) +static void peaq_wmi_poll(struct input_dev *input_dev) { + static unsigned long last_event_time; + static bool had_events; union acpi_object obj; acpi_status status; u32 dummy = 0; @@ -44,22 +45,25 @@ static void peaq_wmi_poll(struct input_polled_dev *dev) return; if (obj.type != ACPI_TYPE_INTEGER) { - dev_err(&peaq_poll_dev->input->dev, + dev_err(&input_dev->dev, "Error WMBC did not return an integer\n"); return; } - if (peaq_ignore_events_counter && peaq_ignore_events_counter--) + if (!obj.integer.value) return; - if (obj.integer.value) { - input_event(peaq_poll_dev->input, EV_KEY, KEY_SOUND, 1); - input_sync(peaq_poll_dev->input); - input_event(peaq_poll_dev->input, EV_KEY, KEY_SOUND, 0); - input_sync(peaq_poll_dev->input); - peaq_ignore_events_counter = max(1u, - PEAQ_POLL_IGNORE_MS / peaq_poll_dev->poll_interval); - } + if (had_events && time_before(jiffies, last_event_time + + msecs_to_jiffies(PEAQ_POLL_IGNORE_MS))) + return; + + input_event(input_dev, EV_KEY, KEY_SOUND, 1); + input_sync(input_dev); + input_event(input_dev, EV_KEY, KEY_SOUND, 0); + input_sync(input_dev); + + last_event_time = jiffies; + had_events = true; } /* Some other devices (Shuttle XS35) use the same WMI GUID for other purposes */ @@ -75,6 +79,8 @@ static const struct dmi_system_id peaq_dmi_table[] __initconst = { static int __init peaq_wmi_init(void) { + int err; + /* WMI GUID is not unique, also check for a DMI match */ if (!dmi_check_system(peaq_dmi_table)) return -ENODEV; @@ -82,24 +88,36 @@ static int __init peaq_wmi_init(void) if (!wmi_has_guid(PEAQ_DOLBY_BUTTON_GUID)) return -ENODEV; - peaq_poll_dev = input_allocate_polled_device(); + peaq_poll_dev = input_allocate_device(); if (!peaq_poll_dev) return -ENOMEM; - peaq_poll_dev->poll = peaq_wmi_poll; - peaq_poll_dev->poll_interval = PEAQ_POLL_INTERVAL_MS; - peaq_poll_dev->poll_interval_max = PEAQ_POLL_MAX_MS; - peaq_poll_dev->input->name = "PEAQ WMI hotkeys"; - peaq_poll_dev->input->phys = "wmi/input0"; - peaq_poll_dev->input->id.bustype = BUS_HOST; - input_set_capability(peaq_poll_dev->input, EV_KEY, KEY_SOUND); + peaq_poll_dev->name = "PEAQ WMI hotkeys"; + peaq_poll_dev->phys = "wmi/input0"; + peaq_poll_dev->id.bustype = BUS_HOST; + input_set_capability(peaq_poll_dev, EV_KEY, KEY_SOUND); - return input_register_polled_device(peaq_poll_dev); + err = input_setup_polling(peaq_poll_dev, peaq_wmi_poll); + if (err) + goto err_out; + + input_set_poll_interval(peaq_poll_dev, PEAQ_POLL_INTERVAL_MS); + input_set_max_poll_interval(peaq_poll_dev, PEAQ_POLL_MAX_MS); + + err = input_register_device(peaq_poll_dev); + if (err) + goto err_out; + + return 0; + +err_out: + input_free_device(peaq_poll_dev); + return err; } static void __exit peaq_wmi_exit(void) { - input_unregister_polled_device(peaq_poll_dev); + input_unregister_device(peaq_poll_dev); } module_init(peaq_wmi_init); diff --git a/drivers/ptp/ptp_clock.c b/drivers/ptp/ptp_clock.c index e60eab7f8a61..61fafe0374ce 100644 --- a/drivers/ptp/ptp_clock.c +++ b/drivers/ptp/ptp_clock.c @@ -166,9 +166,9 @@ static struct posix_clock_operations ptp_clock_ops = { .read = ptp_read, }; -static void delete_ptp_clock(struct posix_clock *pc) +static void ptp_clock_release(struct device *dev) { - struct ptp_clock *ptp = container_of(pc, struct ptp_clock, clock); + struct ptp_clock *ptp = container_of(dev, struct ptp_clock, dev); mutex_destroy(&ptp->tsevq_mux); mutex_destroy(&ptp->pincfg_mux); @@ -213,7 +213,6 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, } ptp->clock.ops = ptp_clock_ops; - ptp->clock.release = delete_ptp_clock; ptp->info = info; ptp->devid = MKDEV(major, index); ptp->index = index; @@ -236,15 +235,6 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, if (err) goto no_pin_groups; - /* Create a new device in our class. */ - ptp->dev = device_create_with_groups(ptp_class, parent, ptp->devid, - ptp, ptp->pin_attr_groups, - "ptp%d", ptp->index); - if (IS_ERR(ptp->dev)) { - err = PTR_ERR(ptp->dev); - goto no_device; - } - /* Register a new PPS source. */ if (info->pps) { struct pps_source_info pps; @@ -260,8 +250,18 @@ struct ptp_clock *ptp_clock_register(struct ptp_clock_info *info, } } - /* Create a posix clock. */ - err = posix_clock_register(&ptp->clock, ptp->devid); + /* Initialize a new device of our class in our clock structure. */ + device_initialize(&ptp->dev); + ptp->dev.devt = ptp->devid; + ptp->dev.class = ptp_class; + ptp->dev.parent = parent; + ptp->dev.groups = ptp->pin_attr_groups; + ptp->dev.release = ptp_clock_release; + dev_set_drvdata(&ptp->dev, ptp); + dev_set_name(&ptp->dev, "ptp%d", ptp->index); + + /* Create a posix clock and link it to the device. */ + err = posix_clock_register(&ptp->clock, &ptp->dev); if (err) { pr_err("failed to create posix clock\n"); goto no_clock; @@ -273,8 +273,6 @@ no_clock: if (ptp->pps_source) pps_unregister_source(ptp->pps_source); no_pps: - device_destroy(ptp_class, ptp->devid); -no_device: ptp_cleanup_pin_groups(ptp); no_pin_groups: if (ptp->kworker) @@ -304,7 +302,6 @@ int ptp_clock_unregister(struct ptp_clock *ptp) if (ptp->pps_source) pps_unregister_source(ptp->pps_source); - device_destroy(ptp_class, ptp->devid); ptp_cleanup_pin_groups(ptp); posix_clock_unregister(&ptp->clock); diff --git a/drivers/ptp/ptp_private.h b/drivers/ptp/ptp_private.h index 9171d42468fd..6b97155148f1 100644 --- a/drivers/ptp/ptp_private.h +++ b/drivers/ptp/ptp_private.h @@ -28,7 +28,7 @@ struct timestamp_event_queue { struct ptp_clock { struct posix_clock clock; - struct device *dev; + struct device dev; struct ptp_clock_info *info; dev_t devid; int index; /* index into clocks.map */ diff --git a/drivers/s390/crypto/zcrypt_error.h b/drivers/s390/crypto/zcrypt_error.h index f34ee41cbed8..4f4dd9d727c9 100644 --- a/drivers/s390/crypto/zcrypt_error.h +++ b/drivers/s390/crypto/zcrypt_error.h @@ -61,6 +61,7 @@ struct error_hdr { #define REP82_ERROR_EVEN_MOD_IN_OPND 0x85 #define REP82_ERROR_RESERVED_FIELD 0x88 #define REP82_ERROR_INVALID_DOMAIN_PENDING 0x8A +#define REP82_ERROR_FILTERED_BY_HYPERVISOR 0x8B #define REP82_ERROR_TRANSPORT_FAIL 0x90 #define REP82_ERROR_PACKET_TRUNCATED 0xA0 #define REP82_ERROR_ZERO_BUFFER_LEN 0xB0 @@ -91,6 +92,7 @@ static inline int convert_error(struct zcrypt_queue *zq, case REP82_ERROR_INVALID_DOMAIN_PRECHECK: case REP82_ERROR_INVALID_DOMAIN_PENDING: case REP82_ERROR_INVALID_SPECIAL_CMD: + case REP82_ERROR_FILTERED_BY_HYPERVISOR: // REP88_ERROR_INVALID_KEY // '82' CEX2A // REP88_ERROR_OPERAND // '84' CEX2A // REP88_ERROR_OPERAND_EVEN_MOD // '85' CEX2A diff --git a/drivers/scsi/NCR5380.c b/drivers/scsi/NCR5380.c index 536426f25e86..d4401c768a0c 100644 --- a/drivers/scsi/NCR5380.c +++ b/drivers/scsi/NCR5380.c @@ -129,6 +129,9 @@ #define NCR5380_release_dma_irq(x) #endif +static unsigned int disconnect_mask = ~0; +module_param(disconnect_mask, int, 0444); + static int do_abort(struct Scsi_Host *); static void do_reset(struct Scsi_Host *); static void bus_reset_cleanup(struct Scsi_Host *); @@ -954,7 +957,8 @@ static bool NCR5380_select(struct Scsi_Host *instance, struct scsi_cmnd *cmd) int err; bool ret = true; bool can_disconnect = instance->irq != NO_IRQ && - cmd->cmnd[0] != REQUEST_SENSE; + cmd->cmnd[0] != REQUEST_SENSE && + (disconnect_mask & BIT(scmd_id(cmd))); NCR5380_dprint(NDEBUG_ARBITRATION, instance); dsprintk(NDEBUG_ARBITRATION, instance, "starting arbitration, id = %d\n", diff --git a/drivers/scsi/atari_scsi.c b/drivers/scsi/atari_scsi.c index e809493d0d06..a82b63a66635 100644 --- a/drivers/scsi/atari_scsi.c +++ b/drivers/scsi/atari_scsi.c @@ -742,7 +742,7 @@ static int __init atari_scsi_probe(struct platform_device *pdev) atari_scsi_template.sg_tablesize = SG_ALL; } else { atari_scsi_template.can_queue = 1; - atari_scsi_template.sg_tablesize = SG_NONE; + atari_scsi_template.sg_tablesize = 1; } if (setup_can_queue > 0) @@ -751,8 +751,8 @@ static int __init atari_scsi_probe(struct platform_device *pdev) if (setup_cmd_per_lun > 0) atari_scsi_template.cmd_per_lun = setup_cmd_per_lun; - /* Leave sg_tablesize at 0 on a Falcon! */ - if (ATARIHW_PRESENT(TT_SCSI) && setup_sg_tablesize >= 0) + /* Don't increase sg_tablesize on Falcon! */ + if (ATARIHW_PRESENT(TT_SCSI) && setup_sg_tablesize > 0) atari_scsi_template.sg_tablesize = setup_sg_tablesize; if (setup_hostid >= 0) { diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c index 66e58f0a75dc..23cbe4cda760 100644 --- a/drivers/scsi/csiostor/csio_lnode.c +++ b/drivers/scsi/csiostor/csio_lnode.c @@ -301,6 +301,7 @@ csio_ln_fdmi_rhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req) struct fc_fdmi_port_name *port_name; uint8_t buf[64]; uint8_t *fc4_type; + unsigned long flags; if (fdmi_req->wr_status != FW_SUCCESS) { csio_ln_dbg(ln, "WR error:%x in processing fdmi rhba cmd\n", @@ -385,13 +386,13 @@ csio_ln_fdmi_rhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req) len = (uint32_t)(pld - (uint8_t *)cmd); /* Submit FDMI RPA request */ - spin_lock_irq(&hw->lock); + spin_lock_irqsave(&hw->lock, flags); if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_done, FCOE_CT, &fdmi_req->dma_buf, len)) { CSIO_INC_STATS(ln, n_fdmi_err); csio_ln_dbg(ln, "Failed to issue fdmi rpa req\n"); } - spin_unlock_irq(&hw->lock); + spin_unlock_irqrestore(&hw->lock, flags); } /* @@ -412,6 +413,7 @@ csio_ln_fdmi_dprt_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req) struct fc_fdmi_rpl *reg_pl; struct fs_fdmi_attrs *attrib_blk; uint8_t buf[64]; + unsigned long flags; if (fdmi_req->wr_status != FW_SUCCESS) { csio_ln_dbg(ln, "WR error:%x in processing fdmi dprt cmd\n", @@ -491,13 +493,13 @@ csio_ln_fdmi_dprt_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req) attrib_blk->numattrs = htonl(numattrs); /* Submit FDMI RHBA request */ - spin_lock_irq(&hw->lock); + spin_lock_irqsave(&hw->lock, flags); if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_rhba_cbfn, FCOE_CT, &fdmi_req->dma_buf, len)) { CSIO_INC_STATS(ln, n_fdmi_err); csio_ln_dbg(ln, "Failed to issue fdmi rhba req\n"); } - spin_unlock_irq(&hw->lock); + spin_unlock_irqrestore(&hw->lock, flags); } /* @@ -512,6 +514,7 @@ csio_ln_fdmi_dhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req) void *cmd; struct fc_fdmi_port_name *port_name; uint32_t len; + unsigned long flags; if (fdmi_req->wr_status != FW_SUCCESS) { csio_ln_dbg(ln, "WR error:%x in processing fdmi dhba cmd\n", @@ -542,13 +545,13 @@ csio_ln_fdmi_dhba_cbfn(struct csio_hw *hw, struct csio_ioreq *fdmi_req) len += sizeof(*port_name); /* Submit FDMI request */ - spin_lock_irq(&hw->lock); + spin_lock_irqsave(&hw->lock, flags); if (csio_ln_mgmt_submit_req(fdmi_req, csio_ln_fdmi_dprt_cbfn, FCOE_CT, &fdmi_req->dma_buf, len)) { CSIO_INC_STATS(ln, n_fdmi_err); csio_ln_dbg(ln, "Failed to issue fdmi dprt req\n"); } - spin_unlock_irq(&hw->lock); + spin_unlock_irqrestore(&hw->lock, flags); } /** diff --git a/drivers/scsi/hisi_sas/hisi_sas_main.c b/drivers/scsi/hisi_sas/hisi_sas_main.c index 0847e682797b..633effb09c9c 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_main.c +++ b/drivers/scsi/hisi_sas/hisi_sas_main.c @@ -587,7 +587,13 @@ static int hisi_sas_task_exec(struct sas_task *task, gfp_t gfp_flags, dev = hisi_hba->dev; if (unlikely(test_bit(HISI_SAS_REJECT_CMD_BIT, &hisi_hba->flags))) { - if (in_softirq()) + /* + * For IOs from upper layer, it may already disable preempt + * in the IO path, if disable preempt again in down(), + * function schedule() will report schedule_bug(), so check + * preemptible() before goto down(). + */ + if (!preemptible()) return -EINVAL; down(&hisi_hba->sem); @@ -2676,6 +2682,7 @@ int hisi_sas_probe(struct platform_device *pdev, err_out_register_ha: scsi_remove_host(shost); err_out_ha: + hisi_sas_debugfs_exit(hisi_hba); hisi_sas_free(hisi_hba); scsi_host_put(shost); return rc; diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c index cb8d087762db..ef32ee12f606 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c @@ -3259,6 +3259,7 @@ hisi_sas_v3_probe(struct pci_dev *pdev, const struct pci_device_id *id) err_out_register_ha: scsi_remove_host(shost); err_out_ha: + hisi_sas_debugfs_exit(hisi_hba); scsi_host_put(shost); err_out_regions: pci_release_regions(pdev); diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index 7bedbe877704..0bc63a7ab41c 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c @@ -369,8 +369,16 @@ static int iscsi_sw_tcp_pdu_xmit(struct iscsi_task *task) { struct iscsi_conn *conn = task->conn; unsigned int noreclaim_flag; + struct iscsi_tcp_conn *tcp_conn = conn->dd_data; + struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data; int rc = 0; + if (!tcp_sw_conn->sock) { + iscsi_conn_printk(KERN_ERR, conn, + "Transport not bound to socket!\n"); + return -EINVAL; + } + noreclaim_flag = memalloc_noreclaim_save(); while (iscsi_sw_tcp_xmit_qlen(conn)) { diff --git a/drivers/scsi/lpfc/lpfc_ct.c b/drivers/scsi/lpfc/lpfc_ct.c index 25e86706e207..f883fac2d2b1 100644 --- a/drivers/scsi/lpfc/lpfc_ct.c +++ b/drivers/scsi/lpfc/lpfc_ct.c @@ -1868,6 +1868,12 @@ lpfc_cmpl_ct_disc_fdmi(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, if (irsp->ulpStatus == IOSTAT_LOCAL_REJECT) { switch ((irsp->un.ulpWord[4] & IOERR_PARAM_MASK)) { case IOERR_SLI_ABORTED: + case IOERR_SLI_DOWN: + /* Driver aborted this IO. No retry as error + * is likely Offline->Online or some adapter + * error. Recovery will try again. + */ + break; case IOERR_ABORT_IN_PROGRESS: case IOERR_SEQUENCE_TIMEOUT: case IOERR_ILLEGAL_FRAME: diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index d5303994bfd6..66f8867dd837 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c @@ -2236,6 +2236,7 @@ lpfc_cmpl_els_prli(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, struct Scsi_Host *shost = lpfc_shost_from_vport(vport); IOCB_t *irsp; struct lpfc_nodelist *ndlp; + char *mode; /* we pass cmdiocb to state machine which needs rspiocb as well */ cmdiocb->context_un.rsp_iocb = rspiocb; @@ -2273,8 +2274,17 @@ lpfc_cmpl_els_prli(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, goto out; } + /* If we don't send GFT_ID to Fabric, a PRLI error + * could be expected. + */ + if ((vport->fc_flag & FC_FABRIC) || + (vport->cfg_enable_fc4_type != LPFC_ENABLE_BOTH)) + mode = KERN_ERR; + else + mode = KERN_INFO; + /* PRLI failed */ - lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, + lpfc_printf_vlog(vport, mode, LOG_ELS, "2754 PRLI failure DID:%06X Status:x%x/x%x, " "data: x%x\n", ndlp->nlp_DID, irsp->ulpStatus, @@ -4430,7 +4440,7 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, mempool_free(mbox, phba->mbox_mem_pool); } out: - if (ndlp && NLP_CHK_NODE_ACT(ndlp)) { + if (ndlp && NLP_CHK_NODE_ACT(ndlp) && shost) { spin_lock_irq(shost->host_lock); ndlp->nlp_flag &= ~(NLP_ACC_REGLOGIN | NLP_RM_DFLT_RPI); spin_unlock_irq(shost->host_lock); @@ -6455,7 +6465,7 @@ lpfc_els_rcv_rscn(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, uint32_t payload_len, length, nportid, *cmd; int rscn_cnt; int rscn_id = 0, hba_id = 0; - int i; + int i, tmo; pcmd = (struct lpfc_dmabuf *) cmdiocb->context2; lp = (uint32_t *) pcmd->virt; @@ -6561,6 +6571,13 @@ lpfc_els_rcv_rscn(struct lpfc_vport *vport, struct lpfc_iocbq *cmdiocb, spin_lock_irq(shost->host_lock); vport->fc_flag |= FC_RSCN_DEFERRED; + + /* Restart disctmo if its already running */ + if (vport->fc_flag & FC_DISC_TMO) { + tmo = ((phba->fc_ratov * 3) + 3); + mod_timer(&vport->fc_disctmo, + jiffies + msecs_to_jiffies(1000 * tmo)); + } if ((rscn_cnt < FC_MAX_HOLD_RSCN) && !(vport->fc_flag & FC_RSCN_DISCOVERY)) { vport->fc_flag |= FC_RSCN_MODE; @@ -7986,20 +8003,22 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport) struct lpfc_sli_ring *pring; struct lpfc_iocbq *tmp_iocb, *piocb; IOCB_t *cmd = NULL; + unsigned long iflags = 0; lpfc_fabric_abort_vport(vport); + /* * For SLI3, only the hbalock is required. But SLI4 needs to coordinate * with the ring insert operation. Because lpfc_sli_issue_abort_iotag * ultimately grabs the ring_lock, the driver must splice the list into * a working list and release the locks before calling the abort. */ - spin_lock_irq(&phba->hbalock); + spin_lock_irqsave(&phba->hbalock, iflags); pring = lpfc_phba_elsring(phba); /* Bail out if we've no ELS wq, like in PCI error recovery case. */ if (unlikely(!pring)) { - spin_unlock_irq(&phba->hbalock); + spin_unlock_irqrestore(&phba->hbalock, iflags); return; } @@ -8014,6 +8033,9 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport) if (piocb->vport != vport) continue; + if (piocb->iocb_flag & LPFC_DRIVER_ABORTED) + continue; + /* On the ELS ring we can have ELS_REQUESTs or * GEN_REQUESTs waiting for a response. */ @@ -8037,21 +8059,21 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport) if (phba->sli_rev == LPFC_SLI_REV4) spin_unlock(&pring->ring_lock); - spin_unlock_irq(&phba->hbalock); + spin_unlock_irqrestore(&phba->hbalock, iflags); /* Abort each txcmpl iocb on aborted list and remove the dlist links. */ list_for_each_entry_safe(piocb, tmp_iocb, &abort_list, dlist) { - spin_lock_irq(&phba->hbalock); + spin_lock_irqsave(&phba->hbalock, iflags); list_del_init(&piocb->dlist); lpfc_sli_issue_abort_iotag(phba, pring, piocb); - spin_unlock_irq(&phba->hbalock); + spin_unlock_irqrestore(&phba->hbalock, iflags); } if (!list_empty(&abort_list)) lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS, "3387 abort list for txq not empty\n"); INIT_LIST_HEAD(&abort_list); - spin_lock_irq(&phba->hbalock); + spin_lock_irqsave(&phba->hbalock, iflags); if (phba->sli_rev == LPFC_SLI_REV4) spin_lock(&pring->ring_lock); @@ -8091,7 +8113,7 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport) if (phba->sli_rev == LPFC_SLI_REV4) spin_unlock(&pring->ring_lock); - spin_unlock_irq(&phba->hbalock); + spin_unlock_irqrestore(&phba->hbalock, iflags); /* Cancel all the IOCBs from the completions list */ lpfc_sli_cancel_iocbs(phba, &abort_list, diff --git a/drivers/scsi/lpfc/lpfc_hbadisc.c b/drivers/scsi/lpfc/lpfc_hbadisc.c index 749286acdc17..1286c658ba34 100644 --- a/drivers/scsi/lpfc/lpfc_hbadisc.c +++ b/drivers/scsi/lpfc/lpfc_hbadisc.c @@ -700,7 +700,10 @@ lpfc_work_done(struct lpfc_hba *phba) if (!(phba->hba_flag & HBA_SP_QUEUE_EVT)) set_bit(LPFC_DATA_READY, &phba->data_flags); } else { - if (phba->link_state >= LPFC_LINK_UP || + /* Driver could have abort request completed in queue + * when link goes down. Allow for this transition. + */ + if (phba->link_state >= LPFC_LINK_DOWN || phba->link_flag & LS_MDS_LOOPBACK) { pring->flag &= ~LPFC_DEFERRED_RING_EVENT; lpfc_sli_handle_slow_ring_event(phba, pring, @@ -5405,9 +5408,14 @@ lpfc_setup_disc_node(struct lpfc_vport *vport, uint32_t did) /* If we've already received a PLOGI from this NPort * we don't need to try to discover it again. */ - if (ndlp->nlp_flag & NLP_RCV_PLOGI) + if (ndlp->nlp_flag & NLP_RCV_PLOGI && + !(ndlp->nlp_type & + (NLP_FCP_TARGET | NLP_NVME_TARGET))) return NULL; + ndlp->nlp_prev_state = ndlp->nlp_state; + lpfc_nlp_set_state(vport, ndlp, NLP_STE_NPR_NODE); + spin_lock_irq(shost->host_lock); ndlp->nlp_flag |= NLP_NPR_2B_DISC; spin_unlock_irq(shost->host_lock); diff --git a/drivers/scsi/lpfc/lpfc_nportdisc.c b/drivers/scsi/lpfc/lpfc_nportdisc.c index fc6e4546d738..696171382558 100644 --- a/drivers/scsi/lpfc/lpfc_nportdisc.c +++ b/drivers/scsi/lpfc/lpfc_nportdisc.c @@ -484,8 +484,10 @@ lpfc_rcv_plogi(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp, * single discovery thread, this will cause a huge delay in * discovery. Also this will cause multiple state machines * running in parallel for this node. + * This only applies to a fabric environment. */ - if (ndlp->nlp_state == NLP_STE_PLOGI_ISSUE) { + if ((ndlp->nlp_state == NLP_STE_PLOGI_ISSUE) && + (vport->fc_flag & FC_FABRIC)) { /* software abort outstanding PLOGI */ lpfc_els_abort(phba, ndlp); } diff --git a/drivers/scsi/lpfc/lpfc_scsi.c b/drivers/scsi/lpfc/lpfc_scsi.c index ad8ef67a1db3..aa82d538a18a 100644 --- a/drivers/scsi/lpfc/lpfc_scsi.c +++ b/drivers/scsi/lpfc/lpfc_scsi.c @@ -4846,20 +4846,21 @@ lpfc_abort_handler(struct scsi_cmnd *cmnd) ret_val = __lpfc_sli_issue_iocb(phba, LPFC_FCP_RING, abtsiocb, 0); } - /* no longer need the lock after this point */ - spin_unlock_irqrestore(&phba->hbalock, flags); if (ret_val == IOCB_ERROR) { /* Indicate the IO is not being aborted by the driver. */ iocb->iocb_flag &= ~LPFC_DRIVER_ABORTED; lpfc_cmd->waitq = NULL; spin_unlock(&lpfc_cmd->buf_lock); + spin_unlock_irqrestore(&phba->hbalock, flags); lpfc_sli_release_iocbq(phba, abtsiocb); ret = FAILED; goto out; } + /* no longer need the lock after this point */ spin_unlock(&lpfc_cmd->buf_lock); + spin_unlock_irqrestore(&phba->hbalock, flags); if (phba->cfg_poll & DISABLE_FCP_RING_INT) lpfc_sli_handle_fast_ring_event(phba, diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c index 5ed4219675eb..2b0e7b32c2df 100644 --- a/drivers/scsi/lpfc/lpfc_sli.c +++ b/drivers/scsi/lpfc/lpfc_sli.c @@ -11050,9 +11050,6 @@ lpfc_sli_abort_els_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb, irsp->ulpStatus, irsp->un.ulpWord[4]); spin_unlock_irq(&phba->hbalock); - if (irsp->ulpStatus == IOSTAT_LOCAL_REJECT && - irsp->un.ulpWord[4] == IOERR_SLI_ABORTED) - lpfc_sli_release_iocbq(phba, abort_iocb); } release_iocb: lpfc_sli_release_iocbq(phba, cmdiocb); @@ -13161,13 +13158,19 @@ send_current_mbox: phba->sli.sli_flag &= ~LPFC_SLI_MBOX_ACTIVE; /* Setting active mailbox pointer need to be in sync to flag clear */ phba->sli.mbox_active = NULL; + if (bf_get(lpfc_trailer_consumed, mcqe)) + lpfc_sli4_mq_release(phba->sli4_hba.mbx_wq); spin_unlock_irqrestore(&phba->hbalock, iflags); /* Wake up worker thread to post the next pending mailbox command */ lpfc_worker_wake_up(phba); + return workposted; + out_no_mqe_complete: + spin_lock_irqsave(&phba->hbalock, iflags); if (bf_get(lpfc_trailer_consumed, mcqe)) lpfc_sli4_mq_release(phba->sli4_hba.mbx_wq); - return workposted; + spin_unlock_irqrestore(&phba->hbalock, iflags); + return false; } /** @@ -18184,6 +18187,13 @@ lpfc_sli4_alloc_rpi(struct lpfc_hba *phba) static void __lpfc_sli4_free_rpi(struct lpfc_hba *phba, int rpi) { + /* + * if the rpi value indicates a prior unreg has already + * been done, skip the unreg. + */ + if (rpi == LPFC_RPI_ALLOC_ERROR) + return; + if (test_and_clear_bit(rpi, phba->sli4_hba.rpi_bmask)) { phba->sli4_hba.rpi_count--; phba->sli4_hba.max_cfg_param.rpi_used--; diff --git a/drivers/scsi/mac_scsi.c b/drivers/scsi/mac_scsi.c index 9c5566217ef6..b5dde9d0d054 100644 --- a/drivers/scsi/mac_scsi.c +++ b/drivers/scsi/mac_scsi.c @@ -464,7 +464,7 @@ static int __init mac_scsi_probe(struct platform_device *pdev) mac_scsi_template.can_queue = setup_can_queue; if (setup_cmd_per_lun > 0) mac_scsi_template.cmd_per_lun = setup_cmd_per_lun; - if (setup_sg_tablesize >= 0) + if (setup_sg_tablesize > 0) mac_scsi_template.sg_tablesize = setup_sg_tablesize; if (setup_hostid >= 0) mac_scsi_template.this_id = setup_hostid & 7; diff --git a/drivers/scsi/mpt3sas/mpt3sas_ctl.c b/drivers/scsi/mpt3sas/mpt3sas_ctl.c index 7d696952b376..b95f7d062ea4 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_ctl.c +++ b/drivers/scsi/mpt3sas/mpt3sas_ctl.c @@ -778,6 +778,18 @@ _ctl_do_mpt_command(struct MPT3SAS_ADAPTER *ioc, struct mpt3_ioctl_command karg, case MPI2_FUNCTION_NVME_ENCAPSULATED: { nvme_encap_request = (Mpi26NVMeEncapsulatedRequest_t *)request; + if (!ioc->pcie_sg_lookup) { + dtmprintk(ioc, ioc_info(ioc, + "HBA doesn't support NVMe. Rejecting NVMe Encapsulated request.\n" + )); + + if (ioc->logging_level & MPT_DEBUG_TM) + _debug_dump_mf(nvme_encap_request, + ioc->request_sz/4); + mpt3sas_base_free_smid(ioc, smid); + ret = -EINVAL; + goto out; + } /* * Get the Physical Address of the sense buffer. * Use Error Response buffer address field to hold the sense @@ -1584,7 +1596,8 @@ _ctl_diag_register_2(struct MPT3SAS_ADAPTER *ioc, ioc_err(ioc, "%s: failed allocating memory for diag buffers, requested size(%d)\n", __func__, request_data_sz); mpt3sas_base_free_smid(ioc, smid); - return -ENOMEM; + rc = -ENOMEM; + goto out; } ioc->diag_buffer[buffer_type] = request_data; ioc->diag_buffer_sz[buffer_type] = request_data_sz; diff --git a/drivers/scsi/pm8001/pm80xx_hwi.c b/drivers/scsi/pm8001/pm80xx_hwi.c index 73261902d75d..161bf4760eac 100644 --- a/drivers/scsi/pm8001/pm80xx_hwi.c +++ b/drivers/scsi/pm8001/pm80xx_hwi.c @@ -2382,6 +2382,8 @@ mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) pm8001_printk("task 0x%p done with io_status 0x%x" " resp 0x%x stat 0x%x but aborted by upper layer!\n", t, status, ts->resp, ts->stat)); + if (t->slow_task) + complete(&t->slow_task->completion); pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); } else { spin_unlock_irqrestore(&t->task_state_lock, flags); diff --git a/drivers/scsi/scsi_debug.c b/drivers/scsi/scsi_debug.c index d323523f5f9d..32965ec76965 100644 --- a/drivers/scsi/scsi_debug.c +++ b/drivers/scsi/scsi_debug.c @@ -5263,6 +5263,11 @@ static int __init scsi_debug_init(void) return -EINVAL; } + if (sdebug_num_tgts < 0) { + pr_err("num_tgts must be >= 0\n"); + return -EINVAL; + } + if (sdebug_guard > 1) { pr_err("guard must be 0 or 1\n"); return -EINVAL; diff --git a/drivers/scsi/scsi_trace.c b/drivers/scsi/scsi_trace.c index 0f17e7dac1b0..07a2425ffa2c 100644 --- a/drivers/scsi/scsi_trace.c +++ b/drivers/scsi/scsi_trace.c @@ -18,15 +18,18 @@ static const char * scsi_trace_rw6(struct trace_seq *p, unsigned char *cdb, int len) { const char *ret = trace_seq_buffer_ptr(p); - sector_t lba = 0, txlen = 0; + u32 lba = 0, txlen; lba |= ((cdb[1] & 0x1F) << 16); lba |= (cdb[2] << 8); lba |= cdb[3]; - txlen = cdb[4]; + /* + * From SBC-2: a TRANSFER LENGTH field set to zero specifies that 256 + * logical blocks shall be read (READ(6)) or written (WRITE(6)). + */ + txlen = cdb[4] ? cdb[4] : 256; - trace_seq_printf(p, "lba=%llu txlen=%llu", - (unsigned long long)lba, (unsigned long long)txlen); + trace_seq_printf(p, "lba=%u txlen=%u", lba, txlen); trace_seq_putc(p, 0); return ret; diff --git a/drivers/scsi/sun3_scsi.c b/drivers/scsi/sun3_scsi.c index 955e4c938d49..701b842296f0 100644 --- a/drivers/scsi/sun3_scsi.c +++ b/drivers/scsi/sun3_scsi.c @@ -501,7 +501,7 @@ static struct scsi_host_template sun3_scsi_template = { .eh_host_reset_handler = sun3scsi_host_reset, .can_queue = 16, .this_id = 7, - .sg_tablesize = SG_NONE, + .sg_tablesize = 1, .cmd_per_lun = 2, .dma_boundary = PAGE_SIZE - 1, .cmd_size = NCR5380_CMD_SIZE, @@ -523,7 +523,7 @@ static int __init sun3_scsi_probe(struct platform_device *pdev) sun3_scsi_template.can_queue = setup_can_queue; if (setup_cmd_per_lun > 0) sun3_scsi_template.cmd_per_lun = setup_cmd_per_lun; - if (setup_sg_tablesize >= 0) + if (setup_sg_tablesize > 0) sun3_scsi_template.sg_tablesize = setup_sg_tablesize; if (setup_hostid >= 0) sun3_scsi_template.this_id = setup_hostid & 7; diff --git a/drivers/scsi/ufs/ufs-sysfs.c b/drivers/scsi/ufs/ufs-sysfs.c index 969a36b15897..ad2abc96c0f1 100644 --- a/drivers/scsi/ufs/ufs-sysfs.c +++ b/drivers/scsi/ufs/ufs-sysfs.c @@ -126,13 +126,16 @@ static void ufshcd_auto_hibern8_update(struct ufs_hba *hba, u32 ahit) return; spin_lock_irqsave(hba->host->host_lock, flags); - if (hba->ahit == ahit) - goto out_unlock; - hba->ahit = ahit; - if (!pm_runtime_suspended(hba->dev)) - ufshcd_writel(hba, hba->ahit, REG_AUTO_HIBERNATE_IDLE_TIMER); -out_unlock: + if (hba->ahit != ahit) + hba->ahit = ahit; spin_unlock_irqrestore(hba->host->host_lock, flags); + if (!pm_runtime_suspended(hba->dev)) { + pm_runtime_get_sync(hba->dev); + ufshcd_hold(hba, false); + ufshcd_auto_hibern8_enable(hba); + ufshcd_release(hba); + pm_runtime_put(hba->dev); + } } /* Convert Auto-Hibernate Idle Timer register value to microseconds */ diff --git a/drivers/scsi/ufs/ufshcd-qti.c b/drivers/scsi/ufs/ufshcd-qti.c index caee35082edc..d60520426f62 100644 --- a/drivers/scsi/ufs/ufshcd-qti.c +++ b/drivers/scsi/ufs/ufshcd-qti.c @@ -4826,7 +4826,7 @@ int ufshcd_uic_hibern8_exit(struct ufs_hba *hba) return ret; } -static void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) +void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) { unsigned long flags; diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 6ece3c7c6478..0dcfe23c96c0 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -3046,10 +3046,10 @@ static int __ufshcd_query_descriptor(struct ufs_hba *hba, goto out_unlock; } - hba->dev_cmd.query.descriptor = NULL; *buf_len = be16_to_cpu(response->upiu_res.length); out_unlock: + hba->dev_cmd.query.descriptor = NULL; mutex_unlock(&hba->dev_cmd.lock); out: ufshcd_release(hba); @@ -3977,15 +3977,24 @@ static int __ufshcd_uic_hibern8_enter(struct ufs_hba *hba) ktime_to_us(ktime_sub(ktime_get(), start)), ret); if (ret) { + int err; + dev_err(hba->dev, "%s: hibern8 enter failed. ret = %d\n", __func__, ret); /* - * If link recovery fails then return error so that caller - * don't retry the hibern8 enter again. + * If link recovery fails then return error code returned from + * ufshcd_link_recovery(). + * If link recovery succeeds then return -EAGAIN to attempt + * hibern8 enter retry again. */ - if (ufshcd_link_recovery(hba)) - ret = -ENOLINK; + err = ufshcd_link_recovery(hba); + if (err) { + dev_err(hba->dev, "%s: link recovery failed", __func__); + ret = err; + } else { + ret = -EAGAIN; + } } else ufshcd_vops_hibern8_notify(hba, UIC_CMD_DME_HIBER_ENTER, POST_CHANGE); @@ -3999,7 +4008,7 @@ int ufshcd_uic_hibern8_enter(struct ufs_hba *hba) for (retries = UIC_HIBERN8_ENTER_RETRIES; retries > 0; retries--) { ret = __ufshcd_uic_hibern8_enter(hba); - if (!ret || ret == -ENOLINK) + if (!ret) goto out; } out: @@ -4035,7 +4044,7 @@ int ufshcd_uic_hibern8_exit(struct ufs_hba *hba) } EXPORT_SYMBOL_GPL(ufshcd_uic_hibern8_exit); -static void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) +void ufshcd_auto_hibern8_enable(struct ufs_hba *hba) { unsigned long flags; @@ -7034,9 +7043,6 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) /* UniPro link is active now */ ufshcd_set_link_active(hba); - /* Enable Auto-Hibernate if configured */ - ufshcd_auto_hibern8_enable(hba); - ret = ufshcd_verify_dev_init(hba); if (ret) goto out; @@ -7095,6 +7101,9 @@ static int ufshcd_probe_hba(struct ufs_hba *hba) /* set the state as operational after switching to desired gear */ hba->ufshcd_state = UFSHCD_STATE_OPERATIONAL; + /* Enable Auto-Hibernate if configured */ + ufshcd_auto_hibern8_enable(hba); + /* * If we are in error handling context or in power management callbacks * context, no need to scan the host @@ -8110,12 +8119,12 @@ static int ufshcd_resume(struct ufs_hba *hba, enum ufs_pm_op pm_op) if (hba->clk_scaling.is_allowed) ufshcd_resume_clkscaling(hba); - /* Schedule clock gating in case of no access to UFS device yet */ - ufshcd_release(hba); - /* Enable Auto-Hibernate if configured */ ufshcd_auto_hibern8_enable(hba); + /* Schedule clock gating in case of no access to UFS device yet */ + ufshcd_release(hba); + goto out; set_old_dev_pwr_mode: diff --git a/drivers/scsi/ufs/ufshcd.h b/drivers/scsi/ufs/ufshcd.h index 90c9ff4c2dcb..fbd76377218d 100644 --- a/drivers/scsi/ufs/ufshcd.h +++ b/drivers/scsi/ufs/ufshcd.h @@ -1190,6 +1190,8 @@ int ufshcd_query_attr(struct ufs_hba *hba, enum query_opcode opcode, int ufshcd_query_flag(struct ufs_hba *hba, enum query_opcode opcode, enum flag_idn idn, bool *flag_res); +void ufshcd_auto_hibern8_enable(struct ufs_hba *hba); + #define SD_ASCII_STD true #define SD_RAW false diff --git a/drivers/scsi/zorro_esp.c b/drivers/scsi/zorro_esp.c index ca8e3abeb2c7..a23a8e5794f5 100644 --- a/drivers/scsi/zorro_esp.c +++ b/drivers/scsi/zorro_esp.c @@ -218,7 +218,14 @@ static int fastlane_esp_irq_pending(struct esp *esp) static u32 zorro_esp_dma_length_limit(struct esp *esp, u32 dma_addr, u32 dma_len) { - return dma_len > 0xFFFF ? 0xFFFF : dma_len; + return dma_len > (1U << 16) ? (1U << 16) : dma_len; +} + +static u32 fastlane_esp_dma_length_limit(struct esp *esp, u32 dma_addr, + u32 dma_len) +{ + /* The old driver used 0xfffc as limit, so do that here too */ + return dma_len > 0xfffc ? 0xfffc : dma_len; } static void zorro_esp_reset_dma(struct esp *esp) @@ -604,7 +611,7 @@ static const struct esp_driver_ops fastlane_esp_ops = { .esp_write8 = zorro_esp_write8, .esp_read8 = zorro_esp_read8, .irq_pending = fastlane_esp_irq_pending, - .dma_length_limit = zorro_esp_dma_length_limit, + .dma_length_limit = fastlane_esp_dma_length_limit, .reset_dma = zorro_esp_reset_dma, .dma_drain = zorro_esp_dma_drain, .dma_invalidate = fastlane_esp_dma_invalidate, diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c index d19e051f2bc2..f194ffc4699e 100644 --- a/drivers/target/iscsi/iscsi_target.c +++ b/drivers/target/iscsi/iscsi_target.c @@ -1165,7 +1165,9 @@ int iscsit_setup_scsi_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, hdr->cmdsn, be32_to_cpu(hdr->data_length), payload_length, conn->cid); - target_get_sess_cmd(&cmd->se_cmd, true); + if (target_get_sess_cmd(&cmd->se_cmd, true) < 0) + return iscsit_add_reject_cmd(cmd, + ISCSI_REASON_WAITING_FOR_LOGOUT, buf); cmd->sense_reason = transport_lookup_cmd_lun(&cmd->se_cmd, scsilun_to_int(&hdr->lun)); @@ -2002,7 +2004,9 @@ iscsit_handle_task_mgt_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, conn->sess->se_sess, 0, DMA_NONE, TCM_SIMPLE_TAG, cmd->sense_buffer + 2); - target_get_sess_cmd(&cmd->se_cmd, true); + if (target_get_sess_cmd(&cmd->se_cmd, true) < 0) + return iscsit_add_reject_cmd(cmd, + ISCSI_REASON_WAITING_FOR_LOGOUT, buf); /* * TASK_REASSIGN for ERL=2 / connection stays inside of @@ -4232,6 +4236,8 @@ int iscsit_close_connection( * must wait until they have completed. */ iscsit_check_conn_usage_count(conn); + target_sess_cmd_list_set_waiting(sess->se_sess); + target_wait_for_sess_cmds(sess->se_sess); ahash_request_free(conn->conn_tx_hash); if (conn->conn_rx_hash) { diff --git a/drivers/target/iscsi/iscsi_target_auth.c b/drivers/target/iscsi/iscsi_target_auth.c index 51ddca2033e0..8fe9b12a07a4 100644 --- a/drivers/target/iscsi/iscsi_target_auth.c +++ b/drivers/target/iscsi/iscsi_target_auth.c @@ -70,7 +70,7 @@ static int chap_check_algorithm(const char *a_str) if (!token) goto out; - if (!strncmp(token, "5", 1)) { + if (!strcmp(token, "5")) { pr_debug("Selected MD5 Algorithm\n"); kfree(orig); return CHAP_DIGEST_MD5; diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c index 7f06a62f8661..eda8b4736c15 100644 --- a/drivers/target/target_core_transport.c +++ b/drivers/target/target_core_transport.c @@ -584,6 +584,15 @@ void transport_free_session(struct se_session *se_sess) } EXPORT_SYMBOL(transport_free_session); +static int target_release_res(struct se_device *dev, void *data) +{ + struct se_session *sess = data; + + if (dev->reservation_holder == sess) + target_release_reservation(dev); + return 0; +} + void transport_deregister_session(struct se_session *se_sess) { struct se_portal_group *se_tpg = se_sess->se_tpg; @@ -600,6 +609,12 @@ void transport_deregister_session(struct se_session *se_sess) se_sess->fabric_sess_ptr = NULL; spin_unlock_irqrestore(&se_tpg->session_lock, flags); + /* + * Since the session is being removed, release SPC-2 + * reservations held by the session that is disappearing. + */ + target_for_each_device(target_release_res, se_sess); + pr_debug("TARGET_CORE[%s]: Deregistered fabric_sess\n", se_tpg->se_tpg_tfo->fabric_name); /* diff --git a/drivers/vhost/vsock.c b/drivers/vhost/vsock.c index 9f57736fe15e..88a5aa6624b4 100644 --- a/drivers/vhost/vsock.c +++ b/drivers/vhost/vsock.c @@ -437,7 +437,9 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work) virtio_transport_deliver_tap_pkt(pkt); /* Only accept correctly addressed packets */ - if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid) + if (le64_to_cpu(pkt->hdr.src_cid) == vsock->guest_cid && + le64_to_cpu(pkt->hdr.dst_cid) == + vhost_transport_get_local_cid()) virtio_transport_recv_pkt(pkt); else virtio_transport_free_pkt(pkt); diff --git a/drivers/watchdog/imx7ulp_wdt.c b/drivers/watchdog/imx7ulp_wdt.c index 5ce51026989a..ba5d535a6db2 100644 --- a/drivers/watchdog/imx7ulp_wdt.c +++ b/drivers/watchdog/imx7ulp_wdt.c @@ -106,12 +106,28 @@ static int imx7ulp_wdt_set_timeout(struct watchdog_device *wdog, return 0; } +static int imx7ulp_wdt_restart(struct watchdog_device *wdog, + unsigned long action, void *data) +{ + struct imx7ulp_wdt_device *wdt = watchdog_get_drvdata(wdog); + + imx7ulp_wdt_enable(wdt->base, true); + imx7ulp_wdt_set_timeout(&wdt->wdd, 1); + + /* wait for wdog to fire */ + while (true) + ; + + return NOTIFY_DONE; +} + static const struct watchdog_ops imx7ulp_wdt_ops = { .owner = THIS_MODULE, .start = imx7ulp_wdt_start, .stop = imx7ulp_wdt_stop, .ping = imx7ulp_wdt_ping, .set_timeout = imx7ulp_wdt_set_timeout, + .restart = imx7ulp_wdt_restart, }; static const struct watchdog_info imx7ulp_wdt_info = { diff --git a/drivers/watchdog/watchdog_dev.c b/drivers/watchdog/watchdog_dev.c index dbd2ad4c9294..62483a99105c 100644 --- a/drivers/watchdog/watchdog_dev.c +++ b/drivers/watchdog/watchdog_dev.c @@ -34,7 +34,6 @@ #include /* For __init/__exit/... */ #include /* For hrtimers */ #include /* For printk/panic/... */ -#include /* For data references */ #include /* For kthread_work */ #include /* For handling misc devices */ #include /* For module stuff/... */ @@ -52,14 +51,14 @@ /* * struct watchdog_core_data - watchdog core internal data - * @kref: Reference count. + * @dev: The watchdog's internal device * @cdev: The watchdog's Character device. * @wdd: Pointer to watchdog device. * @lock: Lock for watchdog core. * @status: Watchdog core internal status bits. */ struct watchdog_core_data { - struct kref kref; + struct device dev; struct cdev cdev; struct watchdog_device *wdd; struct mutex lock; @@ -158,7 +157,8 @@ static inline void watchdog_update_worker(struct watchdog_device *wdd) ktime_t t = watchdog_next_keepalive(wdd); if (t > 0) - hrtimer_start(&wd_data->timer, t, HRTIMER_MODE_REL); + hrtimer_start(&wd_data->timer, t, + HRTIMER_MODE_REL_HARD); } else { hrtimer_cancel(&wd_data->timer); } @@ -177,7 +177,7 @@ static int __watchdog_ping(struct watchdog_device *wdd) if (ktime_after(earliest_keepalive, now)) { hrtimer_start(&wd_data->timer, ktime_sub(earliest_keepalive, now), - HRTIMER_MODE_REL); + HRTIMER_MODE_REL_HARD); return 0; } @@ -839,7 +839,7 @@ static int watchdog_open(struct inode *inode, struct file *file) file->private_data = wd_data; if (!hw_running) - kref_get(&wd_data->kref); + get_device(&wd_data->dev); /* * open_timeout only applies for the first open from @@ -860,11 +860,11 @@ out_clear: return err; } -static void watchdog_core_data_release(struct kref *kref) +static void watchdog_core_data_release(struct device *dev) { struct watchdog_core_data *wd_data; - wd_data = container_of(kref, struct watchdog_core_data, kref); + wd_data = container_of(dev, struct watchdog_core_data, dev); kfree(wd_data); } @@ -924,7 +924,7 @@ done: */ if (!running) { module_put(wd_data->cdev.owner); - kref_put(&wd_data->kref, watchdog_core_data_release); + put_device(&wd_data->dev); } return 0; } @@ -943,17 +943,22 @@ static struct miscdevice watchdog_miscdev = { .fops = &watchdog_fops, }; +static struct class watchdog_class = { + .name = "watchdog", + .owner = THIS_MODULE, + .dev_groups = wdt_groups, +}; + /* * watchdog_cdev_register: register watchdog character device * @wdd: watchdog device - * @devno: character device number * * Register a watchdog character device including handling the legacy * /dev/watchdog node. /dev/watchdog is actually a miscdevice and * thus we set it up like that. */ -static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno) +static int watchdog_cdev_register(struct watchdog_device *wdd) { struct watchdog_core_data *wd_data; int err; @@ -961,7 +966,6 @@ static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno) wd_data = kzalloc(sizeof(struct watchdog_core_data), GFP_KERNEL); if (!wd_data) return -ENOMEM; - kref_init(&wd_data->kref); mutex_init(&wd_data->lock); wd_data->wdd = wdd; @@ -971,7 +975,7 @@ static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno) return -ENODEV; kthread_init_work(&wd_data->work, watchdog_ping_work); - hrtimer_init(&wd_data->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + hrtimer_init(&wd_data->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_HARD); wd_data->timer.function = watchdog_timer_expired; if (wdd->id == 0) { @@ -990,23 +994,33 @@ static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno) } } + device_initialize(&wd_data->dev); + wd_data->dev.devt = MKDEV(MAJOR(watchdog_devt), wdd->id); + wd_data->dev.class = &watchdog_class; + wd_data->dev.parent = wdd->parent; + wd_data->dev.groups = wdd->groups; + wd_data->dev.release = watchdog_core_data_release; + dev_set_drvdata(&wd_data->dev, wdd); + dev_set_name(&wd_data->dev, "watchdog%d", wdd->id); + /* Fill in the data structures */ cdev_init(&wd_data->cdev, &watchdog_fops); - wd_data->cdev.owner = wdd->ops->owner; /* Add the device */ - err = cdev_add(&wd_data->cdev, devno, 1); + err = cdev_device_add(&wd_data->cdev, &wd_data->dev); if (err) { pr_err("watchdog%d unable to add device %d:%d\n", wdd->id, MAJOR(watchdog_devt), wdd->id); if (wdd->id == 0) { misc_deregister(&watchdog_miscdev); old_wd_data = NULL; - kref_put(&wd_data->kref, watchdog_core_data_release); + put_device(&wd_data->dev); } return err; } + wd_data->cdev.owner = wdd->ops->owner; + /* Record time of most recent heartbeat as 'just before now'. */ wd_data->last_hw_keepalive = ktime_sub(ktime_get(), 1); watchdog_set_open_deadline(wd_data); @@ -1017,9 +1031,10 @@ static int watchdog_cdev_register(struct watchdog_device *wdd, dev_t devno) */ if (watchdog_hw_running(wdd)) { __module_get(wdd->ops->owner); - kref_get(&wd_data->kref); + get_device(&wd_data->dev); if (handle_boot_enabled) - hrtimer_start(&wd_data->timer, 0, HRTIMER_MODE_REL); + hrtimer_start(&wd_data->timer, 0, + HRTIMER_MODE_REL_HARD); else pr_info("watchdog%d running and kernel based pre-userspace handler disabled\n", wdd->id); @@ -1040,7 +1055,7 @@ static void watchdog_cdev_unregister(struct watchdog_device *wdd) { struct watchdog_core_data *wd_data = wdd->wd_data; - cdev_del(&wd_data->cdev); + cdev_device_del(&wd_data->cdev, &wd_data->dev); if (wdd->id == 0) { misc_deregister(&watchdog_miscdev); old_wd_data = NULL; @@ -1059,15 +1074,9 @@ static void watchdog_cdev_unregister(struct watchdog_device *wdd) hrtimer_cancel(&wd_data->timer); kthread_cancel_work_sync(&wd_data->work); - kref_put(&wd_data->kref, watchdog_core_data_release); + put_device(&wd_data->dev); } -static struct class watchdog_class = { - .name = "watchdog", - .owner = THIS_MODULE, - .dev_groups = wdt_groups, -}; - static int watchdog_reboot_notifier(struct notifier_block *nb, unsigned long code, void *data) { @@ -1098,27 +1107,14 @@ static int watchdog_reboot_notifier(struct notifier_block *nb, int watchdog_dev_register(struct watchdog_device *wdd) { - struct device *dev; - dev_t devno; int ret; - devno = MKDEV(MAJOR(watchdog_devt), wdd->id); - - ret = watchdog_cdev_register(wdd, devno); + ret = watchdog_cdev_register(wdd); if (ret) return ret; - dev = device_create_with_groups(&watchdog_class, wdd->parent, - devno, wdd, wdd->groups, - "watchdog%d", wdd->id); - if (IS_ERR(dev)) { - watchdog_cdev_unregister(wdd); - return PTR_ERR(dev); - } - ret = watchdog_register_pretimeout(wdd); if (ret) { - device_destroy(&watchdog_class, devno); watchdog_cdev_unregister(wdd); return ret; } @@ -1126,7 +1122,8 @@ int watchdog_dev_register(struct watchdog_device *wdd) if (test_bit(WDOG_STOP_ON_REBOOT, &wdd->status)) { wdd->reboot_nb.notifier_call = watchdog_reboot_notifier; - ret = devm_register_reboot_notifier(dev, &wdd->reboot_nb); + ret = devm_register_reboot_notifier(&wdd->wd_data->dev, + &wdd->reboot_nb); if (ret) { pr_err("watchdog%d: Cannot register reboot notifier (%d)\n", wdd->id, ret); @@ -1148,7 +1145,6 @@ int watchdog_dev_register(struct watchdog_device *wdd) void watchdog_dev_unregister(struct watchdog_device *wdd) { watchdog_unregister_pretimeout(wdd); - device_destroy(&watchdog_class, wdd->wd_data->cdev.dev); watchdog_cdev_unregister(wdd); } diff --git a/fs/cifs/cifsfs.c b/fs/cifs/cifsfs.c index 1a135d1b85bd..07d8ace61f77 100644 --- a/fs/cifs/cifsfs.c +++ b/fs/cifs/cifsfs.c @@ -119,6 +119,7 @@ extern mempool_t *cifs_mid_poolp; struct workqueue_struct *cifsiod_wq; struct workqueue_struct *decrypt_wq; +struct workqueue_struct *fileinfo_put_wq; struct workqueue_struct *cifsoplockd_wq; __u32 cifs_lock_secret; @@ -1554,11 +1555,18 @@ init_cifs(void) goto out_destroy_cifsiod_wq; } + fileinfo_put_wq = alloc_workqueue("cifsfileinfoput", + WQ_UNBOUND|WQ_FREEZABLE|WQ_MEM_RECLAIM, 0); + if (!fileinfo_put_wq) { + rc = -ENOMEM; + goto out_destroy_decrypt_wq; + } + cifsoplockd_wq = alloc_workqueue("cifsoplockd", WQ_FREEZABLE|WQ_MEM_RECLAIM, 0); if (!cifsoplockd_wq) { rc = -ENOMEM; - goto out_destroy_decrypt_wq; + goto out_destroy_fileinfo_put_wq; } rc = cifs_fscache_register(); @@ -1624,6 +1632,8 @@ out_unreg_fscache: cifs_fscache_unregister(); out_destroy_cifsoplockd_wq: destroy_workqueue(cifsoplockd_wq); +out_destroy_fileinfo_put_wq: + destroy_workqueue(fileinfo_put_wq); out_destroy_decrypt_wq: destroy_workqueue(decrypt_wq); out_destroy_cifsiod_wq: @@ -1653,6 +1663,7 @@ exit_cifs(void) cifs_fscache_unregister(); destroy_workqueue(cifsoplockd_wq); destroy_workqueue(decrypt_wq); + destroy_workqueue(fileinfo_put_wq); destroy_workqueue(cifsiod_wq); cifs_proc_clean(); } diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h index 5d2dd04b55a6..f55e53486e74 100644 --- a/fs/cifs/cifsglob.h +++ b/fs/cifs/cifsglob.h @@ -1265,6 +1265,7 @@ struct cifsFileInfo { struct mutex fh_mutex; /* prevents reopen race after dead ses*/ struct cifs_search_info srch_inf; struct work_struct oplock_break; /* work for oplock breaks */ + struct work_struct put; /* work for the final part of _put */ }; struct cifs_io_parms { @@ -1370,7 +1371,8 @@ cifsFileInfo_get_locked(struct cifsFileInfo *cifs_file) } struct cifsFileInfo *cifsFileInfo_get(struct cifsFileInfo *cifs_file); -void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_hdlr); +void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_hdlr, + bool offload); void cifsFileInfo_put(struct cifsFileInfo *cifs_file); #define CIFS_CACHE_READ_FLG 1 @@ -1908,6 +1910,7 @@ void cifs_queue_oplock_break(struct cifsFileInfo *cfile); extern const struct slow_work_ops cifs_oplock_break_ops; extern struct workqueue_struct *cifsiod_wq; extern struct workqueue_struct *decrypt_wq; +extern struct workqueue_struct *fileinfo_put_wq; extern struct workqueue_struct *cifsoplockd_wq; extern __u32 cifs_lock_secret; diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c index 20c70cbab1ad..02451d085ddd 100644 --- a/fs/cifs/connect.c +++ b/fs/cifs/connect.c @@ -387,7 +387,7 @@ static inline int reconn_set_ipaddr(struct TCP_Server_Info *server) #ifdef CONFIG_CIFS_DFS_UPCALL struct super_cb_data { struct TCP_Server_Info *server; - struct cifs_sb_info *cifs_sb; + struct super_block *sb; }; /* These functions must be called with server->srv_mutex held */ @@ -398,25 +398,39 @@ static void super_cb(struct super_block *sb, void *arg) struct cifs_sb_info *cifs_sb; struct cifs_tcon *tcon; - if (d->cifs_sb) + if (d->sb) return; cifs_sb = CIFS_SB(sb); tcon = cifs_sb_master_tcon(cifs_sb); if (tcon->ses->server == d->server) - d->cifs_sb = cifs_sb; + d->sb = sb; } -static inline struct cifs_sb_info * -find_super_by_tcp(struct TCP_Server_Info *server) +static struct super_block *get_tcp_super(struct TCP_Server_Info *server) { struct super_cb_data d = { .server = server, - .cifs_sb = NULL, + .sb = NULL, }; iterate_supers_type(&cifs_fs_type, super_cb, &d); - return d.cifs_sb ? d.cifs_sb : ERR_PTR(-ENOENT); + + if (unlikely(!d.sb)) + return ERR_PTR(-ENOENT); + /* + * Grab an active reference in order to prevent automounts (DFS links) + * of expiring and then freeing up our cifs superblock pointer while + * we're doing failover. + */ + cifs_sb_active(d.sb); + return d.sb; +} + +static inline void put_tcp_super(struct super_block *sb) +{ + if (!IS_ERR_OR_NULL(sb)) + cifs_sb_deactive(sb); } static void reconn_inval_dfs_target(struct TCP_Server_Info *server, @@ -480,6 +494,7 @@ cifs_reconnect(struct TCP_Server_Info *server) struct mid_q_entry *mid_entry; struct list_head retry_list; #ifdef CONFIG_CIFS_DFS_UPCALL + struct super_block *sb = NULL; struct cifs_sb_info *cifs_sb = NULL; struct dfs_cache_tgt_list tgt_list = {0}; struct dfs_cache_tgt_iterator *tgt_it = NULL; @@ -489,13 +504,15 @@ cifs_reconnect(struct TCP_Server_Info *server) server->nr_targets = 1; #ifdef CONFIG_CIFS_DFS_UPCALL spin_unlock(&GlobalMid_Lock); - cifs_sb = find_super_by_tcp(server); - if (IS_ERR(cifs_sb)) { - rc = PTR_ERR(cifs_sb); + sb = get_tcp_super(server); + if (IS_ERR(sb)) { + rc = PTR_ERR(sb); cifs_dbg(FYI, "%s: will not do DFS failover: rc = %d\n", __func__, rc); - cifs_sb = NULL; + sb = NULL; } else { + cifs_sb = CIFS_SB(sb); + rc = reconn_setup_dfs_targets(cifs_sb, &tgt_list, &tgt_it); if (rc && (rc != -EOPNOTSUPP)) { cifs_server_dbg(VFS, "%s: no target servers for DFS failover\n", @@ -512,6 +529,10 @@ cifs_reconnect(struct TCP_Server_Info *server) /* the demux thread will exit normally next time through the loop */ spin_unlock(&GlobalMid_Lock); +#ifdef CONFIG_CIFS_DFS_UPCALL + dfs_cache_free_tgts(&tgt_list); + put_tcp_super(sb); +#endif return rc; } else server->tcpStatus = CifsNeedReconnect; @@ -638,7 +659,10 @@ cifs_reconnect(struct TCP_Server_Info *server) __func__, rc); } dfs_cache_free_tgts(&tgt_list); + } + + put_tcp_super(sb); #endif if (server->tcpStatus == CifsNeedNegotiate) mod_delayed_work(cifsiod_wq, &server->echo, 0); diff --git a/fs/cifs/file.c b/fs/cifs/file.c index c32650f14c9b..969543034b4d 100644 --- a/fs/cifs/file.c +++ b/fs/cifs/file.c @@ -288,6 +288,8 @@ cifs_down_write(struct rw_semaphore *sem) msleep(10); } +static void cifsFileInfo_put_work(struct work_struct *work); + struct cifsFileInfo * cifs_new_fileinfo(struct cifs_fid *fid, struct file *file, struct tcon_link *tlink, __u32 oplock) @@ -322,6 +324,7 @@ cifs_new_fileinfo(struct cifs_fid *fid, struct file *file, cfile->invalidHandle = false; cfile->tlink = cifs_get_tlink(tlink); INIT_WORK(&cfile->oplock_break, cifs_oplock_break); + INIT_WORK(&cfile->put, cifsFileInfo_put_work); mutex_init(&cfile->fh_mutex); spin_lock_init(&cfile->file_info_lock); @@ -376,6 +379,41 @@ cifsFileInfo_get(struct cifsFileInfo *cifs_file) return cifs_file; } +static void cifsFileInfo_put_final(struct cifsFileInfo *cifs_file) +{ + struct inode *inode = d_inode(cifs_file->dentry); + struct cifsInodeInfo *cifsi = CIFS_I(inode); + struct cifsLockInfo *li, *tmp; + struct super_block *sb = inode->i_sb; + + /* + * Delete any outstanding lock records. We'll lose them when the file + * is closed anyway. + */ + cifs_down_write(&cifsi->lock_sem); + list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) { + list_del(&li->llist); + cifs_del_lock_waiters(li); + kfree(li); + } + list_del(&cifs_file->llist->llist); + kfree(cifs_file->llist); + up_write(&cifsi->lock_sem); + + cifs_put_tlink(cifs_file->tlink); + dput(cifs_file->dentry); + cifs_sb_deactive(sb); + kfree(cifs_file); +} + +static void cifsFileInfo_put_work(struct work_struct *work) +{ + struct cifsFileInfo *cifs_file = container_of(work, + struct cifsFileInfo, put); + + cifsFileInfo_put_final(cifs_file); +} + /** * cifsFileInfo_put - release a reference of file priv data * @@ -383,15 +421,15 @@ cifsFileInfo_get(struct cifsFileInfo *cifs_file) */ void cifsFileInfo_put(struct cifsFileInfo *cifs_file) { - _cifsFileInfo_put(cifs_file, true); + _cifsFileInfo_put(cifs_file, true, true); } /** * _cifsFileInfo_put - release a reference of file priv data * * This may involve closing the filehandle @cifs_file out on the - * server. Must be called without holding tcon->open_file_lock and - * cifs_file->file_info_lock. + * server. Must be called without holding tcon->open_file_lock, + * cinode->open_file_lock and cifs_file->file_info_lock. * * If @wait_for_oplock_handler is true and we are releasing the last * reference, wait for any running oplock break handler of the file @@ -399,7 +437,8 @@ void cifsFileInfo_put(struct cifsFileInfo *cifs_file) * oplock break handler, you need to pass false. * */ -void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_handler) +void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, + bool wait_oplock_handler, bool offload) { struct inode *inode = d_inode(cifs_file->dentry); struct cifs_tcon *tcon = tlink_tcon(cifs_file->tlink); @@ -407,7 +446,6 @@ void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_handler) struct cifsInodeInfo *cifsi = CIFS_I(inode); struct super_block *sb = inode->i_sb; struct cifs_sb_info *cifs_sb = CIFS_SB(sb); - struct cifsLockInfo *li, *tmp; struct cifs_fid fid; struct cifs_pending_open open; bool oplock_break_cancelled; @@ -468,24 +506,10 @@ void _cifsFileInfo_put(struct cifsFileInfo *cifs_file, bool wait_oplock_handler) cifs_del_pending_open(&open); - /* - * Delete any outstanding lock records. We'll lose them when the file - * is closed anyway. - */ - cifs_down_write(&cifsi->lock_sem); - list_for_each_entry_safe(li, tmp, &cifs_file->llist->locks, llist) { - list_del(&li->llist); - cifs_del_lock_waiters(li); - kfree(li); - } - list_del(&cifs_file->llist->llist); - kfree(cifs_file->llist); - up_write(&cifsi->lock_sem); - - cifs_put_tlink(cifs_file->tlink); - dput(cifs_file->dentry); - cifs_sb_deactive(sb); - kfree(cifs_file); + if (offload) + queue_work(fileinfo_put_wq, &cifs_file->put); + else + cifsFileInfo_put_final(cifs_file); } int cifs_open(struct inode *inode, struct file *file) @@ -816,7 +840,7 @@ reopen_error_exit: int cifs_close(struct inode *inode, struct file *file) { if (file->private_data != NULL) { - cifsFileInfo_put(file->private_data); + _cifsFileInfo_put(file->private_data, true, false); file->private_data = NULL; } @@ -4688,7 +4712,7 @@ void cifs_oplock_break(struct work_struct *work) cinode); cifs_dbg(FYI, "Oplock release rc = %d\n", rc); } - _cifsFileInfo_put(cfile, false /* do not wait for ourself */); + _cifsFileInfo_put(cfile, false /* do not wait for ourself */, false); cifs_done_oplock_break(cinode); } diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 83d1d8ba5981..6f23386a8512 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3556,8 +3556,14 @@ retry: return ret; } + /* + * Writes that span EOF might trigger an I/O size update on completion, + * so consider them to be dirty for the purposes of O_DSYNC, even if + * there is no other metadata changes being made or are pending here. + */ iomap->flags = 0; - if (ext4_inode_datasync_dirty(inode)) + if (ext4_inode_datasync_dirty(inode) || + offset + length > i_size_read(inode)) iomap->flags |= IOMAP_F_DIRTY; iomap->bdev = inode->i_sb->s_bdev; iomap->dax_dev = sbi->s_daxdev; @@ -3860,7 +3866,13 @@ static ssize_t ext4_direct_IO_read(struct kiocb *iocb, struct iov_iter *iter) * writes & truncates and since we take care of writing back page cache, * we are protected against page writeback as well. */ - inode_lock_shared(inode); + if (iocb->ki_flags & IOCB_NOWAIT) { + if (!inode_trylock_shared(inode)) + return -EAGAIN; + } else { + inode_lock_shared(inode); + } + ret = filemap_write_and_wait_range(mapping, iocb->ki_pos, iocb->ki_pos + count - 1); if (ret) diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 6cf7548ef8d5..5d448a7b3da2 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -1292,6 +1292,7 @@ struct f2fs_sb_info { unsigned int gc_mode; /* current GC state */ unsigned int next_victim_seg[2]; /* next segment in victim section */ /* for skip statistic */ + unsigned int atomic_files; /* # of opened atomic file */ unsigned long long skipped_atomic_files[2]; /* FG_GC and BG_GC */ unsigned long long skipped_gc_rwsem; /* FG_GC only */ @@ -2707,6 +2708,20 @@ static inline void clear_file(struct inode *inode, int type) f2fs_mark_inode_dirty_sync(inode, true); } +static inline bool f2fs_is_time_consistent(struct inode *inode) +{ + if (!timespec64_equal(F2FS_I(inode)->i_disk_time, &inode->i_atime)) + return false; + if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 1, &inode->i_ctime)) + return false; + if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 2, &inode->i_mtime)) + return false; + if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 3, + &F2FS_I(inode)->i_crtime)) + return false; + return true; +} + static inline bool f2fs_skip_inode_update(struct inode *inode, int dsync) { bool ret; @@ -2724,14 +2739,7 @@ static inline bool f2fs_skip_inode_update(struct inode *inode, int dsync) i_size_read(inode) & ~PAGE_MASK) return false; - if (!timespec64_equal(F2FS_I(inode)->i_disk_time, &inode->i_atime)) - return false; - if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 1, &inode->i_ctime)) - return false; - if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 2, &inode->i_mtime)) - return false; - if (!timespec64_equal(F2FS_I(inode)->i_disk_time + 3, - &F2FS_I(inode)->i_crtime)) + if (!f2fs_is_time_consistent(inode)) return false; down_read(&F2FS_I(inode)->i_sem); diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index 29bc0a542759..8ed8e4328bd1 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -1890,6 +1890,7 @@ static int f2fs_ioc_start_atomic_write(struct file *filp) spin_lock(&sbi->inode_lock[ATOMIC_FILE]); if (list_empty(&fi->inmem_ilist)) list_add_tail(&fi->inmem_ilist, &sbi->inode_list[ATOMIC_FILE]); + sbi->atomic_files++; spin_unlock(&sbi->inode_lock[ATOMIC_FILE]); /* add inode in inmem_list first and set atomic_file */ diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index db4fec30c30d..386ad54c13c3 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -615,7 +615,11 @@ int f2fs_write_inode(struct inode *inode, struct writeback_control *wbc) inode->i_ino == F2FS_META_INO(sbi)) return 0; - if (!is_inode_flag_set(inode, FI_DIRTY_INODE)) + /* + * atime could be updated without dirtying f2fs inode in lazytime mode + */ + if (f2fs_is_time_consistent(inode) && + !is_inode_flag_set(inode, FI_DIRTY_INODE)) return 0; if (!f2fs_is_checkpoint_ready(sbi)) diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c index 4faf06e8bf89..a1c507b0b4ac 100644 --- a/fs/f2fs/namei.c +++ b/fs/f2fs/namei.c @@ -981,7 +981,8 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, if (!old_dir_entry || whiteout) file_lost_pino(old_inode); else - F2FS_I(old_inode)->i_pino = new_dir->i_ino; + /* adjust dir's i_pino to pass fsck check */ + f2fs_i_pino_write(old_inode, new_dir->i_ino); up_write(&F2FS_I(old_inode)->i_sem); old_inode->i_ctime = current_time(old_inode); @@ -1141,7 +1142,11 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry, f2fs_set_link(old_dir, old_entry, old_page, new_inode); down_write(&F2FS_I(old_inode)->i_sem); - file_lost_pino(old_inode); + if (!old_dir_entry) + file_lost_pino(old_inode); + else + /* adjust dir's i_pino to pass fsck check */ + f2fs_i_pino_write(old_inode, new_dir->i_ino); up_write(&F2FS_I(old_inode)->i_sem); old_dir->i_ctime = current_time(old_dir); @@ -1156,7 +1161,11 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry, f2fs_set_link(new_dir, new_entry, new_page, old_inode); down_write(&F2FS_I(new_inode)->i_sem); - file_lost_pino(new_inode); + if (!new_dir_entry) + file_lost_pino(new_inode); + else + /* adjust dir's i_pino to pass fsck check */ + f2fs_i_pino_write(new_inode, old_dir->i_ino); up_write(&F2FS_I(new_inode)->i_sem); new_dir->i_ctime = current_time(new_dir); diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 808709581481..7d8578401267 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -288,6 +288,8 @@ void f2fs_drop_inmem_pages_all(struct f2fs_sb_info *sbi, bool gc_failure) struct list_head *head = &sbi->inode_list[ATOMIC_FILE]; struct inode *inode; struct f2fs_inode_info *fi; + unsigned int count = sbi->atomic_files; + unsigned int looped = 0; next: spin_lock(&sbi->inode_lock[ATOMIC_FILE]); if (list_empty(head)) { @@ -296,22 +298,26 @@ next: } fi = list_first_entry(head, struct f2fs_inode_info, inmem_ilist); inode = igrab(&fi->vfs_inode); + if (inode) + list_move_tail(&fi->inmem_ilist, head); spin_unlock(&sbi->inode_lock[ATOMIC_FILE]); if (inode) { if (gc_failure) { - if (fi->i_gc_failures[GC_FAILURE_ATOMIC]) - goto drop; - goto skip; + if (!fi->i_gc_failures[GC_FAILURE_ATOMIC]) + goto skip; } -drop: set_inode_flag(inode, FI_ATOMIC_REVOKE_REQUEST); f2fs_drop_inmem_pages(inode); +skip: iput(inode); } -skip: congestion_wait(BLK_RW_ASYNC, HZ/50); cond_resched(); + if (gc_failure) { + if (++looped >= count) + return; + } goto next; } @@ -327,13 +333,16 @@ void f2fs_drop_inmem_pages(struct inode *inode) mutex_unlock(&fi->inmem_lock); } - clear_inode_flag(inode, FI_ATOMIC_FILE); fi->i_gc_failures[GC_FAILURE_ATOMIC] = 0; stat_dec_atomic_write(inode); spin_lock(&sbi->inode_lock[ATOMIC_FILE]); if (!list_empty(&fi->inmem_ilist)) list_del_init(&fi->inmem_ilist); + if (f2fs_is_atomic_file(inode)) { + clear_inode_flag(inode, FI_ATOMIC_FILE); + sbi->atomic_files--; + } spin_unlock(&sbi->inode_lock[ATOMIC_FILE]); } diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index a478df035651..40306c1eab07 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -1461,28 +1461,43 @@ static int __init init_hugetlbfs_fs(void) sizeof(struct hugetlbfs_inode_info), 0, SLAB_ACCOUNT, init_once); if (hugetlbfs_inode_cachep == NULL) - goto out2; + goto out; error = register_filesystem(&hugetlbfs_fs_type); if (error) - goto out; + goto out_free; + /* default hstate mount is required */ + mnt = mount_one_hugetlbfs(&hstates[default_hstate_idx]); + if (IS_ERR(mnt)) { + error = PTR_ERR(mnt); + goto out_unreg; + } + hugetlbfs_vfsmount[default_hstate_idx] = mnt; + + /* other hstates are optional */ i = 0; for_each_hstate(h) { - mnt = mount_one_hugetlbfs(h); - if (IS_ERR(mnt) && i == 0) { - error = PTR_ERR(mnt); - goto out; + if (i == default_hstate_idx) { + i++; + continue; } - hugetlbfs_vfsmount[i] = mnt; + + mnt = mount_one_hugetlbfs(h); + if (IS_ERR(mnt)) + hugetlbfs_vfsmount[i] = NULL; + else + hugetlbfs_vfsmount[i] = mnt; i++; } return 0; - out: + out_unreg: + (void)unregister_filesystem(&hugetlbfs_fs_type); + out_free: kmem_cache_destroy(hugetlbfs_inode_cachep); - out2: + out: return error; } fs_initcall(init_hugetlbfs_fs) diff --git a/fs/io_uring.c b/fs/io_uring.c index a340147387ec..74e786578c77 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -3773,12 +3773,18 @@ static int io_allocate_scq_urings(struct io_ring_ctx *ctx, ctx->cq_entries = rings->cq_ring_entries; size = array_size(sizeof(struct io_uring_sqe), p->sq_entries); - if (size == SIZE_MAX) + if (size == SIZE_MAX) { + io_mem_free(ctx->rings); + ctx->rings = NULL; return -EOVERFLOW; + } ctx->sq_sqes = io_mem_alloc(size); - if (!ctx->sq_sqes) + if (!ctx->sq_sqes) { + io_mem_free(ctx->rings); + ctx->rings = NULL; return -ENOMEM; + } return 0; } diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 52d9abdaa2c7..795694085363 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -324,7 +324,9 @@ zero_tail: if (pad) iomap_dio_zero(dio, iomap, pos, fs_block_size - pad); } - return copied ? copied : ret; + if (copied) + return copied; + return ret; } static loff_t diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c index 132fb92098c7..c43591cd70f1 100644 --- a/fs/jbd2/commit.c +++ b/fs/jbd2/commit.c @@ -727,7 +727,6 @@ start_journal_io: submit_bh(REQ_OP_WRITE, REQ_SYNC, bh); } cond_resched(); - stats.run.rs_blocks_logged += bufs; /* Force a new descriptor to be generated next time round the loop. */ @@ -814,6 +813,7 @@ start_journal_io: if (unlikely(!buffer_uptodate(bh))) err = -EIO; jbd2_unfile_log_bh(bh); + stats.run.rs_blocks_logged++; /* * The list contains temporary buffer heads created by @@ -859,6 +859,7 @@ start_journal_io: BUFFER_TRACE(bh, "ph5: control buffer writeout done: unfile"); clear_buffer_jwrite(bh); jbd2_unfile_log_bh(bh); + stats.run.rs_blocks_logged++; __brelse(bh); /* One for getblk */ /* AKPM: bforget here */ } @@ -880,6 +881,7 @@ start_journal_io: } if (cbh) err = journal_wait_on_commit_record(journal, cbh); + stats.run.rs_blocks_logged++; if (jbd2_has_feature_async_commit(journal) && journal->j_flags & JBD2_BARRIER) { blkdev_issue_flush(journal->j_dev, GFP_NOFS, NULL); diff --git a/fs/ocfs2/acl.c b/fs/ocfs2/acl.c index 3e7da392aa6f..bb981ec76456 100644 --- a/fs/ocfs2/acl.c +++ b/fs/ocfs2/acl.c @@ -327,8 +327,8 @@ int ocfs2_acl_chmod(struct inode *inode, struct buffer_head *bh) down_read(&OCFS2_I(inode)->ip_xattr_sem); acl = ocfs2_get_acl_nolock(inode, ACL_TYPE_ACCESS, bh); up_read(&OCFS2_I(inode)->ip_xattr_sem); - if (IS_ERR(acl) || !acl) - return PTR_ERR(acl); + if (IS_ERR_OR_NULL(acl)) + return PTR_ERR_OR_ZERO(acl); ret = __posix_acl_chmod(&acl, GFP_KERNEL, inode->i_mode); if (ret) return ret; diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 7f0b39da5022..9b96243de081 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -2861,68 +2861,73 @@ EXPORT_SYMBOL(dquot_quotactl_sysfile_ops); static int do_proc_dqstats(struct ctl_table *table, int write, void __user *buffer, size_t *lenp, loff_t *ppos) { - unsigned int type = (int *)table->data - dqstats.stat; + unsigned int type = (unsigned long *)table->data - dqstats.stat; + s64 value = percpu_counter_sum(&dqstats.counter[type]); + + /* Filter negative values for non-monotonic counters */ + if (value < 0 && (type == DQST_ALLOC_DQUOTS || + type == DQST_FREE_DQUOTS)) + value = 0; /* Update global table */ - dqstats.stat[type] = - percpu_counter_sum_positive(&dqstats.counter[type]); - return proc_dointvec(table, write, buffer, lenp, ppos); + dqstats.stat[type] = value; + return proc_doulongvec_minmax(table, write, buffer, lenp, ppos); } static struct ctl_table fs_dqstats_table[] = { { .procname = "lookups", .data = &dqstats.stat[DQST_LOOKUPS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "drops", .data = &dqstats.stat[DQST_DROPS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "reads", .data = &dqstats.stat[DQST_READS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "writes", .data = &dqstats.stat[DQST_WRITES], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "cache_hits", .data = &dqstats.stat[DQST_CACHE_HITS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "allocated_dquots", .data = &dqstats.stat[DQST_ALLOC_DQUOTS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "free_dquots", .data = &dqstats.stat[DQST_FREE_DQUOTS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, { .procname = "syncs", .data = &dqstats.stat[DQST_SYNCS], - .maxlen = sizeof(int), + .maxlen = sizeof(unsigned long), .mode = 0444, .proc_handler = do_proc_dqstats, }, diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index fc08951daa62..ebf17d7e1093 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -1837,13 +1837,12 @@ static int userfaultfd_api(struct userfaultfd_ctx *ctx, if (copy_from_user(&uffdio_api, buf, sizeof(uffdio_api))) goto out; features = uffdio_api.features; - if (uffdio_api.api != UFFD_API || (features & ~UFFD_API_FEATURES)) { - memset(&uffdio_api, 0, sizeof(uffdio_api)); - if (copy_to_user(buf, &uffdio_api, sizeof(uffdio_api))) - goto out; - ret = -EINVAL; - goto out; - } + ret = -EINVAL; + if (uffdio_api.api != UFFD_API || (features & ~UFFD_API_FEATURES)) + goto err_out; + ret = -EPERM; + if ((features & UFFD_FEATURE_EVENT_FORK) && !capable(CAP_SYS_PTRACE)) + goto err_out; /* report all available features and ioctls to userland */ uffdio_api.features = UFFD_API_FEATURES; uffdio_api.ioctls = UFFD_API_IOCTLS; @@ -1856,6 +1855,11 @@ static int userfaultfd_api(struct userfaultfd_ctx *ctx, ret = 0; out: return ret; +err_out: + memset(&uffdio_api, 0, sizeof(uffdio_api)); + if (copy_to_user(buf, &uffdio_api, sizeof(uffdio_api))) + ret = -EFAULT; + goto out; } static long userfaultfd_ioctl(struct file *file, unsigned cmd, diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c index 641d07f30a27..7b0d9ad8cb1a 100644 --- a/fs/xfs/xfs_log.c +++ b/fs/xfs/xfs_log.c @@ -1495,6 +1495,8 @@ out_free_iclog: prev_iclog = iclog->ic_next; kmem_free(iclog->ic_data); kmem_free(iclog); + if (prev_iclog == log->l_iclog) + break; } out_free_log: kmem_free(log); diff --git a/include/linux/dma-direct.h b/include/linux/dma-direct.h index adf993a3bd58..6a18a97b76a8 100644 --- a/include/linux/dma-direct.h +++ b/include/linux/dma-direct.h @@ -3,8 +3,11 @@ #define _LINUX_DMA_DIRECT_H 1 #include +#include /* for min_low_pfn */ #include +static inline dma_addr_t phys_to_dma(struct device *dev, phys_addr_t paddr); + #ifdef CONFIG_ARCH_HAS_PHYS_TO_DMA #include #else @@ -24,11 +27,16 @@ static inline phys_addr_t __dma_to_phys(struct device *dev, dma_addr_t dev_addr) static inline bool dma_capable(struct device *dev, dma_addr_t addr, size_t size) { + dma_addr_t end = addr + size - 1; + if (!dev->dma_mask) return false; - return addr + size - 1 <= - min_not_zero(*dev->dma_mask, dev->bus_dma_mask); + if (!IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT) && + min(addr, end) < phys_to_dma(dev, PFN_PHYS(min_low_pfn))) + return false; + + return end <= min_not_zero(*dev->dma_mask, dev->bus_dma_mask); } #endif /* !CONFIG_ARCH_HAS_PHYS_TO_DMA */ diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 4615d5e86945..07014778b5dd 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -209,7 +209,7 @@ int dma_release_from_dev_coherent(struct device *dev, int order, void *vaddr); int dma_mmap_from_dev_coherent(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, size_t size, int *ret); -void *dma_alloc_from_global_coherent(ssize_t size, dma_addr_t *dma_handle); +void *dma_alloc_from_global_coherent(struct device *dev, ssize_t size, dma_addr_t *dma_handle); int dma_release_from_global_coherent(int order, void *vaddr); int dma_mmap_from_global_coherent(struct vm_area_struct *vma, void *cpu_addr, size_t size, int *ret); @@ -219,7 +219,7 @@ int dma_mmap_from_global_coherent(struct vm_area_struct *vma, void *cpu_addr, #define dma_release_from_dev_coherent(dev, order, vaddr) (0) #define dma_mmap_from_dev_coherent(dev, vma, vaddr, order, ret) (0) -static inline void *dma_alloc_from_global_coherent(ssize_t size, +static inline void *dma_alloc_from_global_coherent(struct device *dev, ssize_t size, dma_addr_t *dma_handle) { return NULL; @@ -630,6 +630,10 @@ static inline unsigned long dma_get_merge_boundary(struct device *dev) static inline dma_addr_t dma_map_single_attrs(struct device *dev, void *ptr, size_t size, enum dma_data_direction dir, unsigned long attrs) { + /* DMA must never operate on areas that might be remapped. */ + if (dev_WARN_ONCE(dev, is_vmalloc_addr(ptr), + "rejecting DMA map of vmalloc memory\n")) + return DMA_MAPPING_ERROR; debug_dma_map_single(dev, ptr, size); return dma_map_page_attrs(dev, virt_to_page(ptr), offset_in_page(ptr), size, dir, attrs); diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index c91b534125e6..761caacef617 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h @@ -462,12 +462,18 @@ extern u64 hrtimer_next_event_without(const struct hrtimer *exclude); extern bool hrtimer_active(const struct hrtimer *timer); -/* - * Helper function to check, whether the timer is on one of the queues +/** + * hrtimer_is_queued = check, whether the timer is on one of the queues + * @timer: Timer to check + * + * Returns: True if the timer is queued, false otherwise + * + * The function can be used lockless, but it gives only a current snapshot. */ -static inline int hrtimer_is_queued(struct hrtimer *timer) +static inline bool hrtimer_is_queued(struct hrtimer *timer) { - return timer->state & HRTIMER_STATE_ENQUEUED; + /* The READ_ONCE pairs with the update functions of timer->state */ + return !!(READ_ONCE(timer->state) & HRTIMER_STATE_ENQUEUED); } /* diff --git a/include/linux/libfdt_env.h b/include/linux/libfdt_env.h index edb0f0c30904..1adf54aad2df 100644 --- a/include/linux/libfdt_env.h +++ b/include/linux/libfdt_env.h @@ -7,6 +7,9 @@ #include +#define INT32_MAX S32_MAX +#define UINT32_MAX U32_MAX + typedef __be16 fdt16_t; typedef __be32 fdt32_t; typedef __be64 fdt64_t; diff --git a/include/linux/posix-clock.h b/include/linux/posix-clock.h index fe6cfdcfbc26..468328b1e1dd 100644 --- a/include/linux/posix-clock.h +++ b/include/linux/posix-clock.h @@ -69,29 +69,32 @@ struct posix_clock_operations { * * @ops: Functional interface to the clock * @cdev: Character device instance for this clock - * @kref: Reference count. + * @dev: Pointer to the clock's device. * @rwsem: Protects the 'zombie' field from concurrent access. * @zombie: If 'zombie' is true, then the hardware has disappeared. - * @release: A function to free the structure when the reference count reaches - * zero. May be NULL if structure is statically allocated. * * Drivers should embed their struct posix_clock within a private * structure, obtaining a reference to it during callbacks using * container_of(). + * + * Drivers should supply an initialized but not exposed struct device + * to posix_clock_register(). It is used to manage lifetime of the + * driver's private structure. It's 'release' field should be set to + * a release function for this private structure. */ struct posix_clock { struct posix_clock_operations ops; struct cdev cdev; - struct kref kref; + struct device *dev; struct rw_semaphore rwsem; bool zombie; - void (*release)(struct posix_clock *clk); }; /** * posix_clock_register() - register a new clock - * @clk: Pointer to the clock. Caller must provide 'ops' and 'release' - * @devid: Allocated device id + * @clk: Pointer to the clock. Caller must provide 'ops' field + * @dev: Pointer to the initialized device. Caller must provide + * 'release' field * * A clock driver calls this function to register itself with the * clock device subsystem. If 'clk' points to dynamically allocated @@ -100,7 +103,7 @@ struct posix_clock { * * Returns zero on success, non-zero otherwise. */ -int posix_clock_register(struct posix_clock *clk, dev_t devid); +int posix_clock_register(struct posix_clock *clk, struct device *dev); /** * posix_clock_unregister() - unregister a clock diff --git a/include/linux/quota.h b/include/linux/quota.h index f32dd270b8e3..27aab84fcbaa 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h @@ -263,7 +263,7 @@ enum { }; struct dqstats { - int stat[_DQST_DQSTAT_LAST]; + unsigned long stat[_DQST_DQSTAT_LAST]; struct percpu_counter counter[_DQST_DQSTAT_LAST]; }; diff --git a/include/linux/rculist_nulls.h b/include/linux/rculist_nulls.h index bc8206a8f30e..61974c4c566b 100644 --- a/include/linux/rculist_nulls.h +++ b/include/linux/rculist_nulls.h @@ -100,6 +100,43 @@ static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n, first->pprev = &n->next; } +/** + * hlist_nulls_add_tail_rcu + * @n: the element to add to the hash list. + * @h: the list to add to. + * + * Description: + * Adds the specified element to the specified hlist_nulls, + * while permitting racing traversals. + * + * The caller must take whatever precautions are necessary + * (such as holding appropriate locks) to avoid racing + * with another list-mutation primitive, such as hlist_nulls_add_head_rcu() + * or hlist_nulls_del_rcu(), running on this same list. + * However, it is perfectly legal to run concurrently with + * the _rcu list-traversal primitives, such as + * hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency + * problems on Alpha CPUs. Regardless of the type of CPU, the + * list-traversal primitive must be guarded by rcu_read_lock(). + */ +static inline void hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n, + struct hlist_nulls_head *h) +{ + struct hlist_nulls_node *i, *last = NULL; + + /* Note: write side code, so rcu accessors are not needed. */ + for (i = h->first; !is_a_nulls(i); i = i->next) + last = i; + + if (last) { + n->next = last->next; + n->pprev = &last->next; + rcu_assign_pointer(hlist_next_rcu(last), n); + } else { + hlist_nulls_add_head_rcu(n, h); + } +} + /** * hlist_nulls_for_each_entry_rcu - iterate over rcu list of given type * @tpos: the type * to use as a loop cursor. diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 1ba6e2cc2725..6ae88b0c1c31 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -1795,7 +1795,7 @@ static inline struct sk_buff *skb_peek_next(struct sk_buff *skb, */ static inline struct sk_buff *skb_peek_tail(const struct sk_buff_head *list_) { - struct sk_buff *skb = list_->prev; + struct sk_buff *skb = READ_ONCE(list_->prev); if (skb == (struct sk_buff *)list_) skb = NULL; @@ -1861,7 +1861,9 @@ static inline void __skb_insert(struct sk_buff *newsk, struct sk_buff *prev, struct sk_buff *next, struct sk_buff_head *list) { - /* see skb_queue_empty_lockless() for the opposite READ_ONCE() */ + /* See skb_queue_empty_lockless() and skb_peek_tail() + * for the opposite READ_ONCE() + */ WRITE_ONCE(newsk->next, next); WRITE_ONCE(newsk->prev, prev); WRITE_ONCE(next->prev, newsk); diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index 659a4400517b..e93e249a4e9b 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h @@ -147,6 +147,8 @@ check_copy_size(const void *addr, size_t bytes, bool is_source) __bad_copy_to(); return false; } + if (WARN_ON_ONCE(bytes > INT_MAX)) + return false; check_object_size(addr, bytes, is_source); return true; } diff --git a/include/net/dst.h b/include/net/dst.h index 8224dad2ae94..3448cf865ede 100644 --- a/include/net/dst.h +++ b/include/net/dst.h @@ -516,7 +516,16 @@ static inline void skb_dst_update_pmtu(struct sk_buff *skb, u32 mtu) struct dst_entry *dst = skb_dst(skb); if (dst && dst->ops->update_pmtu) - dst->ops->update_pmtu(dst, NULL, skb, mtu); + dst->ops->update_pmtu(dst, NULL, skb, mtu, true); +} + +/* update dst pmtu but not do neighbor confirm */ +static inline void skb_dst_update_pmtu_no_confirm(struct sk_buff *skb, u32 mtu) +{ + struct dst_entry *dst = skb_dst(skb); + + if (dst && dst->ops->update_pmtu) + dst->ops->update_pmtu(dst, NULL, skb, mtu, false); } static inline void skb_tunnel_check_pmtu(struct sk_buff *skb, @@ -526,7 +535,7 @@ static inline void skb_tunnel_check_pmtu(struct sk_buff *skb, u32 encap_mtu = dst_mtu(encap_dst); if (skb->len > encap_mtu - headroom) - skb_dst_update_pmtu(skb, encap_mtu - headroom); + skb_dst_update_pmtu_no_confirm(skb, encap_mtu - headroom); } #endif /* _NET_DST_H */ diff --git a/include/net/dst_ops.h b/include/net/dst_ops.h index 5ec645f27ee3..443863c7b8da 100644 --- a/include/net/dst_ops.h +++ b/include/net/dst_ops.h @@ -27,7 +27,8 @@ struct dst_ops { struct dst_entry * (*negative_advice)(struct dst_entry *); void (*link_failure)(struct sk_buff *); void (*update_pmtu)(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu); + struct sk_buff *skb, u32 mtu, + bool confirm_neigh); void (*redirect)(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb); int (*local_out)(struct net *net, struct sock *sk, struct sk_buff *skb); diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index af2b4c065a04..d0019d3395cf 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h @@ -103,13 +103,19 @@ struct inet_bind_hashbucket { struct hlist_head chain; }; -/* - * Sockets can be hashed in established or listening table +/* Sockets can be hashed in established or listening table. + * We must use different 'nulls' end-of-chain value for all hash buckets : + * A socket might transition from ESTABLISH to LISTEN state without + * RCU grace period. A lookup in ehash table needs to handle this case. */ +#define LISTENING_NULLS_BASE (1U << 29) struct inet_listen_hashbucket { spinlock_t lock; unsigned int count; - struct hlist_head head; + union { + struct hlist_head head; + struct hlist_nulls_head nulls_head; + }; }; /* This is for listening sockets, thus all sockets which possess wildcards. */ diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h index d80acda231ae..47e61956168d 100644 --- a/include/net/sch_generic.h +++ b/include/net/sch_generic.h @@ -308,6 +308,7 @@ struct tcf_proto_ops { int (*delete)(struct tcf_proto *tp, void *arg, bool *last, bool rtnl_held, struct netlink_ext_ack *); + bool (*delete_empty)(struct tcf_proto *tp); void (*walk)(struct tcf_proto *tp, struct tcf_walker *arg, bool rtnl_held); int (*reoffload)(struct tcf_proto *tp, bool add, @@ -336,6 +337,10 @@ struct tcf_proto_ops { int flags; }; +/* Classifiers setting TCF_PROTO_OPS_DOIT_UNLOCKED in tcf_proto_ops->flags + * are expected to implement tcf_proto_ops->delete_empty(), otherwise race + * conditions can occur when filters are inserted/deleted simultaneously. + */ enum tcf_proto_ops_flags { TCF_PROTO_OPS_DOIT_UNLOCKED = 1, }; diff --git a/include/net/sock.h b/include/net/sock.h index 013396e50b91..e09e2886a836 100644 --- a/include/net/sock.h +++ b/include/net/sock.h @@ -723,6 +723,11 @@ static inline void __sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_h hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list); } +static inline void __sk_nulls_add_node_tail_rcu(struct sock *sk, struct hlist_nulls_head *list) +{ + hlist_nulls_add_tail_rcu(&sk->sk_nulls_node, list); +} + static inline void sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list) { sock_hold(sk); diff --git a/include/scsi/iscsi_proto.h b/include/scsi/iscsi_proto.h index b71b5c4f418c..533f56733ba8 100644 --- a/include/scsi/iscsi_proto.h +++ b/include/scsi/iscsi_proto.h @@ -627,6 +627,7 @@ struct iscsi_reject { #define ISCSI_REASON_BOOKMARK_INVALID 9 #define ISCSI_REASON_BOOKMARK_NO_RESOURCES 10 #define ISCSI_REASON_NEGOTIATION_RESET 11 +#define ISCSI_REASON_WAITING_FOR_LOGOUT 12 /* Max. number of Key=Value pairs in a text message */ #define MAX_KEY_VALUE_PAIRS 8192 diff --git a/kernel/dma/coherent.c b/kernel/dma/coherent.c index 545e3869b0e3..551b0eb7028a 100644 --- a/kernel/dma/coherent.c +++ b/kernel/dma/coherent.c @@ -123,8 +123,9 @@ int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr, return ret; } -static void *__dma_alloc_from_coherent(struct dma_coherent_mem *mem, - ssize_t size, dma_addr_t *dma_handle) +static void *__dma_alloc_from_coherent(struct device *dev, + struct dma_coherent_mem *mem, + ssize_t size, dma_addr_t *dma_handle) { int order = get_order(size); unsigned long flags; @@ -143,7 +144,7 @@ static void *__dma_alloc_from_coherent(struct dma_coherent_mem *mem, /* * Memory was found in the coherent area. */ - *dma_handle = mem->device_base + (pageno << PAGE_SHIFT); + *dma_handle = dma_get_device_base(dev, mem) + (pageno << PAGE_SHIFT); ret = mem->virt_base + (pageno << PAGE_SHIFT); spin_unlock_irqrestore(&mem->spinlock, flags); memset(ret, 0, size); @@ -175,17 +176,18 @@ int dma_alloc_from_dev_coherent(struct device *dev, ssize_t size, if (!mem) return 0; - *ret = __dma_alloc_from_coherent(mem, size, dma_handle); + *ret = __dma_alloc_from_coherent(dev, mem, size, dma_handle); return 1; } -void *dma_alloc_from_global_coherent(ssize_t size, dma_addr_t *dma_handle) +void *dma_alloc_from_global_coherent(struct device *dev, ssize_t size, + dma_addr_t *dma_handle) { if (!dma_coherent_default_memory) return NULL; - return __dma_alloc_from_coherent(dma_coherent_default_memory, size, - dma_handle); + return __dma_alloc_from_coherent(dev, dma_coherent_default_memory, size, + dma_handle); } static int __dma_release_from_coherent(struct dma_coherent_mem *mem, diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c index 099002d84f46..4ad74f5987ea 100644 --- a/kernel/dma/debug.c +++ b/kernel/dma/debug.c @@ -420,6 +420,7 @@ void debug_dma_dump_mappings(struct device *dev) } spin_unlock_irqrestore(&bucket->lock, flags); + cond_resched(); } } diff --git a/kernel/exit.c b/kernel/exit.c index d45ee19adcc8..08df9121b6a3 100644 --- a/kernel/exit.c +++ b/kernel/exit.c @@ -517,10 +517,6 @@ static struct task_struct *find_child_reaper(struct task_struct *father, } write_unlock_irq(&tasklist_lock); - if (unlikely(pid_ns == &init_pid_ns)) { - panic("Attempted to kill init! exitcode=0x%08x\n", - father->signal->group_exit_code ?: father->exit_code); - } list_for_each_entry_safe(p, n, dead, ptrace_entry) { list_del_init(&p->ptrace_entry); @@ -767,6 +763,14 @@ void __noreturn do_exit(long code) acct_update_integrals(tsk); group_dead = atomic_dec_and_test(&tsk->signal->live); if (group_dead) { + /* + * If the last thread of global init has exited, panic + * immediately to get a useable coredump. + */ + if (unlikely(is_global_init(tsk))) + panic("Attempted to kill init! exitcode=0x%08x\n", + tsk->signal->group_exit_code ?: (int)code); + #ifdef CONFIG_POSIX_TIMERS hrtimer_cancel(&tsk->signal->real_timer); exit_itimers(tsk->signal); diff --git a/kernel/sysctl.c b/kernel/sysctl.c index 45380ac22a51..bab0f9be28bf 100644 --- a/kernel/sysctl.c +++ b/kernel/sysctl.c @@ -1732,7 +1732,7 @@ static struct ctl_table vm_table[] = { .procname = "drop_caches", .data = &sysctl_drop_caches, .maxlen = sizeof(int), - .mode = 0644, + .mode = 0200, .proc_handler = drop_caches_sysctl_handler, .extra1 = SYSCTL_ONE, .extra2 = &four, diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index 6c39b7f6bb1a..02f1ad059f58 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -966,7 +966,8 @@ static int enqueue_hrtimer(struct hrtimer *timer, base->cpu_base->active_bases |= 1 << base->index; - timer->state |= HRTIMER_STATE_ENQUEUED; + /* Pairs with the lockless read in hrtimer_is_queued() */ + WRITE_ONCE(timer->state, timer->state | HRTIMER_STATE_ENQUEUED); return timerqueue_add(&base->active, &timer->node); } @@ -1009,7 +1010,7 @@ out: * We need to preserve PINNED state here, otherwise we may end up * migrating pinned hrtimers as well. */ - timer->state = newstate | (timer->state & HRTIMER_STATE_PINNED); + WRITE_ONCE(timer->state, newstate | (timer->state & HRTIMER_STATE_PINNED)); } /* @@ -1018,8 +1019,9 @@ out: static inline int remove_hrtimer(struct hrtimer *timer, struct hrtimer_clock_base *base, bool restart) { - if (hrtimer_is_queued(timer)) { - u8 state = timer->state; + u8 state = timer->state; + + if (state & HRTIMER_STATE_ENQUEUED) { int reprogram; /* diff --git a/kernel/time/posix-clock.c b/kernel/time/posix-clock.c index ec960bb939fd..200fb2d3be99 100644 --- a/kernel/time/posix-clock.c +++ b/kernel/time/posix-clock.c @@ -14,8 +14,6 @@ #include "posix-timers.h" -static void delete_clock(struct kref *kref); - /* * Returns NULL if the posix_clock instance attached to 'fp' is old and stale. */ @@ -125,7 +123,7 @@ static int posix_clock_open(struct inode *inode, struct file *fp) err = 0; if (!err) { - kref_get(&clk->kref); + get_device(clk->dev); fp->private_data = clk; } out: @@ -141,7 +139,7 @@ static int posix_clock_release(struct inode *inode, struct file *fp) if (clk->ops.release) err = clk->ops.release(clk); - kref_put(&clk->kref, delete_clock); + put_device(clk->dev); fp->private_data = NULL; @@ -161,38 +159,35 @@ static const struct file_operations posix_clock_file_operations = { #endif }; -int posix_clock_register(struct posix_clock *clk, dev_t devid) +int posix_clock_register(struct posix_clock *clk, struct device *dev) { int err; - kref_init(&clk->kref); init_rwsem(&clk->rwsem); cdev_init(&clk->cdev, &posix_clock_file_operations); + err = cdev_device_add(&clk->cdev, dev); + if (err) { + pr_err("%s unable to add device %d:%d\n", + dev_name(dev), MAJOR(dev->devt), MINOR(dev->devt)); + return err; + } clk->cdev.owner = clk->ops.owner; - err = cdev_add(&clk->cdev, devid, 1); + clk->dev = dev; - return err; + return 0; } EXPORT_SYMBOL_GPL(posix_clock_register); -static void delete_clock(struct kref *kref) -{ - struct posix_clock *clk = container_of(kref, struct posix_clock, kref); - - if (clk->release) - clk->release(clk); -} - void posix_clock_unregister(struct posix_clock *clk) { - cdev_del(&clk->cdev); + cdev_device_del(&clk->cdev, clk->dev); down_write(&clk->rwsem); clk->zombie = true; up_write(&clk->rwsem); - kref_put(&clk->kref, delete_clock); + put_device(clk->dev); } EXPORT_SYMBOL_GPL(posix_clock_unregister); diff --git a/net/bridge/br_netfilter_hooks.c b/net/bridge/br_netfilter_hooks.c index af7800103e51..59980ecfc962 100644 --- a/net/bridge/br_netfilter_hooks.c +++ b/net/bridge/br_netfilter_hooks.c @@ -662,6 +662,9 @@ static unsigned int br_nf_forward_arp(void *priv, nf_bridge_pull_encap_header(skb); } + if (unlikely(!pskb_may_pull(skb, sizeof(struct arphdr)))) + return NF_DROP; + if (arp_hdr(skb)->ar_pln != 4) { if (is_vlan_arp(skb, state->net)) nf_bridge_push_encap_header(skb); diff --git a/net/bridge/br_nf_core.c b/net/bridge/br_nf_core.c index 2cdfc5d6c25d..8c69f0c95a8e 100644 --- a/net/bridge/br_nf_core.c +++ b/net/bridge/br_nf_core.c @@ -22,7 +22,8 @@ #endif static void fake_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { } diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c index 4096d8a74a2b..e1256e03a9a8 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c @@ -1867,7 +1867,7 @@ static int ebt_buf_count(struct ebt_entries_buf_state *state, unsigned int sz) } static int ebt_buf_add(struct ebt_entries_buf_state *state, - void *data, unsigned int sz) + const void *data, unsigned int sz) { if (state->buf_kern_start == NULL) goto count_only; @@ -1901,7 +1901,7 @@ enum compat_mwt { EBT_COMPAT_TARGET, }; -static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt, +static int compat_mtw_from_user(const struct compat_ebt_entry_mwt *mwt, enum compat_mwt compat_mwt, struct ebt_entries_buf_state *state, const unsigned char *base) @@ -1979,22 +1979,23 @@ static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt, /* return size of all matches, watchers or target, including necessary * alignment and padding. */ -static int ebt_size_mwt(struct compat_ebt_entry_mwt *match32, +static int ebt_size_mwt(const struct compat_ebt_entry_mwt *match32, unsigned int size_left, enum compat_mwt type, struct ebt_entries_buf_state *state, const void *base) { + const char *buf = (const char *)match32; int growth = 0; - char *buf; if (size_left == 0) return 0; - buf = (char *) match32; - - while (size_left >= sizeof(*match32)) { + do { struct ebt_entry_match *match_kern; int ret; + if (size_left < sizeof(*match32)) + return -EINVAL; + match_kern = (struct ebt_entry_match *) state->buf_kern_start; if (match_kern) { char *tmp; @@ -2031,22 +2032,18 @@ static int ebt_size_mwt(struct compat_ebt_entry_mwt *match32, if (match_kern) match_kern->match_size = ret; - /* rule should have no remaining data after target */ - if (type == EBT_COMPAT_TARGET && size_left) - return -EINVAL; - match32 = (struct compat_ebt_entry_mwt *) buf; - } + } while (size_left); return growth; } /* called for all ebt_entry structures. */ -static int size_entry_mwt(struct ebt_entry *entry, const unsigned char *base, +static int size_entry_mwt(const struct ebt_entry *entry, const unsigned char *base, unsigned int *total, struct ebt_entries_buf_state *state) { - unsigned int i, j, startoff, new_offset = 0; + unsigned int i, j, startoff, next_expected_off, new_offset = 0; /* stores match/watchers/targets & offset of next struct ebt_entry: */ unsigned int offsets[4]; unsigned int *offsets_update = NULL; @@ -2132,11 +2129,13 @@ static int size_entry_mwt(struct ebt_entry *entry, const unsigned char *base, return ret; } - startoff = state->buf_user_offset - startoff; - - if (WARN_ON(*total < startoff)) + next_expected_off = state->buf_user_offset - startoff; + if (next_expected_off != entry->next_offset) return -EINVAL; - *total -= startoff; + + if (*total < entry->next_offset) + return -EINVAL; + *total -= entry->next_offset; return 0; } diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index aea918135ec3..08c3dc45f1a4 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c @@ -110,7 +110,8 @@ static void dn_dst_ifdown(struct dst_entry *, struct net_device *dev, int how); static struct dst_entry *dn_dst_negative_advice(struct dst_entry *); static void dn_dst_link_failure(struct sk_buff *); static void dn_dst_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb , u32 mtu); + struct sk_buff *skb , u32 mtu, + bool confirm_neigh); static void dn_dst_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb); static struct neighbour *dn_dst_neigh_lookup(const struct dst_entry *dst, @@ -251,7 +252,8 @@ static int dn_dst_gc(struct dst_ops *ops) * advertise to the other end). */ static void dn_dst_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { struct dn_route *rt = (struct dn_route *) dst; struct neighbour *n = rt->n; diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 4298aae74e0e..ac95ba78b903 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c @@ -249,10 +249,11 @@ bool icmp_global_allow(void) bool rc = false; /* Check if token bucket is empty and cannot be refilled - * without taking the spinlock. + * without taking the spinlock. The READ_ONCE() are paired + * with the following WRITE_ONCE() in this same function. */ - if (!icmp_global.credit) { - delta = min_t(u32, now - icmp_global.stamp, HZ); + if (!READ_ONCE(icmp_global.credit)) { + delta = min_t(u32, now - READ_ONCE(icmp_global.stamp), HZ); if (delta < HZ / 50) return false; } @@ -262,14 +263,14 @@ bool icmp_global_allow(void) if (delta >= HZ / 50) { incr = sysctl_icmp_msgs_per_sec * delta / HZ ; if (incr) - icmp_global.stamp = now; + WRITE_ONCE(icmp_global.stamp, now); } credit = min_t(u32, icmp_global.credit + incr, sysctl_icmp_msgs_burst); if (credit) { credit--; rc = true; } - icmp_global.credit = credit; + WRITE_ONCE(icmp_global.credit, credit); spin_unlock(&icmp_global.lock); return rc; } diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index eb30fc1770de..ac05e273bc66 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c @@ -1086,7 +1086,7 @@ struct dst_entry *inet_csk_update_pmtu(struct sock *sk, u32 mtu) if (!dst) goto out; } - dst->ops->update_pmtu(dst, sk, NULL, mtu); + dst->ops->update_pmtu(dst, sk, NULL, mtu, true); dst = __sk_dst_check(sk, 0); if (!dst) diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 7dc79b973e6e..6a4c82f96e78 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c @@ -914,11 +914,12 @@ void inet_diag_dump_icsk(struct inet_hashinfo *hashinfo, struct sk_buff *skb, for (i = s_i; i < INET_LHTABLE_SIZE; i++) { struct inet_listen_hashbucket *ilb; + struct hlist_nulls_node *node; num = 0; ilb = &hashinfo->listening_hash[i]; spin_lock(&ilb->lock); - sk_for_each(sk, &ilb->head) { + sk_nulls_for_each(sk, node, &ilb->nulls_head) { struct inet_sock *inet = inet_sk(sk); if (!net_eq(sock_net(sk), net)) diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index 83fb00153018..2bbaaf0c7176 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c @@ -516,10 +516,11 @@ static int inet_reuseport_add_sock(struct sock *sk, struct inet_listen_hashbucket *ilb) { struct inet_bind_bucket *tb = inet_csk(sk)->icsk_bind_hash; + const struct hlist_nulls_node *node; struct sock *sk2; kuid_t uid = sock_i_uid(sk); - sk_for_each_rcu(sk2, &ilb->head) { + sk_nulls_for_each_rcu(sk2, node, &ilb->nulls_head) { if (sk2 != sk && sk2->sk_family == sk->sk_family && ipv6_only_sock(sk2) == ipv6_only_sock(sk) && @@ -555,9 +556,9 @@ int __inet_hash(struct sock *sk, struct sock *osk) } if (IS_ENABLED(CONFIG_IPV6) && sk->sk_reuseport && sk->sk_family == AF_INET6) - hlist_add_tail_rcu(&sk->sk_node, &ilb->head); + __sk_nulls_add_node_tail_rcu(sk, &ilb->nulls_head); else - hlist_add_head_rcu(&sk->sk_node, &ilb->head); + __sk_nulls_add_node_rcu(sk, &ilb->nulls_head); inet_hash2(hashinfo, sk); ilb->count++; sock_set_flag(sk, SOCK_RCU_FREE); @@ -606,11 +607,9 @@ void inet_unhash(struct sock *sk) reuseport_detach_sock(sk); if (ilb) { inet_unhash2(hashinfo, sk); - __sk_del_node_init(sk); - ilb->count--; - } else { - __sk_nulls_del_node_init_rcu(sk); + ilb->count--; } + __sk_nulls_del_node_init_rcu(sk); sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1); unlock: spin_unlock_bh(lock); @@ -750,7 +749,8 @@ void inet_hashinfo_init(struct inet_hashinfo *h) for (i = 0; i < INET_LHTABLE_SIZE; i++) { spin_lock_init(&h->listening_hash[i].lock); - INIT_HLIST_HEAD(&h->listening_hash[i].head); + INIT_HLIST_NULLS_HEAD(&h->listening_hash[i].nulls_head, + i + LISTENING_NULLS_BASE); h->listening_hash[i].count = 0; } diff --git a/net/ipv4/inetpeer.c b/net/ipv4/inetpeer.c index be778599bfed..ff327a62c9ce 100644 --- a/net/ipv4/inetpeer.c +++ b/net/ipv4/inetpeer.c @@ -160,7 +160,12 @@ static void inet_peer_gc(struct inet_peer_base *base, base->total / inet_peer_threshold * HZ; for (i = 0; i < gc_cnt; i++) { p = gc_stack[i]; - delta = (__u32)jiffies - p->dtime; + + /* The READ_ONCE() pairs with the WRITE_ONCE() + * in inet_putpeer() + */ + delta = (__u32)jiffies - READ_ONCE(p->dtime); + if (delta < ttl || !refcount_dec_if_one(&p->refcnt)) gc_stack[i] = NULL; } @@ -237,7 +242,10 @@ EXPORT_SYMBOL_GPL(inet_getpeer); void inet_putpeer(struct inet_peer *p) { - p->dtime = (__u32)jiffies; + /* The WRITE_ONCE() pairs with itself (we run lockless) + * and the READ_ONCE() in inet_peer_gc() + */ + WRITE_ONCE(p->dtime, (__u32)jiffies); if (refcount_dec_and_test(&p->refcnt)) call_rcu(&p->rcu, inetpeer_free_rcu); diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c index 38c02bb62e2c..0fe2a5d3e258 100644 --- a/net/ipv4/ip_tunnel.c +++ b/net/ipv4/ip_tunnel.c @@ -505,7 +505,7 @@ static int tnl_update_pmtu(struct net_device *dev, struct sk_buff *skb, mtu = skb_valid_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu; if (skb_valid_dst(skb)) - skb_dst_update_pmtu(skb, mtu); + skb_dst_update_pmtu_no_confirm(skb, mtu); if (skb->protocol == htons(ETH_P_IP)) { if (!skb_is_gso(skb) && diff --git a/net/ipv4/ip_vti.c b/net/ipv4/ip_vti.c index cfb025606793..fb9f6d60c27c 100644 --- a/net/ipv4/ip_vti.c +++ b/net/ipv4/ip_vti.c @@ -214,7 +214,7 @@ static netdev_tx_t vti_xmit(struct sk_buff *skb, struct net_device *dev, mtu = dst_mtu(dst); if (skb->len > mtu) { - skb_dst_update_pmtu(skb, mtu); + skb_dst_update_pmtu_no_confirm(skb, mtu); if (skb->protocol == htons(ETH_P_IP)) { icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED, htonl(mtu)); diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 621f83434b24..fe34e9e0912a 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -139,7 +139,8 @@ static unsigned int ipv4_mtu(const struct dst_entry *dst); static struct dst_entry *ipv4_negative_advice(struct dst_entry *dst); static void ipv4_link_failure(struct sk_buff *skb); static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu); + struct sk_buff *skb, u32 mtu, + bool confirm_neigh); static void ip_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb); static void ipv4_dst_destroy(struct dst_entry *dst); @@ -1043,7 +1044,8 @@ static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu) } static void ip_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { struct rtable *rt = (struct rtable *) dst; struct flowi4 fl4; @@ -2648,7 +2650,8 @@ static unsigned int ipv4_blackhole_mtu(const struct dst_entry *dst) } static void ipv4_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { } diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 67b2dc7a1727..eda64871f983 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -2149,13 +2149,14 @@ static void *listening_get_next(struct seq_file *seq, void *cur) struct tcp_iter_state *st = seq->private; struct net *net = seq_file_net(seq); struct inet_listen_hashbucket *ilb; + struct hlist_nulls_node *node; struct sock *sk = cur; if (!sk) { get_head: ilb = &tcp_hashinfo.listening_hash[st->bucket]; spin_lock(&ilb->lock); - sk = sk_head(&ilb->head); + sk = sk_nulls_head(&ilb->nulls_head); st->offset = 0; goto get_sk; } @@ -2163,9 +2164,9 @@ get_head: ++st->num; ++st->offset; - sk = sk_next(sk); + sk = sk_nulls_next(sk); get_sk: - sk_for_each_from(sk) { + sk_nulls_for_each_from(sk, node) { if (!net_eq(sock_net(sk), net)) continue; if (sk->sk_family == afinfo->family) diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 762edd800d78..0269584e9cf7 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -72,6 +72,9 @@ static void tcp_event_new_data_sent(struct sock *sk, struct sk_buff *skb) __skb_unlink(skb, &sk->sk_write_queue); tcp_rbtree_insert(&sk->tcp_rtx_queue, skb); + if (tp->highest_sack == NULL) + tp->highest_sack = skb; + tp->packets_out += tcp_skb_pcount(skb); if (!prior_packets || icsk->icsk_pending == ICSK_TIME_LOSS_PROBE) tcp_rearm_rto(sk); @@ -2438,6 +2441,14 @@ static bool tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle, if (tcp_small_queue_check(sk, skb, 0)) break; + /* Argh, we hit an empty skb(), presumably a thread + * is sleeping in sendmsg()/sk_stream_wait_memory(). + * We do not want to send a pure-ack packet and have + * a strange looking rtx queue with empty packet(s). + */ + if (TCP_SKB_CB(skb)->end_seq == TCP_SKB_CB(skb)->seq) + break; + if (unlikely(tcp_transmit_skb(sk, skb, 1, gfp))) break; diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 447defbfccdd..7aa4e77161f6 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1475,7 +1475,7 @@ int __udp_enqueue_schedule_skb(struct sock *sk, struct sk_buff *skb) * queue contains some other skb */ rmem = atomic_add_return(size, &sk->sk_rmem_alloc); - if (rmem > (size + sk->sk_rcvbuf)) + if (rmem > (size + (unsigned int)sk->sk_rcvbuf)) goto uncharge_drop; spin_lock(&list->lock); diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index 35b84b52b702..9ebd54752e03 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c @@ -100,12 +100,13 @@ static int xfrm4_fill_dst(struct xfrm_dst *xdst, struct net_device *dev, } static void xfrm4_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { struct xfrm_dst *xdst = (struct xfrm_dst *)dst; struct dst_entry *path = xdst->route; - path->ops->update_pmtu(path, sk, skb, mtu); + path->ops->update_pmtu(path, sk, skb, mtu, confirm_neigh); } static void xfrm4_redirect(struct dst_entry *dst, struct sock *sk, diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index b2f002624391..e13b73af6676 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -5253,16 +5253,16 @@ static int inet6_rtm_valid_getaddr_req(struct sk_buff *skb, return -EINVAL; } + if (!netlink_strict_get_check(skb)) + return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX, + ifa_ipv6_policy, extack); + ifm = nlmsg_data(nlh); if (ifm->ifa_prefixlen || ifm->ifa_flags || ifm->ifa_scope) { NL_SET_ERR_MSG_MOD(extack, "Invalid values in header for get address request"); return -EINVAL; } - if (!netlink_strict_get_check(skb)) - return nlmsg_parse_deprecated(nlh, sizeof(*ifm), tb, IFA_MAX, - ifa_ipv6_policy, extack); - err = nlmsg_parse_deprecated_strict(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy, extack); if (err) diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c index fe9cb8d1adca..e315526fa244 100644 --- a/net/ipv6/inet6_connection_sock.c +++ b/net/ipv6/inet6_connection_sock.c @@ -146,7 +146,7 @@ struct dst_entry *inet6_csk_update_pmtu(struct sock *sk, u32 mtu) if (IS_ERR(dst)) return NULL; - dst->ops->update_pmtu(dst, sk, NULL, mtu); + dst->ops->update_pmtu(dst, sk, NULL, mtu, true); dst = inet6_csk_route_socket(sk, &fl6); return IS_ERR(dst) ? NULL : dst; diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index 923034c52ce4..189de56f5e36 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -1040,7 +1040,7 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb, /* TooBig packet may have updated dst->dev's mtu */ if (!t->parms.collect_md && dst && dst_mtu(dst) > dst->dev->mtu) - dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu); + dst->ops->update_pmtu(dst, NULL, skb, dst->dev->mtu, false); err = ip6_tnl_xmit(skb, dev, dsfield, &fl6, encap_limit, &mtu, NEXTHDR_GRE); diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c index 754a484d35df..2f376dbc37d5 100644 --- a/net/ipv6/ip6_tunnel.c +++ b/net/ipv6/ip6_tunnel.c @@ -640,7 +640,7 @@ ip4ip6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, if (rel_info > dst_mtu(skb_dst(skb2))) goto out; - skb_dst_update_pmtu(skb2, rel_info); + skb_dst_update_pmtu_no_confirm(skb2, rel_info); } icmp_send(skb2, rel_type, rel_code, htonl(rel_info)); @@ -1132,7 +1132,7 @@ route_lookup: mtu = max(mtu, skb->protocol == htons(ETH_P_IPV6) ? IPV6_MIN_MTU : IPV4_MIN_MTU); - skb_dst_update_pmtu(skb, mtu); + skb_dst_update_pmtu_no_confirm(skb, mtu); if (skb->len - t->tun_hlen - eth_hlen > mtu && !skb_is_gso(skb)) { *pmtu = mtu; err = -EMSGSIZE; diff --git a/net/ipv6/ip6_vti.c b/net/ipv6/ip6_vti.c index 024db17386d2..6f08b760c2a7 100644 --- a/net/ipv6/ip6_vti.c +++ b/net/ipv6/ip6_vti.c @@ -479,7 +479,7 @@ vti6_xmit(struct sk_buff *skb, struct net_device *dev, struct flowi *fl) mtu = dst_mtu(dst); if (skb->len > mtu) { - skb_dst_update_pmtu(skb, mtu); + skb_dst_update_pmtu_no_confirm(skb, mtu); if (skb->protocol == htons(ETH_P_IPV6)) { if (mtu < IPV6_MIN_MTU) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index b3fb1732dd0b..a87b0c708571 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -95,7 +95,8 @@ static int ip6_pkt_prohibit(struct sk_buff *skb); static int ip6_pkt_prohibit_out(struct net *net, struct sock *sk, struct sk_buff *skb); static void ip6_link_failure(struct sk_buff *skb); static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu); + struct sk_buff *skb, u32 mtu, + bool confirm_neigh); static void rt6_do_redirect(struct dst_entry *dst, struct sock *sk, struct sk_buff *skb); static int rt6_score_route(const struct fib6_nh *nh, u32 fib6_flags, int oif, @@ -264,7 +265,8 @@ static unsigned int ip6_blackhole_mtu(const struct dst_entry *dst) } static void ip6_rt_blackhole_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { } @@ -2695,7 +2697,8 @@ static bool rt6_cache_allowed_for_pmtu(const struct rt6_info *rt) } static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk, - const struct ipv6hdr *iph, u32 mtu) + const struct ipv6hdr *iph, u32 mtu, + bool confirm_neigh) { const struct in6_addr *daddr, *saddr; struct rt6_info *rt6 = (struct rt6_info *)dst; @@ -2713,7 +2716,10 @@ static void __ip6_rt_update_pmtu(struct dst_entry *dst, const struct sock *sk, daddr = NULL; saddr = NULL; } - dst_confirm_neigh(dst, daddr); + + if (confirm_neigh) + dst_confirm_neigh(dst, daddr); + mtu = max_t(u32, mtu, IPV6_MIN_MTU); if (mtu >= dst_mtu(dst)) return; @@ -2767,9 +2773,11 @@ out_unlock: } static void ip6_rt_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { - __ip6_rt_update_pmtu(dst, sk, skb ? ipv6_hdr(skb) : NULL, mtu); + __ip6_rt_update_pmtu(dst, sk, skb ? ipv6_hdr(skb) : NULL, mtu, + confirm_neigh); } void ip6_update_pmtu(struct sk_buff *skb, struct net *net, __be32 mtu, @@ -2788,7 +2796,7 @@ void ip6_update_pmtu(struct sk_buff *skb, struct net *net, __be32 mtu, dst = ip6_route_output(net, NULL, &fl6); if (!dst->error) - __ip6_rt_update_pmtu(dst, NULL, iph, ntohl(mtu)); + __ip6_rt_update_pmtu(dst, NULL, iph, ntohl(mtu), true); dst_release(dst); } EXPORT_SYMBOL_GPL(ip6_update_pmtu); diff --git a/net/ipv6/sit.c b/net/ipv6/sit.c index b2ccbc473127..98954830c40b 100644 --- a/net/ipv6/sit.c +++ b/net/ipv6/sit.c @@ -944,7 +944,7 @@ static netdev_tx_t ipip6_tunnel_xmit(struct sk_buff *skb, } if (tunnel->parms.iph.daddr) - skb_dst_update_pmtu(skb, mtu); + skb_dst_update_pmtu_no_confirm(skb, mtu); if (skb->len > mtu && !skb_is_gso(skb)) { icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, mtu); diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 699e0730ce8e..af7a4b8b1e9c 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c @@ -98,12 +98,13 @@ static int xfrm6_fill_dst(struct xfrm_dst *xdst, struct net_device *dev, } static void xfrm6_update_pmtu(struct dst_entry *dst, struct sock *sk, - struct sk_buff *skb, u32 mtu) + struct sk_buff *skb, u32 mtu, + bool confirm_neigh) { struct xfrm_dst *xdst = (struct xfrm_dst *)dst; struct dst_entry *path = xdst->route; - path->ops->update_pmtu(path, sk, skb, mtu); + path->ops->update_pmtu(path, sk, skb, mtu, confirm_neigh); } static void xfrm6_redirect(struct dst_entry *dst, struct sock *sk, diff --git a/net/netfilter/ipvs/ip_vs_xmit.c b/net/netfilter/ipvs/ip_vs_xmit.c index 888d3068a492..c62a131a6094 100644 --- a/net/netfilter/ipvs/ip_vs_xmit.c +++ b/net/netfilter/ipvs/ip_vs_xmit.c @@ -208,7 +208,7 @@ static inline void maybe_update_pmtu(int skb_af, struct sk_buff *skb, int mtu) struct rtable *ort = skb_rtable(skb); if (!skb->dev && sk && sk_fullsock(sk)) - ort->dst.ops->update_pmtu(&ort->dst, sk, NULL, mtu); + ort->dst.ops->update_pmtu(&ort->dst, sk, NULL, mtu, true); } static inline bool ensure_mtu_is_adequate(struct netns_ipvs *ipvs, int skb_af, diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c index 08923b21e566..f0df0d90b8bd 100644 --- a/net/sched/act_mirred.c +++ b/net/sched/act_mirred.c @@ -219,8 +219,10 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a, bool use_reinsert; bool want_ingress; bool is_redirect; + bool expects_nh; int m_eaction; int mac_len; + bool at_nh; rec_level = __this_cpu_inc_return(mirred_rec_level); if (unlikely(rec_level > MIRRED_RECURSION_LIMIT)) { @@ -261,19 +263,19 @@ static int tcf_mirred_act(struct sk_buff *skb, const struct tc_action *a, goto out; } - /* If action's target direction differs than filter's direction, - * and devices expect a mac header on xmit, then mac push/pull is - * needed. - */ want_ingress = tcf_mirred_act_wants_ingress(m_eaction); - if (skb_at_tc_ingress(skb) != want_ingress && m_mac_header_xmit) { - if (!skb_at_tc_ingress(skb)) { - /* caught at egress, act ingress: pull mac */ - mac_len = skb_network_header(skb) - skb_mac_header(skb); + + expects_nh = want_ingress || !m_mac_header_xmit; + at_nh = skb->data == skb_network_header(skb); + if (at_nh != expects_nh) { + mac_len = skb_at_tc_ingress(skb) ? skb->mac_len : + skb_network_header(skb) - skb_mac_header(skb); + if (expects_nh) { + /* target device/action expect data at nh */ skb_pull_rcsum(skb2, mac_len); } else { - /* caught at ingress, act egress: push mac */ - skb_push_rcsum(skb2, skb->mac_len); + /* target device/action expect data at mac */ + skb_push_rcsum(skb2, mac_len); } } diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c index 6a0eacafdb19..76e0d122616a 100644 --- a/net/sched/cls_api.c +++ b/net/sched/cls_api.c @@ -308,33 +308,12 @@ static void tcf_proto_put(struct tcf_proto *tp, bool rtnl_held, tcf_proto_destroy(tp, rtnl_held, true, extack); } -static int walker_check_empty(struct tcf_proto *tp, void *fh, - struct tcf_walker *arg) +static bool tcf_proto_check_delete(struct tcf_proto *tp) { - if (fh) { - arg->nonempty = true; - return -1; - } - return 0; -} + if (tp->ops->delete_empty) + return tp->ops->delete_empty(tp); -static bool tcf_proto_is_empty(struct tcf_proto *tp, bool rtnl_held) -{ - struct tcf_walker walker = { .fn = walker_check_empty, }; - - if (tp->ops->walk) { - tp->ops->walk(tp, &walker, rtnl_held); - return !walker.nonempty; - } - return true; -} - -static bool tcf_proto_check_delete(struct tcf_proto *tp, bool rtnl_held) -{ - spin_lock(&tp->lock); - if (tcf_proto_is_empty(tp, rtnl_held)) - tp->deleting = true; - spin_unlock(&tp->lock); + tp->deleting = true; return tp->deleting; } @@ -1751,7 +1730,7 @@ static void tcf_chain_tp_delete_empty(struct tcf_chain *chain, * concurrently. * Mark tp for deletion if it is empty. */ - if (!tp_iter || !tcf_proto_check_delete(tp, rtnl_held)) { + if (!tp_iter || !tcf_proto_check_delete(tp)) { mutex_unlock(&chain->filter_chain_lock); return; } diff --git a/net/sched/cls_flower.c b/net/sched/cls_flower.c index 4ac110bf19c5..5cf8163710c8 100644 --- a/net/sched/cls_flower.c +++ b/net/sched/cls_flower.c @@ -2519,6 +2519,17 @@ static void fl_bind_class(void *fh, u32 classid, unsigned long cl) f->res.class = cl; } +static bool fl_delete_empty(struct tcf_proto *tp) +{ + struct cls_fl_head *head = fl_head_dereference(tp); + + spin_lock(&tp->lock); + tp->deleting = idr_is_empty(&head->handle_idr); + spin_unlock(&tp->lock); + + return tp->deleting; +} + static struct tcf_proto_ops cls_fl_ops __read_mostly = { .kind = "flower", .classify = fl_classify, @@ -2528,6 +2539,7 @@ static struct tcf_proto_ops cls_fl_ops __read_mostly = { .put = fl_put, .change = fl_change, .delete = fl_delete, + .delete_empty = fl_delete_empty, .walk = fl_walk, .reoffload = fl_reoffload, .hw_add = fl_hw_add, diff --git a/net/sched/sch_fq.c b/net/sched/sch_fq.c index 98dd87ce1510..78ecdf146882 100644 --- a/net/sched/sch_fq.c +++ b/net/sched/sch_fq.c @@ -301,6 +301,9 @@ static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q) f->socket_hash != sk->sk_hash)) { f->credit = q->initial_quantum; f->socket_hash = sk->sk_hash; + if (q->rate_enable) + smp_store_release(&sk->sk_pacing_status, + SK_PACING_FQ); if (fq_flow_is_throttled(f)) fq_flow_unset_throttled(q, f); f->time_next_packet = 0ULL; @@ -322,8 +325,12 @@ static struct fq_flow *fq_classify(struct sk_buff *skb, struct fq_sched_data *q) fq_flow_set_detached(f); f->sk = sk; - if (skb->sk == sk) + if (skb->sk == sk) { f->socket_hash = sk->sk_hash; + if (q->rate_enable) + smp_store_release(&sk->sk_pacing_status, + SK_PACING_FQ); + } f->credit = q->initial_quantum; rb_link_node(&f->fq_node, parent, p); @@ -428,17 +435,9 @@ static int fq_enqueue(struct sk_buff *skb, struct Qdisc *sch, f->qlen++; qdisc_qstats_backlog_inc(sch, skb); if (fq_flow_is_detached(f)) { - struct sock *sk = skb->sk; - fq_flow_add_tail(&q->new_flows, f); if (time_after(jiffies, f->age + q->flow_refill_delay)) f->credit = max_t(u32, f->credit, q->quantum); - if (sk && q->rate_enable) { - if (unlikely(smp_load_acquire(&sk->sk_pacing_status) != - SK_PACING_FQ)) - smp_store_release(&sk->sk_pacing_status, - SK_PACING_FQ); - } q->inactive_flows--; } diff --git a/net/sctp/stream.c b/net/sctp/stream.c index 6a30392068a0..c1a100d2fed3 100644 --- a/net/sctp/stream.c +++ b/net/sctp/stream.c @@ -84,10 +84,8 @@ static int sctp_stream_alloc_out(struct sctp_stream *stream, __u16 outcnt, return 0; ret = genradix_prealloc(&stream->out, outcnt, gfp); - if (ret) { - genradix_free(&stream->out); + if (ret) return ret; - } stream->outcnt = outcnt; return 0; @@ -102,10 +100,8 @@ static int sctp_stream_alloc_in(struct sctp_stream *stream, __u16 incnt, return 0; ret = genradix_prealloc(&stream->in, incnt, gfp); - if (ret) { - genradix_free(&stream->in); + if (ret) return ret; - } stream->incnt = incnt; return 0; @@ -123,7 +119,7 @@ int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt, * a new one with new outcnt to save memory if needed. */ if (outcnt == stream->outcnt) - goto in; + goto handle_in; /* Filter out chunks queued on streams that won't exist anymore */ sched->unsched_all(stream); @@ -132,24 +128,28 @@ int sctp_stream_init(struct sctp_stream *stream, __u16 outcnt, __u16 incnt, ret = sctp_stream_alloc_out(stream, outcnt, gfp); if (ret) - goto out; + goto out_err; for (i = 0; i < stream->outcnt; i++) SCTP_SO(stream, i)->state = SCTP_STREAM_OPEN; -in: +handle_in: sctp_stream_interleave_init(stream); if (!incnt) goto out; ret = sctp_stream_alloc_in(stream, incnt, gfp); - if (ret) { - sched->free(stream); - genradix_free(&stream->out); - stream->outcnt = 0; - goto out; - } + if (ret) + goto in_err; + goto out; + +in_err: + sched->free(stream); + genradix_free(&stream->in); +out_err: + genradix_free(&stream->out); + stream->outcnt = 0; out: return ret; } diff --git a/net/sctp/transport.c b/net/sctp/transport.c index 7235a6032671..3bbe1a58ec87 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c @@ -263,7 +263,7 @@ bool sctp_transport_update_pmtu(struct sctp_transport *t, u32 pmtu) pf->af->from_sk(&addr, sk); pf->to_sk_daddr(&t->ipaddr, sk); - dst->ops->update_pmtu(dst, sk, NULL, pmtu); + dst->ops->update_pmtu(dst, sk, NULL, pmtu, true); pf->to_sk_daddr(&addr, sk); dst = sctp_transport_dst_check(t); diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 737b49909a7a..6a6d3b2aa5a9 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -854,6 +854,8 @@ static int smc_connect(struct socket *sock, struct sockaddr *addr, goto out; sock_hold(&smc->sk); /* sock put in passive closing */ + if (smc->use_fallback) + goto out; if (flags & O_NONBLOCK) { if (schedule_work(&smc->connect_work)) smc->connect_nonblock = 1; @@ -1716,8 +1718,6 @@ static int smc_setsockopt(struct socket *sock, int level, int optname, sk->sk_err = smc->clcsock->sk->sk_err; sk->sk_error_report(sk); } - if (rc) - return rc; if (optlen < sizeof(int)) return -EINVAL; @@ -1725,6 +1725,8 @@ static int smc_setsockopt(struct socket *sock, int level, int optname, return -EFAULT; lock_sock(sk); + if (rc || smc->use_fallback) + goto out; switch (optname) { case TCP_ULP: case TCP_FASTOPEN: @@ -1736,15 +1738,14 @@ static int smc_setsockopt(struct socket *sock, int level, int optname, smc_switch_to_fallback(smc); smc->fallback_rsn = SMC_CLC_DECL_OPTUNSUPP; } else { - if (!smc->use_fallback) - rc = -EINVAL; + rc = -EINVAL; } break; case TCP_NODELAY: if (sk->sk_state != SMC_INIT && sk->sk_state != SMC_LISTEN && sk->sk_state != SMC_CLOSED) { - if (val && !smc->use_fallback) + if (val) mod_delayed_work(system_wq, &smc->conn.tx_work, 0); } @@ -1753,7 +1754,7 @@ static int smc_setsockopt(struct socket *sock, int level, int optname, if (sk->sk_state != SMC_INIT && sk->sk_state != SMC_LISTEN && sk->sk_state != SMC_CLOSED) { - if (!val && !smc->use_fallback) + if (!val) mod_delayed_work(system_wq, &smc->conn.tx_work, 0); } @@ -1764,6 +1765,7 @@ static int smc_setsockopt(struct socket *sock, int level, int optname, default: break; } +out: release_sock(sk); return rc; diff --git a/scripts/dtc/Makefile b/scripts/dtc/Makefile index 823892e2ebf3..5c7ec1057009 100644 --- a/scripts/dtc/Makefile +++ b/scripts/dtc/Makefile @@ -13,7 +13,7 @@ dtc-objs += dtc-lexer.lex.o dtc-parser.tab.o # Source files need to get at the userspace version of libfdt_env.h to compile HOST_EXTRACFLAGS := -I $(srctree)/$(src)/libfdt -ifeq ($(wildcard /usr/include/yaml.h),) +ifeq ($(shell pkg-config --exists yaml-0.1 2>/dev/null && echo yes),) ifneq ($(CHECK_DTBS),) $(error dtc needs libyaml for DT schema validation support. \ Install the necessary libyaml development package.) @@ -21,7 +21,7 @@ endif HOST_EXTRACFLAGS += -DNO_YAML else dtc-objs += yamltree.o -HOSTLDLIBS_dtc := -lyaml +HOSTLDLIBS_dtc := $(shell pkg-config yaml-0.1 --libs) endif # Generated files need one more search path to include headers in source tree diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index ae6504d07fd6..fb15f09e0e38 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -489,6 +489,8 @@ static void build_initial_tok_table(void) table[pos] = table[i]; learn_symbol(table[pos].sym, table[pos].len); pos++; + } else { + free(table[i].sym); } } table_cnt = pos; diff --git a/security/apparmor/label.c b/security/apparmor/label.c index 59f1cc2557a7..470693239e64 100644 --- a/security/apparmor/label.c +++ b/security/apparmor/label.c @@ -1458,11 +1458,13 @@ static inline bool use_label_hname(struct aa_ns *ns, struct aa_label *label, /* helper macro for snprint routines */ #define update_for_len(total, len, size, str) \ do { \ + size_t ulen = len; \ + \ AA_BUG(len < 0); \ - total += len; \ - len = min(len, size); \ - size -= len; \ - str += len; \ + total += ulen; \ + ulen = min(ulen, size); \ + size -= ulen; \ + str += ulen; \ } while (0) /** @@ -1597,7 +1599,7 @@ int aa_label_snxprint(char *str, size_t size, struct aa_ns *ns, struct aa_ns *prev_ns = NULL; struct label_it i; int count = 0, total = 0; - size_t len; + ssize_t len; AA_BUG(!str && size != 0); AA_BUG(!label); diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c index e7832448d721..bf38fc1b59b2 100644 --- a/security/tomoyo/realpath.c +++ b/security/tomoyo/realpath.c @@ -217,31 +217,6 @@ out: return ERR_PTR(-ENOMEM); } -/** - * tomoyo_get_socket_name - Get the name of a socket. - * - * @path: Pointer to "struct path". - * @buffer: Pointer to buffer to return value in. - * @buflen: Sizeof @buffer. - * - * Returns the buffer. - */ -static char *tomoyo_get_socket_name(const struct path *path, char * const buffer, - const int buflen) -{ - struct inode *inode = d_backing_inode(path->dentry); - struct socket *sock = inode ? SOCKET_I(inode) : NULL; - struct sock *sk = sock ? sock->sk : NULL; - - if (sk) { - snprintf(buffer, buflen, "socket:[family=%u:type=%u:protocol=%u]", - sk->sk_family, sk->sk_type, sk->sk_protocol); - } else { - snprintf(buffer, buflen, "socket:[unknown]"); - } - return buffer; -} - /** * tomoyo_realpath_from_path - Returns realpath(3) of the given pathname but ignores chroot'ed root. * @@ -279,12 +254,7 @@ char *tomoyo_realpath_from_path(const struct path *path) break; /* To make sure that pos is '\0' terminated. */ buf[buf_len - 1] = '\0'; - /* Get better name for socket. */ - if (sb->s_magic == SOCKFS_MAGIC) { - pos = tomoyo_get_socket_name(path, buf, buf_len - 1); - goto encode; - } - /* For "pipe:[\$]". */ + /* For "pipe:[\$]" and "socket:[\$]". */ if (dentry->d_op && dentry->d_op->d_dname) { pos = dentry->d_op->d_dname(dentry, buf, buf_len - 1); goto encode; diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c index c37a78677955..265682296836 100644 --- a/tools/perf/builtin-diff.c +++ b/tools/perf/builtin-diff.c @@ -575,8 +575,8 @@ static int64_t block_cycles_diff_cmp(struct hist_entry *left, if (!pairs_left && !pairs_right) return 0; - l = labs(left->diff.cycles); - r = labs(right->diff.cycles); + l = llabs(left->diff.cycles); + r = llabs(right->diff.cycles); return r - l; } diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c index 6dba8b728d23..3983d6ccd14d 100644 --- a/tools/perf/builtin-script.c +++ b/tools/perf/builtin-script.c @@ -448,7 +448,7 @@ static int perf_evsel__check_attr(struct evsel *evsel, "selected. Hence, no address to lookup the source line number.\n"); return -EINVAL; } - if (PRINT_FIELD(BRSTACKINSN) && + if (PRINT_FIELD(BRSTACKINSN) && !allow_user_set && !(perf_evlist__combined_branch_type(session->evlist) & PERF_SAMPLE_BRANCH_ANY)) { pr_err("Display of branch stack assembler requested, but non all-branch filter set\n" diff --git a/tools/perf/util/perf_regs.h b/tools/perf/util/perf_regs.h index 47fe34e5f7d5..ec7640cc4c91 100644 --- a/tools/perf/util/perf_regs.h +++ b/tools/perf/util/perf_regs.h @@ -41,7 +41,7 @@ int perf_reg_value(u64 *valp, struct regs_dump *regs, int id); static inline const char *perf_reg_name(int id __maybe_unused) { - return NULL; + return "unknown"; } static inline int perf_reg_value(u64 *valp __maybe_unused, diff --git a/tools/power/x86/intel-speed-select/isst-config.c b/tools/power/x86/intel-speed-select/isst-config.c index 2a9890c8395a..21fcfe621d3a 100644 --- a/tools/power/x86/intel-speed-select/isst-config.c +++ b/tools/power/x86/intel-speed-select/isst-config.c @@ -169,7 +169,7 @@ int get_topo_max_cpus(void) static void set_cpu_online_offline(int cpu, int state) { char buffer[128]; - int fd; + int fd, ret; snprintf(buffer, sizeof(buffer), "/sys/devices/system/cpu/cpu%d/online", cpu); @@ -179,9 +179,12 @@ static void set_cpu_online_offline(int cpu, int state) err(-1, "%s open failed", buffer); if (state) - write(fd, "1\n", 2); + ret = write(fd, "1\n", 2); else - write(fd, "0\n", 2); + ret = write(fd, "0\n", 2); + + if (ret == -1) + perror("Online/Offline: Operation failed\n"); close(fd); } diff --git a/tools/power/x86/intel-speed-select/isst-core.c b/tools/power/x86/intel-speed-select/isst-core.c index 6dee5332c9d3..fde3f9cefc6d 100644 --- a/tools/power/x86/intel-speed-select/isst-core.c +++ b/tools/power/x86/intel-speed-select/isst-core.c @@ -553,7 +553,6 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) i); ctdp_level = &pkg_dev->ctdp_level[i]; - ctdp_level->processed = 1; ctdp_level->level = i; ctdp_level->control_cpu = cpu; ctdp_level->pkg_id = get_physical_package_id(cpu); @@ -561,7 +560,10 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) ret = isst_get_ctdp_control(cpu, i, ctdp_level); if (ret) - return ret; + continue; + + pkg_dev->processed = 1; + ctdp_level->processed = 1; ret = isst_get_tdp_info(cpu, i, ctdp_level); if (ret) @@ -614,8 +616,6 @@ int isst_get_process_ctdp(int cpu, int tdp_level, struct isst_pkg_ctdp *pkg_dev) } } - pkg_dev->processed = 1; - return 0; } diff --git a/tools/power/x86/intel-speed-select/isst-display.c b/tools/power/x86/intel-speed-select/isst-display.c index 40346d534f78..b11575c3e886 100644 --- a/tools/power/x86/intel-speed-select/isst-display.c +++ b/tools/power/x86/intel-speed-select/isst-display.c @@ -314,7 +314,8 @@ void isst_ctdp_display_information(int cpu, FILE *outf, int tdp_level, char value[256]; int i, base_level = 1; - print_package_info(cpu, outf); + if (pkg_dev->processed) + print_package_info(cpu, outf); for (i = 0; i <= pkg_dev->levels; ++i) { struct isst_pkg_ctdp_level_info *ctdp_level; diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c index 25e23e73c72e..2ecfa1158e2b 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-tar.c @@ -73,7 +73,7 @@ trans: [sprn_texasr]"i"(SPRN_TEXASR), [tar_1]"i"(TAR_1), [dscr_1]"i"(DSCR_1), [tar_2]"i"(TAR_2), [dscr_2]"i"(DSCR_2), [tar_3]"i"(TAR_3), [dscr_3]"i"(DSCR_3) - : "memory", "r0", "r1", "r3", "r4", "r5", "r6" + : "memory", "r0", "r3", "r4", "r5", "r6", "lr" ); /* TM failed, analyse */ diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c index f603fe5a445b..6f7fb51f0809 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-spd-vsx.c @@ -74,8 +74,8 @@ trans: "3: ;" : [res] "=r" (result), [texasr] "=r" (texasr) : [sprn_texasr] "i" (SPRN_TEXASR) - : "memory", "r0", "r1", "r3", "r4", - "r7", "r8", "r9", "r10", "r11" + : "memory", "r0", "r3", "r4", + "r7", "r8", "r9", "r10", "r11", "lr" ); if (result) { diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c index e0d37f07bdeb..46ef378a15ec 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-tar.c @@ -62,7 +62,7 @@ trans: [sprn_ppr]"i"(SPRN_PPR), [sprn_texasr]"i"(SPRN_TEXASR), [tar_1]"i"(TAR_1), [dscr_1]"i"(DSCR_1), [tar_2]"i"(TAR_2), [dscr_2]"i"(DSCR_2), [cptr1] "b" (&cptr[1]) - : "memory", "r0", "r1", "r3", "r4", "r5", "r6" + : "memory", "r0", "r3", "r4", "r5", "r6" ); /* TM failed, analyse */ diff --git a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c index 8027457b97b7..70ca01234f79 100644 --- a/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c +++ b/tools/testing/selftests/powerpc/ptrace/ptrace-tm-vsx.c @@ -62,8 +62,8 @@ trans: "3: ;" : [res] "=r" (result), [texasr] "=r" (texasr) : [sprn_texasr] "i" (SPRN_TEXASR), [cptr1] "b" (&cptr[1]) - : "memory", "r0", "r1", "r3", "r4", - "r7", "r8", "r9", "r10", "r11" + : "memory", "r0", "r3", "r4", + "r7", "r8", "r9", "r10", "r11", "lr" ); if (result) { diff --git a/tools/testing/selftests/powerpc/tm/tm-signal-sigreturn-nt.c b/tools/testing/selftests/powerpc/tm/tm-signal-sigreturn-nt.c index 56fbf9f6bbf3..07c388147b75 100644 --- a/tools/testing/selftests/powerpc/tm/tm-signal-sigreturn-nt.c +++ b/tools/testing/selftests/powerpc/tm/tm-signal-sigreturn-nt.c @@ -10,10 +10,12 @@ */ #define _GNU_SOURCE +#include #include #include #include "utils.h" +#include "tm.h" void trap_signal_handler(int signo, siginfo_t *si, void *uc) { @@ -29,6 +31,8 @@ int tm_signal_sigreturn_nt(void) { struct sigaction trap_sa; + SKIP_IF(!have_htm()); + trap_sa.sa_flags = SA_SIGINFO; trap_sa.sa_sigaction = trap_signal_handler; diff --git a/tools/testing/selftests/vm/config b/tools/testing/selftests/vm/config index 1c0d76cb5adf..93b90a9b1eeb 100644 --- a/tools/testing/selftests/vm/config +++ b/tools/testing/selftests/vm/config @@ -1,2 +1,3 @@ CONFIG_SYSVIPC=y CONFIG_USERFAULTFD=y +CONFIG_TEST_VMALLOC=m