diff --git a/BUILD.bazel b/BUILD.bazel
index 885571722c52..8a7f131ba6e7 100644
--- a/BUILD.bazel
+++ b/BUILD.bazel
@@ -19,8 +19,27 @@ package(
load("//build/kernel/kleaf:common_kernels.bzl", "define_common_kernels")
-# This uses android/abi_gki_aarch64* in kmi_configs. If the list of
-# glob(["android/abi_gki_aarch64*"]) differs from
-# KMI_SYMBOL_LIST + ADDITIONAL_KMI_SYMBOL_LISTS in build.config.gki.aarch64,
-# or TRIM_NONLISTED_KMI changes, override kmi_configs here.
-define_common_kernels()
+_aarch64_additional_kmi_symbol_lists = [
+ # keep sorted
+ "android/abi_gki_aarch64_core",
+ "android/abi_gki_aarch64_db845c",
+ "android/abi_gki_aarch64_fips140",
+ "android/abi_gki_aarch64_generic",
+ "android/abi_gki_aarch64_hikey960",
+ "android/abi_gki_aarch64_type_visibility",
+ "android/abi_gki_aarch64_virtual_device",
+]
+
+define_common_kernels(target_configs = {
+ # Sync with build.config.gki.aarch64
+ "kernel_aarch64": {
+ "kmi_symbol_list": "android/abi_gki_aarch64",
+ "additional_kmi_symbol_lists": _aarch64_additional_kmi_symbol_lists,
+ "abi_definition": "android/abi_gki_aarch64.xml",
+ },
+ "kernel_aarch64_debug": {
+ "kmi_symbol_list": "android/abi_gki_aarch64",
+ "additional_kmi_symbol_lists": _aarch64_additional_kmi_symbol_lists,
+ "abi_definition": "android/abi_gki_aarch64.xml",
+ },
+})
diff --git a/Documentation/filesystems/f2fs.rst b/Documentation/filesystems/f2fs.rst
index 5fda320354a6..b8cdd1fcb83e 100644
--- a/Documentation/filesystems/f2fs.rst
+++ b/Documentation/filesystems/f2fs.rst
@@ -342,6 +342,11 @@ discard_unit=%s Control discard unit, the argument can be "block", "segment"
default, it is helpful for large sized SMR or ZNS devices to
reduce memory cost by getting rid of fs metadata supports small
discard.
+memory=%s Control memory mode. This supports "normal" and "low" modes.
+ "low" mode is introduced to support low memory devices.
+ Because of the nature of low memory devices, in this mode, f2fs
+ will try to save memory sometimes by sacrificing performance.
+ "normal" mode is the default mode and same as before.
======================== ============================================================
Debugfs Entries
diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml
index 631ec84b350a..532be833ec36 100644
--- a/android/abi_gki_aarch64.xml
+++ b/android/abi_gki_aarch64.xml
@@ -23,6 +23,7 @@
+
@@ -259,6 +260,7 @@
+
@@ -272,6 +274,8 @@
+
+
@@ -339,6 +343,7 @@
+
@@ -1195,6 +1200,7 @@
+
@@ -1415,6 +1421,7 @@
+
@@ -1909,6 +1916,7 @@
+
@@ -2269,6 +2277,7 @@
+
@@ -2998,7 +3007,10 @@
+
+
+
@@ -3710,6 +3722,8 @@
+
+
@@ -3771,6 +3785,7 @@
+
@@ -3784,6 +3799,8 @@
+
+
@@ -3883,6 +3900,7 @@
+
@@ -3961,7 +3979,7 @@
-
+
@@ -4112,16 +4130,16 @@
-
+
-
+
-
+
-
+
@@ -4353,7 +4371,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4430,7 +4461,7 @@
-
+
@@ -4465,7 +4496,7 @@
-
+
@@ -4888,7 +4919,7 @@
-
+
@@ -4920,11 +4951,60 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5058,6 +5138,14 @@
+
+
+
+
+
+
+
+
@@ -5147,6 +5235,7 @@
+
@@ -5177,6 +5266,14 @@
+
+
+
+
+
+
+
+
@@ -5334,9 +5431,12 @@
-
+
+
+
+
@@ -5400,6 +5500,7 @@
+
@@ -5463,6 +5564,7 @@
+
@@ -5613,6 +5715,7 @@
+
@@ -5759,6 +5862,7 @@
+
@@ -6148,6 +6252,7 @@
+
@@ -6369,43 +6474,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -6420,6 +6489,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -6489,6 +6594,7 @@
+
@@ -6909,7 +7015,7 @@
-
+
@@ -7049,12 +7155,20 @@
+
+
+
+
+
+
+
+
-
+
@@ -7307,6 +7421,7 @@
+
@@ -7316,6 +7431,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -7582,7 +7714,7 @@
-
+
@@ -7591,6 +7723,9 @@
+
+
+
@@ -7619,43 +7754,43 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -7807,6 +7942,12 @@
+
+
+
+
+
+
@@ -8160,6 +8301,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -8287,42 +8439,42 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -8339,7 +8491,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8728,7 +8892,7 @@
-
+
@@ -8786,6 +8950,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -8855,6 +9043,7 @@
+
@@ -9014,6 +9203,7 @@
+
@@ -9111,7 +9301,62 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -9141,7 +9386,7 @@
-
+
@@ -9317,6 +9562,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -9338,6 +9594,14 @@
+
+
+
+
+
+
+
+
@@ -9354,7 +9618,7 @@
-
+
@@ -9614,14 +9878,16 @@
+
-
+
+
@@ -9841,7 +10107,7 @@
-
+
@@ -9853,7 +10119,7 @@
-
+
@@ -9880,10 +10146,10 @@
-
+
-
+
@@ -10714,7 +10980,7 @@
-
+
@@ -10743,52 +11009,60 @@
-
-
+
-
-
-
-
-
-
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -11302,18 +11576,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -11353,7 +11627,7 @@
-
+
@@ -11401,6 +11675,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -11412,15 +11727,15 @@
-
+
-
+
-
+
-
+
@@ -11457,7 +11772,7 @@
-
+
@@ -11564,7 +11879,7 @@
-
+
@@ -11626,7 +11941,7 @@
-
+
@@ -11819,7 +12134,7 @@
-
+
@@ -12162,6 +12477,7 @@
+
@@ -12204,7 +12520,7 @@
-
+
@@ -12641,21 +12957,38 @@
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12686,7 +13019,29 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -12948,72 +13303,72 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -13028,7 +13383,7 @@
-
+
@@ -13314,6 +13669,7 @@
+
@@ -13332,6 +13688,12 @@
+
+
+
+
+
+
@@ -13383,7 +13745,7 @@
-
+
@@ -13541,6 +13903,14 @@
+
+
+
+
+
+
+
+
@@ -13696,6 +14066,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -13749,6 +14142,7 @@
+
@@ -13781,7 +14175,65 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14008,6 +14460,12 @@
+
+
+
+
+
+
@@ -14074,7 +14532,7 @@
-
+
@@ -14456,6 +14914,10 @@
+
+
+
+
@@ -14504,7 +14966,7 @@
-
+
@@ -14633,6 +15095,7 @@
+
@@ -14670,6 +15133,12 @@
+
+
+
+
+
+
@@ -14749,9 +15218,12 @@
-
+
+
+
+
@@ -15325,6 +15797,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -15357,8 +15843,9 @@
+
-
+
@@ -15398,11 +15885,12 @@
+
-
+
@@ -15584,6 +16072,7 @@
+
@@ -15807,7 +16296,7 @@
-
+
@@ -15825,39 +16314,39 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -15998,6 +16487,8 @@
+
+
@@ -16218,6 +16709,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -16297,7 +16871,7 @@
-
+
@@ -16391,7 +16965,7 @@
-
+
@@ -16787,6 +17361,7 @@
+
@@ -17237,7 +17812,194 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -17295,6 +18057,12 @@
+
+
+
+
+
+
@@ -17805,7 +18573,7 @@
-
+
@@ -17923,6 +18691,7 @@
+
@@ -18096,7 +18865,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -18194,6 +18976,7 @@
+
@@ -18765,6 +19548,14 @@
+
+
+
+
+
+
+
+
@@ -18796,6 +19587,7 @@
+
@@ -18838,7 +19630,7 @@
-
+
@@ -19086,6 +19878,7 @@
+
@@ -19413,6 +20206,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -19639,6 +20449,7 @@
+
@@ -19885,7 +20696,7 @@
-
+
@@ -20400,6 +21211,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -20509,7 +21385,7 @@
-
+
@@ -20658,7 +21534,7 @@
-
+
@@ -20960,13 +21836,21 @@
+
+
+
+
+
+
+
+
-
+
@@ -20986,6 +21870,7 @@
+
@@ -21070,6 +21955,7 @@
+
@@ -21079,7 +21965,7 @@
-
+
@@ -21098,6 +21984,7 @@
+
@@ -21129,6 +22016,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -21434,6 +22335,7 @@
+
@@ -21579,6 +22481,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -21650,6 +22562,10 @@
+
+
+
+
@@ -22036,6 +22952,9 @@
+
+
+
@@ -22109,6 +23028,12 @@
+
+
+
+
+
+
@@ -22119,6 +23044,7 @@
+
@@ -22440,6 +23366,7 @@
+
@@ -22512,6 +23439,7 @@
+
@@ -22852,7 +23780,7 @@
-
+
@@ -22905,6 +23833,7 @@
+
@@ -23084,6 +24013,7 @@
+
@@ -23139,6 +24069,12 @@
+
+
+
+
+
+
@@ -23234,6 +24170,11 @@
+
+
+
+
+
@@ -23333,7 +24274,7 @@
-
+
@@ -23939,6 +24880,14 @@
+
+
+
+
+
+
+
+
@@ -24374,6 +25323,7 @@
+
@@ -24384,6 +25334,7 @@
+
@@ -25287,7 +26238,7 @@
-
+
@@ -25343,6 +26294,14 @@
+
+
+
+
+
+
+
+
@@ -25658,6 +26617,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -25667,6 +26649,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -25768,7 +26791,7 @@
-
+
@@ -26319,27 +27342,27 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -26421,6 +27444,9 @@
+
+
+
@@ -26541,6 +27567,7 @@
+
@@ -26745,6 +27772,12 @@
+
+
+
+
+
+
@@ -26864,7 +27897,7 @@
-
+
@@ -26915,7 +27948,7 @@
-
+
@@ -26923,6 +27956,9 @@
+
+
+
@@ -27132,7 +28168,7 @@
-
+
@@ -27178,7 +28214,7 @@
-
+
@@ -27289,7 +28325,7 @@
-
+
@@ -27469,6 +28505,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -27489,7 +28542,7 @@
-
+
@@ -27502,6 +28555,11 @@
+
+
+
+
+
@@ -27623,6 +28681,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -28095,11 +29185,12 @@
-
+
+
@@ -28434,6 +29525,12 @@
+
+
+
+
+
+
@@ -28463,12 +29560,12 @@
-
+
-
+
@@ -28704,6 +29801,10 @@
+
+
+
+
@@ -28712,6 +29813,7 @@
+
@@ -28784,6 +29886,7 @@
+
@@ -28794,7 +29897,7 @@
-
+
@@ -28951,7 +30054,7 @@
-
+
@@ -29042,6 +30145,14 @@
+
+
+
+
+
+
+
+
@@ -29095,6 +30206,7 @@
+
@@ -29857,6 +30969,12 @@
+
+
+
+
+
+
@@ -30127,7 +31245,7 @@
-
+
@@ -30180,6 +31298,7 @@
+
@@ -30258,7 +31377,7 @@
-
+
@@ -30309,6 +31428,12 @@
+
+
+
+
+
+
@@ -30581,6 +31706,10 @@
+
+
+
+
@@ -30739,6 +31868,7 @@
+
@@ -31205,6 +32335,14 @@
+
+
+
+
+
+
+
+
@@ -31788,6 +32926,10 @@
+
+
+
+
@@ -31903,6 +33045,13 @@
+
+
+
+
+
+
+
@@ -32330,7 +33479,7 @@
-
+
@@ -32341,7 +33490,14 @@
-
+
+
+
+
+
+
+
+
@@ -32477,24 +33633,24 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -32728,7 +33884,7 @@
-
+
@@ -32903,7 +34059,7 @@
-
+
@@ -32941,6 +34097,14 @@
+
+
+
+
+
+
+
+
@@ -33117,7 +34281,7 @@
-
+
@@ -33337,6 +34501,7 @@
+
@@ -33491,7 +34656,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -33538,18 +34718,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -34115,6 +35295,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -34234,7 +35425,7 @@
-
+
@@ -34300,7 +35491,7 @@
-
+
@@ -34656,6 +35847,7 @@
+
@@ -34756,13 +35948,13 @@
-
+
-
+
-
+
@@ -34786,7 +35978,7 @@
-
+
@@ -34804,13 +35996,13 @@
-
+
-
+
@@ -34819,7 +36011,7 @@
-
+
@@ -34828,7 +36020,7 @@
-
+
@@ -35200,6 +36392,14 @@
+
+
+
+
+
+
+
+
@@ -35471,7 +36671,7 @@
-
+
@@ -35750,13 +36950,13 @@
-
+
-
+
@@ -35774,7 +36974,7 @@
-
+
@@ -35868,10 +37068,17 @@
+
+
+
+
+
+
+
@@ -35977,6 +37184,7 @@
+
@@ -36145,6 +37353,7 @@
+
@@ -36788,6 +37997,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -36861,6 +38096,7 @@
+
@@ -36883,7 +38119,29 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -37064,7 +38322,7 @@
-
+
@@ -37073,7 +38331,7 @@
-
+
@@ -37532,7 +38790,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -37810,7 +39084,7 @@
-
+
@@ -38366,6 +39640,12 @@
+
+
+
+
+
+
@@ -38376,7 +39656,7 @@
-
+
@@ -39052,6 +40332,7 @@
+
@@ -39082,7 +40363,7 @@
-
+
@@ -39435,6 +40716,14 @@
+
+
+
+
+
+
+
+
@@ -39686,9 +40975,15 @@
-
+
+
+
+
+
+
+
@@ -39904,6 +41199,7 @@
+
@@ -40055,6 +41351,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -40143,6 +41487,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -40848,7 +42206,7 @@
-
+
@@ -40914,6 +42272,7 @@
+
@@ -41045,6 +42404,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -41370,7 +42752,7 @@
-
+
@@ -41847,6 +43229,7 @@
+
@@ -41963,7 +43346,7 @@
-
+
@@ -42012,6 +43395,11 @@
+
+
+
+
+
@@ -42112,7 +43500,35 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -42466,6 +43882,11 @@
+
+
+
+
+
@@ -42620,7 +44041,7 @@
-
+
@@ -42636,6 +44057,7 @@
+
@@ -43239,6 +44661,7 @@
+
@@ -43920,6 +45343,7 @@
+
@@ -44079,6 +45503,7 @@
+
@@ -44131,6 +45556,7 @@
+
@@ -44393,6 +45819,12 @@
+
+
+
+
+
+
@@ -44609,6 +46041,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -44641,7 +46111,77 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -44681,7 +46221,7 @@
-
+
@@ -44830,7 +46370,7 @@
-
+
@@ -45135,6 +46675,9 @@
+
+
+
@@ -45853,81 +47396,81 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -46167,6 +47710,13 @@
+
+
+
+
+
+
+
@@ -46269,6 +47819,7 @@
+
@@ -46421,13 +47972,13 @@
-
+
-
+
-
+
@@ -46436,7 +47987,7 @@
-
+
@@ -46450,7 +48001,7 @@
-
+
@@ -46473,7 +48024,7 @@
-
+
@@ -46519,7 +48070,7 @@
-
+
@@ -46614,6 +48165,14 @@
+
+
+
+
+
+
+
+
@@ -47057,6 +48616,10 @@
+
+
+
+
@@ -47131,6 +48694,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -47700,7 +49280,7 @@
-
+
@@ -47813,6 +49393,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -47904,6 +49516,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -47975,6 +49607,14 @@
+
+
+
+
+
+
+
+
@@ -48040,6 +49680,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -48484,6 +50138,7 @@
+
@@ -48597,7 +50252,7 @@
-
+
@@ -48760,6 +50415,12 @@
+
+
+
+
+
+
@@ -49165,12 +50826,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -49389,7 +51072,7 @@
-
+
@@ -49527,6 +51210,7 @@
+
@@ -49673,7 +51357,29 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -50408,7 +52114,7 @@
-
+
@@ -50450,30 +52156,30 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -50874,6 +52580,7 @@
+
@@ -51000,7 +52707,7 @@
-
+
@@ -51139,6 +52846,7 @@
+
@@ -51290,7 +52998,7 @@
-
+
@@ -51326,6 +53034,7 @@
+
@@ -51489,7 +53198,146 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -51675,6 +53523,7 @@
+
@@ -52101,6 +53950,11 @@
+
+
+
+
+
@@ -52109,7 +53963,7 @@
-
+
@@ -52204,6 +54058,14 @@
+
+
+
+
+
+
+
+
@@ -52354,6 +54216,15 @@
+
+
+
+
+
+
+
+
+
@@ -52512,7 +54383,7 @@
-
+
@@ -52545,6 +54416,11 @@
+
+
+
+
+
@@ -52936,6 +54812,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -53124,6 +55014,14 @@
+
+
+
+
+
+
+
+
@@ -53248,7 +55146,7 @@
-
+
@@ -53281,10 +55179,10 @@
-
+
-
+
@@ -53309,6 +55207,7 @@
+
@@ -53477,7 +55376,7 @@
-
+
@@ -53584,6 +55483,7 @@
+
@@ -53806,7 +55706,7 @@
-
+
@@ -53978,7 +55878,7 @@
-
+
@@ -54069,7 +55969,7 @@
-
+
@@ -54087,6 +55987,7 @@
+
@@ -54572,10 +56473,15 @@
-
+
+
+
+
+
+
@@ -54601,7 +56507,7 @@
-
+
@@ -54814,24 +56720,24 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -55160,7 +57066,7 @@
-
+
@@ -55168,6 +57074,7 @@
+
@@ -55436,7 +57343,20 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -55505,7 +57425,7 @@
-
+
@@ -56007,7 +57927,7 @@
-
+
@@ -56069,13 +57989,13 @@
-
+
-
+
@@ -56227,61 +58147,61 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -56321,7 +58241,7 @@
-
+
@@ -56371,6 +58291,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -56413,16 +58353,16 @@
-
+
-
+
-
+
-
+
@@ -56566,7 +58506,53 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -57514,15 +59500,15 @@
-
+
-
+
-
+
-
+
@@ -57712,6 +59698,9 @@
+
+
+
@@ -57781,6 +59770,13 @@
+
+
+
+
+
+
+
@@ -57849,6 +59845,10 @@
+
+
+
+
@@ -57963,6 +59963,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -58208,7 +60234,7 @@
-
+
@@ -58398,72 +60424,72 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -58506,6 +60532,7 @@
+
@@ -58525,6 +60552,13 @@
+
+
+
+
+
+
+
@@ -58899,7 +60933,7 @@
-
+
@@ -58978,6 +61012,12 @@
+
+
+
+
+
+
@@ -59207,6 +61247,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -59263,7 +61317,7 @@
-
+
@@ -59342,15 +61396,15 @@
-
+
-
+
-
+
-
+
@@ -59693,7 +61747,7 @@
-
+
@@ -59765,6 +61819,15 @@
+
+
+
+
+
+
+
+
+
@@ -59775,7 +61838,7 @@
-
+
@@ -59877,6 +61940,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -59935,6 +62021,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -60094,7 +62203,7 @@
-
+
@@ -60135,6 +62244,7 @@
+
@@ -60278,7 +62388,7 @@
-
+
@@ -60307,6 +62417,13 @@
+
+
+
+
+
+
+
@@ -60345,13 +62462,13 @@
-
+
-
+
@@ -60363,7 +62480,7 @@
-
+
@@ -60622,7 +62739,7 @@
-
+
@@ -60742,6 +62859,7 @@
+
@@ -60927,12 +63045,12 @@
-
+
-
+
-
+
@@ -61109,6 +63227,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -61241,7 +63370,7 @@
-
+
@@ -61341,7 +63470,191 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -62084,6 +64397,7 @@
+
@@ -62328,7 +64642,7 @@
-
+
@@ -62400,7 +64714,7 @@
-
+
@@ -62844,6 +65158,7 @@
+
@@ -63235,6 +65550,7 @@
+
@@ -63286,7 +65602,7 @@
-
+
@@ -63299,7 +65615,7 @@
-
+
@@ -63419,7 +65735,7 @@
-
+
@@ -63538,7 +65854,7 @@
-
+
@@ -63556,7 +65872,7 @@
-
+
@@ -63583,7 +65899,7 @@
-
+
@@ -63831,16 +66147,27 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -63974,6 +66301,7 @@
+
@@ -64241,7 +66569,7 @@
-
+
@@ -64486,6 +66814,9 @@
+
+
+
@@ -64613,6 +66944,7 @@
+
@@ -64736,6 +67068,7 @@
+
@@ -64779,69 +67112,69 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -64932,6 +67265,7 @@
+
@@ -64959,7 +67293,7 @@
-
+
@@ -65093,25 +67427,25 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -65264,6 +67598,7 @@
+
@@ -65324,7 +67659,7 @@
-
+
@@ -65393,15 +67728,15 @@
-
+
-
+
-
+
@@ -65461,7 +67796,7 @@
-
+
@@ -65636,6 +67971,9 @@
+
+
+
@@ -65899,11 +68237,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -66019,7 +68385,7 @@
-
+
@@ -66064,6 +68430,7 @@
+
@@ -66075,6 +68442,7 @@
+
@@ -66176,12 +68544,12 @@
-
+
-
+
-
+
@@ -66204,7 +68572,7 @@
-
+
@@ -66323,6 +68691,10 @@
+
+
+
+
@@ -66578,6 +68950,7 @@
+
@@ -66689,7 +69062,7 @@
-
+
@@ -66830,6 +69203,7 @@
+
@@ -66844,6 +69218,7 @@
+
@@ -66913,7 +69288,7 @@
-
+
@@ -66980,59 +69355,65 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
@@ -67055,7 +69436,7 @@
-
+
@@ -67211,7 +69592,7 @@
-
+
@@ -67397,7 +69778,7 @@
-
+
@@ -67657,7 +70038,7 @@
-
+
@@ -67684,7 +70065,7 @@
-
+
@@ -67695,7 +70076,7 @@
-
+
@@ -67746,66 +70127,160 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
-
+
@@ -67822,23 +70297,23 @@
-
+
-
+
-
+
-
+
-
+
@@ -67849,15 +70324,15 @@
-
+
-
+
-
+
-
+
@@ -67874,7 +70349,7 @@
-
+
@@ -67882,7 +70357,7 @@
-
+
@@ -67893,12 +70368,12 @@
-
+
-
+
@@ -67906,7 +70381,7 @@
-
+
@@ -67914,7 +70389,7 @@
-
+
@@ -67922,7 +70397,7 @@
-
+
@@ -67930,7 +70405,7 @@
-
+
@@ -67947,7 +70422,7 @@
-
+
@@ -67964,21 +70439,21 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -67989,7 +70464,7 @@
-
+
@@ -67997,12 +70472,12 @@
-
+
-
+
@@ -68010,7 +70485,7 @@
-
+
@@ -68021,7 +70496,7 @@
-
+
@@ -68032,7 +70507,7 @@
-
+
@@ -68043,12 +70518,12 @@
-
+
-
+
-
+
@@ -68056,13 +70531,13 @@
-
+
-
+
-
+
@@ -68070,7 +70545,7 @@
-
+
@@ -68078,7 +70553,7 @@
-
+
@@ -68086,7 +70561,7 @@
-
+
@@ -68094,7 +70569,7 @@
-
+
@@ -68105,7 +70580,7 @@
-
+
@@ -68119,7 +70594,7 @@
-
+
@@ -68127,7 +70602,7 @@
-
+
@@ -68135,7 +70610,7 @@
-
+
@@ -68143,7 +70618,7 @@
-
+
@@ -68169,12 +70644,12 @@
-
+
-
+
@@ -68182,23 +70657,23 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -68206,7 +70681,7 @@
-
+
@@ -68232,7 +70707,7 @@
-
+
@@ -68243,7 +70718,7 @@
-
+
@@ -68251,7 +70726,7 @@
-
+
@@ -68259,7 +70734,7 @@
-
+
@@ -68270,7 +70745,7 @@
-
+
@@ -68278,7 +70753,7 @@
-
+
@@ -68289,7 +70764,7 @@
-
+
@@ -68297,7 +70772,7 @@
-
+
@@ -68308,7 +70783,7 @@
-
+
@@ -68319,7 +70794,7 @@
-
+
@@ -68327,7 +70802,7 @@
-
+
@@ -68347,19 +70822,19 @@
-
+
-
+
-
+
-
-
+
+
@@ -68367,7 +70842,7 @@
-
+
@@ -68375,7 +70850,7 @@
-
+
@@ -68383,7 +70858,7 @@
-
+
@@ -68391,7 +70866,7 @@
-
+
@@ -68402,15 +70877,15 @@
-
+
-
+
-
+
@@ -68418,15 +70893,15 @@
-
+
-
+
-
+
@@ -68434,7 +70909,7 @@
-
+
@@ -68442,7 +70917,7 @@
-
+
@@ -68450,10 +70925,10 @@
-
+
-
+
@@ -68461,7 +70936,7 @@
-
+
@@ -68469,7 +70944,7 @@
-
+
@@ -68480,7 +70955,7 @@
-
+
@@ -68491,15 +70966,15 @@
-
+
-
+
-
+
@@ -68507,7 +70982,7 @@
-
+
@@ -68515,31 +70990,31 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -68547,33 +71022,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -68587,7 +71062,7 @@
-
+
@@ -68595,15 +71070,15 @@
-
+
-
+
-
+
@@ -68611,10 +71086,10 @@
-
+
-
+
@@ -68622,15 +71097,15 @@
-
+
-
+
-
+
@@ -68641,7 +71116,7 @@
-
+
@@ -68649,7 +71124,7 @@
-
+
@@ -68660,7 +71135,7 @@
-
+
@@ -68668,15 +71143,15 @@
-
+
-
+
-
+
@@ -68690,31 +71165,31 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -68722,7 +71197,7 @@
-
+
@@ -68733,7 +71208,7 @@
-
+
@@ -68741,7 +71216,15 @@
-
+
+
+
+
+
+
+
+
+
@@ -68749,7 +71232,7 @@
-
+
@@ -68757,7 +71240,7 @@
-
+
@@ -68768,7 +71251,7 @@
-
+
@@ -68776,7 +71259,7 @@
-
+
@@ -68784,7 +71267,7 @@
-
+
@@ -68792,37 +71275,37 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -68830,7 +71313,7 @@
-
+
@@ -68838,7 +71321,7 @@
-
+
@@ -68846,23 +71329,23 @@
-
+
-
+
-
+
-
+
-
+
@@ -68870,15 +71353,15 @@
-
+
-
+
-
+
@@ -68886,7 +71369,7 @@
-
+
@@ -68900,15 +71383,15 @@
-
+
-
+
-
+
-
+
@@ -68916,7 +71399,7 @@
-
+
@@ -68930,7 +71413,7 @@
-
+
@@ -68944,15 +71427,15 @@
-
+
-
+
-
+
@@ -68960,9 +71443,9 @@
-
+
-
+
@@ -68974,7 +71457,7 @@
-
+
@@ -68982,7 +71465,7 @@
-
+
@@ -68990,12 +71473,12 @@
-
+
-
+
-
+
@@ -69003,15 +71486,15 @@
-
+
-
+
-
+
@@ -69031,7 +71514,7 @@
-
+
@@ -69039,18 +71522,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -69058,7 +71541,7 @@
-
+
@@ -69066,7 +71549,7 @@
-
+
@@ -69074,7 +71557,7 @@
-
+
@@ -69088,7 +71571,7 @@
-
+
@@ -69108,7 +71591,7 @@
-
+
@@ -69117,26 +71600,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -69144,15 +71627,15 @@
-
+
-
+
-
+
@@ -69160,7 +71643,7 @@
-
+
@@ -69171,7 +71654,7 @@
-
+
@@ -69179,7 +71662,7 @@
-
+
@@ -69190,7 +71673,7 @@
-
+
@@ -69201,7 +71684,7 @@
-
+
@@ -69215,7 +71698,7 @@
-
+
@@ -69223,7 +71706,7 @@
-
+
@@ -69240,7 +71723,7 @@
-
+
@@ -69248,15 +71731,15 @@
-
+
-
+
-
+
@@ -69264,7 +71747,7 @@
-
+
@@ -69290,12 +71773,12 @@
-
+
-
+
@@ -69336,7 +71819,7 @@
-
+
@@ -69344,7 +71827,7 @@
-
+
@@ -69352,7 +71835,7 @@
-
+
@@ -69360,7 +71843,7 @@
-
+
@@ -69368,15 +71851,15 @@
-
+
-
+
-
+
-
+
@@ -69384,7 +71867,7 @@
-
+
@@ -69392,7 +71875,7 @@
-
+
@@ -69400,18 +71883,18 @@
-
+
-
+
-
+
-
+
@@ -69419,32 +71902,32 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -69452,30 +71935,49 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -69483,7 +71985,23 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -69494,38 +72012,38 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -69534,15 +72052,15 @@
-
+
-
+
-
+
@@ -69550,7 +72068,7 @@
-
+
@@ -69558,101 +72076,101 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -69660,38 +72178,38 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -69699,7 +72217,7 @@
-
+
@@ -69707,7 +72225,7 @@
-
+
@@ -69715,7 +72233,7 @@
-
+
@@ -69723,7 +72241,7 @@
-
+
@@ -69731,7 +72249,7 @@
-
+
@@ -69739,7 +72257,7 @@
-
+
@@ -69750,7 +72268,7 @@
-
+
@@ -69758,7 +72276,7 @@
-
+
@@ -69768,6 +72286,7 @@
+
@@ -69802,7 +72321,7 @@
-
+
@@ -70086,7 +72605,14 @@
-
+
+
+
+
+
+
+
+
@@ -70228,6 +72754,7 @@
+
@@ -70822,6 +73349,7 @@
+
@@ -70856,6 +73384,7 @@
+
@@ -70972,7 +73501,26 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -71210,45 +73758,46 @@
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -71659,6 +74208,7 @@
+
@@ -71981,6 +74531,7 @@
+
@@ -72162,6 +74713,11 @@
+
+
+
+
+
@@ -72375,6 +74931,11 @@
+
+
+
+
+
@@ -72405,10 +74966,12 @@
+
+
@@ -72516,7 +75079,7 @@
-
+
@@ -72550,6 +75113,11 @@
+
+
+
+
+
@@ -72620,19 +75188,20 @@
+
-
+
-
+
-
+
-
+
@@ -72686,10 +75255,26 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -72914,7 +75499,7 @@
-
+
@@ -73024,6 +75609,12 @@
+
+
+
+
+
+
@@ -73399,7 +75990,7 @@
-
+
@@ -73630,6 +76221,7 @@
+
@@ -73877,6 +76469,7 @@
+
@@ -74024,6 +76617,7 @@
+
@@ -74073,7 +76667,7 @@
-
+
@@ -74220,7 +76814,7 @@
-
+
@@ -74231,7 +76825,7 @@
-
+
@@ -74853,7 +77447,7 @@
-
+
@@ -74998,6 +77592,7 @@
+
@@ -75489,12 +78084,12 @@
-
+
-
+
-
+
@@ -75690,7 +78285,7 @@
-
+
@@ -75792,7 +78387,7 @@
-
+
@@ -75812,6 +78407,9 @@
+
+
+
@@ -76566,7 +79164,7 @@
-
+
@@ -76704,312 +79302,312 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -77318,6 +79916,10 @@
+
+
+
+
@@ -77747,6 +80349,7 @@
+
@@ -77964,7 +80567,7 @@
-
+
@@ -78183,6 +80786,12 @@
+
+
+
+
+
+
@@ -78197,6 +80806,7 @@
+
@@ -78272,6 +80882,14 @@
+
+
+
+
+
+
+
+
@@ -78280,6 +80898,7 @@
+
@@ -78304,6 +80923,7 @@
+
@@ -78393,6 +81013,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -78401,6 +81035,7 @@
+
@@ -78435,7 +81070,7 @@
-
+
@@ -78513,6 +81148,7 @@
+
@@ -78820,6 +81456,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -78879,7 +81529,7 @@
-
+
@@ -78918,6 +81568,12 @@
+
+
+
+
+
+
@@ -79000,10 +81656,10 @@
-
+
-
+
@@ -79106,6 +81762,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -79372,7 +82045,7 @@
-
+
@@ -79707,7 +82380,7 @@
-
+
@@ -79809,7 +82482,7 @@
-
+
@@ -79826,7 +82499,7 @@
-
+
@@ -79888,6 +82561,13 @@
+
+
+
+
+
+
+
@@ -79919,6 +82599,7 @@
+
@@ -80012,6 +82693,7 @@
+
@@ -80183,6 +82865,14 @@
+
+
+
+
+
+
+
+
@@ -81039,6 +83729,12 @@
+
+
+
+
+
+
@@ -81484,6 +84180,7 @@
+
@@ -81572,6 +84269,7 @@
+
@@ -81756,6 +84454,10 @@
+
+
+
+
@@ -81973,15 +84675,15 @@
-
+
-
+
-
+
-
+
@@ -82194,7 +84896,7 @@
-
+
@@ -82307,7 +85009,7 @@
-
+
@@ -82397,7 +85099,7 @@
-
+
@@ -82429,6 +85131,7 @@
+
@@ -82798,7 +85501,7 @@
-
+
@@ -82834,7 +85537,7 @@
-
+
@@ -83138,6 +85841,7 @@
+
@@ -83605,13 +86309,13 @@
-
+
-
+
@@ -83709,7 +86413,7 @@
-
+
@@ -83823,7 +86527,7 @@
-
+
@@ -83837,7 +86541,7 @@
-
+
@@ -83959,13 +86663,13 @@
-
+
-
+
-
+
@@ -84013,7 +86717,7 @@
-
+
@@ -84119,6 +86823,14 @@
+
+
+
+
+
+
+
+
@@ -84236,7 +86948,7 @@
-
+
@@ -84316,22 +87028,22 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -84478,6 +87190,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -84813,6 +87536,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -84891,7 +87670,7 @@
-
+
@@ -85117,7 +87896,7 @@
-
+
@@ -85252,7 +88031,7 @@
-
+
@@ -85357,7 +88136,7 @@
-
+
@@ -85569,6 +88348,7 @@
+
@@ -85683,6 +88463,7 @@
+
@@ -85715,7 +88496,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -85819,6 +88621,7 @@
+
@@ -85962,7 +88765,7 @@
-
+
@@ -86145,7 +88948,7 @@
-
+
@@ -86216,6 +89019,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -86753,6 +89567,11 @@
+
+
+
+
+
@@ -87123,7 +89942,7 @@
-
+
@@ -87132,7 +89951,7 @@
-
+
@@ -87528,6 +90347,9 @@
+
+
+
@@ -87692,6 +90514,7 @@
+
@@ -87731,6 +90554,7 @@
+
@@ -88130,7 +90954,7 @@
-
+
@@ -88207,7 +91031,7 @@
-
+
@@ -88217,6 +91041,14 @@
+
+
+
+
+
+
+
+
@@ -88371,10 +91203,10 @@
-
+
-
+
@@ -89217,10 +92049,10 @@
-
+
-
+
@@ -89232,7 +92064,7 @@
-
+
@@ -89390,6 +92222,7 @@
+
@@ -89590,6 +92423,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -89615,6 +92468,14 @@
+
+
+
+
+
+
+
+
@@ -89651,6 +92512,10 @@
+
+
+
+
@@ -89672,6 +92537,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -89751,7 +92627,86 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -89909,7 +92864,7 @@
-
+
@@ -90010,7 +92965,7 @@
-
+
@@ -90228,7 +93183,44 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -90315,6 +93307,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -90392,7 +93407,7 @@
-
+
@@ -90439,12 +93454,12 @@
-
+
-
+
-
+
@@ -90890,6 +93905,7 @@
+
@@ -91550,6 +94566,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -91675,6 +94720,12 @@
+
+
+
+
+
+
@@ -91859,7 +94910,7 @@
-
+
@@ -91883,6 +94934,11 @@
+
+
+
+
+
@@ -92021,7 +95077,7 @@
-
+
@@ -92292,7 +95348,7 @@
-
+
@@ -92377,7 +95433,7 @@
-
+
@@ -92599,6 +95655,11 @@
+
+
+
+
+
@@ -93708,7 +96769,7 @@
-
+
@@ -93941,21 +97002,21 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -94007,6 +97068,9 @@
+
+
+
@@ -94243,7 +97307,206 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -94251,7 +97514,15 @@
-
+
+
+
+
+
+
+
+
+
@@ -94259,7 +97530,7 @@
-
+
@@ -94267,7 +97538,7 @@
-
+
@@ -94314,7 +97585,7 @@
-
+
@@ -94325,7 +97596,7 @@
-
+
@@ -94345,7 +97616,7 @@
-
+
@@ -94368,7 +97639,7 @@
-
+
@@ -94388,26 +97659,26 @@
-
+
-
+
-
+
-
+
-
+
@@ -94421,7 +97692,7 @@
-
+
@@ -94429,7 +97700,7 @@
-
+
@@ -94449,7 +97720,7 @@
-
+
@@ -94472,7 +97743,7 @@
-
+
@@ -94480,7 +97751,7 @@
-
+
@@ -94488,7 +97759,7 @@
-
+
@@ -94496,7 +97767,7 @@
-
+
@@ -94504,7 +97775,7 @@
-
+
@@ -94530,17 +97801,17 @@
-
+
-
+
-
+
@@ -94548,17 +97819,17 @@
-
+
-
+
-
+
@@ -94575,7 +97846,7 @@
-
+
@@ -94589,7 +97860,7 @@
-
+
@@ -94603,7 +97874,7 @@
-
+
@@ -94632,7 +97903,7 @@
-
+
@@ -94649,7 +97920,7 @@
-
+
@@ -94663,7 +97934,7 @@
-
+
@@ -94677,7 +97948,7 @@
-
+
@@ -94691,7 +97962,7 @@
-
+
@@ -94702,7 +97973,7 @@
-
+
@@ -94716,15 +97987,15 @@
-
+
-
+
-
+
@@ -94732,7 +98003,7 @@
-
+
@@ -94746,12 +98017,12 @@
-
+
-
+
@@ -94759,7 +98030,7 @@
-
+
@@ -94767,7 +98038,7 @@
-
+
@@ -94778,7 +98049,7 @@
-
+
@@ -94786,7 +98057,7 @@
-
+
@@ -94794,7 +98065,7 @@
-
+
@@ -94805,7 +98076,7 @@
-
+
@@ -94813,7 +98084,7 @@
-
+
@@ -94830,7 +98101,7 @@
-
+
@@ -94838,7 +98109,7 @@
-
+
@@ -94846,7 +98117,7 @@
-
+
@@ -94860,7 +98131,7 @@
-
+
@@ -94874,14 +98145,14 @@
-
+
-
+
-
+
@@ -94890,10 +98161,10 @@
-
+
-
+
@@ -94910,7 +98181,7 @@
-
+
@@ -94921,7 +98192,7 @@
-
+
@@ -94932,13 +98203,13 @@
-
+
-
+
@@ -94946,7 +98217,7 @@
-
+
@@ -94957,7 +98228,7 @@
-
+
@@ -94968,7 +98239,7 @@
-
+
@@ -94976,7 +98247,7 @@
-
+
@@ -95152,13 +98423,13 @@
-
+
-
+
@@ -95169,7 +98440,7 @@
-
+
@@ -95177,10 +98448,10 @@
-
+
-
+
@@ -95188,7 +98459,7 @@
-
+
@@ -95196,7 +98467,7 @@
-
+
@@ -95210,7 +98481,7 @@
-
+
@@ -95218,7 +98489,7 @@
-
+
@@ -95226,7 +98497,7 @@
-
+
@@ -95234,7 +98505,7 @@
-
+
@@ -95242,7 +98513,7 @@
-
+
@@ -95253,7 +98524,7 @@
-
+
@@ -95261,7 +98532,7 @@
-
+
@@ -95275,7 +98546,7 @@
-
+
@@ -95286,7 +98557,7 @@
-
+
@@ -95294,7 +98565,7 @@
-
+
@@ -95302,7 +98573,7 @@
-
+
@@ -95310,7 +98581,7 @@
-
+
@@ -95330,7 +98601,7 @@
-
+
@@ -95338,13 +98609,13 @@
-
+
-
+
@@ -95361,7 +98632,7 @@
-
+
@@ -95375,7 +98646,7 @@
-
+
@@ -95389,7 +98660,7 @@
-
+
@@ -95397,7 +98668,7 @@
-
+
@@ -95411,7 +98682,7 @@
-
+
@@ -95422,7 +98693,7 @@
-
+
@@ -95439,15 +98710,15 @@
-
+
-
+
-
+
@@ -95455,7 +98726,7 @@
-
+
@@ -95466,7 +98737,7 @@
-
+
@@ -95477,7 +98748,7 @@
-
+
@@ -95485,7 +98756,7 @@
-
+
@@ -95502,7 +98773,7 @@
-
+
@@ -95525,7 +98796,7 @@
-
+
@@ -95533,7 +98804,7 @@
-
+
@@ -95544,7 +98815,7 @@
-
+
@@ -95558,18 +98829,18 @@
-
+
-
+
-
+
-
+
@@ -95595,7 +98866,7 @@
-
+
@@ -95606,7 +98877,7 @@
-
+
@@ -95614,7 +98885,7 @@
-
+
@@ -95634,7 +98905,7 @@
-
+
@@ -95645,7 +98916,7 @@
-
+
@@ -95656,12 +98927,12 @@
-
+
-
+
@@ -95669,7 +98940,7 @@
-
+
@@ -95677,7 +98948,7 @@
-
+
@@ -95685,7 +98956,7 @@
-
+
@@ -95693,12 +98964,12 @@
-
+
-
+
@@ -95706,7 +98977,7 @@
-
+
@@ -95714,7 +98985,7 @@
-
+
@@ -95722,7 +98993,7 @@
-
+
@@ -95730,7 +99001,7 @@
-
+
@@ -95738,7 +99009,7 @@
-
+
@@ -95746,7 +99017,7 @@
-
+
@@ -95787,7 +99058,7 @@
-
+
@@ -95795,13 +99066,13 @@
-
+
-
+
@@ -95827,7 +99098,7 @@
-
+
@@ -95892,7 +99163,7 @@
-
+
@@ -95903,7 +99174,7 @@
-
+
@@ -95920,7 +99191,7 @@
-
+
@@ -95964,9 +99235,9 @@
-
+
-
+
@@ -95975,7 +99246,7 @@
-
+
@@ -95986,7 +99257,7 @@
-
+
@@ -96006,7 +99277,7 @@
-
+
@@ -96014,7 +99285,7 @@
-
+
@@ -96031,7 +99302,7 @@
-
+
@@ -96060,12 +99331,12 @@
-
+
-
+
@@ -96074,10 +99345,10 @@
-
+
-
+
@@ -96091,17 +99362,17 @@
-
+
-
+
-
+
@@ -96109,7 +99380,7 @@
-
+
@@ -96120,7 +99391,7 @@
-
+
@@ -96128,7 +99399,7 @@
-
+
@@ -96169,7 +99440,7 @@
-
+
@@ -96177,7 +99448,7 @@
-
+
@@ -96185,7 +99456,7 @@
-
+
@@ -96199,7 +99470,7 @@
-
+
@@ -96219,7 +99490,7 @@
-
+
@@ -96227,7 +99498,7 @@
-
+
@@ -96235,7 +99506,7 @@
-
+
@@ -96243,12 +99514,12 @@
-
+
-
+
@@ -96256,7 +99527,7 @@
-
+
@@ -96264,10 +99535,10 @@
-
+
-
+
@@ -96275,23 +99546,23 @@
-
+
-
+
-
-
+
+
-
+
@@ -96300,12 +99571,12 @@
-
+
-
+
@@ -96313,12 +99584,12 @@
-
+
-
+
@@ -96326,12 +99597,12 @@
-
+
-
+
@@ -96348,7 +99619,7 @@
-
+
@@ -96356,7 +99627,7 @@
-
+
@@ -96364,12 +99635,12 @@
-
+
-
+
@@ -96377,7 +99648,7 @@
-
+
@@ -96385,9 +99656,9 @@
-
+
-
+
@@ -96402,12 +99673,12 @@
-
+
-
+
@@ -96433,7 +99704,7 @@
-
+
@@ -96444,7 +99715,7 @@
-
+
@@ -96464,7 +99735,7 @@
-
+
@@ -96487,53 +99758,7 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -96547,12 +99772,12 @@
-
+
-
+
@@ -96563,7 +99788,7 @@
-
+
@@ -96577,7 +99802,7 @@
-
+
@@ -96588,7 +99813,7 @@
-
+
@@ -96602,7 +99827,7 @@
-
+
@@ -96616,20 +99841,20 @@
-
+
-
+
-
+
-
+
@@ -96643,7 +99868,7 @@
-
+
@@ -96651,7 +99876,7 @@
-
+
@@ -96662,7 +99887,7 @@
-
+
@@ -96679,7 +99904,7 @@
-
+
@@ -96699,7 +99924,7 @@
-
+
@@ -96716,7 +99941,7 @@
-
+
@@ -96727,7 +99952,7 @@
-
+
@@ -96735,7 +99960,7 @@
-
+
@@ -96743,7 +99968,7 @@
-
+
@@ -96751,7 +99976,7 @@
-
+
@@ -96765,7 +99990,7 @@
-
+
@@ -96773,7 +99998,7 @@
-
+
@@ -96784,7 +100009,7 @@
-
+
@@ -96801,7 +100026,7 @@
-
+
@@ -96827,7 +100052,7 @@
-
+
@@ -96838,7 +100063,7 @@
-
+
@@ -96849,7 +100074,7 @@
-
+
@@ -97155,6 +100380,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -97216,7 +100464,7 @@
-
+
@@ -97235,6 +100483,14 @@
+
+
+
+
+
+
+
+
@@ -97410,7 +100666,7 @@
-
+
@@ -97581,7 +100837,7 @@
-
+
@@ -97613,6 +100869,7 @@
+
@@ -97715,30 +100972,30 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -98496,6 +101753,7 @@
+
@@ -98505,6 +101763,7 @@
+
@@ -98706,6 +101965,7 @@
+
@@ -98893,7 +102153,7 @@
-
+
@@ -98949,7 +102209,7 @@
-
+
@@ -98976,7 +102236,7 @@
-
+
@@ -99104,24 +102364,25 @@
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -99244,84 +102505,84 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -99357,12 +102618,12 @@
-
+
-
+
@@ -99501,6 +102762,13 @@
+
+
+
+
+
+
+
@@ -100073,6 +103341,9 @@
+
+
+
@@ -100093,7 +103364,7 @@
-
+
@@ -100387,6 +103658,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -100526,7 +103814,7 @@
-
+
@@ -100789,10 +104077,10 @@
-
+
-
+
@@ -101096,6 +104384,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -101200,7 +104502,7 @@
-
+
@@ -101339,6 +104641,7 @@
+
@@ -101377,6 +104680,7 @@
+
@@ -101450,7 +104754,7 @@
-
+
@@ -101501,7 +104805,7 @@
-
+
@@ -101532,7 +104836,7 @@
-
+
@@ -101972,7 +105276,7 @@
-
+
@@ -102087,6 +105391,7 @@
+
@@ -102162,7 +105467,7 @@
-
+
@@ -102221,6 +105526,7 @@
+
@@ -102315,7 +105621,7 @@
-
+
@@ -102893,6 +106199,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -102949,12 +106281,12 @@
-
+
-
+
@@ -103037,6 +106369,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -103251,6 +106675,7 @@
+
@@ -103319,7 +106744,7 @@
-
+
@@ -103377,6 +106802,7 @@
+
@@ -103530,6 +106956,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -103793,7 +107245,7 @@
-
+
@@ -103942,6 +107394,10 @@
+
+
+
+
@@ -103967,6 +107423,7 @@
+
@@ -104195,6 +107652,7 @@
+
@@ -104247,7 +107705,7 @@
-
+
@@ -104470,6 +107928,7 @@
+
@@ -104998,7 +108457,7 @@
-
+
@@ -105070,7 +108529,7 @@
-
+
@@ -105091,7 +108550,7 @@
-
+
@@ -105103,7 +108562,7 @@
-
+
@@ -105143,6 +108602,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -105201,13 +108677,13 @@
-
+
-
+
@@ -105545,7 +109021,7 @@
-
+
@@ -105700,6 +109176,7 @@
+
@@ -105838,6 +109315,7 @@
+
@@ -105860,6 +109338,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -105938,6 +109427,8 @@
+
+
@@ -105974,11 +109465,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -106036,6 +109527,13 @@
+
+
+
+
+
+
+
@@ -106423,14 +109921,14 @@
-
-
-
+
+
+
-
-
-
+
+
+
@@ -106639,9 +110137,9 @@
-
-
-
+
+
+
@@ -106699,8 +110197,8 @@
-
-
+
+
@@ -106780,9 +110278,9 @@
-
-
-
+
+
+
@@ -107084,12 +110582,12 @@
-
-
+
+
-
-
+
+
@@ -107103,101 +110601,93 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+
+
+
@@ -107205,40 +110695,48 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -107253,15 +110751,15 @@
-
-
-
-
+
+
+
+
-
-
-
+
+
+
@@ -107276,45 +110774,45 @@
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
@@ -107332,161 +110830,166 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -107495,50 +110998,50 @@
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
@@ -107547,62 +111050,73 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -107623,10 +111137,10 @@
-
-
-
-
+
+
+
+
@@ -107635,17 +111149,17 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
@@ -107682,76 +111196,76 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
-
-
+
+
+
+
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -107907,102 +111421,105 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -108107,6 +111624,13 @@
+
+
+
+
+
+
+
@@ -108309,9 +111833,9 @@
-
-
-
+
+
+
@@ -108407,9 +111931,9 @@
-
-
-
+
+
+
@@ -108420,10 +111944,10 @@
-
-
-
-
+
+
+
+
@@ -108515,8 +112039,8 @@
-
-
+
+
@@ -109363,16 +112887,16 @@
-
-
+
+
-
-
+
+
-
-
+
+
@@ -110721,7 +114245,7 @@
-
+
@@ -110901,16 +114425,16 @@
-
-
+
+
-
-
+
+
@@ -112691,8 +116215,8 @@
-
-
+
+
@@ -112741,6 +116265,11 @@
+
+
+
+
+
@@ -113862,6 +117391,12 @@
+
+
+
+
+
+
@@ -114555,16 +118090,16 @@
-
-
+
+
-
-
+
+
-
-
+
+
@@ -114601,14 +118136,14 @@
-
-
-
+
+
+
-
-
-
+
+
+
@@ -114948,8 +118483,8 @@
-
-
+
+
@@ -116173,6 +119708,7 @@
+
@@ -116333,11 +119869,11 @@
-
+
-
-
+
+
@@ -116413,6 +119949,10 @@
+
+
+
+
@@ -116776,7 +120316,7 @@
-
+
@@ -116832,7 +120372,7 @@
-
+
@@ -117034,7 +120574,7 @@
-
+
@@ -117870,11 +121410,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -117882,16 +121422,16 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
@@ -118231,6 +121771,11 @@
+
+
+
+
+
@@ -118888,14 +122433,14 @@
-
-
-
-
+
+
+
+
-
-
+
+
@@ -119677,7 +123222,7 @@
-
+
@@ -119801,10 +123346,10 @@
-
+
-
+
@@ -120043,17 +123588,17 @@
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
@@ -120748,7 +124293,7 @@
-
+
@@ -120937,67 +124482,67 @@
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
@@ -121277,10 +124822,10 @@
-
-
-
-
+
+
+
+
@@ -121423,9 +124968,9 @@
-
-
-
+
+
+
@@ -122034,10 +125579,27 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -123180,12 +126742,12 @@
-
-
-
+
+
+
-
-
+
+
@@ -123200,19 +126762,19 @@
-
-
-
-
+
+
+
+
-
-
+
+
-
-
-
+
+
+
@@ -123351,10 +126913,10 @@
-
-
-
-
+
+
+
+
@@ -123481,8 +127043,8 @@
-
-
+
+
@@ -125376,8 +128938,8 @@
-
-
+
+
@@ -125474,8 +129036,8 @@
-
-
+
+
@@ -125630,8 +129192,8 @@
-
-
+
+
@@ -125667,9 +129229,9 @@
-
-
-
+
+
+
diff --git a/android/abi_gki_aarch64_db845c b/android/abi_gki_aarch64_db845c
index 69be1905a229..ec944e48a1b9 100644
--- a/android/abi_gki_aarch64_db845c
+++ b/android/abi_gki_aarch64_db845c
@@ -54,7 +54,6 @@
cpumask_next
cpu_number
__cpu_online_mask
- crc32_le
debugfs_create_dir
debugfs_create_file
debugfs_create_u32
@@ -185,7 +184,6 @@
free_irq
generic_handle_irq
get_device
- get_random_bytes
gic_nonsecure_priorities
gpiochip_add_data_with_key
gpiochip_add_pin_range
@@ -419,7 +417,6 @@
preempt_schedule_notrace
prepare_to_wait_event
printk
- pskb_expand_head
put_device
__put_task_struct
qcom_smem_state_register
@@ -505,7 +502,6 @@
simple_read_from_buffer
single_open
single_release
- skb_clone
skb_dequeue
skb_pull
skb_push
@@ -553,6 +549,7 @@
strlen
strncmp
strncpy
+ strnlen
strpbrk
strsep
__sw_hweight32
@@ -655,9 +652,11 @@
cfg80211_vendor_cmd_reply
cpu_latency_qos_add_request
cpu_latency_qos_remove_request
+ crc32_le
device_get_mac_address
device_set_wakeup_enable
firmware_request_nowarn
+ get_random_bytes
guid_gen
idr_for_each
ieee80211_alloc_hw_nm
@@ -710,11 +709,13 @@
init_uts_ns
__kfifo_alloc
__kfifo_free
+ ktime_get_with_offset
__local_bh_enable_ip
memmove
__nla_parse
nla_put
param_ops_ulong
+ pskb_expand_head
regulatory_hint
rfc1042_header
skb_copy
@@ -751,44 +752,6 @@
devm_clk_bulk_get_optional
iommu_map
-# required by ax88179_178a.ko
- eth_platform_get_mac_address
- ethtool_op_get_link
- ethtool_op_get_ts_info
- eth_validate_addr
- generic_mii_ioctl
- mii_ethtool_get_link_ksettings
- mii_ethtool_gset
- mii_ethtool_set_link_ksettings
- mii_nway_restart
- netdev_err
- netdev_info
- netdev_warn
- netif_carrier_on
- usb_deregister
- usbnet_disconnect
- usbnet_get_endpoints
- usbnet_get_msglevel
- usbnet_get_stats64
- usbnet_link_change
- usbnet_nway_reset
- usbnet_open
- usbnet_probe
- usbnet_read_cmd
- usbnet_read_cmd_nopm
- usbnet_resume
- usbnet_set_msglevel
- usbnet_skb_return
- usbnet_start_xmit
- usbnet_stop
- usbnet_suspend
- usbnet_tx_timeout
- usbnet_update_max_qlen
- usbnet_write_cmd
- usbnet_write_cmd_async
- usbnet_write_cmd_nopm
- usb_register_driver
-
# required by bam_dma.ko
dma_async_device_register
dma_async_device_unregister
@@ -1303,9 +1266,6 @@
usb_put_hcd
usb_remove_hcd
-# required by pdr_interface.ko
- strnlen
-
# required by phy-qcom-qmp.ko
of_clk_get_by_name
__of_reset_control_get
@@ -1489,6 +1449,7 @@
refcount_dec_and_mutex_lock
release_sock
sk_alloc
+ skb_clone
skb_copy_bits
skb_copy_datagram_iter
skb_free_datagram
@@ -1577,7 +1538,9 @@
snd_ctl_add
snd_ctl_new1
snd_pcm_add_chmap_ctls
- snd_pcm_create_iec958_consumer_hw_params
+ snd_pcm_create_iec958_consumer_default
+ snd_pcm_fill_iec958_consumer
+ snd_pcm_fill_iec958_consumer_hw_params
snd_pcm_hw_constraint_eld
# required by snd-soc-qcom-common.ko
@@ -1701,3 +1664,42 @@
# required by wcd934x.ko
mfd_add_devices
mfd_remove_devices
+
+# preserved by --additions-only
+ eth_platform_get_mac_address
+ ethtool_op_get_link
+ ethtool_op_get_ts_info
+ eth_validate_addr
+ generic_mii_ioctl
+ mii_ethtool_get_link_ksettings
+ mii_ethtool_gset
+ mii_ethtool_set_link_ksettings
+ mii_nway_restart
+ netdev_err
+ netdev_info
+ netdev_warn
+ netif_carrier_on
+ snd_pcm_create_iec958_consumer_hw_params
+ usb_deregister
+ usbnet_disconnect
+ usbnet_get_endpoints
+ usbnet_get_msglevel
+ usbnet_get_stats64
+ usbnet_link_change
+ usbnet_nway_reset
+ usbnet_open
+ usbnet_probe
+ usbnet_read_cmd
+ usbnet_read_cmd_nopm
+ usbnet_resume
+ usbnet_set_msglevel
+ usbnet_skb_return
+ usbnet_start_xmit
+ usbnet_stop
+ usbnet_suspend
+ usbnet_tx_timeout
+ usbnet_update_max_qlen
+ usbnet_write_cmd
+ usbnet_write_cmd_async
+ usbnet_write_cmd_nopm
+ usb_register_driver
diff --git a/android/abi_gki_aarch64_generic b/android/abi_gki_aarch64_generic
index 23ab56e53ad8..81746e107e32 100644
--- a/android/abi_gki_aarch64_generic
+++ b/android/abi_gki_aarch64_generic
@@ -78,6 +78,7 @@
__bitmap_set
bitmap_to_arr32
__bitmap_weight
+ __bitmap_xor
blk_abort_request
blk_alloc_queue
blk_check_plugged
@@ -628,6 +629,7 @@
drm_add_modes_noedid
drm_atomic_add_affected_connectors
drm_atomic_add_affected_planes
+ drm_atomic_bridge_chain_disable
drm_atomic_commit
drm_atomic_get_connector_state
drm_atomic_get_crtc_state
@@ -753,6 +755,7 @@
drm_mode_object_find
drm_mode_object_get
drm_mode_object_put
+ drm_mode_parse_command_line_for_connector
drm_mode_probed_add
drm_modeset_acquire_fini
drm_modeset_acquire_init
@@ -963,6 +966,7 @@
gpiod_get_raw_value_cansleep
gpiod_get_value
gpiod_get_value_cansleep
+ gpiod_set_debounce
gpiod_set_raw_value
gpiod_set_raw_value_cansleep
gpiod_set_value
@@ -1051,6 +1055,7 @@
__init_swait_queue_head
init_task
init_timer_key
+ init_user_ns
init_wait_entry
__init_waitqueue_head
input_alloc_absinfo
@@ -1092,6 +1097,7 @@
iommu_device_sysfs_remove
iommu_device_unlink
iommu_device_unregister
+ iommu_dma_enable_best_fit_algo
iommu_domain_alloc
iommu_domain_free
iommu_fwspec_add_ids
@@ -1373,6 +1379,7 @@
nr_cpu_ids
nr_irqs
ns_capable
+ ns_capable_noaudit
nsec_to_clock_t
ns_to_timespec64
__num_online_cpus
@@ -2237,6 +2244,7 @@
__traceiter_android_vh_cpu_idle_exit
__traceiter_android_vh_dump_throttled_rt_tasks
__traceiter_android_vh_dup_task_struct
+ __traceiter_android_vh_early_resume_begin
__traceiter_android_vh_enable_thermal_genl_check
__traceiter_android_vh_ep_create_wakeup_source
__traceiter_android_vh_get_user_pages
@@ -2249,6 +2257,8 @@
__traceiter_android_vh_of_i2c_get_board_info
__traceiter_android_vh_pagecache_get_page
__traceiter_android_vh_pin_user_pages
+ __traceiter_android_vh_rebuild_root_domains_bypass
+ __traceiter_android_vh_resume_end
__traceiter_android_vh_rmqueue
__traceiter_android_vh_sched_setaffinity_early
__traceiter_android_vh_scheduler_tick
@@ -2351,6 +2361,7 @@
__tracepoint_android_vh_cpu_idle_exit
__tracepoint_android_vh_dump_throttled_rt_tasks
__tracepoint_android_vh_dup_task_struct
+ __tracepoint_android_vh_early_resume_begin
__tracepoint_android_vh_enable_thermal_genl_check
__tracepoint_android_vh_ep_create_wakeup_source
__tracepoint_android_vh_get_user_pages
@@ -2363,6 +2374,8 @@
__tracepoint_android_vh_of_i2c_get_board_info
__tracepoint_android_vh_pagecache_get_page
__tracepoint_android_vh_pin_user_pages
+ __tracepoint_android_vh_rebuild_root_domains_bypass
+ __tracepoint_android_vh_resume_end
__tracepoint_android_vh_rmqueue
__tracepoint_android_vh_sched_setaffinity_early
__tracepoint_android_vh_scheduler_tick
@@ -2666,6 +2679,7 @@
xa_find
xa_find_after
xa_get_mark
+ __xa_insert
xa_load
xa_set_mark
xa_store
diff --git a/android/abi_gki_aarch64_type_visibility b/android/abi_gki_aarch64_type_visibility
new file mode 100644
index 000000000000..8a98e59ea81b
--- /dev/null
+++ b/android/abi_gki_aarch64_type_visibility
@@ -0,0 +1,5 @@
+[abi_symbol_list]
+
+# for type visibility
+ GKI_struct_blk_mq_alloc_data
+ GKI_struct_cgroup_taskset
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 175213d7a1aa..37c3036cd468 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -76,10 +76,10 @@ CPPFLAGS_vmlinux.lds += -DTEXT_OFFSET="$(TEXT_OFFSET)"
CPPFLAGS_vmlinux.lds += -DMALLOC_SIZE="$(MALLOC_SIZE)"
compress-$(CONFIG_KERNEL_GZIP) = gzip
-compress-$(CONFIG_KERNEL_LZO) = lzo
-compress-$(CONFIG_KERNEL_LZMA) = lzma
-compress-$(CONFIG_KERNEL_XZ) = xzkern
-compress-$(CONFIG_KERNEL_LZ4) = lz4
+compress-$(CONFIG_KERNEL_LZO) = lzo_with_size
+compress-$(CONFIG_KERNEL_LZMA) = lzma_with_size
+compress-$(CONFIG_KERNEL_XZ) = xzkern_with_size
+compress-$(CONFIG_KERNEL_LZ4) = lz4_with_size
libfdt_objs := fdt_rw.o fdt_ro.o fdt_wip.o fdt.o
diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c
index 176221e31299..916caf2e110d 100644
--- a/arch/arm64/kernel/smp.c
+++ b/arch/arm64/kernel/smp.c
@@ -919,7 +919,7 @@ static void do_handle_IPI(int ipinr)
break;
case IPI_CPU_STOP:
- trace_android_vh_ipi_stop_rcuidle(get_irq_regs());
+ trace_android_vh_ipi_stop(get_irq_regs());
local_cpu_stop();
break;
diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c
index 86cbee644a39..8e22c300752c 100644
--- a/arch/arm64/kvm/arm.c
+++ b/arch/arm64/kvm/arm.c
@@ -2286,6 +2286,16 @@ static int __init early_kvm_mode_cfg(char *arg)
if (!arg)
return -EINVAL;
+ if (strcmp(arg, "none") == 0) {
+ kvm_mode = KVM_MODE_NONE;
+ return 0;
+ }
+
+ if (!is_hyp_mode_available()) {
+ pr_warn_once("KVM is not available. Ignoring kvm-arm.mode\n");
+ return 0;
+ }
+
if (strcmp(arg, "protected") == 0) {
if (!is_kernel_in_hyp_mode())
kvm_mode = KVM_MODE_PROTECTED;
@@ -2300,11 +2310,6 @@ static int __init early_kvm_mode_cfg(char *arg)
return 0;
}
- if (strcmp(arg, "none") == 0) {
- kvm_mode = KVM_MODE_NONE;
- return 0;
- }
-
return -EINVAL;
}
early_param("kvm-arm.mode", early_kvm_mode_cfg);
diff --git a/arch/arm64/kvm/hyp/nvhe/pkvm.c b/arch/arm64/kvm/hyp/nvhe/pkvm.c
index 9b2e303dd124..50717a46e735 100644
--- a/arch/arm64/kvm/hyp/nvhe/pkvm.c
+++ b/arch/arm64/kvm/hyp/nvhe/pkvm.c
@@ -414,6 +414,15 @@ static int set_host_vcpus(struct shadow_vcpu_state *shadow_vcpus, int nr_vcpus,
return 0;
}
+static int init_ptrauth(struct kvm_vcpu *shadow_vcpu)
+{
+ int ret = 0;
+ if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, shadow_vcpu->arch.features) ||
+ test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, shadow_vcpu->arch.features))
+ ret = kvm_vcpu_enable_ptrauth(shadow_vcpu);
+ return ret;
+}
+
static int init_shadow_structs(struct kvm *kvm, struct kvm_shadow_vm *vm,
struct kvm_vcpu **vcpu_array, int nr_vcpus)
{
@@ -438,6 +447,10 @@ static int init_shadow_structs(struct kvm *kvm, struct kvm_shadow_vm *vm,
if (ret)
return ret;
+ ret = init_ptrauth(shadow_vcpu);
+ if (ret)
+ return ret;
+
if (test_bit(KVM_ARM_VCPU_SVE, shadow_vcpu->arch.features)) {
size_t sve_state_size;
void *sve_state;
@@ -851,14 +864,7 @@ void pkvm_reset_vcpu(struct kvm_vcpu *vcpu)
WARN_ON(!reset_state->reset);
- if (test_bit(KVM_ARM_VCPU_PTRAUTH_ADDRESS, vcpu->arch.features) ||
- test_bit(KVM_ARM_VCPU_PTRAUTH_GENERIC, vcpu->arch.features)) {
- /*
- * This call should not fail since we've already checked for
- * feature support on initialization.
- */
- WARN_ON(kvm_vcpu_enable_ptrauth(vcpu));
- }
+ init_ptrauth(vcpu);
/* Reset core registers */
memset(vcpu_gp_regs(vcpu), 0, sizeof(*vcpu_gp_regs(vcpu)));
diff --git a/arch/h8300/boot/compressed/Makefile b/arch/h8300/boot/compressed/Makefile
index 5942793f77a0..6ab2fa5ba105 100644
--- a/arch/h8300/boot/compressed/Makefile
+++ b/arch/h8300/boot/compressed/Makefile
@@ -30,9 +30,11 @@ $(obj)/vmlinux.bin: vmlinux FORCE
suffix-$(CONFIG_KERNEL_GZIP) := gzip
suffix-$(CONFIG_KERNEL_LZO) := lzo
+compress-$(CONFIG_KERNEL_GZIP) := gzip
+compress-$(CONFIG_KERNEL_LZO) := lzo_with_size
$(obj)/vmlinux.bin.$(suffix-y): $(obj)/vmlinux.bin FORCE
- $(call if_changed,$(suffix-y))
+ $(call if_changed,$(compress-y))
LDFLAGS_piggy.o := -r --format binary --oformat elf32-h8300-linux -T
OBJCOPYFLAGS := -O binary
diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile
index eae0fad30f27..69eda7ab110a 100644
--- a/arch/mips/boot/compressed/Makefile
+++ b/arch/mips/boot/compressed/Makefile
@@ -71,12 +71,12 @@ $(obj)/vmlinux.bin: $(KBUILD_IMAGE) FORCE
$(call if_changed,objcopy)
tool_$(CONFIG_KERNEL_GZIP) = gzip
-tool_$(CONFIG_KERNEL_BZIP2) = bzip2
-tool_$(CONFIG_KERNEL_LZ4) = lz4
-tool_$(CONFIG_KERNEL_LZMA) = lzma
-tool_$(CONFIG_KERNEL_LZO) = lzo
-tool_$(CONFIG_KERNEL_XZ) = xzkern
-tool_$(CONFIG_KERNEL_ZSTD) = zstd22
+tool_$(CONFIG_KERNEL_BZIP2) = bzip2_with_size
+tool_$(CONFIG_KERNEL_LZ4) = lz4_with_size
+tool_$(CONFIG_KERNEL_LZMA) = lzma_with_size
+tool_$(CONFIG_KERNEL_LZO) = lzo_with_size
+tool_$(CONFIG_KERNEL_XZ) = xzkern_with_size
+tool_$(CONFIG_KERNEL_ZSTD) = zstd22_with_size
targets += vmlinux.bin.z
$(obj)/vmlinux.bin.z: $(obj)/vmlinux.bin FORCE
diff --git a/arch/parisc/boot/compressed/Makefile b/arch/parisc/boot/compressed/Makefile
index dff453687530..c09300a6ba98 100644
--- a/arch/parisc/boot/compressed/Makefile
+++ b/arch/parisc/boot/compressed/Makefile
@@ -73,15 +73,15 @@ suffix-$(CONFIG_KERNEL_XZ) := xz
$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y)
$(call if_changed,gzip)
$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y)
- $(call if_changed,bzip2)
+ $(call if_changed,bzip2_with_size)
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y)
- $(call if_changed,lz4)
+ $(call if_changed,lz4_with_size)
$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y)
- $(call if_changed,lzma)
+ $(call if_changed,lzma_with_size)
$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y)
- $(call if_changed,lzo)
+ $(call if_changed,lzo_with_size)
$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y)
- $(call if_changed,xzkern)
+ $(call if_changed,xzkern_with_size)
LDFLAGS_piggy.o := -r --format binary --oformat $(LD_BFD) -T
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y)
diff --git a/arch/s390/boot/compressed/Makefile b/arch/s390/boot/compressed/Makefile
index b235ed95a3d8..0e4b585885f0 100644
--- a/arch/s390/boot/compressed/Makefile
+++ b/arch/s390/boot/compressed/Makefile
@@ -49,15 +49,15 @@ suffix-$(CONFIG_KERNEL_XZ) := .xz
$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
$(call if_changed,gzip)
$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,bzip2)
+ $(call if_changed,bzip2_with_size)
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lz4)
+ $(call if_changed,lz4_with_size)
$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lzma)
+ $(call if_changed,lzma_with_size)
$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lzo)
+ $(call if_changed,lzo_with_size)
$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,xzkern)
+ $(call if_changed,xzkern_with_size)
OBJCOPYFLAGS_piggy.o := -I binary -O elf64-s390 -B s390:64-bit --rename-section .data=.vmlinux.bin.compressed
$(obj)/piggy.o: $(obj)/vmlinux.bin$(suffix-y) FORCE
diff --git a/arch/sh/boot/compressed/Makefile b/arch/sh/boot/compressed/Makefile
index 589d2d8a573d..0525d8abdf45 100644
--- a/arch/sh/boot/compressed/Makefile
+++ b/arch/sh/boot/compressed/Makefile
@@ -58,13 +58,13 @@ vmlinux.bin.all-y := $(obj)/vmlinux.bin
$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
$(call if_changed,gzip)
$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,bzip2)
+ $(call if_changed,bzip2_with_size)
$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lzma)
+ $(call if_changed,lzma_with_size)
$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,xzkern)
+ $(call if_changed,xzkern_with_size)
$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lzo)
+ $(call if_changed,lzo_with_size)
OBJCOPYFLAGS += -R .empty_zero_page
diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
index bf91e0a36d77..57820a9763df 100644
--- a/arch/x86/boot/compressed/Makefile
+++ b/arch/x86/boot/compressed/Makefile
@@ -125,17 +125,17 @@ vmlinux.bin.all-$(CONFIG_X86_NEED_RELOCS) += $(obj)/vmlinux.relocs
$(obj)/vmlinux.bin.gz: $(vmlinux.bin.all-y) FORCE
$(call if_changed,gzip)
$(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,bzip2)
+ $(call if_changed,bzip2_with_size)
$(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lzma)
+ $(call if_changed,lzma_with_size)
$(obj)/vmlinux.bin.xz: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,xzkern)
+ $(call if_changed,xzkern_with_size)
$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lzo)
+ $(call if_changed,lzo_with_size)
$(obj)/vmlinux.bin.lz4: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,lz4)
+ $(call if_changed,lz4_with_size)
$(obj)/vmlinux.bin.zst: $(vmlinux.bin.all-y) FORCE
- $(call if_changed,zstd22)
+ $(call if_changed,zstd22_with_size)
suffix-$(CONFIG_KERNEL_GZIP) := gz
suffix-$(CONFIG_KERNEL_BZIP2) := bz2
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index a5d6d79b023b..0ecdb3a81f95 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7289,7 +7289,7 @@ int kvm_skip_emulated_instruction(struct kvm_vcpu *vcpu)
}
EXPORT_SYMBOL_GPL(kvm_skip_emulated_instruction);
-static bool kvm_vcpu_check_breakpoint(struct kvm_vcpu *vcpu, int *r)
+static bool kvm_vcpu_check_code_breakpoint(struct kvm_vcpu *vcpu, int *r)
{
if (unlikely(vcpu->guest_debug & KVM_GUESTDBG_USE_HW_BP) &&
(vcpu->arch.guest_debug_dr7 & DR7_BP_EN_MASK)) {
@@ -7358,25 +7358,23 @@ static bool is_vmware_backdoor_opcode(struct x86_emulate_ctxt *ctxt)
}
/*
- * Decode to be emulated instruction. Return EMULATION_OK if success.
+ * Decode an instruction for emulation. The caller is responsible for handling
+ * code breakpoints. Note, manually detecting code breakpoints is unnecessary
+ * (and wrong) when emulating on an intercepted fault-like exception[*], as
+ * code breakpoints have higher priority and thus have already been done by
+ * hardware.
+ *
+ * [*] Except #MC, which is higher priority, but KVM should never emulate in
+ * response to a machine check.
*/
int x86_decode_emulated_instruction(struct kvm_vcpu *vcpu, int emulation_type,
void *insn, int insn_len)
{
- int r = EMULATION_OK;
struct x86_emulate_ctxt *ctxt = vcpu->arch.emulate_ctxt;
+ int r;
init_emulate_ctxt(vcpu);
- /*
- * We will reenter on the same instruction since we do not set
- * complete_userspace_io. This does not handle watchpoints yet,
- * those would be handled in the emulate_ops.
- */
- if (!(emulation_type & EMULTYPE_SKIP) &&
- kvm_vcpu_check_breakpoint(vcpu, &r))
- return r;
-
ctxt->ud = emulation_type & EMULTYPE_TRAP_UD;
r = x86_decode_insn(ctxt, insn, insn_len);
@@ -7411,6 +7409,15 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa,
if (!(emulation_type & EMULTYPE_NO_DECODE)) {
kvm_clear_exception_queue(vcpu);
+ /*
+ * Return immediately if RIP hits a code breakpoint, such #DBs
+ * are fault-like and are higher priority than any faults on
+ * the code fetch itself.
+ */
+ if (!(emulation_type & EMULTYPE_SKIP) &&
+ kvm_vcpu_check_code_breakpoint(vcpu, &r))
+ return r;
+
r = x86_decode_emulated_instruction(vcpu, emulation_type,
insn, insn_len);
if (r != EMULATION_OK) {
diff --git a/block/Makefile b/block/Makefile
index af3d044abaf1..05daaf8282a1 100644
--- a/block/Makefile
+++ b/block/Makefile
@@ -39,3 +39,4 @@ obj-$(CONFIG_BLK_SED_OPAL) += sed-opal.o
obj-$(CONFIG_BLK_PM) += blk-pm.o
obj-$(CONFIG_BLK_INLINE_ENCRYPTION) += keyslot-manager.o blk-crypto.o
obj-$(CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK) += blk-crypto-fallback.o
+obj-$(CONFIG_ANDROID_VENDOR_HOOKS) += vendor_hooks.o
diff --git a/block/vendor_hooks.c b/block/vendor_hooks.c
new file mode 100644
index 000000000000..db033b9e2835
--- /dev/null
+++ b/block/vendor_hooks.c
@@ -0,0 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* vendor_hook.c
+ *
+ * Copyright 2022 Google LLC
+ */
+#include "blk.h"
+#include "blk-mq-tag.h"
+#include "blk-mq.h"
+#include
+
+#define CREATE_TRACE_POINTS
+#include
+#include
+#include
+
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_alloc_rqs);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_rq_ctx_init);
+
+/*
+ * For type visibility
+ */
+const struct blk_mq_alloc_data *GKI_struct_blk_mq_alloc_data;
+EXPORT_SYMBOL_GPL(GKI_struct_blk_mq_alloc_data);
+
diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64
index 479bed504395..dde70d69dd33 100644
--- a/build.config.gki.aarch64
+++ b/build.config.gki.aarch64
@@ -7,11 +7,11 @@ Image.lz4
Image.gz
"
+# Sync with BUILD.bazel
ABI_DEFINITION=android/abi_gki_aarch64.xml
-# Update BUILD.bazel, define_common_kernels() if the list differs from
-# android/abi_gki_aarch64* in the filesystem.
KMI_SYMBOL_LIST=android/abi_gki_aarch64
ADDITIONAL_KMI_SYMBOL_LISTS="
+android/abi_gki_aarch64_type_visibility
android/abi_gki_aarch64_core
android/abi_gki_aarch64_fips140
android/abi_gki_aarch64_generic
diff --git a/build.config.gki.x86_64 b/build.config.gki.x86_64
index 7ecd1dfe7dcb..3d81fea6aacb 100644
--- a/build.config.gki.x86_64
+++ b/build.config.gki.x86_64
@@ -5,5 +5,7 @@
BUILD_SYSTEM_DLKM=1
MODULES_LIST=${ROOT_DIR}/${KERNEL_DIR}/android/gki_system_dlkm_modules
+BUILD_GKI_CERTIFICATION_TOOLS=1
+
BUILD_GKI_ARTIFACTS=1
BUILD_GKI_BOOT_IMG_SIZE=67108864
diff --git a/crypto/jitterentropy.c b/crypto/jitterentropy.c
index 37c4c308339e..423c55d0e165 100644
--- a/crypto/jitterentropy.c
+++ b/crypto/jitterentropy.c
@@ -117,6 +117,22 @@ struct rand_data {
#define JENT_EHEALTH 9 /* Health test failed during initialization */
#define JENT_ERCT 10 /* RCT failed during initialization */
+/*
+ * The output n bits can receive more than n bits of min entropy, of course,
+ * but the fixed output of the conditioning function can only asymptotically
+ * approach the output size bits of min entropy, not attain that bound. Random
+ * maps will tend to have output collisions, which reduces the creditable
+ * output entropy (that is what SP 800-90B Section 3.1.5.1.2 attempts to bound).
+ *
+ * The value "64" is justified in Appendix A.4 of the current 90C draft,
+ * and aligns with NIST's in "epsilon" definition in this document, which is
+ * that a string can be considered "full entropy" if you can bound the min
+ * entropy in each bit of output to at least 1-epsilon, where epsilon is
+ * required to be <= 2^(-32).
+ */
+#define JENT_ENTROPY_SAFETY_FACTOR 64
+
+#include
#include "jitterentropy.h"
/***************************************************************************
@@ -546,7 +562,10 @@ static int jent_measure_jitter(struct rand_data *ec)
*/
static void jent_gen_entropy(struct rand_data *ec)
{
- unsigned int k = 0;
+ unsigned int k = 0, safety_factor = 0;
+
+ if (fips_enabled)
+ safety_factor = JENT_ENTROPY_SAFETY_FACTOR;
/* priming of the ->prev_time value */
jent_measure_jitter(ec);
@@ -560,7 +579,7 @@ static void jent_gen_entropy(struct rand_data *ec)
* We multiply the loop value with ->osr to obtain the
* oversampling rate requested by the caller
*/
- if (++k >= (DATA_SIZE_BITS * ec->osr))
+ if (++k >= ((DATA_SIZE_BITS + safety_factor) * ec->osr))
break;
}
}
diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c
index 3607c500f192..73efd5503d2f 100644
--- a/drivers/android/vendor_hooks.c
+++ b/drivers/android/vendor_hooks.c
@@ -5,6 +5,28 @@
*
* Copyright 2020 Google LLC
*/
+#ifndef __GENKSYMS__
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include <../drivers/net/wireless/intel/ipw2x00/libipw.h>
+#include <../fs/mount.h>
+#include <../fs/kernfs/kernfs-internal.h>
+#include <../kernel/audit.h>
+#include <../net/can/af_can.h>
+#include <../net/tipc/bearer.h>
+#include <../net/xdp/xsk_queue.h>
+#include <../security/keys/internal.h>
+#endif
#define CREATE_TRACE_POINTS
#include
@@ -19,7 +41,6 @@
#include
#include
#include
-#include
#include
#include
#include
@@ -40,8 +61,9 @@
#include
#include
#include
-#include
+#ifdef __GENKSYMS__
#include
+#endif
#include
#include
#include
@@ -83,7 +105,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_rt);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_dl);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_fallback_rq);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_refrigerator);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_scheduler_tick);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task);
@@ -126,7 +147,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_resume);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks);
@@ -228,8 +248,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_task_util);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_rq_util_with);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_set_task);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cgroup_force_kthread_migration);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_syscall_prctl_finished);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_create_worker);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_tick);
@@ -248,8 +266,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_selinux_avc_insert);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_selinux_avc_node_delete);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_selinux_avc_node_replace);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_selinux_avc_lookup);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_alloc_rqs);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_blk_rq_ctx_init);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_commit_creds);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_exit_creds);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_override_creds);
@@ -296,7 +312,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_swappiness);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_slab_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_comm);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_setaffinity_early);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task);
@@ -314,7 +329,6 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_selinux_is_initialized);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_inactive_ratio);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_topology_flags_workfn);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_of_i2c_get_board_info);
-EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_attach);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_dirty_limits);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_check_panic);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_uninterruptible_tasks);
@@ -395,3 +409,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mmput);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_early_resume_begin);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_reclaim_bypass);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_failure_bypass);
+EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rebuild_root_domains_bypass);
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 9d5c6dd5b756..2c355b58d078 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -1252,6 +1252,7 @@ bad:
static struct target_type verity_target = {
.name = "verity",
.version = {1, 7, 0},
+ .features = DM_TARGET_IMMUTABLE,
.module = THIS_MODULE,
.ctr = verity_ctr,
.dtr = verity_dtr,
diff --git a/drivers/net/wireless/mac80211_hwsim.c b/drivers/net/wireless/mac80211_hwsim.c
index 6911e588e578..9157257925e1 100644
--- a/drivers/net/wireless/mac80211_hwsim.c
+++ b/drivers/net/wireless/mac80211_hwsim.c
@@ -597,7 +597,7 @@ struct mac80211_hwsim_data {
bool ps_poll_pending;
struct dentry *debugfs;
- uintptr_t pending_cookie;
+ atomic_t pending_cookie;
struct sk_buff_head pending; /* packets pending */
/*
* Only radios in the same group can communicate together (the
@@ -1273,8 +1273,7 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
goto nla_put_failure;
/* We create a cookie to identify this skb */
- data->pending_cookie++;
- cookie = data->pending_cookie;
+ cookie = atomic_inc_return(&data->pending_cookie);
info->rate_driver_data[0] = (void *)cookie;
if (nla_put_u64_64bit(skb, HWSIM_ATTR_COOKIE, cookie, HWSIM_ATTR_PAD))
goto nla_put_failure;
@@ -3511,6 +3510,7 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
const u8 *src;
unsigned int hwsim_flags;
int i;
+ unsigned long flags;
bool found = false;
if (!info->attrs[HWSIM_ATTR_ADDR_TRANSMITTER] ||
@@ -3538,18 +3538,20 @@ static int hwsim_tx_info_frame_received_nl(struct sk_buff *skb_2,
}
/* look for the skb matching the cookie passed back from user */
+ spin_lock_irqsave(&data2->pending.lock, flags);
skb_queue_walk_safe(&data2->pending, skb, tmp) {
- u64 skb_cookie;
+ uintptr_t skb_cookie;
txi = IEEE80211_SKB_CB(skb);
- skb_cookie = (u64)(uintptr_t)txi->rate_driver_data[0];
+ skb_cookie = (uintptr_t)txi->rate_driver_data[0];
if (skb_cookie == ret_skb_cookie) {
- skb_unlink(skb, &data2->pending);
+ __skb_unlink(skb, &data2->pending);
found = true;
break;
}
}
+ spin_unlock_irqrestore(&data2->pending.lock, flags);
/* not found */
if (!found)
diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index b9df2db533d2..45ee1adefc08 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -4553,7 +4553,7 @@ static int ufshcd_complete_dev_init(struct ufs_hba *hba)
QUERY_FLAG_IDN_FDEVICEINIT, 0, &flag_res);
if (!flag_res)
break;
- usleep_range(5000, 10000);
+ usleep_range(500, 1000);
} while (ktime_before(ktime_get(), timeout));
if (err) {
diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c
index 03a3dafc82f3..bff7bf2f7586 100644
--- a/fs/erofs/zdata.c
+++ b/fs/erofs/zdata.c
@@ -770,12 +770,9 @@ static void z_erofs_decompress_kickoff(struct z_erofs_decompressqueue *io,
/* wake up the caller thread for sync decompression */
if (sync) {
- unsigned long flags;
-
- spin_lock_irqsave(&io->u.wait.lock, flags);
if (!atomic_add_return(bios, &io->pending_bios))
- wake_up_locked(&io->u.wait);
- spin_unlock_irqrestore(&io->u.wait.lock, flags);
+ complete(&io->u.done);
+
return;
}
@@ -1186,7 +1183,7 @@ jobqueue_init(struct super_block *sb,
} else {
fg_out:
q = fgq;
- init_waitqueue_head(&fgq->u.wait);
+ init_completion(&fgq->u.done);
atomic_set(&fgq->pending_bios, 0);
}
q->sb = sb;
@@ -1360,8 +1357,7 @@ static void z_erofs_runqueue(struct super_block *sb,
return;
/* wait until all bios are completed */
- io_wait_event(io[JQ_SUBMIT].u.wait,
- !atomic_read(&io[JQ_SUBMIT].pending_bios));
+ wait_for_completion_io(&io[JQ_SUBMIT].u.done);
/* handle synchronous decompress queue in the caller context */
z_erofs_decompress_queue(&io[JQ_SUBMIT], pagepool);
diff --git a/fs/erofs/zdata.h b/fs/erofs/zdata.h
index 4a69515dea75..5e9a0eb54c89 100644
--- a/fs/erofs/zdata.h
+++ b/fs/erofs/zdata.h
@@ -89,7 +89,7 @@ struct z_erofs_decompressqueue {
z_erofs_next_pcluster_t head;
union {
- wait_queue_head_t wait;
+ struct completion done;
struct work_struct work;
} u;
};
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index d93db6d29704..bf8059060766 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -26,12 +26,16 @@
static struct kmem_cache *ino_entry_slab;
struct kmem_cache *f2fs_inode_entry_slab;
-void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io)
+void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
+ unsigned char reason)
{
f2fs_build_fault_attr(sbi, 0, 0);
set_ckpt_flags(sbi, CP_ERROR_FLAG);
- if (!end_io)
+ if (!end_io) {
f2fs_flush_merged_writes(sbi);
+
+ f2fs_handle_stop(sbi, reason);
+ }
}
/*
@@ -122,7 +126,7 @@ retry:
if (PTR_ERR(page) == -EIO &&
++count <= DEFAULT_RETRY_IO_COUNT)
goto retry;
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_META_PAGE);
}
return page;
}
@@ -1895,15 +1899,27 @@ int f2fs_start_ckpt_thread(struct f2fs_sb_info *sbi)
void f2fs_stop_ckpt_thread(struct f2fs_sb_info *sbi)
{
struct ckpt_req_control *cprc = &sbi->cprc_info;
+ struct task_struct *ckpt_task;
- if (cprc->f2fs_issue_ckpt) {
- struct task_struct *ckpt_task = cprc->f2fs_issue_ckpt;
+ if (!cprc->f2fs_issue_ckpt)
+ return;
- cprc->f2fs_issue_ckpt = NULL;
- kthread_stop(ckpt_task);
+ ckpt_task = cprc->f2fs_issue_ckpt;
+ cprc->f2fs_issue_ckpt = NULL;
+ kthread_stop(ckpt_task);
- flush_remained_ckpt_reqs(sbi, NULL);
- }
+ f2fs_flush_ckpt_thread(sbi);
+}
+
+void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi)
+{
+ struct ckpt_req_control *cprc = &sbi->cprc_info;
+
+ flush_remained_ckpt_reqs(sbi, NULL);
+
+ /* Let's wait for the previous dispatched checkpoint. */
+ while (atomic_read(&cprc->queued_ckpt))
+ io_schedule_timeout(DEFAULT_IO_TIMEOUT);
}
void f2fs_init_ckpt_req_control(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/compress.c b/fs/f2fs/compress.c
index e98a0ef71941..1e76c80a3eeb 100644
--- a/fs/f2fs/compress.c
+++ b/fs/f2fs/compress.c
@@ -728,14 +728,19 @@ out:
return ret;
}
-void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
+static int f2fs_prepare_decomp_mem(struct decompress_io_ctx *dic,
+ bool pre_alloc);
+static void f2fs_release_decomp_mem(struct decompress_io_ctx *dic,
+ bool bypass_destroy_callback, bool pre_alloc);
+
+void f2fs_decompress_cluster(struct decompress_io_ctx *dic, bool in_task)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(dic->inode);
struct f2fs_inode_info *fi = F2FS_I(dic->inode);
const struct f2fs_compress_ops *cops =
f2fs_cops[fi->i_compress_algorithm];
+ bool bypass_callback = false;
int ret;
- int i;
trace_f2fs_decompress_pages_start(dic->inode, dic->cluster_idx,
dic->cluster_size, fi->i_compress_algorithm);
@@ -745,41 +750,10 @@ void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
goto out_end_io;
}
- dic->tpages = page_array_alloc(dic->inode, dic->cluster_size);
- if (!dic->tpages) {
- ret = -ENOMEM;
- goto out_end_io;
- }
-
- for (i = 0; i < dic->cluster_size; i++) {
- if (dic->rpages[i]) {
- dic->tpages[i] = dic->rpages[i];
- continue;
- }
-
- dic->tpages[i] = f2fs_compress_alloc_page();
- if (!dic->tpages[i]) {
- ret = -ENOMEM;
- goto out_end_io;
- }
- }
-
- if (cops->init_decompress_ctx) {
- ret = cops->init_decompress_ctx(dic);
- if (ret)
- goto out_end_io;
- }
-
- dic->rbuf = f2fs_vmap(dic->tpages, dic->cluster_size);
- if (!dic->rbuf) {
- ret = -ENOMEM;
- goto out_destroy_decompress_ctx;
- }
-
- dic->cbuf = f2fs_vmap(dic->cpages, dic->nr_cpages);
- if (!dic->cbuf) {
- ret = -ENOMEM;
- goto out_vunmap_rbuf;
+ ret = f2fs_prepare_decomp_mem(dic, false);
+ if (ret) {
+ bypass_callback = true;
+ goto out_release;
}
dic->clen = le32_to_cpu(dic->cbuf->clen);
@@ -787,7 +761,7 @@ void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
if (dic->clen > PAGE_SIZE * dic->nr_cpages - COMPRESS_HEADER_SIZE) {
ret = -EFSCORRUPTED;
- goto out_vunmap_cbuf;
+ goto out_release;
}
ret = cops->decompress_pages(dic);
@@ -808,17 +782,13 @@ void f2fs_decompress_cluster(struct decompress_io_ctx *dic)
}
}
-out_vunmap_cbuf:
- vm_unmap_ram(dic->cbuf, dic->nr_cpages);
-out_vunmap_rbuf:
- vm_unmap_ram(dic->rbuf, dic->cluster_size);
-out_destroy_decompress_ctx:
- if (cops->destroy_decompress_ctx)
- cops->destroy_decompress_ctx(dic);
+out_release:
+ f2fs_release_decomp_mem(dic, bypass_callback, false);
+
out_end_io:
trace_f2fs_decompress_pages_end(dic->inode, dic->cluster_idx,
dic->clen, ret);
- f2fs_decompress_end_io(dic, ret);
+ f2fs_decompress_end_io(dic, ret, in_task);
}
/*
@@ -828,7 +798,7 @@ out_end_io:
* (or in the case of a failure, cleans up without actually decompressing).
*/
void f2fs_end_read_compressed_page(struct page *page, bool failed,
- block_t blkaddr)
+ block_t blkaddr, bool in_task)
{
struct decompress_io_ctx *dic =
(struct decompress_io_ctx *)page_private(page);
@@ -838,12 +808,12 @@ void f2fs_end_read_compressed_page(struct page *page, bool failed,
if (failed)
WRITE_ONCE(dic->failed, true);
- else if (blkaddr)
+ else if (blkaddr && in_task)
f2fs_cache_compressed_page(sbi, page,
dic->inode->i_ino, blkaddr);
if (atomic_dec_and_test(&dic->remaining_pages))
- f2fs_decompress_cluster(dic);
+ f2fs_decompress_cluster(dic, in_task);
}
static bool is_page_in_cluster(struct compress_ctx *cc, pgoff_t index)
@@ -1551,16 +1521,85 @@ destroy_out:
return err;
}
-static void f2fs_free_dic(struct decompress_io_ctx *dic);
+static inline bool allow_memalloc_for_decomp(struct f2fs_sb_info *sbi,
+ bool pre_alloc)
+{
+ return pre_alloc ^ f2fs_low_mem_mode(sbi);
+}
+
+static int f2fs_prepare_decomp_mem(struct decompress_io_ctx *dic,
+ bool pre_alloc)
+{
+ const struct f2fs_compress_ops *cops =
+ f2fs_cops[F2FS_I(dic->inode)->i_compress_algorithm];
+ int i;
+
+ if (!allow_memalloc_for_decomp(F2FS_I_SB(dic->inode), pre_alloc))
+ return 0;
+
+ dic->tpages = page_array_alloc(dic->inode, dic->cluster_size);
+ if (!dic->tpages)
+ return -ENOMEM;
+
+ for (i = 0; i < dic->cluster_size; i++) {
+ if (dic->rpages[i]) {
+ dic->tpages[i] = dic->rpages[i];
+ continue;
+ }
+
+ dic->tpages[i] = f2fs_compress_alloc_page();
+ if (!dic->tpages[i])
+ return -ENOMEM;
+ }
+
+ dic->rbuf = f2fs_vmap(dic->tpages, dic->cluster_size);
+ if (!dic->rbuf)
+ return -ENOMEM;
+
+ dic->cbuf = f2fs_vmap(dic->cpages, dic->nr_cpages);
+ if (!dic->cbuf)
+ return -ENOMEM;
+
+ if (cops->init_decompress_ctx) {
+ int ret = cops->init_decompress_ctx(dic);
+
+ if (ret)
+ return ret;
+ }
+
+ return 0;
+}
+
+static void f2fs_release_decomp_mem(struct decompress_io_ctx *dic,
+ bool bypass_destroy_callback, bool pre_alloc)
+{
+ const struct f2fs_compress_ops *cops =
+ f2fs_cops[F2FS_I(dic->inode)->i_compress_algorithm];
+
+ if (!allow_memalloc_for_decomp(F2FS_I_SB(dic->inode), pre_alloc))
+ return;
+
+ if (!bypass_destroy_callback && cops->destroy_decompress_ctx)
+ cops->destroy_decompress_ctx(dic);
+
+ if (dic->cbuf)
+ vm_unmap_ram(dic->cbuf, dic->nr_cpages);
+
+ if (dic->rbuf)
+ vm_unmap_ram(dic->rbuf, dic->cluster_size);
+}
+
+static void f2fs_free_dic(struct decompress_io_ctx *dic,
+ bool bypass_destroy_callback);
struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc)
{
struct decompress_io_ctx *dic;
pgoff_t start_idx = start_idx_of_cluster(cc);
- int i;
+ struct f2fs_sb_info *sbi = F2FS_I_SB(cc->inode);
+ int i, ret;
- dic = f2fs_kmem_cache_alloc(dic_entry_slab, GFP_F2FS_ZERO,
- false, F2FS_I_SB(cc->inode));
+ dic = f2fs_kmem_cache_alloc(dic_entry_slab, GFP_F2FS_ZERO, false, sbi);
if (!dic)
return ERR_PTR(-ENOMEM);
@@ -1586,32 +1625,43 @@ struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc)
dic->nr_rpages = cc->cluster_size;
dic->cpages = page_array_alloc(dic->inode, dic->nr_cpages);
- if (!dic->cpages)
+ if (!dic->cpages) {
+ ret = -ENOMEM;
goto out_free;
+ }
for (i = 0; i < dic->nr_cpages; i++) {
struct page *page;
page = f2fs_compress_alloc_page();
- if (!page)
+ if (!page) {
+ ret = -ENOMEM;
goto out_free;
+ }
f2fs_set_compressed_page(page, cc->inode,
start_idx + i + 1, dic);
dic->cpages[i] = page;
}
+ ret = f2fs_prepare_decomp_mem(dic, true);
+ if (ret)
+ goto out_free;
+
return dic;
out_free:
- f2fs_free_dic(dic);
- return ERR_PTR(-ENOMEM);
+ f2fs_free_dic(dic, true);
+ return ERR_PTR(ret);
}
-static void f2fs_free_dic(struct decompress_io_ctx *dic)
+static void f2fs_free_dic(struct decompress_io_ctx *dic,
+ bool bypass_destroy_callback)
{
int i;
+ f2fs_release_decomp_mem(dic, bypass_destroy_callback, true);
+
if (dic->tpages) {
for (i = 0; i < dic->cluster_size; i++) {
if (dic->rpages[i])
@@ -1636,17 +1686,33 @@ static void f2fs_free_dic(struct decompress_io_ctx *dic)
kmem_cache_free(dic_entry_slab, dic);
}
-static void f2fs_put_dic(struct decompress_io_ctx *dic)
+static void f2fs_late_free_dic(struct work_struct *work)
{
- if (refcount_dec_and_test(&dic->refcnt))
- f2fs_free_dic(dic);
+ struct decompress_io_ctx *dic =
+ container_of(work, struct decompress_io_ctx, free_work);
+
+ f2fs_free_dic(dic, false);
+}
+
+static void f2fs_put_dic(struct decompress_io_ctx *dic, bool in_task)
+{
+ if (refcount_dec_and_test(&dic->refcnt)) {
+ if (in_task) {
+ f2fs_free_dic(dic, false);
+ } else {
+ INIT_WORK(&dic->free_work, f2fs_late_free_dic);
+ queue_work(F2FS_I_SB(dic->inode)->post_read_wq,
+ &dic->free_work);
+ }
+ }
}
/*
* Update and unlock the cluster's pagecache pages, and release the reference to
* the decompress_io_ctx that was being held for I/O completion.
*/
-static void __f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
+static void __f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed,
+ bool in_task)
{
int i;
@@ -1667,7 +1733,7 @@ static void __f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
unlock_page(rpage);
}
- f2fs_put_dic(dic);
+ f2fs_put_dic(dic, in_task);
}
static void f2fs_verify_cluster(struct work_struct *work)
@@ -1684,14 +1750,15 @@ static void f2fs_verify_cluster(struct work_struct *work)
SetPageError(rpage);
}
- __f2fs_decompress_end_io(dic, false);
+ __f2fs_decompress_end_io(dic, false, true);
}
/*
* This is called when a compressed cluster has been decompressed
* (or failed to be read and/or decompressed).
*/
-void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
+void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed,
+ bool in_task)
{
if (!failed && dic->need_verity) {
/*
@@ -1703,7 +1770,7 @@ void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
INIT_WORK(&dic->verity_work, f2fs_verify_cluster);
fsverity_enqueue_verify_work(&dic->verity_work);
} else {
- __f2fs_decompress_end_io(dic, failed);
+ __f2fs_decompress_end_io(dic, failed, in_task);
}
}
@@ -1712,12 +1779,12 @@ void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed)
*
* This is called when the page is no longer needed and can be freed.
*/
-void f2fs_put_page_dic(struct page *page)
+void f2fs_put_page_dic(struct page *page, bool in_task)
{
struct decompress_io_ctx *dic =
(struct decompress_io_ctx *)page_private(page);
- f2fs_put_dic(dic);
+ f2fs_put_dic(dic, in_task);
}
/*
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 46a4322401b1..0b2196e997b8 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -122,7 +122,7 @@ struct bio_post_read_ctx {
block_t fs_blkaddr;
};
-static void f2fs_finish_read_bio(struct bio *bio)
+static void f2fs_finish_read_bio(struct bio *bio, bool in_task)
{
struct bio_vec *bv;
struct bvec_iter_all iter_all;
@@ -136,8 +136,9 @@ static void f2fs_finish_read_bio(struct bio *bio)
if (f2fs_is_compressed_page(page)) {
if (bio->bi_status)
- f2fs_end_read_compressed_page(page, true, 0);
- f2fs_put_page_dic(page);
+ f2fs_end_read_compressed_page(page, true, 0,
+ in_task);
+ f2fs_put_page_dic(page, in_task);
continue;
}
@@ -194,7 +195,7 @@ static void f2fs_verify_bio(struct work_struct *work)
fsverity_verify_bio(bio);
}
- f2fs_finish_read_bio(bio);
+ f2fs_finish_read_bio(bio, true);
}
/*
@@ -206,7 +207,7 @@ static void f2fs_verify_bio(struct work_struct *work)
* can involve reading verity metadata pages from the file, and these verity
* metadata pages may be encrypted and/or compressed.
*/
-static void f2fs_verify_and_finish_bio(struct bio *bio)
+static void f2fs_verify_and_finish_bio(struct bio *bio, bool in_task)
{
struct bio_post_read_ctx *ctx = bio->bi_private;
@@ -214,7 +215,7 @@ static void f2fs_verify_and_finish_bio(struct bio *bio)
INIT_WORK(&ctx->work, f2fs_verify_bio);
fsverity_enqueue_verify_work(&ctx->work);
} else {
- f2fs_finish_read_bio(bio);
+ f2fs_finish_read_bio(bio, in_task);
}
}
@@ -227,7 +228,8 @@ static void f2fs_verify_and_finish_bio(struct bio *bio)
* that the bio includes at least one compressed page. The actual decompression
* is done on a per-cluster basis, not a per-bio basis.
*/
-static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx)
+static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx,
+ bool in_task)
{
struct bio_vec *bv;
struct bvec_iter_all iter_all;
@@ -240,7 +242,7 @@ static void f2fs_handle_step_decompress(struct bio_post_read_ctx *ctx)
/* PG_error was set if decryption failed. */
if (f2fs_is_compressed_page(page))
f2fs_end_read_compressed_page(page, PageError(page),
- blkaddr);
+ blkaddr, in_task);
else
all_compressed = false;
@@ -265,15 +267,16 @@ static void f2fs_post_read_work(struct work_struct *work)
fscrypt_decrypt_bio(ctx->bio);
if (ctx->enabled_steps & STEP_DECOMPRESS)
- f2fs_handle_step_decompress(ctx);
+ f2fs_handle_step_decompress(ctx, true);
- f2fs_verify_and_finish_bio(ctx->bio);
+ f2fs_verify_and_finish_bio(ctx->bio, true);
}
static void f2fs_read_end_io(struct bio *bio)
{
struct f2fs_sb_info *sbi = F2FS_P_SB(bio_first_page_all(bio));
struct bio_post_read_ctx *ctx;
+ bool intask = in_task();
iostat_update_and_unbind_ctx(bio, 0);
ctx = bio->bi_private;
@@ -284,16 +287,29 @@ static void f2fs_read_end_io(struct bio *bio)
}
if (bio->bi_status) {
- f2fs_finish_read_bio(bio);
+ f2fs_finish_read_bio(bio, intask);
return;
}
- if (ctx && (ctx->enabled_steps & (STEP_DECRYPT | STEP_DECOMPRESS))) {
- INIT_WORK(&ctx->work, f2fs_post_read_work);
- queue_work(ctx->sbi->post_read_wq, &ctx->work);
- } else {
- f2fs_verify_and_finish_bio(bio);
+ if (ctx) {
+ unsigned int enabled_steps = ctx->enabled_steps &
+ (STEP_DECRYPT | STEP_DECOMPRESS);
+
+ /*
+ * If we have only decompression step between decompression and
+ * decrypt, we don't need post processing for this.
+ */
+ if (enabled_steps == STEP_DECOMPRESS &&
+ !f2fs_low_mem_mode(sbi)) {
+ f2fs_handle_step_decompress(ctx, intask);
+ } else if (enabled_steps) {
+ INIT_WORK(&ctx->work, f2fs_post_read_work);
+ queue_work(ctx->sbi->post_read_wq, &ctx->work);
+ return;
+ }
}
+
+ f2fs_verify_and_finish_bio(bio, intask);
}
static void f2fs_write_end_io(struct bio *bio)
@@ -320,7 +336,8 @@ static void f2fs_write_end_io(struct bio *bio)
mempool_free(page, sbi->write_io_dummy);
if (unlikely(bio->bi_status))
- f2fs_stop_checkpoint(sbi, true);
+ f2fs_stop_checkpoint(sbi, true,
+ STOP_CP_REASON_WRITE_FAIL);
continue;
}
@@ -336,7 +353,8 @@ static void f2fs_write_end_io(struct bio *bio)
if (unlikely(bio->bi_status)) {
mapping_set_error(page->mapping, -EIO);
if (type == F2FS_WB_CP_DATA)
- f2fs_stop_checkpoint(sbi, true);
+ f2fs_stop_checkpoint(sbi, true,
+ STOP_CP_REASON_WRITE_FAIL);
}
f2fs_bug_on(sbi, page->mapping == NODE_MAPPING(sbi) &&
@@ -2228,7 +2246,7 @@ skip_reading_dnode:
if (f2fs_load_compressed_page(sbi, page, blkaddr)) {
if (atomic_dec_and_test(&dic->remaining_pages))
- f2fs_decompress_cluster(dic);
+ f2fs_decompress_cluster(dic, true);
continue;
}
@@ -2246,7 +2264,7 @@ submit_and_realloc:
page->index, for_write);
if (IS_ERR(bio)) {
ret = PTR_ERR(bio);
- f2fs_decompress_end_io(dic, ret);
+ f2fs_decompress_end_io(dic, ret, true);
f2fs_put_dnode(&dn);
*bio_ret = NULL;
return ret;
@@ -2533,7 +2551,7 @@ bool f2fs_should_update_inplace(struct inode *inode, struct f2fs_io_info *fio)
return true;
/* if this is cold file, we should overwrite to avoid fragmentation */
- if (file_is_cold(inode))
+ if (file_is_cold(inode) && !is_inode_flag_set(inode, FI_OPU_WRITE))
return true;
return check_inplace_update_policy(inode, fio);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 63cb39d2e4b0..f40fe37f2455 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -159,6 +159,7 @@ struct f2fs_mount_info {
int fsync_mode; /* fsync policy */
int fs_mode; /* fs mode: LFS or ADAPTIVE */
int bggc_mode; /* bggc mode: off, on or sync */
+ int memory_mode; /* memory mode */
int discard_unit; /*
* discard command's offset/size should
* be aligned to this unit: block,
@@ -1369,6 +1370,13 @@ enum {
DISCARD_UNIT_SECTION, /* basic discard unit is section */
};
+enum {
+ MEMORY_MODE_NORMAL, /* memory mode for normal devices */
+ MEMORY_MODE_LOW, /* memory mode for low memry devices */
+};
+
+
+
static inline int f2fs_test_bit(unsigned int nr, char *addr);
static inline void f2fs_set_bit(unsigned int nr, char *addr);
static inline void f2fs_clear_bit(unsigned int nr, char *addr);
@@ -1589,6 +1597,7 @@ struct decompress_io_ctx {
void *private; /* payload buffer for specified decompression algorithm */
void *private2; /* extra payload buffer */
struct work_struct verity_work; /* work to verify the decompressed pages */
+ struct work_struct free_work; /* work for late free this structure itself */
};
#define NULL_CLUSTER ((unsigned int)(~0))
@@ -1721,7 +1730,6 @@ struct f2fs_sb_info {
unsigned int gc_mode; /* current GC state */
unsigned int next_victim_seg[2]; /* next segment in victim section */
spinlock_t gc_urgent_high_lock;
- bool gc_urgent_high_limited; /* indicates having limited trial count */
unsigned int gc_urgent_high_remaining; /* remaining trial count for GC_URGENT_HIGH */
/* for skip statistic */
@@ -3512,6 +3520,7 @@ int f2fs_enable_quota_files(struct f2fs_sb_info *sbi, bool rdonly);
int f2fs_quota_sync(struct super_block *sb, int type);
loff_t max_file_blocks(struct inode *inode);
void f2fs_quota_off_umount(struct super_block *sb);
+void f2fs_handle_stop(struct f2fs_sb_info *sbi, unsigned char reason);
int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
int f2fs_sync_fs(struct super_block *sb, int sync);
int f2fs_sanity_check_ckpt(struct f2fs_sb_info *sbi);
@@ -3676,7 +3685,9 @@ static inline bool f2fs_need_rand_seg(struct f2fs_sb_info *sbi)
/*
* checkpoint.c
*/
-void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io);
+void f2fs_stop_checkpoint(struct f2fs_sb_info *sbi, bool end_io,
+ unsigned char reason);
+void f2fs_flush_ckpt_thread(struct f2fs_sb_info *sbi);
struct page *f2fs_grab_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
struct page *f2fs_get_meta_page(struct f2fs_sb_info *sbi, pgoff_t index);
struct page *f2fs_get_meta_page_retry(struct f2fs_sb_info *sbi, pgoff_t index);
@@ -4181,9 +4192,9 @@ void f2fs_compress_write_end_io(struct bio *bio, struct page *page);
bool f2fs_is_compress_backend_ready(struct inode *inode);
int f2fs_init_compress_mempool(void);
void f2fs_destroy_compress_mempool(void);
-void f2fs_decompress_cluster(struct decompress_io_ctx *dic);
+void f2fs_decompress_cluster(struct decompress_io_ctx *dic, bool in_task);
void f2fs_end_read_compressed_page(struct page *page, bool failed,
- block_t blkaddr);
+ block_t blkaddr, bool in_task);
bool f2fs_cluster_is_empty(struct compress_ctx *cc);
bool f2fs_cluster_can_merge_page(struct compress_ctx *cc, pgoff_t index);
bool f2fs_all_cluster_page_loaded(struct compress_ctx *cc, struct pagevec *pvec,
@@ -4202,8 +4213,9 @@ int f2fs_read_multi_pages(struct compress_ctx *cc, struct bio **bio_ret,
unsigned nr_pages, sector_t *last_block_in_bio,
bool is_readahead, bool for_write);
struct decompress_io_ctx *f2fs_alloc_dic(struct compress_ctx *cc);
-void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed);
-void f2fs_put_page_dic(struct page *page);
+void f2fs_decompress_end_io(struct decompress_io_ctx *dic, bool failed,
+ bool in_task);
+void f2fs_put_page_dic(struct page *page, bool in_task);
unsigned int f2fs_cluster_blocks_are_contiguous(struct dnode_of_data *dn);
int f2fs_init_compress_ctx(struct compress_ctx *cc);
void f2fs_destroy_compress_ctx(struct compress_ctx *cc, bool reuse);
@@ -4249,13 +4261,14 @@ static inline struct page *f2fs_compress_control_page(struct page *page)
}
static inline int f2fs_init_compress_mempool(void) { return 0; }
static inline void f2fs_destroy_compress_mempool(void) { }
-static inline void f2fs_decompress_cluster(struct decompress_io_ctx *dic) { }
+static inline void f2fs_decompress_cluster(struct decompress_io_ctx *dic,
+ bool in_task) { }
static inline void f2fs_end_read_compressed_page(struct page *page,
- bool failed, block_t blkaddr)
+ bool failed, block_t blkaddr, bool in_task)
{
WARN_ON_ONCE(1);
}
-static inline void f2fs_put_page_dic(struct page *page)
+static inline void f2fs_put_page_dic(struct page *page, bool in_task)
{
WARN_ON_ONCE(1);
}
@@ -4427,6 +4440,11 @@ static inline bool f2fs_lfs_mode(struct f2fs_sb_info *sbi)
return F2FS_OPTION(sbi).fs_mode == FS_MODE_LFS;
}
+static inline bool f2fs_low_mem_mode(struct f2fs_sb_info *sbi)
+{
+ return F2FS_OPTION(sbi).memory_mode == MEMORY_MODE_LOW;
+}
+
static inline bool f2fs_may_compress(struct inode *inode)
{
if (IS_SWAPFILE(inode) || f2fs_is_pinned_file(inode) ||
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index a1d6b941fd60..39795c03d3ea 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -2294,7 +2294,8 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
if (ret) {
if (ret == -EROFS) {
ret = 0;
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false,
+ STOP_CP_REASON_SHUTDOWN);
set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
trace_f2fs_shutdown(sbi, in, ret);
}
@@ -2307,7 +2308,7 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
ret = freeze_bdev(sb->s_bdev);
if (ret)
goto out;
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
thaw_bdev(sb->s_bdev);
break;
@@ -2316,16 +2317,16 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
ret = f2fs_sync_fs(sb, 1);
if (ret)
goto out;
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
break;
case F2FS_GOING_DOWN_NOSYNC:
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
break;
case F2FS_GOING_DOWN_METAFLUSH:
f2fs_sync_meta_pages(sbi, META, LONG_MAX, FS_META_IO);
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_SHUTDOWN);
set_sbi_flag(sbi, SBI_IS_SHUTDOWN);
break;
case F2FS_GOING_DOWN_NEED_FSCK:
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index 79dc38eacb19..f48b60553630 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -70,7 +70,8 @@ static int gc_thread_func(void *data)
if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false,
+ STOP_CP_REASON_FAULT_INJECT);
}
if (!sb_start_write_trylock(sbi->sb)) {
@@ -93,14 +94,10 @@ static int gc_thread_func(void *data)
*/
if (sbi->gc_mode == GC_URGENT_HIGH) {
spin_lock(&sbi->gc_urgent_high_lock);
- if (sbi->gc_urgent_high_limited) {
- if (!sbi->gc_urgent_high_remaining) {
- sbi->gc_urgent_high_limited = false;
- spin_unlock(&sbi->gc_urgent_high_lock);
- sbi->gc_mode = GC_NORMAL;
- continue;
- }
+ if (sbi->gc_urgent_high_remaining) {
sbi->gc_urgent_high_remaining--;
+ if (!sbi->gc_urgent_high_remaining)
+ sbi->gc_mode = GC_NORMAL;
}
spin_unlock(&sbi->gc_urgent_high_lock);
}
@@ -1655,7 +1652,8 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
f2fs_err(sbi, "Inconsistent segment (%u) type [%d, %d] in SSA and SIT",
segno, type, GET_SUM_TYPE((&sum->footer)));
set_sbi_flag(sbi, SBI_NEED_FSCK);
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false,
+ STOP_CP_REASON_CORRUPTED_SUMMARY);
goto skip;
}
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 5fffc2268964..d9757673f45e 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -700,7 +700,8 @@ retry:
cond_resched();
goto retry;
} else if (err != -ENOENT) {
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false,
+ STOP_CP_REASON_UPDATE_INODE);
}
return;
}
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index de1f4ac8191a..af6b14191076 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -498,7 +498,7 @@ void f2fs_balance_fs(struct f2fs_sb_info *sbi, bool need)
{
if (time_to_inject(sbi, FAULT_CHECKPOINT)) {
f2fs_show_injection_info(sbi, FAULT_CHECKPOINT);
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false, STOP_CP_REASON_FAULT_INJECT);
}
/* balance_fs_bg is able to be pending */
@@ -809,7 +809,8 @@ int f2fs_flush_device_cache(struct f2fs_sb_info *sbi)
} while (ret && --count);
if (ret) {
- f2fs_stop_checkpoint(sbi, false);
+ f2fs_stop_checkpoint(sbi, false,
+ STOP_CP_REASON_FLUSH_FAIL);
break;
}
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index ae566f92d36f..8570a2249196 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -160,6 +160,7 @@ enum {
Opt_gc_merge,
Opt_nogc_merge,
Opt_discard_unit,
+ Opt_memory_mode,
Opt_err,
};
@@ -237,6 +238,7 @@ static match_table_t f2fs_tokens = {
{Opt_gc_merge, "gc_merge"},
{Opt_nogc_merge, "nogc_merge"},
{Opt_discard_unit, "discard_unit=%s"},
+ {Opt_memory_mode, "memory=%s"},
{Opt_err, NULL},
};
@@ -307,10 +309,10 @@ static void f2fs_destroy_casefold_cache(void) { }
static inline void limit_reserve_root(struct f2fs_sb_info *sbi)
{
- block_t limit = min((sbi->user_block_count << 1) / 1000,
+ block_t limit = min((sbi->user_block_count >> 3),
sbi->user_block_count - sbi->reserved_blocks);
- /* limit is 0.2% */
+ /* limit is 12.5% */
if (test_opt(sbi, RESERVE_ROOT) &&
F2FS_OPTION(sbi).root_reserved_blocks > limit &&
F2FS_OPTION(sbi).root_reserved_blocks > MIN_ROOT_RESERVED_BLOCKS) {
@@ -1247,6 +1249,22 @@ static int parse_options(struct super_block *sb, char *options, bool is_remount)
}
kfree(name);
break;
+ case Opt_memory_mode:
+ name = match_strdup(&args[0]);
+ if (!name)
+ return -ENOMEM;
+ if (!strcmp(name, "normal")) {
+ F2FS_OPTION(sbi).memory_mode =
+ MEMORY_MODE_NORMAL;
+ } else if (!strcmp(name, "low")) {
+ F2FS_OPTION(sbi).memory_mode =
+ MEMORY_MODE_LOW;
+ } else {
+ kfree(name);
+ return -EINVAL;
+ }
+ kfree(name);
+ break;
default:
f2fs_err(sbi, "Unrecognized mount option \"%s\" or missing value",
p);
@@ -1674,9 +1692,8 @@ static int f2fs_freeze(struct super_block *sb)
if (is_sbi_flag_set(F2FS_SB(sb), SBI_IS_DIRTY))
return -EINVAL;
- /* ensure no checkpoint required */
- if (!llist_empty(&F2FS_SB(sb)->cprc_info.issue_list))
- return -EINVAL;
+ /* Let's flush checkpoints and stop the thread. */
+ f2fs_flush_ckpt_thread(F2FS_SB(sb));
/* to avoid deadlock on f2fs_evict_inode->SB_FREEZE_FS */
set_sbi_flag(F2FS_SB(sb), SBI_IS_FREEZING);
@@ -2032,6 +2049,11 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
else if (F2FS_OPTION(sbi).discard_unit == DISCARD_UNIT_SECTION)
seq_printf(seq, ",discard_unit=%s", "section");
+ if (F2FS_OPTION(sbi).memory_mode == MEMORY_MODE_NORMAL)
+ seq_printf(seq, ",memory=%s", "normal");
+ else if (F2FS_OPTION(sbi).memory_mode == MEMORY_MODE_LOW)
+ seq_printf(seq, ",memory=%s", "low");
+
return 0;
}
@@ -2054,6 +2076,7 @@ static void default_options(struct f2fs_sb_info *sbi)
F2FS_OPTION(sbi).compress_ext_cnt = 0;
F2FS_OPTION(sbi).compress_mode = COMPR_MODE_FS;
F2FS_OPTION(sbi).bggc_mode = BGGC_MODE_ON;
+ F2FS_OPTION(sbi).memory_mode = MEMORY_MODE_NORMAL;
sbi->sb->s_flags &= ~SB_INLINECRYPT;
@@ -2174,6 +2197,9 @@ static void f2fs_enable_checkpoint(struct f2fs_sb_info *sbi)
f2fs_up_write(&sbi->gc_lock);
f2fs_sync_fs(sbi->sb, 1);
+
+ /* Let's ensure there's no pending checkpoint anymore */
+ f2fs_flush_ckpt_thread(sbi);
}
static int f2fs_remount(struct super_block *sb, int *flags, char *data)
@@ -2340,6 +2366,9 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
f2fs_stop_ckpt_thread(sbi);
need_restart_ckpt = true;
} else {
+ /* Flush if the prevous checkpoint, if exists. */
+ f2fs_flush_ckpt_thread(sbi);
+
err = f2fs_start_ckpt_thread(sbi);
if (err) {
f2fs_err(sbi,
@@ -3836,6 +3865,26 @@ int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover)
return err;
}
+void f2fs_handle_stop(struct f2fs_sb_info *sbi, unsigned char reason)
+{
+ struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
+ int err;
+
+ f2fs_bug_on(sbi, reason >= MAX_STOP_REASON);
+
+ f2fs_down_write(&sbi->sb_lock);
+
+ if (raw_super->s_stop_reason[reason] < ((1 << BITS_PER_BYTE) - 1))
+ raw_super->s_stop_reason[reason]++;
+
+ err = f2fs_commit_super(sbi, false);
+ if (err)
+ f2fs_err(sbi, "f2fs_commit_super fails to record reason:%u err:%d",
+ reason, err);
+
+ f2fs_up_write(&sbi->sb_lock);
+}
+
static int f2fs_scan_devices(struct f2fs_sb_info *sbi)
{
struct f2fs_super_block *raw_super = F2FS_RAW_SUPER(sbi);
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index f240f5593394..3ccbbee77cff 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -513,7 +513,6 @@ out:
if (!strcmp(a->attr.name, "gc_urgent_high_remaining")) {
spin_lock(&sbi->gc_urgent_high_lock);
- sbi->gc_urgent_high_limited = t != 0;
sbi->gc_urgent_high_remaining = t;
spin_unlock(&sbi->gc_urgent_high_lock);
diff --git a/fs/fuse/backing.c b/fs/fuse/backing.c
index b536fd9e99b7..9f78384b021f 100644
--- a/fs/fuse/backing.c
+++ b/fs/fuse/backing.c
@@ -23,6 +23,9 @@ struct fuse_bpf_aio_req {
static struct kmem_cache *fuse_bpf_aio_request_cachep;
+static void fuse_stat_to_attr(struct fuse_conn *fc, struct inode *inode,
+ struct kstat *stat, struct fuse_attr *attr);
+
static void fuse_file_accessed(struct file *dst_file, struct file *src_file)
{
struct inode *dst_inode;
@@ -181,8 +184,10 @@ void *fuse_open_finalize(struct fuse_bpf_args *fa,
struct fuse_file *ff = file->private_data;
struct fuse_open_out *foo = fa->out_args[0].value;
- if (ff)
+ if (ff) {
ff->fh = foo->fh;
+ ff->nodeid = get_fuse_inode(inode)->nodeid;
+ }
return 0;
}
@@ -1153,6 +1158,9 @@ int fuse_lookup_backing(struct fuse_bpf_args *fa, struct inode *dir,
struct dentry *dir_backing_entry = dir_fuse_entry->backing_path.dentry;
struct inode *dir_backing_inode = dir_backing_entry->d_inode;
struct dentry *backing_entry;
+ struct fuse_entry_out *feo = (void *)fa->out_args[0].value;
+ struct kstat stat;
+ int err;
/* TODO this will not handle lookups over mount points */
inode_lock_nested(dir_backing_inode, I_MUTEX_PARENT);
@@ -1165,10 +1173,23 @@ int fuse_lookup_backing(struct fuse_bpf_args *fa, struct inode *dir,
fuse_entry->backing_path = (struct path) {
.dentry = backing_entry,
- .mnt = dir_fuse_entry->backing_path.mnt,
+ .mnt = mntget(dir_fuse_entry->backing_path.mnt),
};
- mntget(fuse_entry->backing_path.mnt);
+ if (d_is_negative(backing_entry)) {
+ fa->error_in = -ENOENT;
+ return 0;
+ }
+
+ err = vfs_getattr(&fuse_entry->backing_path, &stat,
+ STATX_BASIC_STATS, 0);
+ if (err) {
+ path_put_init(&fuse_entry->backing_path);
+ return err;
+ }
+
+ fuse_stat_to_attr(get_fuse_conn(dir),
+ backing_entry->d_inode, &stat, &feo->attr);
return 0;
}
diff --git a/fs/incfs/vfs.c b/fs/incfs/vfs.c
index e97b843a4da5..7d349ee73bc3 100644
--- a/fs/incfs/vfs.c
+++ b/fs/incfs/vfs.c
@@ -1592,6 +1592,10 @@ static int incfs_setattr(struct dentry *dentry, struct iattr *ia)
if (ia->ia_valid & ATTR_SIZE)
return -EINVAL;
+ if ((ia->ia_valid & (ATTR_KILL_SUID|ATTR_KILL_SGID)) &&
+ (ia->ia_valid & ATTR_MODE))
+ return -EINVAL;
+
if (!di)
return -EINVAL;
backing_dentry = di->backing_path.dentry;
diff --git a/fs/pipe.c b/fs/pipe.c
index 9f2ca1b1c17a..434b0a274468 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -1244,30 +1244,33 @@ unsigned int round_pipe_size(unsigned long size)
/*
* Resize the pipe ring to a number of slots.
+ *
+ * Note the pipe can be reduced in capacity, but only if the current
+ * occupancy doesn't exceed nr_slots; if it does, EBUSY will be
+ * returned instead.
*/
int pipe_resize_ring(struct pipe_inode_info *pipe, unsigned int nr_slots)
{
struct pipe_buffer *bufs;
unsigned int head, tail, mask, n;
- /*
- * We can shrink the pipe, if arg is greater than the ring occupancy.
- * Since we don't expect a lot of shrink+grow operations, just free and
- * allocate again like we would do for growing. If the pipe currently
- * contains more buffers than arg, then return busy.
- */
- mask = pipe->ring_size - 1;
- head = pipe->head;
- tail = pipe->tail;
- n = pipe_occupancy(pipe->head, pipe->tail);
- if (nr_slots < n)
- return -EBUSY;
-
bufs = kcalloc(nr_slots, sizeof(*bufs),
GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
if (unlikely(!bufs))
return -ENOMEM;
+ spin_lock_irq(&pipe->rd_wait.lock);
+ mask = pipe->ring_size - 1;
+ head = pipe->head;
+ tail = pipe->tail;
+
+ n = pipe_occupancy(head, tail);
+ if (nr_slots < n) {
+ spin_unlock_irq(&pipe->rd_wait.lock);
+ kfree(bufs);
+ return -EBUSY;
+ }
+
/*
* The pipe array wraps around, so just start the new one at zero
* and adjust the indices.
@@ -1299,6 +1302,8 @@ int pipe_resize_ring(struct pipe_inode_info *pipe, unsigned int nr_slots)
pipe->tail = tail;
pipe->head = head;
+ spin_unlock_irq(&pipe->rd_wait.lock);
+
/* This might have made more room for writers */
wake_up_interruptible(&pipe->wr_wait);
return 0;
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index d445150c5350..5dd1e52b8997 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -73,6 +73,20 @@ struct f2fs_device {
__le32 total_segments;
} __packed;
+/* reason of stop_checkpoint */
+enum stop_cp_reason {
+ STOP_CP_REASON_SHUTDOWN,
+ STOP_CP_REASON_FAULT_INJECT,
+ STOP_CP_REASON_META_PAGE,
+ STOP_CP_REASON_WRITE_FAIL,
+ STOP_CP_REASON_CORRUPTED_SUMMARY,
+ STOP_CP_REASON_UPDATE_INODE,
+ STOP_CP_REASON_FLUSH_FAIL,
+ STOP_CP_REASON_MAX,
+};
+
+#define MAX_STOP_REASON 32
+
struct f2fs_super_block {
__le32 magic; /* Magic Number */
__le16 major_ver; /* Major Version */
@@ -116,7 +130,8 @@ struct f2fs_super_block {
__u8 hot_ext_count; /* # of hot file extension */
__le16 s_encoding; /* Filename charset encoding */
__le16 s_encoding_flags; /* Filename charset encoding flags */
- __u8 reserved[306]; /* valid reserved region */
+ __u8 s_stop_reason[MAX_STOP_REASON]; /* stop checkpoint reason */
+ __u8 reserved[274]; /* valid reserved region */
__le32 crc; /* checksum of superblock */
} __packed;
diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h
index 001780156c5d..c46264c38dde 100644
--- a/include/trace/hooks/binder.h
+++ b/include/trace/hooks/binder.h
@@ -10,7 +10,6 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct binder_alloc;
struct binder_proc;
struct binder_thread;
@@ -18,18 +17,7 @@ struct binder_transaction;
struct task_struct;
struct seq_file;
struct binder_transaction_data;
-#else
-/* struct binder_alloc */
-#include <../drivers/android/binder_alloc.h>
-/* struct binder_proc, struct binder_thread, struct binder_transaction */
-#include <../drivers/android/binder_internal.h>
-/* struct task_struct */
-#include
-/* struct seq_file */
-#include
-/* struct binder_transaction_data */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_binder_transaction_init,
TP_PROTO(struct binder_transaction *t),
TP_ARGS(t));
diff --git a/include/trace/hooks/block.h b/include/trace/hooks/block.h
index 0828a306ea13..e8bee374f989 100644
--- a/include/trace/hooks/block.h
+++ b/include/trace/hooks/block.h
@@ -9,18 +9,9 @@
#include
-#ifdef __GENKSYMS__
struct blk_mq_tags;
struct blk_mq_alloc_data;
struct blk_mq_tag_set;
-#else
-/* struct blk_mq_tags */
-#include <../block/blk-mq-tag.h>
-/* struct blk_mq_alloc_data */
-#include <../block/blk-mq.h>
-/* struct blk_mq_tag_set */
-#include
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_blk_alloc_rqs,
TP_PROTO(size_t *rq_size, struct blk_mq_tag_set *set,
diff --git a/include/trace/hooks/cgroup.h b/include/trace/hooks/cgroup.h
index 5546d390cb50..116a2afabf99 100644
--- a/include/trace/hooks/cgroup.h
+++ b/include/trace/hooks/cgroup.h
@@ -7,18 +7,10 @@
#define _TRACE_HOOK_CGROUP_H
#include
-#ifdef __GENKSYMS__
struct cgroup_taskset;
struct cgroup_subsys;
struct task_struct;
-#else
-/* Including ../kernel/cgroup/cgroup-internal.h breaks builds. */
-struct cgroup_taskset;
-/* struct cgroup_subsys */
-#include
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_cgroup_set_task,
TP_PROTO(int ret, struct task_struct *task),
TP_ARGS(ret, task));
diff --git a/include/trace/hooks/cpufreq.h b/include/trace/hooks/cpufreq.h
index 70f90a3ef25c..2739a0f9a547 100644
--- a/include/trace/hooks/cpufreq.h
+++ b/include/trace/hooks/cpufreq.h
@@ -6,10 +6,15 @@
#if !defined(_TRACE_HOOK_CPUFREQ_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_CPUFREQ_H
-
-#include
#include
+#ifdef __GENKSYMS__
+#include
+#endif
+
+struct cpufreq_policy;
+struct task_struct;
+
DECLARE_HOOK(android_vh_show_max_freq,
TP_PROTO(struct cpufreq_policy *policy, unsigned int *max_freq),
TP_ARGS(policy, max_freq));
diff --git a/include/trace/hooks/cpuidle.h b/include/trace/hooks/cpuidle.h
index 9addbdf32913..c2ddabe37b00 100644
--- a/include/trace/hooks/cpuidle.h
+++ b/include/trace/hooks/cpuidle.h
@@ -9,12 +9,7 @@
#include
-#ifdef __GENKSYMS__
struct cpuidle_device;
-#else
-/* struct cpuidle_device */
-#include
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_cpu_idle_enter,
TP_PROTO(int *state, struct cpuidle_device *dev),
diff --git a/include/trace/hooks/cpuidle_psci.h b/include/trace/hooks/cpuidle_psci.h
index 4881f35712c0..3ca307a3d82b 100644
--- a/include/trace/hooks/cpuidle_psci.h
+++ b/include/trace/hooks/cpuidle_psci.h
@@ -10,12 +10,8 @@
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct cpuidle_device;
-#else
-/* struct cpuidle_device */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_cpuidle_psci_enter,
TP_PROTO(struct cpuidle_device *dev, bool s2idle),
TP_ARGS(dev, s2idle));
diff --git a/include/trace/hooks/creds.h b/include/trace/hooks/creds.h
index 9544ee2e827c..12f92be91c24 100644
--- a/include/trace/hooks/creds.h
+++ b/include/trace/hooks/creds.h
@@ -10,15 +10,9 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct cred;
struct task_struct;
-#else
-/* struct cred */
-#include
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_commit_creds,
TP_PROTO(const struct task_struct *task, const struct cred *new),
TP_ARGS(task, new));
diff --git a/include/trace/hooks/debug.h b/include/trace/hooks/debug.h
index 892c60ac6f34..5a20141d742b 100644
--- a/include/trace/hooks/debug.h
+++ b/include/trace/hooks/debug.h
@@ -9,21 +9,11 @@
#include
-#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
-#ifdef __GENKSYMS__
struct pt_regs;
-#else
-/* struct pt_regs */
-#include
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_ipi_stop,
TP_PROTO(struct pt_regs *regs),
TP_ARGS(regs))
-#else
-#define trace_android_vh_ipi_stop(regs)
-#define trace_android_vh_ipi_stop_rcuidle(regs)
-#endif
#endif /* _TRACE_HOOK_DEBUG_H */
/* This part must be outside protection */
diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h
index be037865cdbc..749dc5b4078b 100644
--- a/include/trace/hooks/dtask.h
+++ b/include/trace/hooks/dtask.h
@@ -10,21 +10,11 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct mutex;
struct rt_mutex;
struct rw_semaphore;
struct task_struct;
-#else
-/* struct mutex */
-#include
-/* struct rt_mutex */
-#include
-/* struct rw_semaphore */
-#include
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_mutex_wait_start,
TP_PROTO(struct mutex *lock),
TP_ARGS(lock));
diff --git a/include/trace/hooks/fault.h b/include/trace/hooks/fault.h
index 920772177bb0..1b6e0b0911f5 100644
--- a/include/trace/hooks/fault.h
+++ b/include/trace/hooks/fault.h
@@ -10,12 +10,8 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct pt_regs;
-#else
-/* struct pt_regs */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_RESTRICTED_HOOK(android_rvh_die_kernel_fault,
TP_PROTO(struct pt_regs *regs, unsigned int esr, unsigned long addr, const char *msg),
TP_ARGS(regs, esr, addr, msg), 1);
diff --git a/include/trace/hooks/fips140.h b/include/trace/hooks/fips140.h
index 6a777771a6c8..fd4a42c013c7 100644
--- a/include/trace/hooks/fips140.h
+++ b/include/trace/hooks/fips140.h
@@ -7,12 +7,7 @@
#define _TRACE_HOOK_FIPS140_H
#include
-#ifdef __GENKSYMS__
struct crypto_aes_ctx;
-#else
-/* struct crypto_aes_ctx */
-#include
-#endif /* __GENKSYMS__ */
/*
* These hooks exist only for the benefit of the FIPS140 crypto module, which
diff --git a/include/trace/hooks/ftrace_dump.h b/include/trace/hooks/ftrace_dump.h
index b63d9c809426..0594e8bee2e2 100644
--- a/include/trace/hooks/ftrace_dump.h
+++ b/include/trace/hooks/ftrace_dump.h
@@ -6,11 +6,14 @@
#if !defined(_TRACE_HOOK_FTRACE_DUMP_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_FTRACE_DUMP_H
+#include
+#ifdef __GENKSYMS__
#include
#include
+#endif
-#include
+struct trace_seq;
DECLARE_HOOK(android_vh_ftrace_oops_enter,
TP_PROTO(bool *ftrace_check),
diff --git a/include/trace/hooks/gic_v3.h b/include/trace/hooks/gic_v3.h
index 8db98581eebc..647514f8d7a4 100644
--- a/include/trace/hooks/gic_v3.h
+++ b/include/trace/hooks/gic_v3.h
@@ -9,15 +9,9 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct cpumask;
struct irq_data;
-#else
-/* struct cpumask */
-#include
-/* struct irq_data */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_gic_v3_affinity_init,
TP_PROTO(int irq, u32 offset, u64 *affinity),
TP_ARGS(irq, offset, affinity));
diff --git a/include/trace/hooks/gpiolib.h b/include/trace/hooks/gpiolib.h
index 24cb3f54fb82..20115981de55 100644
--- a/include/trace/hooks/gpiolib.h
+++ b/include/trace/hooks/gpiolib.h
@@ -8,15 +8,16 @@
#define _TRACE_HOOK_GPIOLIB_H
#include
-#include "../drivers/gpio/gpiolib.h"
-#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
+#ifdef __GENKSYMS__
+#include "../drivers/gpio/gpiolib.h"
+#endif
+
+struct gpio_device;
+
DECLARE_HOOK(android_vh_gpio_block_read,
TP_PROTO(struct gpio_device *gdev, bool *block_gpio_read),
TP_ARGS(gdev, block_gpio_read));
-#else
-#define trace_android_vh_gpio_block_read(gdev, block_gpio_read)
-#endif
#endif /* _TRACE_HOOK_GPIOLIB_H */
/* This part must be outside protection */
diff --git a/include/trace/hooks/gup.h b/include/trace/hooks/gup.h
index 3135cd538a92..47ea47eeede4 100644
--- a/include/trace/hooks/gup.h
+++ b/include/trace/hooks/gup.h
@@ -7,12 +7,7 @@
#define _TRACE_HOOK_GUP_H
#include
-#ifdef __GENKSYMS__
struct page;
-#else
-/* struct page */
-#include
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_try_grab_compound_head,
TP_PROTO(struct page *page, int refs, unsigned int flags, bool *ret),
diff --git a/include/trace/hooks/iommu.h b/include/trace/hooks/iommu.h
index 6c30cb7932fa..c09f1a4bf65a 100644
--- a/include/trace/hooks/iommu.h
+++ b/include/trace/hooks/iommu.h
@@ -11,7 +11,6 @@
#include
-#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
DECLARE_RESTRICTED_HOOK(android_rvh_iommu_setup_dma_ops,
TP_PROTO(struct device *dev, u64 dma_base, u64 size),
TP_ARGS(dev, dma_base, size), 1);
@@ -23,13 +22,6 @@ DECLARE_HOOK(android_vh_iommu_alloc_iova,
DECLARE_HOOK(android_vh_iommu_free_iova,
TP_PROTO(dma_addr_t iova, size_t size),
TP_ARGS(iova, size));
-#else
-
-#define trace_android_rvh_iommu_setup_dma_ops(dev, dma_base, size)
-#define trace_android_vh_iommu_alloc_iova(dev, iova, size)
-#define trace_android_vh_iommu_free_iova(iova, size)
-
-#endif
#endif /* _TRACE_HOOK_IOMMU_H */
diff --git a/include/trace/hooks/logbuf.h b/include/trace/hooks/logbuf.h
index caec0d062476..c5ad3ba85174 100644
--- a/include/trace/hooks/logbuf.h
+++ b/include/trace/hooks/logbuf.h
@@ -9,13 +9,8 @@
#include
-#ifdef __GENKSYMS__
struct printk_record;
struct printk_ringbuffer;
-#else
-/* struct printk_record, struct printk_ringbuffer */
-#include <../kernel/printk/printk_ringbuffer.h>
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_logbuf,
TP_PROTO(struct printk_ringbuffer *rb, struct printk_record *r),
diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h
index 9e8f234545b1..263b867d453c 100644
--- a/include/trace/hooks/mm.h
+++ b/include/trace/hooks/mm.h
@@ -8,32 +8,23 @@
#define _TRACE_HOOK_MM_H
#include
-
-#include
-#include
#include
#ifdef __GENKSYMS__
+#include
+#include
+#endif
+
+struct oom_control;
struct cma;
struct acr_info;
struct compact_control;
struct slabinfo;
struct cgroup_subsys_state;
struct mem_cgroup;
-#else
-/* struct compact_control */
-#include <../mm/internal.h>
-/* struct slabinfo */
-#include <../mm/slab.h>
-/* struct cgroup_subsys_state */
-#include
-/* struct acr_info */
-#include
-/* struct mem_cgroup */
-#include
-#endif /* __GENKSYMS__ */
struct cma;
struct acr_info;
+struct vm_unmapped_area_info;
DECLARE_RESTRICTED_HOOK(android_rvh_set_skip_swapcache_flags,
TP_PROTO(gfp_t *flags),
diff --git a/include/trace/hooks/mmc_core.h b/include/trace/hooks/mmc_core.h
index 1889cc54a2b3..c59b4accc9fd 100644
--- a/include/trace/hooks/mmc_core.h
+++ b/include/trace/hooks/mmc_core.h
@@ -9,18 +9,9 @@
#include
-#ifdef __GENKSYMS__
struct sdhci_host;
struct mmc_card;
struct mmc_host;
-#else
-/* struct sdhci_host */
-#include <../drivers/mmc/host/sdhci.h>
-/* struct mmc_card */
-#include
-/* struct mmc_host */
-#include
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_mmc_blk_reset,
TP_PROTO(struct mmc_host *host, int err, bool *allow),
diff --git a/include/trace/hooks/mpam.h b/include/trace/hooks/mpam.h
index f7f5e468bcef..06b96b1309f8 100644
--- a/include/trace/hooks/mpam.h
+++ b/include/trace/hooks/mpam.h
@@ -10,12 +10,8 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct task_struct;
-#else
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_mpam_set,
TP_PROTO(struct task_struct *prev, struct task_struct *next),
TP_ARGS(prev, next));
diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h
index 97f15ba6ae3c..4fcd632b2f96 100644
--- a/include/trace/hooks/net.h
+++ b/include/trace/hooks/net.h
@@ -8,24 +8,12 @@
#define _TRACE_HOOK_NET_VH_H
#include
-#ifdef __GENKSYMS__
struct packet_type;
struct sk_buff;
struct list_head;
struct nf_conn;
struct sock;
-#else
-/* struct packet_type */
-#include
-/* struct sk_buff */
-#include
-/* struct list_head */
-#include
-/* struct nf_conn */
-#include
-/* struct sock */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_ptype_head,
TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt),
TP_ARGS(pt, vendor_pt));
diff --git a/include/trace/hooks/pci.h b/include/trace/hooks/pci.h
index 00d38980ec49..40255448c83c 100644
--- a/include/trace/hooks/pci.h
+++ b/include/trace/hooks/pci.h
@@ -6,6 +6,9 @@
#if !defined(_TRACE_HOOK_PCI_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_HOOK_PCI_H
#include
+
+struct pci_dev;
+
/*
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
diff --git a/include/trace/hooks/pm_domain.h b/include/trace/hooks/pm_domain.h
index 1a8ce26ccc3d..eaee85b9c00c 100644
--- a/include/trace/hooks/pm_domain.h
+++ b/include/trace/hooks/pm_domain.h
@@ -10,12 +10,8 @@
#include
-#ifdef __GENKSYMS__
struct generic_pm_domain;
-#else
-/* struct generic_pm_domain */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_allow_domain_state,
TP_PROTO(struct generic_pm_domain *genpd, uint32_t idx, bool *allow),
TP_ARGS(genpd, idx, allow))
diff --git a/include/trace/hooks/power.h b/include/trace/hooks/power.h
index 3c735b7a5abd..f9b7bbec1531 100644
--- a/include/trace/hooks/power.h
+++ b/include/trace/hooks/power.h
@@ -10,17 +10,14 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
-enum freq_qos_req_type;
+
+/* needed for enum freq_qos_req_types */
+#include
+
struct freq_constraints;
struct freq_qos_request;
struct task_struct;
-#else
-/* enum freq_qos_req_type, struct freq_constraints, struct freq_qos_request */
-#include
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_try_to_freeze_todo,
TP_PROTO(unsigned int todo, unsigned int elapsed_msecs, bool wq_busy),
TP_ARGS(todo, elapsed_msecs, wq_busy));
diff --git a/include/trace/hooks/psi.h b/include/trace/hooks/psi.h
index ffda9543357e..deeb3dfbeeb0 100644
--- a/include/trace/hooks/psi.h
+++ b/include/trace/hooks/psi.h
@@ -9,15 +9,9 @@
#include
-#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS)
-
-#ifdef __GENKSYMS__
struct psi_group;
struct psi_trigger;
-#else
-/* struct psi_group, struct psi_trigger */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_psi_event,
TP_PROTO(struct psi_trigger *t),
TP_ARGS(t));
@@ -26,11 +20,6 @@ DECLARE_HOOK(android_vh_psi_group,
TP_PROTO(struct psi_group *group),
TP_ARGS(group));
-#else
-#define trace_android_vh_psi_event(t)
-#define trace_android_vh_psi_group(group)
-#endif
-
#endif /* _TRACE_HOOK_PSI_H */
/* This part must be outside protection */
diff --git a/include/trace/hooks/remoteproc.h b/include/trace/hooks/remoteproc.h
index 4d3311b1fee4..ee0a2f0ea147 100644
--- a/include/trace/hooks/remoteproc.h
+++ b/include/trace/hooks/remoteproc.h
@@ -9,12 +9,7 @@
#include
-#ifdef __GENKSYMS__
struct rproc;
-#else
-/* struct rproc */
-#include
-#endif /* __GENKSYMS__ */
DECLARE_HOOK(android_vh_rproc_recovery,
TP_PROTO(struct rproc *rproc),
diff --git a/include/trace/hooks/rwsem.h b/include/trace/hooks/rwsem.h
index 3d6877f166ed..e3fd21729eee 100644
--- a/include/trace/hooks/rwsem.h
+++ b/include/trace/hooks/rwsem.h
@@ -9,13 +9,9 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct rw_semaphore;
struct rwsem_waiter;
-#else
-/* struct rw_semaphore, struct rwsem_waiter */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_rwsem_init,
TP_PROTO(struct rw_semaphore *sem),
TP_ARGS(sem));
diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h
index 3a8eee2345af..4233384f6ff8 100644
--- a/include/trace/hooks/sched.h
+++ b/include/trace/hooks/sched.h
@@ -9,7 +9,6 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct cgroup_taskset;
struct cgroup_subsys_state;
struct cpufreq_policy;
@@ -18,20 +17,7 @@ enum uclamp_id;
struct sched_entity;
struct task_struct;
struct uclamp_se;
-#else
-/* Including ../kernel/cgroup/cgroup-internal.h breaks builds. */
-struct cgroup_taskset;
-/* struct cgroup_subsys_state */
-#include
-/* struct cpufreq_policy */
-#include
-/* struct em_perf_domain */
-#include
-/* enum uclamp_id, struct sched_entity, struct task_struct, struct uclamp_se */
-#include
-/* Only defined with CONFIG_UCLAMP_TASK, so declare unconditionally. */
-struct uclamp_se;
-#endif /* __GENKSYMS__ */
+
DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair,
TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu),
TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1);
@@ -406,6 +392,10 @@ DECLARE_HOOK(android_vh_pidfd_open,
DECLARE_HOOK(android_vh_mmput,
TP_PROTO(void *unused),
TP_ARGS(unused));
+
+DECLARE_HOOK(android_vh_rebuild_root_domains_bypass,
+ TP_PROTO(bool tasks_frozen, bool *bypass),
+ TP_ARGS(tasks_frozen, bypass));
/* macro versions of hooks are no longer required */
#endif /* _TRACE_HOOK_SCHED_H */
diff --git a/include/trace/hooks/shmem_fs.h b/include/trace/hooks/shmem_fs.h
index adfd05825928..29c45d1e0571 100644
--- a/include/trace/hooks/shmem_fs.h
+++ b/include/trace/hooks/shmem_fs.h
@@ -7,12 +7,8 @@
#define _TRACE_HOOK_SHMEM_FS_H
#include
-#ifdef __GENKSYMS__
struct page;
-#else
-/* struct page */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_shmem_alloc_page,
TP_PROTO(struct page **page),
TP_ARGS(page));
diff --git a/include/trace/hooks/signal.h b/include/trace/hooks/signal.h
index 04976ed38cc7..6338274f27c4 100644
--- a/include/trace/hooks/signal.h
+++ b/include/trace/hooks/signal.h
@@ -7,12 +7,8 @@
#define _TRACE_HOOK_SIGNAL_H
#include
-#ifdef __GENKSYMS__
struct task_struct;
-#else
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_do_send_sig_info,
TP_PROTO(int sig, struct task_struct *killer, struct task_struct *dst),
TP_ARGS(sig, killer, dst));
diff --git a/include/trace/hooks/softlockup.h b/include/trace/hooks/softlockup.h
index d90571a3f0fc..d9806aeb5aa8 100644
--- a/include/trace/hooks/softlockup.h
+++ b/include/trace/hooks/softlockup.h
@@ -10,12 +10,8 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct pt_regs;
-#else
-/* struct pt_regs */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_watchdog_timer_softlockup,
TP_PROTO(int duration, struct pt_regs *regs, bool is_panic),
TP_ARGS(duration, regs, is_panic));
diff --git a/include/trace/hooks/sys.h b/include/trace/hooks/sys.h
index 819a126ce0ae..a14bd4135410 100644
--- a/include/trace/hooks/sys.h
+++ b/include/trace/hooks/sys.h
@@ -7,12 +7,8 @@
#define _TRACE_HOOK_SYS_H
#include
-#ifdef __GENKSYMS__
struct task_struct;
-#else
-/* struct task_struct */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_syscall_prctl_finished,
TP_PROTO(int option, struct task_struct *task),
TP_ARGS(option, task));
diff --git a/include/trace/hooks/syscall_check.h b/include/trace/hooks/syscall_check.h
index aa563ad1c510..c906ff6b8e7f 100644
--- a/include/trace/hooks/syscall_check.h
+++ b/include/trace/hooks/syscall_check.h
@@ -10,15 +10,9 @@
* Following tracepoints are not exported in tracefs and provide a
* mechanism for vendor modules to hook and extend functionality
*/
-#ifdef __GENKSYMS__
struct file;
union bpf_attr;
-#else
-/* struct file */
-#include
-/* union bpf_attr */
-#include
-#endif /* __GENKSYMS__ */
+
DECLARE_HOOK(android_vh_check_mmap_file,
TP_PROTO(const struct file *file, unsigned long prot,
unsigned long flag, unsigned long ret),
diff --git a/include/trace/hooks/thermal.h b/include/trace/hooks/thermal.h
index e9a9a4ae3e07..97074725fb08 100644
--- a/include/trace/hooks/thermal.h
+++ b/include/trace/hooks/thermal.h
@@ -10,12 +10,8 @@
#include
#include
-#ifdef __GENKSYMS__
struct thermal_zone_device;
-#else
-/* struct thermal_zone_device */
-#include