diff --git a/BUILD.bazel b/BUILD.bazel index 799cefe18f07..8b47aee37530 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -6,6 +6,7 @@ load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir") load("//build/kernel/kleaf:common_kernels.bzl", "define_common_kernels") load( "//build/kernel/kleaf:kernel.bzl", + "checkpatch", "ddk_headers", "kernel_abi", "kernel_build", @@ -40,6 +41,11 @@ _GKI_X86_64_MAKE_GOALS = [ "modules", ] +checkpatch( + name = "checkpatch", + checkpatch_pl = "scripts/checkpatch.pl", +) + write_file( name = "gki_system_dlkm_modules", out = "android/gki_system_dlkm_modules", @@ -76,6 +82,7 @@ define_common_kernels(target_configs = { "kmi_symbol_list_strict_mode": True, "module_implicit_outs": COMMON_GKI_MODULES_LIST, "kmi_symbol_list": "android/abi_gki_aarch64", + "kmi_symbol_list_add_only": True, "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], "protected_exports_list": "android/abi_gki_protected_exports_aarch64", "protected_modules_list": "android/gki_aarch64_protected_modules", @@ -90,6 +97,7 @@ define_common_kernels(target_configs = { "kmi_symbol_list_strict_mode": False, "module_implicit_outs": COMMON_GKI_MODULES_LIST, "kmi_symbol_list": "android/abi_gki_aarch64", + "kmi_symbol_list_add_only": True, "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], "protected_exports_list": "android/abi_gki_protected_exports_aarch64", "protected_modules_list": "android/gki_aarch64_protected_modules", diff --git a/Documentation/userspace-api/media/v4l/pixfmt-packed-yuv.rst b/Documentation/userspace-api/media/v4l/pixfmt-packed-yuv.rst index bf283a1b5581..9f111ed594d2 100644 --- a/Documentation/userspace-api/media/v4l/pixfmt-packed-yuv.rst +++ b/Documentation/userspace-api/media/v4l/pixfmt-packed-yuv.rst @@ -257,12 +257,45 @@ the second byte and Y'\ :sub:`7-0` in the third byte. - The padding bits contain undefined values that must be ignored by all applications and drivers. +The next table lists the packed YUV 4:4:4 formats with 12 bits per component. +Expand the bits per component to 16 bits, data in the high bits, zeros in the low bits, +arranged in little endian order, storing 1 pixel in 6 bytes. + +.. flat-table:: Packed YUV 4:4:4 Image Formats (12bpc) + :header-rows: 1 + :stub-columns: 0 + + * - Identifier + - Code + - Byte 1-0 + - Byte 3-2 + - Byte 5-4 + - Byte 7-6 + - Byte 9-8 + - Byte 11-10 + + * .. _V4L2-PIX-FMT-YUV48-12: + + - ``V4L2_PIX_FMT_YUV48_12`` + - 'Y312' + + - Y'\ :sub:`0` + - Cb\ :sub:`0` + - Cr\ :sub:`0` + - Y'\ :sub:`1` + - Cb\ :sub:`1` + - Cr\ :sub:`1` 4:2:2 Subsampling ================= These formats, commonly referred to as YUYV or YUY2, subsample the chroma -components horizontally by 2, storing 2 pixels in 4 bytes. +components horizontally by 2, storing 2 pixels in a container. The container +is 32-bits for 8-bit formats, and 64-bits for 10+-bit formats. + +The packed YUYV formats with more than 8 bits per component are stored as four +16-bit little-endian words. Each word's most significant bits contain one +component, and the least significant bits are zero padding. .. raw:: latex @@ -270,7 +303,7 @@ components horizontally by 2, storing 2 pixels in 4 bytes. .. tabularcolumns:: |p{3.4cm}|p{1.2cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}| -.. flat-table:: Packed YUV 4:2:2 Formats +.. flat-table:: Packed YUV 4:2:2 Formats in 32-bit container :header-rows: 1 :stub-columns: 0 @@ -337,6 +370,46 @@ components horizontally by 2, storing 2 pixels in 4 bytes. - Y'\ :sub:`3` - Cb\ :sub:`2` +.. tabularcolumns:: |p{3.4cm}|p{1.2cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}|p{0.8cm}| + +.. flat-table:: Packed YUV 4:2:2 Formats in 64-bit container + :header-rows: 1 + :stub-columns: 0 + + * - Identifier + - Code + - Word 0 + - Word 1 + - Word 2 + - Word 3 + * .. _V4L2-PIX-FMT-Y210: + + - ``V4L2_PIX_FMT_Y210`` + - 'Y210' + + - Y'\ :sub:`0` (bits 15-6) + - Cb\ :sub:`0` (bits 15-6) + - Y'\ :sub:`1` (bits 15-6) + - Cr\ :sub:`0` (bits 15-6) + * .. _V4L2-PIX-FMT-Y212: + + - ``V4L2_PIX_FMT_Y212`` + - 'Y212' + + - Y'\ :sub:`0` (bits 15-4) + - Cb\ :sub:`0` (bits 15-4) + - Y'\ :sub:`1` (bits 15-4) + - Cr\ :sub:`0` (bits 15-4) + * .. _V4L2-PIX-FMT-Y216: + + - ``V4L2_PIX_FMT_Y216`` + - 'Y216' + + - Y'\ :sub:`0` (bits 15-0) + - Cb\ :sub:`0` (bits 15-0) + - Y'\ :sub:`1` (bits 15-0) + - Cr\ :sub:`0` (bits 15-0) + .. raw:: latex \normalsize diff --git a/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst b/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst index 30f51cd33f99..4b8cbbc77b1b 100644 --- a/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst +++ b/Documentation/userspace-api/media/v4l/pixfmt-rgb.rst @@ -762,6 +762,48 @@ nomenclature that instead use the order of components as seen in a 24- or \normalsize +12 Bits Per Component +============================== + +These formats store an RGB triplet in six or eight bytes, with 12 bits per component. +Expand the bits per component to 16 bits, data in the high bits, zeros in the low bits, +arranged in little endian order. + +.. raw:: latex + + \small + +.. flat-table:: RGB Formats With 12 Bits Per Component + :header-rows: 1 + + * - Identifier + - Code + - Byte 1-0 + - Byte 3-2 + - Byte 5-4 + - Byte 7-6 + * .. _V4L2-PIX-FMT-BGR48-12: + + - ``V4L2_PIX_FMT_BGR48_12`` + - 'B312' + + - B\ :sub:`15-4` + - G\ :sub:`15-4` + - R\ :sub:`15-4` + - + * .. _V4L2-PIX-FMT-ABGR64-12: + + - ``V4L2_PIX_FMT_ABGR64_12`` + - 'B412' + + - B\ :sub:`15-4` + - G\ :sub:`15-4` + - R\ :sub:`15-4` + - A\ :sub:`15-4` + +.. raw:: latex + + \normalsize Deprecated RGB Formats ====================== diff --git a/Documentation/userspace-api/media/v4l/pixfmt-yuv-luma.rst b/Documentation/userspace-api/media/v4l/pixfmt-yuv-luma.rst index 6a387f9df3ba..26fd46fa4971 100644 --- a/Documentation/userspace-api/media/v4l/pixfmt-yuv-luma.rst +++ b/Documentation/userspace-api/media/v4l/pixfmt-yuv-luma.rst @@ -103,6 +103,17 @@ are often referred to as greyscale formats. - ... - ... + * .. _V4L2-PIX-FMT-Y012: + + - ``V4L2_PIX_FMT_Y012`` + - 'Y012' + + - Y'\ :sub:`0`\ [3:0] `0000` + - Y'\ :sub:`0`\ [11:4] + - ... + - ... + - ... + * .. _V4L2-PIX-FMT-Y14: - ``V4L2_PIX_FMT_Y14`` @@ -146,3 +157,7 @@ are often referred to as greyscale formats. than 16 bits. For example, 10 bits per pixel uses values in the range 0 to 1023. For the IPU3_Y10 format 25 pixels are packed into 32 bytes, which leaves the 6 most significant bits of the last byte padded with 0. + + For Y012 and Y12 formats, Y012 places its data in the 12 high bits, with + padding zeros in the 4 low bits, in contrast to the Y12 format, which has + its padding located in the most significant bits of the 16 bit word. diff --git a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst index f1d5bb7b806d..72324274f20c 100644 --- a/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst +++ b/Documentation/userspace-api/media/v4l/pixfmt-yuv-planar.rst @@ -123,6 +123,20 @@ All components are stored with the same number of bits per component. - Cb, Cr - Yes - 4x4 tiles + * - V4L2_PIX_FMT_P012 + - 'P012' + - 12 + - 4:2:0 + - Cb, Cr + - Yes + - Linear + * - V4L2_PIX_FMT_P012M + - 'PM12' + - 12 + - 4:2:0 + - Cb, Cr + - No + - Linear * - V4L2_PIX_FMT_NV16 - 'NV16' - 8 @@ -586,6 +600,86 @@ Data in the 10 high bits, zeros in the 6 low bits, arranged in little endian ord - Cb\ :sub:`11` - Cr\ :sub:`11` +.. _V4L2-PIX-FMT-P012: +.. _V4L2-PIX-FMT-P012M: + +P012 and P012M +-------------- + +P012 is like NV12 with 12 bits per component, expanded to 16 bits. +Data in the 12 high bits, zeros in the 4 low bits, arranged in little endian order. + +.. flat-table:: Sample 4x4 P012 Image + :header-rows: 0 + :stub-columns: 0 + + * - start + 0: + - Y'\ :sub:`00` + - Y'\ :sub:`01` + - Y'\ :sub:`02` + - Y'\ :sub:`03` + * - start + 8: + - Y'\ :sub:`10` + - Y'\ :sub:`11` + - Y'\ :sub:`12` + - Y'\ :sub:`13` + * - start + 16: + - Y'\ :sub:`20` + - Y'\ :sub:`21` + - Y'\ :sub:`22` + - Y'\ :sub:`23` + * - start + 24: + - Y'\ :sub:`30` + - Y'\ :sub:`31` + - Y'\ :sub:`32` + - Y'\ :sub:`33` + * - start + 32: + - Cb\ :sub:`00` + - Cr\ :sub:`00` + - Cb\ :sub:`01` + - Cr\ :sub:`01` + * - start + 40: + - Cb\ :sub:`10` + - Cr\ :sub:`10` + - Cb\ :sub:`11` + - Cr\ :sub:`11` + +.. flat-table:: Sample 4x4 P012M Image + :header-rows: 0 + :stub-columns: 0 + + * - start0 + 0: + - Y'\ :sub:`00` + - Y'\ :sub:`01` + - Y'\ :sub:`02` + - Y'\ :sub:`03` + * - start0 + 8: + - Y'\ :sub:`10` + - Y'\ :sub:`11` + - Y'\ :sub:`12` + - Y'\ :sub:`13` + * - start0 + 16: + - Y'\ :sub:`20` + - Y'\ :sub:`21` + - Y'\ :sub:`22` + - Y'\ :sub:`23` + * - start0 + 24: + - Y'\ :sub:`30` + - Y'\ :sub:`31` + - Y'\ :sub:`32` + - Y'\ :sub:`33` + * - + * - start1 + 0: + - Cb\ :sub:`00` + - Cr\ :sub:`00` + - Cb\ :sub:`01` + - Cr\ :sub:`01` + * - start1 + 8: + - Cb\ :sub:`10` + - Cr\ :sub:`10` + - Cb\ :sub:`11` + - Cr\ :sub:`11` + Fully Planar YUV Formats ======================== diff --git a/android/ACK_SHA b/android/ACK_SHA index 59474e2b2583..c58c1160dd52 100644 --- a/android/ACK_SHA +++ b/android/ACK_SHA @@ -1,2 +1,2 @@ -71b43c3e005a15b83c564a835361e2b7aa56e086 -android14-6.1-2023-07_r7 +f580df859bb06948e26f249d348a74348c237271 +android14-6.1-2023-08_r3 diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 8fcb46f3dacc..a725534e2b17 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -203,6 +203,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x29600806 } +pointer_reference { + id: 0x00cc5f1f + kind: POINTER + pointee_type_id: 0x29719ae3 +} pointer_reference { id: 0x00d1ba62 kind: POINTER @@ -248,6 +253,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x29b83e1a } +pointer_reference { + id: 0x00fff809 + kind: POINTER + pointee_type_id: 0x29bf06ba +} pointer_reference { id: 0x010934b0 kind: POINTER @@ -438,6 +448,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x2cf89e50 } +pointer_reference { + id: 0x01ae5751 + kind: POINTER + pointee_type_id: 0x2cf9bbda +} pointer_reference { id: 0x01b63d17 kind: POINTER @@ -1258,6 +1273,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x38da44ec } +pointer_reference { + id: 0x04a9576c + kind: POINTER + pointee_type_id: 0x38e5bb2f +} pointer_reference { id: 0x04ac88c5 kind: POINTER @@ -1303,6 +1323,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x39185662 } +pointer_reference { + id: 0x04d7fcdd + kind: POINTER + pointee_type_id: 0x391f15ea +} pointer_reference { id: 0x04dad728 kind: POINTER @@ -2153,6 +2178,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0a52df14 } +pointer_reference { + id: 0x080d391b + kind: POINTER + pointee_type_id: 0x0a7402f1 +} +pointer_reference { + id: 0x080d3f98 + kind: POINTER + pointee_type_id: 0x0a7418fc +} +pointer_reference { + id: 0x080e08ce + kind: POINTER + pointee_type_id: 0x0a78c5a5 +} pointer_reference { id: 0x080fbe64 kind: POINTER @@ -2328,6 +2368,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0942f1ca } +pointer_reference { + id: 0x08c420f1 + kind: POINTER + pointee_type_id: 0x09506558 +} pointer_reference { id: 0x08e43718 kind: POINTER @@ -2668,11 +2713,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0x03cc00a2 } +pointer_reference { + id: 0x0a67a4e3 + kind: POINTER + pointee_type_id: 0x03de7511 +} pointer_reference { id: 0x0a6c2073 kind: POINTER pointee_type_id: 0x03f06751 } +pointer_reference { + id: 0x0a70ce1b + kind: POINTER + pointee_type_id: 0x0383def3 +} pointer_reference { id: 0x0a747547 kind: POINTER @@ -2693,6 +2748,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x00447895 } +pointer_reference { + id: 0x0a8304ff + kind: POINTER + pointee_type_id: 0x004cf563 +} pointer_reference { id: 0x0a85fcb6 kind: POINTER @@ -2713,6 +2773,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0028f2f5 } +pointer_reference { + id: 0x0a9e3ca3 + kind: POINTER + pointee_type_id: 0x00381413 +} pointer_reference { id: 0x0aa1f0ee kind: POINTER @@ -3033,6 +3098,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x04a91d68 } +pointer_reference { + id: 0x0bbb7f1b + kind: POINTER + pointee_type_id: 0x04ad1af1 +} pointer_reference { id: 0x0bbc5d54 kind: POINTER @@ -3043,6 +3113,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x04b89667 } +pointer_reference { + id: 0x0bbfad26 + kind: POINTER + pointee_type_id: 0x04be5205 +} pointer_reference { id: 0x0bc3e3e1 kind: POINTER @@ -4048,6 +4123,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x19832066 } +pointer_reference { + id: 0x0cf3d8fe + kind: POINTER + pointee_type_id: 0x198f8565 +} pointer_reference { id: 0x0cf80951 kind: POINTER @@ -4243,6 +4323,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1e3b8bac } +pointer_reference { + id: 0x0d1f55de + kind: POINTER + pointee_type_id: 0x1e3db1e5 +} pointer_reference { id: 0x0d20d38c kind: POINTER @@ -4278,6 +4363,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1edfcb66 } +pointer_reference { + id: 0x0d27dc9d + kind: POINTER + pointee_type_id: 0x1edf94e9 +} pointer_reference { id: 0x0d2958f6 kind: POINTER @@ -5083,6 +5173,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1d5cf24d } +pointer_reference { + id: 0x0dc966bc + kind: POINTER + pointee_type_id: 0x1d657c6d +} pointer_reference { id: 0x0dc9e98b kind: POINTER @@ -5348,6 +5443,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x12725ea0 } +pointer_reference { + id: 0x0e0dc148 + kind: POINTER + pointee_type_id: 0x1277e3bd +} pointer_reference { id: 0x0e0dc9f3 kind: POINTER @@ -5513,6 +5613,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x129eb456 } +pointer_reference { + id: 0x0e38185b + kind: POINTER + pointee_type_id: 0x12a087f3 +} pointer_reference { id: 0x0e395200 kind: POINTER @@ -5573,6 +5678,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x13525403 } +pointer_reference { + id: 0x0e44c87b + kind: POINTER + pointee_type_id: 0x1353c771 +} pointer_reference { id: 0x0e44f9f8 kind: POINTER @@ -5643,6 +5753,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x13797fb7 } +pointer_reference { + id: 0x0e4e7ccb + kind: POINTER + pointee_type_id: 0x137915b0 +} pointer_reference { id: 0x0e4f7e58 kind: POINTER @@ -6848,6 +6963,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1705e250 } +pointer_reference { + id: 0x0f56bda3 + kind: POINTER + pointee_type_id: 0x171a1012 +} +pointer_reference { + id: 0x0f596314 + kind: POINTER + pointee_type_id: 0x17256acc +} pointer_reference { id: 0x0f5a291c kind: POINTER @@ -6873,6 +6998,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x172e6ba7 } +pointer_reference { + id: 0x0f5c0d73 + kind: POINTER + pointee_type_id: 0x1730d353 +} pointer_reference { id: 0x0f5e0dda kind: POINTER @@ -6923,6 +7053,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x17ce1ca0 } +pointer_reference { + id: 0x0f657fc1 + kind: POINTER + pointee_type_id: 0x17d51999 +} +pointer_reference { + id: 0x0f67218c + kind: POINTER + pointee_type_id: 0x17dc60ac +} pointer_reference { id: 0x0f677ef9 kind: POINTER @@ -7943,6 +8083,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x6df67d28 } +pointer_reference { + id: 0x120033c5 + kind: POINTER + pointee_type_id: 0x6240298a +} pointer_reference { id: 0x1200e2aa kind: POINTER @@ -8053,6 +8198,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x6101d583 } +pointer_reference { + id: 0x12d9a766 + kind: POINTER + pointee_type_id: 0x61267b05 +} +pointer_reference { + id: 0x12e0cbae + kind: POINTER + pointee_type_id: 0x61c3c826 +} pointer_reference { id: 0x12e24ee1 kind: POINTER @@ -8093,6 +8248,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x664d9cb2 } +pointer_reference { + id: 0x130aa721 + kind: POINTER + pointee_type_id: 0x666a7a1b +} pointer_reference { id: 0x13185ce8 kind: POINTER @@ -8283,6 +8443,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x65b569e7 } +pointer_reference { + id: 0x13fe8737 + kind: POINTER + pointee_type_id: 0x65bafa41 +} pointer_reference { id: 0x14191d75 kind: POINTER @@ -8428,6 +8593,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x79e2d3b1 } +pointer_reference { + id: 0x14f37d47 + kind: POINTER + pointee_type_id: 0x798d1382 +} pointer_reference { id: 0x14fb0ab0 kind: POINTER @@ -8838,6 +9008,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x76e78cd9 } +pointer_reference { + id: 0x173696bc + kind: POINTER + pointee_type_id: 0x769abc6d +} pointer_reference { id: 0x1740e61d kind: POINTER @@ -8978,6 +9153,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x755b6647 } +pointer_reference { + id: 0x17d51999 + kind: POINTER + pointee_type_id: 0x751480f9 +} pointer_reference { id: 0x17dabdcd kind: POINTER @@ -9438,6 +9618,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x4d320115 } +pointer_reference { + id: 0x19df035f + kind: POINTER + pointee_type_id: 0x4d3cebe1 +} pointer_reference { id: 0x19e0c64c kind: POINTER @@ -9723,6 +9908,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x475137a2 } +pointer_reference { + id: 0x1b4a1f75 + kind: POINTER + pointee_type_id: 0x47689b48 +} pointer_reference { id: 0x1b4ce091 kind: POINTER @@ -9863,6 +10053,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x45a8a3c4 } +pointer_reference { + id: 0x1bfb2a60 + kind: POINTER + pointee_type_id: 0x45ac4f1e +} pointer_reference { id: 0x1c126813 kind: POINTER @@ -10828,6 +11023,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x551d0131 } +pointer_reference { + id: 0x1fdf8df4 + kind: POINTER + pointee_type_id: 0x553ed14c +} pointer_reference { id: 0x1fe51930 kind: POINTER @@ -11398,6 +11598,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xa0815516 } +pointer_reference { + id: 0x22b357e9 + kind: POINTER + pointee_type_id: 0xa08db938 +} pointer_reference { id: 0x22b3ece7 kind: POINTER @@ -11618,6 +11823,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xa57d1db8 } +pointer_reference { + id: 0x23d822f9 + kind: POINTER + pointee_type_id: 0xa5206d7a +} pointer_reference { id: 0x23d902f6 kind: POINTER @@ -11938,11 +12148,6 @@ pointer_reference { kind: POINTER pointee_type_id: 0xbceec39a } -pointer_reference { - id: 0x25b57283 - kind: POINTER - pointee_type_id: 0xbc952c91 -} pointer_reference { id: 0x25b73daa kind: POINTER @@ -12373,6 +12578,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xb4a26738 } +pointer_reference { + id: 0x27c7b3cb + kind: POINTER + pointee_type_id: 0xb55e29b2 +} pointer_reference { id: 0x27cf73eb kind: POINTER @@ -12808,16 +13018,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x8de7c9fe } +pointer_reference { + id: 0x29ef8105 + kind: POINTER + pointee_type_id: 0x8dfee289 +} pointer_reference { id: 0x29f9c70b kind: POINTER pointee_type_id: 0x8da7fab2 } -pointer_reference { - id: 0x2a0586b2 - kind: POINTER - pointee_type_id: 0x8256fc56 -} pointer_reference { id: 0x2a0a605f kind: POINTER @@ -13053,6 +13263,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x86a9103f } +pointer_reference { + id: 0x2b4b15b4 + kind: POINTER + pointee_type_id: 0x876cb04d +} pointer_reference { id: 0x2b584612 kind: POINTER @@ -13413,6 +13628,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9ac13218 } +pointer_reference { + id: 0x2c209d56 + kind: POINTER + pointee_type_id: 0x9ac293c4 +} pointer_reference { id: 0x2c210d23 kind: POINTER @@ -15393,6 +15613,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9921a72c } +pointer_reference { + id: 0x2cd9dff0 + kind: POINTER + pointee_type_id: 0x9927995d +} pointer_reference { id: 0x2cda29dd kind: POINTER @@ -15473,6 +15698,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x99c11430 } +pointer_reference { + id: 0x2ce2190b + kind: POINTER + pointee_type_id: 0x99c882b3 +} pointer_reference { id: 0x2ce315c4 kind: POINTER @@ -15773,6 +16003,26 @@ pointer_reference { kind: POINTER pointee_type_id: 0x99be88a0 } +pointer_reference { + id: 0x2d000b85 + kind: POINTER + pointee_type_id: 0x9e40c88b +} +pointer_reference { + id: 0x2d00157c + kind: POINTER + pointee_type_id: 0x9e40b36c +} +pointer_reference { + id: 0x2d004103 + kind: POINTER + pointee_type_id: 0x9e41e293 +} +pointer_reference { + id: 0x2d004a69 + kind: POINTER + pointee_type_id: 0x9e41cf39 +} pointer_reference { id: 0x2d008d0e kind: POINTER @@ -15783,21 +16033,61 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e448e2a } +pointer_reference { + id: 0x2d018e8d + kind: POINTER + pointee_type_id: 0x9e46dca9 +} +pointer_reference { + id: 0x2d01e009 + kind: POINTER + pointee_type_id: 0x9e4766bb +} pointer_reference { id: 0x2d0240fc kind: POINTER pointee_type_id: 0x9e49e56e } +pointer_reference { + id: 0x2d02e4d4 + kind: POINTER + pointee_type_id: 0x9e4b75cd +} +pointer_reference { + id: 0x2d033017 + kind: POINTER + pointee_type_id: 0x9e4c26c1 +} pointer_reference { id: 0x2d036f50 kind: POINTER pointee_type_id: 0x9e4d5bdd } +pointer_reference { + id: 0x2d0429c2 + kind: POINTER + pointee_type_id: 0x9e504197 +} +pointer_reference { + id: 0x2d044ee7 + kind: POINTER + pointee_type_id: 0x9e51dd03 +} +pointer_reference { + id: 0x2d046cf4 + kind: POINTER + pointee_type_id: 0x9e51554f +} pointer_reference { id: 0x2d04a781 kind: POINTER pointee_type_id: 0x9e52789b } +pointer_reference { + id: 0x2d0679a1 + kind: POINTER + pointee_type_id: 0x9e590019 +} pointer_reference { id: 0x2d06e5cd kind: POINTER @@ -15813,6 +16103,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e5ef2fc } +pointer_reference { + id: 0x2d081f17 + kind: POINTER + pointee_type_id: 0x9e609ac2 +} +pointer_reference { + id: 0x2d085064 + kind: POINTER + pointee_type_id: 0x9e61a70c +} pointer_reference { id: 0x2d08a576 kind: POINTER @@ -15828,6 +16128,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e663e24 } +pointer_reference { + id: 0x2d0a0361 + kind: POINTER + pointee_type_id: 0x9e68eb19 +} +pointer_reference { + id: 0x2d0ab1eb + kind: POINTER + pointee_type_id: 0x9e6a2131 +} pointer_reference { id: 0x2d0b7a8e kind: POINTER @@ -15853,6 +16163,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e792fe6 } +pointer_reference { + id: 0x2d0e9268 + kind: POINTER + pointee_type_id: 0x9e7aaf3f +} pointer_reference { id: 0x2d0fdd7c kind: POINTER @@ -15888,6 +16203,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e026d74 } +pointer_reference { + id: 0x2d11ffb5 + kind: POINTER + pointee_type_id: 0x9e071849 +} pointer_reference { id: 0x2d126960 kind: POINTER @@ -15903,6 +16223,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e11d049 } +pointer_reference { + id: 0x2d154530 + kind: POINTER + pointee_type_id: 0x9e15f25c +} +pointer_reference { + id: 0x2d161d5c + kind: POINTER + pointee_type_id: 0x9e1893ee +} pointer_reference { id: 0x2d164af6 kind: POINTER @@ -15913,6 +16243,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e19651e } +pointer_reference { + id: 0x2d16aeaf + kind: POINTER + pointee_type_id: 0x9e1a5c22 +} pointer_reference { id: 0x2d16b2fd kind: POINTER @@ -15973,6 +16308,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9e2ef574 } +pointer_reference { + id: 0x2d1c1d12 + kind: POINTER + pointee_type_id: 0x9e3092d5 +} pointer_reference { id: 0x2d1c7478 kind: POINTER @@ -16303,6 +16643,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9ebfed71 } +pointer_reference { + id: 0x2d3ffbc6 + kind: POINTER + pointee_type_id: 0x9ebf0984 +} pointer_reference { id: 0x2d4051be kind: POINTER @@ -16408,6 +16753,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9f6f73ed } +pointer_reference { + id: 0x2d4c6881 + kind: POINTER + pointee_type_id: 0x9f71449b +} pointer_reference { id: 0x2d4eaa35 kind: POINTER @@ -16423,6 +16773,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9f7fc723 } +pointer_reference { + id: 0x2d4fcd25 + kind: POINTER + pointee_type_id: 0x9f7fd20b +} pointer_reference { id: 0x2d50c295 kind: POINTER @@ -16463,6 +16818,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9f1dcaea } +pointer_reference { + id: 0x2d594ead + kind: POINTER + pointee_type_id: 0x9f25dc29 +} pointer_reference { id: 0x2d59c606 kind: POINTER @@ -16693,6 +17053,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9f87b817 } +pointer_reference { + id: 0x2d7368ed + kind: POINTER + pointee_type_id: 0x9f8d452b +} +pointer_reference { + id: 0x2d739f19 + kind: POINTER + pointee_type_id: 0x9f8e9af9 +} pointer_reference { id: 0x2d7549b3 kind: POINTER @@ -16733,6 +17103,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9fa3b723 } +pointer_reference { + id: 0x2d7ab985 + kind: POINTER + pointee_type_id: 0x9faa0088 +} +pointer_reference { + id: 0x2d7ac448 + kind: POINTER + pointee_type_id: 0x9fabf7be +} pointer_reference { id: 0x2d7ae3a5 kind: POINTER @@ -16933,6 +17313,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9c7d7af2 } +pointer_reference { + id: 0x2d8fd28a + kind: POINTER + pointee_type_id: 0x9c7facb4 +} pointer_reference { id: 0x2d8fdd2c kind: POINTER @@ -17218,6 +17603,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9cf48276 } +pointer_reference { + id: 0x2dae0c91 + kind: POINTER + pointee_type_id: 0x9cf8d4d9 +} pointer_reference { id: 0x2dae560d kind: POINTER @@ -17958,6 +18348,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9da05299 } +pointer_reference { + id: 0x2df84197 + kind: POINTER + pointee_type_id: 0x9da1e0c3 +} pointer_reference { id: 0x2df9d3a1 kind: POINTER @@ -18123,21 +18518,56 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9266fead } +pointer_reference { + id: 0x2e0a2548 + kind: POINTER + pointee_type_id: 0x926873bc +} +pointer_reference { + id: 0x2e0a26c5 + kind: POINTER + pointee_type_id: 0x92687d88 +} pointer_reference { id: 0x2e0a4508 kind: POINTER pointee_type_id: 0x9269f2bc } +pointer_reference { + id: 0x2e0ab0cf + kind: POINTER + pointee_type_id: 0x926a25a2 +} +pointer_reference { + id: 0x2e0abaa7 + kind: POINTER + pointee_type_id: 0x926a0c03 +} +pointer_reference { + id: 0x2e0abbc6 + kind: POINTER + pointee_type_id: 0x926a0987 +} pointer_reference { id: 0x2e0ac0be kind: POINTER pointee_type_id: 0x926be467 } +pointer_reference { + id: 0x2e0ad762 + kind: POINTER + pointee_type_id: 0x926bbb17 +} pointer_reference { id: 0x2e0b4b4b kind: POINTER pointee_type_id: 0x926dcbb0 } +pointer_reference { + id: 0x2e0b7ad3 + kind: POINTER + pointee_type_id: 0x926d0dd0 +} pointer_reference { id: 0x2e0b807c kind: POINTER @@ -18193,6 +18623,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x920d4b76 } +pointer_reference { + id: 0x2e1466a0 + kind: POINTER + pointee_type_id: 0x92117c1d +} pointer_reference { id: 0x2e152fbb kind: POINTER @@ -18283,6 +18718,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92c2d86d } +pointer_reference { + id: 0x2e20981d + kind: POINTER + pointee_type_id: 0x92c286e9 +} pointer_reference { id: 0x2e215a2d kind: POINTER @@ -18348,6 +18788,16 @@ pointer_reference { kind: POINTER pointee_type_id: 0x92f4a3cb } +pointer_reference { + id: 0x2e2ef220 + kind: POINTER + pointee_type_id: 0x92fb2e1e +} +pointer_reference { + id: 0x2e2f03e7 + kind: POINTER + pointee_type_id: 0x92fce902 +} pointer_reference { id: 0x2e2ff28a kind: POINTER @@ -18458,6 +18908,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9352af9c } +pointer_reference { + id: 0x2e477ad3 + kind: POINTER + pointee_type_id: 0x935d0dd3 +} pointer_reference { id: 0x2e47a18c kind: POINTER @@ -18558,6 +19013,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9313a933 } +pointer_reference { + id: 0x2e54f1b8 + kind: POINTER + pointee_type_id: 0x9313207d +} pointer_reference { id: 0x2e5535c9 kind: POINTER @@ -18588,6 +19048,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x931806a8 } +pointer_reference { + id: 0x2e5686ce + kind: POINTER + pointee_type_id: 0x931afda4 +} pointer_reference { id: 0x2e56b2c6 kind: POINTER @@ -18723,6 +19188,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x938c1916 } +pointer_reference { + id: 0x2e735a06 + kind: POINTER + pointee_type_id: 0x938d8e84 +} pointer_reference { id: 0x2e73c057 kind: POINTER @@ -18738,6 +19208,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x93907678 } +pointer_reference { + id: 0x2e7505e0 + kind: POINTER + pointee_type_id: 0x9394f11e +} pointer_reference { id: 0x2e76071a kind: POINTER @@ -18793,6 +19268,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x93b941f7 } +pointer_reference { + id: 0x2e7ffbfe + kind: POINTER + pointee_type_id: 0x93bf0967 +} pointer_reference { id: 0x2e804bb7 kind: POINTER @@ -21523,6 +22003,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeba4823c } +pointer_reference { + id: 0x307eba5c + kind: POINTER + pointee_type_id: 0xebba0fee +} pointer_reference { id: 0x30887d17 kind: POINTER @@ -21788,6 +22273,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeec4d3d8 } +pointer_reference { + id: 0x3121a074 + kind: POINTER + pointee_type_id: 0xeec6674e +} pointer_reference { id: 0x31287056 kind: POINTER @@ -22063,6 +22553,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xed225d89 } +pointer_reference { + id: 0x31d9e79a + kind: POINTER + pointee_type_id: 0xed2778f4 +} pointer_reference { id: 0x31da1e83 kind: POINTER @@ -22213,11 +22708,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe2a728bc } +pointer_reference { + id: 0x323d798e + kind: POINTER + pointee_type_id: 0xe2b500a6 +} pointer_reference { id: 0x3240bbe7 kind: POINTER pointee_type_id: 0xe3420903 } +pointer_reference { + id: 0x3247ae94 + kind: POINTER + pointee_type_id: 0xe35e5ccd +} pointer_reference { id: 0x324a2d7b kind: POINTER @@ -22553,6 +23058,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe644a39b } +pointer_reference { + id: 0x33086ec3 + kind: POINTER + pointee_type_id: 0xe6615d93 +} pointer_reference { id: 0x330db442 kind: POINTER @@ -22748,6 +23258,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe7c3994d } +pointer_reference { + id: 0x33642722 + kind: POINTER + pointee_type_id: 0xe7d07a15 +} pointer_reference { id: 0x33657329 kind: POINTER @@ -22843,6 +23358,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe42d7586 } +pointer_reference { + id: 0x339b8baf + kind: POINTER + pointee_type_id: 0xe42ec820 +} pointer_reference { id: 0x339ebb61 kind: POINTER @@ -23013,6 +23533,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xe5ac437d } +pointer_reference { + id: 0x33fd261b + kind: POINTER + pointee_type_id: 0xe5b47ef3 +} pointer_reference { id: 0x34016e82 kind: POINTER @@ -23278,6 +23803,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf8453f2e } +pointer_reference { + id: 0x34818c51 + kind: POINTER + pointee_type_id: 0xf846d7da +} pointer_reference { id: 0x3486508f kind: POINTER @@ -23758,6 +24288,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xfc53e789 } +pointer_reference { + id: 0x358546f6 + kind: POINTER + pointee_type_id: 0xfc55fd47 +} pointer_reference { id: 0x358a1c52 kind: POINTER @@ -23843,6 +24378,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xfc8ba4d2 } +pointer_reference { + id: 0x35b3ea42 + kind: POINTER + pointee_type_id: 0xfc8f4f95 +} pointer_reference { id: 0x35bad1e5 kind: POINTER @@ -23998,6 +24538,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf25d597f } +pointer_reference { + id: 0x3609467c + kind: POINTER + pointee_type_id: 0xf265ff6f +} pointer_reference { id: 0x360c66c5 kind: POINTER @@ -24638,6 +25183,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf7e2e2fa } +pointer_reference { + id: 0x376c8705 + kind: POINTER + pointee_type_id: 0xf7f2fa8a +} pointer_reference { id: 0x376d0d4f kind: POINTER @@ -24688,6 +25238,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf4616560 } +pointer_reference { + id: 0x378dbf55 + kind: POINTER + pointee_type_id: 0xf4761bc8 +} pointer_reference { id: 0x37944814 kind: POINTER @@ -24928,6 +25483,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xca62a8b3 } +pointer_reference { + id: 0x38090ad2 + kind: POINTER + pointee_type_id: 0xca64cdd4 +} pointer_reference { id: 0x380a78f0 kind: POINTER @@ -25003,6 +25563,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcaaeb726 } +pointer_reference { + id: 0x383bad14 + kind: POINTER + pointee_type_id: 0xcaae52cc +} pointer_reference { id: 0x383bcea3 kind: POINTER @@ -25058,6 +25623,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcb720070 } +pointer_reference { + id: 0x384d1346 + kind: POINTER + pointee_type_id: 0xcb74ab84 +} pointer_reference { id: 0x384ff235 kind: POINTER @@ -25438,6 +26008,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xce9dd989 } +pointer_reference { + id: 0x39388fd3 + kind: POINTER + pointee_type_id: 0xcea2d9d1 +} pointer_reference { id: 0x393f044a kind: POINTER @@ -25593,6 +26168,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcc1251bf } +pointer_reference { + id: 0x3999579d + kind: POINTER + pointee_type_id: 0xcc25b8e9 +} pointer_reference { id: 0x399f63b7 kind: POINTER @@ -26138,6 +26718,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc60bc51e } +pointer_reference { + id: 0x3b143836 + kind: POINTER + pointee_type_id: 0xc6100647 +} pointer_reference { id: 0x3b19594b kind: POINTER @@ -26268,6 +26853,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc77aa47c } +pointer_reference { + id: 0x3b5017f2 + kind: POINTER + pointee_type_id: 0xc700b957 +} pointer_reference { id: 0x3b54fdd3 kind: POINTER @@ -26513,11 +27103,21 @@ pointer_reference { kind: POINTER pointee_type_id: 0xda60e9a6 } +pointer_reference { + id: 0x3c087d20 + kind: POINTER + pointee_type_id: 0xda61121d +} pointer_reference { id: 0x3c0933ca kind: POINTER pointee_type_id: 0xda6429b7 } +pointer_reference { + id: 0x3c0cf46a + kind: POINTER + pointee_type_id: 0xda733736 +} pointer_reference { id: 0x3c0e9e79 kind: POINTER @@ -26628,6 +27228,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdb0ebdcd } +pointer_reference { + id: 0x3c53e119 + kind: POINTER + pointee_type_id: 0xdb0f62fb +} pointer_reference { id: 0x3c53eefd kind: POINTER @@ -26933,6 +27538,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdf4d92db } +pointer_reference { + id: 0x3d46e073 + kind: POINTER + pointee_type_id: 0xdf5b6752 +} pointer_reference { id: 0x3d4bf55f kind: POINTER @@ -27023,6 +27633,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdfba2774 } +pointer_reference { + id: 0x3d801074 + kind: POINTER + pointee_type_id: 0xdc40a74d +} pointer_reference { id: 0x3d828cd9 kind: POINTER @@ -27363,6 +27978,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd2e0ae36 } +pointer_reference { + id: 0x3e292ad1 + kind: POINTER + pointee_type_id: 0xd2e44dd9 +} pointer_reference { id: 0x3e29be7b kind: POINTER @@ -27893,6 +28513,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd41e888f } +pointer_reference { + id: 0x3f985801 + kind: POINTER + pointee_type_id: 0xd421869b +} pointer_reference { id: 0x3f9adc09 kind: POINTER @@ -27953,6 +28578,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd559247f } +pointer_reference { + id: 0x3fca7642 + kind: POINTER + pointee_type_id: 0xd5693f95 +} pointer_reference { id: 0x3fd0b78c kind: POINTER @@ -28808,6 +29438,11 @@ typedef { name: "hfn_t" referred_type_id: 0x92233392 } +typedef { + id: 0xee72cbfc + name: "ino_t" + referred_type_id: 0x21d43a7b +} typedef { id: 0x7e8f5c14 name: "int32" @@ -30353,6 +30988,11 @@ qualified { qualifier: CONST qualified_type_id: 0x6798ba36 } +qualified { + id: 0xc6100647 + qualifier: CONST + qualified_type_id: 0x6807af97 +} qualified { id: 0xc62583b0 qualifier: CONST @@ -30658,6 +31298,11 @@ qualified { qualifier: CONST qualified_type_id: 0x5d8fb74a } +qualified { + id: 0xcb74ab84 + qualifier: CONST + qualified_type_id: 0x5d95189a +} qualified { id: 0xcb987dd0 qualifier: CONST @@ -31428,6 +32073,11 @@ qualified { qualifier: CONST qualified_type_id: 0x19d71054 } +qualified { + id: 0xda733736 + qualifier: CONST + qualified_type_id: 0x198b6a50 +} qualified { id: 0xda7a9f79 qualifier: CONST @@ -31453,6 +32103,11 @@ qualified { qualifier: CONST qualified_type_id: 0x1c7ac324 } +qualified { + id: 0xdb0f62fb + qualifier: CONST + qualified_type_id: 0x1c7a3d65 +} qualified { id: 0xdb10d97a qualifier: CONST @@ -31713,6 +32368,11 @@ qualified { qualifier: CONST qualified_type_id: 0x0d6c22fa } +qualified { + id: 0xdf5b6752 + qualifier: CONST + qualified_type_id: 0x0d2a2bc0 +} qualified { id: 0xdf6f33e0 qualifier: CONST @@ -31903,6 +32563,11 @@ qualified { qualifier: CONST qualified_type_id: 0xfa2455af } +qualified { + id: 0xe2b500a6 + qualifier: CONST + qualified_type_id: 0xfa93b413 +} qualified { id: 0xe2cebd77 qualifier: CONST @@ -32048,6 +32713,11 @@ qualified { qualifier: CONST qualified_type_id: 0xe6f6bb7d } +qualified { + id: 0xe5b47ef3 + qualifier: CONST + qualified_type_id: 0xe6964d46 +} qualified { id: 0xe5d16cd3 qualifier: CONST @@ -32348,6 +33018,11 @@ qualified { qualifier: CONST qualified_type_id: 0xded5be7b } +qualified { + id: 0xebba0fee + qualifier: CONST + qualified_type_id: 0xdeaf8933 +} qualified { id: 0xebc0e0d9 qualifier: CONST @@ -32453,6 +33128,11 @@ qualified { qualifier: CONST qualified_type_id: 0xc460028a } +qualified { + id: 0xed2778f4 + qualifier: CONST + qualified_type_id: 0xc4da5559 +} qualified { id: 0xed32e285 qualifier: CONST @@ -32553,6 +33233,11 @@ qualified { qualifier: CONST qualified_type_id: 0xcaab19b4 } +qualified { + id: 0xeec6674e + qualifier: CONST + qualified_type_id: 0xcb5e2bb0 +} qualified { id: 0xeee127c5 qualifier: CONST @@ -32748,6 +33433,11 @@ qualified { qualifier: CONST qualified_type_id: 0xa0bcedf5 } +qualified { + id: 0xf4761bc8 + qualifier: CONST + qualified_type_id: 0xa19fd9aa +} qualified { id: 0xf4a306a1 qualifier: CONST @@ -32928,6 +33618,11 @@ qualified { qualifier: CONST qualified_type_id: 0xae5a9933 } +qualified { + id: 0xf7f2fa8a + qualifier: CONST + qualified_type_id: 0xaf8c5ca0 +} qualified { id: 0xf824f490 qualifier: CONST @@ -34057,6 +34752,11 @@ array { number_of_elements: 64 element_type_id: 0x295c7202 } +array { + id: 0x3a8e7b26 + number_of_elements: 3 + element_type_id: 0xa12e384a +} array { id: 0x3b24b1ed number_of_elements: 20 @@ -34682,6 +35382,11 @@ array { number_of_elements: 7 element_type_id: 0x295c7202 } +array { + id: 0x62a5e001 + number_of_elements: 13 + element_type_id: 0x92233392 +} array { id: 0x62e6d4e3 number_of_elements: 34 @@ -34982,6 +35687,11 @@ array { number_of_elements: 256 element_type_id: 0x2eab5b8a } +array { + id: 0x729479be + number_of_elements: 2 + element_type_id: 0x78f4e574 +} array { id: 0x7349866a number_of_elements: 49 @@ -35442,6 +36152,11 @@ array { number_of_elements: 4 element_type_id: 0x0ab21434 } +array { + id: 0x8fb3c5ee + number_of_elements: 1 + element_type_id: 0xe9e88d93 +} array { id: 0x8fc9368a number_of_elements: 1 @@ -35882,6 +36597,11 @@ array { number_of_elements: 4 element_type_id: 0xe62ebf07 } +array { + id: 0xb637307e + number_of_elements: 4 + element_type_id: 0xe9e88d93 +} array { id: 0xb6bc1f4d number_of_elements: 17 @@ -36493,6 +37213,10 @@ array { id: 0xdf3f459c element_type_id: 0x6c1b2db0 } +array { + id: 0xdf70f6ef + element_type_id: 0x6d25e07f +} array { id: 0xdfed0371 element_type_id: 0x6f523604 @@ -36890,6 +37614,10 @@ array { number_of_elements: 44 element_type_id: 0x5d8155a5 } +array { + id: 0xfca4258b + element_type_id: 0xe276adef +} array { id: 0xfd17183f element_type_id: 0xe4ba5b3d @@ -37143,6 +37871,10 @@ member { id: 0x26e6f511 type_id: 0x14b5a454 } +member { + id: 0x27000c61 + type_id: 0x132e4197 +} member { id: 0x27031642 type_id: 0x13222919 @@ -37533,6 +38265,11 @@ member { id: 0x3190e1a6 type_id: 0x496df688 } +member { + id: 0x31a5da6f + type_id: 0x49b90a29 + offset: 59264 +} member { id: 0x31aa1057 type_id: 0x49861740 @@ -37563,6 +38300,11 @@ member { type_id: 0x48ff9190 offset: 192 } +member { + id: 0x31fb35e2 + type_id: 0x48c28092 + offset: 128 +} member { id: 0x321ecf49 type_id: 0x47554d36 @@ -37995,6 +38737,10 @@ member { type_id: 0x56faddc1 offset: 840 } +member { + id: 0x36752b74 + type_id: 0x56faddc1 +} member { id: 0x36961302 type_id: 0x557609c1 @@ -38196,6 +38942,11 @@ member { type_id: 0x69fa9768 offset: 256 } +member { + id: 0x39d6d358 + type_id: 0x6875099c + offset: 32 +} member { id: 0x39e9b87f type_id: 0x6888b6e5 @@ -38439,6 +39190,11 @@ member { type_id: 0x7edb75e7 offset: 96 } +member { + id: 0x3c8c9122 + type_id: 0x7d1c3635 + offset: 256 +} member { id: 0x3cac7aec type_id: 0x7d9f9ba1 @@ -39216,6 +39972,12 @@ member { type_id: 0x1162409a offset: 16 } +member { + id: 0xf4a9b31e + name: "__data" + type_id: 0xd359db99 + offset: 128 +} member { id: 0xf4b20642 name: "__data" @@ -39400,6 +40162,12 @@ member { type_id: 0x3a8cf6d8 offset: 64 } +member { + id: 0x86165645 + name: "__pad2" + type_id: 0x5d8155a5 + offset: 120 +} member { id: 0x86715b21 name: "__pad2" @@ -39761,6 +40529,20 @@ member { type_id: 0x4585663f offset: 384 } +member { + id: 0x370a9ced + name: "__unused_1" + type_id: 0xe8034002 + offset: 448 + bitsize: 7 +} +member { + id: 0x8c5039ca + name: "__unused_2" + type_id: 0xe8034002 + offset: 465 + bitsize: 6 +} member { id: 0x206928e2 name: "__use" @@ -39950,6 +40732,12 @@ member { name: "_msg" type_id: 0x3e10b518 } +member { + id: 0x3e75936d + name: "_net" + type_id: 0xb335d16f + offset: 3136 +} member { id: 0x3e759921 name: "_net" @@ -41034,6 +41822,11 @@ member { type_id: 0x6d7f5ff6 offset: 688 } +member { + id: 0x7980c676 + name: "acl_addr" + type_id: 0x6d25e07f +} member { id: 0xf17c8f4c name: "acl_cnt" @@ -41046,6 +41839,12 @@ member { type_id: 0x020f69fc offset: 128 } +member { + id: 0xa102d1d4 + name: "acl_ifindex" + type_id: 0x6720d32f + offset: 128 +} member { id: 0xdc1b3211 name: "acl_last_tx" @@ -41058,6 +41857,12 @@ member { type_id: 0x4585663f offset: 13152 } +member { + id: 0x23f246a8 + name: "acl_next" + type_id: 0x01ae5751 + offset: 192 +} member { id: 0xe08e16a4 name: "acl_num" @@ -42100,6 +42905,12 @@ member { type_id: 0xe02e14d6 offset: 256 } +member { + id: 0x24cfa4f0 + name: "addr" + type_id: 0xe276adef + offset: 32 +} member { id: 0x24d1edc6 name: "addr" @@ -42145,6 +42956,12 @@ member { type_id: 0x2d8abcdd offset: 256 } +member { + id: 0x09692cc4 + name: "addr2sockaddr" + type_id: 0x0f56bda3 + offset: 576 +} member { id: 0x29cfb070 name: "addr2str" @@ -42327,6 +43144,12 @@ member { type_id: 0x33756485 offset: 512 } +member { + id: 0x30e26822 + name: "address" + type_id: 0x33756485 + offset: 256 +} member { id: 0x30e26c68 name: "address" @@ -42633,6 +43456,13 @@ member { type_id: 0x901eaf6a offset: 39112 } +member { + id: 0xec6d552f + name: "advanced" + type_id: 0x295c7202 + offset: 174 + bitsize: 1 +} member { id: 0x686a7031 name: "advertised" @@ -42698,6 +43528,12 @@ member { type_id: 0x6d7f5ff6 offset: 50368 } +member { + id: 0x1d3891d6 + name: "advmss" + type_id: 0x914dbfdc + offset: 13696 +} member { id: 0x1ffcf224 name: "ae" @@ -43083,6 +43919,11 @@ member { name: "all" type_id: 0x7584e7da } +member { + id: 0xee87ba00 + name: "all" + type_id: 0xe8034002 +} member { id: 0xeebc7141 name: "all" @@ -44070,12 +44911,6 @@ member { type_id: 0x92233392 offset: 2496 } -member { - id: 0x2d0811d3 - name: "android_kabi_reserved1" - type_id: 0x92233392 - offset: 59264 -} member { id: 0x2d0811f9 name: "android_kabi_reserved1" @@ -44387,6 +45222,12 @@ member { type_id: 0x92233392 offset: 4096 } +member { + id: 0x2d08191c + name: "android_kabi_reserved1" + type_id: 0x92233392 + offset: 8576 +} member { id: 0x2d08193b name: "android_kabi_reserved1" @@ -44513,6 +45354,12 @@ member { type_id: 0x92233392 offset: 1152 } +member { + id: 0x2d081c07 + name: "android_kabi_reserved1" + type_id: 0x92233392 + offset: 11392 +} member { id: 0x2d081c0d name: "android_kabi_reserved1" @@ -44657,6 +45504,12 @@ member { type_id: 0x92233392 offset: 1856 } +member { + id: 0x2d081e39 + name: "android_kabi_reserved1" + type_id: 0x92233392 + offset: 18880 +} member { id: 0x2d081eb7 name: "android_kabi_reserved1" @@ -45202,6 +46055,12 @@ member { type_id: 0x92233392 offset: 2176 } +member { + id: 0x63760c6b + name: "android_kabi_reserved2" + type_id: 0x92233392 + offset: 8640 +} member { id: 0x63760c9c name: "android_kabi_reserved2" @@ -46623,6 +47482,12 @@ member { name: "apoll_events" type_id: 0xb94e10c7 } +member { + id: 0x484997ff + name: "app_limited" + type_id: 0xc9082b19 + offset: 15328 +} member { id: 0x6e3edc08 name: "appearance" @@ -47564,6 +48429,12 @@ member { type_id: 0x399c459b offset: 512 } +member { + id: 0x168605e8 + name: "ato" + type_id: 0xe62ebf07 + offset: 32 +} member { id: 0x176dead7 name: "atomic" @@ -48622,12 +49493,24 @@ member { offset: 65 bitsize: 1 } +member { + id: 0x773b8f3f + name: "auto_dump" + type_id: 0x6d7f5ff6 + offset: 904 +} member { id: 0xaa0ea302 name: "auto_flowlabels" type_id: 0x295c7202 offset: 632 } +member { + id: 0xea4e825c + name: "auto_recover" + type_id: 0x6d7f5ff6 + offset: 896 +} member { id: 0xc5fa3041 name: "auto_runtime_pm" @@ -48672,6 +49555,20 @@ member { offset: 256 bitsize: 1 } +member { + id: 0x6854e737 + name: "autoflowlabel" + type_id: 0xe8034002 + offset: 571 + bitsize: 1 +} +member { + id: 0xe803bc2e + name: "autoflowlabel_set" + type_id: 0xe8034002 + offset: 572 + bitsize: 1 +} member { id: 0xf1e86eba name: "automatic_shrinking" @@ -50011,6 +50908,11 @@ member { type_id: 0xe9735eb8 offset: 832 } +member { + id: 0x853440fd + name: "base" + type_id: 0xeeae7608 +} member { id: 0x853678f4 name: "base" @@ -51317,6 +52219,13 @@ member { type_id: 0x2c16e301 offset: 1088 } +member { + id: 0x87d4aa19 + name: "bind_address_no_port" + type_id: 0xb3e7bac9 + offset: 7112 + bitsize: 1 +} member { id: 0x23af1384 name: "bind_bucket_cachep" @@ -51653,6 +52562,11 @@ member { type_id: 0x7a6db264 offset: 216 } +member { + id: 0xd74e0402 + name: "bits" + type_id: 0x1b949b56 +} member { id: 0xd78825be name: "bits" @@ -51734,6 +52648,12 @@ member { type_id: 0x326dfde1 offset: 256 } +member { + id: 0x4a47d75f + name: "bitwidth" + type_id: 0x4585663f + offset: 96 +} member { id: 0x9cc8208d name: "bkops" @@ -52672,6 +53592,13 @@ member { type_id: 0x6d7f5ff6 offset: 12928 } +member { + id: 0xf5c438ad + name: "bpf_chg_cc_inprogress" + type_id: 0x295c7202 + offset: 18216 + bitsize: 1 +} member { id: 0xa9117c13 name: "bpf_cookie" @@ -52736,6 +53663,12 @@ member { type_id: 0xc9082b19 offset: 33920 } +member { + id: 0xa6861f94 + name: "bpf_sock_ops_cb_flags" + type_id: 0x295c7202 + offset: 18208 +} member { id: 0xede394b6 name: "bpf_storage" @@ -54986,6 +55919,12 @@ member { type_id: 0xf435685e offset: 320 } +member { + id: 0x3ed6f46c + name: "bytes_acked" + type_id: 0x92233392 + offset: 12736 +} member { id: 0x4d36c98b name: "bytes_ext_ops" @@ -55021,12 +55960,30 @@ member { type_id: 0xf435685e offset: 128 } +member { + id: 0xda945faa + name: "bytes_received" + type_id: 0x92233392 + offset: 12352 +} +member { + id: 0xd77f2af8 + name: "bytes_retrans" + type_id: 0x92233392 + offset: 17984 +} member { id: 0xf2787e23 name: "bytes_rx" type_id: 0x3a3eb2f9 offset: 512 } +member { + id: 0x840adfe0 + name: "bytes_sent" + type_id: 0x92233392 + offset: 12672 +} member { id: 0x8cf55cde name: "bytes_transferred" @@ -57197,6 +58154,12 @@ member { type_id: 0x208118b2 offset: 8640 } +member { + id: 0x08477548 + name: "cell_size" + type_id: 0xc9082b19 + offset: 96 +} member { id: 0xc909929f name: "cells" @@ -58661,6 +59624,25 @@ member { type_id: 0xe62ebf07 offset: 160 } +member { + id: 0x6c3076ab + name: "chrono_start" + type_id: 0xc9082b19 + offset: 13728 +} +member { + id: 0x4b0fd146 + name: "chrono_stat" + type_id: 0x2087fff2 + offset: 13760 +} +member { + id: 0x5514b7d1 + name: "chrono_type" + type_id: 0x295c7202 + offset: 13856 + bitsize: 2 +} member { id: 0x0c0ce1e9 name: "chunk_mask" @@ -58937,6 +59919,12 @@ member { type_id: 0x3104c07e offset: 1280 } +member { + id: 0x1dfe157e + name: "cipso" + type_id: 0x5d8155a5 + offset: 112 +} member { id: 0xcf891492 name: "cis" @@ -59186,6 +60174,12 @@ member { type_id: 0x6720d32f offset: 9088 } +member { + id: 0x200938c6 + name: "cleanup" + type_id: 0x0a8304ff + offset: 448 +} member { id: 0x200c257e name: "cleanup" @@ -59960,6 +60954,12 @@ member { name: "clockid" type_id: 0x4478ba6b } +member { + id: 0xf6c2da43 + name: "clone" + type_id: 0x0dc966bc + offset: 448 +} member { id: 0xcf60e1c3 name: "cloned" @@ -60657,6 +61657,12 @@ member { name: "cmp" type_id: 0x36fc2198 } +member { + id: 0x9e4ebac2 + name: "cmsg_flags" + type_id: 0xe8034002 + offset: 6960 +} member { id: 0x141e1b04 name: "cnf" @@ -61356,6 +62362,12 @@ member { name: "common" type_id: 0xfb3bb098 } +member { + id: 0x999f46a7 + name: "comp" + type_id: 0x3fcbf304 + offset: 3648 +} member { id: 0x999f496f name: "comp" @@ -61949,6 +62961,12 @@ member { type_id: 0x35aebc23 offset: 64 } +member { + id: 0xe5d87fc5 + name: "component" + type_id: 0x3e10b518 + offset: 64 +} member { id: 0xe5eb95e0 name: "component" @@ -62091,6 +63109,24 @@ member { type_id: 0x6d7f5ff6 offset: 672 } +member { + id: 0x4aed4e02 + name: "compressed_ack" + type_id: 0x295c7202 + offset: 13712 +} +member { + id: 0x036494f3 + name: "compressed_ack_rcv_nxt" + type_id: 0xc9082b19 + offset: 12992 +} +member { + id: 0xe98a4697 + name: "compressed_ack_timer" + type_id: 0xcd7704bf + offset: 16320 +} member { id: 0xfb567eb3 name: "compressed_header_size" @@ -62568,6 +63604,12 @@ member { type_id: 0x7bfd6d29 offset: 3648 } +member { + id: 0x495c1c6d + name: "conn_request" + type_id: 0x2c210d23 + offset: 256 +} member { id: 0x220e0197 name: "conn_state" @@ -63248,6 +64290,12 @@ member { name: "controller" type_id: 0xc9082b19 } +member { + id: 0xd8dc9c99 + name: "controller" + type_id: 0xc9082b19 + offset: 64 +} member { id: 0x608f2d5b name: "controller_data" @@ -63260,6 +64308,13 @@ member { type_id: 0x18bd6530 offset: 7552 } +member { + id: 0x1db19505 + name: "controller_valid" + type_id: 0x295c7202 + offset: 145 + bitsize: 1 +} member { id: 0x474fe3e5 name: "controls" @@ -63314,6 +64369,12 @@ member { type_id: 0x1e4bcad9 offset: 320 } +member { + id: 0x3c401b61 + name: "convert_csum" + type_id: 0xb3e7bac9 + offset: 7128 +} member { id: 0x3f2fb089 name: "convert_ctx_access" @@ -63343,6 +64404,11 @@ member { type_id: 0x0fec2355 offset: 64 } +member { + id: 0x5846e373 + name: "cookie" + type_id: 0x0cb73b55 +} member { id: 0x5852e92d name: "cookie" @@ -63459,6 +64525,18 @@ member { type_id: 0xedf277ba offset: 192 } +member { + id: 0x5414dc08 + name: "copied" + type_id: 0x6720d32f + offset: 320 +} +member { + id: 0x1ec2d3d6 + name: "copied_seq" + type_id: 0xc9082b19 + offset: 12512 +} member { id: 0x58138131 name: "copied_timestamp" @@ -63686,12 +64764,24 @@ member { type_id: 0xedf277ba offset: 1472 } +member { + id: 0xa608f9d7 + name: "cork" + type_id: 0x60790295 + offset: 7296 +} member { id: 0xa64d7141 name: "cork" type_id: 0x25fbbcbe offset: 256 } +member { + id: 0xa677c461 + name: "cork" + type_id: 0x1f434195 + offset: 1088 +} member { id: 0x7105015a name: "cork_bytes" @@ -65052,6 +66142,12 @@ member { type_id: 0x70e54b38 offset: 64 } +member { + id: 0x0f89928e + name: "create" + type_id: 0x0aee7ba0 + offset: 320 +} member { id: 0x0fae5380 name: "create" @@ -66045,6 +67141,12 @@ member { type_id: 0x0d68946d offset: 64 } +member { + id: 0xec94e17c + name: "ctx" + type_id: 0x0d12f45b + offset: 256 +} member { id: 0xeca4247d name: "ctx" @@ -66390,6 +67492,12 @@ member { name: "cur_seq" type_id: 0x92233392 } +member { + id: 0x80fbe8a7 + name: "cur_snapshots" + type_id: 0xc9082b19 + offset: 864 +} member { id: 0x8b31830e name: "cur_stack" @@ -66801,6 +67909,12 @@ member { type_id: 0x0f9357d8 offset: 192 } +member { + id: 0xd7cfbd25 + name: "cwnd_usage_seq" + type_id: 0xc9082b19 + offset: 14592 +} member { id: 0x1d7a6d67 name: "cwr" @@ -67270,6 +68384,12 @@ member { type_id: 0xe276adef offset: 32 } +member { + id: 0xca75de5a + name: "daddr_cache" + type_id: 0x3b461cc8 + offset: 320 +} member { id: 0xf25f00aa name: "dai_elems" @@ -67956,6 +69076,12 @@ member { type_id: 0x29de0844 offset: 64 } +member { + id: 0xffbef712 + name: "data" + type_id: 0x2cdbb77a + offset: 192 +} member { id: 0xffc40278 name: "data" @@ -68304,6 +69430,18 @@ member { type_id: 0x4585663f offset: 800 } +member { + id: 0x7ecbe350 + name: "data_segs_in" + type_id: 0xc9082b19 + offset: 12448 +} +member { + id: 0xdb2f5379 + name: "data_segs_out" + type_id: 0xc9082b19 + offset: 12640 +} member { id: 0x9e8ccb80 name: "data_shift" @@ -68986,6 +70124,12 @@ member { type_id: 0x74d29cf1 offset: 288 } +member { + id: 0xbc5ebfd1 + name: "deathrow" + type_id: 0x5e8dc7f4 + offset: 448 +} member { id: 0x6b1d26fa name: "debounce_period_us" @@ -69697,6 +70841,13 @@ member { type_id: 0x6d7f5ff6 offset: 4096 } +member { + id: 0x35577470 + name: "defer_connect" + type_id: 0xb3e7bac9 + offset: 7114 + bitsize: 1 +} member { id: 0x81689872 name: "defer_count" @@ -70141,12 +71292,24 @@ member { type_id: 0x6d7f5ff6 offset: 480 } +member { + id: 0x986caa86 + name: "delivered" + type_id: 0xc9082b19 + offset: 15232 +} member { id: 0x9871b666 name: "delivered" type_id: 0xd41e888f offset: 128 } +member { + id: 0xe06780dd + name: "delivered_ce" + type_id: 0xc9082b19 + offset: 15264 +} member { id: 0xe07a91f0 name: "delivered_ce" @@ -70159,6 +71322,12 @@ member { type_id: 0xd3c80119 offset: 3008 } +member { + id: 0xc6e15ebb + name: "delivered_mstamp" + type_id: 0x92233392 + offset: 15424 +} member { id: 0xb362d7b2 name: "dellink" @@ -71079,6 +72248,12 @@ member { type_id: 0x0d27055d offset: 128 } +member { + id: 0xa4170b6e + name: "destructor" + type_id: 0x0d27dc9d + offset: 64 +} member { id: 0xa4b58e4f name: "destructor" @@ -71695,6 +72870,12 @@ member { type_id: 0x0258f96e offset: 2880 } +member { + id: 0xce3bb522 + name: "dev" + type_id: 0x0258f96e + offset: 3072 +} member { id: 0xce3bb837 name: "dev" @@ -73042,15 +74223,26 @@ member { offset: 6816 } member { - id: 0x5685a7bf + id: 0x56ace115 name: "devlink" - type_id: 0x25b57283 + type_id: 0x0cf3d8fe offset: 256 } member { - id: 0x5685afdd + id: 0x56ace1be name: "devlink" - type_id: 0x25b57283 + type_id: 0x0cf3d8fe +} +member { + id: 0x56ace87c + name: "devlink" + type_id: 0x0cf3d8fe + offset: 128 +} +member { + id: 0x56ace977 + name: "devlink" + type_id: 0x0cf3d8fe offset: 192 } member { @@ -73058,6 +74250,12 @@ member { name: "devlink_port" type_id: 0x3b68ec61 } +member { + id: 0xeb76e483 + name: "devlink_port" + type_id: 0x3b68ec61 + offset: 320 +} member { id: 0xf45f2394 name: "devlink_rate" @@ -73343,6 +74541,12 @@ member { type_id: 0x295c7202 offset: 224 } +member { + id: 0x30b83368 + name: "diagnose" + type_id: 0x2e2f03e7 + offset: 192 +} member { id: 0xc3552be5 name: "dialed_frequency" @@ -75553,6 +76757,13 @@ member { type_id: 0x03913382 offset: 6336 } +member { + id: 0x4b741bd1 + name: "dontfrag" + type_id: 0xe8034002 + offset: 570 + bitsize: 1 +} member { id: 0xbd60b76c name: "doorbell" @@ -75706,6 +76917,18 @@ member { offset: 1034 bitsize: 1 } +member { + id: 0x32a55865 + name: "dpipe_headers" + type_id: 0x27c7b3cb + offset: 1472 +} +member { + id: 0x3d9266c0 + name: "dpipe_table_list" + type_id: 0xd3c80119 + offset: 448 +} member { id: 0x95152d3f name: "dplen" @@ -76714,6 +77937,26 @@ member { name: "dsa" type_id: 0x0a5c3627 } +member { + id: 0x09aae020 + name: "dsack" + type_id: 0x914dbfdc + offset: 130 + bitsize: 1 +} +member { + id: 0x7efdf5c5 + name: "dsack_dups" + type_id: 0xc9082b19 + offset: 12800 +} +member { + id: 0x28f28f83 + name: "dsack_seen" + type_id: 0x295c7202 + offset: 173 + bitsize: 1 +} member { id: 0x3c3a7c4f name: "dsc" @@ -76916,6 +78159,12 @@ member { type_id: 0x1259e377 offset: 64 } +member { + id: 0xbbe3f808 + name: "dst" + type_id: 0x1259e377 + offset: 192 +} member { id: 0xbbf78102 name: "dst" @@ -76928,12 +78177,24 @@ member { type_id: 0xe8034002 offset: 48 } +member { + id: 0xebf05092 + name: "dst0opt" + type_id: 0x33642722 + offset: 192 +} member { id: 0x5493d7f6 name: "dst1" type_id: 0xe8034002 offset: 80 } +member { + id: 0xfb3c6654 + name: "dst1opt" + type_id: 0x33642722 + offset: 320 +} member { id: 0x59edf322 name: "dst_addr" @@ -76970,6 +78231,12 @@ member { type_id: 0x78f4e574 offset: 64 } +member { + id: 0x3e931a99 + name: "dst_cookie" + type_id: 0xe62ebf07 + offset: 640 +} member { id: 0x24a0666b name: "dst_csets" @@ -77112,6 +78379,13 @@ member { type_id: 0xe8034002 offset: 144 } +member { + id: 0xcc7711fa + name: "dstopts" + type_id: 0xe8034002 + offset: 8 + bitsize: 1 +} member { id: 0x58e808e0 name: "dt" @@ -77298,6 +78572,12 @@ member { type_id: 0x2f1d9bf5 offset: 960 } +member { + id: 0x0a7d4966 + name: "dump" + type_id: 0x2e2ef220 + offset: 128 +} member { id: 0x0a7e5e7c name: "dump" @@ -77334,6 +78614,24 @@ member { type_id: 0x425c572c offset: 7808 } +member { + id: 0x210293e8 + name: "dump_fmsg" + type_id: 0x23d822f9 + offset: 384 +} +member { + id: 0x33fc8cf5 + name: "dump_lock" + type_id: 0xa7c362b0 + offset: 448 +} +member { + id: 0x352c4ca4 + name: "dump_real_ts" + type_id: 0x92233392 + offset: 1024 +} member { id: 0xc82958b0 name: "dump_segments" @@ -77358,6 +78656,12 @@ member { type_id: 0x2f288c5c offset: 832 } +member { + id: 0x1e719a84 + name: "dump_ts" + type_id: 0x92233392 + offset: 960 +} member { id: 0xa92e0890 name: "dump_vendor_regs" @@ -77400,6 +78704,13 @@ member { type_id: 0x2f2aa245 offset: 64 } +member { + id: 0x330d862e + name: "dup_ack_counter" + type_id: 0x295c7202 + offset: 13720 + bitsize: 2 +} member { id: 0x74874671 name: "dup_xol_addr" @@ -77459,6 +78770,12 @@ member { type_id: 0x2a0a605f offset: 832 } +member { + id: 0xac4c8092 + name: "duplicate_sack" + type_id: 0x8fb3c5ee + offset: 17152 +} member { id: 0xe631c0e0 name: "duplicated" @@ -77983,6 +79300,12 @@ member { type_id: 0x4585663f offset: 1568 } +member { + id: 0x3dfa7679 + name: "ecn_flags" + type_id: 0x295c7202 + offset: 14640 +} member { id: 0xd4971fcb name: "ed" @@ -79070,6 +80393,13 @@ member { name: "enabled" type_id: 0x74d29cf1 } +member { + id: 0x7a56a000 + name: "enabled" + type_id: 0xc9082b19 + offset: 95 + bitsize: 1 +} member { id: 0x7a56a64a name: "enabled" @@ -79480,6 +80810,18 @@ member { type_id: 0xd0ccb483 offset: 64 } +member { + id: 0xd5a56009 + name: "end_seq" + type_id: 0xc9082b19 + offset: 32 +} +member { + id: 0xd5a564b1 + name: "end_seq" + type_id: 0xc9082b19 + offset: 96 +} member { id: 0x357800a2 name: "end_station" @@ -80492,6 +81834,12 @@ member { offset: 6530 bitsize: 1 } +member { + id: 0x0b6ea206 + name: "error_count" + type_id: 0x92233392 + offset: 1088 +} member { id: 0x0b9ba55b name: "error_count" @@ -80694,6 +82042,42 @@ member { type_id: 0x39470e64 offset: 256 } +member { + id: 0x2d2ca64a + name: "eswitch_encap_mode_get" + type_id: 0x2d046cf4 + offset: 1408 +} +member { + id: 0x0e5d040f + name: "eswitch_encap_mode_set" + type_id: 0x2df84197 + offset: 1472 +} +member { + id: 0xff091101 + name: "eswitch_inline_mode_get" + type_id: 0x2d3ffbc6 + offset: 1280 +} +member { + id: 0xf81283dc + name: "eswitch_inline_mode_set" + type_id: 0x2d161d5c + offset: 1344 +} +member { + id: 0x67ecafb3 + name: "eswitch_mode_get" + type_id: 0x2d11ffb5 + offset: 1152 +} +member { + id: 0x06f3214d + name: "eswitch_mode_set" + type_id: 0x2dae0c91 + offset: 1216 +} member { id: 0xca94b2d4 name: "eth_tp_mdix" @@ -81820,6 +83204,12 @@ member { type_id: 0x3fcbf304 offset: 1024 } +member { + id: 0x9633fcdf + name: "exp" + type_id: 0x6d7f5ff6 + offset: 136 +} member { id: 0x964efc36 name: "exp" @@ -81999,6 +83389,12 @@ member { type_id: 0x33756485 offset: 256 } +member { + id: 0x91036748 + name: "expires" + type_id: 0x33756485 + offset: 704 +} member { id: 0x91036cb7 name: "expires" @@ -82865,6 +84261,11 @@ member { type_id: 0x6720d32f offset: 672 } +member { + id: 0xe37696ac + name: "faddr" + type_id: 0xe276adef +} member { id: 0x0bad70a4 name: "fade_length" @@ -82981,6 +84382,12 @@ member { name: "family" type_id: 0xc93e017b } +member { + id: 0x9e9c9ad1 + name: "family" + type_id: 0xc93e017b + offset: 112 +} member { id: 0x9ebdabf6 name: "family" @@ -83027,6 +84434,18 @@ member { name: "fast_io" type_id: 0x6d7f5ff6 } +member { + id: 0xcee88548 + name: "fast_ipv6_only" + type_id: 0x6d7f5ff6 + offset: 336 +} +member { + id: 0xfd693ce8 + name: "fast_rcv_saddr" + type_id: 0xe276adef + offset: 288 +} member { id: 0xd0fd5f6f name: "fast_reconnect" @@ -83039,6 +84458,12 @@ member { type_id: 0xc93e017b offset: 704 } +member { + id: 0x247ebe29 + name: "fast_sk_family" + type_id: 0xc93e017b + offset: 320 +} member { id: 0xe96aa3ec name: "fast_start_pfn" @@ -83063,6 +84488,12 @@ member { type_id: 0x6d7f5ff6 offset: 4992 } +member { + id: 0x6398a0a9 + name: "fast_v6_rcv_saddr" + type_id: 0x6d25e07f + offset: 160 +} member { id: 0xbe23cb67 name: "fastchannel_db_ring" @@ -83075,6 +84506,63 @@ member { type_id: 0x0d53cd40 offset: 192 } +member { + id: 0xa42f5b5e + name: "fastopen_client_fail" + type_id: 0x295c7202 + offset: 13862 + bitsize: 2 +} +member { + id: 0x5d29f448 + name: "fastopen_connect" + type_id: 0x295c7202 + offset: 13859 + bitsize: 1 +} +member { + id: 0x72c8b468 + name: "fastopen_no_cookie" + type_id: 0x295c7202 + offset: 13860 + bitsize: 1 +} +member { + id: 0x349100e3 + name: "fastopen_req" + type_id: 0x04a9576c + offset: 18688 +} +member { + id: 0x7a4a99f1 + name: "fastopen_rsk" + type_id: 0x27847a9a + offset: 18752 +} +member { + id: 0x5aaa76bb + name: "fastopenq" + type_id: 0xce180920 + offset: 320 +} +member { + id: 0xa6e81f22 + name: "fastreuse" + type_id: 0x5ab350f8 + offset: 112 +} +member { + id: 0x244da0b8 + name: "fastreuseport" + type_id: 0x5ab350f8 + offset: 120 +} +member { + id: 0x73b4d4d5 + name: "fastuid" + type_id: 0xe90b32b7 + offset: 128 +} member { id: 0xa3521312 name: "fasync" @@ -84149,6 +85637,12 @@ member { type_id: 0x92233392 offset: 7744 } +member { + id: 0xc58a570e + name: "features" + type_id: 0x92233392 + offset: 2496 +} member { id: 0xc5a16345 name: "features" @@ -84353,6 +85847,11 @@ member { type_id: 0x318f8bcb offset: 256 } +member { + id: 0x4e824c05 + name: "fh" + type_id: 0x982afc69 +} member { id: 0x2db4ae9c name: "fh_list" @@ -84968,6 +86467,12 @@ member { type_id: 0x7dbd382e offset: 352 } +member { + id: 0x784a4b9b + name: "fields" + type_id: 0x19df035f + offset: 128 +} member { id: 0x788054c9 name: "fields" @@ -84991,6 +86496,12 @@ member { type_id: 0x2db9a683 offset: 256 } +member { + id: 0x361d56de + name: "fields_count" + type_id: 0x4585663f + offset: 192 +} member { id: 0x53870b05 name: "fiemap" @@ -85881,6 +87392,12 @@ member { type_id: 0x3846864c offset: 6720 } +member { + id: 0xc8ee40be + name: "first_tx_mstamp" + type_id: 0x92233392 + offset: 15360 +} member { id: 0x7fb051f9 name: "firstuse" @@ -85967,6 +87484,18 @@ member { type_id: 0x0ece1cac offset: 832 } +member { + id: 0x75129e6a + name: "fl" + type_id: 0x0bbb7f1b + offset: 64 +} +member { + id: 0x75577b27 + name: "fl" + type_id: 0x4e5da42b + offset: 448 +} member { id: 0x0476553f name: "fl_blocked_member" @@ -86049,6 +87578,12 @@ member { type_id: 0x3d3ea9eb offset: 1408 } +member { + id: 0x1f4e61c9 + name: "fl_net" + type_id: 0x0ca27481 + offset: 768 +} member { id: 0xda5f8429 name: "fl_ops" @@ -87537,6 +89072,12 @@ member { type_id: 0x0d9a8731 offset: 1600 } +member { + id: 0x5ef8d6d5 + name: "flash_update" + type_id: 0x2d16aeaf + offset: 1600 +} member { id: 0x4ad49fc7 name: "flat" @@ -87573,6 +89114,11 @@ member { type_id: 0x03e0374b offset: 64 } +member { + id: 0xdf2fd72b + name: "flavour" + type_id: 0x03e0374b +} member { id: 0x9a18c6a2 name: "flc_flock" @@ -87656,6 +89202,12 @@ member { type_id: 0xb3e7bac9 offset: 416 } +member { + id: 0x2ac20e0b + name: "flow_label" + type_id: 0xe276adef + offset: 384 +} member { id: 0xe809ed63 name: "flow_limit" @@ -88825,6 +90377,12 @@ member { type_id: 0x06835e9c offset: 1792 } +member { + id: 0x3c1c76af + name: "frag_size" + type_id: 0xe62ebf07 + offset: 416 +} member { id: 0x3c33517f name: "frag_size" @@ -88919,6 +90477,12 @@ member { type_id: 0x34544a3f offset: 192 } +member { + id: 0xe25ba6f2 + name: "fragsize" + type_id: 0x4585663f + offset: 128 +} member { id: 0x16107977 name: "frame" @@ -89637,6 +91201,13 @@ member { type_id: 0x038cb58c offset: 64 } +member { + id: 0x0ccb8adb + name: "freebind" + type_id: 0xb3e7bac9 + offset: 7106 + bitsize: 1 +} member { id: 0xedafcd8e name: "freehigh" @@ -90078,6 +91649,13 @@ member { type_id: 0x0fd41724 offset: 384 } +member { + id: 0xdaf769b4 + name: "frto" + type_id: 0x295c7202 + offset: 13871 + bitsize: 1 +} member { id: 0x9442b15a name: "fs" @@ -90821,6 +92399,11 @@ member { type_id: 0x0faae5b1 offset: 96 } +member { + id: 0x91e86fed + name: "fw" + type_id: 0x33011141 +} member { id: 0x51f9c40d name: "fw_download" @@ -91431,6 +93014,18 @@ member { name: "generic" type_id: 0x09dc021e } +member { + id: 0x4257f83b + name: "generic" + type_id: 0x6d7f5ff6 + offset: 80 +} +member { + id: 0x4257f846 + name: "generic" + type_id: 0x6d7f5ff6 + offset: 64 +} member { id: 0x42d6db26 name: "generic" @@ -92140,12 +93735,24 @@ member { type_id: 0x2db9b3cf offset: 128 } +member { + id: 0x1d9b9b9d + name: "get_info" + type_id: 0x2e735a06 + offset: 320 +} member { id: 0x1d9baad0 name: "get_info" type_id: 0x2e43a9f5 offset: 640 } +member { + id: 0xbaa156f0 + name: "get_info_size" + type_id: 0x2cd9dff0 + offset: 384 +} member { id: 0x8e932e8e name: "get_ino_and_lblk_bits" @@ -92479,6 +94086,12 @@ member { type_id: 0x0cbb9c80 offset: 320 } +member { + id: 0xcf06c106 + name: "get_page" + type_id: 0x2b4b15b4 + offset: 128 +} member { id: 0xacf61961 name: "get_params" @@ -93156,6 +94769,12 @@ member { type_id: 0x2c451522 offset: 640 } +member { + id: 0xd9ad3ae7 + name: "getsockopt" + type_id: 0x2c451522 + offset: 512 +} member { id: 0xd9adeb4d name: "getsockopt" @@ -93304,6 +94923,12 @@ member { type_id: 0xe742397c offset: 576 } +member { + id: 0x55f132cc + name: "global" + type_id: 0x6d7f5ff6 + offset: 224 +} member { id: 0x9e65d647 name: "global" @@ -93635,6 +95260,12 @@ member { type_id: 0x1f3595db offset: 128 } +member { + id: 0x62d28eb5 + name: "graceful_period" + type_id: 0x92233392 + offset: 832 +} member { id: 0x0277381e name: "graft" @@ -94129,6 +95760,18 @@ member { type_id: 0x2584a3b9 offset: 2240 } +member { + id: 0x085eba8a + name: "gso_segs" + type_id: 0x914dbfdc + offset: 12304 +} +member { + id: 0xeaa4b2c9 + name: "gso_size" + type_id: 0xe8034002 + offset: 304 +} member { id: 0xcf0db7be name: "gso_skb" @@ -95718,6 +97361,19 @@ member { type_id: 0x295c7202 offset: 480 } +member { + id: 0x3cd68edd + name: "hdrincl" + type_id: 0xb3e7bac9 + offset: 7107 + bitsize: 1 +} +member { + id: 0xd608b573 + name: "hdrlen" + type_id: 0xb3e7bac9 + offset: 8 +} member { id: 0xd6dc741c name: "hdrlen" @@ -96117,6 +97773,17 @@ member { name: "headers" type_id: 0x0524ca5a } +member { + id: 0x614c39f2 + name: "headers" + type_id: 0x0f657fc1 +} +member { + id: 0x958f08da + name: "headers_count" + type_id: 0x4585663f + offset: 64 +} member { id: 0x3e17b5ef name: "headroom" @@ -96164,6 +97831,12 @@ member { type_id: 0xc9082b19 offset: 896 } +member { + id: 0x768a691a + name: "health_state" + type_id: 0x295c7202 + offset: 912 +} member { id: 0x049198e2 name: "heap" @@ -96401,6 +98074,12 @@ member { type_id: 0x33756485 offset: 64 } +member { + id: 0x39a33a5e + name: "hi" + type_id: 0xe8034002 + offset: 16 +} member { id: 0xf5cc8294 name: "hibern8_exit_cnt" @@ -96533,6 +98212,12 @@ member { type_id: 0x5395485e offset: 3712 } +member { + id: 0x60f3e5b5 + name: "high_seq" + type_id: 0xc9082b19 + offset: 17856 +} member { id: 0x15795ada name: "high_speed" @@ -96569,6 +98254,12 @@ member { type_id: 0x3b04bc55 offset: 12992 } +member { + id: 0x6da3106a + name: "highest_sack" + type_id: 0x054f691a + offset: 17728 +} member { id: 0x2ca966e1 name: "highest_zoneidx" @@ -96888,12 +98579,38 @@ member { type_id: 0xe8a3834b offset: 1152 } +member { + id: 0x46cd5abc + name: "hop_limit" + type_id: 0x007e8ce4 + offset: 455 + bitsize: 9 +} member { id: 0x9f4d6a46 name: "hop_limit" type_id: 0x0faae5b1 offset: 32 } +member { + id: 0x9f6b950b + name: "hop_limit" + type_id: 0x295c7202 + offset: 64 +} +member { + id: 0x111085fe + name: "hopopt" + type_id: 0x33642722 + offset: 128 +} +member { + id: 0xede7771d + name: "hopopts" + type_id: 0xe8034002 + offset: 6 + bitsize: 1 +} member { id: 0xe90d2c02 name: "hops" @@ -99022,6 +100739,11 @@ member { offset: 3664 bitsize: 1 } +member { + id: 0xe50fbded + name: "ib_net" + type_id: 0xb335d16f +} member { id: 0xe8f0d6c1 name: "ib_window_map" @@ -99243,6 +100965,201 @@ member { type_id: 0x80c20070 offset: 192 } +member { + id: 0x2a778fa0 + name: "icsk_accept_queue" + type_id: 0xf05a506e + offset: 8704 +} +member { + id: 0xc36d8395 + name: "icsk_ack" + type_id: 0x260445a5 + offset: 11008 +} +member { + id: 0xeb6a5fa1 + name: "icsk_af_ops" + type_id: 0x384d1346 + offset: 10624 +} +member { + id: 0xb27d04f5 + name: "icsk_backoff" + type_id: 0xb3e7bac9 + offset: 10968 +} +member { + id: 0xf1a367c5 + name: "icsk_bind2_hash" + type_id: 0x0a67a4e3 + offset: 9408 +} +member { + id: 0xa53e6076 + name: "icsk_bind_hash" + type_id: 0x33086ec3 + offset: 9344 +} +member { + id: 0x8e756dfb + name: "icsk_ca_dst_locked" + type_id: 0xb3e7bac9 + offset: 10951 + bitsize: 1 +} +member { + id: 0x9b3f0555 + name: "icsk_ca_initialized" + type_id: 0xb3e7bac9 + offset: 10949 + bitsize: 1 +} +member { + id: 0x2b917283 + name: "icsk_ca_ops" + type_id: 0x30ba0612 + offset: 10560 +} +member { + id: 0xa86967ec + name: "icsk_ca_priv" + type_id: 0x62a5e001 + offset: 11456 +} +member { + id: 0x5c570222 + name: "icsk_ca_setsockopt" + type_id: 0xb3e7bac9 + offset: 10950 + bitsize: 1 +} +member { + id: 0x8adfff2f + name: "icsk_ca_state" + type_id: 0xb3e7bac9 + offset: 10944 + bitsize: 5 +} +member { + id: 0x411180b7 + name: "icsk_clean_acked" + type_id: 0x0fab66ce + offset: 10816 +} +member { + id: 0xcfd1f1ed + name: "icsk_delack_max" + type_id: 0xe62ebf07 + offset: 10496 +} +member { + id: 0xbf3d6991 + name: "icsk_delack_timer" + type_id: 0xd298e888 + offset: 9984 +} +member { + id: 0xd7cc2503 + name: "icsk_ext_hdr_len" + type_id: 0xe8034002 + offset: 10992 +} +member { + id: 0x9bd0d4a0 + name: "icsk_inet" + type_id: 0xd2a4529d +} +member { + id: 0xc75c6970 + name: "icsk_mtup" + type_id: 0x249bcdf3 + offset: 11200 +} +member { + id: 0xfd5174f1 + name: "icsk_pending" + type_id: 0xb3e7bac9 + offset: 10960 +} +member { + id: 0x9796567d + name: "icsk_pmtu_cookie" + type_id: 0xe62ebf07 + offset: 10528 +} +member { + id: 0x2d061585 + name: "icsk_probes_out" + type_id: 0xb3e7bac9 + offset: 10984 +} +member { + id: 0xf4f5c9e8 + name: "icsk_probes_tstamp" + type_id: 0xc9082b19 + offset: 11328 +} +member { + id: 0x3adf52b3 + name: "icsk_retransmit_timer" + type_id: 0xd298e888 + offset: 9536 +} +member { + id: 0x6bd77d33 + name: "icsk_retransmits" + type_id: 0xb3e7bac9 + offset: 10952 +} +member { + id: 0xaa84a388 + name: "icsk_rto" + type_id: 0xe62ebf07 + offset: 10432 +} +member { + id: 0x7c9184fd + name: "icsk_rto_min" + type_id: 0xe62ebf07 + offset: 10464 +} +member { + id: 0x2446b1e6 + name: "icsk_syn_retries" + type_id: 0xb3e7bac9 + offset: 10976 +} +member { + id: 0x5392fe03 + name: "icsk_sync_mss" + type_id: 0x383bad14 + offset: 10880 +} +member { + id: 0xe54062f3 + name: "icsk_timeout" + type_id: 0x33756485 + offset: 9472 +} +member { + id: 0x69ab5d87 + name: "icsk_ulp_data" + type_id: 0x18bd6530 + offset: 10752 +} +member { + id: 0x50d22351 + name: "icsk_ulp_ops" + type_id: 0x378dbf55 + offset: 10688 +} +member { + id: 0x973a1269 + name: "icsk_user_timeout" + type_id: 0xc9082b19 + offset: 11360 +} member { id: 0xa75f3275 name: "icv_len" @@ -99698,6 +101615,18 @@ member { name: "id" type_id: 0x914dbfdc } +member { + id: 0xccbe65b2 + name: "id" + type_id: 0x914dbfdc + offset: 80 +} +member { + id: 0xccbe65cf + name: "id" + type_id: 0x914dbfdc + offset: 64 +} member { id: 0xccc14505 name: "id" @@ -101966,6 +103895,11 @@ member { type_id: 0xe62ebf07 offset: 128 } +member { + id: 0xadf00094 + name: "index" + type_id: 0xc9082b19 +} member { id: 0xadf006ed name: "index" @@ -102044,6 +103978,35 @@ member { type_id: 0x1d33485a offset: 4992 } +member { + id: 0x07676cab + name: "inet_conn" + type_id: 0x82dbb487 +} +member { + id: 0x78639f81 + name: "inet_id" + type_id: 0xe8034002 + offset: 7056 +} +member { + id: 0x38f59a08 + name: "inet_opt" + type_id: 0x38090ad2 + offset: 6976 +} +member { + id: 0x8be10b49 + name: "inet_saddr" + type_id: 0xe276adef + offset: 6912 +} +member { + id: 0x674b03be + name: "inet_sport" + type_id: 0x7584e7da + offset: 7040 +} member { id: 0x3e2089f0 name: "inexact_bins" @@ -102253,6 +104216,12 @@ member { type_id: 0x4585663f offset: 224 } +member { + id: 0xe0c4d82e + name: "info_get" + type_id: 0x2d0679a1 + offset: 1536 +} member { id: 0x2f8cd3f3 name: "info_ident" @@ -102503,6 +104472,12 @@ member { type_id: 0x2c24424a offset: 384 } +member { + id: 0x1ac6e8a5 + name: "init" + type_id: 0x2c24424a + offset: 128 +} member { id: 0x1ac72504 name: "init" @@ -102628,6 +104603,12 @@ member { offset: 608 bitsize: 1 } +member { + id: 0x3ecaad84 + name: "init_action" + type_id: 0x322b7a90 + offset: 32 +} member { id: 0xc9830a15 name: "init_addr" @@ -102658,6 +104639,12 @@ member { type_id: 0x0c7ce901 offset: 64 } +member { + id: 0xb36eb0c7 + name: "init_burst" + type_id: 0x92233392 + offset: 128 +} member { id: 0xed4a99de name: "init_callback" @@ -102712,12 +104699,23 @@ member { type_id: 0x295c7202 offset: 128 } +member { + id: 0xedc364a3 + name: "init_fs" + type_id: 0x22b357e9 +} member { id: 0x35f4d7c6 name: "init_fs_context" type_id: 0x2f05fd8b offset: 128 } +member { + id: 0xa4c7afe2 + name: "init_group_id" + type_id: 0x914dbfdc + offset: 192 +} member { id: 0xf587a1e9 name: "init_hctx" @@ -102772,12 +104770,24 @@ member { type_id: 0xc9082b19 offset: 864 } +member { + id: 0xf53cc107 + name: "init_policer_id" + type_id: 0xc9082b19 + offset: 96 +} member { id: 0x015559ae name: "init_qp_minus26" type_id: 0x901eaf6a offset: 32 } +member { + id: 0x2b41bb63 + name: "init_rate" + type_id: 0x92233392 + offset: 64 +} member { id: 0xf8fed40c name: "init_ready" @@ -102807,6 +104817,12 @@ member { type_id: 0x3292450a offset: 64 } +member { + id: 0xcc9b87bc + name: "init_shared_fs" + type_id: 0x2ce2190b + offset: 64 +} member { id: 0x7ab1d042 name: "init_speed" @@ -103135,6 +105151,11 @@ member { type_id: 0xd5df6730 offset: 256 } +member { + id: 0x0ca7cb72 + name: "ino" + type_id: 0xee72cbfc +} member { id: 0x0cdb9a21 name: "ino" @@ -104314,6 +106335,18 @@ member { type_id: 0x0c5a56fb offset: 512 } +member { + id: 0x6a15223b + name: "invalidate_fs" + type_id: 0x08c420f1 + offset: 384 +} +member { + id: 0x6f43a794 + name: "invalidate_inode" + type_id: 0x080e08ce + offset: 320 +} member { id: 0x17dabd89 name: "invalidate_lock" @@ -104326,6 +106359,12 @@ member { type_id: 0x475137a2 offset: 576 } +member { + id: 0x107f64d3 + name: "invalidate_page" + type_id: 0x080d3f98 + offset: 256 +} member { id: 0xa4356576 name: "invalidate_seq" @@ -105519,6 +107558,17 @@ member { type_id: 0x23317b59 offset: 256 } +member { + id: 0xce9a5c98 + name: "ipi6_addr" + type_id: 0x6d25e07f +} +member { + id: 0x8e98680e + name: "ipi6_ifindex" + type_id: 0x6720d32f + offset: 128 +} member { id: 0xe69d21c0 name: "ipi_list" @@ -105594,6 +107644,11 @@ member { type_id: 0x34544a3f offset: 1152 } +member { + id: 0xfa946861 + name: "ipv4_nh" + type_id: 0xc9082b19 +} member { id: 0x3b9e102b name: "ipv6" @@ -105622,6 +107677,12 @@ member { name: "ipv6" type_id: 0x09547003 } +member { + id: 0xe2141007 + name: "ipv6_ac_list" + type_id: 0x01ae5751 + offset: 768 +} member { id: 0x12832f3f name: "ipv6_dev_find" @@ -105634,12 +107695,29 @@ member { type_id: 0x221aed72 offset: 128 } +member { + id: 0x1e958d31 + name: "ipv6_fl_list" + type_id: 0x3f985801 + offset: 832 +} member { id: 0xcf78c1e2 name: "ipv6_fragment" type_id: 0x2d271bc7 offset: 1344 } +member { + id: 0xfce07b0f + name: "ipv6_mc_list" + type_id: 0x12e0cbae + offset: 704 +} +member { + id: 0xab39140b + name: "ipv6_nh" + type_id: 0x6d25e07f +} member { id: 0xdf622691 name: "ipv6_route_input" @@ -106503,6 +108581,13 @@ member { offset: 9248 bitsize: 1 } +member { + id: 0xb9615f80 + name: "is_changed" + type_id: 0x5d8155a5 + offset: 98 + bitsize: 1 +} member { id: 0xcf3f1b2e name: "is_child_subreaper" @@ -106534,6 +108619,13 @@ member { type_id: 0x6d7f5ff6 offset: 128 } +member { + id: 0xb9645bc8 + name: "is_cwnd_limited" + type_id: 0x295c7202 + offset: 13887 + bitsize: 1 +} member { id: 0x454d50bd name: "is_dead" @@ -106677,6 +108769,13 @@ member { type_id: 0x6d7f5ff6 offset: 64 } +member { + id: 0x1facb5a4 + name: "is_icsk" + type_id: 0xb3e7bac9 + offset: 7105 + bitsize: 1 +} member { id: 0xbbefba04 name: "is_initialized" @@ -106974,6 +109073,13 @@ member { type_id: 0x6d7f5ff6 offset: 968 } +member { + id: 0xb9f127f6 + name: "is_sack_reneg" + type_id: 0x295c7202 + offset: 13861 + bitsize: 1 +} member { id: 0x7855a324 name: "is_second_field" @@ -107021,6 +109127,13 @@ member { type_id: 0x295c7202 offset: 464 } +member { + id: 0x1e6a6587 + name: "is_strictroute" + type_id: 0x5d8155a5 + offset: 96 + bitsize: 1 +} member { id: 0x3fe7857f name: "is_string" @@ -107366,6 +109479,11 @@ member { name: "item" type_id: 0x3f8fe745 } +member { + id: 0x990317f0 + name: "item_list" + type_id: 0xd3c80119 +} member { id: 0xa70d7362 name: "item_ptr" @@ -107918,6 +110036,24 @@ member { type_id: 0x0f054e36 offset: 704 } +member { + id: 0xb4c1a226 + name: "keepalive_intvl" + type_id: 0x4585663f + offset: 18144 +} +member { + id: 0xeb2f3b5f + name: "keepalive_probes" + type_id: 0x295c7202 + offset: 14648 +} +member { + id: 0x9e7c1e77 + name: "keepalive_time" + type_id: 0x4585663f + offset: 18112 +} member { id: 0x3f65622e name: "keepout" @@ -107930,6 +110066,12 @@ member { type_id: 0x340dea21 offset: 8384 } +member { + id: 0x632a4ba2 + name: "kern_flags" + type_id: 0xc9082b19 + offset: 256 +} member { id: 0x3afd0925 name: "kern_hyp_va" @@ -108153,6 +110295,11 @@ member { type_id: 0x92233392 offset: 640 } +member { + id: 0x20c5e9f7 + name: "key" + type_id: 0x93e3596e +} member { id: 0x20c661f5 name: "key" @@ -109129,6 +111276,12 @@ member { type_id: 0x295c7202 offset: 328 } +member { + id: 0xe6f3661d + name: "l3mdev" + type_id: 0x6720d32f + offset: 64 +} member { id: 0xa2b82643 name: "l3num" @@ -109195,6 +111348,12 @@ member { type_id: 0x3e10b518 offset: 8768 } +member { + id: 0x05cb6176 + name: "label" + type_id: 0xe276adef + offset: 64 +} member { id: 0x05cb61ce name: "label" @@ -109547,6 +111706,12 @@ member { type_id: 0x92233392 offset: 2624 } +member { + id: 0x8762b004 + name: "last_delivered" + type_id: 0xc9082b19 + offset: 128 +} member { id: 0x0c7f9894 name: "last_delta" @@ -109802,6 +111967,12 @@ member { type_id: 0x33756485 offset: 128 } +member { + id: 0x41099e1a + name: "last_oow_ack_time" + type_id: 0xc9082b19 + offset: 12960 +} member { id: 0x7c2533b6 name: "last_overrun" @@ -109897,6 +112068,12 @@ member { type_id: 0x33756485 offset: 5504 } +member { + id: 0x41fdc1b3 + name: "last_recovery_ts" + type_id: 0x92233392 + offset: 1216 +} member { id: 0xc6b95840 name: "last_reset" @@ -109946,6 +112123,12 @@ member { type_id: 0x3ef55b88 offset: 64 } +member { + id: 0x4c233807 + name: "last_seg_size" + type_id: 0xe8034002 + offset: 160 +} member { id: 0xadd33b5a name: "last_seq" @@ -110142,6 +112325,12 @@ member { type_id: 0xedf277ba offset: 64 } +member { + id: 0xccd48510 + name: "lastuse" + type_id: 0x33756485 + offset: 640 +} member { id: 0xccd48a1b name: "lastuse" @@ -110970,6 +113159,12 @@ member { type_id: 0x0baa70a7 offset: 192 } +member { + id: 0xb82c6bed + name: "len" + type_id: 0x29b77961 + offset: 128 +} member { id: 0xb82c8b76 name: "len" @@ -111275,6 +113470,12 @@ member { type_id: 0x6720d32f offset: 64 } +member { + id: 0xb50a4f6b + name: "length" + type_id: 0x6720d32f + offset: 160 +} member { id: 0xb518ea7e name: "length" @@ -111852,11 +114053,23 @@ member { offset: 576 } member { - id: 0xd1c402eb + id: 0xd1e477a3 name: "linecard" - type_id: 0x2a0586b2 + type_id: 0x0a70ce1b offset: 2688 } +member { + id: 0x2bafedce + name: "linecard_list" + type_id: 0xd3c80119 + offset: 1920 +} +member { + id: 0x66da3728 + name: "linecards_lock" + type_id: 0xa7c362b0 + offset: 2048 +} member { id: 0xc4fd637a name: "linedur_ns" @@ -111888,6 +114101,18 @@ member { type_id: 0xc9082b19 offset: 8192 } +member { + id: 0xe93fdbc8 + name: "linger" + type_id: 0x33756485 + offset: 320 +} +member { + id: 0x0ab38392 + name: "linger2" + type_id: 0x6720d32f + offset: 18176 +} member { id: 0x55610d26 name: "link" @@ -112999,6 +115224,11 @@ member { offset: 34 bitsize: 1 } +member { + id: 0x9f6503ee + name: "lo" + type_id: 0xe8034002 +} member { id: 0x9fbe75ca name: "lo" @@ -113204,6 +115434,12 @@ member { type_id: 0x2d2736e0 offset: 768 } +member { + id: 0x5b66efeb + name: "local_port_range" + type_id: 0x3fbb6cee + offset: 8512 +} member { id: 0x11369f07 name: "local_sdu_itime" @@ -113669,6 +115905,12 @@ member { type_id: 0xa7c362b0 offset: 1152 } +member { + id: 0x2d4b3330 + name: "lock" + type_id: 0xa7c362b0 + offset: 3200 +} member { id: 0x2d4b353f name: "lock" @@ -113918,6 +116160,12 @@ member { type_id: 0x1b44744f offset: 1280 } +member { + id: 0x5f5e621d + name: "lock_key" + type_id: 0x475137a2 + offset: 3584 +} member { id: 0x5f5e64df name: "lock_key" @@ -114583,6 +116831,18 @@ member { type_id: 0x299c4193 offset: 576 } +member { + id: 0x14a57188 + name: "lost" + type_id: 0xc9082b19 + offset: 15296 +} +member { + id: 0x36a89416 + name: "lost_cnt_hint" + type_id: 0x6720d32f + offset: 17792 +} member { id: 0xc431d6f2 name: "lost_events" @@ -114611,12 +116871,24 @@ member { name: "lost_msgs" type_id: 0x6f3d464c } +member { + id: 0x2d8724a1 + name: "lost_out" + type_id: 0xc9082b19 + offset: 15680 +} member { id: 0xa0d3e60e name: "lost_samples" type_id: 0x1f4573ef offset: 7808 } +member { + id: 0x86cd98a0 + name: "lost_skb_hint" + type_id: 0x054f691a + offset: 16896 +} member { id: 0xe4294f6c name: "low" @@ -114889,6 +117161,12 @@ member { type_id: 0x1dd474ea offset: 832 } +member { + id: 0x9d3fc94e + name: "lrcvtime" + type_id: 0xe62ebf07 + offset: 128 +} member { id: 0x5434db0f name: "lru" @@ -115006,6 +117284,12 @@ member { type_id: 0x4585663f offset: 1312 } +member { + id: 0xcaaa728e + name: "lsndtime" + type_id: 0xc9082b19 + offset: 12928 +} member { id: 0xabed406f name: "lsr_save_mask" @@ -115895,6 +118179,12 @@ member { name: "map" type_id: 0x04b193cc } +member { + id: 0x8df2c9e6 + name: "map" + type_id: 0x04b193cc + offset: 128 +} member { id: 0x8df87907 name: "map" @@ -116111,6 +118401,12 @@ member { name: "map_id" type_id: 0xe62ebf07 } +member { + id: 0x86e8bd6c + name: "map_id" + type_id: 0xc9082b19 + offset: 192 +} member { id: 0xa32be5db name: "map_ifindex" @@ -116378,6 +118674,12 @@ member { type_id: 0x6e73208e offset: 192 } +member { + id: 0x2a093f90 + name: "map_type" + type_id: 0x6e73208e + offset: 224 +} member { id: 0x2a81612b name: "map_type" @@ -116496,6 +118798,12 @@ member { type_id: 0xc9082b19 offset: 3008 } +member { + id: 0x8b645ad4 + name: "mapping_type" + type_id: 0xe09c0936 + offset: 128 +} member { id: 0x4971df2a name: "mappings" @@ -116567,6 +118875,12 @@ member { name: "mark" type_id: 0xc9082b19 } +member { + id: 0x8196ad18 + name: "mark" + type_id: 0xc9082b19 + offset: 384 +} member { id: 0x81b98a1e name: "mark" @@ -117575,6 +119889,12 @@ member { type_id: 0x4585663f offset: 96 } +member { + id: 0x9c062023 + name: "max_burst" + type_id: 0x92233392 + offset: 320 +} member { id: 0x9c5d053e name: "max_burst" @@ -118373,6 +120693,12 @@ member { type_id: 0x4585663f offset: 96 } +member { + id: 0x1d340096 + name: "max_packets_out" + type_id: 0xc9082b19 + offset: 14560 +} member { id: 0xc09a441d name: "max_page" @@ -118491,6 +120817,12 @@ member { type_id: 0x4585663f offset: 224 } +member { + id: 0x6bf829f7 + name: "max_qlen" + type_id: 0x6720d32f + offset: 192 +} member { id: 0xfbb3d064 name: "max_queue" @@ -118521,6 +120853,12 @@ member { type_id: 0x33756485 offset: 320 } +member { + id: 0x5cea623b + name: "max_rate" + type_id: 0x92233392 + offset: 192 +} member { id: 0xf3d009b3 name: "max_ratio" @@ -118873,6 +121211,12 @@ member { type_id: 0x295c7202 offset: 672 } +member { + id: 0x2a2e382b + name: "max_snapshots" + type_id: 0xc9082b19 + offset: 832 +} member { id: 0x9213bcc2 name: "max_socks" @@ -119204,6 +121548,12 @@ member { type_id: 0xc9082b19 offset: 2048 } +member { + id: 0xb0b5b654 + name: "max_window" + type_id: 0xc9082b19 + offset: 13376 +} member { id: 0x02a4136b name: "max_workers" @@ -119576,6 +121926,26 @@ member { type_id: 0x4f5972f9 offset: 5056 } +member { + id: 0x5a22c9ad + name: "mc_addr" + type_id: 0xe276adef + offset: 7200 +} +member { + id: 0x1b81e20c + name: "mc_all" + type_id: 0xe8034002 + offset: 573 + bitsize: 1 +} +member { + id: 0x1bda0ea3 + name: "mc_all" + type_id: 0xb3e7bac9 + offset: 7110 + bitsize: 1 +} member { id: 0xedd041f2 name: "mc_autojoin_sk" @@ -119642,12 +122012,24 @@ member { type_id: 0xf1159c31 offset: 1728 } +member { + id: 0x02fcf451 + name: "mc_index" + type_id: 0x6720d32f + offset: 7168 +} member { id: 0x9c4c6ca6 name: "mc_list" type_id: 0x2d5e3e76 offset: 192 } +member { + id: 0x9c6a8ab2 + name: "mc_list" + type_id: 0x0bbfad26 + offset: 7232 +} member { id: 0x9c6ad1bd name: "mc_list" @@ -119660,6 +122042,20 @@ member { type_id: 0xa7c362b0 offset: 6528 } +member { + id: 0xa582fe9b + name: "mc_loop" + type_id: 0xe8034002 + offset: 464 + bitsize: 1 +} +member { + id: 0xa5d9163f + name: "mc_loop" + type_id: 0xb3e7bac9 + offset: 7108 + bitsize: 1 +} member { id: 0x99f606f1 name: "mc_maxdelay" @@ -119744,6 +122140,12 @@ member { type_id: 0xf313e71a offset: 352 } +member { + id: 0x7008fda6 + name: "mc_ttl" + type_id: 0xb3e7bac9 + offset: 7088 +} member { id: 0xd4582df4 name: "mc_v1_seen" @@ -119821,6 +122223,19 @@ member { type_id: 0xf1159c31 offset: 576 } +member { + id: 0x34d8f2b6 + name: "mcast_hops" + type_id: 0x007e8ce4 + offset: 471 + bitsize: 9 +} +member { + id: 0xe14bd1fe + name: "mcast_oif" + type_id: 0x6720d32f + offset: 512 +} member { id: 0x2cf10ddb name: "mcgrp_offset" @@ -119957,6 +122372,18 @@ member { type_id: 0x16239d0c offset: 64 } +member { + id: 0xf098d631 + name: "mdev_max_us" + type_id: 0xc9082b19 + offset: 14208 +} +member { + id: 0x00d04522 + name: "mdev_us" + type_id: 0xc9082b19 + offset: 14176 +} member { id: 0xc96faa23 name: "mdio" @@ -120788,6 +123215,12 @@ member { type_id: 0x1e937ceb offset: 704 } +member { + id: 0xd492332a + name: "metadata_cap" + type_id: 0xc9082b19 + offset: 224 +} member { id: 0xf7b6b92a name: "metadata_ops" @@ -121241,6 +123674,12 @@ member { type_id: 0xc9082b19 offset: 96 } +member { + id: 0x7b580056 + name: "min_burst" + type_id: 0x92233392 + offset: 384 +} member { id: 0x603d49ac name: "min_capacity" @@ -121414,6 +123853,12 @@ member { type_id: 0x295c7202 offset: 16 } +member { + id: 0x78ae54cb + name: "min_hopcount" + type_id: 0xb3e7bac9 + offset: 576 +} member { id: 0x402764fb name: "min_hw_heartbeat_ms" @@ -121502,6 +123947,12 @@ member { type_id: 0x295c7202 offset: 8 } +member { + id: 0x7843c8a8 + name: "min_rate" + type_id: 0x92233392 + offset: 256 +} member { id: 0x78e29322 name: "min_rate" @@ -121592,6 +124043,12 @@ member { type_id: 0x1a3a7059 offset: 384 } +member { + id: 0xa28c3827 + name: "min_ttl" + type_id: 0xb3e7bac9 + offset: 7080 +} member { id: 0x47fc27ee name: "min_tx_rate" @@ -124070,6 +126527,11 @@ member { type_id: 0x0483e6f8 offset: 384 } +member { + id: 0xe2057d5b + name: "msg" + type_id: 0x054f691a +} member { id: 0xe260f8b5 name: "msg" @@ -124483,6 +126945,23 @@ member { type_id: 0x914dbfdc offset: 1152 } +member { + id: 0x8571ffda + name: "mss_cache" + type_id: 0xc9082b19 + offset: 13408 +} +member { + id: 0x5ddbff68 + name: "mss_clamp" + type_id: 0x914dbfdc + offset: 176 +} +member { + id: 0xf3d1e1b3 + name: "mstamp" + type_id: 0x92233392 +} member { id: 0xeb62513d name: "mt" @@ -124566,6 +127045,24 @@ member { type_id: 0x0faae5b1 offset: 64 } +member { + id: 0x3641013e + name: "mtu_info" + type_id: 0xc9082b19 + offset: 18624 +} +member { + id: 0x541b592a + name: "mtu_probe" + type_id: 0x0904167f + offset: 18560 +} +member { + id: 0x2e3a46f9 + name: "mtu_reduced" + type_id: 0x0f626ee5 + offset: 640 +} member { id: 0x3a75162c name: "mtx" @@ -124608,6 +127105,12 @@ member { type_id: 0x6720d32f offset: 64 } +member { + id: 0xe7efca93 + name: "multi" + type_id: 0xf86b845e + offset: 64 +} member { id: 0xfcd3aab9 name: "multi_block" @@ -125517,6 +128020,12 @@ member { type_id: 0x42201dce offset: 128 } +member { + id: 0x0d994758 + name: "name" + type_id: 0x42201dce + offset: 512 +} member { id: 0x0d9948a1 name: "name" @@ -127351,6 +129860,12 @@ member { type_id: 0x4585663f offset: 384 } +member { + id: 0xe3a3de7e + name: "nested_devlink" + type_id: 0x0cf3d8fe + offset: 1024 +} member { id: 0x5f6b4acf name: "nested_policy" @@ -127426,6 +129941,18 @@ member { type_id: 0x92233392 offset: 30720 } +member { + id: 0x171ea46a + name: "net_frag_header_len" + type_id: 0x914dbfdc + offset: 400 +} +member { + id: 0x729f250d + name: "net_header_len" + type_id: 0x914dbfdc + offset: 384 +} member { id: 0x61d0c33e name: "net_id" @@ -127825,6 +130352,11 @@ member { name: "next" type_id: 0x3846864c } +member { + id: 0x11cc9887 + name: "next" + type_id: 0x3f985801 +} member { id: 0x11ccea6a name: "next" @@ -127926,6 +130458,12 @@ member { name: "next" type_id: 0x2d5e3e76 } +member { + id: 0x11e1e8dd + name: "next" + type_id: 0x12e0cbae + offset: 192 +} member { id: 0x11e57880 name: "next" @@ -128068,6 +130606,11 @@ member { type_id: 0x0b561305 offset: 64 } +member { + id: 0x11f8bba0 + name: "next" + type_id: 0x0bbb7f1b +} member { id: 0x11f8e110 name: "next" @@ -128301,6 +130844,11 @@ member { name: "next_rcu" type_id: 0x2d5e3e76 } +member { + id: 0x11613e69 + name: "next_rcu" + type_id: 0x0bbfad26 +} member { id: 0x4074d0ef name: "next_request" @@ -128401,6 +130949,11 @@ member { name: "nextevt" type_id: 0x92233392 } +member { + id: 0xe85e1d32 + name: "nexthdr" + type_id: 0xb3e7bac9 +} member { id: 0xe8c4a21b name: "nexthdr" @@ -128419,6 +130972,12 @@ member { type_id: 0x81cadb9e offset: 4608 } +member { + id: 0xe2d3a144 + name: "nexthop" + type_id: 0xe276adef + offset: 32 +} member { id: 0xd02f52bb name: "nf" @@ -128573,6 +131132,12 @@ member { name: "nh" type_id: 0x1f9da9a8 } +member { + id: 0x713b460f + name: "nh" + type_id: 0x1e9c55da + offset: 288 +} member { id: 0xdb1c1848 name: "nh_all" @@ -128601,6 +131166,11 @@ member { name: "nh_entry" type_id: 0x17b2105b } +member { + id: 0xd51ec347 + name: "nh_family" + type_id: 0xc9082b19 +} member { id: 0x9fb787a3 name: "nh_flags" @@ -129363,6 +131933,18 @@ member { name: "node" type_id: 0x6c32e522 } +member { + id: 0x0f3ca80d + name: "node" + type_id: 0x49a73111 + offset: 384 +} +member { + id: 0x0f3ca934 + name: "node" + type_id: 0x49a73111 + offset: 256 +} member { id: 0x0f3ca99f name: "node" @@ -129660,6 +132242,13 @@ member { name: "node_zones" type_id: 0x8cbe1332 } +member { + id: 0xb932820e + name: "nodefrag" + type_id: 0xb3e7bac9 + offset: 7111 + bitsize: 1 +} member { id: 0xd988ce91 name: "nodeinfo" @@ -129873,6 +132462,13 @@ member { offset: 86 bitsize: 1 } +member { + id: 0xa073f76a + name: "nonagle" + type_id: 0x295c7202 + offset: 13864 + bitsize: 4 +} member { id: 0x5cf54d0d name: "nonatomic" @@ -130275,6 +132871,12 @@ member { type_id: 0x04b89667 offset: 9088 } +member { + id: 0xfdfb52fb + name: "notsent_lowat" + type_id: 0xc9082b19 + offset: 15616 +} member { id: 0xf8489542 name: "now_frame" @@ -130939,6 +133541,12 @@ member { type_id: 0xfc0e1dbd offset: 768 } +member { + id: 0xe3b1b19e + name: "nr_pages" + type_id: 0x33756485 + offset: 64 +} member { id: 0xe3b1b2b8 name: "nr_pages" @@ -133092,6 +135700,12 @@ member { type_id: 0x4585663f offset: 6272 } +member { + id: 0x7cf21fa8 + name: "num_sacks" + type_id: 0x295c7202 + offset: 152 +} member { id: 0xbcb6b731 name: "num_sample_rates" @@ -133890,6 +136504,13 @@ member { type_id: 0x0e156b94 offset: 736 } +member { + id: 0x4f7607b0 + name: "odstopts" + type_id: 0xe8034002 + offset: 9 + bitsize: 1 +} member { id: 0xc03481fc name: "oemid" @@ -134681,6 +137302,13 @@ member { type_id: 0x087aa58e offset: 5632 } +member { + id: 0xba0eaaec + name: "ohopopts" + type_id: 0xe8034002 + offset: 7 + bitsize: 1 +} member { id: 0xa5064bbb name: "oifindex" @@ -135065,6 +137693,12 @@ member { type_id: 0xb0312d5a offset: 7776 } +member { + id: 0x78ec3163 + name: "ooo_last_skb" + type_id: 0x054f691a + offset: 17088 +} member { id: 0xdfd3d3d5 name: "ooo_okay" @@ -135882,6 +138516,12 @@ member { type_id: 0x3d1ec847 offset: 64 } +member { + id: 0xafb646e8 + name: "ops" + type_id: 0x3d46e073 + offset: 256 +} member { id: 0xafb6613a name: "ops" @@ -136043,6 +138683,12 @@ member { type_id: 0x32e20efe offset: 17088 } +member { + id: 0xafba248b + name: "ops" + type_id: 0x3121a074 + offset: 2432 +} member { id: 0xafba3fb1 name: "ops" @@ -136077,6 +138723,11 @@ member { name: "ops" type_id: 0x31c93a7f } +member { + id: 0xafbad944 + name: "ops" + type_id: 0x31d9e79a +} member { id: 0xafbb0869 name: "ops" @@ -136107,6 +138758,12 @@ member { type_id: 0x3068cb56 offset: 64 } +member { + id: 0xafbb76d0 + name: "ops" + type_id: 0x307eba5c + offset: 192 +} member { id: 0xafbba914 name: "ops" @@ -136288,17 +138945,46 @@ member { type_id: 0xa7c362b0 offset: 640 } +member { + id: 0xf64ae666 + name: "opt" + type_id: 0x00cc5f1f + offset: 64 +} member { id: 0xf6548174 name: "opt" type_id: 0x1eafac69 } +member { + id: 0xf6635680 + name: "opt" + type_id: 0x29719ae3 + offset: 128 +} member { id: 0xf6637b68 name: "opt" type_id: 0x295c7202 offset: 128 } +member { + id: 0xf676260e + name: "opt" + type_id: 0x3c087d20 + offset: 256 +} +member { + id: 0xf67626a5 + name: "opt" + type_id: 0x3c087d20 +} +member { + id: 0xf6762c03 + name: "opt" + type_id: 0x3c087d20 + offset: 896 +} member { id: 0xf6da3e67 name: "opt" @@ -136317,12 +139003,24 @@ member { type_id: 0x6d7f5ff6 offset: 392 } +member { + id: 0x5e1efe31 + name: "opt_flen" + type_id: 0xe8034002 + offset: 64 +} member { id: 0xb8d181f5 name: "opt_mapping_size" type_id: 0x2f5fcbf3 offset: 1472 } +member { + id: 0x00c73957 + name: "opt_nflen" + type_id: 0xe8034002 + offset: 80 +} member { id: 0xb435ce80 name: "opt_sectors" @@ -136385,6 +139083,12 @@ member { type_id: 0x295c7202 offset: 576 } +member { + id: 0x3cedbd03 + name: "optlen" + type_id: 0x5d8155a5 + offset: 64 +} member { id: 0x39c46a92 name: "opts" @@ -136692,6 +139396,13 @@ member { type_id: 0x54bb1a65 offset: 96 } +member { + id: 0x1e410881 + name: "osrcrt" + type_id: 0xe8034002 + offset: 1 + bitsize: 1 +} member { id: 0x9dbc540c name: "otg" @@ -136838,6 +139549,12 @@ member { type_id: 0x295c7202 offset: 1088 } +member { + id: 0x0b88a7b8 + name: "out_of_order_queue" + type_id: 0xeb923a9b + offset: 17024 +} member { id: 0x21d1ea91 name: "out_q_ctx" @@ -137203,6 +139920,12 @@ member { type_id: 0x6720d32f offset: 224 } +member { + id: 0xc099cc3c + name: "overwrite_mask" + type_id: 0xc9082b19 + offset: 128 +} member { id: 0x9e1f254a name: "overwrite_state" @@ -137505,6 +140228,12 @@ member { name: "owner" type_id: 0x30f06408 } +member { + id: 0x4ad6a726 + name: "owner" + type_id: 0x4bdbd862 + offset: 576 +} member { id: 0x4aeb46f7 name: "owner" @@ -137559,6 +140288,18 @@ member { type_id: 0xc6cbbd05 offset: 640 } +member { + id: 0xb8ff9609 + name: "owners" + type_id: 0x5e8dc7f4 + offset: 384 +} +member { + id: 0xb8ff9c83 + name: "owners" + type_id: 0x5e8dc7f4 + offset: 512 +} member { id: 0xa6673206 name: "p" @@ -137870,6 +140611,12 @@ member { name: "p_vp9_frame" type_id: 0x1f6d4933 } +member { + id: 0xb18c6cab + name: "pacing_timer" + type_id: 0xcd7704bf + offset: 15744 +} member { id: 0xa9322d92 name: "pack_id" @@ -137946,6 +140693,12 @@ member { type_id: 0xe62ebf07 offset: 64 } +member { + id: 0xfdbc865b + name: "packets_out" + type_id: 0xc9082b19 + offset: 14496 +} member { id: 0x716716c4 name: "packing" @@ -138151,6 +140904,13 @@ member { type_id: 0x3e3c1b86 offset: 8808 } +member { + id: 0xb13666fe + name: "padding" + type_id: 0xe8034002 + offset: 566 + bitsize: 1 +} member { id: 0x1366b916 name: "padding0" @@ -138797,6 +141557,12 @@ member { type_id: 0x6720d32f offset: 640 } +member { + id: 0xb8b3f43c + name: "param_list" + type_id: 0xd3c80119 + offset: 704 +} member { id: 0xb8ba1efc name: "param_lock" @@ -139299,6 +142065,12 @@ member { type_id: 0xe62ebf07 offset: 224 } +member { + id: 0xc70bed2a + name: "park" + type_id: 0x0aee7ba0 + offset: 512 +} member { id: 0x53dc4767 name: "park_pending" @@ -140746,6 +143518,11 @@ member { type_id: 0x9ec07527 offset: 17856 } +member { + id: 0xf97ca310 + name: "pending" + type_id: 0xb3e7bac9 +} member { id: 0xf98ac68d name: "pending" @@ -141569,6 +144346,11 @@ member { type_id: 0x03913382 offset: 52352 } +member { + id: 0x64bb7964 + name: "pfn" + type_id: 0x33756485 +} member { id: 0xeb463452 name: "pfn_base" @@ -141611,6 +144393,12 @@ member { type_id: 0x6e1fde8f offset: 64 } +member { + id: 0x6980d678 + name: "pfnum" + type_id: 0x914dbfdc + offset: 128 +} member { id: 0x88830a16 name: "pg" @@ -142377,6 +145165,11 @@ member { name: "pid" type_id: 0xe62ebf07 } +member { + id: 0x749120ed + name: "pid" + type_id: 0x18456730 +} member { id: 0x7491240c name: "pid" @@ -142700,6 +145493,12 @@ member { type_id: 0x290604c6 offset: 512 } +member { + id: 0xe47590e7 + name: "pinet6" + type_id: 0x13fe8737 + offset: 6848 +} member { id: 0x1762f1c8 name: "ping" @@ -142712,6 +145511,12 @@ member { type_id: 0x5d6e0aa2 offset: 4800 } +member { + id: 0x517ebeed + name: "pingpong" + type_id: 0xb3e7bac9 + offset: 16 +} member { id: 0xc9b75710 name: "pinned" @@ -143083,6 +145888,12 @@ member { type_id: 0xb3e7bac9 bitsize: 3 } +member { + id: 0xe8802f7b + name: "pktoptions" + type_id: 0x054f691a + offset: 960 +} member { id: 0x0a3be422 name: "pkts_acked" @@ -143451,6 +146262,12 @@ member { type_id: 0x21082bfc offset: 384 } +member { + id: 0x56639dd1 + name: "pmd" + type_id: 0x21082bfc + offset: 320 +} member { id: 0x569cedab name: "pmd" @@ -143518,6 +146335,19 @@ member { type_id: 0xf313e71a offset: 2368 } +member { + id: 0x6e852b14 + name: "pmtudisc" + type_id: 0xe8034002 + offset: 563 + bitsize: 3 +} +member { + id: 0x79ed9153 + name: "pmtudisc" + type_id: 0xb3e7bac9 + offset: 7096 +} member { id: 0x933349d1 name: "pmu" @@ -144390,6 +147220,11 @@ member { type_id: 0x4585663f offset: 64 } +member { + id: 0xe52eef97 + name: "pool_type" + type_id: 0xa7051d2f +} member { id: 0x6a296ea1 name: "pools" @@ -144421,6 +147256,12 @@ member { type_id: 0xfe384bcc offset: 2432 } +member { + id: 0x48322e2f + name: "port" + type_id: 0xc93e017b + offset: 96 +} member { id: 0x4848f266 name: "port" @@ -144489,6 +147330,12 @@ member { type_id: 0x44b60e20 offset: 384 } +member { + id: 0x48c075a0 + name: "port" + type_id: 0x3b68ec61 + offset: 64 +} member { id: 0x48cc7358 name: "port" @@ -144593,6 +147440,36 @@ member { name: "port_data" type_id: 0x18bd6530 } +member { + id: 0x9e84141c + name: "port_del" + type_id: 0x2d7ac448 + offset: 2560 +} +member { + id: 0xa5c2f472 + name: "port_fn_state_get" + type_id: 0x2e54f1b8 + offset: 2624 +} +member { + id: 0xeb46d6f6 + name: "port_fn_state_set" + type_id: 0x2e20981d + offset: 2688 +} +member { + id: 0x2e72e7e0 + name: "port_function_hw_addr_get" + type_id: 0x2e477ad3 + offset: 2368 +} +member { + id: 0x85af182d + name: "port_function_hw_addr_set" + type_id: 0x2e7ffbfe + offset: 2432 +} member { id: 0x97b320de name: "port_handed_over" @@ -144611,6 +147488,19 @@ member { type_id: 0xc9082b19 offset: 64 } +member { + id: 0xbf1e816a + name: "port_index" + type_id: 0x4585663f + offset: 32 +} +member { + id: 0x0317cd78 + name: "port_index_valid" + type_id: 0x295c7202 + offset: 144 + bitsize: 1 +} member { id: 0x1e504a04 name: "port_info" @@ -144641,6 +147531,12 @@ member { type_id: 0x0baa70a7 offset: 8256 } +member { + id: 0xcd6874e1 + name: "port_list" + type_id: 0xd3c80119 + offset: 64 +} member { id: 0x7daf8d82 name: "port_lock" @@ -144653,6 +147549,12 @@ member { type_id: 0x3e10b518 offset: 1216 } +member { + id: 0x90793300 + name: "port_new" + type_id: 0x2d044ee7 + offset: 2496 +} member { id: 0xe64fd4ef name: "port_num" @@ -144676,6 +147578,11 @@ member { name: "port_number" type_id: 0xc9082b19 } +member { + id: 0x217694f6 + name: "port_ops" + type_id: 0x33fd261b +} member { id: 0x2418a130 name: "port_power" @@ -144724,6 +147631,12 @@ member { type_id: 0x3bdc1cb2 offset: 8064 } +member { + id: 0xa22f8c42 + name: "port_split" + type_id: 0x2d000b85 + offset: 384 +} member { id: 0x2083fe73 name: "port_status" @@ -144771,6 +147684,18 @@ member { type_id: 0x2efc853f offset: 256 } +member { + id: 0xf43affcb + name: "port_type_set" + type_id: 0x2e5686ce + offset: 320 +} +member { + id: 0x5f87545a + name: "port_unsplit" + type_id: 0x2d0429c2 + offset: 448 +} member { id: 0x4b84c909 name: "port_usb" @@ -145858,6 +148783,12 @@ member { type_id: 0x39c49895 offset: 64 } +member { + id: 0xfcce6b61 + name: "pred_flags" + type_id: 0xe276adef + offset: 12320 +} member { id: 0xd9582306 name: "pred_probs" @@ -146817,6 +149748,12 @@ member { type_id: 0xc9082b19 offset: 128 } +member { + id: 0xa9ca3fe9 + name: "prior_cwnd" + type_id: 0xc9082b19 + offset: 15136 +} member { id: 0x8be7c123 name: "prior_delivered" @@ -146840,6 +149777,12 @@ member { name: "prior_mstamp" type_id: 0x92233392 } +member { + id: 0x17b8fb75 + name: "prior_ssthresh" + type_id: 0xc9082b19 + offset: 17824 +} member { id: 0x10027c29 name: "priority" @@ -146905,6 +149848,12 @@ member { type_id: 0x4585663f offset: 512 } +member { + id: 0x10dc10b1 + name: "priority" + type_id: 0x384f7d7c + offset: 288 +} member { id: 0x10ebf2d4 name: "priority" @@ -147078,6 +150027,12 @@ member { type_id: 0x18bd6530 offset: 448 } +member { + id: 0x59303e30 + name: "priv" + type_id: 0x391f15ea + offset: 64 +} member { id: 0x5935516c name: "priv" @@ -147126,6 +150081,12 @@ member { type_id: 0xc8e4d7d1 offset: 59520 } +member { + id: 0x59c303be + name: "priv" + type_id: 0xca2a51af + offset: 4096 +} member { id: 0x59c3092e name: "priv" @@ -147869,6 +150830,30 @@ member { type_id: 0xc9082b19 offset: 2208 } +member { + id: 0x934c941a + name: "probe_seq_end" + type_id: 0xc9082b19 + offset: 32 +} +member { + id: 0x45320605 + name: "probe_seq_start" + type_id: 0xc9082b19 +} +member { + id: 0x745418c4 + name: "probe_size" + type_id: 0xc9082b19 + offset: 64 + bitsize: 31 +} +member { + id: 0x60865bc2 + name: "probe_timestamp" + type_id: 0xc9082b19 + offset: 96 +} member { id: 0xf69ec1af name: "probe_type" @@ -149151,6 +152136,11 @@ member { type_id: 0x0483e6f8 offset: 320 } +member { + id: 0xd3c8aa61 + name: "provision" + type_id: 0x2d4c6881 +} member { id: 0x61ba1604 name: "proxy_ndp" @@ -149175,6 +152165,18 @@ member { type_id: 0xd298e888 offset: 4480 } +member { + id: 0x3ce5a47e + name: "prr_delivered" + type_id: 0xc9082b19 + offset: 15168 +} +member { + id: 0xe9e7b435 + name: "prr_out" + type_id: 0xc9082b19 + offset: 15200 +} member { id: 0x282acc7e name: "prrr" @@ -149417,11 +152419,23 @@ member { type_id: 0x32bee099 offset: 704 } +member { + id: 0xa17fe2dc + name: "pte" + type_id: 0x32bee099 + offset: 384 +} member { id: 0xa18e706b name: "pte" type_id: 0xc32dc55c } +member { + id: 0xce4422cd + name: "ptl" + type_id: 0x3654c061 + offset: 448 +} member { id: 0xce442d14 name: "ptl" @@ -149766,6 +152780,12 @@ member { type_id: 0xae1656c9 offset: 13184 } +member { + id: 0xa598ac7c + name: "pushed_seq" + type_id: 0xc9082b19 + offset: 15648 +} member { id: 0x4ac85a2c name: "put" @@ -149844,6 +152864,12 @@ member { type_id: 0x2c0bb831 offset: 64 } +member { + id: 0x68c6881b + name: "put_page" + type_id: 0x080d391b + offset: 192 +} member { id: 0xee3c87e4 name: "put_port" @@ -149886,6 +152912,12 @@ member { type_id: 0x0d572692 offset: 256 } +member { + id: 0x82e1aed1 + name: "putting_binary" + type_id: 0x6d7f5ff6 + offset: 128 +} member { id: 0x26fa53f2 name: "putx64" @@ -150228,6 +153260,18 @@ member { type_id: 0x4585663f offset: 192 } +member { + id: 0x9be65a12 + name: "qlen" + type_id: 0x74d29cf1 + offset: 96 +} +member { + id: 0x9bf5ac3e + name: "qlen" + type_id: 0x6720d32f + offset: 160 +} member { id: 0xba491c1c name: "qlen_notify" @@ -150751,6 +153795,11 @@ member { name: "queue_sz" type_id: 0xf435685e } +member { + id: 0x52c10ec0 + name: "queue_xmit" + type_id: 0x2c209d56 +} member { id: 0xaa971b00 name: "queuecommand" @@ -150871,6 +153920,12 @@ member { type_id: 0x1457cd38 offset: 5568 } +member { + id: 0xdcf7e916 + name: "quick" + type_id: 0xb3e7bac9 + offset: 8 +} member { id: 0x625ab578 name: "quick_threads" @@ -151175,6 +154230,12 @@ member { type_id: 0x33756485 offset: 384 } +member { + id: 0x2c2c5bfb + name: "rack" + type_id: 0xd4132c46 + offset: 13504 +} member { id: 0x7a85796a name: "radar_detect_regions" @@ -151551,6 +154612,13 @@ member { type_id: 0x33756485 offset: 192 } +member { + id: 0xd6330125 + name: "rate_app_limited" + type_id: 0x295c7202 + offset: 13858 + bitsize: 1 +} member { id: 0x94569300 name: "rate_bytes_ps" @@ -151575,6 +154643,12 @@ member { type_id: 0xe62ebf07 offset: 2144 } +member { + id: 0x18e683dd + name: "rate_delivered" + type_id: 0xc9082b19 + offset: 15488 +} member { id: 0x0f313303 name: "rate_den" @@ -151599,6 +154673,36 @@ member { type_id: 0x295c7202 offset: 104 } +member { + id: 0x47a61a29 + name: "rate_interval_us" + type_id: 0xc9082b19 + offset: 15520 +} +member { + id: 0x7f7f584f + name: "rate_leaf_parent_set" + type_id: 0x2d0a0361 + offset: 3136 +} +member { + id: 0x54806d5b + name: "rate_leaf_tx_max_set" + type_id: 0x2d154530 + offset: 2816 +} +member { + id: 0x049c1f00 + name: "rate_leaf_tx_share_set" + type_id: 0x2d154530 + offset: 2752 +} +member { + id: 0x4134711d + name: "rate_list" + type_id: 0xd3c80119 + offset: 192 +} member { id: 0xd51bd1ef name: "rate_matching" @@ -151659,6 +154763,36 @@ member { type_id: 0x4585663f offset: 1472 } +member { + id: 0x3d9c68f5 + name: "rate_node_del" + type_id: 0x2d1c1d12 + offset: 3072 +} +member { + id: 0x573e57ed + name: "rate_node_new" + type_id: 0x2d081f17 + offset: 3008 +} +member { + id: 0x069fcabf + name: "rate_node_parent_set" + type_id: 0x2d0a0361 + offset: 3200 +} +member { + id: 0xeff7e2c9 + name: "rate_node_tx_max_set" + type_id: 0x2d154530 + offset: 2944 +} +member { + id: 0x7b7f9a93 + name: "rate_node_tx_share_set" + type_id: 0x2d154530 + offset: 2880 +} member { id: 0xbc979606 name: "rate_num" @@ -152534,6 +155668,12 @@ member { type_id: 0xe3222f5b offset: 1408 } +member { + id: 0x95dacba7 + name: "rcu" + type_id: 0xe3222f5b + offset: 3904 +} member { id: 0x95dacce8 name: "rcu" @@ -152692,6 +155832,12 @@ member { type_id: 0x33756485 offset: 192 } +member { + id: 0x608ed11c + name: "rcv_flowinfo" + type_id: 0xe276adef + offset: 608 +} member { id: 0xeae5b95c name: "rcv_interval_us" @@ -152704,6 +155850,24 @@ member { type_id: 0x18d413f1 offset: 1280 } +member { + id: 0xa514bd9b + name: "rcv_mss" + type_id: 0xe8034002 + offset: 176 +} +member { + id: 0x722b8728 + name: "rcv_nxt" + type_id: 0xc9082b19 + offset: 12480 +} +member { + id: 0x3a366be0 + name: "rcv_ooopack" + type_id: 0xc9082b19 + offset: 18240 +} member { id: 0xd699ecd4 name: "rcv_probes_mcast" @@ -152716,6 +155880,53 @@ member { type_id: 0x33756485 offset: 448 } +member { + id: 0x035a9f8f + name: "rcv_rtt_est" + type_id: 0x13c65297 + offset: 18304 +} +member { + id: 0xcebd1125 + name: "rcv_rtt_last_tsecr" + type_id: 0xc9082b19 + offset: 18272 +} +member { + id: 0x0249b0df + name: "rcv_saddr" + type_id: 0xe276adef +} +member { + id: 0x8a514678 + name: "rcv_ssthresh" + type_id: 0xc9082b19 + offset: 13472 +} +member { + id: 0x1ad125b2 + name: "rcv_tos" + type_id: 0xb3e7bac9 + offset: 7120 +} +member { + id: 0xa56c13a3 + name: "rcv_tsecr" + type_id: 0xc9082b19 + offset: 96 +} +member { + id: 0x9a3cd5ff + name: "rcv_tstamp" + type_id: 0xc9082b19 + offset: 12896 +} +member { + id: 0x908732db + name: "rcv_tsval" + type_id: 0xc9082b19 + offset: 64 +} member { id: 0x1f3accfe name: "rcv_unacked" @@ -152728,12 +155939,37 @@ member { type_id: 0x914dbfdc offset: 7856 } +member { + id: 0x073e90bb + name: "rcv_wnd" + type_id: 0xc9082b19 + offset: 15552 +} +member { + id: 0x64ea7467 + name: "rcv_wscale" + type_id: 0x914dbfdc + offset: 140 + bitsize: 4 +} +member { + id: 0x93db6466 + name: "rcv_wup" + type_id: 0xc9082b19 + offset: 12544 +} member { id: 0x75627b5b name: "rcvlists_lock" type_id: 0xf313e71a offset: 704 } +member { + id: 0x38961e9d + name: "rcvq_space" + type_id: 0x0e7661fa + offset: 18432 +} member { id: 0x6bca0440 name: "rd" @@ -153697,6 +156933,12 @@ member { type_id: 0x449a775b offset: 640 } +member { + id: 0x198e2327 + name: "rebuild_header" + type_id: 0x2c24424a + offset: 128 +} member { id: 0x659c25bc name: "recalc_accuracy" @@ -153820,6 +157062,12 @@ member { type_id: 0x74d29cf1 offset: 32 } +member { + id: 0x8a4b19d4 + name: "recover" + type_id: 0x2e1466a0 + offset: 64 +} member { id: 0x8a6b6b4e name: "recover" @@ -153837,6 +157085,12 @@ member { name: "recover_bus" type_id: 0x2fb994f1 } +member { + id: 0x629c6b33 + name: "recovery_count" + type_id: 0x92233392 + offset: 1152 +} member { id: 0xe75c7f73 name: "recovery_disabled" @@ -153913,6 +157167,12 @@ member { type_id: 0x054f691a offset: 26176 } +member { + id: 0x2ae3d7d3 + name: "recv_sack_cache" + type_id: 0xb637307e + offset: 17472 +} member { id: 0xc16c3147 name: "recv_seq" @@ -153933,6 +157193,41 @@ member { type_id: 0x0fc38cea offset: 2432 } +member { + id: 0xd1ac6cca + name: "recverr" + type_id: 0xb3e7bac9 + offset: 7104 + bitsize: 1 +} +member { + id: 0xd1f78df1 + name: "recverr" + type_id: 0xe8034002 + offset: 560 + bitsize: 1 +} +member { + id: 0x7e1e1e3e + name: "recverr_rfc4884" + type_id: 0xe8034002 + offset: 574 + bitsize: 1 +} +member { + id: 0x7e45f9f6 + name: "recverr_rfc4884" + type_id: 0xb3e7bac9 + offset: 7113 + bitsize: 1 +} +member { + id: 0xf5e277a0 + name: "recvfragsize" + type_id: 0xe8034002 + offset: 14 + bitsize: 1 +} member { id: 0x732441ac name: "recvmsg" @@ -153945,6 +157240,13 @@ member { type_id: 0x2c07bcbe offset: 896 } +member { + id: 0xd4dd684d + name: "recvmsg_inq" + type_id: 0x295c7202 + offset: 13869 + bitsize: 1 +} member { id: 0xfd896136 name: "recycle_ibi_slot" @@ -154535,17 +157837,35 @@ member { type_id: 0xa722c13e offset: 800 } +member { + id: 0x05243818 + name: "refcount" + type_id: 0xa722c13e + offset: 224 +} member { id: 0x05243b3c name: "refcount" type_id: 0xa722c13e } +member { + id: 0x05243b72 + name: "refcount" + type_id: 0xa722c13e + offset: 3616 +} member { id: 0x05243c4b name: "refcount" type_id: 0xa722c13e offset: 448 } +member { + id: 0x05243d41 + name: "refcount" + type_id: 0xa722c13e + offset: 1280 +} member { id: 0x053332c8 name: "refcount" @@ -155156,6 +158476,12 @@ member { type_id: 0x92233392 offset: 448 } +member { + id: 0x4fd311c5 + name: "region_list" + type_id: 0xd3c80119 + offset: 832 +} member { id: 0x4fd31bbd name: "region_list" @@ -155773,6 +159099,12 @@ member { name: "release" type_id: 0x0f852e4a } +member { + id: 0xae97905e + name: "release" + type_id: 0x0f626ee5 + offset: 256 +} member { id: 0xae979233 name: "release" @@ -155988,6 +159320,42 @@ member { type_id: 0x0c868f26 offset: 1536 } +member { + id: 0x83cb909a + name: "reload_actions" + type_id: 0x33756485 + offset: 64 +} +member { + id: 0xf8981c0e + name: "reload_down" + type_id: 0x2d594ead + offset: 192 +} +member { + id: 0xf5250b55 + name: "reload_failed" + type_id: 0x295c7202 + offset: 3584 + bitsize: 1 +} +member { + id: 0xb0509801 + name: "reload_limits" + type_id: 0x33756485 + offset: 128 +} +member { + id: 0x4492b926 + name: "reload_stats" + type_id: 0x93e3596e +} +member { + id: 0xa5ab7067 + name: "reload_up" + type_id: 0x2d8fd28a + offset: 256 +} member { id: 0x88c18b9a name: "relocs" @@ -156103,6 +159471,12 @@ member { type_id: 0xd3c80119 offset: 30080 } +member { + id: 0xadd03a27 + name: "remote_reload_stats" + type_id: 0x93e3596e + offset: 192 +} member { id: 0xa3daa863 name: "remote_sdu_itime" @@ -156452,12 +159826,31 @@ member { type_id: 0xe8034002 offset: 992 } +member { + id: 0x599289d3 + name: "reo_wnd_persist" + type_id: 0x295c7202 + offset: 168 + bitsize: 5 +} +member { + id: 0xc2607053 + name: "reo_wnd_steps" + type_id: 0x295c7202 + offset: 160 +} member { id: 0x5f8678ed name: "reoffload" type_id: 0x2d08fece offset: 832 } +member { + id: 0xbffa6140 + name: "reord_seen" + type_id: 0xc9082b19 + offset: 14688 +} member { id: 0x2e9f9cf8 name: "reorder_q" @@ -156482,12 +159875,31 @@ member { type_id: 0x6720d32f offset: 1536 } +member { + id: 0x6e16f71f + name: "reordering" + type_id: 0xc9082b19 + offset: 14656 +} member { id: 0x52e0ed5f name: "rep" type_id: 0x75617428 offset: 2624 } +member { + id: 0xf06d788d + name: "repair" + type_id: 0x295c7202 + offset: 13870 + bitsize: 1 +} +member { + id: 0xd0cd0f99 + name: "repair_queue" + type_id: 0x295c7202 + offset: 13872 +} member { id: 0x345e6415 name: "repeat" @@ -156506,6 +159918,13 @@ member { type_id: 0x4585663f offset: 2112 } +member { + id: 0x7560b519 + name: "repflow" + type_id: 0xe8034002 + offset: 562 + bitsize: 1 +} member { id: 0x4b7a046e name: "repl_mode" @@ -156781,12 +160200,24 @@ member { type_id: 0x384f7d7c offset: 1064 } +member { + id: 0x6ac681cd + name: "reporter_list" + type_id: 0xd3c80119 + offset: 960 +} member { id: 0x6ac6877c name: "reporter_list" type_id: 0xd3c80119 offset: 2112 } +member { + id: 0xefdb08b4 + name: "reporters_lock" + type_id: 0xa7c362b0 + offset: 1088 +} member { id: 0xefdb0c31 name: "reporters_lock" @@ -158822,6 +162253,12 @@ member { type_id: 0xb522cc16 offset: 9024 } +member { + id: 0x17c3228f + name: "resource_list" + type_id: 0xd3c80119 + offset: 576 +} member { id: 0x19740c14 name: "resources" @@ -159433,6 +162870,18 @@ member { type_id: 0xa9daefe1 offset: 7104 } +member { + id: 0x0b8a1650 + name: "retrans_out" + type_id: 0xc9082b19 + offset: 14528 +} +member { + id: 0x92525caa + name: "retrans_stamp" + type_id: 0xc9082b19 + offset: 17888 +} member { id: 0x2f1b8a8e name: "retrans_timeout" @@ -159445,6 +162894,12 @@ member { type_id: 0xf1159c31 offset: 3264 } +member { + id: 0x05aa0dfa + name: "retransmit_skb_hint" + type_id: 0x054f691a + offset: 16960 +} member { id: 0x4f0d9bec name: "retries" @@ -159486,6 +162941,12 @@ member { name: "retry" type_id: 0xe8d14bc6 } +member { + id: 0x7fdde492 + name: "retry" + type_id: 0xb3e7bac9 + offset: 24 +} member { id: 0x0a6b3115 name: "retry_count" @@ -160508,6 +163969,12 @@ member { type_id: 0x0b131b04 offset: 704 } +member { + id: 0xe1754ad1 + name: "router_alert" + type_id: 0x5d8155a5 + offset: 104 +} member { id: 0x1061afd7 name: "routing" @@ -160744,6 +164211,19 @@ member { type_id: 0x0d30b9c3 offset: 1152 } +member { + id: 0xe752e605 + name: "rr" + type_id: 0x5d8155a5 + offset: 80 +} +member { + id: 0xe5e354be + name: "rr_needaddr" + type_id: 0x5d8155a5 + offset: 99 + bitsize: 1 +} member { id: 0xf254d9f5 name: "rr_nr_running" @@ -160840,6 +164320,40 @@ member { type_id: 0xd298e888 offset: 1216 } +member { + id: 0x5367b67f + name: "rskq_accept_head" + type_id: 0x27847a9a + offset: 192 +} +member { + id: 0x07b1da25 + name: "rskq_accept_tail" + type_id: 0x27847a9a + offset: 256 +} +member { + id: 0x6f5c1006 + name: "rskq_defer_accept" + type_id: 0x295c7202 + offset: 32 +} +member { + id: 0xf1af1f8d + name: "rskq_lock" + type_id: 0xf313e71a +} +member { + id: 0x4fed2df8 + name: "rskq_rst_head" + type_id: 0x27847a9a +} +member { + id: 0xe2520be5 + name: "rskq_rst_tail" + type_id: 0x27847a9a + offset: 64 +} member { id: 0x94b16558 name: "rslot_limit" @@ -161321,6 +164835,13 @@ member { type_id: 0xc93e017b offset: 16 } +member { + id: 0xe5f931e3 + name: "rtalert_isolate" + type_id: 0xe8034002 + offset: 575 + bitsize: 1 +} member { id: 0xe06b5dfe name: "rtc" @@ -161458,18 +164979,47 @@ member { type_id: 0xc9082b19 offset: 1632 } +member { + id: 0xbb70420d + name: "rtt_min" + type_id: 0x98a86aa3 + offset: 14304 +} +member { + id: 0x50d5f815 + name: "rtt_seq" + type_id: 0xc9082b19 + offset: 14272 +} member { id: 0x2e4fe3d2 name: "rtt_us" type_id: 0xd41e888f offset: 32 } +member { + id: 0x2e52f84a + name: "rtt_us" + type_id: 0xc9082b19 +} +member { + id: 0x2e52fcab + name: "rtt_us" + type_id: 0xc9082b19 + offset: 64 +} member { id: 0x2e67f9bb name: "rtt_us" type_id: 0xfc0e1dbd offset: 320 } +member { + id: 0x861205e4 + name: "rttvar_us" + type_id: 0xc9082b19 + offset: 14240 +} member { id: 0xe53f0bca name: "rtx_syn_ack" @@ -162389,6 +165939,12 @@ member { type_id: 0xb02b353a offset: 384 } +member { + id: 0xedd761bd + name: "rx_opt" + type_id: 0xfb9626d5 + offset: 14752 +} member { id: 0x92162365 name: "rx_otherhost_dropped" @@ -162715,6 +166271,67 @@ member { type_id: 0xe8034002 offset: 16 } +member { + id: 0xf63d13ec + name: "rxflow" + type_id: 0xe8034002 + offset: 10 + bitsize: 1 +} +member { + id: 0x27542d26 + name: "rxhlim" + type_id: 0xe8034002 + offset: 4 + bitsize: 1 +} +member { + id: 0x0ab41655 + name: "rxinfo" + type_id: 0xe8034002 + offset: 2 + bitsize: 1 +} +member { + id: 0xba676c19 + name: "rxohlim" + type_id: 0xe8034002 + offset: 5 + bitsize: 1 +} +member { + id: 0xdb4e2124 + name: "rxoinfo" + type_id: 0xe8034002 + offset: 3 + bitsize: 1 +} +member { + id: 0xca5da826 + name: "rxopt" + type_id: 0x6312fd2f + offset: 544 +} +member { + id: 0xb7565f87 + name: "rxorigdstaddr" + type_id: 0xe8034002 + offset: 13 + bitsize: 1 +} +member { + id: 0x1f5f2358 + name: "rxpmtu" + type_id: 0xe8034002 + offset: 12 + bitsize: 1 +} +member { + id: 0x80588b5f + name: "rxpmtu" + type_id: 0x054f691a + offset: 1024 +} member { id: 0x94aefae8 name: "rxq" @@ -162739,6 +166356,13 @@ member { type_id: 0xe62ebf07 offset: 416 } +member { + id: 0xd94d5094 + name: "rxtclass" + type_id: 0xe8034002 + offset: 11 + bitsize: 1 +} member { id: 0x2aa685e6 name: "rxtstamp" @@ -162754,6 +166378,11 @@ member { name: "s" type_id: 0x36592664 } +member { + id: 0x67c839a9 + name: "s" + type_id: 0x3a8e7b26 +} member { id: 0x67cca386 name: "s" @@ -163537,6 +167166,19 @@ member { type_id: 0xd3c80119 offset: 3072 } +member { + id: 0xa9edea21 + name: "sack_ok" + type_id: 0x914dbfdc + offset: 132 + bitsize: 3 +} +member { + id: 0xbd3e4a51 + name: "sacked_out" + type_id: 0xc9082b19 + offset: 15712 +} member { id: 0xf8038083 name: "saddr" @@ -163594,6 +167236,12 @@ member { type_id: 0x4aaca7b4 offset: 192 } +member { + id: 0xebfb4e21 + name: "same_provision" + type_id: 0x358546f6 + offset: 128 +} member { id: 0x9b9fa9a3 name: "same_root" @@ -163829,6 +167477,13 @@ member { type_id: 0x2d5e4b40 offset: 512 } +member { + id: 0x1d3cf444 + name: "save_syn" + type_id: 0x295c7202 + offset: 13880 + bitsize: 2 +} member { id: 0x10476fa4 name: "saved" @@ -163959,6 +167614,12 @@ member { type_id: 0x10c6675a offset: 1792 } +member { + id: 0x72f4ca16 + name: "saved_syn" + type_id: 0x10c6675a + offset: 18816 +} member { id: 0x424e9efd name: "saved_tmo" @@ -163983,6 +167644,20 @@ member { type_id: 0x0f626ee5 offset: 1408 } +member { + id: 0x037e8aa7 + name: "saw_tstamp" + type_id: 0x914dbfdc + offset: 128 + bitsize: 1 +} +member { + id: 0x9eb3a9b9 + name: "saw_unknown" + type_id: 0x295c7202 + offset: 144 + bitsize: 1 +} member { id: 0x597655fc name: "sb" @@ -164018,6 +167693,72 @@ member { type_id: 0xd3c80119 offset: 8448 } +member { + id: 0xe1b6bbe3 + name: "sb_list" + type_id: 0xd3c80119 + offset: 320 +} +member { + id: 0x1197fb66 + name: "sb_occ_max_clear" + type_id: 0x2d7ab985 + offset: 960 +} +member { + id: 0x80e35930 + name: "sb_occ_port_pool_get" + type_id: 0x2e0a2548 + offset: 1024 +} +member { + id: 0xa9d0bb48 + name: "sb_occ_snapshot" + type_id: 0x2d7ab985 + offset: 896 +} +member { + id: 0xde69b5bc + name: "sb_occ_tc_port_bind_get" + type_id: 0x2e0abaa7 + offset: 1088 +} +member { + id: 0x93cb2df4 + name: "sb_pool_get" + type_id: 0x2d739f19 + offset: 512 +} +member { + id: 0xeaf07952 + name: "sb_pool_set" + type_id: 0x2d7368ed + offset: 576 +} +member { + id: 0x78a8c4ae + name: "sb_port_pool_get" + type_id: 0x2e0a26c5 + offset: 640 +} +member { + id: 0x6f535872 + name: "sb_port_pool_set" + type_id: 0x2e0ad762 + offset: 704 +} +member { + id: 0x001ba0a6 + name: "sb_tc_pool_bind_get" + type_id: 0x2e0abbc6 + offset: 768 +} +member { + id: 0x07349e82 + name: "sb_tc_pool_bind_set" + type_id: 0x2e0ab0cf + offset: 832 +} member { id: 0x7ac264e0 name: "sbc" @@ -165249,12 +168990,23 @@ member { type_id: 0x4585663f offset: 32 } +member { + id: 0xf32eb68b + name: "search_high" + type_id: 0x6720d32f +} member { id: 0x39bd6d5d name: "search_list" type_id: 0xd3c80119 offset: 448 } +member { + id: 0xf0e605cb + name: "search_low" + type_id: 0x6720d32f + offset: 32 +} member { id: 0xbf942607 name: "search_order" @@ -165696,6 +169448,24 @@ member { name: "segment_ptr" type_id: 0x78f4e574 } +member { + id: 0x498b56ac + name: "segments_left" + type_id: 0xb3e7bac9 + offset: 24 +} +member { + id: 0x43536458 + name: "segs_in" + type_id: 0xc9082b19 + offset: 12416 +} +member { + id: 0xef3672e0 + name: "segs_out" + type_id: 0xc9082b19 + offset: 12608 +} member { id: 0x339d15e8 name: "sel" @@ -165751,6 +169521,12 @@ member { type_id: 0x2c40c92f offset: 640 } +member { + id: 0x3a30a25b + name: "selective_acks" + type_id: 0xb637307e + offset: 17216 +} member { id: 0x104f57f6 name: "selector" @@ -165863,6 +169639,24 @@ member { type_id: 0x0d9c47fd offset: 1408 } +member { + id: 0x5937e22e + name: "selfparking" + type_id: 0x6d7f5ff6 + offset: 640 +} +member { + id: 0x561fd50f + name: "selftest_check" + type_id: 0x35b3ea42 + offset: 3264 +} +member { + id: 0xd95b0d92 + name: "selftest_run" + type_id: 0x1fdf8df4 + offset: 3328 +} member { id: 0xf53d14f9 name: "sem" @@ -165911,6 +169705,12 @@ member { type_id: 0x2dd0b9c3 offset: 448 } +member { + id: 0x6d7c55af + name: "send_check" + type_id: 0x0f67218c + offset: 64 +} member { id: 0xbd9e514e name: "send_data" @@ -166293,6 +170093,12 @@ member { type_id: 0xc9082b19 offset: 256 } +member { + id: 0xfad50a5a + name: "seq" + type_id: 0xc9082b19 + offset: 32 +} member { id: 0xfad50a81 name: "seq" @@ -168331,6 +172137,12 @@ member { type_id: 0x2c97b369 offset: 896 } +member { + id: 0x852593c2 + name: "setsockopt" + type_id: 0x2c45f2d3 + offset: 448 +} member { id: 0x85259dc7 name: "setsockopt" @@ -168379,6 +172191,12 @@ member { type_id: 0x6720d32f offset: 3072 } +member { + id: 0x84c3a238 + name: "setup" + type_id: 0x0aee7ba0 + offset: 384 +} member { id: 0x84c4d659 name: "setup" @@ -168612,12 +172430,43 @@ member { type_id: 0x295c7202 offset: 240 } +member { + id: 0x25d5628c + name: "sflist" + type_id: 0x339b8baf + offset: 256 +} +member { + id: 0x25db7175 + name: "sflist" + type_id: 0x3d801074 + offset: 192 +} member { id: 0x00c081a9 name: "sfmode" type_id: 0x4585663f offset: 96 } +member { + id: 0x00c085ca + name: "sfmode" + type_id: 0x4585663f + offset: 160 +} +member { + id: 0x4c6b273e + name: "sfnum" + type_id: 0xc9082b19 + offset: 96 +} +member { + id: 0x38a7e1c1 + name: "sfnum_valid" + type_id: 0x295c7202 + offset: 146 + bitsize: 1 +} member { id: 0x65a2356f name: "sfp_bus" @@ -168901,6 +172750,12 @@ member { type_id: 0x4585663f offset: 96 } +member { + id: 0xeb4f31b9 + name: "share" + type_id: 0x295c7202 + offset: 512 +} member { id: 0xeb4f3b1e name: "share" @@ -170284,6 +174139,12 @@ member { name: "size" type_id: 0xf435685e } +member { + id: 0xd98a29b1 + name: "size" + type_id: 0xf435685e + offset: 256 +} member { id: 0xd98a2d0c name: "size" @@ -170379,6 +174240,12 @@ member { type_id: 0xc9082b19 offset: 224 } +member { + id: 0xd9b71962 + name: "size" + type_id: 0xc9082b19 + offset: 32 +} member { id: 0xd9b71c90 name: "size" @@ -170415,6 +174282,12 @@ member { type_id: 0x9565759f offset: 64 } +member { + id: 0xd9ec35e7 + name: "size" + type_id: 0x92233392 + offset: 896 +} member { id: 0xd9ec3683 name: "size" @@ -170938,6 +174811,12 @@ member { type_id: 0x6720d32f offset: 1152 } +member { + id: 0x68c86260 + name: "sk_rx_dst_set" + type_id: 0x0f5c0d73 + offset: 192 +} member { id: 0x30149a66 name: "sk_security" @@ -171561,6 +175440,29 @@ member { offset: 11 bitsize: 2 } +member { + id: 0x7f9c0ca0 + name: "sl_addr" + type_id: 0xdf70f6ef + offset: 192 +} +member { + id: 0x7fbfd873 + name: "sl_addr" + type_id: 0xfca4258b + offset: 192 +} +member { + id: 0xeea06d44 + name: "sl_count" + type_id: 0x4585663f + offset: 32 +} +member { + id: 0x047148a0 + name: "sl_max" + type_id: 0x4585663f +} member { id: 0xe0c5ed6b name: "slab" @@ -172202,6 +176104,13 @@ member { name: "smc_hash" type_id: 0x3c4ed50c } +member { + id: 0x7d4497ce + name: "smc_ok" + type_id: 0x914dbfdc + offset: 135 + bitsize: 1 +} member { id: 0x0697a2b0 name: "smem_len" @@ -172250,6 +176159,18 @@ member { type_id: 0xe52a3418 offset: 416 } +member { + id: 0x0c805fde + name: "snapshot" + type_id: 0x2d0e9268 + offset: 128 +} +member { + id: 0x0c832449 + name: "snapshot" + type_id: 0x2e7505e0 + offset: 128 +} member { id: 0x0cc029ea name: "snapshot" @@ -172262,6 +176183,24 @@ member { type_id: 0x228d4605 offset: 1984 } +member { + id: 0xc24fadb5 + name: "snapshot_ids" + type_id: 0x80c20070 + offset: 2560 +} +member { + id: 0xcffde3b6 + name: "snapshot_list" + type_id: 0xd3c80119 + offset: 704 +} +member { + id: 0xcbc193d6 + name: "snapshot_lock" + type_id: 0xa7c362b0 + offset: 320 +} member { id: 0xae699d06 name: "snd" @@ -172280,12 +176219,48 @@ member { type_id: 0x33f8b54b offset: 576 } +member { + id: 0x3b23e448 + name: "snd_cwnd" + type_id: 0xc9082b19 + offset: 14976 +} +member { + id: 0x0ed29348 + name: "snd_cwnd_clamp" + type_id: 0xc9082b19 + offset: 15040 +} +member { + id: 0xdef99a11 + name: "snd_cwnd_cnt" + type_id: 0xc9082b19 + offset: 15008 +} +member { + id: 0xe301bb69 + name: "snd_cwnd_stamp" + type_id: 0xc9082b19 + offset: 15104 +} +member { + id: 0x9e51f1aa + name: "snd_cwnd_used" + type_id: 0xc9082b19 + offset: 15072 +} member { id: 0xc2ae7a6f name: "snd_interval_us" type_id: 0xc9082b19 offset: 256 } +member { + id: 0x24e972c0 + name: "snd_nxt" + type_id: 0xc9082b19 + offset: 12576 +} member { id: 0x05fda169 name: "snd_portid" @@ -172297,12 +176272,55 @@ member { name: "snd_seq" type_id: 0xc9082b19 } +member { + id: 0x9c800493 + name: "snd_sml" + type_id: 0xc9082b19 + offset: 12864 +} +member { + id: 0xcf588653 + name: "snd_ssthresh" + type_id: 0xc9082b19 + offset: 14944 +} +member { + id: 0x8248546f + name: "snd_una" + type_id: 0xc9082b19 + offset: 12832 +} +member { + id: 0x611d6152 + name: "snd_up" + type_id: 0xc9082b19 + offset: 14720 +} member { id: 0xac63a41d name: "snd_win" type_id: 0x914dbfdc offset: 7808 } +member { + id: 0x1f8008f5 + name: "snd_wl1" + type_id: 0xc9082b19 + offset: 13312 +} +member { + id: 0xb8d73d0d + name: "snd_wnd" + type_id: 0xc9082b19 + offset: 13344 +} +member { + id: 0xa597551f + name: "snd_wscale" + type_id: 0x914dbfdc + offset: 136 + bitsize: 4 +} member { id: 0xb368ac36 name: "sndbit" @@ -172321,6 +176339,13 @@ member { type_id: 0x1a3a7059 offset: 576 } +member { + id: 0xc40b184c + name: "sndflow" + type_id: 0xe8034002 + offset: 561 + bitsize: 1 +} member { id: 0x8f0cab7f name: "sniff_max_interval" @@ -172410,6 +176435,12 @@ member { type_id: 0xf435685e offset: 5888 } +member { + id: 0x094f9496 + name: "sockaddr_len" + type_id: 0x914dbfdc + offset: 416 +} member { id: 0x4f73c01d name: "socket_pressure" @@ -172763,6 +176794,11 @@ member { type_id: 0xe02e14d6 offset: 64 } +member { + id: 0x589235ff + name: "space" + type_id: 0xc9082b19 +} member { id: 0x4b5ea168 name: "space_available" @@ -173669,6 +177705,25 @@ member { type_id: 0x1c3dbe5a offset: 416 } +member { + id: 0xaab1780b + name: "srcprefs" + type_id: 0xe8034002 + offset: 567 + bitsize: 3 +} +member { + id: 0x0ffd3550 + name: "srcrt" + type_id: 0xe8034002 + bitsize: 1 +} +member { + id: 0xcd7a45a0 + name: "srcrt" + type_id: 0x12d9a766 + offset: 256 +} member { id: 0xcd809b0d name: "srcrt" @@ -173919,6 +177974,25 @@ member { type_id: 0x6d7f5ff6 offset: 24 } +member { + id: 0x3a20fe11 + name: "srr" + type_id: 0x5d8155a5 + offset: 72 +} +member { + id: 0x3feffe90 + name: "srr_is_hit" + type_id: 0x5d8155a5 + offset: 97 + bitsize: 1 +} +member { + id: 0x28d4f0ae + name: "srtt_us" + type_id: 0xc9082b19 + offset: 14144 +} member { id: 0x8c8649b8 name: "ss" @@ -174725,6 +178799,11 @@ member { type_id: 0x865acc96 offset: 11904 } +member { + id: 0x3d5d011f + name: "start_seq" + type_id: 0xc9082b19 +} member { id: 0x00cda1f9 name: "start_signal_voltage_switch" @@ -175203,6 +179282,12 @@ member { type_id: 0x4585663f offset: 7616 } +member { + id: 0x72b72416 + name: "state" + type_id: 0x44d985d5 + offset: 384 +} member { id: 0x72c0803e name: "state" @@ -175566,6 +179651,12 @@ member { type_id: 0x2360e10b offset: 2496 } +member { + id: 0x46ecc05d + name: "state_lock" + type_id: 0xa7c362b0 + offset: 448 +} member { id: 0xeccd8227 name: "state_machine" @@ -175897,6 +179988,12 @@ member { type_id: 0x2456537c offset: 256 } +member { + id: 0xb9583af1 + name: "stats" + type_id: 0x2d51c138 + offset: 2688 +} member { id: 0xb95cdf4e name: "stats" @@ -176393,6 +180490,12 @@ member { type_id: 0x33756485 offset: 1472 } +member { + id: 0x39865348 + name: "sticky_pktinfo" + type_id: 0xe2574ab7 + offset: 128 +} member { id: 0x5922f81b name: "stime" @@ -176673,6 +180776,11 @@ member { type_id: 0x0d918eed offset: 192 } +member { + id: 0xacd44104 + name: "store" + type_id: 0x0dd653d2 +} member { id: 0xacd4aa03 name: "store" @@ -177906,6 +182014,11 @@ member { type_id: 0xb914bfab offset: 2944 } +member { + id: 0x9fc14365 + name: "supported_flash_update_params" + type_id: 0xc9082b19 +} member { id: 0x44116555 name: "supported_hw" @@ -178887,6 +183000,47 @@ member { type_id: 0x0ddb38e3 offset: 448 } +member { + id: 0x590d4988 + name: "syn_data" + type_id: 0x295c7202 + offset: 13882 + bitsize: 1 +} +member { + id: 0x7d5a2639 + name: "syn_data_acked" + type_id: 0x295c7202 + offset: 13886 + bitsize: 1 +} +member { + id: 0x5e175424 + name: "syn_fastopen" + type_id: 0x295c7202 + offset: 13883 + bitsize: 1 +} +member { + id: 0x1273b273 + name: "syn_fastopen_ch" + type_id: 0x295c7202 + offset: 13885 + bitsize: 1 +} +member { + id: 0xe4473696 + name: "syn_fastopen_exp" + type_id: 0x295c7202 + offset: 13884 + bitsize: 1 +} +member { + id: 0x472be94a + name: "syn_recv_sock" + type_id: 0x120033c5 + offset: 320 +} member { id: 0x501d2a59 name: "sync" @@ -179196,6 +183350,12 @@ member { type_id: 0x104ad696 offset: 256 } +member { + id: 0x77b35ac5 + name: "synflood_warned" + type_id: 0xc9082b19 + offset: 64 +} member { id: 0x8e7c5fc5 name: "synq_overflow_ts" @@ -180185,6 +184345,11 @@ member { name: "t" type_id: 0x9c649622 } +member { + id: 0xab76db82 + name: "t" + type_id: 0xc9082b19 +} member { id: 0x87bba0ec name: "t1" @@ -181417,12 +185582,24 @@ member { type_id: 0x914dbfdc offset: 64 } +member { + id: 0x51753049 + name: "tclass" + type_id: 0xb3e7bac9 + offset: 584 +} member { id: 0x51753743 name: "tclass" type_id: 0xb3e7bac9 offset: 288 } +member { + id: 0x51ef8423 + name: "tclass" + type_id: 0x295c7202 + offset: 72 +} member { id: 0xbb99034f name: "tclassid" @@ -181522,6 +185699,12 @@ member { type_id: 0xc9082b19 offset: 4544 } +member { + id: 0x5e1e9277 + name: "tcp_clock_cache" + type_id: 0x92233392 + offset: 14016 +} member { id: 0x77c51ee3 name: "tcp_congestion_control" @@ -181551,6 +185734,12 @@ member { type_id: 0xc9082b19 offset: 64 } +member { + id: 0xc07533a2 + name: "tcp_header_len" + type_id: 0x914dbfdc + offset: 12288 +} member { id: 0xc0a9db63 name: "tcp_ignore_invalid_rst" @@ -181579,6 +185768,12 @@ member { type_id: 0x295c7202 offset: 464 } +member { + id: 0x0c6e4e2a + name: "tcp_mstamp" + type_id: 0x92233392 + offset: 14080 +} member { id: 0x92478c56 name: "tcp_rtx_queue" @@ -181607,6 +185802,18 @@ member { name: "tcp_tsorted_anchor" type_id: 0xd3c80119 } +member { + id: 0x5005e20e + name: "tcp_tx_delay" + type_id: 0xc9082b19 + offset: 13920 +} +member { + id: 0x2c472957 + name: "tcp_wstamp_ns" + type_id: 0x92233392 + offset: 13952 +} member { id: 0xee1e03ec name: "tcpc" @@ -182006,6 +186213,12 @@ member { name: "test" type_id: 0x2e3696f7 } +member { + id: 0x8db5ea4d + name: "test" + type_id: 0x2e0b7ad3 + offset: 256 +} member { id: 0x8db6a427 name: "test" @@ -182152,6 +186365,18 @@ member { type_id: 0x49b889e7 offset: 12704 } +member { + id: 0x07611cab + name: "tgt_index" + type_id: 0xc9082b19 + offset: 32 +} +member { + id: 0xc9d6516c + name: "tgt_value" + type_id: 0x18bd6530 + offset: 64 +} member { id: 0x141d2755 name: "thaw" @@ -182188,6 +186413,13 @@ member { type_id: 0xd3c80119 offset: 8960 } +member { + id: 0xe07791d5 + name: "thin_lto" + type_id: 0x295c7202 + offset: 13868 + bitsize: 1 +} member { id: 0xca538c03 name: "think_time" @@ -182283,6 +186515,12 @@ member { type_id: 0x965abf66 offset: 29312 } +member { + id: 0xa81d1890 + name: "thread_comm" + type_id: 0x3e10b518 + offset: 704 +} member { id: 0x8b87e4f0 name: "thread_flags" @@ -182295,6 +186533,12 @@ member { type_id: 0xd92b1d75 offset: 256 } +member { + id: 0x3e886d7b + name: "thread_fn" + type_id: 0x0aee7ba0 + offset: 256 +} member { id: 0xb282a928 name: "thread_group" @@ -182353,6 +186597,12 @@ member { type_id: 0x18456730 offset: 13504 } +member { + id: 0x4118a1ce + name: "thread_should_run" + type_id: 0x29a8570f + offset: 192 +} member { id: 0x90132b6a name: "thread_sibling" @@ -182445,6 +186695,12 @@ member { type_id: 0x33756485 offset: 64 } +member { + id: 0x6ce0bb82 + name: "threshold_type" + type_id: 0xcbcc8512 + offset: 64 +} member { id: 0x3b00e790 name: "thresholds" @@ -182653,6 +186909,12 @@ member { type_id: 0x92233392 offset: 192 } +member { + id: 0x74712a8a + name: "time" + type_id: 0x92233392 + offset: 64 +} member { id: 0x74712c56 name: "time" @@ -182986,6 +187248,12 @@ member { type_id: 0x33756485 offset: 256 } +member { + id: 0x54f0f552 + name: "timeout" + type_id: 0x33756485 + offset: 64 +} member { id: 0x54f0f7ca name: "timeout" @@ -183038,6 +187306,12 @@ member { name: "timeout_ns" type_id: 0x4585663f } +member { + id: 0x203d8bb9 + name: "timeout_rehash" + type_id: 0x914dbfdc + offset: 18224 +} member { id: 0x39fee070 name: "timeout_set" @@ -183505,6 +187779,19 @@ member { type_id: 0x295c7202 offset: 144 } +member { + id: 0x81d25425 + name: "tlp_high_seq" + type_id: 0xc9082b19 + offset: 13888 +} +member { + id: 0xdab01e8a + name: "tlp_retrans" + type_id: 0x295c7202 + offset: 13722 + bitsize: 1 +} member { id: 0x7404e298 name: "tlv" @@ -183987,6 +188274,12 @@ member { type_id: 0x22198273 offset: 64 } +member { + id: 0xf113a55a + name: "tos" + type_id: 0x007e8ce4 + offset: 272 +} member { id: 0xf13a894d name: "tos" @@ -184011,6 +188304,12 @@ member { type_id: 0xb3e7bac9 offset: 24 } +member { + id: 0xf1a03e73 + name: "tos" + type_id: 0xb3e7bac9 + offset: 7072 +} member { id: 0xd7e12520 name: "tot_busy_t" @@ -184029,6 +188328,12 @@ member { type_id: 0x7584e7da offset: 16 } +member { + id: 0x3eb7848c + name: "tot_len" + type_id: 0x6720d32f + offset: 32 +} member { id: 0x408f26e7 name: "tot_write_bandwidth" @@ -184157,6 +188462,12 @@ member { type_id: 0x4585663f offset: 2112 } +member { + id: 0x1ab0aff5 + name: "total_retrans" + type_id: 0xc9082b19 + offset: 18048 +} member { id: 0x80674f84 name: "total_rx_match_ratio" @@ -184731,6 +189042,12 @@ member { name: "transmit_time" type_id: 0x92233392 } +member { + id: 0x1b258c6d + name: "transmit_time" + type_id: 0x92233392 + offset: 320 +} member { id: 0x45be24a0 name: "transmitting" @@ -184749,6 +189066,13 @@ member { type_id: 0xd529883e offset: 544 } +member { + id: 0x73793851 + name: "transparent" + type_id: 0xb3e7bac9 + offset: 7109 + bitsize: 1 +} member { id: 0x738f5598 name: "transparent" @@ -184802,6 +189126,90 @@ member { type_id: 0x295c7202 offset: 1080 } +member { + id: 0x21a1a972 + name: "trap_action_set" + type_id: 0x2d004a69 + offset: 1792 +} +member { + id: 0x3c859cc4 + name: "trap_drop_counter_get" + type_id: 0x2d018e8d + offset: 2048 +} +member { + id: 0x24edb8c2 + name: "trap_fini" + type_id: 0x0e44c87b + offset: 1728 +} +member { + id: 0xb252ef85 + name: "trap_group_action_set" + type_id: 0x2d00157c + offset: 1984 +} +member { + id: 0x2b3b3947 + name: "trap_group_init" + type_id: 0x2d033017 + offset: 1856 +} +member { + id: 0x1877dc92 + name: "trap_group_list" + type_id: 0xd3c80119 + offset: 1664 +} +member { + id: 0x3a9bd5f4 + name: "trap_group_set" + type_id: 0x2d004103 + offset: 1920 +} +member { + id: 0x37b507df + name: "trap_init" + type_id: 0x2d02e4d4 + offset: 1664 +} +member { + id: 0x10281c82 + name: "trap_list" + type_id: 0xd3c80119 + offset: 1536 +} +member { + id: 0x5e35aa2e + name: "trap_policer_counter_get" + type_id: 0x2d0ab1eb + offset: 2304 +} +member { + id: 0x1ba59c6d + name: "trap_policer_fini" + type_id: 0x0e4e7ccb + offset: 2176 +} +member { + id: 0x950fbc14 + name: "trap_policer_init" + type_id: 0x2d085064 + offset: 2112 +} +member { + id: 0x9516c9d8 + name: "trap_policer_list" + type_id: 0xd3c80119 + offset: 1792 +} +member { + id: 0xc8b0c1d4 + name: "trap_policer_set" + type_id: 0x2d01e009 + offset: 2240 +} member { id: 0xc911730d name: "trb_address_map" @@ -185370,6 +189778,12 @@ member { type_id: 0x11c404ba offset: 960 } +member { + id: 0x95c9b8f6 + name: "ts" + type_id: 0x5d8155a5 + offset: 88 +} member { id: 0x846f423a name: "ts_info" @@ -185382,6 +189796,20 @@ member { type_id: 0x92233392 offset: 192 } +member { + id: 0x5ffbc843 + name: "ts_needaddr" + type_id: 0x5d8155a5 + offset: 101 + bitsize: 1 +} +member { + id: 0xb15e52c6 + name: "ts_needtime" + type_id: 0x5d8155a5 + offset: 100 + bitsize: 1 +} member { id: 0x6f338061 name: "ts_real" @@ -185393,6 +189821,17 @@ member { type_id: 0xc9082b19 offset: 1184 } +member { + id: 0x851fefad + name: "ts_recent" + type_id: 0xc9082b19 + offset: 32 +} +member { + id: 0x8131134d + name: "ts_recent_stamp" + type_id: 0x6720d32f +} member { id: 0x0ac38887 name: "tseg1_max" @@ -185488,6 +189927,24 @@ member { type_id: 0x4585663f offset: 18208 } +member { + id: 0xaf1c2858 + name: "tsoffset" + type_id: 0xc9082b19 + offset: 13024 +} +member { + id: 0x3fe882fb + name: "tsorted_sent_queue" + type_id: 0xd3c80119 + offset: 13184 +} +member { + id: 0xb4b04624 + name: "tsq_node" + type_id: 0xd3c80119 + offset: 13056 +} member { id: 0x7f1030b7 name: "tstamp" @@ -185523,6 +189980,13 @@ member { type_id: 0x6720d32f offset: 1472 } +member { + id: 0xcd6e1313 + name: "tstamp_ok" + type_id: 0x914dbfdc + offset: 129 + bitsize: 1 +} member { id: 0x724f5b37 name: "tstamp_type" @@ -185640,6 +190104,12 @@ member { type_id: 0x295c7202 offset: 48 } +member { + id: 0xf4da47b1 + name: "ttl" + type_id: 0xb3e7bac9 + offset: 264 +} member { id: 0xf4da4d28 name: "ttl" @@ -186537,6 +191007,12 @@ member { type_id: 0x10617c73 offset: 704 } +member { + id: 0x34444209 + name: "tx_flags" + type_id: 0x295c7202 + offset: 256 +} member { id: 0x13091341 name: "tx_frames" @@ -187607,6 +192083,12 @@ member { name: "type" type_id: 0x3e10b518 } +member { + id: 0x5c68c671 + name: "type" + type_id: 0x3e10b518 + offset: 832 +} member { id: 0x5c68cd02 name: "type" @@ -187891,6 +192373,11 @@ member { type_id: 0xe62ebf07 offset: 64 } +member { + id: 0x5cbbb022 + name: "type" + type_id: 0xed655c73 +} member { id: 0x5cbbc962 name: "type" @@ -187977,6 +192464,12 @@ member { type_id: 0xb3e7bac9 offset: 128 } +member { + id: 0x5ce53c7a + name: "type" + type_id: 0xb3e7bac9 + offset: 16 +} member { id: 0x5ce53fde name: "type" @@ -188361,12 +192854,36 @@ member { type_id: 0x86a931f9 offset: 192 } +member { + id: 0xf49ccf9e + name: "types" + type_id: 0x0e38185b + offset: 896 +} member { id: 0xf49ecb47 name: "types" type_id: 0x0c3286fb offset: 64 } +member { + id: 0x6e3b6a83 + name: "types_count" + type_id: 0x3999579d + offset: 192 +} +member { + id: 0x6e477688 + name: "types_count" + type_id: 0x4585663f + offset: 960 +} +member { + id: 0x88117783 + name: "types_get" + type_id: 0x0e0dc148 + offset: 256 +} member { id: 0x3f590b7c name: "types_mask" @@ -188466,6 +192983,11 @@ member { type_id: 0x5574fba9 offset: 128 } +member { + id: 0xec2a9cea + name: "u" + type_id: 0x55c087bf +} member { id: 0xec2ac37d name: "u" @@ -188656,6 +193178,12 @@ member { type_id: 0xa7c362b0 offset: 64 } +member { + id: 0x50ba6c8c + name: "uarg" + type_id: 0x35dbe029 + offset: 384 +} member { id: 0x6a0a74ef name: "uart_port" @@ -188701,12 +193229,30 @@ member { name: "uc" type_id: 0x6dad7303 } +member { + id: 0x1d8e0899 + name: "uc_index" + type_id: 0x6720d32f + offset: 7136 +} member { id: 0x70a44081 name: "uc_promisc" type_id: 0x6d7f5ff6 offset: 5696 } +member { + id: 0x8e099fc0 + name: "uc_ttl" + type_id: 0x007e8ce4 + offset: 6944 +} +member { + id: 0x95dcef8c + name: "ucast_oif" + type_id: 0x6720d32f + offset: 480 +} member { id: 0xd2f70d3b name: "ucd_prdt_dma_addr" @@ -189555,6 +194101,18 @@ member { type_id: 0x1a3a7059 offset: 512 } +member { + id: 0x44e15491 + name: "undo_marker" + type_id: 0xc9082b19 + offset: 17920 +} +member { + id: 0x7392ff81 + name: "undo_retrans" + type_id: 0x6720d32f + offset: 17952 +} member { id: 0x0645ccd5 name: "unfreeze_fs" @@ -189867,6 +194425,12 @@ member { type_id: 0x4585663f offset: 2848 } +member { + id: 0x6fd6cd07 + name: "unpark" + type_id: 0x0aee7ba0 + offset: 576 +} member { id: 0x343d462b name: "unpin" @@ -189958,6 +194522,12 @@ member { type_id: 0x33756485 offset: 2816 } +member { + id: 0x1f617d86 + name: "unprovision" + type_id: 0x2d4fcd25 + offset: 64 +} member { id: 0x8ea4f872 name: "unreg_list" @@ -190111,6 +194681,20 @@ member { type_id: 0x33756485 offset: 768 } +member { + id: 0xc2fb89b4 + name: "unused" + type_id: 0x295c7202 + offset: 145 + bitsize: 7 +} +member { + id: 0xd0fa2acf + name: "unused" + type_id: 0x295c7202 + offset: 13723 + bitsize: 5 +} member { id: 0xd4ec9f32 name: "unused" @@ -190196,6 +194780,12 @@ member { type_id: 0x0d88e184 offset: 128 } +member { + id: 0xd6aa460e + name: "update" + type_id: 0x0f596314 + offset: 192 +} member { id: 0xd6ab4b69 name: "update" @@ -190581,12 +195171,24 @@ member { offset: 109 bitsize: 1 } +member { + id: 0x6e240c8e + name: "urg_data" + type_id: 0x914dbfdc + offset: 14624 +} member { id: 0xcd5c6021 name: "urg_ptr" type_id: 0x7584e7da offset: 144 } +member { + id: 0xf6fff0ee + name: "urg_seq" + type_id: 0xc9082b19 + offset: 18080 +} member { id: 0x3bf0a986 name: "urgent_bkops_lvl" @@ -191676,6 +196278,12 @@ member { type_id: 0x724805ea offset: 9856 } +member { + id: 0xc4835a3d + name: "user_mss" + type_id: 0x914dbfdc + offset: 160 +} member { id: 0xf44982ea name: "user_name" @@ -191910,6 +196518,12 @@ member { type_id: 0x6720d32f offset: 960 } +member { + id: 0x85d92902 + name: "users" + type_id: 0x74d29cf1 + offset: 96 +} member { id: 0x85e87d65 name: "users" @@ -192255,6 +196869,12 @@ member { name: "v" type_id: 0xe62ebf07 } +member { + id: 0x28f6afd5 + name: "v" + type_id: 0xc9082b19 + offset: 32 +} member { id: 0x543f6773 name: "v1" @@ -192299,6 +196919,11 @@ member { name: "v6" type_id: 0x7c866968 } +member { + id: 0x78e33cfc + name: "v6_rcv_saddr" + type_id: 0x6d25e07f +} member { id: 0x80b1cd58 name: "v_1p2" @@ -192410,6 +197035,11 @@ member { name: "val" type_id: 0x75617428 } +member { + id: 0x4f647aa3 + name: "val" + type_id: 0x729479be +} member { id: 0x4f67c989 name: "val" @@ -193471,6 +198101,11 @@ member { type_id: 0x3e10b518 offset: 6336 } +member { + id: 0x7d2869d8 + name: "vendor_ops" + type_id: 0x2e19617e +} member { id: 0xfd44cde8 name: "vendor_oui" @@ -193752,6 +198387,18 @@ member { name: "version" type_id: 0x914dbfdc } +member { + id: 0x8e9e82fd + name: "version_cb" + type_id: 0x0d1f55de + offset: 64 +} +member { + id: 0xca2aa534 + name: "version_cb_priv" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0x88d1b3ba name: "version_get" @@ -195020,6 +199667,12 @@ member { type_id: 0x04fd6761 offset: 1280 } +member { + id: 0x239192da + name: "vma" + type_id: 0x0a134144 + offset: 192 +} member { id: 0x23919a13 name: "vma" @@ -196987,6 +201640,12 @@ member { type_id: 0x4585663f offset: 64 } +member { + id: 0x98ad753d + name: "window_clamp" + type_id: 0xc9082b19 + offset: 13440 +} member { id: 0x1afab587 name: "window_len" @@ -198320,6 +202979,12 @@ member { type_id: 0x2f582494 offset: 1536 } +member { + id: 0xd5cb059f + name: "write_seq" + type_id: 0xc9082b19 + offset: 15584 +} member { id: 0x0a06727e name: "write_stamp" @@ -198593,6 +203258,13 @@ member { type_id: 0xc93e017b offset: 48 } +member { + id: 0xf0ca4be8 + name: "wscale_ok" + type_id: 0x914dbfdc + offset: 131 + bitsize: 1 +} member { id: 0x8986dade name: "wspecversion" @@ -199545,6 +204217,12 @@ member { type_id: 0xe62ebf07 offset: 160 } +member { + id: 0x2baf73ff + name: "young" + type_id: 0x74d29cf1 + offset: 128 +} member { id: 0x05f8b7b6 name: "ypanstep" @@ -200159,6 +204837,15 @@ struct_union { member_id: 0xd052cad3 } } +struct_union { + id: 0x0904167f + kind: STRUCT + definition { + bytesize: 8 + member_id: 0x45320605 + member_id: 0x934c941a + } +} struct_union { id: 0x0922f100 kind: STRUCT @@ -200613,6 +205300,16 @@ struct_union { member_id: 0x96fedfda } } +struct_union { + id: 0x0e7661fa + kind: STRUCT + definition { + bytesize: 16 + member_id: 0x589235ff + member_id: 0xfad50a5a + member_id: 0x74712a8a + } +} struct_union { id: 0x0eac683f kind: STRUCT @@ -200971,6 +205668,14 @@ struct_union { member_id: 0x3c63eaff } } +struct_union { + id: 0x132e4197 + kind: STRUCT + definition { + bytesize: 8 + member_id: 0x2d081532 + } +} struct_union { id: 0x132f610b kind: STRUCT @@ -201055,6 +205760,16 @@ struct_union { member_id: 0xc46d15c4 } } +struct_union { + id: 0x13c65297 + kind: STRUCT + definition { + bytesize: 16 + member_id: 0x2e52f84a + member_id: 0xfad50a5a + member_id: 0x74712a8a + } +} struct_union { id: 0x14096380 kind: STRUCT @@ -201521,6 +206236,28 @@ struct_union { member_id: 0xf5eb6b20 } } +struct_union { + id: 0x1b949b56 + kind: STRUCT + definition { + bytesize: 2 + member_id: 0x0ffd3550 + member_id: 0x1e410881 + member_id: 0x0ab41655 + member_id: 0xdb4e2124 + member_id: 0x27542d26 + member_id: 0xba676c19 + member_id: 0xede7771d + member_id: 0xba0eaaec + member_id: 0xcc7711fa + member_id: 0x4f7607b0 + member_id: 0xf63d13ec + member_id: 0xd94d5094 + member_id: 0x1f5f2358 + member_id: 0xb7565f87 + member_id: 0xf5e277a0 + } +} struct_union { id: 0x1b966255 kind: STRUCT @@ -201928,6 +206665,18 @@ struct_union { member_id: 0x41322da8 } } +struct_union { + id: 0x249bcdf3 + kind: STRUCT + definition { + bytesize: 16 + member_id: 0xf32eb68b + member_id: 0xf0e605cb + member_id: 0x745418c4 + member_id: 0x7a56a000 + member_id: 0x60865bc2 + } +} struct_union { id: 0x2548e662 kind: STRUCT @@ -201937,6 +206686,22 @@ struct_union { member_id: 0x0193fe4b } } +struct_union { + id: 0x260445a5 + kind: STRUCT + definition { + bytesize: 24 + member_id: 0xf97ca310 + member_id: 0xdcf7e916 + member_id: 0x517ebeed + member_id: 0x7fdde492 + member_id: 0x168605e8 + member_id: 0x54f0f552 + member_id: 0x9d3fc94e + member_id: 0x4c233807 + member_id: 0xa514bd9b + } +} struct_union { id: 0x2612bf2a kind: STRUCT @@ -203209,6 +207974,15 @@ struct_union { member_id: 0x83ba53fe } } +struct_union { + id: 0x3fbb6cee + kind: STRUCT + definition { + bytesize: 4 + member_id: 0x9f6503ee + member_id: 0x39a33a5e + } +} struct_union { id: 0x3fbd06d5 kind: STRUCT @@ -203605,6 +208379,15 @@ struct_union { member_id: 0x5f7a4496 } } +struct_union { + id: 0x48c28092 + kind: UNION + definition { + bytesize: 16 + member_id: 0x78e33cfc + member_id: 0x0249b0df + } +} struct_union { id: 0x48fb1ff5 kind: UNION @@ -203671,6 +208454,16 @@ struct_union { member_id: 0x25ab4212 } } +struct_union { + id: 0x49b90a29 + kind: UNION + definition { + bytesize: 8 + member_id: 0x7d2869d8 + member_id: 0x27000c61 + member_id: 0x36752b74 + } +} struct_union { id: 0x49df90a7 kind: UNION @@ -203777,6 +208570,15 @@ struct_union { member_id: 0x89460966 } } +struct_union { + id: 0x4bdbd862 + kind: UNION + definition { + bytesize: 8 + member_id: 0x749120ed + member_id: 0x1536626c + } +} struct_union { id: 0x4c6fa86e kind: UNION @@ -204269,6 +209071,16 @@ struct_union { member_id: 0xa0d5322b } } +struct_union { + id: 0x55c087bf + kind: UNION + definition { + bytesize: 24 + member_id: 0x0ca7cb72 + member_id: 0x4e824c05 + member_id: 0x20c5e9f7 + } +} struct_union { id: 0x56037e9c kind: UNION @@ -205076,6 +209888,15 @@ struct_union { member_id: 0x5e3692cb } } +struct_union { + id: 0x6312fd2f + kind: UNION + definition { + bytesize: 2 + member_id: 0xd74e0402 + member_id: 0xee87ba00 + } +} struct_union { id: 0x6366329e kind: UNION @@ -205258,6 +210079,15 @@ struct_union { member_id: 0x12f2249e } } +struct_union { + id: 0x6875099c + kind: UNION + definition { + bytesize: 16 + member_id: 0xfa946861 + member_id: 0xab39140b + } +} struct_union { id: 0x6888b6e5 kind: UNION @@ -206273,6 +211103,15 @@ struct_union { member_id: 0xe0feb68b } } +struct_union { + id: 0x7d1c3635 + kind: UNION + definition { + bytesize: 8 + member_id: 0xafbad944 + member_id: 0x217694f6 + } +} struct_union { id: 0x7d93a8c7 kind: UNION @@ -209527,6 +214366,16 @@ struct_union { member_id: 0x2c23d29d } } +struct_union { + id: 0x1e9c55da + kind: STRUCT + name: "bpf_nh_params" + definition { + bytesize: 20 + member_id: 0xd51ec347 + member_id: 0x39d6d358 + } +} struct_union { id: 0xb52b1ec7 kind: STRUCT @@ -209743,6 +214592,22 @@ struct_union { member_id: 0x0082372e } } +struct_union { + id: 0x212d37a1 + kind: STRUCT + name: "bpf_redirect_info" + definition { + bytesize: 56 + member_id: 0x2da18c75 + member_id: 0x07611cab + member_id: 0xc9d6516c + member_id: 0x8df2c9e6 + member_id: 0x86e8bd6c + member_id: 0x2a093f90 + member_id: 0x632a4ba2 + member_id: 0x713b460f + } +} struct_union { id: 0x3a354a67 kind: STRUCT @@ -211612,6 +216477,30 @@ struct_union { member_id: 0xd0a3be49 } } +struct_union { + id: 0xca283f54 + kind: STRUCT + name: "cleancache_filekey" + definition { + bytesize: 24 + member_id: 0xec2a9cea + } +} +struct_union { + id: 0xfa93b413 + kind: STRUCT + name: "cleancache_ops" + definition { + bytesize: 56 + member_id: 0xedc364a3 + member_id: 0xcc9b87bc + member_id: 0xcf06c106 + member_id: 0x68c6881b + member_id: 0x107f64d3 + member_id: 0x6f43a794 + member_id: 0x6a15223b + } +} struct_union { id: 0xdd7b47eb kind: STRUCT @@ -214165,14 +219054,260 @@ struct_union { } } struct_union { - id: 0xbc952c91 + id: 0x198f8565 kind: STRUCT name: "devlink" + definition { + bytesize: 512 + member_id: 0xadf00094 + member_id: 0xcd6874e1 + member_id: 0x4134711d + member_id: 0xe1b6bbe3 + member_id: 0x3d9266c0 + member_id: 0x17c3228f + member_id: 0xb8b3f43c + member_id: 0x4fd311c5 + member_id: 0x6ac681cd + member_id: 0xefdb08b4 + member_id: 0x32a55865 + member_id: 0x10281c82 + member_id: 0x1877dc92 + member_id: 0x9516c9d8 + member_id: 0x2bafedce + member_id: 0x66da3728 + member_id: 0xafba248b + member_id: 0xc58a570e + member_id: 0xc24fadb5 + member_id: 0xb9583af1 + member_id: 0xce3bb522 + member_id: 0x3e75936d + member_id: 0x2d4b3330 + member_id: 0x5f5e621d + member_id: 0xf5250b55 + member_id: 0x05243b72 + member_id: 0x999f46a7 + member_id: 0x95dacba7 + member_id: 0x59c303be + } } struct_union { - id: 0x8256fc56 + id: 0x2d51c138 + kind: STRUCT + name: "devlink_dev_stats" + definition { + bytesize: 48 + member_id: 0x4492b926 + member_id: 0xadd03a27 + } +} +struct_union { + id: 0x4d3cebe1 + kind: STRUCT + name: "devlink_dpipe_field" + definition { + bytesize: 24 + member_id: 0x0de57ce8 + member_id: 0xcc6aad16 + member_id: 0x4a47d75f + member_id: 0x8b645ad4 + } +} +struct_union { + id: 0x751480f9 + kind: STRUCT + name: "devlink_dpipe_header" + definition { + bytesize: 32 + member_id: 0x0de57ce8 + member_id: 0xcc6aad16 + member_id: 0x784a4b9b + member_id: 0x361d56de + member_id: 0x55f132cc + } +} +struct_union { + id: 0xb55e29b2 + kind: STRUCT + name: "devlink_dpipe_headers" + definition { + bytesize: 16 + member_id: 0x614c39f2 + member_id: 0x958f08da + } +} +struct_union { + id: 0x8dfee289 + kind: STRUCT + name: "devlink_flash_update_params" + definition { + bytesize: 24 + member_id: 0x91e86fed + member_id: 0xe5d87fc5 + member_id: 0xc099cc3c + } +} +struct_union { + id: 0xa5206d7a + kind: STRUCT + name: "devlink_fmsg" + definition { + bytesize: 24 + member_id: 0x990317f0 + member_id: 0x82e1aed1 + } +} +struct_union { + id: 0xd5693f95 + kind: STRUCT + name: "devlink_health_reporter" + definition { + bytesize: 168 + member_id: 0x7c00ef52 + member_id: 0x59119163 + member_id: 0xafbb76d0 + member_id: 0x56ace115 + member_id: 0xeb76e483 + member_id: 0x210293e8 + member_id: 0x33fc8cf5 + member_id: 0x62d28eb5 + member_id: 0xea4e825c + member_id: 0x773b8f3f + member_id: 0x768a691a + member_id: 0x1e719a84 + member_id: 0x352c4ca4 + member_id: 0x0b6ea206 + member_id: 0x629c6b33 + member_id: 0x41fdc1b3 + member_id: 0x05243d41 + } +} +struct_union { + id: 0xdeaf8933 + kind: STRUCT + name: "devlink_health_reporter_ops" + definition { + bytesize: 40 + member_id: 0x0ddfefbb + member_id: 0x8a4b19d4 + member_id: 0x0a7d4966 + member_id: 0x30b83368 + member_id: 0x8db5ea4d + } +} +struct_union { + id: 0xcea2d9d1 + kind: STRUCT + name: "devlink_info_req" + definition { + bytesize: 24 + member_id: 0xe2057d5b + member_id: 0x8e9e82fd + member_id: 0xca2aa534 + } +} +struct_union { + id: 0x0383def3 kind: STRUCT name: "devlink_linecard" + definition { + bytesize: 136 + member_id: 0x7c00ef52 + member_id: 0x56ace87c + member_id: 0xad7c8510 + member_id: 0x05243818 + member_id: 0xafb646e8 + member_id: 0x59119f66 + member_id: 0x72b72416 + member_id: 0x46ecc05d + member_id: 0x5c68c671 + member_id: 0xf49ccf9e + member_id: 0x6e477688 + member_id: 0xe3a3de7e + } +} +struct_union { + id: 0x0d2a2bc0 + kind: STRUCT + name: "devlink_linecard_ops" + definition { + bytesize: 40 + member_id: 0xd3c8aa61 + member_id: 0x1f617d86 + member_id: 0xebfb4e21 + member_id: 0x6e3b6a83 + member_id: 0x88117783 + } +} +struct_union { + id: 0x12a087f3 + kind: STRUCT + name: "devlink_linecard_type" + definition { + bytesize: 16 + member_id: 0x5c68c5cb + member_id: 0x59303e30 + } +} +struct_union { + id: 0xcb5e2bb0 + kind: STRUCT + name: "devlink_ops" + definition { + bytesize: 424 + member_id: 0x9fc14365 + member_id: 0x83cb909a + member_id: 0xb0509801 + member_id: 0xf8981c0e + member_id: 0xa5ab7067 + member_id: 0xf43affcb + member_id: 0xa22f8c42 + member_id: 0x5f87545a + member_id: 0x93cb2df4 + member_id: 0xeaf07952 + member_id: 0x78a8c4ae + member_id: 0x6f535872 + member_id: 0x001ba0a6 + member_id: 0x07349e82 + member_id: 0xa9d0bb48 + member_id: 0x1197fb66 + member_id: 0x80e35930 + member_id: 0xde69b5bc + member_id: 0x67ecafb3 + member_id: 0x06f3214d + member_id: 0xff091101 + member_id: 0xf81283dc + member_id: 0x2d2ca64a + member_id: 0x0e5d040f + member_id: 0xe0c4d82e + member_id: 0x5ef8d6d5 + member_id: 0x37b507df + member_id: 0x24edb8c2 + member_id: 0x21a1a972 + member_id: 0x2b3b3947 + member_id: 0x3a9bd5f4 + member_id: 0xb252ef85 + member_id: 0x3c859cc4 + member_id: 0x950fbc14 + member_id: 0x1ba59c6d + member_id: 0xc8b0c1d4 + member_id: 0x5e35aa2e + member_id: 0x2e72e7e0 + member_id: 0x85af182d + member_id: 0x90793300 + member_id: 0x9e84141c + member_id: 0xa5c2f472 + member_id: 0xeb46d6f6 + member_id: 0x049c1f00 + member_id: 0x54806d5b + member_id: 0x7b7f9a93 + member_id: 0xeff7e2c9 + member_id: 0x573e57ed + member_id: 0x3d9c68f5 + member_id: 0x7f7f584f + member_id: 0x069fcabf + member_id: 0x561fd50f + member_id: 0xd95b0d92 + } } struct_union { id: 0xc7e35718 @@ -214182,7 +219317,7 @@ struct_union { bytesize: 344 member_id: 0x7c00ef52 member_id: 0x4fd31bbd - member_id: 0x5685a7bf + member_id: 0x56ace115 member_id: 0xad7c8a1e member_id: 0xc5a12bbd member_id: 0x5c46dd88 @@ -214197,7 +219332,7 @@ struct_union { member_id: 0x6ac6877c member_id: 0xefdb0c31 member_id: 0xf45f2394 - member_id: 0xd1c402eb + member_id: 0xd1e477a3 } } struct_union { @@ -214214,6 +219349,22 @@ struct_union { member_id: 0x357170d2 } } +struct_union { + id: 0x6807af97 + kind: STRUCT + name: "devlink_port_new_attrs" + definition { + bytesize: 20 + member_id: 0xdf2fd72b + member_id: 0xbf1e816a + member_id: 0xd8dc9c99 + member_id: 0x4c6b273e + member_id: 0x6980d678 + member_id: 0x0317cd78 + member_id: 0x1db19505 + member_id: 0x38a7e1c1 + } +} struct_union { id: 0xf0f5f897 kind: STRUCT @@ -214259,6 +219410,18 @@ struct_union { member_id: 0xd69a643e } } +struct_union { + id: 0xe6964d46 + kind: STRUCT + name: "devlink_port_region_ops" + definition { + bytesize: 32 + member_id: 0x0de57ce8 + member_id: 0xa4170b6e + member_id: 0x0c832449 + member_id: 0x59119068 + } +} struct_union { id: 0x1777d31b kind: STRUCT @@ -214267,7 +219430,7 @@ struct_union { bytesize: 80 member_id: 0x7c00ef52 member_id: 0x5cf2824f - member_id: 0x5685afdd + member_id: 0x56ace977 member_id: 0x5911980a member_id: 0xd3866153 member_id: 0x6d8a9147 @@ -214275,6 +219438,89 @@ struct_union { member_id: 0x38c01e38 } } +struct_union { + id: 0x47689b48 + kind: STRUCT + name: "devlink_region" + definition { + bytesize: 120 + member_id: 0x56ace1be + member_id: 0x48c075a0 + member_id: 0x7c00e690 + member_id: 0x3c8c9122 + member_id: 0xcbc193d6 + member_id: 0xcffde3b6 + member_id: 0x2a2e382b + member_id: 0x80fbe8a7 + member_id: 0xd9ec35e7 + } +} +struct_union { + id: 0xc4da5559 + kind: STRUCT + name: "devlink_region_ops" + definition { + bytesize: 32 + member_id: 0x0de57ce8 + member_id: 0xa4170b6e + member_id: 0x0c805fde + member_id: 0x59119068 + } +} +struct_union { + id: 0xe35e5ccd + kind: STRUCT + name: "devlink_sb_pool_info" + definition { + bytesize: 16 + member_id: 0xe52eef97 + member_id: 0xd9b71962 + member_id: 0x6ce0bb82 + member_id: 0x08477548 + } +} +struct_union { + id: 0x1c7a3d65 + kind: STRUCT + name: "devlink_trap" + definition { + bytesize: 32 + member_id: 0x5cbbb022 + member_id: 0x3ecaad84 + member_id: 0x4257f846 + member_id: 0xccbe65b2 + member_id: 0x0de5752a + member_id: 0xa4c7afe2 + member_id: 0xd492332a + } +} +struct_union { + id: 0x198b6a50 + kind: STRUCT + name: "devlink_trap_group" + definition { + bytesize: 16 + member_id: 0x0de57ce8 + member_id: 0xccbe65cf + member_id: 0x4257f83b + member_id: 0xf53cc107 + } +} +struct_union { + id: 0xaf8c5ca0 + kind: STRUCT + name: "devlink_trap_policer" + definition { + bytesize: 56 + member_id: 0xcce624ba + member_id: 0x2b41bb63 + member_id: 0xb36eb0c7 + member_id: 0x5cea623b + member_id: 0x7843c8a8 + member_id: 0x9c062023 + member_id: 0x7b580056 + } +} struct_union { id: 0xd1d07704 kind: STRUCT @@ -218853,6 +224099,20 @@ struct_union { member_id: 0xa6673206 } } +struct_union { + id: 0xce180920 + kind: STRUCT + name: "fastopen_queue" + definition { + bytesize: 40 + member_id: 0x4fed2df8 + member_id: 0xe2520be5 + member_id: 0x2d1fe547 + member_id: 0x9bf5ac3e + member_id: 0x6bf829f7 + member_id: 0xec94e17c + } +} struct_union { id: 0xbdd1c219 kind: STRUCT @@ -224751,6 +230011,16 @@ struct_union { member_id: 0xb4bb2348 } } +struct_union { + id: 0xe2574ab7 + kind: STRUCT + name: "in6_pktinfo" + definition { + bytesize: 20 + member_id: 0xce9a5c98 + member_id: 0x8e98680e + } +} struct_union { id: 0xa54936d5 kind: STRUCT @@ -224817,6 +230087,17 @@ struct_union { member_id: 0xb121c544 } } +struct_union { + id: 0x1f434195 + kind: STRUCT + name: "inet6_cork" + definition { + bytesize: 16 + member_id: 0xf67626a5 + member_id: 0x9f6b950b + member_id: 0x51ef8423 + } +} struct_union { id: 0xc4c18dc3 kind: STRUCT @@ -224884,6 +230165,42 @@ struct_union { member_id: 0xc5c8b651 } } +struct_union { + id: 0x03de7511 + kind: STRUCT + name: "inet_bind2_bucket" + definition { + bytesize: 64 + member_id: 0xe50fbded + member_id: 0xe6f3661d + member_id: 0x48322e2f + member_id: 0x9e9c9ad1 + member_id: 0x31fb35e2 + member_id: 0x0f3ca934 + member_id: 0xb8ff9609 + member_id: 0xbc5ebfd1 + } +} +struct_union { + id: 0xe6615d93 + kind: STRUCT + name: "inet_bind_bucket" + definition { + bytesize: 72 + member_id: 0xe50fbded + member_id: 0xe6f3661d + member_id: 0x48322e2f + member_id: 0xa6e81f22 + member_id: 0x244da0b8 + member_id: 0x73b4d4d5 + member_id: 0x6398a0a9 + member_id: 0xfd693ce8 + member_id: 0x247ebe29 + member_id: 0xcee88548 + member_id: 0x0f3ca80d + member_id: 0xb8ff9c83 + } +} struct_union { id: 0x89a37894 kind: STRUCT @@ -224894,6 +230211,100 @@ struct_union { member_id: 0x152992ef } } +struct_union { + id: 0x82dbb487 + kind: STRUCT + name: "inet_connection_sock" + definition { + bytesize: 1536 + member_id: 0x9bd0d4a0 + member_id: 0x2a778fa0 + member_id: 0xa53e6076 + member_id: 0xf1a367c5 + member_id: 0xe54062f3 + member_id: 0x3adf52b3 + member_id: 0xbf3d6991 + member_id: 0xaa84a388 + member_id: 0x7c9184fd + member_id: 0xcfd1f1ed + member_id: 0x9796567d + member_id: 0x2b917283 + member_id: 0xeb6a5fa1 + member_id: 0x50d22351 + member_id: 0x69ab5d87 + member_id: 0x411180b7 + member_id: 0x5392fe03 + member_id: 0x8adfff2f + member_id: 0x9b3f0555 + member_id: 0x5c570222 + member_id: 0x8e756dfb + member_id: 0x6bd77d33 + member_id: 0xfd5174f1 + member_id: 0xb27d04f5 + member_id: 0x2446b1e6 + member_id: 0x2d061585 + member_id: 0xd7cc2503 + member_id: 0xc36d8395 + member_id: 0xc75c6970 + member_id: 0xf4f5c9e8 + member_id: 0x973a1269 + member_id: 0x2d081c07 + member_id: 0xa86967ec + } +} +struct_union { + id: 0x5d95189a + kind: STRUCT + name: "inet_connection_sock_af_ops" + definition { + bytesize: 96 + member_id: 0x52c10ec0 + member_id: 0x6d7c55af + member_id: 0x198e2327 + member_id: 0x68c86260 + member_id: 0x495c1c6d + member_id: 0x472be94a + member_id: 0x729f250d + member_id: 0x171ea46a + member_id: 0x094f9496 + member_id: 0x852593c2 + member_id: 0xd9ad3ae7 + member_id: 0x09692cc4 + member_id: 0x2e3a46f9 + member_id: 0x2d08170f + } +} +struct_union { + id: 0xeeae7608 + kind: STRUCT + name: "inet_cork" + definition { + bytesize: 56 + member_id: 0x2d2d0138 + member_id: 0x24cfa4f0 + member_id: 0xf64ae666 + member_id: 0xe25ba6f2 + member_id: 0xb50a4f6b + member_id: 0xbbe3f808 + member_id: 0x34444209 + member_id: 0xf4da47b1 + member_id: 0xf113a55a + member_id: 0x10dc10b1 + member_id: 0xeaa4b2c9 + member_id: 0x1b258c6d + member_id: 0x8196ad18 + } +} +struct_union { + id: 0x60790295 + kind: STRUCT + name: "inet_cork_full" + definition { + bytesize: 152 + member_id: 0x853440fd + member_id: 0x75577b27 + } +} struct_union { id: 0x28cc893a kind: STRUCT @@ -224985,6 +230396,47 @@ struct_union { member_id: 0x9d345b6b } } +struct_union { + id: 0xd2a4529d + kind: STRUCT + name: "inet_sock" + definition { + bytesize: 1088 + member_id: 0x82ce9da8 + member_id: 0xe47590e7 + member_id: 0x8be10b49 + member_id: 0x8e099fc0 + member_id: 0x9e4ebac2 + member_id: 0x38f59a08 + member_id: 0x674b03be + member_id: 0x78639f81 + member_id: 0xf1a03e73 + member_id: 0xa28c3827 + member_id: 0x7008fda6 + member_id: 0x79ed9153 + member_id: 0xd1ac6cca + member_id: 0x1facb5a4 + member_id: 0x0ccb8adb + member_id: 0x3cd68edd + member_id: 0xa5d9163f + member_id: 0x73793851 + member_id: 0x1bda0ea3 + member_id: 0xb932820e + member_id: 0x87d4aa19 + member_id: 0x7e45f9f6 + member_id: 0x35577470 + member_id: 0x1ad125b2 + member_id: 0x3c401b61 + member_id: 0x1d8e0899 + member_id: 0x02fcf451 + member_id: 0x5a22c9ad + member_id: 0x9c6a8ab2 + member_id: 0xa608f9d7 + member_id: 0x5b66efeb + member_id: 0x2d08191c + member_id: 0x63760c6b + } +} struct_union { id: 0x53a9065e kind: STRUCT @@ -226412,6 +231864,26 @@ struct_union { member_id: 0x962b59ac } } +struct_union { + id: 0x04ad1af1 + kind: STRUCT + name: "ip6_flowlabel" + definition { + bytesize: 104 + member_id: 0x11f8bba0 + member_id: 0x05cb6176 + member_id: 0x85d92902 + member_id: 0xbb9c8500 + member_id: 0xf676260e + member_id: 0xe93fdbc8 + member_id: 0x95dac8e5 + member_id: 0xeb4f31b9 + member_id: 0x4ad6a726 + member_id: 0xccd48510 + member_id: 0x91036748 + member_id: 0x1f4e61c9 + } +} struct_union { id: 0xdcb15adf kind: STRUCT @@ -226427,6 +231899,18 @@ struct_union { member_id: 0x95dac8e5 } } +struct_union { + id: 0xe42ec820 + kind: STRUCT + name: "ip6_sf_socklist" + definition { + bytesize: 24 + member_id: 0x047148a0 + member_id: 0xeea06d44 + member_id: 0x95dacd96 + member_id: 0x7f9c0ca0 + } +} struct_union { id: 0x5096f267 kind: STRUCT @@ -226520,6 +232004,19 @@ struct_union { member_id: 0x95dac7ab } } +struct_union { + id: 0x04be5205 + kind: STRUCT + name: "ip_mc_socklist" + definition { + bytesize: 48 + member_id: 0x11613e69 + member_id: 0xe7efca93 + member_id: 0x00c085ca + member_id: 0x25db7175 + member_id: 0x95dac9dc + } +} struct_union { id: 0xf86b845e kind: STRUCT @@ -226531,6 +232028,40 @@ struct_union { member_id: 0xf77583a5 } } +struct_union { + id: 0x29719ae3 + kind: STRUCT + name: "ip_options" + definition { + bytesize: 16 + member_id: 0xe37696ac + member_id: 0xe2d3a144 + member_id: 0x3cedbd03 + member_id: 0x3a20fe11 + member_id: 0xe752e605 + member_id: 0x95c9b8f6 + member_id: 0x1e6a6587 + member_id: 0x3feffe90 + member_id: 0xb9615f80 + member_id: 0xe5e354be + member_id: 0xb15e52c6 + member_id: 0x5ffbc843 + member_id: 0xe1754ad1 + member_id: 0x1dfe157e + member_id: 0x86165645 + member_id: 0xf4a9b31e + } +} +struct_union { + id: 0xca64cdd4 + kind: STRUCT + name: "ip_options_rcu" + definition { + bytesize: 32 + member_id: 0x95dac977 + member_id: 0xf6635680 + } +} struct_union { id: 0xe6a8bc0b kind: STRUCT @@ -226557,6 +232088,18 @@ struct_union { member_id: 0x494491e1 } } +struct_union { + id: 0xdc40a74d + kind: STRUCT + name: "ip_sf_socklist" + definition { + bytesize: 24 + member_id: 0x047148a0 + member_id: 0xeea06d44 + member_id: 0x95dacd96 + member_id: 0x7fbfd873 + } +} struct_union { id: 0x19e78670 kind: STRUCT @@ -226692,6 +232235,17 @@ struct_union { member_id: 0x724ae662 } } +struct_union { + id: 0x2cf9bbda + kind: STRUCT + name: "ipv6_ac_socklist" + definition { + bytesize: 32 + member_id: 0x7980c676 + member_id: 0xa102d1d4 + member_id: 0x23f246a8 + } +} struct_union { id: 0x66c6fbfa kind: STRUCT @@ -226775,6 +232329,97 @@ struct_union { member_id: 0xda3c6150 } } +struct_union { + id: 0xd421869b + kind: STRUCT + name: "ipv6_fl_socklist" + definition { + bytesize: 32 + member_id: 0x11cc9887 + member_id: 0x75129e6a + member_id: 0x95dac0b5 + } +} +struct_union { + id: 0x61c3c826 + kind: STRUCT + name: "ipv6_mc_socklist" + definition { + bytesize: 56 + member_id: 0x2440fa86 + member_id: 0x90568e8d + member_id: 0x00c085ca + member_id: 0x11e1e8dd + member_id: 0x25d5628c + member_id: 0x95daceb0 + } +} +struct_union { + id: 0xe7d07a15 + kind: STRUCT + name: "ipv6_opt_hdr" + definition { + bytesize: 2 + member_id: 0xe85e1d32 + member_id: 0xd608b573 + } +} +struct_union { + id: 0x65bafa41 + kind: STRUCT + name: "ipv6_pinfo" + definition { + bytesize: 152 + member_id: 0xf85f9f77 + member_id: 0x39865348 + member_id: 0xca75de5a + member_id: 0x2ac20e0b + member_id: 0x3c1c76af + member_id: 0x370a9ced + member_id: 0x46cd5abc + member_id: 0xa582fe9b + member_id: 0x8c5039ca + member_id: 0x34d8f2b6 + member_id: 0x95dcef8c + member_id: 0xe14bd1fe + member_id: 0xca5da826 + member_id: 0xd1f78df1 + member_id: 0xc40b184c + member_id: 0x7560b519 + member_id: 0x6e852b14 + member_id: 0xb13666fe + member_id: 0xaab1780b + member_id: 0x4b741bd1 + member_id: 0x6854e737 + member_id: 0xe803bc2e + member_id: 0x1b81e20c + member_id: 0x7e1e1e3e + member_id: 0xe5f931e3 + member_id: 0x78ae54cb + member_id: 0x51753049 + member_id: 0x608ed11c + member_id: 0x3e931a99 + member_id: 0xfce07b0f + member_id: 0xe2141007 + member_id: 0x1e958d31 + member_id: 0xf6762c03 + member_id: 0xe8802f7b + member_id: 0x80588b5f + member_id: 0xa677c461 + } +} +struct_union { + id: 0x61267b05 + kind: STRUCT + name: "ipv6_rt_hdr" + definition { + bytesize: 4 + member_id: 0xe85e1d32 + member_id: 0xd608b573 + member_id: 0x5ce53c7a + member_id: 0x498b56ac + } +} struct_union { id: 0x8b8aa3c2 kind: STRUCT @@ -226816,6 +232461,23 @@ struct_union { member_id: 0x12832f3f } } +struct_union { + id: 0xda61121d + kind: STRUCT + name: "ipv6_txoptions" + definition { + bytesize: 64 + member_id: 0xb7dcf8ac + member_id: 0x3eb7848c + member_id: 0x5e1efe31 + member_id: 0x00c73957 + member_id: 0x111085fe + member_id: 0xebf05092 + member_id: 0xcd7a45a0 + member_id: 0xfb3c6654 + member_id: 0x95dac8e5 + } +} struct_union { id: 0x97012809 kind: STRUCT @@ -230391,6 +236053,25 @@ struct_union { member_id: 0x73407d9e } } +struct_union { + id: 0x98a86aa3 + kind: STRUCT + name: "minmax" + definition { + bytesize: 24 + member_id: 0x67c839a9 + } +} +struct_union { + id: 0xa12e384a + kind: STRUCT + name: "minmax_sample" + definition { + bytesize: 8 + member_id: 0xab76db82 + member_id: 0x28f6afd5 + } +} struct_union { id: 0x0fc94b61 kind: STRUCT @@ -234464,6 +240145,23 @@ struct_union { member_id: 0xb59c78b7 } } +struct_union { + id: 0x798d1382 + kind: STRUCT + name: "page_vma_mapped_walk" + definition { + bytesize: 72 + member_id: 0x64bb7964 + member_id: 0xe3b1b19e + member_id: 0xadfdef1c + member_id: 0x239192da + member_id: 0x30e26822 + member_id: 0x56639dd1 + member_id: 0xa17fe2dc + member_id: 0xce4422cd + member_id: 0x2d2d0a20 + } +} struct_union { id: 0x3844dda9 kind: STRUCT @@ -239807,6 +245505,22 @@ struct_union { member_id: 0xd072e4b9 } } +struct_union { + id: 0xf05a506e + kind: STRUCT + name: "request_sock_queue" + definition { + bytesize: 80 + member_id: 0xf1af1f8d + member_id: 0x6f5c1006 + member_id: 0x77b35ac5 + member_id: 0x9be65a12 + member_id: 0x2baf73ff + member_id: 0x5367b67f + member_id: 0x07b1da25 + member_id: 0x5aaa76bb + } +} struct_union { id: 0x85641a49 kind: STRUCT @@ -243642,6 +249356,25 @@ struct_union { kind: STRUCT name: "smc_hashinfo" } +struct_union { + id: 0xf265ff6f + kind: STRUCT + name: "smp_hotplug_thread" + definition { + bytesize: 96 + member_id: 0xacd44104 + member_id: 0x7c00ebb3 + member_id: 0x4118a1ce + member_id: 0x3e886d7b + member_id: 0x0f89928e + member_id: 0x84c3a238 + member_id: 0x200938c6 + member_id: 0xc70bed2a + member_id: 0x6fd6cd07 + member_id: 0x5937e22e + member_id: 0xa81d1890 + } +} struct_union { id: 0x6c8e86b4 kind: STRUCT @@ -248023,6 +253756,30 @@ struct_union { member_id: 0x95daceb0 } } +struct_union { + id: 0x0cb73b55 + kind: STRUCT + name: "tcp_fastopen_cookie" + definition { + bytesize: 24 + member_id: 0x4f647aa3 + member_id: 0xb82c6bed + member_id: 0x9633fcdf + } +} +struct_union { + id: 0x38e5bb2f + kind: STRUCT + name: "tcp_fastopen_request" + definition { + bytesize: 56 + member_id: 0x5846e373 + member_id: 0xffbef712 + member_id: 0xd98a29b1 + member_id: 0x5414dc08 + member_id: 0x50ba6c8c + } +} struct_union { id: 0x85ab6757 kind: STRUCT @@ -248032,6 +253789,220 @@ struct_union { member_id: 0x0d3e3662 } } +struct_union { + id: 0xfb9626d5 + kind: STRUCT + name: "tcp_options_received" + definition { + bytesize: 24 + member_id: 0x8131134d + member_id: 0x851fefad + member_id: 0x908732db + member_id: 0xa56c13a3 + member_id: 0x037e8aa7 + member_id: 0xcd6e1313 + member_id: 0x09aae020 + member_id: 0xf0ca4be8 + member_id: 0xa9edea21 + member_id: 0x7d4497ce + member_id: 0xa597551f + member_id: 0x64ea7467 + member_id: 0x9eb3a9b9 + member_id: 0xc2fb89b4 + member_id: 0x7cf21fa8 + member_id: 0xc4835a3d + member_id: 0x5ddbff68 + } +} +struct_union { + id: 0xd4132c46 + kind: STRUCT + name: "tcp_rack" + definition { + bytesize: 24 + member_id: 0xf3d1e1b3 + member_id: 0x2e52fcab + member_id: 0xd5a564b1 + member_id: 0x8762b004 + member_id: 0xc2607053 + member_id: 0x599289d3 + member_id: 0x28f28f83 + member_id: 0xec6d552f + } +} +struct_union { + id: 0xe9e88d93 + kind: STRUCT + name: "tcp_sack_block" + definition { + bytesize: 8 + member_id: 0x3d5d011f + member_id: 0xd5a56009 + } +} +struct_union { + id: 0x45ac4f1e + kind: STRUCT + name: "tcp_sock" + definition { + bytesize: 2368 + member_id: 0x07676cab + member_id: 0xc07533a2 + member_id: 0x085eba8a + member_id: 0xfcce6b61 + member_id: 0xda945faa + member_id: 0x43536458 + member_id: 0x7ecbe350 + member_id: 0x722b8728 + member_id: 0x1ec2d3d6 + member_id: 0x93db6466 + member_id: 0x24e972c0 + member_id: 0xef3672e0 + member_id: 0xdb2f5379 + member_id: 0x840adfe0 + member_id: 0x3ed6f46c + member_id: 0x7efdf5c5 + member_id: 0x8248546f + member_id: 0x9c800493 + member_id: 0x9a3cd5ff + member_id: 0xcaaa728e + member_id: 0x41099e1a + member_id: 0x036494f3 + member_id: 0xaf1c2858 + member_id: 0xb4b04624 + member_id: 0x3fe882fb + member_id: 0x1f8008f5 + member_id: 0xb8d73d0d + member_id: 0xb0b5b654 + member_id: 0x8571ffda + member_id: 0x98ad753d + member_id: 0x8a514678 + member_id: 0x2c2c5bfb + member_id: 0x1d3891d6 + member_id: 0x4aed4e02 + member_id: 0x330d862e + member_id: 0xdab01e8a + member_id: 0xd0fa2acf + member_id: 0x6c3076ab + member_id: 0x4b0fd146 + member_id: 0x5514b7d1 + member_id: 0xd6330125 + member_id: 0x5d29f448 + member_id: 0x72c8b468 + member_id: 0xb9f127f6 + member_id: 0xa42f5b5e + member_id: 0xa073f76a + member_id: 0xe07791d5 + member_id: 0xd4dd684d + member_id: 0xf06d788d + member_id: 0xdaf769b4 + member_id: 0xd0cd0f99 + member_id: 0x1d3cf444 + member_id: 0x590d4988 + member_id: 0x5e175424 + member_id: 0xe4473696 + member_id: 0x1273b273 + member_id: 0x7d5a2639 + member_id: 0xb9645bc8 + member_id: 0x81d25425 + member_id: 0x5005e20e + member_id: 0x2c472957 + member_id: 0x5e1e9277 + member_id: 0x0c6e4e2a + member_id: 0x28d4f0ae + member_id: 0x00d04522 + member_id: 0xf098d631 + member_id: 0x861205e4 + member_id: 0x50d5f815 + member_id: 0xbb70420d + member_id: 0xfdbc865b + member_id: 0x0b8a1650 + member_id: 0x1d340096 + member_id: 0xd7cfbd25 + member_id: 0x6e240c8e + member_id: 0x3dfa7679 + member_id: 0xeb2f3b5f + member_id: 0x6e16f71f + member_id: 0xbffa6140 + member_id: 0x611d6152 + member_id: 0xedd761bd + member_id: 0xcf588653 + member_id: 0x3b23e448 + member_id: 0xdef99a11 + member_id: 0x0ed29348 + member_id: 0x9e51f1aa + member_id: 0xe301bb69 + member_id: 0xa9ca3fe9 + member_id: 0x3ce5a47e + member_id: 0xe9e7b435 + member_id: 0x986caa86 + member_id: 0xe06780dd + member_id: 0x14a57188 + member_id: 0x484997ff + member_id: 0xc8ee40be + member_id: 0xc6e15ebb + member_id: 0x18e683dd + member_id: 0x47a61a29 + member_id: 0x073e90bb + member_id: 0xd5cb059f + member_id: 0xfdfb52fb + member_id: 0xa598ac7c + member_id: 0x2d8724a1 + member_id: 0xbd3e4a51 + member_id: 0xb18c6cab + member_id: 0xe98a4697 + member_id: 0x86cd98a0 + member_id: 0x05aa0dfa + member_id: 0x0b88a7b8 + member_id: 0x78ec3163 + member_id: 0xac4c8092 + member_id: 0x3a30a25b + member_id: 0x2ae3d7d3 + member_id: 0x6da3106a + member_id: 0x36a89416 + member_id: 0x17b8fb75 + member_id: 0x60f3e5b5 + member_id: 0x92525caa + member_id: 0x44e15491 + member_id: 0x7392ff81 + member_id: 0xd77f2af8 + member_id: 0x1ab0aff5 + member_id: 0xf6fff0ee + member_id: 0x9e7c1e77 + member_id: 0xb4c1a226 + member_id: 0x0ab38392 + member_id: 0xa6861f94 + member_id: 0xf5c438ad + member_id: 0x203d8bb9 + member_id: 0x3a366be0 + member_id: 0xcebd1125 + member_id: 0x035a9f8f + member_id: 0x38961e9d + member_id: 0x541b592a + member_id: 0x3641013e + member_id: 0x349100e3 + member_id: 0x7a4a99f1 + member_id: 0x72f4ca16 + member_id: 0x2d081e39 + } +} +struct_union { + id: 0xa19fd9aa + kind: STRUCT + name: "tcp_ulp_ops" + definition { + bytesize: 88 + member_id: 0x7c00ef52 + member_id: 0x1ac6e8a5 + member_id: 0xd6aa460e + member_id: 0xae97905e + member_id: 0x1d9b9b9d + member_id: 0xbaa156f0 + member_id: 0xf6c2da43 + member_id: 0x0d994758 + member_id: 0x4a965429 + } +} struct_union { id: 0xcfff757d kind: STRUCT @@ -258597,7 +264568,7 @@ struct_union { member_id: 0x06879837 member_id: 0xf762467b member_id: 0x26b32295 - member_id: 0x2d0811d3 + member_id: 0x31a5da6f member_id: 0x63760917 member_id: 0xac894244 member_id: 0xe0f63158 @@ -263826,6 +269797,104 @@ enumeration { } } } +enumeration { + id: 0xe09c0936 + name: "devlink_dpipe_field_mapping_type" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE" + } + enumerator { + name: "DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX" + value: 1 + } + } +} +enumeration { + id: 0xc700b957 + name: "devlink_eswitch_encap_mode" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_ESWITCH_ENCAP_MODE_NONE" + } + enumerator { + name: "DEVLINK_ESWITCH_ENCAP_MODE_BASIC" + value: 1 + } + } +} +enumeration { + id: 0x1afd1fe8 + name: "devlink_health_reporter_state" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_HEALTH_REPORTER_STATE_HEALTHY" + } + enumerator { + name: "DEVLINK_HEALTH_REPORTER_STATE_ERROR" + value: 1 + } + } +} +enumeration { + id: 0x49f89a6d + name: "devlink_info_version_type" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_INFO_VERSION_TYPE_NONE" + } + enumerator { + name: "DEVLINK_INFO_VERSION_TYPE_COMPONENT" + value: 1 + } + } +} +enumeration { + id: 0x44d985d5 + name: "devlink_linecard_state" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_LINECARD_STATE_UNSPEC" + } + enumerator { + name: "DEVLINK_LINECARD_STATE_UNPROVISIONED" + value: 1 + } + enumerator { + name: "DEVLINK_LINECARD_STATE_UNPROVISIONING" + value: 2 + } + enumerator { + name: "DEVLINK_LINECARD_STATE_PROVISIONING" + value: 3 + } + enumerator { + name: "DEVLINK_LINECARD_STATE_PROVISIONING_FAILED" + value: 4 + } + enumerator { + name: "DEVLINK_LINECARD_STATE_PROVISIONED" + value: 5 + } + enumerator { + name: "DEVLINK_LINECARD_STATE_ACTIVE" + value: 6 + } + enumerator { + name: "__DEVLINK_LINECARD_STATE_MAX" + value: 7 + } + enumerator { + name: "DEVLINK_LINECARD_STATE_MAX" + value: 6 + } + } +} enumeration { id: 0x03e0374b name: "devlink_port_flavour" @@ -263864,6 +269933,34 @@ enumeration { } } } +enumeration { + id: 0x769abc6d + name: "devlink_port_fn_opstate" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_PORT_FN_OPSTATE_DETACHED" + } + enumerator { + name: "DEVLINK_PORT_FN_OPSTATE_ATTACHED" + value: 1 + } + } +} +enumeration { + id: 0x666a7a1b + name: "devlink_port_fn_state" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_PORT_FN_STATE_INACTIVE" + } + enumerator { + name: "DEVLINK_PORT_FN_STATE_ACTIVE" + value: 1 + } + } +} enumeration { id: 0x100964d4 name: "devlink_port_type" @@ -263900,6 +269997,136 @@ enumeration { } } } +enumeration { + id: 0xb38a8bec + name: "devlink_reload_action" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_RELOAD_ACTION_UNSPEC" + } + enumerator { + name: "DEVLINK_RELOAD_ACTION_DRIVER_REINIT" + value: 1 + } + enumerator { + name: "DEVLINK_RELOAD_ACTION_FW_ACTIVATE" + value: 2 + } + enumerator { + name: "__DEVLINK_RELOAD_ACTION_MAX" + value: 3 + } + enumerator { + name: "DEVLINK_RELOAD_ACTION_MAX" + value: 2 + } + } +} +enumeration { + id: 0x35c4d162 + name: "devlink_reload_limit" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_RELOAD_LIMIT_UNSPEC" + } + enumerator { + name: "DEVLINK_RELOAD_LIMIT_NO_RESET" + value: 1 + } + enumerator { + name: "__DEVLINK_RELOAD_LIMIT_MAX" + value: 2 + } + enumerator { + name: "DEVLINK_RELOAD_LIMIT_MAX" + value: 1 + } + } +} +enumeration { + id: 0xa7051d2f + name: "devlink_sb_pool_type" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_SB_POOL_TYPE_INGRESS" + } + enumerator { + name: "DEVLINK_SB_POOL_TYPE_EGRESS" + value: 1 + } + } +} +enumeration { + id: 0xcbcc8512 + name: "devlink_sb_threshold_type" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_SB_THRESHOLD_TYPE_STATIC" + } + enumerator { + name: "DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC" + value: 1 + } + } +} +enumeration { + id: 0xba990d57 + name: "devlink_selftest_status" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_SELFTEST_STATUS_SKIP" + } + enumerator { + name: "DEVLINK_SELFTEST_STATUS_PASS" + value: 1 + } + enumerator { + name: "DEVLINK_SELFTEST_STATUS_FAIL" + value: 2 + } + } +} +enumeration { + id: 0x322b7a90 + name: "devlink_trap_action" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_TRAP_ACTION_DROP" + } + enumerator { + name: "DEVLINK_TRAP_ACTION_TRAP" + value: 1 + } + enumerator { + name: "DEVLINK_TRAP_ACTION_MIRROR" + value: 2 + } + } +} +enumeration { + id: 0xed655c73 + name: "devlink_trap_type" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "DEVLINK_TRAP_TYPE_DROP" + } + enumerator { + name: "DEVLINK_TRAP_TYPE_EXCEPTION" + value: 1 + } + enumerator { + name: "DEVLINK_TRAP_TYPE_CONTROL" + value: 2 + } + } +} enumeration { id: 0x69efc53e name: "df_reason" @@ -271448,6 +277675,28 @@ enumeration { } } } +enumeration { + id: 0x00381413 + name: "scan_balance" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "SCAN_EQUAL" + } + enumerator { + name: "SCAN_FRACT" + value: 1 + } + enumerator { + name: "SCAN_ANON" + value: 2 + } + enumerator { + name: "SCAN_FILE" + value: 3 + } + } +} enumeration { id: 0xbcb85241 name: "scsi_cmnd_submitter" @@ -275417,6 +281666,12 @@ enumeration { } } } +function { + id: 0x004cf563 + return_type_id: 0x48b5725f + parameter_id: 0x4585663f + parameter_id: 0x6d7f5ff6 +} function { id: 0x00a508d8 return_type_id: 0x100a15ee @@ -275460,6 +281715,15 @@ function { id: 0x012b29b0 return_type_id: 0x914dbfdc } +function { + id: 0x012cb0da + return_type_id: 0x48b5725f + parameter_id: 0x4585663f + parameter_id: 0x34818c51 + parameter_id: 0x18bd6530 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x914dbfdc +} function { id: 0x013800d7 return_type_id: 0x48b5725f @@ -275816,6 +282080,27 @@ function { parameter_id: 0x091f4a0b parameter_id: 0x3286774f } +function { + id: 0x0a7402f1 + return_type_id: 0x48b5725f + parameter_id: 0x6720d32f + parameter_id: 0xca283f54 + parameter_id: 0x33756485 + parameter_id: 0x06835e9c +} +function { + id: 0x0a7418fc + return_type_id: 0x48b5725f + parameter_id: 0x6720d32f + parameter_id: 0xca283f54 + parameter_id: 0x33756485 +} +function { + id: 0x0a78c5a5 + return_type_id: 0x48b5725f + parameter_id: 0x6720d32f + parameter_id: 0xca283f54 +} function { id: 0x0a9e8df2 return_type_id: 0x079ff791 @@ -278025,6 +284310,15 @@ function { return_type_id: 0x48b5725f parameter_id: 0x0bbe1c3e } +function { + id: 0x1277e3bd + return_type_id: 0x48b5725f + parameter_id: 0x0a70ce1b + parameter_id: 0x18bd6530 + parameter_id: 0x4585663f + parameter_id: 0x051414e1 + parameter_id: 0x04d7fcdd +} function { id: 0x127987a5 return_type_id: 0x48b5725f @@ -278550,6 +284844,22 @@ function { parameter_id: 0x054f691a parameter_id: 0x391f15ea } +function { + id: 0x1353a05d + return_type_id: 0x48b5725f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3e10b518 + parameter_id: 0x3e10b518 + parameter_id: 0x33756485 + parameter_id: 0x33756485 +} +function { + id: 0x1353c771 + return_type_id: 0x48b5725f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c53e119 + parameter_id: 0x18bd6530 +} function { id: 0x13544dcf return_type_id: 0x48b5725f @@ -278682,6 +284992,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x6720d32f } +function { + id: 0x137915b0 + return_type_id: 0x48b5725f + parameter_id: 0x0cf3d8fe + parameter_id: 0x376c8705 +} function { id: 0x13797fb7 return_type_id: 0x48b5725f @@ -278787,6 +285103,11 @@ function { parameter_id: 0xe02e14d6 parameter_id: 0xf435685e } +function { + id: 0x13a4a7ac + return_type_id: 0x48b5725f + parameter_id: 0x0cf3d8fe +} function { id: 0x13a62397 return_type_id: 0x48b5725f @@ -279279,6 +285600,13 @@ function { parameter_id: 0x12bb35ff parameter_id: 0x1582ab06 } +function { + id: 0x1462512b + return_type_id: 0x48b5725f + parameter_id: 0x1344d43c + parameter_id: 0x0cbf60eb + parameter_id: 0x6720d32f +} function { id: 0x14667c52 return_type_id: 0x48b5725f @@ -280373,6 +286701,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x1b7b196f } +function { + id: 0x164ad64e + return_type_id: 0x48b5725f + parameter_id: 0x1b4a1f75 +} function { id: 0x164c5933 return_type_id: 0x48b5725f @@ -280821,6 +287154,13 @@ function { parameter_id: 0x105c8027 parameter_id: 0x914dbfdc } +function { + id: 0x16cab29d + return_type_id: 0x48b5725f + parameter_id: 0x1a1051a0 + parameter_id: 0x31e58fe0 + parameter_id: 0x4585663f +} function { id: 0x16cc357f return_type_id: 0x48b5725f @@ -281051,12 +287391,25 @@ function { parameter_id: 0x1d19a9d5 parameter_id: 0x310ec01d } +function { + id: 0x171a1012 + return_type_id: 0x48b5725f + parameter_id: 0x1d44326e + parameter_id: 0x34d3469d +} function { id: 0x171c8621 return_type_id: 0xd5cc9c9a parameter_id: 0x09626b7f parameter_id: 0x6d7f5ff6 } +function { + id: 0x17256acc + return_type_id: 0x48b5725f + parameter_id: 0x1d44326e + parameter_id: 0x3bfbd7cf + parameter_id: 0x0f626ee5 +} function { id: 0x172842ec return_type_id: 0x48b5725f @@ -281108,6 +287461,12 @@ function { parameter_id: 0x6720d32f parameter_id: 0x18bd6530 } +function { + id: 0x1730d353 + return_type_id: 0x48b5725f + parameter_id: 0x1d44326e + parameter_id: 0x3e6396e0 +} function { id: 0x1731208f return_type_id: 0x48b5725f @@ -284373,6 +290732,11 @@ function { parameter_id: 0x36194830 parameter_id: 0x026525e9 } +function { + id: 0x1d1a000c + return_type_id: 0x48b5725f + parameter_id: 0x3609467c +} function { id: 0x1d1cf212 return_type_id: 0x48b5725f @@ -284565,6 +290929,13 @@ function { parameter_id: 0x347303b4 parameter_id: 0x3e10b518 } +function { + id: 0x1d657c6d + return_type_id: 0x48b5725f + parameter_id: 0x36d15200 + parameter_id: 0x1d44326e + parameter_id: 0xf1a6dfed +} function { id: 0x1d6aeee7 return_type_id: 0x48b5725f @@ -285199,6 +291570,13 @@ function { parameter_id: 0x3b04bead parameter_id: 0x18bd6530 } +function { + id: 0x1e3db1e5 + return_type_id: 0x48b5725f + parameter_id: 0x3e10b518 + parameter_id: 0x49f89a6d + parameter_id: 0x18bd6530 +} function { id: 0x1e3f491e return_type_id: 0x48b5725f @@ -285206,6 +291584,13 @@ function { parameter_id: 0x4585663f parameter_id: 0x6720d32f } +function { + id: 0x1e4106e1 + return_type_id: 0x48b5725f + parameter_id: 0x3b04bead + parameter_id: 0x07027638 + parameter_id: 0x11c404ba +} function { id: 0x1e4577e0 return_type_id: 0x48b5725f @@ -285829,6 +292214,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x3e6239e1 } +function { + id: 0x1f01387c + return_type_id: 0x48b5725f + parameter_id: 0x3fca7642 + parameter_id: 0x1afd1fe8 +} function { id: 0x1f060fb8 return_type_id: 0x48b5725f @@ -285863,6 +292254,11 @@ function { parameter_id: 0x0cbf60eb parameter_id: 0x095a3c37 } +function { + id: 0x1f121b27 + return_type_id: 0x48b5725f + parameter_id: 0x3e292ad1 +} function { id: 0x1f15c803 return_type_id: 0x48b5725f @@ -286191,6 +292587,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x3fc475cd } +function { + id: 0x1f6acc03 + return_type_id: 0x48b5725f + parameter_id: 0x3fca7642 +} function { id: 0x1f729ba1 return_type_id: 0x48b5725f @@ -286588,6 +292989,12 @@ function { parameter_id: 0x32fddfe5 parameter_id: 0xf641dd8a } +function { + id: 0x20151959 + return_type_id: 0x2b8f13b3 + parameter_id: 0x33f8b54b + parameter_id: 0x0bf1a65b +} function { id: 0x209ae488 return_type_id: 0x37f9fd94 @@ -286791,6 +293198,14 @@ function { parameter_id: 0x6720d32f parameter_id: 0x6720d32f } +function { + id: 0x2720cd28 + return_type_id: 0x3fca7642 + parameter_id: 0x0cf3d8fe + parameter_id: 0x307eba5c + parameter_id: 0x92233392 + parameter_id: 0x18bd6530 +} function { id: 0x27d025a4 return_type_id: 0x40e51470 @@ -288128,6 +294543,12 @@ function { parameter_id: 0x0258f96e parameter_id: 0xf435685e } +function { + id: 0x4022c156 + return_type_id: 0xc9082b19 + parameter_id: 0x1bfb2a60 + parameter_id: 0xc9082b19 +} function { id: 0x40326129 return_type_id: 0x31675062 @@ -288900,6 +295321,12 @@ function { id: 0x534abe77 return_type_id: 0x295c7202 } +function { + id: 0x5373932e + return_type_id: 0x18bd6530 + parameter_id: 0x11e6864c + parameter_id: 0x6720d32f +} function { id: 0x537f4e77 return_type_id: 0x18bd6530 @@ -289032,6 +295459,13 @@ function { return_type_id: 0x08faf209 parameter_id: 0x11e6864c } +function { + id: 0x553ed14c + return_type_id: 0xba990d57 + parameter_id: 0x0cf3d8fe + parameter_id: 0x4585663f + parameter_id: 0x07dcdbe1 +} function { id: 0x55423178 return_type_id: 0x18bd6530 @@ -289057,6 +295491,11 @@ function { return_type_id: 0x18bd6530 parameter_id: 0x0c48c037 } +function { + id: 0x55aa47ce + return_type_id: 0x18bd6530 + parameter_id: 0x0cf3d8fe +} function { id: 0x55afd20f return_type_id: 0x2131312a @@ -289462,6 +295901,11 @@ function { parameter_id: 0x30cfc1c2 parameter_id: 0xf1a6dfed } +function { + id: 0x59642c61 + return_type_id: 0x18bd6530 + parameter_id: 0x3fca7642 +} function { id: 0x596454e5 return_type_id: 0x92233392 @@ -289710,6 +296154,14 @@ function { parameter_id: 0xf435685e parameter_id: 0x6720d32f } +function { + id: 0x5bbe2188 + return_type_id: 0x0cf3d8fe + parameter_id: 0x3121a074 + parameter_id: 0xf435685e + parameter_id: 0x0ca27481 + parameter_id: 0x0258f96e +} function { id: 0x5bd76b9c return_type_id: 0x18bd6530 @@ -290065,6 +296517,16 @@ function { return_type_id: 0x249959de parameter_id: 0x347303b4 } +function { + id: 0x6240298a + return_type_id: 0x1d44326e + parameter_id: 0x3861403d + parameter_id: 0x054f691a + parameter_id: 0x27847a9a + parameter_id: 0x1259e377 + parameter_id: 0x27847a9a + parameter_id: 0x11cfee5a +} function { id: 0x624b0f22 return_type_id: 0x0537fb37 @@ -290303,6 +296765,13 @@ function { parameter_id: 0x2584a3b9 parameter_id: 0x6d7f5ff6 } +function { + id: 0x69be77aa + return_type_id: 0x054f691a + parameter_id: 0x054f691a + parameter_id: 0x18bd6530 + parameter_id: 0x4585663f +} function { id: 0x69cde367 return_type_id: 0x054f691a @@ -291623,6 +298092,14 @@ function { parameter_id: 0x21003da7 parameter_id: 0x21530c77 } +function { + id: 0x876cb04d + return_type_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0xca283f54 + parameter_id: 0x33756485 + parameter_id: 0x06835e9c +} function { id: 0x87739e97 return_type_id: 0x3a583251 @@ -292111,6 +298588,11 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x18bd6530 } +function { + id: 0x9002b2b0 + return_type_id: 0x6720d32f + parameter_id: 0x3609467c +} function { id: 0x9006b123 return_type_id: 0x6720d32f @@ -292299,6 +298781,14 @@ function { parameter_id: 0x92233392 parameter_id: 0x2e0f9112 } +function { + id: 0x9038705c + return_type_id: 0x6720d32f + parameter_id: 0x347303b4 + parameter_id: 0x2afee447 + parameter_id: 0x38d23361 + parameter_id: 0x6720d32f +} function { id: 0x9038edd5 return_type_id: 0x6720d32f @@ -293182,6 +299672,11 @@ function { parameter_id: 0xf435685e parameter_id: 0x0ab1f084 } +function { + id: 0x910fbd4c + return_type_id: 0x6720d32f + parameter_id: 0x323d798e +} function { id: 0x91117703 return_type_id: 0x6720d32f @@ -294871,6 +301366,11 @@ function { parameter_id: 0x0490bb4a parameter_id: 0xc9082b19 } +function { + id: 0x920aa99b + return_type_id: 0x6720d32f + parameter_id: 0x3e292ad1 +} function { id: 0x920d4b76 return_type_id: 0x6720d32f @@ -294882,6 +301382,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3e360385 } +function { + id: 0x92117c1d + return_type_id: 0x6720d32f + parameter_id: 0x3fca7642 + parameter_id: 0x18bd6530 + parameter_id: 0x07dcdbe1 +} function { id: 0x92121eb9 return_type_id: 0x6720d32f @@ -295278,6 +301785,23 @@ function { parameter_id: 0x3176a085 parameter_id: 0xeeed68e6 } +function { + id: 0x926873bc + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0x38d23361 + parameter_id: 0x38d23361 +} +function { + id: 0x92687d88 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0x38d23361 +} function { id: 0x92697f90 return_type_id: 0x6720d32f @@ -295288,11 +301812,57 @@ function { return_type_id: 0x3e10b518 parameter_id: 0x00b7947f } +function { + id: 0x926a0987 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0xa7051d2f + parameter_id: 0x2ec35650 + parameter_id: 0x38d23361 +} +function { + id: 0x926a0c03 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0xa7051d2f + parameter_id: 0x38d23361 + parameter_id: 0x38d23361 +} +function { + id: 0x926a25a2 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0xa7051d2f + parameter_id: 0x914dbfdc + parameter_id: 0xc9082b19 + parameter_id: 0x07dcdbe1 +} +function { + id: 0x926bbb17 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0xc9082b19 + parameter_id: 0x07dcdbe1 +} function { id: 0x926be467 return_type_id: 0x6720d32f parameter_id: 0x3fac1d22 } +function { + id: 0x926d0dd0 + return_type_id: 0x6720d32f + parameter_id: 0x3fca7642 + parameter_id: 0x07dcdbe1 +} function { id: 0x926dcbb0 return_type_id: 0x6720d32f @@ -295448,6 +302018,13 @@ function { parameter_id: 0x3f37d9d5 parameter_id: 0x32a063f3 } +function { + id: 0x928c1332 + return_type_id: 0x6720d32f + parameter_id: 0x3fca7642 + parameter_id: 0x3e10b518 + parameter_id: 0x18bd6530 +} function { id: 0x928d6faf return_type_id: 0x6720d32f @@ -295665,6 +302242,13 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x38040a6c } +function { + id: 0x92c286e9 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x666a7a1b + parameter_id: 0x07dcdbe1 +} function { id: 0x92c2d86d return_type_id: 0x6720d32f @@ -295931,6 +302515,14 @@ function { parameter_id: 0x3e6396e0 parameter_id: 0x386badcf } +function { + id: 0x92fb2e1e + return_type_id: 0x6720d32f + parameter_id: 0x3fca7642 + parameter_id: 0x23d822f9 + parameter_id: 0x18bd6530 + parameter_id: 0x07dcdbe1 +} function { id: 0x92fc5924 return_type_id: 0x6720d32f @@ -295944,6 +302536,13 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x3e10b518 } +function { + id: 0x92fce902 + return_type_id: 0x6720d32f + parameter_id: 0x3fca7642 + parameter_id: 0x23d822f9 + parameter_id: 0x07dcdbe1 +} function { id: 0x92fcfc63 return_type_id: 0x6720d32f @@ -296045,6 +302644,13 @@ function { parameter_id: 0x064d6086 parameter_id: 0x6720d32f } +function { + id: 0x9312e40f + return_type_id: 0x6720d32f + parameter_id: 0x3e10b518 + parameter_id: 0x4585663f + parameter_id: 0x00fff809 +} function { id: 0x9312e488 return_type_id: 0x6720d32f @@ -296059,6 +302665,14 @@ function { parameter_id: 0x4585663f parameter_id: 0x00c72527 } +function { + id: 0x9313207d + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x130aa721 + parameter_id: 0x173696bc + parameter_id: 0x07dcdbe1 +} function { id: 0x9313a933 return_type_id: 0x6720d32f @@ -296154,6 +302768,12 @@ function { parameter_id: 0x6720d32f parameter_id: 0x3e6239e1 } +function { + id: 0x931afda4 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x100964d4 +} function { id: 0x931d2209 return_type_id: 0x6720d32f @@ -296345,6 +302965,14 @@ function { parameter_id: 0x3f37d9d5 parameter_id: 0x4585663f } +function { + id: 0x935d0dd3 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x00c72527 + parameter_id: 0x13580d6c + parameter_id: 0x07dcdbe1 +} function { id: 0x93627fe0 return_type_id: 0x6720d32f @@ -296511,6 +303139,12 @@ function { parameter_id: 0x3b04bead parameter_id: 0x33756485 } +function { + id: 0x938d8e84 + return_type_id: 0x6720d32f + parameter_id: 0x3861403d + parameter_id: 0x054f691a +} function { id: 0x938ec5ae return_type_id: 0x6720d32f @@ -296537,6 +303171,14 @@ function { parameter_id: 0x39a8be0c parameter_id: 0x1e8e5a79 } +function { + id: 0x9394f11e + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x33fd261b + parameter_id: 0x07dcdbe1 + parameter_id: 0x0aa1f0ee +} function { id: 0x93980968 return_type_id: 0x6720d32f @@ -296682,6 +303324,14 @@ function { parameter_id: 0x3b4ce03a parameter_id: 0x3b4ce03a } +function { + id: 0x93bf0967 + return_type_id: 0x6720d32f + parameter_id: 0x3b68ec61 + parameter_id: 0x3f0185ef + parameter_id: 0x6720d32f + parameter_id: 0x07dcdbe1 +} function { id: 0x93bf967f return_type_id: 0x6720d32f @@ -297955,6 +304605,11 @@ function { parameter_id: 0x508a987d parameter_id: 0x2ac2dd67 } +function { + id: 0x9576eb91 + return_type_id: 0x6720d32f + parameter_id: 0x23d822f9 +} function { id: 0x957964bc return_type_id: 0x6720d32f @@ -298030,6 +304685,12 @@ function { parameter_id: 0x3f44b979 parameter_id: 0x3e10b518 } +function { + id: 0x958ea945 + return_type_id: 0x6720d32f + parameter_id: 0x23d822f9 + parameter_id: 0x3e10b518 +} function { id: 0x958f9102 return_type_id: 0x6720d32f @@ -298227,6 +304888,13 @@ function { parameter_id: 0x23f09c34 parameter_id: 0x334c07d5 } +function { + id: 0x95b6c4a9 + return_type_id: 0x6720d32f + parameter_id: 0x23d822f9 + parameter_id: 0x391f15ea + parameter_id: 0x914dbfdc +} function { id: 0x95b74be6 return_type_id: 0x6720d32f @@ -300701,6 +307369,13 @@ function { parameter_id: 0x17047654 parameter_id: 0x295c7202 } +function { + id: 0x98e6779b + return_type_id: 0x6720d32f + parameter_id: 0x15b54c6f + parameter_id: 0x0483e6f8 + parameter_id: 0x6720d32f +} function { id: 0x98e6a470 return_type_id: 0x6720d32f @@ -300952,6 +307627,11 @@ function { return_type_id: 0x6720d32f parameter_id: 0x1285100d } +function { + id: 0x9927995d + return_type_id: 0xf435685e + parameter_id: 0x3861403d +} function { id: 0x9927b218 return_type_id: 0x6720d32f @@ -301649,6 +308329,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x111ee6f8 } +function { + id: 0x99c882b3 + return_type_id: 0x6720d32f + parameter_id: 0x1e62d0f5 + parameter_id: 0xf435685e +} function { id: 0x99c885a2 return_type_id: 0x6720d32f @@ -302320,6 +309006,13 @@ function { parameter_id: 0x342a8622 parameter_id: 0x6720d32f } +function { + id: 0x9a3fe476 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x6720d32f + parameter_id: 0x33756485 +} function { id: 0x9a403d53 return_type_id: 0x6720d32f @@ -302630,6 +309323,14 @@ function { return_type_id: 0x6720d32f parameter_id: 0x1c50c4ad } +function { + id: 0x9a96d2a1 + return_type_id: 0x6720d32f + parameter_id: 0x120540d1 + parameter_id: 0xe62ebf07 + parameter_id: 0x391f15ea + parameter_id: 0x6720d32f +} function { id: 0x9a9d1e6d return_type_id: 0xf435685e @@ -303433,6 +310134,13 @@ function { parameter_id: 0x1b8590a8 parameter_id: 0x107606b0 } +function { + id: 0x9b222516 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2170d06d + parameter_id: 0x2170d06d +} function { id: 0x9b2239e7 return_type_id: 0x6720d32f @@ -303579,6 +310287,13 @@ function { parameter_id: 0x21069feb parameter_id: 0x1a6ea392 } +function { + id: 0x9b2eaf21 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2170d06d + parameter_id: 0x13580d6c +} function { id: 0x9b2eba1d return_type_id: 0x6720d32f @@ -303709,6 +310424,13 @@ function { parameter_id: 0x914dbfdc parameter_id: 0x07dcdbe1 } +function { + id: 0x9b3e4950 + return_type_id: 0x6720d32f + parameter_id: 0x191de370 + parameter_id: 0x3806a5e7 + parameter_id: 0x6720d32f +} function { id: 0x9b3e6548 return_type_id: 0x6720d32f @@ -303979,6 +310701,13 @@ function { parameter_id: 0x1bf16028 parameter_id: 0x4585663f } +function { + id: 0x9b4f443a + return_type_id: 0x6720d32f + parameter_id: 0x1d2bb1b6 + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f +} function { id: 0x9b4f857e return_type_id: 0x6720d32f @@ -304166,6 +310895,13 @@ function { parameter_id: 0x188b9e81 parameter_id: 0x3ea31487 } +function { + id: 0x9b5a0fe0 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x3df7e337 + parameter_id: 0x09a83f1c +} function { id: 0x9b5aa874 return_type_id: 0x6720d32f @@ -304661,6 +311397,12 @@ function { parameter_id: 0x2e029f76 parameter_id: 0x13580d6c } +function { + id: 0x9b79f498 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x3593bec8 +} function { id: 0x9b79f513 return_type_id: 0x6720d32f @@ -304764,6 +311506,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x18150d9f } +function { + id: 0x9b85c291 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0a9e3ca3 +} function { id: 0x9b85c36d return_type_id: 0x6720d32f @@ -305354,6 +312102,12 @@ function { parameter_id: 0x11cfee5a parameter_id: 0x11cfee5a } +function { + id: 0x9bb5b719 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x06835e9c +} function { id: 0x9bb5c5c3 return_type_id: 0x6720d32f @@ -306312,6 +313066,14 @@ function { parameter_id: 0x1d19a9d5 parameter_id: 0x1c3dbe5a } +function { + id: 0x9bdcd7ce + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d19a9d5 + parameter_id: 0x1d19a9d5 + parameter_id: 0x13580d6c +} function { id: 0x9bdcf60d return_type_id: 0x6720d32f @@ -306418,6 +313180,13 @@ function { parameter_id: 0x1d5bae2a parameter_id: 0x11cfee5a } +function { + id: 0x9bdf0ac7 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d19a9d5 + parameter_id: 0x13580d6c +} function { id: 0x9bdfa419 return_type_id: 0x6720d32f @@ -306512,6 +313281,16 @@ function { parameter_id: 0x2a670b41 parameter_id: 0x1c898f28 } +function { + id: 0x9be67f35 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1013df15 + parameter_id: 0x27d4bd81 + parameter_id: 0x1d19a9d5 + parameter_id: 0x2c32dd96 + parameter_id: 0x1bf16028 +} function { id: 0x9be6a9ad return_type_id: 0x6720d32f @@ -306598,6 +313377,15 @@ function { parameter_id: 0x1b2ca025 parameter_id: 0x2e2c982d } +function { + id: 0x9bf40739 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x14f37d47 + parameter_id: 0x2170d06d + parameter_id: 0x0a134144 + parameter_id: 0x13580d6c +} function { id: 0x9bf6c118 return_type_id: 0x6720d32f @@ -307123,6 +313911,12 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xe5e56f65 } +function { + id: 0x9c639284 + return_type_id: 0x6720d32f + parameter_id: 0x0665e6b6 + parameter_id: 0x1e820193 +} function { id: 0x9c660c95 return_type_id: 0x6720d32f @@ -307303,6 +314097,15 @@ function { parameter_id: 0x04ca9246 parameter_id: 0x33756485 } +function { + id: 0x9c7facb4 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0xb38a8bec + parameter_id: 0x35c4d162 + parameter_id: 0x38d23361 + parameter_id: 0x07dcdbe1 +} function { id: 0x9c814f78 return_type_id: 0x6720d32f @@ -307997,6 +314800,13 @@ function { parameter_id: 0x6d7f5ff6 parameter_id: 0x33d0e528 } +function { + id: 0x9cf8d4d9 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x914dbfdc + parameter_id: 0x07dcdbe1 +} function { id: 0x9cf9beaa return_type_id: 0x6720d32f @@ -309182,6 +315992,13 @@ function { parameter_id: 0x2c982451 parameter_id: 0x13bdf349 } +function { + id: 0x9da1e0c3 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0xc700b957 + parameter_id: 0x07dcdbe1 +} function { id: 0x9da4bde5 return_type_id: 0x6720d32f @@ -310100,6 +316917,12 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xf1a6dfed } +function { + id: 0x9e071849 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x2ec35650 +} function { id: 0x9e08dfbb return_type_id: 0x6720d32f @@ -310135,6 +316958,21 @@ function { parameter_id: 0x36c97631 parameter_id: 0x6720d32f } +function { + id: 0x9e15f25c + return_type_id: 0x6720d32f + parameter_id: 0x0f4dcd61 + parameter_id: 0x18bd6530 + parameter_id: 0x92233392 + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9e1893ee + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x295c7202 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e19651e return_type_id: 0x6720d32f @@ -310157,6 +316995,13 @@ function { parameter_id: 0x0db3ac0f parameter_id: 0x3d8951f4 } +function { + id: 0x9e1a5c22 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x29ef8105 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e1dd697 return_type_id: 0x6720d32f @@ -310261,6 +317106,13 @@ function { parameter_id: 0xc9082b19 parameter_id: 0x07dcdbe1 } +function { + id: 0x9e3092d5 + return_type_id: 0x6720d32f + parameter_id: 0x0f4dcd61 + parameter_id: 0x18bd6530 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e31377c return_type_id: 0x6720d32f @@ -310295,6 +317147,38 @@ function { return_type_id: 0x6720d32f parameter_id: 0x0effc5a1 } +function { + id: 0x9e40b36c + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c0cf46a + parameter_id: 0x322b7a90 + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9e40c88b + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3b68ec61 + parameter_id: 0x4585663f + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9e41cf39 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c53e119 + parameter_id: 0x322b7a90 + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9e41e293 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c0cf46a + parameter_id: 0x376c8705 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e41ea47 return_type_id: 0x6720d32f @@ -310316,12 +317200,62 @@ function { parameter_id: 0x452ab998 parameter_id: 0x6720d32f } +function { + id: 0x9e46dca9 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c53e119 + parameter_id: 0x2e18f543 +} +function { + id: 0x9e4766bb + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x376c8705 + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e49e56e return_type_id: 0x6720d32f parameter_id: 0x0b7c4f67 parameter_id: 0x4585663f } +function { + id: 0x9e4b75cd + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c53e119 + parameter_id: 0x18bd6530 +} +function { + id: 0x9e4c26c1 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3c0cf46a +} +function { + id: 0x9e504197 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3b68ec61 + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9e51554f + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3b5017f2 +} +function { + id: 0x9e51dd03 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x3b143836 + parameter_id: 0x07dcdbe1 + parameter_id: 0x1bf16028 +} function { id: 0x9e52789b return_type_id: 0x6720d32f @@ -310343,6 +317277,13 @@ function { parameter_id: 0x1479c6e7 parameter_id: 0x2d8ee262 } +function { + id: 0x9e590019 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x39388fd3 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e5980cd return_type_id: 0x6720d32f @@ -310372,6 +317313,19 @@ function { return_type_id: 0x6720d32f parameter_id: 0x0f78474f } +function { + id: 0x9e609ac2 + return_type_id: 0x6720d32f + parameter_id: 0x0f4dcd61 + parameter_id: 0x0cbf60eb + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9e61a70c + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x376c8705 +} function { id: 0x9e61ffc7 return_type_id: 0x6720d32f @@ -310403,6 +317357,15 @@ function { parameter_id: 0x33b77109 parameter_id: 0x0277bf8a } +function { + id: 0x9e68eb19 + return_type_id: 0x6720d32f + parameter_id: 0x0f4dcd61 + parameter_id: 0x0f4dcd61 + parameter_id: 0x18bd6530 + parameter_id: 0x18bd6530 + parameter_id: 0x07dcdbe1 +} function { id: 0x9e69dafa return_type_id: 0x6720d32f @@ -310412,6 +317375,13 @@ function { parameter_id: 0x4585663f parameter_id: 0x11d941b8 } +function { + id: 0x9e6a2131 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x376c8705 + parameter_id: 0x2e18f543 +} function { id: 0x9e6bce91 return_type_id: 0x6720d32f @@ -310507,6 +317477,14 @@ function { parameter_id: 0x0db3ac0f parameter_id: 0x25653b02 } +function { + id: 0x9e7aaf3f + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x31d9e79a + parameter_id: 0x07dcdbe1 + parameter_id: 0x0aa1f0ee +} function { id: 0x9e7f936c return_type_id: 0x6720d32f @@ -310621,6 +317599,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x0c56e1ee } +function { + id: 0x9e960f96 + return_type_id: 0x6720d32f + parameter_id: 0x054f691a + parameter_id: 0x914dbfdc +} function { id: 0x9e9a6f39 return_type_id: 0x6720d32f @@ -310701,6 +317685,12 @@ function { parameter_id: 0x0effc5a1 parameter_id: 0x2060db23 } +function { + id: 0x9ebf0984 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x00c72527 +} function { id: 0x9ebfed71 return_type_id: 0x6720d32f @@ -311202,6 +318192,15 @@ function { parameter_id: 0x097315c2 parameter_id: 0x3e10b518 } +function { + id: 0x9f25dc29 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x6d7f5ff6 + parameter_id: 0xb38a8bec + parameter_id: 0x35c4d162 + parameter_id: 0x07dcdbe1 +} function { id: 0x9f25fe02 return_type_id: 0x6720d32f @@ -311536,6 +318535,15 @@ function { parameter_id: 0x0beab59b parameter_id: 0x054f691a } +function { + id: 0x9f71449b + return_type_id: 0x6720d32f + parameter_id: 0x0a70ce1b + parameter_id: 0x18bd6530 + parameter_id: 0x3e10b518 + parameter_id: 0x391f15ea + parameter_id: 0x07dcdbe1 +} function { id: 0x9f72f53e return_type_id: 0x6720d32f @@ -311586,6 +318594,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x0bfc9031 } +function { + id: 0x9f7fd20b + return_type_id: 0x6720d32f + parameter_id: 0x0a70ce1b + parameter_id: 0x18bd6530 + parameter_id: 0x07dcdbe1 +} function { id: 0x9f808c95 return_type_id: 0x6720d32f @@ -311658,6 +318673,24 @@ function { parameter_id: 0xf435685e parameter_id: 0x3e10b518 } +function { + id: 0x9f8d452b + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0xc9082b19 + parameter_id: 0xcbcc8512 + parameter_id: 0x07dcdbe1 +} +function { + id: 0x9f8e9af9 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0x3247ae94 +} function { id: 0x9f93bc17 return_type_id: 0x6720d32f @@ -311749,6 +318782,12 @@ function { parameter_id: 0x08a8dfa4 parameter_id: 0x0258f96e } +function { + id: 0x9faa0088 + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x4585663f +} function { id: 0x9fab680a return_type_id: 0x6720d32f @@ -311756,6 +318795,13 @@ function { parameter_id: 0xc9082b19 parameter_id: 0xc9082b19 } +function { + id: 0x9fabf7be + return_type_id: 0x6720d32f + parameter_id: 0x0cf3d8fe + parameter_id: 0x4585663f + parameter_id: 0x07dcdbe1 +} function { id: 0x9fac2fbc return_type_id: 0x6720d32f @@ -312238,6 +319284,11 @@ function { parameter_id: 0x4585663f parameter_id: 0x33756485 } +function { + id: 0xa08db938 + return_type_id: 0x6720d32f + parameter_id: 0xf435685e +} function { id: 0xa08f5503 return_type_id: 0xfc0e1dbd @@ -312421,6 +319472,17 @@ function { parameter_id: 0x0ae4a2c7 parameter_id: 0x3e10b518 } +function { + id: 0xa4f69947 + return_type_id: 0x6720d32f + parameter_id: 0xe62ebf07 + parameter_id: 0x391f15ea + parameter_id: 0x6720d32f + parameter_id: 0x1b8590a8 + parameter_id: 0x3e001c39 + parameter_id: 0x1b8590a8 + parameter_id: 0xc9082b19 +} function { id: 0xa52e0ac1 return_type_id: 0x3dcee85d @@ -314060,6 +321122,12 @@ function { return_type_id: 0x4585663f parameter_id: 0x12e75923 } +function { + id: 0xcaae52cc + return_type_id: 0x4585663f + parameter_id: 0x1d44326e + parameter_id: 0xc9082b19 +} function { id: 0xcabd891e return_type_id: 0x4585663f @@ -314129,6 +321197,12 @@ function { parameter_id: 0x0a134144 parameter_id: 0x3360dff4 } +function { + id: 0xcc25b8e9 + return_type_id: 0x4585663f + parameter_id: 0x0a70ce1b + parameter_id: 0x18bd6530 +} function { id: 0xcc787cc3 return_type_id: 0x2efe8065 @@ -314277,6 +321351,14 @@ function { return_type_id: 0x4585663f parameter_id: 0x01241c02 } +function { + id: 0xce9ab7ea + return_type_id: 0x4585663f + parameter_id: 0x01222f7d + parameter_id: 0x064d6086 + parameter_id: 0x4585663f + parameter_id: 0x4585663f +} function { id: 0xceb0f977 return_type_id: 0x4585663f @@ -315123,6 +322205,14 @@ function { parameter_id: 0x10673339 parameter_id: 0x23e856d0 } +function { + id: 0xe97c10c0 + return_type_id: 0x1b4a1f75 + parameter_id: 0x0cf3d8fe + parameter_id: 0x31d9e79a + parameter_id: 0xc9082b19 + parameter_id: 0x92233392 +} function { id: 0xea3d26bb return_type_id: 0x2e8ed696 @@ -316176,6 +323266,12 @@ function { return_type_id: 0x6d7f5ff6 parameter_id: 0x1b8590a8 } +function { + id: 0xf846d7da + return_type_id: 0x6d7f5ff6 + parameter_id: 0x18bd6530 + parameter_id: 0x33756485 +} function { id: 0xf857e1a7 return_type_id: 0x6d7f5ff6 @@ -316454,6 +323550,14 @@ function { return_type_id: 0x368487be parameter_id: 0x368487be } +function { + id: 0xfc55fd47 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x0a70ce1b + parameter_id: 0x18bd6530 + parameter_id: 0x3e10b518 + parameter_id: 0x391f15ea +} function { id: 0xfc59f36a return_type_id: 0x26e55184 @@ -316506,6 +323610,13 @@ function { parameter_id: 0x1e820193 parameter_id: 0x15a30023 } +function { + id: 0xfc8f4f95 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x0cf3d8fe + parameter_id: 0x4585663f + parameter_id: 0x07dcdbe1 +} function { id: 0xfca015af return_type_id: 0x6d7f5ff6 @@ -316625,6 +323736,12 @@ function { parameter_id: 0x0258f96e parameter_id: 0xe5b69de1 } +function { + id: 0xfdb2dd0c + return_type_id: 0x6d7f5ff6 + parameter_id: 0x0258f96e + parameter_id: 0xe02e14d6 +} function { id: 0xfdd651d2 return_type_id: 0x6d7f5ff6 @@ -316723,6 +323840,12 @@ function { parameter_id: 0x03942c7a parameter_id: 0x3fd547b8 } +function { + id: 0xfec047b0 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x0258f96e + parameter_id: 0x3c88bbfa +} function { id: 0xfec3d248 return_type_id: 0x6d7f5ff6 @@ -317162,6 +324285,15 @@ elf_symbol { type_id: 0x475eeec2 full_name: "__blk_mq_alloc_disk" } +elf_symbol { + id: 0xcc33f78c + name: "__blk_mq_debugfs_rq_show" + is_defined: true + symbol_type: FUNCTION + crc: 0xe3d3f445 + type_id: 0x9c639284 + full_name: "__blk_mq_debugfs_rq_show" +} elf_symbol { id: 0x01badff0 name: "__blk_mq_end_request" @@ -317495,6 +324627,15 @@ elf_symbol { type_id: 0x9115faa6 full_name: "__dev_change_net_namespace" } +elf_symbol { + id: 0x8f70cdad + name: "__dev_direct_xmit" + is_defined: true + symbol_type: FUNCTION + crc: 0x1f8aaf23 + type_id: 0x9e960f96 + full_name: "__dev_direct_xmit" +} elf_symbol { id: 0x2d91cc56 name: "__dev_get_by_index" @@ -318134,6 +325275,15 @@ elf_symbol { type_id: 0x102e93ac full_name: "__free_pages" } +elf_symbol { + id: 0xe458ae39 + name: "__fsnotify_parent" + is_defined: true + symbol_type: FUNCTION + crc: 0x2aa72d57 + type_id: 0x9a96d2a1 + full_name: "__fsnotify_parent" +} elf_symbol { id: 0x129eb7ed name: "__genphy_config_aneg" @@ -319944,6 +327094,15 @@ elf_symbol { type_id: 0x9b2ba01c full_name: "__traceiter_android_rvh_audio_usb_offload_disconnect" } +elf_symbol { + id: 0x144db0a1 + name: "__traceiter_android_rvh_before_do_sched_yield" + is_defined: true + symbol_type: FUNCTION + crc: 0xce266c8e + type_id: 0x9b79f498 + full_name: "__traceiter_android_rvh_before_do_sched_yield" +} elf_symbol { id: 0x192bbbd5 name: "__traceiter_android_rvh_build_perf_domains" @@ -320466,6 +327625,15 @@ elf_symbol { type_id: 0x9b427bba full_name: "__traceiter_android_rvh_revert_creds" } +elf_symbol { + id: 0xf0ffb4d4 + name: "__traceiter_android_rvh_rtmutex_force_update" + is_defined: true + symbol_type: FUNCTION + crc: 0xe3eba434 + type_id: 0x9bdcd7ce + full_name: "__traceiter_android_rvh_rtmutex_force_update" +} elf_symbol { id: 0xd90a9a58 name: "__traceiter_android_rvh_rtmutex_prepare_setprio" @@ -321231,6 +328399,15 @@ elf_symbol { type_id: 0x9b4b913b full_name: "__traceiter_android_vh_check_file_open" } +elf_symbol { + id: 0x6aac0cf8 + name: "__traceiter_android_vh_check_folio_look_around_ref" + is_defined: true + symbol_type: FUNCTION + crc: 0xa2856bd1 + type_id: 0x9b2eaf21 + full_name: "__traceiter_android_vh_check_folio_look_around_ref" +} elf_symbol { id: 0x96d1c9c4 name: "__traceiter_android_vh_check_hibernation_swap" @@ -321735,6 +328912,24 @@ elf_symbol { type_id: 0x9a36ff29 full_name: "__traceiter_android_vh_kswapd_per_node" } +elf_symbol { + id: 0xe19d2bf8 + name: "__traceiter_android_vh_look_around" + is_defined: true + symbol_type: FUNCTION + crc: 0x4d18aae7 + type_id: 0x9bf40739 + full_name: "__traceiter_android_vh_look_around" +} +elf_symbol { + id: 0x993f42ff + name: "__traceiter_android_vh_look_around_migrate_folio" + is_defined: true + symbol_type: FUNCTION + crc: 0xbed1988a + type_id: 0x9b222516 + full_name: "__traceiter_android_vh_look_around_migrate_folio" +} elf_symbol { id: 0xfb6a92a8 name: "__traceiter_android_vh_madvise_cold_pageout_skip" @@ -322050,6 +329245,15 @@ elf_symbol { type_id: 0x9bd7019d full_name: "__traceiter_android_vh_record_rwsem_lock_starttime" } +elf_symbol { + id: 0xe2d75052 + name: "__traceiter_android_vh_regmap_update" + is_defined: true + symbol_type: FUNCTION + crc: 0x70e6bb0c + type_id: 0x9b5a0fe0 + full_name: "__traceiter_android_vh_regmap_update" +} elf_symbol { id: 0x8d62858f name: "__traceiter_android_vh_rmqueue_smallest_bypass" @@ -322095,6 +329299,15 @@ elf_symbol { type_id: 0x9beff51f full_name: "__traceiter_android_vh_rtmutex_wait_start" } +elf_symbol { + id: 0xc56d7179 + name: "__traceiter_android_vh_rtmutex_waiter_prio" + is_defined: true + symbol_type: FUNCTION + crc: 0x40a0002c + type_id: 0x9bdf0ac7 + full_name: "__traceiter_android_vh_rtmutex_waiter_prio" +} elf_symbol { id: 0x5858f827 name: "__traceiter_android_vh_rwsem_can_spin_on_owner" @@ -322401,6 +329614,24 @@ elf_symbol { type_id: 0x9bcd4ff7 full_name: "__traceiter_android_vh_sysrq_crash" } +elf_symbol { + id: 0xdd9dd67b + name: "__traceiter_android_vh_task_blocks_on_rtmutex" + is_defined: true + symbol_type: FUNCTION + crc: 0x698af67b + type_id: 0x9be67f35 + full_name: "__traceiter_android_vh_task_blocks_on_rtmutex" +} +elf_symbol { + id: 0x48f0cf25 + name: "__traceiter_android_vh_test_clear_look_around_ref" + is_defined: true + symbol_type: FUNCTION + crc: 0x6a7e50c3 + type_id: 0x9bb5b719 + full_name: "__traceiter_android_vh_test_clear_look_around_ref" +} elf_symbol { id: 0x6befbf23 name: "__traceiter_android_vh_thermal_power_cap" @@ -322464,6 +329695,15 @@ elf_symbol { type_id: 0x9b2837bd full_name: "__traceiter_android_vh_try_to_unmap_one" } +elf_symbol { + id: 0x39155e73 + name: "__traceiter_android_vh_tune_scan_type" + is_defined: true + symbol_type: FUNCTION + crc: 0x24602ed2 + type_id: 0x9b85c291 + full_name: "__traceiter_android_vh_tune_scan_type" +} elf_symbol { id: 0x8a773cc3 name: "__traceiter_android_vh_typec_store_partner_src_caps" @@ -322626,6 +329866,15 @@ elf_symbol { type_id: 0x9a32c459 full_name: "__traceiter_android_vh_watchdog_timer_softlockup" } +elf_symbol { + id: 0xae5e5469 + name: "__traceiter_android_vh_wq_lockup_pool" + is_defined: true + symbol_type: FUNCTION + crc: 0x62c05483 + type_id: 0x9a3fe476 + full_name: "__traceiter_android_vh_wq_lockup_pool" +} elf_symbol { id: 0x6911084f name: "__traceiter_binder_transaction_received" @@ -323103,6 +330352,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_audio_usb_offload_disconnect" } +elf_symbol { + id: 0xd7757253 + name: "__tracepoint_android_rvh_before_do_sched_yield" + is_defined: true + symbol_type: OBJECT + crc: 0x94abc138 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_before_do_sched_yield" +} elf_symbol { id: 0x1e8a7e23 name: "__tracepoint_android_rvh_build_perf_domains" @@ -323625,6 +330883,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_rvh_revert_creds" } +elf_symbol { + id: 0xf2fd13ea + name: "__tracepoint_android_rvh_rtmutex_force_update" + is_defined: true + symbol_type: OBJECT + crc: 0xa86a5262 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_rvh_rtmutex_force_update" +} elf_symbol { id: 0x69e37d02 name: "__tracepoint_android_rvh_rtmutex_prepare_setprio" @@ -324390,6 +331657,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_check_file_open" } +elf_symbol { + id: 0xca5cbc9a + name: "__tracepoint_android_vh_check_folio_look_around_ref" + is_defined: true + symbol_type: OBJECT + crc: 0xdaaccf03 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_check_folio_look_around_ref" +} elf_symbol { id: 0xaa072f92 name: "__tracepoint_android_vh_check_hibernation_swap" @@ -324894,6 +332170,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_kswapd_per_node" } +elf_symbol { + id: 0xda2d53f2 + name: "__tracepoint_android_vh_look_around" + is_defined: true + symbol_type: OBJECT + crc: 0x738994e9 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_look_around" +} +elf_symbol { + id: 0x50a5a949 + name: "__tracepoint_android_vh_look_around_migrate_folio" + is_defined: true + symbol_type: OBJECT + crc: 0x8b32227d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_look_around_migrate_folio" +} elf_symbol { id: 0xcb34ca12 name: "__tracepoint_android_vh_madvise_cold_pageout_skip" @@ -325209,6 +332503,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_record_rwsem_lock_starttime" } +elf_symbol { + id: 0x13b2fb38 + name: "__tracepoint_android_vh_regmap_update" + is_defined: true + symbol_type: OBJECT + crc: 0xcf37e88a + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_regmap_update" +} elf_symbol { id: 0x04365139 name: "__tracepoint_android_vh_rmqueue_smallest_bypass" @@ -325254,6 +332557,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_rtmutex_wait_start" } +elf_symbol { + id: 0xeaebbadf + name: "__tracepoint_android_vh_rtmutex_waiter_prio" + is_defined: true + symbol_type: OBJECT + crc: 0x0fbb21e2 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_rtmutex_waiter_prio" +} elf_symbol { id: 0xe471b8d5 name: "__tracepoint_android_vh_rwsem_can_spin_on_owner" @@ -325560,6 +332872,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_sysrq_crash" } +elf_symbol { + id: 0xe5bf742d + name: "__tracepoint_android_vh_task_blocks_on_rtmutex" + is_defined: true + symbol_type: OBJECT + crc: 0x5494b8bf + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_task_blocks_on_rtmutex" +} +elf_symbol { + id: 0x4ef2c337 + name: "__tracepoint_android_vh_test_clear_look_around_ref" + is_defined: true + symbol_type: OBJECT + crc: 0x4ffca4ae + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_test_clear_look_around_ref" +} elf_symbol { id: 0x6f25dd05 name: "__tracepoint_android_vh_thermal_power_cap" @@ -325623,6 +332953,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_try_to_unmap_one" } +elf_symbol { + id: 0x49b955bd + name: "__tracepoint_android_vh_tune_scan_type" + is_defined: true + symbol_type: OBJECT + crc: 0x45da6384 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_tune_scan_type" +} elf_symbol { id: 0x18e67da1 name: "__tracepoint_android_vh_typec_store_partner_src_caps" @@ -325785,6 +333124,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_watchdog_timer_softlockup" } +elf_symbol { + id: 0xa13f65ff + name: "__tracepoint_android_vh_wq_lockup_pool" + is_defined: true + symbol_type: OBJECT + crc: 0x4fd35a54 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_wq_lockup_pool" +} elf_symbol { id: 0xf57e8f65 name: "__tracepoint_binder_transaction_received" @@ -328996,6 +336344,24 @@ elf_symbol { type_id: 0xc0405795 full_name: "bpf_dispatcher_xdp_func" } +elf_symbol { + id: 0xd1f054c0 + name: "bpf_map_inc" + is_defined: true + symbol_type: FUNCTION + crc: 0xb21c378c + type_id: 0x11b43560 + full_name: "bpf_map_inc" +} +elf_symbol { + id: 0x2e575a11 + name: "bpf_map_put" + is_defined: true + symbol_type: FUNCTION + crc: 0xc1113f69 + type_id: 0x11b43560 + full_name: "bpf_map_put" +} elf_symbol { id: 0xf737e767 name: "bpf_master_redirect_enabled_key" @@ -329032,6 +336398,15 @@ elf_symbol { type_id: 0x1de47b51 full_name: "bpf_prog_sub" } +elf_symbol { + id: 0x56b332ad + name: "bpf_redirect_info" + is_defined: true + symbol_type: OBJECT + crc: 0x33823370 + type_id: 0x212d37a1 + full_name: "bpf_redirect_info" +} elf_symbol { id: 0x6a712ee1 name: "bpf_stats_enabled_key" @@ -329500,6 +336875,15 @@ elf_symbol { type_id: 0x6fa775f5 full_name: "build_skb" } +elf_symbol { + id: 0x521ad765 + name: "build_skb_around" + is_defined: true + symbol_type: FUNCTION + crc: 0xcdb7b9ec + type_id: 0x69be77aa + full_name: "build_skb_around" +} elf_symbol { id: 0x0f9d7b5e name: "bus_find_device" @@ -330317,6 +337701,15 @@ elf_symbol { type_id: 0x1a0b4b72 full_name: "class_unregister" } +elf_symbol { + id: 0xd156aa2c + name: "cleancache_register_ops" + is_defined: true + symbol_type: FUNCTION + crc: 0x5fa588cd + type_id: 0x910fbd4c + full_name: "cleancache_register_ops" +} elf_symbol { id: 0x00d9abe7 name: "cleanup_srcu_struct" @@ -334512,6 +341905,15 @@ elf_symbol { type_id: 0x10fc4d27 full_name: "device_remove_file" } +elf_symbol { + id: 0x22e51db4 + name: "device_remove_file_self" + is_defined: true + symbol_type: FUNCTION + crc: 0x7f6f4aa9 + type_id: 0xfec047b0 + full_name: "device_remove_file_self" +} elf_symbol { id: 0x5a62c5df name: "device_remove_groups" @@ -334620,6 +342022,150 @@ elf_symbol { type_id: 0x9d16dd74 full_name: "device_wakeup_enable" } +elf_symbol { + id: 0x884a3a76 + name: "devlink_alloc_ns" + is_defined: true + symbol_type: FUNCTION + crc: 0x81bd8c7b + type_id: 0x5bbe2188 + full_name: "devlink_alloc_ns" +} +elf_symbol { + id: 0xb54be30e + name: "devlink_flash_update_status_notify" + is_defined: true + symbol_type: FUNCTION + crc: 0x04c41c60 + type_id: 0x1353a05d + full_name: "devlink_flash_update_status_notify" +} +elf_symbol { + id: 0xead962b7 + name: "devlink_fmsg_binary_pair_nest_end" + is_defined: true + symbol_type: FUNCTION + crc: 0x5358864e + type_id: 0x9576eb91 + full_name: "devlink_fmsg_binary_pair_nest_end" +} +elf_symbol { + id: 0xfb50f564 + name: "devlink_fmsg_binary_pair_nest_start" + is_defined: true + symbol_type: FUNCTION + crc: 0x11df0e75 + type_id: 0x958ea945 + full_name: "devlink_fmsg_binary_pair_nest_start" +} +elf_symbol { + id: 0xff600ca5 + name: "devlink_fmsg_binary_put" + is_defined: true + symbol_type: FUNCTION + crc: 0x15510a89 + type_id: 0x95b6c4a9 + full_name: "devlink_fmsg_binary_put" +} +elf_symbol { + id: 0x266ac51c + name: "devlink_free" + is_defined: true + symbol_type: FUNCTION + crc: 0x660eb6bd + type_id: 0x13a4a7ac + full_name: "devlink_free" +} +elf_symbol { + id: 0xa8e06dd7 + name: "devlink_health_report" + is_defined: true + symbol_type: FUNCTION + crc: 0x93edef07 + type_id: 0x928c1332 + full_name: "devlink_health_report" +} +elf_symbol { + id: 0x52e65741 + name: "devlink_health_reporter_create" + is_defined: true + symbol_type: FUNCTION + crc: 0x0d26f5c4 + type_id: 0x2720cd28 + full_name: "devlink_health_reporter_create" +} +elf_symbol { + id: 0x2069fc41 + name: "devlink_health_reporter_destroy" + is_defined: true + symbol_type: FUNCTION + crc: 0x850bb6db + type_id: 0x1f6acc03 + full_name: "devlink_health_reporter_destroy" +} +elf_symbol { + id: 0x0abe7457 + name: "devlink_health_reporter_priv" + is_defined: true + symbol_type: FUNCTION + crc: 0xe40bb23e + type_id: 0x59642c61 + full_name: "devlink_health_reporter_priv" +} +elf_symbol { + id: 0x70ca4fad + name: "devlink_health_reporter_state_update" + is_defined: true + symbol_type: FUNCTION + crc: 0x2b4509dd + type_id: 0x1f01387c + full_name: "devlink_health_reporter_state_update" +} +elf_symbol { + id: 0xa164371a + name: "devlink_priv" + is_defined: true + symbol_type: FUNCTION + crc: 0x6e3347ec + type_id: 0x55aa47ce + full_name: "devlink_priv" +} +elf_symbol { + id: 0xb4634233 + name: "devlink_region_create" + is_defined: true + symbol_type: FUNCTION + crc: 0x6110ed39 + type_id: 0xe97c10c0 + full_name: "devlink_region_create" +} +elf_symbol { + id: 0x0a058c0b + name: "devlink_region_destroy" + is_defined: true + symbol_type: FUNCTION + crc: 0xa410a295 + type_id: 0x164ad64e + full_name: "devlink_region_destroy" +} +elf_symbol { + id: 0x5603c10b + name: "devlink_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xc498bdc9 + type_id: 0x13a4a7ac + full_name: "devlink_register" +} +elf_symbol { + id: 0x7520d018 + name: "devlink_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x946c0028 + type_id: 0x13a4a7ac + full_name: "devlink_unregister" +} elf_symbol { id: 0xde9ec7ca name: "devm_add_action" @@ -335016,6 +342562,15 @@ elf_symbol { type_id: 0x5f3cfa16 full_name: "devm_gpiod_get_index" } +elf_symbol { + id: 0x241e9d4d + name: "devm_gpiod_get_index_optional" + is_defined: true + symbol_type: FUNCTION + crc: 0xf71fb74b + type_id: 0x5f3cfa16 + full_name: "devm_gpiod_get_index_optional" +} elf_symbol { id: 0xf6b9516e name: "devm_gpiod_get_optional" @@ -336726,6 +344281,15 @@ elf_symbol { type_id: 0x9d038726 full_name: "dma_mmap_pages" } +elf_symbol { + id: 0x843aec6c + name: "dma_need_sync" + is_defined: true + symbol_type: FUNCTION + crc: 0xcec723d1 + type_id: 0xfdb2dd0c + full_name: "dma_need_sync" +} elf_symbol { id: 0xeb70c9c5 name: "dma_pool_alloc" @@ -340812,6 +348376,15 @@ elf_symbol { type_id: 0x1e4577e0 full_name: "drm_send_event_locked" } +elf_symbol { + id: 0xb701b4b1 + name: "drm_send_event_timestamp_locked" + is_defined: true + symbol_type: FUNCTION + crc: 0x2e16a8ee + type_id: 0x1e4106e1 + full_name: "drm_send_event_timestamp_locked" +} elf_symbol { id: 0x19652f5f name: "drm_set_preferred_mode" @@ -341811,6 +349384,15 @@ elf_symbol { type_id: 0x98851295 full_name: "extcon_set_property_capability" } +elf_symbol { + id: 0xb1dfbb02 + name: "extcon_set_property_sync" + is_defined: true + symbol_type: FUNCTION + crc: 0x710595c3 + type_id: 0x98850898 + full_name: "extcon_set_property_sync" +} elf_symbol { id: 0xacc42253 name: "extcon_set_state" @@ -342459,6 +350041,15 @@ elf_symbol { type_id: 0x1d030c3c full_name: "fsg_config_from_params" } +elf_symbol { + id: 0xe7fde0db + name: "fsnotify" + is_defined: true + symbol_type: FUNCTION + crc: 0x382d8219 + type_id: 0xa4f69947 + full_name: "fsnotify" +} elf_symbol { id: 0xee139066 name: "fsync_bdev" @@ -346944,6 +354535,15 @@ elf_symbol { type_id: 0x93bee8a1 full_name: "insert_resource" } +elf_symbol { + id: 0xcec28ada + name: "int_active_memcg" + is_defined: true + symbol_type: OBJECT + crc: 0x6f91b30c + type_id: 0x1d5bae2a + full_name: "int_active_memcg" +} elf_symbol { id: 0xbd83f7de name: "int_pow" @@ -347304,6 +354904,15 @@ elf_symbol { type_id: 0x7ceab5d7 full_name: "iommu_group_ref_get" } +elf_symbol { + id: 0x87342c78 + name: "iommu_group_remove_device" + is_defined: true + symbol_type: FUNCTION + crc: 0x65e2cdf3 + type_id: 0x100e6fc8 + full_name: "iommu_group_remove_device" +} elf_symbol { id: 0x1f9ceb72 name: "iommu_group_set_iommudata" @@ -348556,6 +356165,24 @@ elf_symbol { type_id: 0x98046a12 full_name: "kernel_listen" } +elf_symbol { + id: 0x52f17879 + name: "kernel_neon_begin" + is_defined: true + symbol_type: FUNCTION + crc: 0x8fd180e7 + type_id: 0x10985193 + full_name: "kernel_neon_begin" +} +elf_symbol { + id: 0xa84cb89b + name: "kernel_neon_end" + is_defined: true + symbol_type: FUNCTION + crc: 0xa8a8110c + type_id: 0x10985193 + full_name: "kernel_neon_end" +} elf_symbol { id: 0xff4a14be name: "kernel_param_lock" @@ -349249,6 +356876,15 @@ elf_symbol { type_id: 0x9313eb8f full_name: "kstrtoll" } +elf_symbol { + id: 0xf44e0659 + name: "kstrtos16" + is_defined: true + symbol_type: FUNCTION + crc: 0xe0419ac4 + type_id: 0x9312e40f + full_name: "kstrtos16" +} elf_symbol { id: 0x9c1bb84e name: "kstrtos8" @@ -351648,6 +359284,15 @@ elf_symbol { type_id: 0x165fcf63 full_name: "mipi_dsi_picture_parameter_set" } +elf_symbol { + id: 0x6d579aaf + name: "mipi_dsi_set_maximum_return_packet_size" + is_defined: true + symbol_type: FUNCTION + crc: 0x24bb881a + type_id: 0x9d9d4f0f + full_name: "mipi_dsi_set_maximum_return_packet_size" +} elf_symbol { id: 0xe4059d72 name: "misc_deregister" @@ -352359,6 +360004,15 @@ elf_symbol { type_id: 0x6fa775f5 full_name: "napi_build_skb" } +elf_symbol { + id: 0x760780be + name: "napi_busy_loop" + is_defined: true + symbol_type: FUNCTION + crc: 0x29604158 + type_id: 0x012cb0da + full_name: "napi_busy_loop" +} elf_symbol { id: 0xc258a893 name: "napi_complete_done" @@ -354168,6 +361822,15 @@ elf_symbol { type_id: 0x91f5fad8 full_name: "of_get_display_timing" } +elf_symbol { + id: 0x05a46d27 + name: "of_get_drm_display_mode" + is_defined: true + symbol_type: FUNCTION + crc: 0x884bdf07 + type_id: 0x9038705c + full_name: "of_get_drm_display_mode" +} elf_symbol { id: 0xe3de7018 name: "of_get_i2c_adapter_by_node" @@ -355125,6 +362788,15 @@ elf_symbol { type_id: 0x1443bd42 full_name: "page_pool_put_defragged_page" } +elf_symbol { + id: 0x7490fd3a + name: "page_pool_put_page_bulk" + is_defined: true + symbol_type: FUNCTION + crc: 0x898d9639 + type_id: 0x1462512b + full_name: "page_pool_put_page_bulk" +} elf_symbol { id: 0xfdf9f7ee name: "page_pool_release_page" @@ -355602,6 +363274,15 @@ elf_symbol { type_id: 0x14e1f000 full_name: "pci_disable_msix" } +elf_symbol { + id: 0xc3f9d559 + name: "pci_disable_pcie_error_reporting" + is_defined: true + symbol_type: FUNCTION + crc: 0xb4006e89 + type_id: 0x99f942bc + full_name: "pci_disable_pcie_error_reporting" +} elf_symbol { id: 0xb9d0b3a8 name: "pci_disable_sriov" @@ -355827,6 +363508,15 @@ elf_symbol { type_id: 0x537f83a2 full_name: "pci_iomap_range" } +elf_symbol { + id: 0x1c994923 + name: "pci_ioremap_bar" + is_defined: true + symbol_type: FUNCTION + crc: 0xccd07b76 + type_id: 0x5373932e + full_name: "pci_ioremap_bar" +} elf_symbol { id: 0xec861eec name: "pci_iounmap" @@ -360561,6 +368251,15 @@ elf_symbol { type_id: 0xaf453ff9 full_name: "regmap_get_device" } +elf_symbol { + id: 0x700d1b28 + name: "regmap_get_reg_stride" + is_defined: true + symbol_type: FUNCTION + crc: 0xb435d7cf + type_id: 0x9feaece8 + full_name: "regmap_get_reg_stride" +} elf_symbol { id: 0x248856c2 name: "regmap_get_val_bytes" @@ -360831,6 +368530,15 @@ elf_symbol { type_id: 0x8556217d full_name: "regulator_get" } +elf_symbol { + id: 0x90e2334a + name: "regulator_get_current_limit" + is_defined: true + symbol_type: FUNCTION + crc: 0xf9e34a3c + type_id: 0x9deb64a3 + full_name: "regulator_get_current_limit" +} elf_symbol { id: 0xfd198070 name: "regulator_get_current_limit_regmap" @@ -361020,6 +368728,15 @@ elf_symbol { type_id: 0x10f3d61f full_name: "regulator_put" } +elf_symbol { + id: 0xfd977d86 + name: "regulator_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xa01989d0 + type_id: 0xf5978397 + full_name: "regulator_register" +} elf_symbol { id: 0xddb9ed35 name: "regulator_register_notifier" @@ -365008,6 +372725,24 @@ elf_symbol { type_id: 0x8c57cf58 full_name: "smp_call_on_cpu" } +elf_symbol { + id: 0xd7393cd7 + name: "smpboot_register_percpu_thread" + is_defined: true + symbol_type: FUNCTION + crc: 0xed22557a + type_id: 0x9002b2b0 + full_name: "smpboot_register_percpu_thread" +} +elf_symbol { + id: 0xbf61e6bf + name: "smpboot_unregister_percpu_thread" + is_defined: true + symbol_type: FUNCTION + crc: 0x62650cbc + type_id: 0x1d1a000c + full_name: "smpboot_unregister_percpu_thread" +} elf_symbol { id: 0x675bcd74 name: "snapshot_get_image_size" @@ -365107,6 +372842,15 @@ elf_symbol { type_id: 0x9bbebc0c full_name: "snd_ctl_enum_info" } +elf_symbol { + id: 0xfc7ac85d + name: "snd_ctl_find_id" + is_defined: true + symbol_type: FUNCTION + crc: 0x0f5523c6 + type_id: 0x20151959 + full_name: "snd_ctl_find_id" +} elf_symbol { id: 0x6aca9744 name: "snd_ctl_new1" @@ -365251,6 +372995,15 @@ elf_symbol { type_id: 0x1f50da89 full_name: "snd_info_free_entry" } +elf_symbol { + id: 0x257f1e06 + name: "snd_info_get_line" + is_defined: true + symbol_type: FUNCTION + crc: 0x24a94b26 + type_id: 0x98e6779b + full_name: "snd_info_get_line" +} elf_symbol { id: 0x5e6e4a8e name: "snd_info_register" @@ -365530,6 +373283,24 @@ elf_symbol { type_id: 0x15b600dd full_name: "snd_pcm_period_elapsed" } +elf_symbol { + id: 0x11b8b797 + name: "snd_pcm_rate_bit_to_rate" + is_defined: true + symbol_type: FUNCTION + crc: 0xff6104d0 + type_id: 0xdfba2774 + full_name: "snd_pcm_rate_bit_to_rate" +} +elf_symbol { + id: 0x19ea44b2 + name: "snd_pcm_rate_to_rate_bit" + is_defined: true + symbol_type: FUNCTION + crc: 0xb9638db4 + type_id: 0xdfba2774 + full_name: "snd_pcm_rate_to_rate_bit" +} elf_symbol { id: 0xba998ee2 name: "snd_pcm_set_managed_buffer" @@ -365584,6 +373355,15 @@ elf_symbol { type_id: 0xb3725ca4 full_name: "snd_sgbuf_get_addr" } +elf_symbol { + id: 0x31ef5894 + name: "snd_soc_add_card_controls" + is_defined: true + symbol_type: FUNCTION + crc: 0x3e965e80 + type_id: 0x9b3e4950 + full_name: "snd_soc_add_card_controls" +} elf_symbol { id: 0x0af8ff72 name: "snd_soc_add_component_controls" @@ -367132,6 +374912,15 @@ elf_symbol { type_id: 0x09506558 full_name: "sock_unregister" } +elf_symbol { + id: 0xeab36c96 + name: "sock_wake_async" + is_defined: true + symbol_type: FUNCTION + crc: 0xc356c393 + type_id: 0x9b4f443a + full_name: "sock_wake_async" +} elf_symbol { id: 0xba26b6a3 name: "sock_wfree" @@ -367690,6 +375479,15 @@ elf_symbol { type_id: 0xce4f521b full_name: "stack_trace_save" } +elf_symbol { + id: 0x9ae5b413 + name: "stack_trace_save_regs" + is_defined: true + symbol_type: FUNCTION + crc: 0x2731e15c + type_id: 0xce9ab7ea + full_name: "stack_trace_save_regs" +} elf_symbol { id: 0xe69a5898 name: "stack_trace_save_tsk" @@ -368737,6 +376535,60 @@ elf_symbol { type_id: 0x5760fe36 full_name: "tcp_hashinfo" } +elf_symbol { + id: 0x5f96413a + name: "tcp_register_congestion_control" + is_defined: true + symbol_type: FUNCTION + crc: 0x6a326cc1 + type_id: 0x920aa99b + full_name: "tcp_register_congestion_control" +} +elf_symbol { + id: 0x34a062e9 + name: "tcp_reno_cong_avoid" + is_defined: true + symbol_type: FUNCTION + crc: 0x49080385 + type_id: 0x14df3fae + full_name: "tcp_reno_cong_avoid" +} +elf_symbol { + id: 0x97edc1c5 + name: "tcp_reno_ssthresh" + is_defined: true + symbol_type: FUNCTION + crc: 0xfc040e49 + type_id: 0x42a927f9 + full_name: "tcp_reno_ssthresh" +} +elf_symbol { + id: 0xdb8e8104 + name: "tcp_reno_undo_cwnd" + is_defined: true + symbol_type: FUNCTION + crc: 0x4dece522 + type_id: 0x42a927f9 + full_name: "tcp_reno_undo_cwnd" +} +elf_symbol { + id: 0xe6a46ba8 + name: "tcp_slow_start" + is_defined: true + symbol_type: FUNCTION + crc: 0x1cf8d7ac + type_id: 0x4022c156 + full_name: "tcp_slow_start" +} +elf_symbol { + id: 0xefab10bf + name: "tcp_unregister_congestion_control" + is_defined: true + symbol_type: FUNCTION + crc: 0xc80e5686 + type_id: 0x1f121b27 + full_name: "tcp_unregister_congestion_control" +} elf_symbol { id: 0x857e5dc9 name: "tcpci_get_tcpm_port" @@ -370159,6 +378011,15 @@ elf_symbol { type_id: 0x9bc8ded8 full_name: "tty_port_install" } +elf_symbol { + id: 0x3ed74db1 + name: "tty_port_link_device" + is_defined: true + symbol_type: FUNCTION + crc: 0xebd3061e + type_id: 0x16cab29d + full_name: "tty_port_link_device" +} elf_symbol { id: 0x8c3087ea name: "tty_port_lower_dtr_rts" @@ -373471,6 +381332,15 @@ elf_symbol { type_id: 0x96011ad3 full_name: "usb_serial_suspend" } +elf_symbol { + id: 0xedbb00b2 + name: "usb_set_configuration" + is_defined: true + symbol_type: FUNCTION + crc: 0x58ece092 + type_id: 0x9f435990 + full_name: "usb_set_configuration" +} elf_symbol { id: 0x34af8a35 name: "usb_set_device_state" @@ -377224,6 +385094,15 @@ elf_symbol { type_id: 0x12dd8909 full_name: "zap_vma_ptes" } +elf_symbol { + id: 0xe8e0ea6a + name: "zero_pfn" + is_defined: true + symbol_type: OBJECT + crc: 0x85efc7e0 + type_id: 0x33756485 + full_name: "zero_pfn" +} elf_symbol { id: 0xa5d58813 name: "zlib_deflate" @@ -377438,6 +385317,7 @@ interface { symbol_id: 0xbceb9c07 symbol_id: 0xe70766b6 symbol_id: 0xb339c336 + symbol_id: 0xcc33f78c symbol_id: 0x01badff0 symbol_id: 0x4df0b385 symbol_id: 0x35aa1afd @@ -377475,6 +385355,7 @@ interface { symbol_id: 0x857a0e42 symbol_id: 0xe889d441 symbol_id: 0x087c7a06 + symbol_id: 0x8f70cdad symbol_id: 0x2d91cc56 symbol_id: 0xdc24797a symbol_id: 0xf2144a48 @@ -377546,6 +385427,7 @@ interface { symbol_id: 0x47a334c4 symbol_id: 0xebf4b11f symbol_id: 0x5b1ea047 + symbol_id: 0xe458ae39 symbol_id: 0x129eb7ed symbol_id: 0x63083569 symbol_id: 0x46f82598 @@ -377747,6 +385629,7 @@ interface { symbol_id: 0xb3d70eab symbol_id: 0x0b48afa1 symbol_id: 0x48420da9 + symbol_id: 0x144db0a1 symbol_id: 0x192bbbd5 symbol_id: 0xadc13d20 symbol_id: 0xc93c7d6d @@ -377805,6 +385688,7 @@ interface { symbol_id: 0xe3e24295 symbol_id: 0xaedef3a2 symbol_id: 0xde725472 + symbol_id: 0xf0ffb4d4 symbol_id: 0xd90a9a58 symbol_id: 0xbf64b0b6 symbol_id: 0xb25ca194 @@ -377890,6 +385774,7 @@ interface { symbol_id: 0x33c527ab symbol_id: 0x5012fcd8 symbol_id: 0x67bab494 + symbol_id: 0x6aac0cf8 symbol_id: 0x96d1c9c4 symbol_id: 0x42428033 symbol_id: 0x005c7625 @@ -377946,6 +385831,8 @@ interface { symbol_id: 0x4dca46cc symbol_id: 0xf83fbd26 symbol_id: 0x18fde973 + symbol_id: 0xe19d2bf8 + symbol_id: 0x993f42ff symbol_id: 0xfb6a92a8 symbol_id: 0xa94ef105 symbol_id: 0x0e1f9e23 @@ -377981,11 +385868,13 @@ interface { symbol_id: 0x0fa39b81 symbol_id: 0x92518ec5 symbol_id: 0x9792c22e + symbol_id: 0xe2d75052 symbol_id: 0x8d62858f symbol_id: 0xcef5d79f symbol_id: 0x91384eff symbol_id: 0x3ef508a2 symbol_id: 0xfb1b8d64 + symbol_id: 0xc56d7179 symbol_id: 0x5858f827 symbol_id: 0xb1847a6f symbol_id: 0x958d8cdb @@ -378020,6 +385909,8 @@ interface { symbol_id: 0x58e7556b symbol_id: 0x2ecf85e9 symbol_id: 0x34a01a22 + symbol_id: 0xdd9dd67b + symbol_id: 0x48f0cf25 symbol_id: 0x6befbf23 symbol_id: 0x226cc38b symbol_id: 0xeecc1529 @@ -378027,6 +385918,7 @@ interface { symbol_id: 0x2bc25325 symbol_id: 0x0119fc41 symbol_id: 0xd9f43028 + symbol_id: 0x39155e73 symbol_id: 0x8a773cc3 symbol_id: 0x9545623c symbol_id: 0x558490b1 @@ -378045,6 +385937,7 @@ interface { symbol_id: 0xcb4d15f3 symbol_id: 0x6a8145ff symbol_id: 0xb0bf7fd6 + symbol_id: 0xae5e5469 symbol_id: 0x6911084f symbol_id: 0x8068eeb3 symbol_id: 0xfdf83a19 @@ -378098,6 +385991,7 @@ interface { symbol_id: 0xcd36f539 symbol_id: 0x748c1fd7 symbol_id: 0xaf461bff + symbol_id: 0xd7757253 symbol_id: 0x1e8a7e23 symbol_id: 0xfe3875f6 symbol_id: 0x60b5a917 @@ -378156,6 +386050,7 @@ interface { symbol_id: 0x18bac297 symbol_id: 0x1a849f34 symbol_id: 0x3f328d3c + symbol_id: 0xf2fd13ea symbol_id: 0x69e37d02 symbol_id: 0xeda5c5b0 symbol_id: 0x3cd58ada @@ -378241,6 +386136,7 @@ interface { symbol_id: 0x6f146fe1 symbol_id: 0x678bb5ba symbol_id: 0xf1ec5ef2 + symbol_id: 0xca5cbc9a symbol_id: 0xaa072f92 symbol_id: 0x9620eac1 symbol_id: 0x5cc4ca5b @@ -378297,6 +386193,8 @@ interface { symbol_id: 0x62c13726 symbol_id: 0xafbca760 symbol_id: 0x586a06d1 + symbol_id: 0xda2d53f2 + symbol_id: 0x50a5a949 symbol_id: 0xcb34ca12 symbol_id: 0x2f768c2b symbol_id: 0xc34a5545 @@ -378332,11 +386230,13 @@ interface { symbol_id: 0xef7ad117 symbol_id: 0x4568ff8f symbol_id: 0xe918e2ec + symbol_id: 0x13b2fb38 symbol_id: 0x04365139 symbol_id: 0xd94bc301 symbol_id: 0x3fc5ffc9 symbol_id: 0xa3915d70 symbol_id: 0xf01f02ea + symbol_id: 0xeaebbadf symbol_id: 0xe471b8d5 symbol_id: 0x84628825 symbol_id: 0x8d0ce77d @@ -378371,6 +386271,8 @@ interface { symbol_id: 0x39e68fed symbol_id: 0xefb9e5a3 symbol_id: 0x3fe0157c + symbol_id: 0xe5bf742d + symbol_id: 0x4ef2c337 symbol_id: 0x6f25dd05 symbol_id: 0xa5c71571 symbol_id: 0xfa3284c7 @@ -378378,6 +386280,7 @@ interface { symbol_id: 0xd9d2bcff symbol_id: 0x09ba106b symbol_id: 0xf9580976 + symbol_id: 0x49b955bd symbol_id: 0x18e67da1 symbol_id: 0x75a2f39e symbol_id: 0x7b5c377f @@ -378396,6 +386299,7 @@ interface { symbol_id: 0x743ea36d symbol_id: 0xc09d36c9 symbol_id: 0x42dbeb24 + symbol_id: 0xa13f65ff symbol_id: 0xf57e8f65 symbol_id: 0x18343f2d symbol_id: 0xef8c9bf3 @@ -378753,10 +386657,13 @@ interface { symbol_id: 0xd4a0f991 symbol_id: 0x864cb6b1 symbol_id: 0x55c7afec + symbol_id: 0xd1f054c0 + symbol_id: 0x2e575a11 symbol_id: 0xf737e767 symbol_id: 0x6ad917a1 symbol_id: 0xdeb1861d symbol_id: 0x7661d150 + symbol_id: 0x56b332ad symbol_id: 0x6a712ee1 symbol_id: 0xe594a242 symbol_id: 0x3afeb397 @@ -378809,6 +386716,7 @@ interface { symbol_id: 0xdded4dcd symbol_id: 0x9dea2dda symbol_id: 0x8ea00f54 + symbol_id: 0x521ad765 symbol_id: 0x0f9d7b5e symbol_id: 0x0be8da0e symbol_id: 0x921644f5 @@ -378900,6 +386808,7 @@ interface { symbol_id: 0xb29100f2 symbol_id: 0xef9eb644 symbol_id: 0xf91cb171 + symbol_id: 0xd156aa2c symbol_id: 0x00d9abe7 symbol_id: 0xb63845e5 symbol_id: 0x5332f89b @@ -379367,6 +387276,7 @@ interface { symbol_id: 0x589e892d symbol_id: 0x25bf4477 symbol_id: 0x5b8e8574 + symbol_id: 0x22e51db4 symbol_id: 0x5a62c5df symbol_id: 0x20c43211 symbol_id: 0xcdcce9e8 @@ -379379,6 +387289,22 @@ interface { symbol_id: 0x440b32de symbol_id: 0x96ffcda6 symbol_id: 0x4b1a4683 + symbol_id: 0x884a3a76 + symbol_id: 0xb54be30e + symbol_id: 0xead962b7 + symbol_id: 0xfb50f564 + symbol_id: 0xff600ca5 + symbol_id: 0x266ac51c + symbol_id: 0xa8e06dd7 + symbol_id: 0x52e65741 + symbol_id: 0x2069fc41 + symbol_id: 0x0abe7457 + symbol_id: 0x70ca4fad + symbol_id: 0xa164371a + symbol_id: 0xb4634233 + symbol_id: 0x0a058c0b + symbol_id: 0x5603c10b + symbol_id: 0x7520d018 symbol_id: 0xde9ec7ca symbol_id: 0xa2a47944 symbol_id: 0x97ae66e9 @@ -379423,6 +387349,7 @@ interface { symbol_id: 0x097ab520 symbol_id: 0xccb2ecff symbol_id: 0xd0f2d980 + symbol_id: 0x241e9d4d symbol_id: 0xf6b9516e symbol_id: 0xa2b20c15 symbol_id: 0x0ea63f59 @@ -379611,6 +387538,7 @@ interface { symbol_id: 0xb989e3a2 symbol_id: 0xd140139f symbol_id: 0x009463a5 + symbol_id: 0x843aec6c symbol_id: 0xeb70c9c5 symbol_id: 0xafa3c498 symbol_id: 0x083d52da @@ -380065,6 +387993,7 @@ interface { symbol_id: 0x879ed3f8 symbol_id: 0xd7bee2cf symbol_id: 0x7826a8f0 + symbol_id: 0xb701b4b1 symbol_id: 0x19652f5f symbol_id: 0x78ae9c1c symbol_id: 0x3e16ebdf @@ -380176,6 +388105,7 @@ interface { symbol_id: 0x3f648037 symbol_id: 0xc75616d8 symbol_id: 0x467358e5 + symbol_id: 0xb1dfbb02 symbol_id: 0xacc42253 symbol_id: 0x0a446897 symbol_id: 0xb107d2cd @@ -380248,6 +388178,7 @@ interface { symbol_id: 0x07715f1a symbol_id: 0x2c0dfd47 symbol_id: 0xb3bb06f4 + symbol_id: 0xe7fde0db symbol_id: 0xee139066 symbol_id: 0x613adcb1 symbol_id: 0x370e6f08 @@ -380746,6 +388677,7 @@ interface { symbol_id: 0xc73383c1 symbol_id: 0x0ee6aecf symbol_id: 0x3c5daf32 + symbol_id: 0xcec28ada symbol_id: 0xbd83f7de symbol_id: 0xb6637ce6 symbol_id: 0x5ce8149d @@ -380786,6 +388718,7 @@ interface { symbol_id: 0xadf1bba5 symbol_id: 0x1a299344 symbol_id: 0xe52a90e5 + symbol_id: 0x87342c78 symbol_id: 0x1f9ceb72 symbol_id: 0x119c23e5 symbol_id: 0x9aea043a @@ -380925,6 +388858,8 @@ interface { symbol_id: 0x1b2f5f11 symbol_id: 0x6746106c symbol_id: 0xc5f22a59 + symbol_id: 0x52f17879 + symbol_id: 0xa84cb89b symbol_id: 0xff4a14be symbol_id: 0x4e60d546 symbol_id: 0x0e6a648c @@ -381002,6 +388937,7 @@ interface { symbol_id: 0x46063085 symbol_id: 0x8ab0e185 symbol_id: 0xbeb6fe53 + symbol_id: 0xf44e0659 symbol_id: 0x9c1bb84e symbol_id: 0xa656e08e symbol_id: 0x4c5f49dc @@ -381269,6 +389205,7 @@ interface { symbol_id: 0x596b8466 symbol_id: 0xd9f124cf symbol_id: 0xdca2a3c4 + symbol_id: 0x6d579aaf symbol_id: 0xe4059d72 symbol_id: 0x842903b7 symbol_id: 0x354e8904 @@ -381348,6 +389285,7 @@ interface { symbol_id: 0x55bed293 symbol_id: 0xc1add767 symbol_id: 0x9a02788c + symbol_id: 0x760780be symbol_id: 0xc258a893 symbol_id: 0x2ce3e2c6 symbol_id: 0x04096200 @@ -381549,6 +389487,7 @@ interface { symbol_id: 0xe2b0e5a5 symbol_id: 0xb8036e9c symbol_id: 0xe36e392a + symbol_id: 0x05a46d27 symbol_id: 0xe3de7018 symbol_id: 0x26fb2401 symbol_id: 0xec79392b @@ -381655,6 +389594,7 @@ interface { symbol_id: 0xdc14ff55 symbol_id: 0x2616989d symbol_id: 0xc922a019 + symbol_id: 0x7490fd3a symbol_id: 0xfdf9f7ee symbol_id: 0x3c537500 symbol_id: 0x1b814fa6 @@ -381708,6 +389648,7 @@ interface { symbol_id: 0x7cd4622d symbol_id: 0x5dfeb70f symbol_id: 0x01a00013 + symbol_id: 0xc3f9d559 symbol_id: 0xb9d0b3a8 symbol_id: 0x96b46225 symbol_id: 0x35a3d772 @@ -381733,6 +389674,7 @@ interface { symbol_id: 0xbe6406c3 symbol_id: 0x9c6c58ea symbol_id: 0x2fefe933 + symbol_id: 0x1c994923 symbol_id: 0xec861eec symbol_id: 0x5810bdc3 symbol_id: 0x3cbd6214 @@ -382259,6 +390201,7 @@ interface { symbol_id: 0x6cde79b4 symbol_id: 0xd68bae0f symbol_id: 0x2b688ec7 + symbol_id: 0x700d1b28 symbol_id: 0x248856c2 symbol_id: 0x6ff192fd symbol_id: 0x3deea824 @@ -382289,6 +390232,7 @@ interface { symbol_id: 0xc91eefc6 symbol_id: 0x7511baca symbol_id: 0x29553efc + symbol_id: 0x90e2334a symbol_id: 0xfd198070 symbol_id: 0x4a781b7f symbol_id: 0xc92def38 @@ -382310,6 +390254,7 @@ interface { symbol_id: 0x2804801a symbol_id: 0x4893b166 symbol_id: 0xbf6a903f + symbol_id: 0xfd977d86 symbol_id: 0xddb9ed35 symbol_id: 0x21d8367b symbol_id: 0xce959ab5 @@ -382753,6 +390698,8 @@ interface { symbol_id: 0x4c674d1e symbol_id: 0x1f9b728b symbol_id: 0x99a17453 + symbol_id: 0xd7393cd7 + symbol_id: 0xbf61e6bf symbol_id: 0x675bcd74 symbol_id: 0x35280a80 symbol_id: 0x03fd01bd @@ -382764,6 +390711,7 @@ interface { symbol_id: 0x83c5422c symbol_id: 0xff4bd5dc symbol_id: 0x1adae35c + symbol_id: 0xfc7ac85d symbol_id: 0x6aca9744 symbol_id: 0x6b08a95c symbol_id: 0x238c5442 @@ -382780,6 +390728,7 @@ interface { symbol_id: 0x8a143ba0 symbol_id: 0x47548cf4 symbol_id: 0xfa53e7be + symbol_id: 0x257f1e06 symbol_id: 0x5e6e4a8e symbol_id: 0x32ffb327 symbol_id: 0x3491ba62 @@ -382811,12 +390760,15 @@ interface { symbol_id: 0x2c61b358 symbol_id: 0x352feb2c symbol_id: 0xf21d6619 + symbol_id: 0x11b8b797 + symbol_id: 0x19ea44b2 symbol_id: 0xba998ee2 symbol_id: 0x74420600 symbol_id: 0x92edca7e symbol_id: 0xb2f7eb17 symbol_id: 0x8eb5b50d symbol_id: 0x1f5649eb + symbol_id: 0x31ef5894 symbol_id: 0x0af8ff72 symbol_id: 0xe3ec4d34 symbol_id: 0xf23ecd34 @@ -382989,6 +390941,7 @@ interface { symbol_id: 0xeffe0f16 symbol_id: 0x7b771682 symbol_id: 0x39362be4 + symbol_id: 0xeab36c96 symbol_id: 0xba26b6a3 symbol_id: 0xfdaa1c0d symbol_id: 0xe86ce747 @@ -383051,6 +391004,7 @@ interface { symbol_id: 0xf4594c32 symbol_id: 0xa33694f6 symbol_id: 0x7e8e12de + symbol_id: 0x9ae5b413 symbol_id: 0xe69a5898 symbol_id: 0xbd07e567 symbol_id: 0xf304733e @@ -383168,6 +391122,12 @@ interface { symbol_id: 0xd6adc7e6 symbol_id: 0xcc386657 symbol_id: 0xeb0e3e9b + symbol_id: 0x5f96413a + symbol_id: 0x34a062e9 + symbol_id: 0x97edc1c5 + symbol_id: 0xdb8e8104 + symbol_id: 0xe6a46ba8 + symbol_id: 0xefab10bf symbol_id: 0x857e5dc9 symbol_id: 0x85459353 symbol_id: 0x1ecfd7d9 @@ -383326,6 +391286,7 @@ interface { symbol_id: 0x604f0f0b symbol_id: 0x5b997ef3 symbol_id: 0x6a405f9b + symbol_id: 0x3ed74db1 symbol_id: 0x8c3087ea symbol_id: 0x4e9dfcab symbol_id: 0x4a92dfd1 @@ -383694,6 +391655,7 @@ interface { symbol_id: 0xbc49d007 symbol_id: 0xa20893c4 symbol_id: 0xf13a39cb + symbol_id: 0xedbb00b2 symbol_id: 0x34af8a35 symbol_id: 0x3cc50b4b symbol_id: 0x85997d50 @@ -384111,6 +392073,7 @@ interface { symbol_id: 0xb73c4905 symbol_id: 0xbb650596 symbol_id: 0x0fc8c78d + symbol_id: 0xe8e0ea6a symbol_id: 0xa5d58813 symbol_id: 0xde6620d5 symbol_id: 0xdf18b1a9 diff --git a/android/abi_gki_aarch64_galaxy b/android/abi_gki_aarch64_galaxy index ebe4fa10620a..d14cade9b61a 100644 --- a/android/abi_gki_aarch64_galaxy +++ b/android/abi_gki_aarch64_galaxy @@ -35,6 +35,7 @@ class_create_file_ns class_find_device class_remove_file_ns + cleancache_register_ops __const_udelay copy_from_kernel_nofault cpu_hwcaps @@ -99,6 +100,8 @@ __free_pages free_pages free_pages_exact + fsnotify + __fsnotify_parent generic_file_read_iter generic_mii_ioctl generic_perform_write @@ -149,6 +152,8 @@ kasan_flag_enabled kasprintf kernel_cpustat + kernel_neon_begin + kernel_neon_end kernfs_find_and_get_ns kfree __kfree_skb @@ -164,6 +169,7 @@ kobject_put kstrdup kstrtoint + kstrtos16 kstrtouint kstrtoull kthread_create_on_node @@ -257,6 +263,7 @@ register_reboot_notifier register_restart_handler register_syscore_ops + regulator_get_current_limit remove_cpu rtc_class_open rtc_read_time @@ -277,6 +284,9 @@ single_open single_release skb_copy_ubufs + smpboot_register_percpu_thread + smpboot_unregister_percpu_thread + snd_soc_add_card_controls snd_soc_find_dai snd_soc_info_volsw_sx snd_soc_put_volsw_sx @@ -285,6 +295,7 @@ sprintf sscanf __stack_chk_fail + stack_trace_save_regs stpcpy strcmp strim @@ -306,6 +317,12 @@ system_long_wq system_unbound_wq sys_tz + tcp_register_congestion_control + tcp_reno_cong_avoid + tcp_reno_ssthresh + tcp_reno_undo_cwnd + tcp_slow_start + tcp_unregister_congestion_control time64_to_tm __traceiter_android_rvh_arm64_serror_panic __traceiter_android_rvh_die_kernel_fault @@ -339,6 +356,7 @@ __traceiter_android_vh_try_to_freeze_todo __traceiter_android_vh_try_to_freeze_todo_unfrozen __traceiter_android_vh_watchdog_timer_softlockup + __traceiter_android_vh_wq_lockup_pool __traceiter_block_rq_insert __traceiter_console __traceiter_hrtimer_expire_entry @@ -380,6 +398,7 @@ __tracepoint_android_vh_try_to_freeze_todo __tracepoint_android_vh_try_to_freeze_todo_unfrozen __tracepoint_android_vh_watchdog_timer_softlockup + __tracepoint_android_vh_wq_lockup_pool __tracepoint_block_rq_insert __tracepoint_console __tracepoint_hrtimer_expire_entry @@ -399,6 +418,7 @@ up_write usb_alloc_dev usb_gstrings_attach + usb_set_configuration usbnet_get_endpoints usbnet_link_change usb_set_device_state diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index 9a933b3f74c6..bac4ddf87c67 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -416,6 +416,7 @@ device_release_driver device_remove_bin_file device_remove_file + device_remove_file_self device_rename __device_reset device_set_of_node_from_dev @@ -429,6 +430,22 @@ _dev_info __dev_kfree_skb_any __dev_kfree_skb_irq + devlink_alloc_ns + devlink_flash_update_status_notify + devlink_fmsg_binary_pair_nest_end + devlink_fmsg_binary_pair_nest_start + devlink_fmsg_binary_put + devlink_free + devlink_health_report + devlink_health_reporter_create + devlink_health_reporter_destroy + devlink_health_reporter_priv + devlink_health_reporter_state_update + devlink_priv + devlink_region_create + devlink_region_destroy + devlink_register + devlink_unregister dev_load devm_add_action __devm_alloc_percpu diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index e06e98d72020..ee42a50dcbdb 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -86,6 +86,7 @@ tcf_exts_validate tcf_queue_work __traceiter_android_rvh_post_init_entity_util_avg + __traceiter_android_rvh_rtmutex_force_update __traceiter_android_vh_account_process_tick_gran __traceiter_android_vh_account_task_time __traceiter_android_vh_do_futex @@ -99,11 +100,6 @@ __traceiter_android_vh_record_pcpu_rwsem_starttime __traceiter_android_vh_record_rtmutex_lock_starttime __traceiter_android_vh_record_rwsem_lock_starttime - __tracepoint_android_vh_record_mutex_lock_starttime - __tracepoint_android_vh_record_pcpu_rwsem_starttime - __tracepoint_android_vh_record_rtmutex_lock_starttime - __tracepoint_android_vh_record_rwsem_lock_starttime - __trace_puts __traceiter_android_vh_alter_mutex_list_add __traceiter_android_vh_binder_free_proc __traceiter_android_vh_binder_has_work_ilocked @@ -121,8 +117,11 @@ __traceiter_android_vh_binder_thread_release __traceiter_android_vh_binder_wait_for_work __traceiter_android_vh_cgroup_set_task + __traceiter_android_vh_check_folio_look_around_ref __traceiter_android_vh_dup_task_struct __traceiter_android_vh_exit_signal + __traceiter_android_vh_look_around + __traceiter_android_vh_look_around_migrate_folio __traceiter_android_vh_mem_cgroup_id_remove __traceiter_android_vh_mem_cgroup_css_offline __traceiter_android_vh_mem_cgroup_css_online @@ -136,6 +135,7 @@ __traceiter_android_vh_cleanup_old_buffers_bypass __traceiter_android_vh_dm_bufio_shrink_scan_bypass __traceiter_android_vh_mutex_unlock_slowpath + __traceiter_android_vh_rtmutex_waiter_prio __traceiter_android_vh_rwsem_can_spin_on_owner __traceiter_android_vh_rwsem_opt_spin_finish __traceiter_android_vh_rwsem_opt_spin_start @@ -143,6 +143,7 @@ __traceiter_android_vh_sched_stat_runtime_rt __traceiter_android_vh_shrink_node_memcgs __traceiter_android_vh_sync_txn_recvd + __traceiter_android_vh_task_blocks_on_rtmutex __traceiter_block_bio_queue __traceiter_block_getrq __traceiter_block_rq_complete @@ -156,7 +157,9 @@ __traceiter_sched_stat_wait __traceiter_sched_waking __traceiter_task_rename + __traceiter_android_vh_test_clear_look_around_ref __tracepoint_android_rvh_post_init_entity_util_avg + __tracepoint_android_rvh_rtmutex_force_update __tracepoint_android_vh_account_process_tick_gran __tracepoint_android_vh_account_task_time __tracepoint_android_vh_alter_mutex_list_add @@ -176,6 +179,7 @@ __tracepoint_android_vh_binder_thread_release __tracepoint_android_vh_binder_wait_for_work __tracepoint_android_vh_cgroup_set_task + __tracepoint_android_vh_check_folio_look_around_ref __tracepoint_android_vh_do_futex __tracepoint_android_vh_dup_task_struct __tracepoint_android_vh_exit_signal @@ -191,6 +195,8 @@ __tracepoint_android_vh_futex_wake_traverse_plist __tracepoint_android_vh_futex_wake_up_q_finish __tracepoint_android_vh_irqtime_account_process_tick + __tracepoint_android_vh_look_around + __tracepoint_android_vh_look_around_migrate_folio __tracepoint_android_vh_mutex_can_spin_on_owner __tracepoint_android_vh_mutex_opt_spin_finish __tracepoint_android_vh_mutex_opt_spin_start @@ -198,6 +204,11 @@ __tracepoint_android_vh_cleanup_old_buffers_bypass __tracepoint_android_vh_dm_bufio_shrink_scan_bypass __tracepoint_android_vh_mutex_unlock_slowpath + __tracepoint_android_vh_record_mutex_lock_starttime + __tracepoint_android_vh_record_pcpu_rwsem_starttime + __tracepoint_android_vh_record_rtmutex_lock_starttime + __tracepoint_android_vh_record_rwsem_lock_starttime + __tracepoint_android_vh_rtmutex_waiter_prio __tracepoint_android_vh_rwsem_can_spin_on_owner __tracepoint_android_vh_rwsem_opt_spin_finish __tracepoint_android_vh_rwsem_opt_spin_start @@ -205,6 +216,8 @@ __tracepoint_android_vh_sched_stat_runtime_rt __tracepoint_android_vh_shrink_node_memcgs __tracepoint_android_vh_sync_txn_recvd + __tracepoint_android_vh_task_blocks_on_rtmutex + __tracepoint_android_vh_test_clear_look_around_ref __tracepoint_block_bio_queue __tracepoint_block_getrq __tracepoint_block_rq_complete @@ -218,6 +231,7 @@ __tracepoint_sched_stat_wait __tracepoint_sched_waking __tracepoint_task_rename + __trace_puts try_to_free_mem_cgroup_pages typec_mux_get_drvdata unregister_memory_notifier @@ -227,3 +241,4 @@ wait_for_completion_killable_timeout wakeup_source_remove wq_worker_comm + zero_pfn diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index 63a91761992d..4fe7be5b8bbe 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -369,15 +369,19 @@ devm_clk_put devm_device_add_group devm_device_add_groups + devm_device_remove_group __devm_drm_dev_alloc devm_drm_panel_bridge_add_typed devm_extcon_dev_allocate devm_extcon_dev_register devm_free_irq + devm_fwnode_gpiod_get_index + devm_fwnode_pwm_get devm_gen_pool_create devm_gpiochip_add_data_with_key devm_gpiod_get devm_gpiod_get_array + devm_gpiod_get_index_optional devm_gpiod_get_optional devm_gpiod_put_array devm_gpio_request @@ -396,6 +400,7 @@ devm_kmemdup devm_kstrdup devm_kstrdup_const + devm_led_classdev_register_ext devm_mfd_add_devices devm_nvmem_register __devm_of_phy_provider_register @@ -410,6 +415,7 @@ devm_platform_ioremap_resource devm_platform_ioremap_resource_byname devm_power_supply_register + devm_pwm_get devm_regmap_add_irq_chip __devm_regmap_init __devm_regmap_init_i2c @@ -742,6 +748,7 @@ extcon_register_notifier extcon_set_property extcon_set_property_capability + extcon_set_property_sync extcon_set_state_sync extcon_unregister_notifier fasync_helper @@ -962,8 +969,10 @@ int_to_scsilun iomem_resource iommu_alloc_resv_region + iommu_attach_device iommu_attach_device_pasid iommu_attach_group + iommu_detach_device iommu_detach_device_pasid iommu_device_register iommu_device_sysfs_add @@ -1124,6 +1133,7 @@ kvmalloc_node led_classdev_register_ext led_classdev_unregister + led_init_default_state_get __list_add_valid __list_del_entry_valid list_sort @@ -1505,6 +1515,7 @@ __put_task_struct put_unused_fd put_vaddr_frames + pwm_apply_state queue_delayed_work_on queue_work_on radix_tree_delete_item @@ -1607,6 +1618,7 @@ regulator_map_voltage_linear regulator_notifier_call_chain regulator_put + regulator_set_active_discharge_regmap regulator_set_voltage regulator_set_voltage_sel_regmap regulator_unregister @@ -1998,10 +2010,17 @@ __traceiter_device_pm_callback_end __traceiter_device_pm_callback_start __traceiter_gpu_mem_total + __traceiter_hrtimer_expire_entry + __traceiter_hrtimer_expire_exit + __traceiter_irq_handler_entry + __traceiter_irq_handler_exit __traceiter_mmap_lock_acquire_returned __traceiter_mmap_lock_released __traceiter_mmap_lock_start_locking + __traceiter_sched_switch __traceiter_suspend_resume + __traceiter_workqueue_execute_end + __traceiter_workqueue_execute_start trace_output_call __tracepoint_android_rvh_typec_tcpci_get_vbus __tracepoint_android_vh_cpu_idle_enter @@ -2027,12 +2046,19 @@ __tracepoint_device_pm_callback_end __tracepoint_device_pm_callback_start __tracepoint_gpu_mem_total + __tracepoint_hrtimer_expire_entry + __tracepoint_hrtimer_expire_exit + __tracepoint_irq_handler_entry + __tracepoint_irq_handler_exit __tracepoint_mmap_lock_acquire_returned __tracepoint_mmap_lock_released __tracepoint_mmap_lock_start_locking tracepoint_probe_register tracepoint_probe_unregister + __tracepoint_sched_switch __tracepoint_suspend_resume + __tracepoint_workqueue_execute_end + __tracepoint_workqueue_execute_start trace_print_array_seq trace_print_bitmask_seq trace_print_flags_seq @@ -2264,6 +2290,9 @@ __xfrm_state_destroy xfrm_state_lookup_byspi xfrm_stateonly_find + xhci_address_device + xhci_bus_resume + xhci_bus_suspend xhci_gen_setup xhci_init_driver xhci_resume diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index ebc1815c3325..637e7ef90f20 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -1550,6 +1550,7 @@ iommu_group_get_iommudata iommu_group_put iommu_group_ref_get + iommu_group_remove_device iommu_group_set_iommudata iommu_iova_to_phys iommu_map @@ -3282,6 +3283,7 @@ __traceiter_android_rvh_after_dequeue_task __traceiter_android_rvh_after_enqueue_task __traceiter_android_rvh_audio_usb_offload_disconnect + __traceiter_android_rvh_before_do_sched_yield __traceiter_android_rvh_build_perf_domains __traceiter_android_rvh_can_migrate_task __traceiter_android_rvh_check_preempt_tick @@ -3425,6 +3427,7 @@ __tracepoint_android_rvh_after_dequeue_task __tracepoint_android_rvh_after_enqueue_task __tracepoint_android_rvh_audio_usb_offload_disconnect + __tracepoint_android_rvh_before_do_sched_yield __tracepoint_android_rvh_build_perf_domains __tracepoint_android_rvh_can_migrate_task __tracepoint_android_rvh_check_preempt_tick diff --git a/android/abi_gki_aarch64_unisoc b/android/abi_gki_aarch64_unisoc index bb8ad74d357d..ac818f2e495f 100644 --- a/android/abi_gki_aarch64_unisoc +++ b/android/abi_gki_aarch64_unisoc @@ -574,6 +574,8 @@ skb_unlink sk_error_report sk_free + snd_ctl_find_id + snd_info_get_line snprintf sock_alloc_send_pskb sock_create_kern @@ -714,6 +716,7 @@ __traceiter_android_vh_get_thermal_zone_device __traceiter_android_vh_modify_thermal_request_freq __traceiter_android_vh_modify_thermal_target_freq + __traceiter_android_vh_regmap_update __traceiter_android_vh_scheduler_tick __traceiter_android_vh_thermal_power_cap __traceiter_android_vh_thermal_register @@ -792,6 +795,7 @@ __tracepoint_android_vh_get_thermal_zone_device __tracepoint_android_vh_modify_thermal_request_freq __tracepoint_android_vh_modify_thermal_target_freq + __tracepoint_android_vh_regmap_update __tracepoint_android_vh_scheduler_tick __tracepoint_android_vh_thermal_power_cap __tracepoint_android_vh_thermal_register @@ -1576,6 +1580,11 @@ spi_controller_suspend spi_finalize_current_transfer +# required by sprd-audio-codec.ko + regulator_register + snd_pcm_rate_bit_to_rate + snd_pcm_rate_to_rate_bit + # required by sprd-bc1p2.ko kthread_flush_worker __kthread_init_worker @@ -1660,14 +1669,18 @@ drm_poll drm_read drm_release + drm_send_event_timestamp_locked drm_vblank_init mipi_dsi_host_register mipi_dsi_host_unregister + mipi_dsi_set_maximum_return_packet_size of_drm_find_bridge + of_get_drm_display_mode of_graph_get_port_by_id of_graph_get_remote_node __platform_register_drivers platform_unregister_drivers + regmap_get_reg_stride # required by sprd-iommu.ko iommu_device_register @@ -1759,6 +1772,9 @@ devm_watchdog_register_device watchdog_init_timeout +# required by sprdbt_tty.ko + tty_port_link_device + # required by sysdump.ko android_rvh_probe_register input_close_device diff --git a/android/abi_gki_aarch64_vivo b/android/abi_gki_aarch64_vivo index 69d634eb4fa5..b17c82fe8684 100644 --- a/android/abi_gki_aarch64_vivo +++ b/android/abi_gki_aarch64_vivo @@ -419,6 +419,7 @@ __traceiter_android_vh_try_to_freeze_todo __traceiter_android_vh_try_to_freeze_todo_unfrozen __traceiter_android_vh_try_to_unmap_one + __traceiter_android_vh_tune_scan_type __traceiter_android_vh_ufs_check_int_errors __traceiter_android_vh_ufs_clock_scaling __traceiter_android_vh_ufs_compl_command @@ -588,6 +589,7 @@ __tracepoint_android_vh_try_to_unmap_one __tracepoint_android_vh_try_to_freeze_todo __tracepoint_android_vh_try_to_freeze_todo_unfrozen + __tracepoint_android_vh_tune_scan_type __tracepoint_android_vh_ufs_check_int_errors __tracepoint_android_vh_ufs_clock_scaling __tracepoint_android_vh_ufs_compl_command diff --git a/android/abi_gki_aarch64_xiaomi b/android/abi_gki_aarch64_xiaomi index b0e34e78b178..5a0852cf19f6 100644 --- a/android/abi_gki_aarch64_xiaomi +++ b/android/abi_gki_aarch64_xiaomi @@ -218,6 +218,12 @@ kernfs_path_from_node blkcg_activate_policy +#required by mq-deadline module + blk_mq_debugfs_rq_show + seq_list_start + seq_list_next + __blk_mq_debugfs_rq_show + #required by metis.ko module __traceiter_android_vh_rwsem_read_wait_start __traceiter_android_vh_rwsem_write_wait_start @@ -306,3 +312,23 @@ __tracepoint_android_vh_rmqueue_smallest_bypass __traceiter_android_vh_free_one_page_bypass __tracepoint_android_vh_free_one_page_bypass + +# required by SAGT module + __traceiter_android_rvh_before_do_sched_yield + __tracepoint_android_rvh_before_do_sched_yield + +#required by minetwork.ko + sock_wake_async + bpf_map_put + bpf_map_inc + __dev_direct_xmit + napi_busy_loop + int_active_memcg + bpf_redirect_info + dma_need_sync + page_pool_put_page_bulk + build_skb_around + +#required by xm_ispv4_pcie.ko + pci_ioremap_bar + pci_disable_pcie_error_reporting diff --git a/android/abi_gki_protected_exports_aarch64 b/android/abi_gki_protected_exports_aarch64 index e4792af0a0ef..7d97572e6175 100644 --- a/android/abi_gki_protected_exports_aarch64 +++ b/android/abi_gki_protected_exports_aarch64 @@ -336,12 +336,10 @@ wpan_phy_new wpan_phy_register wpan_phy_unregister wwan_create_port -wwan_get_debugfs_dir wwan_port_get_drvdata wwan_port_rx wwan_port_txoff wwan_port_txon -wwan_put_debugfs_dir wwan_register_ops wwan_remove_port wwan_unregister_ops \ No newline at end of file diff --git a/android/abi_gki_protected_exports_x86_64 b/android/abi_gki_protected_exports_x86_64 index e4792af0a0ef..7d97572e6175 100644 --- a/android/abi_gki_protected_exports_x86_64 +++ b/android/abi_gki_protected_exports_x86_64 @@ -336,12 +336,10 @@ wpan_phy_new wpan_phy_register wpan_phy_unregister wwan_create_port -wwan_get_debugfs_dir wwan_port_get_drvdata wwan_port_rx wwan_port_txoff wwan_port_txon -wwan_put_debugfs_dir wwan_register_ops wwan_remove_port wwan_unregister_ops \ No newline at end of file diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig index 97fce7386b00..d95d82abdf29 100644 --- a/arch/alpha/Kconfig +++ b/arch/alpha/Kconfig @@ -28,6 +28,7 @@ config ALPHA select GENERIC_SMP_IDLE_THREAD select HAVE_ARCH_AUDITSYSCALL select HAVE_MOD_ARCH_SPECIFIC + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select ODD_RT_SIGACTION select OLD_SIGSUSPEND diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c index ef427a6bdd1a..2b49aa94e4de 100644 --- a/arch/alpha/mm/fault.c +++ b/arch/alpha/mm/fault.c @@ -119,20 +119,12 @@ do_page_fault(unsigned long address, unsigned long mmcsr, flags |= FAULT_FLAG_USER; perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; + goto bad_area_nosemaphore; /* Ok, we have a good vm_area for this memory access, so we can handle it. */ - good_area: si_code = SEGV_ACCERR; if (cause < 0) { if (!(vma->vm_flags & VM_EXEC)) @@ -189,6 +181,7 @@ do_page_fault(unsigned long address, unsigned long mmcsr, bad_area: mmap_read_unlock(mm); + bad_area_nosemaphore: if (user_mode(regs)) goto do_sigsegv; diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index d9a13ccf89a3..cb1074f74c3f 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig @@ -41,6 +41,7 @@ config ARC select HAVE_PERF_EVENTS select HAVE_SYSCALL_TRACEPOINTS select IRQ_DOMAIN + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select OF select OF_EARLY_FLATTREE diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c index 5ca59a482632..f59e722d147f 100644 --- a/arch/arc/mm/fault.c +++ b/arch/arc/mm/fault.c @@ -113,15 +113,9 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (unlikely(address < vma->vm_start)) { - if (!(vma->vm_flags & VM_GROWSDOWN) || expand_stack(vma, address)) - goto bad_area; - } + goto bad_area_nosemaphore; /* * vm_area is good, now check permissions for this memory access @@ -161,6 +155,7 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) bad_area: mmap_read_unlock(mm); +bad_area_nosemaphore: /* * Major/minor page fault accounting * (in case of retry we only land here once) diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a08c9d092a33..0202e48e7a20 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -122,6 +122,7 @@ config ARM select HAVE_UID16 select HAVE_VIRT_CPU_ACCOUNTING_GEN select IRQ_FORCED_THREADING + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_REL select NEED_DMA_MAP_STATE select OF_EARLY_FLATTREE if OF diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index de988cba9a4b..b0db85310331 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c @@ -231,37 +231,11 @@ static inline bool is_permission_fault(unsigned int fsr) return false; } -static vm_fault_t __kprobes -__do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int flags, - unsigned long vma_flags, struct pt_regs *regs) -{ - struct vm_area_struct *vma = find_vma(mm, addr); - if (unlikely(!vma)) - return VM_FAULT_BADMAP; - - if (unlikely(vma->vm_start > addr)) { - if (!(vma->vm_flags & VM_GROWSDOWN)) - return VM_FAULT_BADMAP; - if (addr < FIRST_USER_ADDRESS) - return VM_FAULT_BADMAP; - if (expand_stack(vma, addr)) - return VM_FAULT_BADMAP; - } - - /* - * ok, we have a good vm_area for this memory access, check the - * permissions on the VMA allow for the fault which occurred. - */ - if (!(vma->vm_flags & vma_flags)) - return VM_FAULT_BADACCESS; - - return handle_mm_fault(vma, addr & PAGE_MASK, flags, regs); -} - static int __kprobes do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) { struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; int sig, code; vm_fault_t fault; unsigned int flags = FAULT_FLAG_DEFAULT; @@ -300,31 +274,21 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr); - /* - * As per x86, we may deadlock here. However, since the kernel only - * validly references user space from well defined areas of the code, - * we can bug out early if this is from code which shouldn't. - */ - if (!mmap_read_trylock(mm)) { - if (!user_mode(regs) && !search_exception_tables(regs->ARM_pc)) - goto no_context; retry: - mmap_read_lock(mm); - } else { - /* - * The above down_read_trylock() might have succeeded in - * which case, we'll have missed the might_sleep() from - * down_read() - */ - might_sleep(); -#ifdef CONFIG_DEBUG_VM - if (!user_mode(regs) && - !search_exception_tables(regs->ARM_pc)) - goto no_context; -#endif + vma = lock_mm_and_find_vma(mm, addr, regs); + if (unlikely(!vma)) { + fault = VM_FAULT_BADMAP; + goto bad_area; } - fault = __do_page_fault(mm, addr, flags, vm_flags, regs); + /* + * ok, we have a good vm_area for this memory access, check the + * permissions on the VMA allow for the fault which occurred. + */ + if (!(vma->vm_flags & vm_flags)) + fault = VM_FAULT_BADACCESS; + else + fault = handle_mm_fault(vma, addr & PAGE_MASK, flags, regs); /* If we need to retry but a fatal signal is pending, handle the * signal first. We do not need to release the mmap_lock because @@ -355,6 +319,7 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs) if (likely(!(fault & (VM_FAULT_ERROR | VM_FAULT_BADMAP | VM_FAULT_BADACCESS)))) return 0; +bad_area: /* * If we are in kernel mode at this point, we * have no context to handle this fault with. diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index f0f10f9accdf..bc1e76c3244f 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -216,6 +216,7 @@ config ARM64 select IRQ_DOMAIN select IRQ_FORCED_THREADING select KASAN_VMALLOC if KASAN + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select NEED_DMA_MAP_STATE select NEED_SG_DMA_LENGTH diff --git a/arch/arm64/configs/consolidate.fragment b/arch/arm64/configs/consolidate.fragment index 8747c79cef12..ff0f1385054b 100644 --- a/arch/arm64/configs/consolidate.fragment +++ b/arch/arm64/configs/consolidate.fragment @@ -3,7 +3,7 @@ # CONFIG_BITFIELD_KUNIT is not set # CONFIG_BITS_TEST is not set CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y -CONFIG_CMDLINE="console=ttyMSM0,115200n8 kasan.stacktrace=off stack_depot_disable=off page_owner=on no_hash_pointers panic_on_taint=0x20 page_pinner=on" +CONFIG_CMDLINE="console=ttyMSM0,115200n8 kasan.stacktrace=off stack_depot_disable=off page_owner=on no_hash_pointers panic_on_taint=0x20 page_pinner=on slub_debug=FZP,zs_handle,zspage;FZPU" CONFIG_DEBUG_ATOMIC_SLEEP=y CONFIG_DEBUG_IRQFLAGS=y CONFIG_DEBUG_KMEMLEAK=y diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c index 16abb1e0de08..48e20ad5ff38 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c @@ -39,7 +39,12 @@ static bool (*default_trap_handler)(struct kvm_cpu_context *host_ctxt); int __pkvm_register_host_smc_handler(bool (*cb)(struct kvm_cpu_context *)) { - return cmpxchg(&default_host_smc_handler, NULL, cb) ? -EBUSY : 0; + /* + * Paired with smp_load_acquire(&default_host_smc_handler) in + * handle_host_smc(). Ensure memory stores happening during a pKVM module + * init are observed before executing the callback. + */ + return cmpxchg_release(&default_host_smc_handler, NULL, cb) ? -EBUSY : 0; } int __pkvm_register_default_trap_handler(bool (*cb)(struct kvm_cpu_context *)) @@ -1376,7 +1381,7 @@ static void handle_host_smc(struct kvm_cpu_context *host_ctxt) handled = kvm_host_psci_handler(host_ctxt); if (!handled) handled = kvm_host_ffa_handler(host_ctxt); - if (!handled && READ_ONCE(default_host_smc_handler)) + if (!handled && smp_load_acquire(&default_host_smc_handler)) handled = default_host_smc_handler(host_ctxt); if (!handled) __kvm_hyp_host_forward_smc(host_ctxt); diff --git a/arch/arm64/kvm/hyp/nvhe/psci-relay.c b/arch/arm64/kvm/hyp/nvhe/psci-relay.c index d4825b6140ba..f8db5445b530 100644 --- a/arch/arm64/kvm/hyp/nvhe/psci-relay.c +++ b/arch/arm64/kvm/hyp/nvhe/psci-relay.c @@ -28,14 +28,19 @@ struct kvm_host_psci_config __ro_after_init kvm_host_psci_config; static void (*pkvm_psci_notifier)(enum pkvm_psci_notification, struct kvm_cpu_context *); static void pkvm_psci_notify(enum pkvm_psci_notification notif, struct kvm_cpu_context *host_ctxt) { - if (READ_ONCE(pkvm_psci_notifier)) + if (smp_load_acquire(&pkvm_psci_notifier)) pkvm_psci_notifier(notif, host_ctxt); } #ifdef CONFIG_MODULES int __pkvm_register_psci_notifier(void (*cb)(enum pkvm_psci_notification, struct kvm_cpu_context *)) { - return cmpxchg(&pkvm_psci_notifier, NULL, cb) ? -EBUSY : 0; + /* + * Paired with smp_load_acquire(&pkvm_psci_notifier) in + * pkvm_psci_notify(). Ensure memory stores hapenning during a pKVM module + * init are observed before executing the callback. + */ + return cmpxchg_release(&pkvm_psci_notifier, NULL, cb) ? -EBUSY : 0; } #endif diff --git a/arch/arm64/kvm/hyp/nvhe/serial.c b/arch/arm64/kvm/hyp/nvhe/serial.c index 0b2cf3b6d6a5..475ebf4ba7de 100644 --- a/arch/arm64/kvm/hyp/nvhe/serial.c +++ b/arch/arm64/kvm/hyp/nvhe/serial.c @@ -35,7 +35,8 @@ static inline void __hyp_putx4n(unsigned long x, int n) static inline bool hyp_serial_enabled(void) { - return !!READ_ONCE(__hyp_putc); + /* Paired with __pkvm_register_serial_driver()'s cmpxchg */ + return !!smp_load_acquire(&__hyp_putc); } void hyp_puts(const char *s) @@ -64,5 +65,10 @@ void hyp_putc(char c) int __pkvm_register_serial_driver(void (*cb)(char)) { - return cmpxchg(&__hyp_putc, NULL, cb) ? -EBUSY : 0; + /* + * Paired with smp_load_acquire(&__hyp_putc) in + * hyp_serial_enabled(). Ensure memory stores hapenning during a pKVM + * module init are observed before executing the callback. + */ + return cmpxchg_release(&__hyp_putc, NULL, cb) ? -EBUSY : 0; } diff --git a/arch/arm64/mm/fault.c b/arch/arm64/mm/fault.c index 49e08cc145c0..e5e07212126d 100644 --- a/arch/arm64/mm/fault.c +++ b/arch/arm64/mm/fault.c @@ -502,27 +502,14 @@ static void do_bad_area(unsigned long far, unsigned long esr, #define VM_FAULT_BADMAP 0x010000 #define VM_FAULT_BADACCESS 0x020000 -static vm_fault_t __do_page_fault(struct mm_struct *mm, unsigned long addr, +static vm_fault_t __do_page_fault(struct mm_struct *mm, + struct vm_area_struct *vma, unsigned long addr, unsigned int mm_flags, unsigned long vm_flags, struct pt_regs *regs) { - struct vm_area_struct *vma = find_vma(mm, addr); - - if (unlikely(!vma)) - return VM_FAULT_BADMAP; - /* * Ok, we have a good vm_area for this memory access, so we can handle * it. - */ - if (unlikely(vma->vm_start > addr)) { - if (!(vma->vm_flags & VM_GROWSDOWN)) - return VM_FAULT_BADMAP; - if (expand_stack(vma, addr)) - return VM_FAULT_BADMAP; - } - - /* * Check that the permissions on the VMA allow for the fault which * occurred. */ @@ -554,9 +541,7 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, unsigned long vm_flags; unsigned int mm_flags = FAULT_FLAG_DEFAULT; unsigned long addr = untagged_addr(far); -#ifdef CONFIG_PER_VMA_LOCK struct vm_area_struct *vma; -#endif if (kprobe_page_fault(regs, esr)) return 0; @@ -614,7 +599,6 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, addr); -#ifdef CONFIG_PER_VMA_LOCK if (!(mm_flags & FAULT_FLAG_USER)) goto lock_mmap; @@ -627,7 +611,8 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, goto lock_mmap; } fault = handle_mm_fault(vma, addr, mm_flags | FAULT_FLAG_VMA_LOCK, regs); - vma_end_read(vma); + if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) + vma_end_read(vma); if (!(fault & VM_FAULT_RETRY)) { count_vm_vma_lock_event(VMA_LOCK_SUCCESS); @@ -642,32 +627,15 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, return 0; } lock_mmap: -#endif /* CONFIG_PER_VMA_LOCK */ - /* - * As per x86, we may deadlock here. However, since the kernel only - * validly references user space from well defined areas of the code, - * we can bug out early if this is from code which shouldn't. - */ - if (!mmap_read_trylock(mm)) { - if (!user_mode(regs) && !search_exception_tables(regs->pc)) - goto no_context; + retry: - mmap_read_lock(mm); - } else { - /* - * The above mmap_read_trylock() might have succeeded in which - * case, we'll have missed the might_sleep() from down_read(). - */ - might_sleep(); -#ifdef CONFIG_DEBUG_VM - if (!user_mode(regs) && !search_exception_tables(regs->pc)) { - mmap_read_unlock(mm); - goto no_context; - } -#endif + vma = lock_mm_and_find_vma(mm, addr, regs); + if (unlikely(!vma)) { + fault = VM_FAULT_BADMAP; + goto done; } - fault = __do_page_fault(mm, addr, mm_flags, vm_flags, regs); + fault = __do_page_fault(mm, vma, addr, mm_flags, vm_flags, regs); /* Quick path to respond to signals */ if (fault_signal_pending(fault, regs)) { @@ -686,9 +654,7 @@ static int __kprobes do_page_fault(unsigned long far, unsigned long esr, } mmap_read_unlock(mm); -#ifdef CONFIG_PER_VMA_LOCK done: -#endif /* * Handle the "normal" (no error) case first. */ diff --git a/arch/csky/Kconfig b/arch/csky/Kconfig index adee6ab36862..742009123fd5 100644 --- a/arch/csky/Kconfig +++ b/arch/csky/Kconfig @@ -96,6 +96,7 @@ config CSKY select HAVE_RSEQ select HAVE_STACKPROTECTOR select HAVE_SYSCALL_TRACEPOINTS + select LOCK_MM_AND_FIND_VMA select MAY_HAVE_SPARSE_IRQ select MODULES_USE_ELF_RELA if MODULES select OF diff --git a/arch/csky/mm/fault.c b/arch/csky/mm/fault.c index e15f736cca4b..ae9781b7d92e 100644 --- a/arch/csky/mm/fault.c +++ b/arch/csky/mm/fault.c @@ -97,13 +97,12 @@ static inline void mm_fault_error(struct pt_regs *regs, unsigned long addr, vm_f BUG(); } -static inline void bad_area(struct pt_regs *regs, struct mm_struct *mm, int code, unsigned long addr) +static inline void bad_area_nosemaphore(struct pt_regs *regs, struct mm_struct *mm, int code, unsigned long addr) { /* * Something tried to access memory that isn't in our memory map. * Fix it, but check if it's kernel or user first. */ - mmap_read_unlock(mm); /* User mode accesses just cause a SIGSEGV */ if (user_mode(regs)) { do_trap(regs, SIGSEGV, code, addr); @@ -238,20 +237,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs) if (is_write(regs)) flags |= FAULT_FLAG_WRITE; retry: - mmap_read_lock(mm); - vma = find_vma(mm, addr); + vma = lock_mm_and_find_vma(mm, address, regs); if (unlikely(!vma)) { - bad_area(regs, mm, code, addr); - return; - } - if (likely(vma->vm_start <= addr)) - goto good_area; - if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) { - bad_area(regs, mm, code, addr); - return; - } - if (unlikely(expand_stack(vma, addr))) { - bad_area(regs, mm, code, addr); + bad_area_nosemaphore(regs, mm, code, addr); return; } @@ -259,11 +247,11 @@ asmlinkage void do_page_fault(struct pt_regs *regs) * Ok, we have a good vm_area for this memory access, so * we can handle it. */ -good_area: code = SEGV_ACCERR; if (unlikely(access_error(regs, vma))) { - bad_area(regs, mm, code, addr); + mmap_read_unlock(mm); + bad_area_nosemaphore(regs, mm, code, addr); return; } diff --git a/arch/hexagon/Kconfig b/arch/hexagon/Kconfig index 54eadf265178..6726f4941015 100644 --- a/arch/hexagon/Kconfig +++ b/arch/hexagon/Kconfig @@ -28,6 +28,7 @@ config HEXAGON select GENERIC_SMP_IDLE_THREAD select STACKTRACE_SUPPORT select GENERIC_CLOCKEVENTS_BROADCAST + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select GENERIC_CPU_DEVICES select ARCH_WANT_LD_ORPHAN_WARN diff --git a/arch/hexagon/mm/vm_fault.c b/arch/hexagon/mm/vm_fault.c index f73c7cbfe326..583b08727166 100644 --- a/arch/hexagon/mm/vm_fault.c +++ b/arch/hexagon/mm/vm_fault.c @@ -57,21 +57,10 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs) perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - vma = find_vma(mm, address); - if (!vma) - goto bad_area; + vma = lock_mm_and_find_vma(mm, address, regs); + if (unlikely(!vma)) + goto bad_area_nosemaphore; - if (vma->vm_start <= address) - goto good_area; - - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - - if (expand_stack(vma, address)) - goto bad_area; - -good_area: /* Address space is OK. Now check access rights. */ si_code = SEGV_ACCERR; @@ -140,6 +129,7 @@ void do_page_fault(unsigned long address, long cause, struct pt_regs *regs) bad_area: mmap_read_unlock(mm); +bad_area_nosemaphore: if (user_mode(regs)) { force_sig_fault(SIGSEGV, si_code, (void __user *)address); return; diff --git a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c index ef78c2d66cdd..99a09abe1d2c 100644 --- a/arch/ia64/mm/fault.c +++ b/arch/ia64/mm/fault.c @@ -110,10 +110,12 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re * register backing store that needs to expand upwards, in * this case vma will be null, but prev_vma will ne non-null */ - if (( !vma && prev_vma ) || (address < vma->vm_start) ) - goto check_expansion; + if (( !vma && prev_vma ) || (address < vma->vm_start) ) { + vma = expand_stack(mm, address); + if (!vma) + goto bad_area_nosemaphore; + } - good_area: code = SEGV_ACCERR; /* OK, we've got a good vm_area for this memory area. Check the access permissions: */ @@ -174,35 +176,9 @@ ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *re mmap_read_unlock(mm); return; - check_expansion: - if (!(prev_vma && (prev_vma->vm_flags & VM_GROWSUP) && (address == prev_vma->vm_end))) { - if (!vma) - goto bad_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (REGION_NUMBER(address) != REGION_NUMBER(vma->vm_start) - || REGION_OFFSET(address) >= RGN_MAP_LIMIT) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; - } else { - vma = prev_vma; - if (REGION_NUMBER(address) != REGION_NUMBER(vma->vm_start) - || REGION_OFFSET(address) >= RGN_MAP_LIMIT) - goto bad_area; - /* - * Since the register backing store is accessed sequentially, - * we disallow growing it by more than a page at a time. - */ - if (address > vma->vm_end + PAGE_SIZE - sizeof(long)) - goto bad_area; - if (expand_upwards(vma, address)) - goto bad_area; - } - goto good_area; - bad_area: mmap_read_unlock(mm); + bad_area_nosemaphore: if ((isr & IA64_ISR_SP) || ((isr & IA64_ISR_NA) && (isr & IA64_ISR_CODE_MASK) == IA64_ISR_CODE_LFETCH)) { diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig index 903096bd87f8..51d738ac12e5 100644 --- a/arch/loongarch/Kconfig +++ b/arch/loongarch/Kconfig @@ -107,6 +107,7 @@ config LOONGARCH select HAVE_VIRT_CPU_ACCOUNTING_GEN if !SMP select IRQ_FORCED_THREADING select IRQ_LOONGARCH_CPU + select LOCK_MM_AND_FIND_VMA select MMU_GATHER_MERGE_VMAS if MMU select MODULES_USE_ELF_RELA if MODULES select NEED_PER_CPU_EMBED_FIRST_CHUNK diff --git a/arch/loongarch/mm/fault.c b/arch/loongarch/mm/fault.c index 1ccd53655cab..b829ab911a17 100644 --- a/arch/loongarch/mm/fault.c +++ b/arch/loongarch/mm/fault.c @@ -166,22 +166,18 @@ static void __kprobes __do_page_fault(struct pt_regs *regs, perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - vma = find_vma(mm, address); - if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (!expand_stack(vma, address)) - goto good_area; + vma = lock_mm_and_find_vma(mm, address, regs); + if (unlikely(!vma)) + goto bad_area_nosemaphore; + goto good_area; + /* * Something tried to access memory that isn't in our memory map.. * Fix it, but check if it's kernel or user first.. */ bad_area: mmap_read_unlock(mm); +bad_area_nosemaphore: do_sigsegv(regs, write, address, si_code); return; diff --git a/arch/m68k/mm/fault.c b/arch/m68k/mm/fault.c index 4d2837eb3e2a..6f62af8e293a 100644 --- a/arch/m68k/mm/fault.c +++ b/arch/m68k/mm/fault.c @@ -105,8 +105,9 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, if (address + 256 < rdusp()) goto map_err; } - if (expand_stack(vma, address)) - goto map_err; + vma = expand_stack(mm, address); + if (!vma) + goto map_err_nosemaphore; /* * Ok, we have a good vm_area for this memory access, so @@ -193,10 +194,12 @@ int do_page_fault(struct pt_regs *regs, unsigned long address, goto send_sig; map_err: + mmap_read_unlock(mm); +map_err_nosemaphore: current->thread.signo = SIGSEGV; current->thread.code = SEGV_MAPERR; current->thread.faddr = address; - goto send_sig; + return send_fault_sig(regs); acc_err: current->thread.signo = SIGSEGV; diff --git a/arch/microblaze/mm/fault.c b/arch/microblaze/mm/fault.c index 5c40c3ebe52f..a409bb3f09f7 100644 --- a/arch/microblaze/mm/fault.c +++ b/arch/microblaze/mm/fault.c @@ -192,8 +192,9 @@ void do_page_fault(struct pt_regs *regs, unsigned long address, && (kernel_mode(regs) || !store_updates_sp(regs))) goto bad_area; } - if (expand_stack(vma, address)) - goto bad_area; + vma = expand_stack(mm, address); + if (!vma) + goto bad_area_nosemaphore; good_area: code = SEGV_ACCERR; diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index b26b77673c2c..fecb681ff264 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -93,6 +93,7 @@ config MIPS select HAVE_VIRT_CPU_ACCOUNTING_GEN if 64BIT || !SMP select IRQ_FORCED_THREADING select ISA if EISA + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_REL if MODULES select MODULES_USE_ELF_RELA if MODULES && 64BIT select PERF_USE_VMALLOC diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index a27045f5a556..d7878208bd3f 100644 --- a/arch/mips/mm/fault.c +++ b/arch/mips/mm/fault.c @@ -99,21 +99,13 @@ static void __do_page_fault(struct pt_regs *regs, unsigned long write, perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; + goto bad_area_nosemaphore; /* * Ok, we have a good vm_area for this memory access, so * we can handle it.. */ -good_area: si_code = SEGV_ACCERR; if (write) { diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig index a582f72104f3..1fb78865a459 100644 --- a/arch/nios2/Kconfig +++ b/arch/nios2/Kconfig @@ -16,6 +16,7 @@ config NIOS2 select HAVE_ARCH_TRACEHOOK select HAVE_ARCH_KGDB select IRQ_DOMAIN + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select OF select OF_EARLY_FLATTREE diff --git a/arch/nios2/mm/fault.c b/arch/nios2/mm/fault.c index edaca0a6c1c1..71939fb28c2e 100644 --- a/arch/nios2/mm/fault.c +++ b/arch/nios2/mm/fault.c @@ -86,27 +86,14 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long cause, perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); - if (!mmap_read_trylock(mm)) { - if (!user_mode(regs) && !search_exception_tables(regs->ea)) - goto bad_area_nosemaphore; retry: - mmap_read_lock(mm); - } - - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; + goto bad_area_nosemaphore; /* * Ok, we have a good vm_area for this memory access, so * we can handle it.. */ -good_area: code = SEGV_ACCERR; switch (cause) { diff --git a/arch/openrisc/mm/fault.c b/arch/openrisc/mm/fault.c index b4762d66e9ef..e3ad46d02fbd 100644 --- a/arch/openrisc/mm/fault.c +++ b/arch/openrisc/mm/fault.c @@ -127,8 +127,9 @@ asmlinkage void do_page_fault(struct pt_regs *regs, unsigned long address, if (address + PAGE_SIZE < regs->sp) goto bad_area; } - if (expand_stack(vma, address)) - goto bad_area; + vma = expand_stack(mm, address); + if (!vma) + goto bad_area_nosemaphore; /* * Ok, we have a good vm_area for this memory access, so diff --git a/arch/parisc/mm/fault.c b/arch/parisc/mm/fault.c index 869204e97ec9..1843b493910c 100644 --- a/arch/parisc/mm/fault.c +++ b/arch/parisc/mm/fault.c @@ -288,15 +288,19 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, retry: mmap_read_lock(mm); vma = find_vma_prev(mm, address, &prev_vma); - if (!vma || address < vma->vm_start) - goto check_expansion; + if (!vma || address < vma->vm_start) { + if (!prev || !(prev->vm_flags & VM_GROWSUP)) + goto bad_area; + vma = expand_stack(mm, address); + if (!vma) + goto bad_area_nosemaphore; + } + /* * Ok, we have a good vm_area for this memory access. We still need to * check the access permissions. */ -good_area: - if ((vma->vm_flags & acc_type) != acc_type) goto bad_area; @@ -342,17 +346,13 @@ void do_page_fault(struct pt_regs *regs, unsigned long code, mmap_read_unlock(mm); return; -check_expansion: - vma = prev_vma; - if (vma && (expand_stack(vma, address) == 0)) - goto good_area; - /* * Something tried to access memory that isn't in our memory map.. */ bad_area: mmap_read_unlock(mm); +bad_area_nosemaphore: if (user_mode(regs)) { int signo, si_code; @@ -444,7 +444,7 @@ handle_nadtlb_fault(struct pt_regs *regs) { unsigned long insn = regs->iir; int breg, treg, xreg, val = 0; - struct vm_area_struct *vma, *prev_vma; + struct vm_area_struct *vma; struct task_struct *tsk; struct mm_struct *mm; unsigned long address; @@ -480,7 +480,7 @@ handle_nadtlb_fault(struct pt_regs *regs) /* Search for VMA */ address = regs->ior; mmap_read_lock(mm); - vma = find_vma_prev(mm, address, &prev_vma); + vma = vma_lookup(mm, address); mmap_read_unlock(mm); /* @@ -489,7 +489,6 @@ handle_nadtlb_fault(struct pt_regs *regs) */ acc_type = (insn & 0x40) ? VM_WRITE : VM_READ; if (vma - && address >= vma->vm_start && (vma->vm_flags & acc_type) == acc_type) val = 1; } diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig index 2b1141645d9e..6050e6e10d32 100644 --- a/arch/powerpc/Kconfig +++ b/arch/powerpc/Kconfig @@ -257,6 +257,7 @@ config PPC select IRQ_DOMAIN select IRQ_FORCED_THREADING select KASAN_VMALLOC if KASAN && MODULES + select LOCK_MM_AND_FIND_VMA select MMU_GATHER_PAGE_SIZE select MMU_GATHER_RCU_TABLE_FREE select MMU_GATHER_MERGE_VMAS diff --git a/arch/powerpc/kvm/book3s_hv_uvmem.c b/arch/powerpc/kvm/book3s_hv_uvmem.c index 303869f4855f..6f121a034cef 100644 --- a/arch/powerpc/kvm/book3s_hv_uvmem.c +++ b/arch/powerpc/kvm/book3s_hv_uvmem.c @@ -410,6 +410,7 @@ static int kvmppc_memslot_page_merge(struct kvm *kvm, ret = H_STATE; break; } + vma_start_write(vma); /* Copy vm_flags to avoid partial modifications in ksm_madvise */ vm_flags = vma->vm_flags; ret = ksm_madvise(vma, vma->vm_start, vma->vm_end, diff --git a/arch/powerpc/mm/book3s64/subpage_prot.c b/arch/powerpc/mm/book3s64/subpage_prot.c index b75a9fb99599..b0eea434ef08 100644 --- a/arch/powerpc/mm/book3s64/subpage_prot.c +++ b/arch/powerpc/mm/book3s64/subpage_prot.c @@ -143,6 +143,7 @@ static int subpage_walk_pmd_entry(pmd_t *pmd, unsigned long addr, static const struct mm_walk_ops subpage_walk_ops = { .pmd_entry = subpage_walk_pmd_entry, + .walk_lock = PGWALK_WRLOCK_VERIFY, }; static void subpage_mark_vma_nohuge(struct mm_struct *mm, unsigned long addr, diff --git a/arch/powerpc/mm/copro_fault.c b/arch/powerpc/mm/copro_fault.c index 7c507fb48182..f49fd873df8d 100644 --- a/arch/powerpc/mm/copro_fault.c +++ b/arch/powerpc/mm/copro_fault.c @@ -33,19 +33,11 @@ int copro_handle_mm_fault(struct mm_struct *mm, unsigned long ea, if (mm->pgd == NULL) return -EFAULT; - mmap_read_lock(mm); - ret = -EFAULT; - vma = find_vma(mm, ea); + vma = lock_mm_and_find_vma(mm, ea, NULL); if (!vma) - goto out_unlock; - - if (ea < vma->vm_start) { - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto out_unlock; - if (expand_stack(vma, ea)) - goto out_unlock; - } + return -EFAULT; + ret = -EFAULT; is_write = dsisr & DSISR_ISSTORE; if (is_write) { if (!(vma->vm_flags & VM_WRITE)) diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c index 531177a4ee08..b1723094d464 100644 --- a/arch/powerpc/mm/fault.c +++ b/arch/powerpc/mm/fault.c @@ -84,11 +84,6 @@ static int __bad_area(struct pt_regs *regs, unsigned long address, int si_code) return __bad_area_nosemaphore(regs, address, si_code); } -static noinline int bad_area(struct pt_regs *regs, unsigned long address) -{ - return __bad_area(regs, address, SEGV_MAPERR); -} - static noinline int bad_access_pkey(struct pt_regs *regs, unsigned long address, struct vm_area_struct *vma) { @@ -474,7 +469,6 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address, if (is_exec) flags |= FAULT_FLAG_INSTRUCTION; -#ifdef CONFIG_PER_VMA_LOCK if (!(flags & FAULT_FLAG_USER)) goto lock_mmap; @@ -494,7 +488,8 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address, } fault = handle_mm_fault(vma, address, flags | FAULT_FLAG_VMA_LOCK, regs); - vma_end_read(vma); + if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) + vma_end_read(vma); if (!(fault & VM_FAULT_RETRY)) { count_vm_vma_lock_event(VMA_LOCK_SUCCESS); @@ -506,7 +501,6 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address, return user_mode(regs) ? 0 : SIGBUS; lock_mmap: -#endif /* CONFIG_PER_VMA_LOCK */ /* When running in the kernel we expect faults to occur only to * addresses in user space. All other faults represent errors in the @@ -515,40 +509,12 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address, * we will deadlock attempting to validate the fault against the * address space. Luckily the kernel only validly references user * space from well defined areas of code, which are listed in the - * exceptions table. - * - * As the vast majority of faults will be valid we will only perform - * the source reference check when there is a possibility of a deadlock. - * Attempt to lock the address space, if we cannot we then validate the - * source. If this is invalid we can skip the address space check, - * thus avoiding the deadlock. + * exceptions table. lock_mm_and_find_vma() handles that logic. */ - if (unlikely(!mmap_read_trylock(mm))) { - if (!is_user && !search_exception_tables(regs->nip)) - return bad_area_nosemaphore(regs, address); - retry: - mmap_read_lock(mm); - } else { - /* - * The above down_read_trylock() might have succeeded in - * which case we'll have missed the might_sleep() from - * down_read(): - */ - might_sleep(); - } - - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (unlikely(!vma)) - return bad_area(regs, address); - - if (unlikely(vma->vm_start > address)) { - if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) - return bad_area(regs, address); - - if (unlikely(expand_stack(vma, address))) - return bad_area(regs, address); - } + return bad_area_nosemaphore(regs, address); if (unlikely(access_pkey_error(is_write, is_exec, (error_code & DSISR_KEYFAULT), vma))) @@ -584,9 +550,7 @@ static int ___do_page_fault(struct pt_regs *regs, unsigned long address, mmap_read_unlock(current->mm); -#ifdef CONFIG_PER_VMA_LOCK done: -#endif if (unlikely(fault & VM_FAULT_ERROR)) return mm_fault_error(regs, address, fault); diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index 06b9b2f60b9f..ac586089767d 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -39,6 +39,7 @@ config RISCV select ARCH_SUPPORTS_DEBUG_PAGEALLOC if MMU select ARCH_SUPPORTS_HUGETLBFS if MMU select ARCH_SUPPORTS_PAGE_TABLE_CHECK if MMU + select ARCH_SUPPORTS_PER_VMA_LOCK if MMU select ARCH_USE_MEMTEST select ARCH_USE_QUEUED_RWLOCKS select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT if MMU @@ -113,6 +114,7 @@ config RISCV select HAVE_RSEQ select IRQ_DOMAIN select IRQ_FORCED_THREADING + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA if MODULES select MODULE_SECTIONS if MODULES select OF diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c index eb0774d9c03b..34a44febae86 100644 --- a/arch/riscv/mm/fault.c +++ b/arch/riscv/mm/fault.c @@ -83,13 +83,13 @@ static inline void mm_fault_error(struct pt_regs *regs, unsigned long addr, vm_f BUG(); } -static inline void bad_area(struct pt_regs *regs, struct mm_struct *mm, int code, unsigned long addr) +static inline void +bad_area_nosemaphore(struct pt_regs *regs, int code, unsigned long addr) { /* * Something tried to access memory that isn't in our memory map. * Fix it, but check if it's kernel or user first. */ - mmap_read_unlock(mm); /* User mode accesses just cause a SIGSEGV */ if (user_mode(regs)) { do_trap(regs, SIGSEGV, code, addr); @@ -99,6 +99,15 @@ static inline void bad_area(struct pt_regs *regs, struct mm_struct *mm, int code no_context(regs, addr); } +static inline void +bad_area(struct pt_regs *regs, struct mm_struct *mm, int code, + unsigned long addr) +{ + mmap_read_unlock(mm); + + bad_area_nosemaphore(regs, code, addr); +} + static inline void vmalloc_fault(struct pt_regs *regs, int code, unsigned long addr) { pgd_t *pgd, *pgd_k; @@ -280,24 +289,40 @@ asmlinkage void do_page_fault(struct pt_regs *regs) flags |= FAULT_FLAG_WRITE; else if (cause == EXC_INST_PAGE_FAULT) flags |= FAULT_FLAG_INSTRUCTION; + if (!(flags & FAULT_FLAG_USER)) + goto lock_mmap; + + vma = lock_vma_under_rcu(mm, addr); + if (!vma) + goto lock_mmap; + + if (unlikely(access_error(cause, vma))) { + vma_end_read(vma); + goto lock_mmap; + } + + fault = handle_mm_fault(vma, addr, flags | FAULT_FLAG_VMA_LOCK, regs); + if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) + vma_end_read(vma); + + if (!(fault & VM_FAULT_RETRY)) { + count_vm_vma_lock_event(VMA_LOCK_SUCCESS); + goto done; + } + count_vm_vma_lock_event(VMA_LOCK_RETRY); + + if (fault_signal_pending(fault, regs)) { + if (!user_mode(regs)) + no_context(regs, addr); + return; + } +lock_mmap: + retry: - mmap_read_lock(mm); - vma = find_vma(mm, addr); + vma = lock_mm_and_find_vma(mm, addr, regs); if (unlikely(!vma)) { tsk->thread.bad_cause = cause; - bad_area(regs, mm, code, addr); - return; - } - if (likely(vma->vm_start <= addr)) - goto good_area; - if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) { - tsk->thread.bad_cause = cause; - bad_area(regs, mm, code, addr); - return; - } - if (unlikely(expand_stack(vma, addr))) { - tsk->thread.bad_cause = cause; - bad_area(regs, mm, code, addr); + bad_area_nosemaphore(regs, code, addr); return; } @@ -305,7 +330,6 @@ asmlinkage void do_page_fault(struct pt_regs *regs) * Ok, we have a good vm_area for this memory access, so * we can handle it. */ -good_area: code = SEGV_ACCERR; if (unlikely(access_error(cause, vma))) { @@ -346,6 +370,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs) mmap_read_unlock(mm); +done: if (unlikely(fault & VM_FAULT_ERROR)) { tsk->thread.bad_cause = cause; mm_fault_error(regs, addr, fault); diff --git a/arch/riscv/mm/pageattr.c b/arch/riscv/mm/pageattr.c index 86c56616e5de..0f33fc40c911 100644 --- a/arch/riscv/mm/pageattr.c +++ b/arch/riscv/mm/pageattr.c @@ -102,6 +102,7 @@ static const struct mm_walk_ops pageattr_ops = { .pmd_entry = pageattr_pmd_entry, .pte_entry = pageattr_pte_entry, .pte_hole = pageattr_pte_hole, + .walk_lock = PGWALK_RDLOCK, }; static int __set_memory(unsigned long addr, int numpages, pgprot_t set_mask, diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index 16223095045e..0843adb266d1 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c @@ -403,7 +403,6 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) access = VM_WRITE; if (access == VM_WRITE) flags |= FAULT_FLAG_WRITE; -#ifdef CONFIG_PER_VMA_LOCK if (!(flags & FAULT_FLAG_USER)) goto lock_mmap; vma = lock_vma_under_rcu(mm, address); @@ -414,7 +413,8 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) goto lock_mmap; } fault = handle_mm_fault(vma, address, flags | FAULT_FLAG_VMA_LOCK, regs); - vma_end_read(vma); + if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) + vma_end_read(vma); if (!(fault & VM_FAULT_RETRY)) { count_vm_vma_lock_event(VMA_LOCK_SUCCESS); goto out; @@ -426,7 +426,6 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) goto out; } lock_mmap: -#endif /* CONFIG_PER_VMA_LOCK */ mmap_read_lock(mm); gmap = NULL; @@ -453,8 +452,9 @@ static inline vm_fault_t do_exception(struct pt_regs *regs, int access) if (unlikely(vma->vm_start > address)) { if (!(vma->vm_flags & VM_GROWSDOWN)) goto out_up; - if (expand_stack(vma, address)) - goto out_up; + vma = expand_stack(mm, address); + if (!vma) + goto out; } /* diff --git a/arch/s390/mm/gmap.c b/arch/s390/mm/gmap.c index e4567b5fcdda..d3f4b2c0dd9a 100644 --- a/arch/s390/mm/gmap.c +++ b/arch/s390/mm/gmap.c @@ -2510,6 +2510,7 @@ static int thp_split_walk_pmd_entry(pmd_t *pmd, unsigned long addr, static const struct mm_walk_ops thp_split_walk_ops = { .pmd_entry = thp_split_walk_pmd_entry, + .walk_lock = PGWALK_WRLOCK_VERIFY, }; static inline void thp_split_mm(struct mm_struct *mm) @@ -2554,6 +2555,7 @@ static int __zap_zero_pages(pmd_t *pmd, unsigned long start, static const struct mm_walk_ops zap_zero_walk_ops = { .pmd_entry = __zap_zero_pages, + .walk_lock = PGWALK_WRLOCK, }; /* @@ -2655,6 +2657,7 @@ static const struct mm_walk_ops enable_skey_walk_ops = { .hugetlb_entry = __s390_enable_skey_hugetlb, .pte_entry = __s390_enable_skey_pte, .pmd_entry = __s390_enable_skey_pmd, + .walk_lock = PGWALK_WRLOCK, }; int s390_enable_skey(void) @@ -2692,6 +2695,7 @@ static int __s390_reset_cmma(pte_t *pte, unsigned long addr, static const struct mm_walk_ops reset_cmma_walk_ops = { .pte_entry = __s390_reset_cmma, + .walk_lock = PGWALK_WRLOCK, }; void s390_reset_cmma(struct mm_struct *mm) @@ -2728,6 +2732,7 @@ static int s390_gather_pages(pte_t *ptep, unsigned long addr, static const struct mm_walk_ops gather_pages_ops = { .pte_entry = s390_gather_pages, + .walk_lock = PGWALK_RDLOCK, }; /* diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 5f220e903e5a..8e4d1f757bcc 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig @@ -56,6 +56,7 @@ config SUPERH select HAVE_STACKPROTECTOR select HAVE_SYSCALL_TRACEPOINTS select IRQ_FORCED_THREADING + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select NEED_SG_DMA_LENGTH select NO_DMA if !MMU && !DMA_COHERENT diff --git a/arch/sh/mm/fault.c b/arch/sh/mm/fault.c index acd2f5e50bfc..06e6b4952924 100644 --- a/arch/sh/mm/fault.c +++ b/arch/sh/mm/fault.c @@ -439,21 +439,9 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, } retry: - mmap_read_lock(mm); - - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (unlikely(!vma)) { - bad_area(regs, error_code, address); - return; - } - if (likely(vma->vm_start <= address)) - goto good_area; - if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) { - bad_area(regs, error_code, address); - return; - } - if (unlikely(expand_stack(vma, address))) { - bad_area(regs, error_code, address); + bad_area_nosemaphore(regs, error_code, address); return; } @@ -461,7 +449,6 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, * Ok, we have a good vm_area for this memory access, so * we can handle it.. */ -good_area: if (unlikely(access_error(error_code, vma))) { bad_area_access_error(regs, error_code, address); return; diff --git a/arch/sparc/Kconfig b/arch/sparc/Kconfig index 84437a4c6545..dbb1760cbe8c 100644 --- a/arch/sparc/Kconfig +++ b/arch/sparc/Kconfig @@ -56,6 +56,7 @@ config SPARC32 select DMA_DIRECT_REMAP select GENERIC_ATOMIC64 select HAVE_UID16 + select LOCK_MM_AND_FIND_VMA select OLD_SIGACTION select ZONE_DMA diff --git a/arch/sparc/mm/fault_32.c b/arch/sparc/mm/fault_32.c index 91259f291c54..aef2aebe2379 100644 --- a/arch/sparc/mm/fault_32.c +++ b/arch/sparc/mm/fault_32.c @@ -143,28 +143,19 @@ asmlinkage void do_sparc_fault(struct pt_regs *regs, int text_fault, int write, if (pagefault_disabled() || !mm) goto no_context; + if (!from_user && address >= PAGE_OFFSET) + goto no_context; + perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - - if (!from_user && address >= PAGE_OFFSET) - goto bad_area; - - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; + goto bad_area_nosemaphore; /* * Ok, we have a good vm_area for this memory access, so * we can handle it.. */ -good_area: code = SEGV_ACCERR; if (write) { if (!(vma->vm_flags & VM_WRITE)) @@ -318,17 +309,9 @@ static void force_user_fault(unsigned long address, int write) code = SEGV_MAPERR; - mmap_read_lock(mm); - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; -good_area: + goto bad_area_nosemaphore; code = SEGV_ACCERR; if (write) { if (!(vma->vm_flags & VM_WRITE)) @@ -347,6 +330,7 @@ static void force_user_fault(unsigned long address, int write) return; bad_area: mmap_read_unlock(mm); +bad_area_nosemaphore: __do_fault_siginfo(code, SIGSEGV, tsk->thread.kregs, address); return; diff --git a/arch/sparc/mm/fault_64.c b/arch/sparc/mm/fault_64.c index 4acc12eafbf5..df685a241855 100644 --- a/arch/sparc/mm/fault_64.c +++ b/arch/sparc/mm/fault_64.c @@ -383,8 +383,9 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) goto bad_area; } } - if (expand_stack(vma, address)) - goto bad_area; + vma = expand_stack(mm, address); + if (!vma) + goto bad_area_nosemaphore; /* * Ok, we have a good vm_area for this memory access, so * we can handle it.. @@ -482,8 +483,9 @@ asmlinkage void __kprobes do_sparc64_fault(struct pt_regs *regs) * Fix it, but check if it's kernel or user first.. */ bad_area: - insn = get_fault_insn(regs, insn); mmap_read_unlock(mm); +bad_area_nosemaphore: + insn = get_fault_insn(regs, insn); handle_kernel_fault: do_kernel_fault(regs, si_code, fault_code, insn, address); diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c index d3ce21c4ca32..6d8ae86ae978 100644 --- a/arch/um/kernel/trap.c +++ b/arch/um/kernel/trap.c @@ -47,14 +47,15 @@ int handle_page_fault(unsigned long address, unsigned long ip, vma = find_vma(mm, address); if (!vma) goto out; - else if (vma->vm_start <= address) + if (vma->vm_start <= address) goto good_area; - else if (!(vma->vm_flags & VM_GROWSDOWN)) + if (!(vma->vm_flags & VM_GROWSDOWN)) goto out; - else if (is_user && !ARCH_IS_STACKGROW(address)) - goto out; - else if (expand_stack(vma, address)) + if (is_user && !ARCH_IS_STACKGROW(address)) goto out; + vma = expand_stack(mm, address); + if (!vma) + goto out_nosemaphore; good_area: *code_out = SEGV_ACCERR; diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index ab3ce4ea05d0..22cdc45031d4 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -272,6 +272,7 @@ config X86 select HAVE_GENERIC_VDSO select HOTPLUG_SMT if SMP select IRQ_FORCED_THREADING + select LOCK_MM_AND_FIND_VMA select NEED_PER_CPU_EMBED_FIRST_CHUNK select NEED_PER_CPU_PAGE_FIRST_CHUNK select NEED_SG_DMA_LENGTH diff --git a/arch/x86/include/asm/cpu.h b/arch/x86/include/asm/cpu.h index b472ef76826a..37639a2d9c34 100644 --- a/arch/x86/include/asm/cpu.h +++ b/arch/x86/include/asm/cpu.h @@ -96,4 +96,6 @@ static inline bool intel_cpu_signatures_match(unsigned int s1, unsigned int p1, extern u64 x86_read_arch_cap_msr(void); +extern struct cpumask cpus_stop_mask; + #endif /* _ASM_X86_CPU_H */ diff --git a/arch/x86/include/asm/smp.h b/arch/x86/include/asm/smp.h index a73bced40e24..b3b34032ef23 100644 --- a/arch/x86/include/asm/smp.h +++ b/arch/x86/include/asm/smp.h @@ -132,6 +132,8 @@ void wbinvd_on_cpu(int cpu); int wbinvd_on_all_cpus(void); void cond_wakeup_cpu0(void); +void smp_kick_mwait_play_dead(void); + void native_smp_send_reschedule(int cpu); void native_send_call_func_ipi(const struct cpumask *mask); void native_send_call_func_single_ipi(int cpu); diff --git a/arch/x86/kernel/cpu/microcode/amd.c b/arch/x86/kernel/cpu/microcode/amd.c index 461e45d85add..9a3092ec9b27 100644 --- a/arch/x86/kernel/cpu/microcode/amd.c +++ b/arch/x86/kernel/cpu/microcode/amd.c @@ -705,7 +705,7 @@ static enum ucode_state apply_microcode_amd(int cpu) rdmsr(MSR_AMD64_PATCH_LEVEL, rev, dummy); /* need to apply patch? */ - if (rev >= mc_amd->hdr.patch_id) { + if (rev > mc_amd->hdr.patch_id) { ret = UCODE_OK; goto out; } diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c index e436c9c1ef3b..279b5e9be80f 100644 --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c @@ -744,15 +744,26 @@ bool xen_set_default_idle(void) } #endif +struct cpumask cpus_stop_mask; + void __noreturn stop_this_cpu(void *dummy) { + struct cpuinfo_x86 *c = this_cpu_ptr(&cpu_info); + unsigned int cpu = smp_processor_id(); + local_irq_disable(); + /* - * Remove this CPU: + * Remove this CPU from the online mask and disable it + * unconditionally. This might be redundant in case that the reboot + * vector was handled late and stop_other_cpus() sent an NMI. + * + * According to SDM and APM NMIs can be accepted even after soft + * disabling the local APIC. */ - set_cpu_online(smp_processor_id(), false); + set_cpu_online(cpu, false); disable_local_APIC(); - mcheck_cpu_clear(this_cpu_ptr(&cpu_info)); + mcheck_cpu_clear(c); /* * Use wbinvd on processors that support SME. This provides support @@ -766,8 +777,17 @@ void __noreturn stop_this_cpu(void *dummy) * Test the CPUID bit directly because the machine might've cleared * X86_FEATURE_SME due to cmdline options. */ - if (cpuid_eax(0x8000001f) & BIT(0)) + if (c->extended_cpuid_level >= 0x8000001f && (cpuid_eax(0x8000001f) & BIT(0))) native_wbinvd(); + + /* + * This brings a cache line back and dirties it, but + * native_stop_other_cpus() will overwrite cpus_stop_mask after it + * observed that all CPUs reported stop. This write will invalidate + * the related cache line on this CPU. + */ + cpumask_clear_cpu(cpu, &cpus_stop_mask); + for (;;) { /* * Use native_halt() so that memory contents don't change diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c index 375b33ecafa2..174d6232b87f 100644 --- a/arch/x86/kernel/smp.c +++ b/arch/x86/kernel/smp.c @@ -21,12 +21,14 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -146,34 +148,47 @@ static int register_stop_handler(void) static void native_stop_other_cpus(int wait) { - unsigned long flags; - unsigned long timeout; + unsigned int cpu = smp_processor_id(); + unsigned long flags, timeout; if (reboot_force) return; - /* - * Use an own vector here because smp_call_function - * does lots of things not suitable in a panic situation. - */ + /* Only proceed if this is the first CPU to reach this code */ + if (atomic_cmpxchg(&stopping_cpu, -1, cpu) != -1) + return; + + /* For kexec, ensure that offline CPUs are out of MWAIT and in HLT */ + if (kexec_in_progress) + smp_kick_mwait_play_dead(); /* - * We start by using the REBOOT_VECTOR irq. - * The irq is treated as a sync point to allow critical - * regions of code on other cpus to release their spin locks - * and re-enable irqs. Jumping straight to an NMI might - * accidentally cause deadlocks with further shutdown/panic - * code. By syncing, we give the cpus up to one second to - * finish their work before we force them off with the NMI. + * 1) Send an IPI on the reboot vector to all other CPUs. + * + * The other CPUs should react on it after leaving critical + * sections and re-enabling interrupts. They might still hold + * locks, but there is nothing which can be done about that. + * + * 2) Wait for all other CPUs to report that they reached the + * HLT loop in stop_this_cpu() + * + * 3) If #2 timed out send an NMI to the CPUs which did not + * yet report + * + * 4) Wait for all other CPUs to report that they reached the + * HLT loop in stop_this_cpu() + * + * #3 can obviously race against a CPU reaching the HLT loop late. + * That CPU will have reported already and the "have all CPUs + * reached HLT" condition will be true despite the fact that the + * other CPU is still handling the NMI. Again, there is no + * protection against that as "disabled" APICs still respond to + * NMIs. */ - if (num_online_cpus() > 1) { - /* did someone beat us here? */ - if (atomic_cmpxchg(&stopping_cpu, -1, safe_smp_processor_id()) != -1) - return; - - /* sync above data before sending IRQ */ - wmb(); + cpumask_copy(&cpus_stop_mask, cpu_online_mask); + cpumask_clear_cpu(cpu, &cpus_stop_mask); + if (!cpumask_empty(&cpus_stop_mask)) { apic_send_IPI_allbutself(REBOOT_VECTOR); /* @@ -183,24 +198,22 @@ static void native_stop_other_cpus(int wait) * CPUs reach shutdown state. */ timeout = USEC_PER_SEC; - while (num_online_cpus() > 1 && timeout--) + while (!cpumask_empty(&cpus_stop_mask) && timeout--) udelay(1); } /* if the REBOOT_VECTOR didn't work, try with the NMI */ - if (num_online_cpus() > 1) { + if (!cpumask_empty(&cpus_stop_mask)) { /* * If NMI IPI is enabled, try to register the stop handler * and send the IPI. In any case try to wait for the other * CPUs to stop. */ if (!smp_no_nmi_ipi && !register_stop_handler()) { - /* Sync above data before sending IRQ */ - wmb(); - pr_emerg("Shutting down cpus with NMI\n"); - apic_send_IPI_allbutself(NMI_VECTOR); + for_each_cpu(cpu, &cpus_stop_mask) + apic->send_IPI(cpu, NMI_VECTOR); } /* * Don't wait longer than 10 ms if the caller didn't @@ -208,7 +221,7 @@ static void native_stop_other_cpus(int wait) * one or more CPUs do not reach shutdown state. */ timeout = USEC_PER_MSEC * 10; - while (num_online_cpus() > 1 && (wait || timeout--)) + while (!cpumask_empty(&cpus_stop_mask) && (wait || timeout--)) udelay(1); } @@ -216,6 +229,12 @@ static void native_stop_other_cpus(int wait) disable_local_APIC(); mcheck_cpu_clear(this_cpu_ptr(&cpu_info)); local_irq_restore(flags); + + /* + * Ensure that the cpus_stop_mask cache lines are invalidated on + * the other CPUs. See comment vs. SME in stop_this_cpu(). + */ + cpumask_clear(&cpus_stop_mask); } /* diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 3f3ea0287f69..f32ee967414e 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -99,6 +100,20 @@ EXPORT_PER_CPU_SYMBOL(cpu_die_map); DEFINE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info); EXPORT_PER_CPU_SYMBOL(cpu_info); +struct mwait_cpu_dead { + unsigned int control; + unsigned int status; +}; + +#define CPUDEAD_MWAIT_WAIT 0xDEADBEEF +#define CPUDEAD_MWAIT_KEXEC_HLT 0x4A17DEAD + +/* + * Cache line aligned data for mwait_play_dead(). Separate on purpose so + * that it's unlikely to be touched by other CPUs. + */ +static DEFINE_PER_CPU_ALIGNED(struct mwait_cpu_dead, mwait_cpu_dead); + /* Logical package management. We might want to allocate that dynamically */ unsigned int __max_logical_packages __read_mostly; EXPORT_SYMBOL(__max_logical_packages); @@ -155,6 +170,10 @@ static void smp_callin(void) { int cpuid; + /* Mop up eventual mwait_play_dead() wreckage */ + this_cpu_write(mwait_cpu_dead.status, 0); + this_cpu_write(mwait_cpu_dead.control, 0); + /* * If waken up by an INIT in an 82489DX configuration * cpu_callout_mask guarantees we don't get here before @@ -1746,10 +1765,10 @@ EXPORT_SYMBOL_GPL(cond_wakeup_cpu0); */ static inline void mwait_play_dead(void) { + struct mwait_cpu_dead *md = this_cpu_ptr(&mwait_cpu_dead); unsigned int eax, ebx, ecx, edx; unsigned int highest_cstate = 0; unsigned int highest_subcstate = 0; - void *mwait_ptr; int i; if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD || @@ -1784,12 +1803,9 @@ static inline void mwait_play_dead(void) (highest_subcstate - 1); } - /* - * This should be a memory location in a cache line which is - * unlikely to be touched by other processors. The actual - * content is immaterial as it is not actually modified in any way. - */ - mwait_ptr = ¤t_thread_info()->flags; + /* Set up state for the kexec() hack below */ + md->status = CPUDEAD_MWAIT_WAIT; + md->control = CPUDEAD_MWAIT_WAIT; wbinvd(); @@ -1802,16 +1818,63 @@ static inline void mwait_play_dead(void) * case where we return around the loop. */ mb(); - clflush(mwait_ptr); + clflush(md); mb(); - __monitor(mwait_ptr, 0, 0); + __monitor(md, 0, 0); mb(); __mwait(eax, 0); + if (READ_ONCE(md->control) == CPUDEAD_MWAIT_KEXEC_HLT) { + /* + * Kexec is about to happen. Don't go back into mwait() as + * the kexec kernel might overwrite text and data including + * page tables and stack. So mwait() would resume when the + * monitor cache line is written to and then the CPU goes + * south due to overwritten text, page tables and stack. + * + * Note: This does _NOT_ protect against a stray MCE, NMI, + * SMI. They will resume execution at the instruction + * following the HLT instruction and run into the problem + * which this is trying to prevent. + */ + WRITE_ONCE(md->status, CPUDEAD_MWAIT_KEXEC_HLT); + while(1) + native_halt(); + } + cond_wakeup_cpu0(); } } +/* + * Kick all "offline" CPUs out of mwait on kexec(). See comment in + * mwait_play_dead(). + */ +void smp_kick_mwait_play_dead(void) +{ + u32 newstate = CPUDEAD_MWAIT_KEXEC_HLT; + struct mwait_cpu_dead *md; + unsigned int cpu, i; + + for_each_cpu_andnot(cpu, cpu_present_mask, cpu_online_mask) { + md = per_cpu_ptr(&mwait_cpu_dead, cpu); + + /* Does it sit in mwait_play_dead() ? */ + if (READ_ONCE(md->status) != CPUDEAD_MWAIT_WAIT) + continue; + + /* Wait up to 5ms */ + for (i = 0; READ_ONCE(md->status) != newstate && i < 1000; i++) { + /* Bring it out of mwait */ + WRITE_ONCE(md->control, newstate); + udelay(5); + } + + if (READ_ONCE(md->status) != newstate) + pr_err_once("CPU%u is stuck in mwait_play_dead()\n", cpu); + } +} + void hlt_play_dead(void) { if (__this_cpu_read(cpu_info.x86) >= 4) diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 6551d6249f8a..97599581ec6b 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -901,12 +901,6 @@ __bad_area(struct pt_regs *regs, unsigned long error_code, __bad_area_nosemaphore(regs, error_code, address, pkey, si_code); } -static noinline void -bad_area(struct pt_regs *regs, unsigned long error_code, unsigned long address) -{ - __bad_area(regs, error_code, address, 0, SEGV_MAPERR); -} - static inline bool bad_area_access_from_pkeys(unsigned long error_code, struct vm_area_struct *vma) { @@ -1355,7 +1349,6 @@ void do_user_addr_fault(struct pt_regs *regs, } #endif -#ifdef CONFIG_PER_VMA_LOCK if (!(flags & FAULT_FLAG_USER)) goto lock_mmap; @@ -1368,7 +1361,8 @@ void do_user_addr_fault(struct pt_regs *regs, goto lock_mmap; } fault = handle_mm_fault(vma, address, flags | FAULT_FLAG_VMA_LOCK, regs); - vma_end_read(vma); + if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) + vma_end_read(vma); if (!(fault & VM_FAULT_RETRY)) { count_vm_vma_lock_event(VMA_LOCK_SUCCESS); @@ -1385,53 +1379,11 @@ void do_user_addr_fault(struct pt_regs *regs, return; } lock_mmap: -#endif /* CONFIG_PER_VMA_LOCK */ - /* - * Kernel-mode access to the user address space should only occur - * on well-defined single instructions listed in the exception - * tables. But, an erroneous kernel fault occurring outside one of - * those areas which also holds mmap_lock might deadlock attempting - * to validate the fault against the address space. - * - * Only do the expensive exception table search when we might be at - * risk of a deadlock. This happens if we - * 1. Failed to acquire mmap_lock, and - * 2. The access did not originate in userspace. - */ - if (unlikely(!mmap_read_trylock(mm))) { - if (!user_mode(regs) && !search_exception_tables(regs->ip)) { - /* - * Fault from code in kernel from - * which we do not expect faults. - */ - bad_area_nosemaphore(regs, error_code, address); - return; - } retry: - mmap_read_lock(mm); - } else { - /* - * The above down_read_trylock() might have succeeded in - * which case we'll have missed the might_sleep() from - * down_read(): - */ - might_sleep(); - } - - vma = find_vma(mm, address); + vma = lock_mm_and_find_vma(mm, address, regs); if (unlikely(!vma)) { - bad_area(regs, error_code, address); - return; - } - if (likely(vma->vm_start <= address)) - goto good_area; - if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) { - bad_area(regs, error_code, address); - return; - } - if (unlikely(expand_stack(vma, address))) { - bad_area(regs, error_code, address); + bad_area_nosemaphore(regs, error_code, address); return; } @@ -1439,7 +1391,6 @@ void do_user_addr_fault(struct pt_regs *regs, * Ok, we have a good vm_area for this memory access, so * we can handle it.. */ -good_area: if (unlikely(access_error(error_code, vma))) { bad_area_access_error(regs, error_code, address, vma); return; @@ -1487,9 +1438,7 @@ void do_user_addr_fault(struct pt_regs *regs, } mmap_read_unlock(mm); -#ifdef CONFIG_PER_VMA_LOCK done: -#endif if (likely(!(fault & VM_FAULT_ERROR))) return; diff --git a/arch/xtensa/Kconfig b/arch/xtensa/Kconfig index bcb0c5d2abc2..6d3c9257aa13 100644 --- a/arch/xtensa/Kconfig +++ b/arch/xtensa/Kconfig @@ -49,6 +49,7 @@ config XTENSA select HAVE_SYSCALL_TRACEPOINTS select HAVE_VIRT_CPU_ACCOUNTING_GEN select IRQ_DOMAIN + select LOCK_MM_AND_FIND_VMA select MODULES_USE_ELF_RELA select PERF_USE_VMALLOC select TRACE_IRQFLAGS_SUPPORT diff --git a/arch/xtensa/mm/fault.c b/arch/xtensa/mm/fault.c index 8c781b05c0bd..d89b193c779f 100644 --- a/arch/xtensa/mm/fault.c +++ b/arch/xtensa/mm/fault.c @@ -130,23 +130,14 @@ void do_page_fault(struct pt_regs *regs) perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); retry: - mmap_read_lock(mm); - vma = find_vma(mm, address); - + vma = lock_mm_and_find_vma(mm, address, regs); if (!vma) - goto bad_area; - if (vma->vm_start <= address) - goto good_area; - if (!(vma->vm_flags & VM_GROWSDOWN)) - goto bad_area; - if (expand_stack(vma, address)) - goto bad_area; + goto bad_area_nosemaphore; /* Ok, we have a good vm_area for this memory access, so * we can handle it.. */ -good_area: code = SEGV_ACCERR; if (is_write) { @@ -205,6 +196,7 @@ void do_page_fault(struct pt_regs *regs) */ bad_area: mmap_read_unlock(mm); +bad_area_nosemaphore: if (user_mode(regs)) { current->thread.bad_vaddr = address; current->thread.error_code = is_write; diff --git a/block/blk-crypto-profile.c b/block/blk-crypto-profile.c index fe550725c777..7cdef1bee6f7 100644 --- a/block/blk-crypto-profile.c +++ b/block/blk-crypto-profile.c @@ -79,7 +79,18 @@ int blk_crypto_profile_init(struct blk_crypto_profile *profile, unsigned int slot_hashtable_size; memset(profile, 0, sizeof(*profile)); + + /* + * profile->lock of an underlying device can nest inside profile->lock + * of a device-mapper device, so use a dynamic lock class to avoid + * false-positive lockdep reports. + */ +#ifdef CONFIG_LOCKDEP + lockdep_register_key(&profile->lockdep_key); + __init_rwsem(&profile->lock, "&profile->lock", &profile->lockdep_key); +#else init_rwsem(&profile->lock); +#endif if (num_slots == 0) return 0; @@ -89,7 +100,7 @@ int blk_crypto_profile_init(struct blk_crypto_profile *profile, profile->slots = kvcalloc(num_slots, sizeof(profile->slots[0]), GFP_KERNEL); if (!profile->slots) - return -ENOMEM; + goto err_destroy; profile->num_slots = num_slots; @@ -443,6 +454,9 @@ void blk_crypto_profile_destroy(struct blk_crypto_profile *profile) { if (!profile) return; +#ifdef CONFIG_LOCKDEP + lockdep_unregister_key(&profile->lockdep_key); +#endif kvfree(profile->slot_hashtable); kvfree_sensitive(profile->slots, sizeof(profile->slots[0]) * profile->num_slots); diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 0a30c8cbe7bd..229f0e712f93 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -88,6 +88,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_send_sig_info); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_task_blocks_on_rtmutex); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_waiter_prio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_wait_start); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rtmutex_wait_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_opt_spin_start); @@ -313,3 +315,8 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue_smallest_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_one_page_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_regmap_update); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_genl_check); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_folio_look_around_ref); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_look_around_migrate_folio); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_test_clear_look_around_ref); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_scan_type); diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c index e906ee375298..f1d5b7c38abb 100644 --- a/drivers/hid/hid-logitech-hidpp.c +++ b/drivers/hid/hid-logitech-hidpp.c @@ -4299,7 +4299,7 @@ static const struct hid_device_id hidpp_devices[] = { { /* wireless touchpad T651 */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_T651), - .driver_data = HIDPP_QUIRK_CLASS_WTP }, + .driver_data = HIDPP_QUIRK_CLASS_WTP | HIDPP_QUIRK_DELAYED_INIT }, { /* Mouse Logitech Anywhere MX */ LDJ_DEVICE(0x1017), .driver_data = HIDPP_QUIRK_HI_RES_SCROLL_1P0 }, { /* Mouse logitech M560 */ diff --git a/drivers/hid/hidraw.c b/drivers/hid/hidraw.c index 197b1e7bf029..b617aada50b0 100644 --- a/drivers/hid/hidraw.c +++ b/drivers/hid/hidraw.c @@ -272,7 +272,12 @@ static int hidraw_open(struct inode *inode, struct file *file) goto out; } - down_read(&minors_rwsem); + /* + * Technically not writing to the hidraw_table but a write lock is + * required to protect the device refcount. This is symmetrical to + * hidraw_release(). + */ + down_write(&minors_rwsem); if (!hidraw_table[minor] || !hidraw_table[minor]->exist) { err = -ENODEV; goto out_unlock; @@ -301,7 +306,7 @@ static int hidraw_open(struct inode *inode, struct file *file) spin_unlock_irqrestore(&hidraw_table[minor]->list_lock, flags); file->private_data = list; out_unlock: - up_read(&minors_rwsem); + up_write(&minors_rwsem); out: if (err < 0) kfree(list); diff --git a/drivers/iommu/amd/iommu_v2.c b/drivers/iommu/amd/iommu_v2.c index 9f7fab49a5a9..75355ddca657 100644 --- a/drivers/iommu/amd/iommu_v2.c +++ b/drivers/iommu/amd/iommu_v2.c @@ -485,8 +485,8 @@ static void do_fault(struct work_struct *work) flags |= FAULT_FLAG_REMOTE; mmap_read_lock(mm); - vma = find_extend_vma(mm, address); - if (!vma || address < vma->vm_start) + vma = vma_lookup(mm, address); + if (!vma) /* failed to get a vma in the right range */ goto out; diff --git a/drivers/iommu/iommu-sva.c b/drivers/iommu/iommu-sva.c index 24bf9b2b58aa..ed5f11eb92e5 100644 --- a/drivers/iommu/iommu-sva.c +++ b/drivers/iommu/iommu-sva.c @@ -203,7 +203,7 @@ iommu_sva_handle_iopf(struct iommu_fault *fault, void *data) mmap_read_lock(mm); - vma = find_extend_vma(mm, prm->addr); + vma = vma_lookup(mm, prm->addr); if (!vma) /* Unmapped area */ goto out_put_mm; diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c index c41a7e5c2b92..fce0e2094078 100644 --- a/drivers/media/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb-core/dvb_frontend.c @@ -293,14 +293,22 @@ static int dvb_frontend_get_event(struct dvb_frontend *fe, } if (events->eventw == events->eventr) { - int ret; + struct wait_queue_entry wait; + int ret = 0; if (flags & O_NONBLOCK) return -EWOULDBLOCK; - ret = wait_event_interruptible(events->wait_queue, - dvb_frontend_test_event(fepriv, events)); - + init_waitqueue_entry(&wait, current); + add_wait_queue(&events->wait_queue, &wait); + while (!dvb_frontend_test_event(fepriv, events)) { + wait_woken(&wait, TASK_INTERRUPTIBLE, 0); + if (signal_pending(current)) { + ret = -ERESTARTSYS; + break; + } + } + remove_wait_queue(&events->wait_queue, &wait); if (ret < 0) return ret; } diff --git a/drivers/media/v4l2-core/v4l2-common.c b/drivers/media/v4l2-core/v4l2-common.c index 40f56e044640..3c5ab5ecd678 100644 --- a/drivers/media/v4l2-core/v4l2-common.c +++ b/drivers/media/v4l2-core/v4l2-common.c @@ -252,12 +252,16 @@ const struct v4l2_format_info *v4l2_format_info(u32 format) { .format = V4L2_PIX_FMT_RGB565, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, { .format = V4L2_PIX_FMT_RGB555, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, { .format = V4L2_PIX_FMT_BGR666, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, + { .format = V4L2_PIX_FMT_BGR48_12, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 6, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, + { .format = V4L2_PIX_FMT_ABGR64_12, .pixel_enc = V4L2_PIXEL_ENC_RGB, .mem_planes = 1, .comp_planes = 1, .bpp = { 8, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, /* YUV packed formats */ { .format = V4L2_PIX_FMT_YUYV, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 }, { .format = V4L2_PIX_FMT_YVYU, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 }, { .format = V4L2_PIX_FMT_UYVY, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 }, { .format = V4L2_PIX_FMT_VYUY, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 2, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 }, + { .format = V4L2_PIX_FMT_Y212, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 4, 0, 0, 0 }, .hdiv = 2, .vdiv = 1 }, + { .format = V4L2_PIX_FMT_YUV48_12, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 1, .bpp = { 6, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, /* YUV planar formats */ { .format = V4L2_PIX_FMT_NV12, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 }, @@ -267,6 +271,7 @@ const struct v4l2_format_info *v4l2_format_info(u32 format) { .format = V4L2_PIX_FMT_NV24, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 }, { .format = V4L2_PIX_FMT_NV42, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 1, .vdiv = 1 }, { .format = V4L2_PIX_FMT_P010, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 2, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 }, + { .format = V4L2_PIX_FMT_P012, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 2, .bpp = { 2, 4, 0, 0 }, .hdiv = 2, .vdiv = 2 }, { .format = V4L2_PIX_FMT_YUV410, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 }, { .format = V4L2_PIX_FMT_YVU410, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 1, .comp_planes = 3, .bpp = { 1, 1, 1, 0 }, .hdiv = 4, .vdiv = 4 }, @@ -292,6 +297,7 @@ const struct v4l2_format_info *v4l2_format_info(u32 format) { .format = V4L2_PIX_FMT_NV21M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 2 }, { .format = V4L2_PIX_FMT_NV16M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 }, { .format = V4L2_PIX_FMT_NV61M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 1, 2, 0, 0 }, .hdiv = 2, .vdiv = 1 }, + { .format = V4L2_PIX_FMT_P012M, .pixel_enc = V4L2_PIXEL_ENC_YUV, .mem_planes = 2, .comp_planes = 2, .bpp = { 2, 4, 0, 0 }, .hdiv = 2, .vdiv = 2 }, /* Bayer RGB formats */ { .format = V4L2_PIX_FMT_SBGGR8, .pixel_enc = V4L2_PIXEL_ENC_BAYER, .mem_planes = 1, .comp_planes = 1, .bpp = { 1, 0, 0, 0 }, .hdiv = 1, .vdiv = 1 }, diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c index 91ae25e092e2..3a4785b3b59a 100644 --- a/drivers/media/v4l2-core/v4l2-ioctl.c +++ b/drivers/media/v4l2-core/v4l2-ioctl.c @@ -1304,11 +1304,14 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_BGRX32: descr = "32-bit XBGR 8-8-8-8"; break; case V4L2_PIX_FMT_RGBA32: descr = "32-bit RGBA 8-8-8-8"; break; case V4L2_PIX_FMT_RGBX32: descr = "32-bit RGBX 8-8-8-8"; break; + case V4L2_PIX_FMT_BGR48_12: descr = "12-bit Depth BGR"; break; + case V4L2_PIX_FMT_ABGR64_12: descr = "12-bit Depth BGRA"; break; case V4L2_PIX_FMT_GREY: descr = "8-bit Greyscale"; break; case V4L2_PIX_FMT_Y4: descr = "4-bit Greyscale"; break; case V4L2_PIX_FMT_Y6: descr = "6-bit Greyscale"; break; case V4L2_PIX_FMT_Y10: descr = "10-bit Greyscale"; break; case V4L2_PIX_FMT_Y12: descr = "12-bit Greyscale"; break; + case V4L2_PIX_FMT_Y012: descr = "12-bit Greyscale (bits 15-4)"; break; case V4L2_PIX_FMT_Y14: descr = "14-bit Greyscale"; break; case V4L2_PIX_FMT_Y16: descr = "16-bit Greyscale"; break; case V4L2_PIX_FMT_Y16_BE: descr = "16-bit Greyscale BE"; break; @@ -1347,6 +1350,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_YUV420: descr = "Planar YUV 4:2:0"; break; case V4L2_PIX_FMT_HI240: descr = "8-bit Dithered RGB (BTTV)"; break; case V4L2_PIX_FMT_M420: descr = "YUV 4:2:0 (M420)"; break; + case V4L2_PIX_FMT_YUV48_12: descr = "12-bit YUV 4:4:4 Packed"; break; case V4L2_PIX_FMT_NV12: descr = "Y/UV 4:2:0"; break; case V4L2_PIX_FMT_NV21: descr = "Y/VU 4:2:0"; break; case V4L2_PIX_FMT_NV16: descr = "Y/UV 4:2:2"; break; @@ -1354,6 +1358,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_NV24: descr = "Y/UV 4:4:4"; break; case V4L2_PIX_FMT_NV42: descr = "Y/VU 4:4:4"; break; case V4L2_PIX_FMT_P010: descr = "10-bit Y/UV 4:2:0"; break; + case V4L2_PIX_FMT_P012: descr = "12-bit Y/UV 4:2:0"; break; case V4L2_PIX_FMT_NV12_4L4: descr = "Y/UV 4:2:0 (4x4 Linear)"; break; case V4L2_PIX_FMT_NV12_16L16: descr = "Y/UV 4:2:0 (16x16 Linear)"; break; case V4L2_PIX_FMT_NV12_32L32: descr = "Y/UV 4:2:0 (32x32 Linear)"; break; @@ -1364,6 +1369,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_NV61M: descr = "Y/VU 4:2:2 (N-C)"; break; case V4L2_PIX_FMT_NV12MT: descr = "Y/UV 4:2:0 (64x32 MB, N-C)"; break; case V4L2_PIX_FMT_NV12MT_16X16: descr = "Y/UV 4:2:0 (16x16 MB, N-C)"; break; + case V4L2_PIX_FMT_P012M: descr = "12-bit Y/UV 4:2:0 (N-C)"; break; case V4L2_PIX_FMT_YUV420M: descr = "Planar YUV 4:2:0 (N-C)"; break; case V4L2_PIX_FMT_YVU420M: descr = "Planar YVU 4:2:0 (N-C)"; break; case V4L2_PIX_FMT_YUV422M: descr = "Planar YUV 4:2:2 (N-C)"; break; @@ -1448,6 +1454,9 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt) case V4L2_PIX_FMT_NV12M_8L128: descr = "NV12M (8x128 Linear)"; break; case V4L2_PIX_FMT_NV12_10BE_8L128: descr = "10-bit NV12 (8x128 Linear, BE)"; break; case V4L2_PIX_FMT_NV12M_10BE_8L128: descr = "10-bit NV12M (8x128 Linear, BE)"; break; + case V4L2_PIX_FMT_Y210: descr = "10-bit YUYV Packed"; break; + case V4L2_PIX_FMT_Y212: descr = "12-bit YUYV Packed"; break; + case V4L2_PIX_FMT_Y216: descr = "16-bit YUYV Packed"; break; default: /* Compressed formats */ diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c index 36a34b1461cf..842597bbeb89 100644 --- a/drivers/misc/uid_sys_stats.c +++ b/drivers/misc/uid_sys_stats.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -629,7 +630,6 @@ static const struct proc_ops uid_procstat_fops = { }; struct update_stats_work { - struct work_struct work; uid_t uid; #ifdef CONFIG_UID_SYS_STATS_DEBUG struct task_struct *task; @@ -637,38 +637,46 @@ struct update_stats_work { struct task_io_accounting ioac; u64 utime; u64 stime; + struct llist_node node; }; +static LLIST_HEAD(work_usw); + static void update_stats_workfn(struct work_struct *work) { - struct update_stats_work *usw = - container_of(work, struct update_stats_work, work); + struct update_stats_work *usw, *t; struct uid_entry *uid_entry; struct task_entry *task_entry __maybe_unused; + struct llist_node *node; rt_mutex_lock(&uid_lock); - uid_entry = find_uid_entry(usw->uid); - if (!uid_entry) - goto exit; - uid_entry->utime += usw->utime; - uid_entry->stime += usw->stime; + node = llist_del_all(&work_usw); + llist_for_each_entry_safe(usw, t, node, node) { + uid_entry = find_uid_entry(usw->uid); + if (!uid_entry) + goto next; + + uid_entry->utime += usw->utime; + uid_entry->stime += usw->stime; #ifdef CONFIG_UID_SYS_STATS_DEBUG - task_entry = find_task_entry(uid_entry, usw->task); - if (!task_entry) - goto exit; - add_uid_tasks_io_stats(task_entry, &usw->ioac, - UID_STATE_DEAD_TASKS); + task_entry = find_task_entry(uid_entry, usw->task); + if (!task_entry) + goto next; + add_uid_tasks_io_stats(task_entry, &usw->ioac, + UID_STATE_DEAD_TASKS); #endif - __add_uid_io_stats(uid_entry, &usw->ioac, UID_STATE_DEAD_TASKS); -exit: + __add_uid_io_stats(uid_entry, &usw->ioac, UID_STATE_DEAD_TASKS); +next: +#ifdef CONFIG_UID_SYS_STATS_DEBUG + put_task_struct(usw->task); +#endif + kfree(usw); + } rt_mutex_unlock(&uid_lock); -#ifdef CONFIG_UID_SYS_STATS_DEBUG - put_task_struct(usw->task); -#endif - kfree(usw); } +static DECLARE_WORK(update_stats_work, update_stats_workfn); static int process_notifier(struct notifier_block *self, unsigned long cmd, void *v) @@ -687,7 +695,6 @@ static int process_notifier(struct notifier_block *self, usw = kmalloc(sizeof(struct update_stats_work), GFP_KERNEL); if (usw) { - INIT_WORK(&usw->work, update_stats_workfn); usw->uid = uid; #ifdef CONFIG_UID_SYS_STATS_DEBUG usw->task = get_task_struct(task); @@ -698,7 +705,8 @@ static int process_notifier(struct notifier_block *self, */ usw->ioac = task->ioac; task_cputime_adjusted(task, &usw->utime, &usw->stime); - schedule_work(&usw->work); + llist_add(&usw->node, &work_usw); + schedule_work(&update_stats_work); } return NOTIFY_OK; } diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c index b6e0cc4571ea..59a559366b61 100644 --- a/drivers/tty/n_gsm.c +++ b/drivers/tty/n_gsm.c @@ -2508,8 +2508,10 @@ static void gsm_cleanup_mux(struct gsm_mux *gsm, bool disc) gsm->has_devices = false; } for (i = NUM_DLCI - 1; i >= 0; i--) - if (gsm->dlci[i]) + if (gsm->dlci[i]) { gsm_dlci_release(gsm->dlci[i]); + gsm->dlci[i] = NULL; + } mutex_unlock(&gsm->mutex); /* Now wipe the queues */ tty_ldisc_flush(gsm->tty); diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c index 42909318609c..3829e1be0383 100644 --- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c @@ -188,11 +188,10 @@ EXPORT_SYMBOL_GPL(xhci_plat_register_vendor_ops); static int xhci_vendor_init(struct xhci_hcd *xhci) { - struct xhci_vendor_ops *ops = xhci_vendor_get_ops(xhci); - struct xhci_plat_priv *priv = xhci_to_priv(xhci); + struct xhci_vendor_ops *ops = NULL; if (xhci_plat_vendor_overwrite.vendor_ops) - ops = priv->vendor_ops = xhci_plat_vendor_overwrite.vendor_ops; + ops = xhci->vendor_ops = xhci_plat_vendor_overwrite.vendor_ops; if (ops && ops->vendor_init) return ops->vendor_init(xhci); @@ -202,12 +201,11 @@ static int xhci_vendor_init(struct xhci_hcd *xhci) static void xhci_vendor_cleanup(struct xhci_hcd *xhci) { struct xhci_vendor_ops *ops = xhci_vendor_get_ops(xhci); - struct xhci_plat_priv *priv = xhci_to_priv(xhci); if (ops && ops->vendor_cleanup) ops->vendor_cleanup(xhci); - priv->vendor_ops = NULL; + xhci->vendor_ops = NULL; } static int xhci_plat_probe(struct platform_device *pdev) diff --git a/drivers/usb/host/xhci-plat.h b/drivers/usb/host/xhci-plat.h index 5b096f72636f..e726a572321d 100644 --- a/drivers/usb/host/xhci-plat.h +++ b/drivers/usb/host/xhci-plat.h @@ -13,7 +13,6 @@ struct xhci_plat_priv { const char *firmware_name; unsigned long long quirks; - struct xhci_vendor_ops *vendor_ops; struct xhci_vendor_data *vendor_data; int (*plat_setup)(struct usb_hcd *); void (*plat_start)(struct usb_hcd *); diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index 9304e0d42982..be041bd65b19 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -25,7 +25,6 @@ #include "xhci-trace.h" #include "xhci-debugfs.h" #include "xhci-dbgcap.h" -#include "xhci-plat.h" #define DRIVER_AUTHOR "Sarah Sharp" #define DRIVER_DESC "'eXtensible' Host Controller (xHC) Driver" @@ -4517,7 +4516,7 @@ static int __maybe_unused xhci_change_max_exit_latency(struct xhci_hcd *xhci, struct xhci_vendor_ops *xhci_vendor_get_ops(struct xhci_hcd *xhci) { - return xhci_to_priv(xhci)->vendor_ops; + return xhci->vendor_ops; } EXPORT_SYMBOL_GPL(xhci_vendor_get_ops); diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index 5d1c57bfd0af..dd634668f5d4 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1941,7 +1941,9 @@ struct xhci_hcd { void *dbc; - ANDROID_KABI_RESERVE(1); + /* Used for bug 194461020 */ + ANDROID_KABI_USE(1, struct xhci_vendor_ops *vendor_ops); + ANDROID_KABI_RESERVE(2); ANDROID_KABI_RESERVE(3); ANDROID_KABI_RESERVE(4); diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c index 086b50968983..47a2c73df342 100644 --- a/drivers/usb/typec/ucsi/ucsi.c +++ b/drivers/usb/typec/ucsi/ucsi.c @@ -132,10 +132,8 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd) if (ret) return ret; - if (cci & UCSI_CCI_BUSY) { - ucsi->ops->async_write(ucsi, UCSI_CANCEL, NULL, 0); - return -EBUSY; - } + if (cmd != UCSI_CANCEL && cci & UCSI_CCI_BUSY) + return ucsi_exec_command(ucsi, UCSI_CANCEL); if (!(cci & UCSI_CCI_COMMAND_COMPLETE)) return -EIO; @@ -149,6 +147,11 @@ static int ucsi_exec_command(struct ucsi *ucsi, u64 cmd) return ucsi_read_error(ucsi); } + if (cmd == UCSI_CANCEL && cci & UCSI_CCI_CANCEL_COMPLETE) { + ret = ucsi_acknowledge_command(ucsi); + return ret ? ret : -EBUSY; + } + return UCSI_CCI_LENGTH(cci); } diff --git a/drivers/video/fbdev/core/sysimgblt.c b/drivers/video/fbdev/core/sysimgblt.c index 335e92b813fc..665ef7a0a249 100644 --- a/drivers/video/fbdev/core/sysimgblt.c +++ b/drivers/video/fbdev/core/sysimgblt.c @@ -189,7 +189,7 @@ static void fast_imageblit(const struct fb_image *image, struct fb_info *p, u32 fgx = fgcolor, bgx = bgcolor, bpp = p->var.bits_per_pixel; u32 ppw = 32/bpp, spitch = (image->width + 7)/8; u32 bit_mask, eorx, shift; - const char *s = image->data, *src; + const u8 *s = image->data, *src; u32 *dst; const u32 *tab; size_t tablen; diff --git a/files_gki_aarch64.txt b/files_gki_aarch64.txt index d50ff64e3290..737bcba2a9b5 100644 --- a/files_gki_aarch64.txt +++ b/files_gki_aarch64.txt @@ -4136,6 +4136,7 @@ include/trace/events/cma.h include/trace/events/compaction.h include/trace/events/cpuhp.h include/trace/events/devfreq.h +include/trace/events/devlink.h include/trace/events/dma_fence.h include/trace/events/erofs.h include/trace/events/error_report.h @@ -5665,6 +5666,7 @@ net/core/dev.c net/core/dev.h net/core/dev_addr_lists.c net/core/dev_ioctl.c +net/core/devlink.c net/core/dst.c net/core/dst_cache.c net/core/fib_notifier.c diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 444302afc673..e6c9c0e08448 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -315,10 +315,10 @@ create_elf_tables(struct linux_binprm *bprm, const struct elfhdr *exec, * Grow the stack manually; some architectures have a limit on how * far ahead a user-space access may be in order to grow the stack. */ - if (mmap_read_lock_killable(mm)) + if (mmap_write_lock_killable(mm)) return -EINTR; - vma = find_extend_vma(mm, bprm->p); - mmap_read_unlock(mm); + vma = find_extend_vma_locked(mm, bprm->p); + mmap_write_unlock(mm); if (!vma) return -EFAULT; diff --git a/fs/drop_caches.c b/fs/drop_caches.c index e619c31b6bd9..b9575957a7c2 100644 --- a/fs/drop_caches.c +++ b/fs/drop_caches.c @@ -10,6 +10,7 @@ #include #include #include +#include #include "internal.h" /* A global variable is a bit ugly, but it keeps the code simple */ @@ -59,6 +60,7 @@ int drop_caches_sysctl_handler(struct ctl_table *table, int write, static int stfu; if (sysctl_drop_caches & 1) { + lru_add_drain_all(); iterate_supers(drop_pagecache_sb, NULL); count_vm_event(DROP_PAGECACHE); } diff --git a/fs/erofs/internal.h b/fs/erofs/internal.h index e51f27b6bde1..340bd56a5755 100644 --- a/fs/erofs/internal.h +++ b/fs/erofs/internal.h @@ -154,6 +154,7 @@ struct erofs_sb_info { /* what we really care is nid, rather than ino.. */ erofs_nid_t root_nid; + erofs_nid_t packed_nid; /* used for statfs, f_files - f_favail */ u64 inos; @@ -310,7 +311,7 @@ struct erofs_inode { unsigned char datalayout; unsigned char inode_isize; - unsigned short xattr_isize; + unsigned int xattr_isize; unsigned int xattr_shared_count; unsigned int *xattr_shared_xattrs; diff --git a/fs/erofs/super.c b/fs/erofs/super.c index 626a615dafc2..bd8bf8fc2f5d 100644 --- a/fs/erofs/super.c +++ b/fs/erofs/super.c @@ -381,17 +381,7 @@ static int erofs_read_superblock(struct super_block *sb) #endif sbi->islotbits = ilog2(sizeof(struct erofs_inode_compact)); sbi->root_nid = le16_to_cpu(dsb->root_nid); -#ifdef CONFIG_EROFS_FS_ZIP - sbi->packed_inode = NULL; - if (erofs_sb_has_fragments(sbi) && dsb->packed_nid) { - sbi->packed_inode = - erofs_iget(sb, le64_to_cpu(dsb->packed_nid)); - if (IS_ERR(sbi->packed_inode)) { - ret = PTR_ERR(sbi->packed_inode); - goto out; - } - } -#endif + sbi->packed_nid = le64_to_cpu(dsb->packed_nid); sbi->inos = le64_to_cpu(dsb->inos); sbi->build_time = le64_to_cpu(dsb->build_time); @@ -800,6 +790,16 @@ static int erofs_fc_fill_super(struct super_block *sb, struct fs_context *fc) erofs_shrinker_register(sb); /* sb->s_umount is already locked, SB_ACTIVE and SB_BORN are not set */ +#ifdef CONFIG_EROFS_FS_ZIP + if (erofs_sb_has_fragments(sbi) && sbi->packed_nid) { + sbi->packed_inode = erofs_iget(sb, sbi->packed_nid); + if (IS_ERR(sbi->packed_inode)) { + err = PTR_ERR(sbi->packed_inode); + sbi->packed_inode = NULL; + return err; + } + } +#endif err = erofs_init_managed_cache(sb); if (err) return err; diff --git a/fs/erofs/zdata.c b/fs/erofs/zdata.c index bc4971ee26d2..a08299d80ca1 100644 --- a/fs/erofs/zdata.c +++ b/fs/erofs/zdata.c @@ -355,20 +355,6 @@ int __init z_erofs_init_zip_subsystem(void) enum z_erofs_pclustermode { Z_EROFS_PCLUSTER_INFLIGHT, - /* - * The current pclusters was the tail of an exist chain, in addition - * that the previous processed chained pclusters are all decided to - * be hooked up to it. - * A new chain will be created for the remaining pclusters which are - * not processed yet, so different from Z_EROFS_PCLUSTER_FOLLOWED, - * the next pcluster cannot reuse the whole page safely for inplace I/O - * in the following scenario: - * ________________________________________________________________ - * | tail (partial) page | head (partial) page | - * | (belongs to the next pcl) | (belongs to the current pcl) | - * |_______PCLUSTER_FOLLOWED______|________PCLUSTER_HOOKED__________| - */ - Z_EROFS_PCLUSTER_HOOKED, /* * a weak form of Z_EROFS_PCLUSTER_FOLLOWED, the difference is that it * could be dispatched into bypass queue later due to uptodated managed @@ -386,8 +372,8 @@ enum z_erofs_pclustermode { * ________________________________________________________________ * | tail (partial) page | head (partial) page | * | (of the current cl) | (of the previous collection) | - * | PCLUSTER_FOLLOWED or | | - * |_____PCLUSTER_HOOKED__|___________PCLUSTER_FOLLOWED____________| + * | | | + * |__PCLUSTER_FOLLOWED___|___________PCLUSTER_FOLLOWED____________| * * [ (*) the above page can be used as inplace I/O. ] */ @@ -400,7 +386,7 @@ struct z_erofs_decompress_frontend { struct z_erofs_bvec_iter biter; struct page *candidate_bvpage; - struct z_erofs_pcluster *pcl, *tailpcl; + struct z_erofs_pcluster *pcl; z_erofs_next_pcluster_t owned_head; enum z_erofs_pclustermode mode; @@ -589,19 +575,7 @@ static void z_erofs_try_to_claim_pcluster(struct z_erofs_decompress_frontend *f) return; } - /* - * type 2, link to the end of an existing open chain, be careful - * that its submission is controlled by the original attached chain. - */ - if (*owned_head != &pcl->next && pcl != f->tailpcl && - cmpxchg(&pcl->next, Z_EROFS_PCLUSTER_TAIL, - *owned_head) == Z_EROFS_PCLUSTER_TAIL) { - *owned_head = Z_EROFS_PCLUSTER_TAIL; - f->mode = Z_EROFS_PCLUSTER_HOOKED; - f->tailpcl = NULL; - return; - } - /* type 3, it belongs to a chain, but it isn't the end of the chain */ + /* type 2, it belongs to an ongoing chain */ f->mode = Z_EROFS_PCLUSTER_INFLIGHT; } @@ -662,9 +636,6 @@ static int z_erofs_register_pcluster(struct z_erofs_decompress_frontend *fe) goto err_out; } } - /* used to check tail merging loop due to corrupted images */ - if (fe->owned_head == Z_EROFS_PCLUSTER_TAIL) - fe->tailpcl = pcl; fe->owned_head = &pcl->next; fe->pcl = pcl; return 0; @@ -685,7 +656,6 @@ static int z_erofs_collector_begin(struct z_erofs_decompress_frontend *fe) /* must be Z_EROFS_PCLUSTER_TAIL or pointed to previous pcluster */ DBG_BUGON(fe->owned_head == Z_EROFS_PCLUSTER_NIL); - DBG_BUGON(fe->owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); if (!(map->m_flags & EROFS_MAP_META)) { grp = erofs_find_workgroup(fe->inode->i_sb, @@ -704,10 +674,6 @@ static int z_erofs_collector_begin(struct z_erofs_decompress_frontend *fe) if (ret == -EEXIST) { mutex_lock(&fe->pcl->lock); - /* used to check tail merging loop due to corrupted images */ - if (fe->owned_head == Z_EROFS_PCLUSTER_TAIL) - fe->tailpcl = fe->pcl; - z_erofs_try_to_claim_pcluster(fe); } else if (ret) { return ret; @@ -887,10 +853,9 @@ static int z_erofs_do_read_page(struct z_erofs_decompress_frontend *fe, * those chains are handled asynchronously thus the page cannot be used * for inplace I/O or bvpage (should be processed in a strict order.) */ - tight &= (fe->mode >= Z_EROFS_PCLUSTER_HOOKED && - fe->mode != Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE); + tight &= (fe->mode > Z_EROFS_PCLUSTER_FOLLOWED_NOINPLACE); - cur = end - min_t(unsigned int, offset + end - map->m_la, end); + cur = end - min_t(erofs_off_t, offset + end - map->m_la, end); if (!(map->m_flags & EROFS_MAP_MAPPED)) { zero_user_segment(page, cur, end); goto next_part; @@ -1013,9 +978,11 @@ static void z_erofs_do_decompressed_bvec(struct z_erofs_decompress_backend *be, struct z_erofs_bvec *bvec) { struct z_erofs_bvec_item *item; + unsigned int pgnr; - if (!((bvec->offset + be->pcl->pageofs_out) & ~PAGE_MASK)) { - unsigned int pgnr; + if (!((bvec->offset + be->pcl->pageofs_out) & ~PAGE_MASK) && + (bvec->end == PAGE_SIZE || + bvec->offset + bvec->end == be->pcl->length)) { pgnr = (bvec->offset + be->pcl->pageofs_out) >> PAGE_SHIFT; DBG_BUGON(pgnr >= be->nr_pages); @@ -1268,11 +1235,7 @@ static void z_erofs_decompress_queue(const struct z_erofs_decompressqueue *io, LIST_HEAD_INIT(be.decompressed_secondary_bvecs), }; z_erofs_next_pcluster_t owned = io->head; - - while (owned != Z_EROFS_PCLUSTER_TAIL_CLOSED) { - /* impossible that 'owned' equals Z_EROFS_WORK_TPTR_TAIL */ - DBG_BUGON(owned == Z_EROFS_PCLUSTER_TAIL); - /* impossible that 'owned' equals Z_EROFS_PCLUSTER_NIL */ + while (owned != Z_EROFS_PCLUSTER_TAIL) { DBG_BUGON(owned == Z_EROFS_PCLUSTER_NIL); be.pcl = container_of(owned, struct z_erofs_pcluster, next); @@ -1289,7 +1252,7 @@ static void z_erofs_decompressqueue_work(struct work_struct *work) container_of(work, struct z_erofs_decompressqueue, u.work); struct page *pagepool = NULL; - DBG_BUGON(bgq->head == Z_EROFS_PCLUSTER_TAIL_CLOSED); + DBG_BUGON(bgq->head == Z_EROFS_PCLUSTER_TAIL); z_erofs_decompress_queue(bgq, &pagepool); erofs_release_pages(&pagepool); kvfree(bgq); @@ -1317,7 +1280,7 @@ static void z_erofs_decompress_kickoff(struct z_erofs_decompressqueue *io, if (atomic_add_return(bios, &io->pending_bios)) return; /* Use (kthread_)work and sync decompression for atomic contexts only */ - if (in_atomic() || irqs_disabled()) { + if (!in_task() || irqs_disabled() || rcu_read_lock_any_held()) { #ifdef CONFIG_EROFS_FS_PCPU_KTHREAD struct kthread_worker *worker; @@ -1481,7 +1444,7 @@ jobqueue_init(struct super_block *sb, q->eio = false; } q->sb = sb; - q->head = Z_EROFS_PCLUSTER_TAIL_CLOSED; + q->head = Z_EROFS_PCLUSTER_TAIL; return q; } @@ -1513,11 +1476,7 @@ static void move_to_bypass_jobqueue(struct z_erofs_pcluster *pcl, z_erofs_next_pcluster_t *const submit_qtail = qtail[JQ_SUBMIT]; z_erofs_next_pcluster_t *const bypass_qtail = qtail[JQ_BYPASS]; - DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); - if (owned_head == Z_EROFS_PCLUSTER_TAIL) - owned_head = Z_EROFS_PCLUSTER_TAIL_CLOSED; - - WRITE_ONCE(pcl->next, Z_EROFS_PCLUSTER_TAIL_CLOSED); + WRITE_ONCE(pcl->next, Z_EROFS_PCLUSTER_TAIL); WRITE_ONCE(*submit_qtail, owned_head); WRITE_ONCE(*bypass_qtail, &pcl->next); @@ -1584,15 +1543,11 @@ static void z_erofs_submit_queue(struct z_erofs_decompress_frontend *f, unsigned int i = 0; bool bypass = true; - /* no possible 'owned_head' equals the following */ - DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_TAIL_CLOSED); DBG_BUGON(owned_head == Z_EROFS_PCLUSTER_NIL); pcl = container_of(owned_head, struct z_erofs_pcluster, next); + owned_head = READ_ONCE(pcl->next); - /* close the main owned chain at first */ - owned_head = cmpxchg(&pcl->next, Z_EROFS_PCLUSTER_TAIL, - Z_EROFS_PCLUSTER_TAIL_CLOSED); if (z_erofs_is_inline_pcluster(pcl)) { move_to_bypass_jobqueue(pcl, qtail, owned_head); continue; @@ -1736,7 +1691,7 @@ static void z_erofs_pcluster_readmore(struct z_erofs_decompress_frontend *f, } cur = map->m_la + map->m_llen - 1; - while (cur >= end) { + while ((cur >= end) && (cur < i_size_read(inode))) { pgoff_t index = cur >> PAGE_SHIFT; struct page *page; diff --git a/fs/erofs/zdata.h b/fs/erofs/zdata.h index 4588a47c867e..9fd6abe967a9 100644 --- a/fs/erofs/zdata.h +++ b/fs/erofs/zdata.h @@ -94,11 +94,8 @@ struct z_erofs_pcluster { /* let's avoid the valid 32-bit kernel addresses */ -/* the chained workgroup has't submitted io (still open) */ +/* the end of a chain of pclusters */ #define Z_EROFS_PCLUSTER_TAIL ((void *)0x5F0ECAFE) -/* the chained workgroup has already submitted io */ -#define Z_EROFS_PCLUSTER_TAIL_CLOSED ((void *)0x5F0EDEAD) - #define Z_EROFS_PCLUSTER_NIL (NULL) struct z_erofs_decompressqueue { diff --git a/fs/erofs/zmap.c b/fs/erofs/zmap.c index 39cc014dba40..3adab0d9cbe0 100644 --- a/fs/erofs/zmap.c +++ b/fs/erofs/zmap.c @@ -211,6 +211,10 @@ static int legacy_load_cluster_from_disk(struct z_erofs_maprecorder *m, if (advise & Z_EROFS_VLE_DI_PARTIAL_REF) m->partialref = true; m->clusterofs = le16_to_cpu(di->di_clusterofs); + if (m->clusterofs >= 1 << vi->z_logical_clusterbits) { + DBG_BUGON(1); + return -EFSCORRUPTED; + } m->pblk = le32_to_cpu(di->di_u.blkaddr); break; default: @@ -269,7 +273,7 @@ static int unpack_compacted_index(struct z_erofs_maprecorder *m, u8 *in, type; bool big_pcluster; - if (1 << amortizedshift == 4) + if (1 << amortizedshift == 4 && lclusterbits <= 14) vcnt = 2; else if (1 << amortizedshift == 2 && lclusterbits == 12) vcnt = 16; @@ -371,7 +375,6 @@ static int compacted_load_cluster_from_disk(struct z_erofs_maprecorder *m, { struct inode *const inode = m->inode; struct erofs_inode *const vi = EROFS_I(inode); - const unsigned int lclusterbits = vi->z_logical_clusterbits; const erofs_off_t ebase = ALIGN(iloc(EROFS_I_SB(inode), vi->nid) + vi->inode_isize + vi->xattr_isize, 8) + sizeof(struct z_erofs_map_header); @@ -380,9 +383,6 @@ static int compacted_load_cluster_from_disk(struct z_erofs_maprecorder *m, unsigned int amortizedshift; erofs_off_t pos; - if (lclusterbits != 12) - return -EOPNOTSUPP; - if (lcn >= totalidx) return -EINVAL; diff --git a/fs/exec.c b/fs/exec.c index 2d6bca1cda6e..ef93a4d5911b 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -198,33 +198,39 @@ static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos, int write) { struct page *page; + struct vm_area_struct *vma = bprm->vma; + struct mm_struct *mm = bprm->mm; int ret; - unsigned int gup_flags = FOLL_FORCE; -#ifdef CONFIG_STACK_GROWSUP - if (write) { - ret = expand_downwards(bprm->vma, pos); - if (ret < 0) + /* + * Avoid relying on expanding the stack down in GUP (which + * does not work for STACK_GROWSUP anyway), and just do it + * by hand ahead of time. + */ + if (write && pos < vma->vm_start) { + mmap_write_lock(mm); + ret = expand_downwards(vma, pos); + if (unlikely(ret < 0)) { + mmap_write_unlock(mm); return NULL; - } -#endif - - if (write) - gup_flags |= FOLL_WRITE; + } + mmap_write_downgrade(mm); + } else + mmap_read_lock(mm); /* * We are doing an exec(). 'current' is the process - * doing the exec and bprm->mm is the new process's mm. + * doing the exec and 'mm' is the new process's mm. */ - mmap_read_lock(bprm->mm); - ret = get_user_pages_remote(bprm->mm, pos, 1, gup_flags, + ret = get_user_pages_remote(mm, pos, 1, + write ? FOLL_WRITE : 0, &page, NULL, NULL); - mmap_read_unlock(bprm->mm); + mmap_read_unlock(mm); if (ret <= 0) return NULL; if (write) - acct_arg_size(bprm, vma_pages(bprm->vma)); + acct_arg_size(bprm, vma_pages(vma)); return page; } @@ -854,7 +860,7 @@ int setup_arg_pages(struct linux_binprm *bprm, stack_base = vma->vm_start - stack_expand; #endif current->mm->start_stack = bprm->p; - ret = expand_stack(vma, stack_base); + ret = expand_stack_locked(vma, stack_base); if (ret) ret = -EFAULT; diff --git a/fs/fuse/backing.c b/fs/fuse/backing.c index 931c3397133c..9df0535ad20f 100644 --- a/fs/fuse/backing.c +++ b/fs/fuse/backing.c @@ -208,6 +208,7 @@ int fuse_create_open_backing( struct file *file, unsigned int flags, umode_t mode) { struct fuse_inode *dir_fuse_inode = get_fuse_inode(dir); + struct fuse_dentry *fuse_entry = get_fuse_dentry(entry); struct fuse_dentry *dir_fuse_dentry = get_fuse_dentry(entry->d_parent); struct dentry *backing_dentry = NULL; struct inode *inode = NULL; @@ -239,29 +240,28 @@ int fuse_create_open_backing( if (err) goto out; - if (get_fuse_dentry(entry)->backing_path.dentry) - path_put(&get_fuse_dentry(entry)->backing_path); - get_fuse_dentry(entry)->backing_path = (struct path) { + if (fuse_entry->backing_path.dentry) + path_put(&fuse_entry->backing_path); + fuse_entry->backing_path = (struct path) { .mnt = dir_fuse_dentry->backing_path.mnt, .dentry = backing_dentry, }; - path_get(&get_fuse_dentry(entry)->backing_path); + path_get(&fuse_entry->backing_path); if (d_inode) target_nodeid = get_fuse_inode(d_inode)->nodeid; inode = fuse_iget_backing(dir->i_sb, target_nodeid, - get_fuse_dentry(entry)->backing_path.dentry->d_inode); - if (IS_ERR(inode)) { - err = PTR_ERR(inode); + fuse_entry->backing_path.dentry->d_inode); + if (!inode) { + err = -EIO; goto out; } if (get_fuse_inode(inode)->bpf) bpf_prog_put(get_fuse_inode(inode)->bpf); - get_fuse_inode(inode)->bpf = dir_fuse_inode->bpf; - if (get_fuse_inode(inode)->bpf) - bpf_prog_inc(dir_fuse_inode->bpf); + get_fuse_inode(inode)->bpf = fuse_entry->bpf; + fuse_entry->bpf = NULL; newent = d_splice_alias(inode, entry); if (IS_ERR(newent)) { @@ -269,10 +269,12 @@ int fuse_create_open_backing( goto out; } + inode = NULL; entry = newent ? newent : entry; err = finish_open(file, entry, fuse_open_file_backing); out: + iput(inode); dput(backing_dentry); return err; } @@ -966,6 +968,19 @@ void *fuse_file_write_iter_finalize(struct fuse_bpf_args *fa, return ERR_PTR(fwio->ret); } +long fuse_backing_ioctl(struct file *file, unsigned int command, unsigned long arg, int flags) +{ + struct fuse_file *ff = file->private_data; + long ret; + + if (flags & FUSE_IOCTL_COMPAT) + ret = -ENOTTY; + else + ret = vfs_ioctl(ff->backing_file, command, arg); + + return ret; +} + int fuse_file_flock_backing(struct file *file, int cmd, struct file_lock *fl) { struct fuse_file *ff = file->private_data; @@ -1225,61 +1240,62 @@ int fuse_handle_bpf_prog(struct fuse_entry_bpf *feb, struct inode *parent, struct dentry *fuse_lookup_finalize(struct fuse_bpf_args *fa, struct inode *dir, struct dentry *entry, unsigned int flags) { - struct fuse_dentry *fd; - struct dentry *bd; - struct inode *inode, *backing_inode; - struct inode *d_inode = entry->d_inode; + struct fuse_dentry *fuse_entry; + struct dentry *backing_entry; + struct inode *inode = NULL, *backing_inode; + struct inode *entry_inode = entry->d_inode; struct fuse_entry_out *feo = fa->out_args[0].value; struct fuse_entry_bpf_out *febo = fa->out_args[1].value; - struct fuse_entry_bpf *feb = container_of(febo, struct fuse_entry_bpf, out); + struct fuse_entry_bpf *feb = container_of(febo, struct fuse_entry_bpf, + out); int error = -1; u64 target_nodeid = 0; - struct dentry *ret; + struct dentry *ret = NULL; - fd = get_fuse_dentry(entry); - if (!fd) { + fuse_entry = get_fuse_dentry(entry); + if (!fuse_entry) { ret = ERR_PTR(-EIO); goto out; } - bd = fd->backing_path.dentry; - if (!bd) { + backing_entry = fuse_entry->backing_path.dentry; + if (!backing_entry) { ret = ERR_PTR(-ENOENT); goto out; } - backing_inode = bd->d_inode; - if (!backing_inode) { - ret = 0; - goto out; - } + if (entry_inode) + target_nodeid = get_fuse_inode(entry_inode)->nodeid; - if (d_inode) - target_nodeid = get_fuse_inode(d_inode)->nodeid; + backing_inode = backing_entry->d_inode; + if (backing_inode) + inode = fuse_iget_backing(dir->i_sb, target_nodeid, + backing_inode); - inode = fuse_iget_backing(dir->i_sb, target_nodeid, backing_inode); - - if (IS_ERR(inode)) { - ret = ERR_PTR(PTR_ERR(inode)); - goto out; - } - - error = fuse_handle_bpf_prog(feb, dir, &get_fuse_inode(inode)->bpf); + error = inode ? + fuse_handle_bpf_prog(feb, dir, &get_fuse_inode(inode)->bpf) : + fuse_handle_bpf_prog(feb, dir, &fuse_entry->bpf); if (error) { ret = ERR_PTR(error); goto out; } - error = fuse_handle_backing(feb, &get_fuse_inode(inode)->backing_inode, &fd->backing_path); - if (error) { - ret = ERR_PTR(error); - goto out; + if (inode) { + error = fuse_handle_backing(feb, + &get_fuse_inode(inode)->backing_inode, + &fuse_entry->backing_path); + if (error) { + ret = ERR_PTR(error); + goto out; + } + + get_fuse_inode(inode)->nodeid = feo->nodeid; + ret = d_splice_alias(inode, entry); + if (!IS_ERR(ret)) + inode = NULL; } - - get_fuse_inode(inode)->nodeid = feo->nodeid; - - ret = d_splice_alias(inode, entry); out: + iput(inode); if (feb->backing_file) fput(feb->backing_file); return ret; diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index 933e4a727505..59dee8d5b578 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -321,7 +321,7 @@ static int fuse_dentry_revalidate(struct dentry *entry, unsigned int flags) spin_unlock(&fi->lock); } kfree(forget); - if (ret == -ENOMEM) + if (ret == -ENOMEM || ret == -EINTR) goto out; if (ret || fuse_invalid_attr(&outarg.attr) || fuse_stale_inode(inode, outarg.generation, &outarg.attr)) @@ -364,9 +364,14 @@ static void fuse_dentry_release(struct dentry *dentry) { struct fuse_dentry *fd = dentry->d_fsdata; +#ifdef CONFIG_FUSE_BPF if (fd && fd->backing_path.dentry) path_put(&fd->backing_path); + if (fd && fd->bpf) + bpf_prog_put(fd->bpf); +#endif + kfree_rcu(fd, rcu); } #endif @@ -504,7 +509,6 @@ int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name if (name->len > FUSE_NAME_MAX) goto out; - forget = fuse_alloc_forget(); err = -ENOMEM; if (!forget) @@ -523,32 +527,34 @@ int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name err = -ENOENT; if (!entry) - goto out_queue_forget; + goto out_put_forget; err = -EINVAL; backing_file = bpf_arg.backing_file; if (!backing_file) - goto out_queue_forget; + goto out_put_forget; if (IS_ERR(backing_file)) { err = PTR_ERR(backing_file); - goto out_queue_forget; + goto out_put_forget; } backing_inode = backing_file->f_inode; *inode = fuse_iget_backing(sb, outarg->nodeid, backing_inode); if (!*inode) - goto out; + goto out_put_forget; err = fuse_handle_backing(&bpf_arg, &get_fuse_inode(*inode)->backing_inode, &get_fuse_dentry(entry)->backing_path); - if (err) - goto out; - - err = fuse_handle_bpf_prog(&bpf_arg, NULL, &get_fuse_inode(*inode)->bpf); - if (err) - goto out; + if (!err) + err = fuse_handle_bpf_prog(&bpf_arg, NULL, + &get_fuse_inode(*inode)->bpf); + if (err) { + iput(*inode); + *inode = NULL; + goto out_put_forget; + } } else #endif { @@ -568,9 +574,6 @@ int fuse_lookup_name(struct super_block *sb, u64 nodeid, const struct qstr *name } err = -ENOMEM; -#ifdef CONFIG_FUSE_BPF -out_queue_forget: -#endif if (!*inode && outarg->nodeid) { fuse_queue_forget(fm->fc, forget, outarg->nodeid, 1); goto out; diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h index 475442c9ad7e..723d462a54eb 100644 --- a/fs/fuse/fuse_i.h +++ b/fs/fuse/fuse_i.h @@ -76,7 +76,13 @@ struct fuse_dentry { u64 time; struct rcu_head rcu; }; + +#ifdef CONFIG_FUSE_BPF struct path backing_path; + + /* bpf program *only* set for negative dentries */ + struct bpf_prog *bpf; +#endif }; static inline struct fuse_dentry *get_fuse_dentry(const struct dentry *entry) @@ -1664,6 +1670,8 @@ int fuse_file_write_iter_backing(struct fuse_bpf_args *fa, void *fuse_file_write_iter_finalize(struct fuse_bpf_args *fa, struct kiocb *iocb, struct iov_iter *from); +long fuse_backing_ioctl(struct file *file, unsigned int command, unsigned long arg, int flags); + int fuse_file_flock_backing(struct file *file, int cmd, struct file_lock *fl); ssize_t fuse_backing_mmap(struct file *file, struct vm_area_struct *vma); diff --git a/fs/fuse/ioctl.c b/fs/fuse/ioctl.c index 8ba1545e01f9..d266f640266f 100644 --- a/fs/fuse/ioctl.c +++ b/fs/fuse/ioctl.c @@ -353,6 +353,15 @@ long fuse_ioctl_common(struct file *file, unsigned int cmd, if (fuse_is_bad(inode)) return -EIO; +#ifdef CONFIG_FUSE_BPF + { + struct fuse_file *ff = file->private_data; + + /* TODO - this is simply passthrough, not a proper BPF filter */ + if (ff->backing_file) + return fuse_backing_ioctl(file, cmd, arg, flags); + } +#endif return fuse_do_ioctl(file, cmd, arg, flags); } diff --git a/fs/ntfs3/index.c b/fs/ntfs3/index.c index c27b4fe57513..24a26744a691 100644 --- a/fs/ntfs3/index.c +++ b/fs/ntfs3/index.c @@ -605,11 +605,58 @@ static const struct NTFS_DE *hdr_insert_head(struct INDEX_HDR *hdr, return e; } +/* + * index_hdr_check + * + * return true if INDEX_HDR is valid + */ +static bool index_hdr_check(const struct INDEX_HDR *hdr, u32 bytes) +{ + u32 end = le32_to_cpu(hdr->used); + u32 tot = le32_to_cpu(hdr->total); + u32 off = le32_to_cpu(hdr->de_off); + + if (!IS_ALIGNED(off, 8) || tot > bytes || end > tot || + off + sizeof(struct NTFS_DE) > end) { + /* incorrect index buffer. */ + return false; + } + + return true; +} + +/* + * index_buf_check + * + * return true if INDEX_BUFFER seems is valid + */ +static bool index_buf_check(const struct INDEX_BUFFER *ib, u32 bytes, + const CLST *vbn) +{ + const struct NTFS_RECORD_HEADER *rhdr = &ib->rhdr; + u16 fo = le16_to_cpu(rhdr->fix_off); + u16 fn = le16_to_cpu(rhdr->fix_num); + + if (bytes <= offsetof(struct INDEX_BUFFER, ihdr) || + rhdr->sign != NTFS_INDX_SIGNATURE || + fo < sizeof(struct INDEX_BUFFER) + /* Check index buffer vbn. */ + || (vbn && *vbn != le64_to_cpu(ib->vbn)) || (fo % sizeof(short)) || + fo + fn * sizeof(short) >= bytes || + fn != ((bytes >> SECTOR_SHIFT) + 1)) { + /* incorrect index buffer. */ + return false; + } + + return index_hdr_check(&ib->ihdr, + bytes - offsetof(struct INDEX_BUFFER, ihdr)); +} + void fnd_clear(struct ntfs_fnd *fnd) { int i; - for (i = 0; i < fnd->level; i++) { + for (i = fnd->level - 1; i >= 0; i--) { struct indx_node *n = fnd->nodes[i]; if (!n) @@ -820,9 +867,16 @@ int indx_init(struct ntfs_index *indx, struct ntfs_sb_info *sbi, u32 t32; const struct INDEX_ROOT *root = resident_data(attr); + t32 = le32_to_cpu(attr->res.data_size); + if (t32 <= offsetof(struct INDEX_ROOT, ihdr) || + !index_hdr_check(&root->ihdr, + t32 - offsetof(struct INDEX_ROOT, ihdr))) { + goto out; + } + /* Check root fields. */ if (!root->index_block_clst) - return -EINVAL; + goto out; indx->type = type; indx->idx2vbn_bits = __ffs(root->index_block_clst); @@ -834,19 +888,19 @@ int indx_init(struct ntfs_index *indx, struct ntfs_sb_info *sbi, if (t32 < sbi->cluster_size) { /* Index record is smaller than a cluster, use 512 blocks. */ if (t32 != root->index_block_clst * SECTOR_SIZE) - return -EINVAL; + goto out; /* Check alignment to a cluster. */ if ((sbi->cluster_size >> SECTOR_SHIFT) & (root->index_block_clst - 1)) { - return -EINVAL; + goto out; } indx->vbn2vbo_bits = SECTOR_SHIFT; } else { /* Index record must be a multiple of cluster size. */ if (t32 != root->index_block_clst << sbi->cluster_bits) - return -EINVAL; + goto out; indx->vbn2vbo_bits = sbi->cluster_bits; } @@ -854,7 +908,14 @@ int indx_init(struct ntfs_index *indx, struct ntfs_sb_info *sbi, init_rwsem(&indx->run_lock); indx->cmp = get_cmp_func(root); - return indx->cmp ? 0 : -EINVAL; + if (!indx->cmp) + goto out; + + return 0; + +out: + ntfs_set_state(sbi, NTFS_DIRTY_DIRTY); + return -EINVAL; } static struct indx_node *indx_new(struct ntfs_index *indx, @@ -1012,6 +1073,13 @@ int indx_read(struct ntfs_index *indx, struct ntfs_inode *ni, CLST vbn, goto out; ok: + if (!index_buf_check(ib, bytes, &vbn)) { + ntfs_inode_err(&ni->vfs_inode, "directory corrupted"); + ntfs_set_state(ni->mi.sbi, NTFS_DIRTY_ERROR); + err = -EINVAL; + goto out; + } + if (err == -E_NTFS_FIXUP) { ntfs_write_bh(ni->mi.sbi, &ib->rhdr, &in->nb, 0); err = 0; @@ -1599,9 +1667,9 @@ static int indx_insert_into_root(struct ntfs_index *indx, struct ntfs_inode *ni, if (err) { /* Restore root. */ - if (mi_resize_attr(mi, attr, -ds_root)) + if (mi_resize_attr(mi, attr, -ds_root)) { memcpy(attr, a_root, asize); - else { + } else { /* Bug? */ ntfs_set_state(sbi, NTFS_DIRTY_ERROR); } diff --git a/fs/ntfs3/inode.c b/fs/ntfs3/inode.c index 22152300e60c..ece7daa2266a 100644 --- a/fs/ntfs3/inode.c +++ b/fs/ntfs3/inode.c @@ -81,7 +81,7 @@ static struct inode *ntfs_read_mft(struct inode *inode, le16_to_cpu(ref->seq), le16_to_cpu(rec->seq)); goto out; } else if (!is_rec_inuse(rec)) { - err = -EINVAL; + err = -ESTALE; ntfs_err(sb, "Inode r=%x is not in use!", (u32)ino); goto out; } @@ -92,8 +92,10 @@ static struct inode *ntfs_read_mft(struct inode *inode, goto out; } - if (!is_rec_base(rec)) - goto Ok; + if (!is_rec_base(rec)) { + err = -EINVAL; + goto out; + } /* Record should contain $I30 root. */ is_dir = rec->flags & RECORD_FLAG_DIR; @@ -466,7 +468,6 @@ static struct inode *ntfs_read_mft(struct inode *inode, inode->i_flags |= S_NOSEC; } -Ok: if (ino == MFT_REC_MFT && !sb->s_root) sbi->mft.ni = NULL; @@ -520,6 +521,9 @@ struct inode *ntfs_iget5(struct super_block *sb, const struct MFT_REF *ref, _ntfs_bad_inode(inode); } + if (IS_ERR(inode) && name) + ntfs_set_state(sb->s_fs_info, NTFS_DIRTY_ERROR); + return inode; } @@ -1635,10 +1639,8 @@ struct inode *ntfs_create_inode(struct user_namespace *mnt_userns, ntfs_remove_reparse(sbi, IO_REPARSE_TAG_SYMLINK, &new_de->ref); out5: - if (S_ISDIR(mode) || run_is_empty(&ni->file.run)) - goto out4; - - run_deallocate(sbi, &ni->file.run, false); + if (!S_ISDIR(mode)) + run_deallocate(sbi, &ni->file.run, false); out4: clear_rec_inuse(rec); diff --git a/fs/ntfs3/ntfs_fs.h b/fs/ntfs3/ntfs_fs.h index ca8b4d273feb..60c944d2811d 100644 --- a/fs/ntfs3/ntfs_fs.h +++ b/fs/ntfs3/ntfs_fs.h @@ -794,12 +794,12 @@ int run_pack(const struct runs_tree *run, CLST svcn, CLST len, u8 *run_buf, u32 run_buf_size, CLST *packed_vcns); int run_unpack(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino, CLST svcn, CLST evcn, CLST vcn, const u8 *run_buf, - u32 run_buf_size); + int run_buf_size); #ifdef NTFS3_CHECK_FREE_CLST int run_unpack_ex(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino, CLST svcn, CLST evcn, CLST vcn, const u8 *run_buf, - u32 run_buf_size); + int run_buf_size); #else #define run_unpack_ex run_unpack #endif diff --git a/fs/ntfs3/run.c b/fs/ntfs3/run.c index aaaa0d3d35a2..12d8682f33b5 100644 --- a/fs/ntfs3/run.c +++ b/fs/ntfs3/run.c @@ -919,12 +919,15 @@ int run_pack(const struct runs_tree *run, CLST svcn, CLST len, u8 *run_buf, */ int run_unpack(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino, CLST svcn, CLST evcn, CLST vcn, const u8 *run_buf, - u32 run_buf_size) + int run_buf_size) { u64 prev_lcn, vcn64, lcn, next_vcn; const u8 *run_last, *run_0; bool is_mft = ino == MFT_REC_MFT; + if (run_buf_size < 0) + return -EINVAL; + /* Check for empty. */ if (evcn + 1 == svcn) return 0; @@ -1046,7 +1049,7 @@ int run_unpack(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino, */ int run_unpack_ex(struct runs_tree *run, struct ntfs_sb_info *sbi, CLST ino, CLST svcn, CLST evcn, CLST vcn, const u8 *run_buf, - u32 run_buf_size) + int run_buf_size) { int ret, err; CLST next_vcn, lcn, len; diff --git a/fs/ntfs3/xattr.c b/fs/ntfs3/xattr.c index ea582b4fe1d9..884781e423e1 100644 --- a/fs/ntfs3/xattr.c +++ b/fs/ntfs3/xattr.c @@ -42,28 +42,26 @@ static inline size_t packed_ea_size(const struct EA_FULL *ea) * Assume there is at least one xattr in the list. */ static inline bool find_ea(const struct EA_FULL *ea_all, u32 bytes, - const char *name, u8 name_len, u32 *off) + const char *name, u8 name_len, u32 *off, u32 *ea_sz) { - *off = 0; + u32 ea_size; - if (!ea_all || !bytes) + *off = 0; + if (!ea_all) return false; - for (;;) { + for (; *off < bytes; *off += ea_size) { const struct EA_FULL *ea = Add2Ptr(ea_all, *off); - u32 next_off = *off + unpacked_ea_size(ea); - - if (next_off > bytes) - return false; - + ea_size = unpacked_ea_size(ea); if (ea->name_len == name_len && - !memcmp(ea->name, name, name_len)) + !memcmp(ea->name, name, name_len)) { + if (ea_sz) + *ea_sz = ea_size; return true; - - *off = next_off; - if (next_off >= bytes) - return false; + } } + + return false; } /* @@ -74,12 +72,12 @@ static inline bool find_ea(const struct EA_FULL *ea_all, u32 bytes, static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea, size_t add_bytes, const struct EA_INFO **info) { - int err; + int err = -EINVAL; struct ntfs_sb_info *sbi = ni->mi.sbi; struct ATTR_LIST_ENTRY *le = NULL; struct ATTRIB *attr_info, *attr_ea; void *ea_p; - u32 size; + u32 size, off, ea_size; static_assert(le32_to_cpu(ATTR_EA_INFO) < le32_to_cpu(ATTR_EA)); @@ -96,24 +94,31 @@ static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea, *info = resident_data_ex(attr_info, sizeof(struct EA_INFO)); if (!*info) - return -EINVAL; + goto out; /* Check Ea limit. */ size = le32_to_cpu((*info)->size); - if (size > sbi->ea_max_size) - return -EFBIG; + if (size > sbi->ea_max_size) { + err = -EFBIG; + goto out; + } - if (attr_size(attr_ea) > sbi->ea_max_size) - return -EFBIG; + if (attr_size(attr_ea) > sbi->ea_max_size) { + err = -EFBIG; + goto out; + } + + if (!size) { + /* EA info persists, but xattr is empty. Looks like EA problem. */ + goto out; + } /* Allocate memory for packed Ea. */ ea_p = kmalloc(size_add(size, add_bytes), GFP_NOFS); if (!ea_p) return -ENOMEM; - if (!size) { - /* EA info persists, but xattr is empty. Looks like EA problem. */ - } else if (attr_ea->non_res) { + if (attr_ea->non_res) { struct runs_tree run; run_init(&run); @@ -124,24 +129,52 @@ static int ntfs_read_ea(struct ntfs_inode *ni, struct EA_FULL **ea, run_close(&run); if (err) - goto out; + goto out1; } else { void *p = resident_data_ex(attr_ea, size); - if (!p) { - err = -EINVAL; - goto out; - } + if (!p) + goto out1; memcpy(ea_p, p, size); } memset(Add2Ptr(ea_p, size), 0, add_bytes); + + /* Check all attributes for consistency. */ + for (off = 0; off < size; off += ea_size) { + const struct EA_FULL *ef = Add2Ptr(ea_p, off); + u32 bytes = size - off; + + /* Check if we can use field ea->size. */ + if (bytes < sizeof(ef->size)) + goto out1; + + if (ef->size) { + ea_size = le32_to_cpu(ef->size); + if (ea_size > bytes) + goto out1; + continue; + } + + /* Check if we can use fields ef->name_len and ef->elength. */ + if (bytes < offsetof(struct EA_FULL, name)) + goto out1; + + ea_size = ALIGN(struct_size(ef, name, + 1 + ef->name_len + + le16_to_cpu(ef->elength)), + 4); + if (ea_size > bytes) + goto out1; + } + *ea = ea_p; return 0; -out: +out1: kfree(ea_p); - *ea = NULL; +out: + ntfs_set_state(sbi, NTFS_DIRTY_DIRTY); return err; } @@ -163,6 +196,7 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer, const struct EA_FULL *ea; u32 off, size; int err; + int ea_size; size_t ret; err = ntfs_read_ea(ni, &ea_all, 0, &info); @@ -175,8 +209,9 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer, size = le32_to_cpu(info->size); /* Enumerate all xattrs. */ - for (ret = 0, off = 0; off < size; off += unpacked_ea_size(ea)) { + for (ret = 0, off = 0; off < size; off += ea_size) { ea = Add2Ptr(ea_all, off); + ea_size = unpacked_ea_size(ea); if (buffer) { if (ret + ea->name_len + 1 > bytes_per_buffer) { @@ -227,7 +262,8 @@ static int ntfs_get_ea(struct inode *inode, const char *name, size_t name_len, goto out; /* Enumerate all xattrs. */ - if (!find_ea(ea_all, le32_to_cpu(info->size), name, name_len, &off)) { + if (!find_ea(ea_all, le32_to_cpu(info->size), name, name_len, &off, + NULL)) { err = -ENODATA; goto out; } @@ -269,7 +305,7 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name, struct EA_FULL *new_ea; struct EA_FULL *ea_all = NULL; size_t add, new_pack; - u32 off, size; + u32 off, size, ea_sz; __le16 size_pack; struct ATTRIB *attr; struct ATTR_LIST_ENTRY *le; @@ -304,9 +340,8 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name, size_pack = ea_info.size_pack; } - if (info && find_ea(ea_all, size, name, name_len, &off)) { + if (info && find_ea(ea_all, size, name, name_len, &off, &ea_sz)) { struct EA_FULL *ea; - size_t ea_sz; if (flags & XATTR_CREATE) { err = -EEXIST; @@ -329,8 +364,6 @@ static noinline int ntfs_set_ea(struct inode *inode, const char *name, if (ea->flags & FILE_NEED_EA) le16_add_cpu(&ea_info.count, -1); - ea_sz = unpacked_ea_size(ea); - le16_add_cpu(&ea_info.size_pack, 0 - packed_ea_size(ea)); memmove(ea, Add2Ptr(ea, ea_sz), size - off - ea_sz); diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index a23541614a0d..fe244a271620 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -758,12 +758,14 @@ static int smaps_hugetlb_range(pte_t *pte, unsigned long hmask, static const struct mm_walk_ops smaps_walk_ops = { .pmd_entry = smaps_pte_range, .hugetlb_entry = smaps_hugetlb_range, + .walk_lock = PGWALK_RDLOCK, }; static const struct mm_walk_ops smaps_shmem_walk_ops = { .pmd_entry = smaps_pte_range, .hugetlb_entry = smaps_hugetlb_range, .pte_hole = smaps_pte_hole, + .walk_lock = PGWALK_RDLOCK, }; /* @@ -1247,6 +1249,7 @@ static int clear_refs_test_walk(unsigned long start, unsigned long end, static const struct mm_walk_ops clear_refs_walk_ops = { .pmd_entry = clear_refs_pte_range, .test_walk = clear_refs_test_walk, + .walk_lock = PGWALK_WRLOCK, }; static ssize_t clear_refs_write(struct file *file, const char __user *buf, @@ -1623,6 +1626,7 @@ static const struct mm_walk_ops pagemap_ops = { .pmd_entry = pagemap_pmd_range, .pte_hole = pagemap_pte_hole, .hugetlb_entry = pagemap_hugetlb_range, + .walk_lock = PGWALK_RDLOCK, }; /* @@ -1929,6 +1933,7 @@ static int gather_hugetlb_stats(pte_t *pte, unsigned long hmask, static const struct mm_walk_ops show_numa_ops = { .hugetlb_entry = gather_hugetlb_stats, .pmd_entry = gather_pte_stats, + .walk_lock = PGWALK_RDLOCK, }; /* diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c index 65bf92615772..bec3e2341421 100644 --- a/fs/userfaultfd.c +++ b/fs/userfaultfd.c @@ -247,18 +247,17 @@ static inline struct uffd_msg userfault_msg(unsigned long address, * hugepmd ranges. */ static inline bool userfaultfd_huge_must_wait(struct userfaultfd_ctx *ctx, - struct vm_area_struct *vma, - unsigned long address, - unsigned long flags, - unsigned long reason) + struct vm_fault *vmf, + unsigned long reason) { + struct vm_area_struct *vma = vmf->vma; struct mm_struct *mm = ctx->mm; pte_t *ptep, pte; bool ret = true; - mmap_assert_locked(mm); + assert_fault_locked(vmf); - ptep = huge_pte_offset(mm, address, vma_mmu_pagesize(vma)); + ptep = huge_pte_offset(mm, vmf->address, vma_mmu_pagesize(vma)); if (!ptep) goto out; @@ -280,10 +279,8 @@ static inline bool userfaultfd_huge_must_wait(struct userfaultfd_ctx *ctx, } #else static inline bool userfaultfd_huge_must_wait(struct userfaultfd_ctx *ctx, - struct vm_area_struct *vma, - unsigned long address, - unsigned long flags, - unsigned long reason) + struct vm_fault *vmf, + unsigned long reason) { return false; /* should never get here */ } @@ -297,11 +294,11 @@ static inline bool userfaultfd_huge_must_wait(struct userfaultfd_ctx *ctx, * threads. */ static inline bool userfaultfd_must_wait(struct userfaultfd_ctx *ctx, - unsigned long address, - unsigned long flags, + struct vm_fault *vmf, unsigned long reason) { struct mm_struct *mm = ctx->mm; + unsigned long address = vmf->address; pgd_t *pgd; p4d_t *p4d; pud_t *pud; @@ -309,7 +306,7 @@ static inline bool userfaultfd_must_wait(struct userfaultfd_ctx *ctx, pte_t *pte; bool ret = true; - mmap_assert_locked(mm); + assert_fault_locked(vmf); pgd = pgd_offset(mm, address); if (!pgd_present(*pgd)) @@ -416,7 +413,7 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason) * Coredumping runs without mmap_lock so we can only check that * the mmap_lock is held, if PF_DUMPCORE was not set. */ - mmap_assert_locked(mm); + assert_fault_locked(vmf); ctx = vmf->vma->vm_userfaultfd_ctx.ctx; if (!ctx) @@ -523,13 +520,10 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason) spin_unlock_irq(&ctx->fault_pending_wqh.lock); if (!is_vm_hugetlb_page(vmf->vma)) - must_wait = userfaultfd_must_wait(ctx, vmf->address, vmf->flags, - reason); + must_wait = userfaultfd_must_wait(ctx, vmf, reason); else - must_wait = userfaultfd_huge_must_wait(ctx, vmf->vma, - vmf->address, - vmf->flags, reason); - mmap_read_unlock(mm); + must_wait = userfaultfd_huge_must_wait(ctx, vmf, reason); + release_fault_lock(vmf); if (likely(must_wait && !READ_ONCE(ctx->released))) { wake_up_poll(&ctx->fd_wqh, EPOLLIN); @@ -632,6 +626,7 @@ static void userfaultfd_event_wait_completion(struct userfaultfd_ctx *ctx, mmap_write_lock(mm); for_each_vma(vmi, vma) { if (vma->vm_userfaultfd_ctx.ctx == release_new_ctx) { + vma_start_write(vma); vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; userfaultfd_set_vm_flags(vma, vma->vm_flags & ~__VM_UFFD_FLAGS); @@ -667,6 +662,7 @@ int dup_userfaultfd(struct vm_area_struct *vma, struct list_head *fcs) octx = vma->vm_userfaultfd_ctx.ctx; if (!octx || !(octx->features & UFFD_FEATURE_EVENT_FORK)) { + vma_start_write(vma); vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; userfaultfd_set_vm_flags(vma, vma->vm_flags & ~__VM_UFFD_FLAGS); return 0; @@ -748,6 +744,7 @@ void mremap_userfaultfd_prep(struct vm_area_struct *vma, atomic_inc(&ctx->mmap_changing); } else { /* Drop uffd context if remap feature not enabled */ + vma_start_write(vma); vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; userfaultfd_set_vm_flags(vma, vma->vm_flags & ~__VM_UFFD_FLAGS); } @@ -906,6 +903,7 @@ static int userfaultfd_release(struct inode *inode, struct file *file) prev = vma; } + vma_start_write(vma); userfaultfd_set_vm_flags(vma, new_flags); vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; } @@ -1474,6 +1472,7 @@ static int userfaultfd_register(struct userfaultfd_ctx *ctx, * the next vma was merged into the current one and * the current one has not been updated yet. */ + vma_start_write(vma); userfaultfd_set_vm_flags(vma, new_flags); vma->vm_userfaultfd_ctx.ctx = ctx; @@ -1662,6 +1661,7 @@ static int userfaultfd_unregister(struct userfaultfd_ctx *ctx, * the next vma was merged into the current one and * the current one has not been updated yet. */ + vma_start_write(vma); userfaultfd_set_vm_flags(vma, new_flags); vma->vm_userfaultfd_ctx = NULL_VM_UFFD_CTX; diff --git a/include/linux/blk-crypto-profile.h b/include/linux/blk-crypto-profile.h index 8b30d04ef008..794f608a8994 100644 --- a/include/linux/blk-crypto-profile.h +++ b/include/linux/blk-crypto-profile.h @@ -131,6 +131,9 @@ struct blk_crypto_profile { * keyslots while ensuring that they can't be changed concurrently. */ struct rw_semaphore lock; +#ifdef CONFIG_LOCKDEP + struct lock_class_key lockdep_key; +#endif /* List of idle slots, with least recently used slot at front */ wait_queue_head_t idle_slots_wait_queue; diff --git a/include/linux/highmem.h b/include/linux/highmem.h index 94b50dc0e131..a2d4e15464c3 100644 --- a/include/linux/highmem.h +++ b/include/linux/highmem.h @@ -319,6 +319,32 @@ static inline void copy_user_highpage(struct page *to, struct page *from, #endif +#ifdef copy_mc_to_kernel +static inline int copy_mc_user_highpage(struct page *to, struct page *from, + unsigned long vaddr, struct vm_area_struct *vma) +{ + unsigned long ret; + char *vfrom, *vto; + + vfrom = kmap_local_page(from); + vto = kmap_local_page(to); + ret = copy_mc_to_kernel(vto, vfrom, PAGE_SIZE); + if (!ret) + kmsan_unpoison_memory(page_address(to), PAGE_SIZE); + kunmap_local(vto); + kunmap_local(vfrom); + + return ret; +} +#else +static inline int copy_mc_user_highpage(struct page *to, struct page *from, + unsigned long vaddr, struct vm_area_struct *vma) +{ + copy_user_highpage(to, from, vaddr, vma); + return 0; +} +#endif + #ifndef __HAVE_ARCH_COPY_HIGHPAGE static inline void copy_highpage(struct page *to, struct page *from) diff --git a/include/linux/mm.h b/include/linux/mm.h index ab2f33910d06..8c1bfae77799 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -635,8 +635,14 @@ struct vm_operations_struct { */ static inline bool vma_start_read(struct vm_area_struct *vma) { - /* Check before locking. A race might cause false locked result. */ - if (vma->vm_lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq)) + /* + * Check before locking. A race might cause false locked result. + * We can use READ_ONCE() for the mm_lock_seq here, and don't need + * ACQUIRE semantics, because this is just a lockless check whose result + * we don't rely on for anything - the mm_lock_seq read against which we + * need ordering is below. + */ + if (READ_ONCE(vma->vm_lock_seq) == READ_ONCE(vma->vm_mm->mm_lock_seq)) return false; if (unlikely(down_read_trylock(&vma->vm_lock->lock) == 0)) @@ -647,8 +653,13 @@ static inline bool vma_start_read(struct vm_area_struct *vma) * False unlocked result is impossible because we modify and check * vma->vm_lock_seq under vma->vm_lock protection and mm->mm_lock_seq * modification invalidates all existing locks. + * + * We must use ACQUIRE semantics for the mm_lock_seq so that if we are + * racing with vma_end_write_all(), we only start reading from the VMA + * after it has been unlocked. + * This pairs with RELEASE semantics in vma_end_write_all(). */ - if (unlikely(vma->vm_lock_seq == READ_ONCE(vma->vm_mm->mm_lock_seq))) { + if (unlikely(vma->vm_lock_seq == smp_load_acquire(&vma->vm_mm->mm_lock_seq))) { up_read(&vma->vm_lock->lock); return false; } @@ -662,6 +673,7 @@ static inline void vma_end_read(struct vm_area_struct *vma) rcu_read_unlock(); } +/* WARNING! Can only be used if mmap_lock is expected to be write-locked */ static bool __is_vma_write_locked(struct vm_area_struct *vma, int *mm_lock_seq) { mmap_assert_write_locked(vma->vm_mm); @@ -670,10 +682,15 @@ static bool __is_vma_write_locked(struct vm_area_struct *vma, int *mm_lock_seq) * current task is holding mmap_write_lock, both vma->vm_lock_seq and * mm->mm_lock_seq can't be concurrently modified. */ - *mm_lock_seq = READ_ONCE(vma->vm_mm->mm_lock_seq); + *mm_lock_seq = vma->vm_mm->mm_lock_seq; return (vma->vm_lock_seq == *mm_lock_seq); } +/* + * Begin writing to a VMA. + * Exclude concurrent readers under the per-VMA lock until the currently + * write-locked mmap_lock is dropped or downgraded. + */ static inline void vma_start_write(struct vm_area_struct *vma) { int mm_lock_seq; @@ -682,7 +699,13 @@ static inline void vma_start_write(struct vm_area_struct *vma) return; down_write(&vma->vm_lock->lock); - vma->vm_lock_seq = mm_lock_seq; + /* + * We should use WRITE_ONCE() here because we can have concurrent reads + * from the early lockless pessimistic check in vma_start_read(). + * We don't really care about the correctness of that early check, but + * we should use WRITE_ONCE() for cleanliness and to keep KCSAN happy. + */ + WRITE_ONCE(vma->vm_lock_seq, mm_lock_seq); up_write(&vma->vm_lock->lock); } @@ -696,7 +719,7 @@ static inline bool vma_try_start_write(struct vm_area_struct *vma) if (!down_write_trylock(&vma->vm_lock->lock)) return false; - vma->vm_lock_seq = mm_lock_seq; + WRITE_ONCE(vma->vm_lock_seq, mm_lock_seq); up_write(&vma->vm_lock->lock); return true; } @@ -708,6 +731,12 @@ static inline void vma_assert_write_locked(struct vm_area_struct *vma) VM_BUG_ON_VMA(!__is_vma_write_locked(vma, &mm_lock_seq), vma); } +static inline void vma_assert_locked(struct vm_area_struct *vma) +{ + if (!rwsem_is_locked(&vma->vm_lock->lock)) + vma_assert_write_locked(vma); +} + static inline void vma_mark_detached(struct vm_area_struct *vma, bool detached) { /* When detaching vma should be write-locked */ @@ -716,6 +745,22 @@ static inline void vma_mark_detached(struct vm_area_struct *vma, bool detached) vma->detached = detached; } +static inline void release_fault_lock(struct vm_fault *vmf) +{ + if (vmf->flags & FAULT_FLAG_VMA_LOCK) + vma_end_read(vmf->vma); + else + mmap_read_unlock(vmf->vma->vm_mm); +} + +static inline void assert_fault_locked(struct vm_fault *vmf) +{ + if (vmf->flags & FAULT_FLAG_VMA_LOCK) + vma_assert_locked(vmf->vma); + else + mmap_assert_locked(vmf->vma->vm_mm); +} + struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, unsigned long address); @@ -728,10 +773,27 @@ static inline void vma_end_read(struct vm_area_struct *vma) {} static inline void vma_start_write(struct vm_area_struct *vma) {} static inline bool vma_try_start_write(struct vm_area_struct *vma) { return true; } -static inline void vma_assert_write_locked(struct vm_area_struct *vma) {} +static inline void vma_assert_write_locked(struct vm_area_struct *vma) + { mmap_assert_write_locked(vma->vm_mm); } static inline void vma_mark_detached(struct vm_area_struct *vma, bool detached) {} +static inline void release_fault_lock(struct vm_fault *vmf) +{ + mmap_read_unlock(vmf->vma->vm_mm); +} + +static inline void assert_fault_locked(struct vm_fault *vmf) +{ + mmap_assert_locked(vmf->vma->vm_mm); +} + +static inline struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, + unsigned long address) +{ + return NULL; +} + #endif /* CONFIG_PER_VMA_LOCK */ /* @@ -756,18 +818,22 @@ static inline void vm_flags_init(struct vm_area_struct *vma, ACCESS_PRIVATE(vma, __vm_flags) = flags; } -/* Use when VMA is part of the VMA tree and modifications need coordination */ +/* + * Use when VMA is part of the VMA tree and modifications need coordination + * Note: vm_flags_reset and vm_flags_reset_once do not lock the vma and + * it should be locked explicitly beforehand. + */ static inline void vm_flags_reset(struct vm_area_struct *vma, vm_flags_t flags) { - vma_start_write(vma); + vma_assert_write_locked(vma); vm_flags_init(vma, flags); } static inline void vm_flags_reset_once(struct vm_area_struct *vma, vm_flags_t flags) { - vma_start_write(vma); + vma_assert_write_locked(vma); WRITE_ONCE(ACCESS_PRIVATE(vma, __vm_flags), flags); } @@ -2117,6 +2183,8 @@ void unmap_mapping_pages(struct address_space *mapping, pgoff_t start, pgoff_t nr, bool even_cows); void unmap_mapping_range(struct address_space *mapping, loff_t const holebegin, loff_t const holelen, int even_cows); +struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm, + unsigned long address, struct pt_regs *regs); #else static inline vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address, unsigned int flags, @@ -2993,16 +3061,11 @@ extern vm_fault_t filemap_page_mkwrite(struct vm_fault *vmf); extern unsigned long stack_guard_gap; /* Generic expand stack which grows the stack according to GROWS{UP,DOWN} */ -extern int expand_stack(struct vm_area_struct *vma, unsigned long address); +int expand_stack_locked(struct vm_area_struct *vma, unsigned long address); +struct vm_area_struct *expand_stack(struct mm_struct * mm, unsigned long addr); /* CONFIG_STACK_GROWSUP still needs to grow downwards at some places */ -extern int expand_downwards(struct vm_area_struct *vma, - unsigned long address); -#if VM_GROWSUP -extern int expand_upwards(struct vm_area_struct *vma, unsigned long address); -#else - #define expand_upwards(vma, address) (0) -#endif +int expand_downwards(struct vm_area_struct *vma, unsigned long address); /* Look up the first VMA which satisfies addr < vm_end, NULL if none. */ extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr); @@ -3098,6 +3161,8 @@ unsigned long change_prot_numa(struct vm_area_struct *vma, #endif struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr); +struct vm_area_struct *find_extend_vma_locked(struct mm_struct *, + unsigned long addr); int remap_pfn_range(struct vm_area_struct *, unsigned long addr, unsigned long pfn, unsigned long size, pgprot_t); int remap_pfn_range_notrack(struct vm_area_struct *vma, unsigned long addr, @@ -3480,7 +3545,6 @@ enum mf_flags { int mf_dax_kill_procs(struct address_space *mapping, pgoff_t index, unsigned long count, int mf_flags); extern int memory_failure(unsigned long pfn, int flags); -extern void memory_failure_queue(unsigned long pfn, int flags); extern void memory_failure_queue_kick(int cpu); extern int unpoison_memory(unsigned long pfn); extern int sysctl_memory_failure_early_kill; @@ -3489,8 +3553,12 @@ extern void shake_page(struct page *p); extern atomic_long_t num_poisoned_pages __read_mostly; extern int soft_offline_page(unsigned long pfn, int flags); #ifdef CONFIG_MEMORY_FAILURE +extern void memory_failure_queue(unsigned long pfn, int flags); extern int __get_huge_page_for_hwpoison(unsigned long pfn, int flags); #else +static inline void memory_failure_queue(unsigned long pfn, int flags) +{ +} static inline int __get_huge_page_for_hwpoison(unsigned long pfn, int flags) { return 0; diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 248151aa6be9..4e9453ab5985 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -478,6 +478,20 @@ struct vm_area_struct { }; #ifdef CONFIG_PER_VMA_LOCK + /* + * Can only be written (using WRITE_ONCE()) while holding both: + * - mmap_lock (in write mode) + * - vm_lock->lock (in write mode) + * Can be read reliably while holding one of: + * - mmap_lock (in read or write mode) + * - vm_lock->lock (in read or write mode) + * Can be read unreliably (using READ_ONCE()) for pessimistic bailout + * while holding nothing (except RCU to keep the VMA struct allocated). + * + * This sequence counter is explicitly allowed to overflow; sequence + * counter reuse can only lead to occasional unnecessary use of the + * slowpath. + */ int vm_lock_seq; struct vma_lock *vm_lock; @@ -618,6 +632,20 @@ struct mm_struct { * by mmlist_lock */ #ifdef CONFIG_PER_VMA_LOCK + /* + * This field has lock-like semantics, meaning it is sometimes + * accessed with ACQUIRE/RELEASE semantics. + * Roughly speaking, incrementing the sequence number is + * equivalent to releasing locks on VMAs; reading the sequence + * number can be part of taking a read lock on a VMA. + * + * Can be modified under write mmap_lock using RELEASE + * semantics. + * Can be read with no other protection when holding write + * mmap_lock. + * Can be read with ACQUIRE semantics if not holding write + * mmap_lock. + */ int mm_lock_seq; #endif @@ -942,7 +970,8 @@ enum vm_fault_reason { { VM_FAULT_RETRY, "RETRY" }, \ { VM_FAULT_FALLBACK, "FALLBACK" }, \ { VM_FAULT_DONE_COW, "DONE_COW" }, \ - { VM_FAULT_NEEDDSYNC, "NEEDDSYNC" } + { VM_FAULT_NEEDDSYNC, "NEEDDSYNC" }, \ + { VM_FAULT_COMPLETED, "COMPLETED" } struct vm_special_mapping { const char *name; /* The name, e.g. "[vdso]". */ diff --git a/include/linux/mmap_lock.h b/include/linux/mmap_lock.h index aab8f1b28d26..4745ea859398 100644 --- a/include/linux/mmap_lock.h +++ b/include/linux/mmap_lock.h @@ -73,11 +73,25 @@ static inline void mmap_assert_write_locked(struct mm_struct *mm) } #ifdef CONFIG_PER_VMA_LOCK +/* + * Drop all currently-held per-VMA locks. + * This is called from the mmap_lock implementation directly before releasing + * a write-locked mmap_lock (or downgrading it to read-locked). + * This should normally NOT be called manually from other places. + * If you want to call this manually anyway, keep in mind that this will release + * *all* VMA write locks, including ones from further up the stack. + */ static inline void vma_end_write_all(struct mm_struct *mm) { mmap_assert_write_locked(mm); - /* No races during update due to exclusive mmap_lock being held */ - WRITE_ONCE(mm->mm_lock_seq, mm->mm_lock_seq + 1); + /* + * Nobody can concurrently modify mm->mm_lock_seq due to exclusive + * mmap_lock being held. + * We need RELEASE semantics here to ensure that preceding stores into + * the VMA take effect before we unlock it with this store. + * Pairs with ACQUIRE semantics in vma_start_read(). + */ + smp_store_release(&mm->mm_lock_seq, mm->mm_lock_seq + 1); } #else static inline void vma_end_write_all(struct mm_struct *mm) {} diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index df232c0003de..17a18aed632b 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -882,8 +882,7 @@ static inline bool wake_page_match(struct wait_page_queue *wait_page, void __folio_lock(struct folio *folio); int __folio_lock_killable(struct folio *folio); -bool __folio_lock_or_retry(struct folio *folio, struct mm_struct *mm, - unsigned int flags); +vm_fault_t __folio_lock_or_retry(struct folio *folio, struct vm_fault *vmf); void unlock_page(struct page *page); void folio_unlock(struct folio *folio); @@ -997,11 +996,13 @@ static inline int lock_page_killable(struct page *page) * Return value and mmap_lock implications depend on flags; see * __folio_lock_or_retry(). */ -static inline bool folio_lock_or_retry(struct folio *folio, - struct mm_struct *mm, unsigned int flags) +static inline vm_fault_t folio_lock_or_retry(struct folio *folio, + struct vm_fault *vmf) { might_sleep(); - return folio_trylock(folio) || __folio_lock_or_retry(folio, mm, flags); + if (!folio_trylock(folio)) + return __folio_lock_or_retry(folio, vmf); + return 0; } /* diff --git a/include/linux/pagewalk.h b/include/linux/pagewalk.h index f3fafb731ffd..d29ada832fa1 100644 --- a/include/linux/pagewalk.h +++ b/include/linux/pagewalk.h @@ -6,6 +6,16 @@ struct mm_walk; +/* Locking requirement during a page walk. */ +enum page_walk_lock { + /* mmap_lock should be locked for read to stabilize the vma tree */ + PGWALK_RDLOCK = 0, + /* vma will be write-locked during the walk */ + PGWALK_WRLOCK = 1, + /* vma is expected to be already write-locked during the walk */ + PGWALK_WRLOCK_VERIFY = 2, +}; + /** * struct mm_walk_ops - callbacks for walk_page_range * @pgd_entry: if set, called for each non-empty PGD (top-level) entry @@ -55,6 +65,7 @@ struct mm_walk_ops { int (*pre_vma)(unsigned long start, unsigned long end, struct mm_walk *walk); void (*post_vma)(struct mm_walk *walk); + enum page_walk_lock walk_lock; }; /* diff --git a/include/linux/wwan.h b/include/linux/wwan.h index 5ce2acf444fb..e3ea3c12c588 100644 --- a/include/linux/wwan.h +++ b/include/linux/wwan.h @@ -7,6 +7,7 @@ #include #include #include +#include /** * enum wwan_port_type - WWAN port types @@ -60,6 +61,9 @@ struct wwan_port_ops { int (*tx_blocking)(struct wwan_port *port, struct sk_buff *skb); __poll_t (*tx_poll)(struct wwan_port *port, struct file *filp, poll_table *wait); + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); }; /** @@ -165,6 +169,9 @@ struct wwan_ops { u32 if_id, struct netlink_ext_ack *extack); void (*dellink)(void *ctxt, struct net_device *dev, struct list_head *head); + + ANDROID_KABI_RESERVE(1); + ANDROID_KABI_RESERVE(2); }; int wwan_register_ops(struct device *parent, const struct wwan_ops *ops, diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h index a1ccf1276f3e..cfc9aa5c059f 100644 --- a/include/net/netfilter/nf_tables.h +++ b/include/net/netfilter/nf_tables.h @@ -1000,7 +1000,10 @@ static inline struct nft_userdata *nft_userdata(const struct nft_rule *rule) return (void *)&rule->data[rule->dlen]; } -void nf_tables_rule_release(const struct nft_ctx *ctx, struct nft_rule *rule); +void nft_rule_expr_activate(const struct nft_ctx *ctx, struct nft_rule *rule); +void nft_rule_expr_deactivate(const struct nft_ctx *ctx, struct nft_rule *rule, + enum nft_trans_phase phase); +void nf_tables_rule_destroy(const struct nft_ctx *ctx, struct nft_rule *rule); static inline void nft_set_elem_update_expr(const struct nft_set_ext *ext, struct nft_regs *regs, @@ -1083,6 +1086,7 @@ int nft_setelem_validate(const struct nft_ctx *ctx, struct nft_set *set, const struct nft_set_iter *iter, struct nft_set_elem *elem); int nft_set_catchall_validate(const struct nft_ctx *ctx, struct nft_set *set); +int nf_tables_bind_chain(const struct nft_ctx *ctx, struct nft_chain *chain); enum nft_chain_types { NFT_CHAIN_T_DEFAULT = 0, @@ -1119,11 +1123,17 @@ int nft_chain_validate_dependency(const struct nft_chain *chain, int nft_chain_validate_hooks(const struct nft_chain *chain, unsigned int hook_flags); +static inline bool nft_chain_binding(const struct nft_chain *chain) +{ + return chain->flags & NFT_CHAIN_BINDING; +} + static inline bool nft_chain_is_bound(struct nft_chain *chain) { return (chain->flags & NFT_CHAIN_BINDING) && chain->bound; } +int nft_chain_add(struct nft_table *table, struct nft_chain *chain); void nft_chain_del(struct nft_chain *chain); void nf_tables_chain_destroy(struct nft_ctx *ctx); @@ -1558,6 +1568,7 @@ struct nft_trans_rule { struct nft_rule *rule; struct nft_flow_rule *flow; u32 rule_id; + bool bound; }; #define nft_trans_rule(trans) \ @@ -1566,6 +1577,8 @@ struct nft_trans_rule { (((struct nft_trans_rule *)trans->data)->flow) #define nft_trans_rule_id(trans) \ (((struct nft_trans_rule *)trans->data)->rule_id) +#define nft_trans_rule_bound(trans) \ + (((struct nft_trans_rule *)trans->data)->bound) struct nft_trans_set { struct nft_set *set; @@ -1590,13 +1603,17 @@ struct nft_trans_set { (((struct nft_trans_set *)trans->data)->gc_int) struct nft_trans_chain { + struct nft_chain *chain; bool update; char *name; struct nft_stats __percpu *stats; u8 policy; + bool bound; u32 chain_id; }; +#define nft_trans_chain(trans) \ + (((struct nft_trans_chain *)trans->data)->chain) #define nft_trans_chain_update(trans) \ (((struct nft_trans_chain *)trans->data)->update) #define nft_trans_chain_name(trans) \ @@ -1605,6 +1622,8 @@ struct nft_trans_chain { (((struct nft_trans_chain *)trans->data)->stats) #define nft_trans_chain_policy(trans) \ (((struct nft_trans_chain *)trans->data)->policy) +#define nft_trans_chain_bound(trans) \ + (((struct nft_trans_chain *)trans->data)->bound) #define nft_trans_chain_id(trans) \ (((struct nft_trans_chain *)trans->data)->chain_id) diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h index e87cb2b80ed3..3e06b3fe81a6 100644 --- a/include/trace/events/mmflags.h +++ b/include/trace/events/mmflags.h @@ -51,7 +51,8 @@ gfpflag_string(__GFP_RECLAIM), \ gfpflag_string(__GFP_DIRECT_RECLAIM), \ gfpflag_string(__GFP_KSWAPD_RECLAIM), \ - gfpflag_string(__GFP_ZEROTAGS) + gfpflag_string(__GFP_ZEROTAGS), \ + gfpflag_string(__GFP_CMA) #ifdef CONFIG_KASAN_HW_TAGS #define __def_gfpflag_names_kasan , \ diff --git a/include/trace/hooks/cgroup.h b/include/trace/hooks/cgroup.h index dc6b47dcb21d..a50e6abc55ee 100644 --- a/include/trace/hooks/cgroup.h +++ b/include/trace/hooks/cgroup.h @@ -21,11 +21,7 @@ DECLARE_RESTRICTED_HOOK(android_rvh_refrigerator, DECLARE_HOOK(android_vh_cgroup_attach, TP_PROTO(struct cgroup_subsys *ss, struct cgroup_taskset *tset), - TP_ARGS(ss, tset)) -DECLARE_RESTRICTED_HOOK(android_rvh_cgroup_force_kthread_migration, - TP_PROTO(struct task_struct *tsk, struct cgroup *dst_cgrp, bool *force_migration), - TP_ARGS(tsk, dst_cgrp, force_migration), 1); - + TP_ARGS(ss, tset)); DECLARE_RESTRICTED_HOOK(android_rvh_cpuset_fork, TP_PROTO(struct task_struct *p, bool *inherit_cpus), diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h index cbf3dfd38d36..1552b71c1792 100644 --- a/include/trace/hooks/dtask.h +++ b/include/trace/hooks/dtask.h @@ -91,7 +91,16 @@ DECLARE_HOOK(android_vh_alter_mutex_list_add, DECLARE_HOOK(android_vh_mutex_unlock_slowpath, TP_PROTO(struct mutex *lock), TP_ARGS(lock)); - +struct rt_mutex_waiter; +struct ww_acquire_ctx; +DECLARE_HOOK(android_vh_task_blocks_on_rtmutex, + TP_PROTO(struct rt_mutex_base *lock, struct rt_mutex_waiter *waiter, + struct task_struct *task, struct ww_acquire_ctx *ww_ctx, + unsigned int *chwalk), + TP_ARGS(lock, waiter, task, ww_ctx, chwalk)); +DECLARE_HOOK(android_vh_rtmutex_waiter_prio, + TP_PROTO(struct task_struct *task, int *waiter_prio), + TP_ARGS(task, waiter_prio)); #endif /* _TRACE_HOOK_DTASK_H */ /* This part must be outside protection */ diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index cf27ab461c4e..e49cc31ea70d 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -11,6 +11,7 @@ struct shmem_inode_info; struct folio; +struct page_vma_mapped_walk; DECLARE_RESTRICTED_HOOK(android_rvh_shmem_get_folio, TP_PROTO(struct shmem_inode_info *info, struct folio **folio), @@ -129,6 +130,16 @@ DECLARE_HOOK(android_vh_free_one_page_bypass, TP_PROTO(struct page *page, struct zone *zone, int order, int migratetype, int fpi_flags, bool *bypass), TP_ARGS(page, zone, order, migratetype, fpi_flags, bypass)); +DECLARE_HOOK(android_vh_test_clear_look_around_ref, + TP_PROTO(struct page *page), + TP_ARGS(page)); +DECLARE_HOOK(android_vh_look_around_migrate_folio, + TP_PROTO(struct folio *old_folio, struct folio *new_folio), + TP_ARGS(old_folio, new_folio)); +DECLARE_HOOK(android_vh_look_around, + TP_PROTO(struct page_vma_mapped_walk *pvmw, struct folio *folio, + struct vm_area_struct *vma, int *referenced), + TP_ARGS(pvmw, folio, vma, referenced)); #endif /* _TRACE_HOOK_MM_H */ diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 7b5ab104d7fe..4cc3f0cded7b 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -52,6 +52,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_finish_prio_fork, TP_PROTO(struct task_struct *p), TP_ARGS(p), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_rtmutex_force_update, + TP_PROTO(struct task_struct *p, struct task_struct *pi_task, int *update), + TP_ARGS(p, pi_task, update), 1); + DECLARE_RESTRICTED_HOOK(android_rvh_rtmutex_prepare_setprio, TP_PROTO(struct task_struct *p, struct task_struct *pi_task), TP_ARGS(p, pi_task), 1); @@ -255,6 +259,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_do_sched_yield, TP_PROTO(struct rq *rq), TP_ARGS(rq), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_before_do_sched_yield, + TP_PROTO(long *unused), + TP_ARGS(unused), 1); + DECLARE_HOOK(android_vh_free_task, TP_PROTO(struct task_struct *p), TP_ARGS(p)); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 0896b1134de5..d66ab9279266 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -36,6 +36,13 @@ DECLARE_HOOK(android_vh_should_continue_reclaim, DECLARE_HOOK(android_vh_file_is_tiny_bypass, TP_PROTO(bool file_is_tiny, bool *bypass), TP_ARGS(file_is_tiny, bypass)); +DECLARE_HOOK(android_vh_check_folio_look_around_ref, + TP_PROTO(struct folio *folio, int *skip), + TP_ARGS(folio, skip)); +enum scan_balance; +DECLARE_HOOK(android_vh_tune_scan_type, + TP_PROTO(enum scan_balance *scan_type), + TP_ARGS(scan_type)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index d67a7ff0da9a..b43f3bbd55ee 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -577,12 +577,17 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') /* 32 ARGB-8-8-8-8 */ #define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* 32 XRGB-8-8-8-8 */ +/* RGB formats (6 or 8 bytes per pixel) */ +#define V4L2_PIX_FMT_BGR48_12 v4l2_fourcc('B', '3', '1', '2') /* 48 BGR 12-bit per component */ +#define V4L2_PIX_FMT_ABGR64_12 v4l2_fourcc('B', '4', '1', '2') /* 64 BGRA 12-bit per component */ + /* Grey formats */ #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') /* 8 Greyscale */ #define V4L2_PIX_FMT_Y4 v4l2_fourcc('Y', '0', '4', ' ') /* 4 Greyscale */ #define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */ #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */ #define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */ +#define V4L2_PIX_FMT_Y012 v4l2_fourcc('Y', '0', '1', '2') /* 12 Greyscale */ #define V4L2_PIX_FMT_Y14 v4l2_fourcc('Y', '1', '4', ' ') /* 14 Greyscale */ #define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */ #define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */ @@ -617,6 +622,15 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_YUVA32 v4l2_fourcc('Y', 'U', 'V', 'A') /* 32 YUVA-8-8-8-8 */ #define V4L2_PIX_FMT_YUVX32 v4l2_fourcc('Y', 'U', 'V', 'X') /* 32 YUVX-8-8-8-8 */ #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */ +#define V4L2_PIX_FMT_YUV48_12 v4l2_fourcc('Y', '3', '1', '2') /* 48 YUV 4:4:4 12-bit per component */ + +/* + * YCbCr packed format. For each Y2xx format, xx bits of valid data occupy the MSBs + * of the 16 bit components, and 16-xx bits of zero padding occupy the LSBs. + */ +#define V4L2_PIX_FMT_Y210 v4l2_fourcc('Y', '2', '1', '0') /* 32 YUYV 4:2:2 */ +#define V4L2_PIX_FMT_Y212 v4l2_fourcc('Y', '2', '1', '2') /* 32 YUYV 4:2:2 */ +#define V4L2_PIX_FMT_Y216 v4l2_fourcc('Y', '2', '1', '6') /* 32 YUYV 4:2:2 */ /* two planes -- one Y, one Cr + Cb interleaved */ #define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') /* 12 Y/CbCr 4:2:0 */ @@ -626,12 +640,14 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */ #define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */ #define V4L2_PIX_FMT_P010 v4l2_fourcc('P', '0', '1', '0') /* 24 Y/CbCr 4:2:0 10-bit per component */ +#define V4L2_PIX_FMT_P012 v4l2_fourcc('P', '0', '1', '2') /* 24 Y/CbCr 4:2:0 12-bit per component */ /* two non contiguous planes - one Y, one Cr + Cb interleaved */ #define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */ #define V4L2_PIX_FMT_NV21M v4l2_fourcc('N', 'M', '2', '1') /* 21 Y/CrCb 4:2:0 */ #define V4L2_PIX_FMT_NV16M v4l2_fourcc('N', 'M', '1', '6') /* 16 Y/CbCr 4:2:2 */ #define V4L2_PIX_FMT_NV61M v4l2_fourcc('N', 'M', '6', '1') /* 16 Y/CrCb 4:2:2 */ +#define V4L2_PIX_FMT_P012M v4l2_fourcc('P', 'M', '1', '2') /* 24 Y/CbCr 4:2:0 12-bit per component */ /* three planes - Y Cb, Cr */ #define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') /* 9 YUV 4:1:0 */ diff --git a/init/Kconfig.gki b/init/Kconfig.gki index 29eb1eefbd3d..081b1cdc9c7e 100644 --- a/init/Kconfig.gki +++ b/init/Kconfig.gki @@ -201,6 +201,7 @@ config GKI_HIDDEN_NET_CONFIGS bool "Hidden networking configuration needed for GKI" select PAGE_POOL select NET_PTP_CLASSIFY + select NET_DEVLINK help Dummy config option used to enable the networking hidden config, required by various SoC platforms. diff --git a/io_uring/poll.c b/io_uring/poll.c index 4788073ec45d..869e1d2a4413 100644 --- a/io_uring/poll.c +++ b/io_uring/poll.c @@ -993,8 +993,9 @@ int io_poll_remove(struct io_kiocb *req, unsigned int issue_flags) struct io_hash_bucket *bucket; struct io_kiocb *preq; int ret2, ret = 0; - bool locked; + bool locked = true; + io_ring_submit_lock(ctx, issue_flags); preq = io_poll_find(ctx, true, &cd, &ctx->cancel_table, &bucket); ret2 = io_poll_disarm(preq); if (bucket) @@ -1006,12 +1007,10 @@ int io_poll_remove(struct io_kiocb *req, unsigned int issue_flags) goto out; } - io_ring_submit_lock(ctx, issue_flags); preq = io_poll_find(ctx, true, &cd, &ctx->cancel_table_locked, &bucket); ret2 = io_poll_disarm(preq); if (bucket) spin_unlock(&bucket->lock); - io_ring_submit_unlock(ctx, issue_flags); if (ret2) { ret = ret2; goto out; @@ -1035,7 +1034,7 @@ int io_poll_remove(struct io_kiocb *req, unsigned int issue_flags) if (poll_update->update_user_data) preq->cqe.user_data = poll_update->new_user_data; - ret2 = io_poll_add(preq, issue_flags); + ret2 = io_poll_add(preq, issue_flags & ~IO_URING_F_UNLOCKED); /* successfully updated, don't complete poll request */ if (!ret2 || ret2 == -EIOCBQUEUED) goto out; @@ -1043,9 +1042,9 @@ int io_poll_remove(struct io_kiocb *req, unsigned int issue_flags) req_set_fail(preq); io_req_set_res(preq, -ECANCELED, 0); - locked = !(issue_flags & IO_URING_F_UNLOCKED); io_req_task_complete(preq, &locked); out: + io_ring_submit_unlock(ctx, issue_flags); if (ret < 0) { req_set_fail(req); return ret; diff --git a/kernel/fork.c b/kernel/fork.c index 67d61842d6b8..b890209ae115 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -694,6 +694,7 @@ static __latent_entropy int dup_mmap(struct mm_struct *mm, mas_for_each(&old_mas, mpnt, ULONG_MAX) { struct file *file; + vma_start_write(mpnt); if (mpnt->vm_flags & VM_DONTCOPY) { vm_stat_account(mm, mpnt->vm_flags, -vma_pages(mpnt)); continue; diff --git a/kernel/locking/mutex.c b/kernel/locking/mutex.c index 4ff70da18e3c..525648da693f 100644 --- a/kernel/locking/mutex.c +++ b/kernel/locking/mutex.c @@ -556,8 +556,10 @@ static noinline void __sched __mutex_unlock_slowpath(struct mutex *lock, unsigne void __sched mutex_unlock(struct mutex *lock) { #ifndef CONFIG_DEBUG_LOCK_ALLOC - if (__mutex_unlock_fast(lock)) + if (__mutex_unlock_fast(lock)) { + trace_android_vh_record_mutex_lock_starttime(current, 0); return; + } #endif __mutex_unlock_slowpath(lock, _RET_IP_); trace_android_vh_record_mutex_lock_starttime(current, 0); diff --git a/kernel/locking/rtmutex.c b/kernel/locking/rtmutex.c index 229ce6bc7d62..351716fe9138 100644 --- a/kernel/locking/rtmutex.c +++ b/kernel/locking/rtmutex.c @@ -327,6 +327,11 @@ static __always_inline bool unlock_rt_mutex_safe(struct rt_mutex_base *lock, static __always_inline int __waiter_prio(struct task_struct *task) { int prio = task->prio; + int waiter_prio = 0; + + trace_android_vh_rtmutex_waiter_prio(task, &waiter_prio); + if (waiter_prio > 0) + return waiter_prio; if (!rt_prio(prio)) return DEFAULT_PRIO; @@ -1151,6 +1156,7 @@ static int __sched task_blocks_on_rt_mutex(struct rt_mutex_base *lock, if (owner == task && !(build_ww_mutex() && ww_ctx)) return -EDEADLK; + trace_android_vh_task_blocks_on_rtmutex(lock, waiter, task, ww_ctx, &chwalk); raw_spin_lock(&task->pi_lock); waiter->task = task; waiter->lock = lock; diff --git a/kernel/module/Makefile b/kernel/module/Makefile index a23e93c6ef10..5d9035643b9a 100644 --- a/kernel/module/Makefile +++ b/kernel/module/Makefile @@ -25,12 +25,12 @@ obj-$(CONFIG_MODULE_UNLOAD_TAINT_TRACKING) += tracking.o # ANDROID: GKI: Generate headerfiles required for gki_module.o # # Dependencies on generated files need to be listed explicitly -$(obj)/gki_module.o: $(obj)/gki_module_protected_exports.h \ - $(obj)/gki_module_unprotected.h +$(obj)/gki_module.o: include/generated/gki_module_protected_exports.h \ + include/generated/gki_module_unprotected.h -ALL_KMI_SYMBOLS := all_kmi_symbols +ALL_KMI_SYMBOLS := include/config/abi_gki_kmi_symbols -$(obj)/gki_module_unprotected.h: $(ALL_KMI_SYMBOLS) \ +include/generated/gki_module_unprotected.h: $(ALL_KMI_SYMBOLS) \ $(srctree)/scripts/gen_gki_modules_headers.sh $(Q)$(CONFIG_SHELL) $(srctree)/scripts/gen_gki_modules_headers.sh $@ \ "$(srctree)" \ @@ -48,7 +48,7 @@ else ABI_PROTECTED_EXPORTS_FILE := $(wildcard $(srctree)/android/abi_gki_protected_exports_$(ARCH)) endif -$(obj)/gki_module_protected_exports.h: $(ABI_PROTECTED_EXPORTS_FILE) \ +include/generated/gki_module_protected_exports.h: $(ABI_PROTECTED_EXPORTS_FILE) \ $(srctree)/scripts/gen_gki_modules_headers.sh $(Q)$(CONFIG_SHELL) $(srctree)/scripts/gen_gki_modules_headers.sh $@ \ "$(srctree)" \ diff --git a/kernel/module/gki_module.c b/kernel/module/gki_module.c index 4f124f9a14ec..65a2883b539e 100644 --- a/kernel/module/gki_module.c +++ b/kernel/module/gki_module.c @@ -16,8 +16,8 @@ * gki_module_protected_exports.h -- Symbols protected from _export_ by unsigned modules * gki_module_unprotected.h -- Symbols allowed to _access_ by unsigned modules */ -#include "gki_module_protected_exports.h" -#include "gki_module_unprotected.h" +#include +#include #define MAX_STRCMP_LEN (max(MAX_UNPROTECTED_NAME_LEN, MAX_PROTECTED_EXPORTS_NAME_LEN)) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index c9d59630444a..95843540088b 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7043,15 +7043,17 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) const struct sched_class *prev_class; struct rq_flags rf; struct rq *rq; + int update = 0; trace_android_rvh_rtmutex_prepare_setprio(p, pi_task); /* XXX used to be waiter->prio, not waiter->task->prio */ prio = __rt_effective_prio(pi_task, p->normal_prio); + trace_android_rvh_rtmutex_force_update(p, pi_task, &update); /* * If nothing changed; bail early. */ - if (p->pi_top_task == pi_task && prio == p->prio && !dl_prio(prio)) + if (!update && p->pi_top_task == pi_task && prio == p->prio && !dl_prio(prio)) return; rq = __task_rq_lock(p, &rf); @@ -7071,7 +7073,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task) /* * For FIFO/RR we only need to set prio, if that matches we're done. */ - if (prio == p->prio && !dl_prio(prio)) + if (!update && prio == p->prio && !dl_prio(prio)) goto out_unlock; /* @@ -8446,6 +8448,11 @@ static void do_sched_yield(void) { struct rq_flags rf; struct rq *rq; + long skip = 0; + + trace_android_rvh_before_do_sched_yield(&skip); + if (skip) + return; rq = this_rq_lock_irq(&rf); diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index e1e2601fd84f..f528b1f6cbb9 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -22,6 +22,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_can_migrate_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_lowest_rq); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_prepare_prio_fork); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_force_update); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler); @@ -75,6 +76,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_is_cpu_allowed); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_get_nohz_timer_target); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_getaffinity); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sched_yield); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_before_do_sched_yield); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_fork_init); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_ttwu_cond); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_schedule_bug); diff --git a/lib/maple_tree.c b/lib/maple_tree.c index ca65dbe98e51..66e116d84c4e 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -4322,11 +4322,13 @@ static inline void mas_wr_end_piv(struct ma_wr_state *wr_mas) { wr_mas->end_piv = wr_mas->r_max; - while ((wr_mas->mas->last > wr_mas->end_piv) && - (wr_mas->offset_end < wr_mas->node_end)) - wr_mas->end_piv = wr_mas->pivots[++wr_mas->offset_end]; + while ((wr_mas->offset_end < wr_mas->node_end) && + (wr_mas->mas->last > wr_mas->pivots[wr_mas->offset_end])) + wr_mas->offset_end++; - if (wr_mas->mas->last > wr_mas->end_piv) + if (wr_mas->offset_end < wr_mas->node_end) + wr_mas->end_piv = wr_mas->pivots[wr_mas->offset_end]; + else wr_mas->end_piv = wr_mas->mas->max; if (!wr_mas->entry) diff --git a/mm/Kconfig b/mm/Kconfig index 5821c17641e7..89e1878adef1 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -1208,6 +1208,10 @@ config PER_VMA_LOCK This feature allows locking each virtual memory area separately when handling page faults instead of taking mmap_lock. +config LOCK_MM_AND_FIND_VMA + bool + depends on !STACK_GROWSUP + source "mm/damon/Kconfig" endmenu diff --git a/mm/damon/vaddr.c b/mm/damon/vaddr.c index 15f03df66db6..3036ebfcdd83 100644 --- a/mm/damon/vaddr.c +++ b/mm/damon/vaddr.c @@ -384,6 +384,7 @@ static int damon_mkold_hugetlb_entry(pte_t *pte, unsigned long hmask, static const struct mm_walk_ops damon_mkold_ops = { .pmd_entry = damon_mkold_pmd_entry, .hugetlb_entry = damon_mkold_hugetlb_entry, + .walk_lock = PGWALK_RDLOCK, }; static void damon_va_mkold(struct mm_struct *mm, unsigned long addr) @@ -521,6 +522,7 @@ static int damon_young_hugetlb_entry(pte_t *pte, unsigned long hmask, static const struct mm_walk_ops damon_young_ops = { .pmd_entry = damon_young_pmd_entry, .hugetlb_entry = damon_young_hugetlb_entry, + .walk_lock = PGWALK_RDLOCK, }; static bool damon_va_young(struct mm_struct *mm, unsigned long addr, diff --git a/mm/filemap.c b/mm/filemap.c index 695d92428173..65bc874b7996 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1707,46 +1707,47 @@ static int __folio_lock_async(struct folio *folio, struct wait_page_queue *wait) /* * Return values: - * true - folio is locked; mmap_lock is still held. - * false - folio is not locked. - * mmap_lock has been released (mmap_read_unlock(), unless flags had both - * FAULT_FLAG_ALLOW_RETRY and FAULT_FLAG_RETRY_NOWAIT set, in - * which case mmap_lock is still held. + * 0 - folio is locked. + * non-zero - folio is not locked. + * mmap_lock or per-VMA lock has been released (mmap_read_unlock() or + * vma_end_read()), unless flags had both FAULT_FLAG_ALLOW_RETRY and + * FAULT_FLAG_RETRY_NOWAIT set, in which case the lock is still held. * - * If neither ALLOW_RETRY nor KILLABLE are set, will always return true - * with the folio locked and the mmap_lock unperturbed. + * If neither ALLOW_RETRY nor KILLABLE are set, will always return 0 + * with the folio locked and the mmap_lock/per-VMA lock is left unperturbed. */ -bool __folio_lock_or_retry(struct folio *folio, struct mm_struct *mm, - unsigned int flags) +vm_fault_t __folio_lock_or_retry(struct folio *folio, struct vm_fault *vmf) { + unsigned int flags = vmf->flags; + if (fault_flag_allow_retry_first(flags)) { /* - * CAUTION! In this case, mmap_lock is not released - * even though return 0. + * CAUTION! In this case, mmap_lock/per-VMA lock is not + * released even though returning VM_FAULT_RETRY. */ if (flags & FAULT_FLAG_RETRY_NOWAIT) - return false; + return VM_FAULT_RETRY; - mmap_read_unlock(mm); + release_fault_lock(vmf); if (flags & FAULT_FLAG_KILLABLE) folio_wait_locked_killable(folio); else folio_wait_locked(folio); - return false; + return VM_FAULT_RETRY; } if (flags & FAULT_FLAG_KILLABLE) { bool ret; ret = __folio_lock_killable(folio); if (ret) { - mmap_read_unlock(mm); - return false; + release_fault_lock(vmf); + return VM_FAULT_RETRY; } } else { __folio_lock(folio); } - return true; + return 0; } /** diff --git a/mm/gup.c b/mm/gup.c index 028f3b4e8c3f..f4911ddd3070 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1182,7 +1182,7 @@ static long __get_user_pages(struct mm_struct *mm, /* first iteration or cross vma bound */ if (!vma || start >= vma->vm_end) { - vma = find_extend_vma(mm, start); + vma = vma_lookup(mm, start); if (!vma && in_gate_area(mm, start)) { ret = get_gate_page(mm, start & PAGE_MASK, gup_flags, &vma, @@ -1351,8 +1351,8 @@ int fixup_user_fault(struct mm_struct *mm, fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; retry: - vma = find_extend_vma(mm, address); - if (!vma || address < vma->vm_start) + vma = vma_lookup(mm, address); + if (!vma) return -EFAULT; if (!vma_permits_fault(vma, fault_flags)) diff --git a/mm/hmm.c b/mm/hmm.c index 3850fb625dda..b69d1591e392 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -548,6 +548,7 @@ static const struct mm_walk_ops hmm_walk_ops = { .pte_hole = hmm_vma_walk_hole, .hugetlb_entry = hmm_vma_walk_hugetlb_entry, .test_walk = hmm_vma_walk_test, + .walk_lock = PGWALK_RDLOCK, }; /** diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 34d7816b13bc..4737d9fc505d 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4968,7 +4968,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, src_vma->vm_start, src_vma->vm_end); mmu_notifier_invalidate_range_start(&range); - mmap_assert_write_locked(src); + vma_assert_write_locked(src_vma); raw_write_seqcount_begin(&src->write_protect_seq); } else { /* @@ -6005,6 +6005,12 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma, int need_wait_lock = 0; unsigned long haddr = address & huge_page_mask(h); + /* TODO: Handle faults under the VMA lock */ + if (flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + ptep = huge_pte_offset(mm, haddr, huge_page_size(h)); if (ptep) { /* diff --git a/mm/internal.h b/mm/internal.h index fe0925d7cbb5..0997c0c82c02 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -619,7 +619,7 @@ static inline struct file *maybe_unlock_mmap_for_io(struct vm_fault *vmf, if (fault_flag_allow_retry_first(flags) && !(flags & FAULT_FLAG_RETRY_NOWAIT)) { fpin = get_file(vmf->vma->vm_file); - mmap_read_unlock(vmf->vma->vm_mm); + release_fault_lock(vmf); } return fpin; } diff --git a/mm/ksm.c b/mm/ksm.c index cb272b6fde59..c5a2f83f62f1 100644 --- a/mm/ksm.c +++ b/mm/ksm.c @@ -434,13 +434,18 @@ static inline bool ksm_test_exit(struct mm_struct *mm) * of the process that owns 'vma'. We also do not want to enforce * protection keys here anyway. */ -static int break_ksm(struct vm_area_struct *vma, unsigned long addr) +static int break_ksm(struct vm_area_struct *vma, unsigned long addr, bool lock_vma) { struct page *page; vm_fault_t ret = 0; do { cond_resched(); + if (lock_vma) + vma_start_write(vma); + else + mmap_assert_locked(vma->vm_mm); + page = follow_page(vma, addr, FOLL_GET | FOLL_MIGRATION | FOLL_REMOTE); if (IS_ERR_OR_NULL(page)) @@ -511,7 +516,7 @@ static void break_cow(struct ksm_rmap_item *rmap_item) mmap_read_lock(mm); vma = find_mergeable_vma(mm, addr); if (vma) - break_ksm(vma, addr); + break_ksm(vma, addr, false); mmap_read_unlock(mm); } @@ -814,7 +819,7 @@ static void remove_trailing_rmap_items(struct ksm_rmap_item **rmap_list) * in cmp_and_merge_page on one of the rmap_items we would be removing. */ static int unmerge_ksm_pages(struct vm_area_struct *vma, - unsigned long start, unsigned long end) + unsigned long start, unsigned long end, bool lock_vma) { unsigned long addr; int err = 0; @@ -825,7 +830,7 @@ static int unmerge_ksm_pages(struct vm_area_struct *vma, if (signal_pending(current)) err = -ERESTARTSYS; else - err = break_ksm(vma, addr); + err = break_ksm(vma, addr, lock_vma); } return err; } @@ -972,7 +977,7 @@ static int unmerge_and_remove_all_rmap_items(void) if (!(vma->vm_flags & VM_MERGEABLE) || !vma->anon_vma) continue; err = unmerge_ksm_pages(vma, - vma->vm_start, vma->vm_end); + vma->vm_start, vma->vm_end, false); if (err) goto error; } @@ -2487,7 +2492,7 @@ int ksm_madvise(struct vm_area_struct *vma, unsigned long start, return 0; /* just ignore the advice */ if (vma->anon_vma) { - err = unmerge_ksm_pages(vma, start, end); + err = unmerge_ksm_pages(vma, start, end, true); if (err) return err; } diff --git a/mm/madvise.c b/mm/madvise.c index f49a62a35827..21b5de11c329 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -180,9 +180,8 @@ static int madvise_update_vma(struct vm_area_struct *vma, } success: - /* - * vm_flags is protected by the mmap_lock held in write mode. - */ + /* vm_flags is protected by the mmap_lock held in write mode. */ + vma_start_write(vma); vm_flags_reset(vma, new_flags); if (!vma->vm_file) { error = replace_anon_vma_name(vma, anon_name); @@ -223,7 +222,7 @@ static int swapin_walk_pmd_entry(pmd_t *pmd, unsigned long start, trace_android_vh_madvise_swapin_walk_pmd_entry(entry); page = read_swap_cache_async(entry, GFP_HIGHUSER_MOVABLE, - vma, index, false, &splug); + vma, index, &splug); if (page) put_page(page); } @@ -234,6 +233,7 @@ static int swapin_walk_pmd_entry(pmd_t *pmd, unsigned long start, static const struct mm_walk_ops swapin_walk_ops = { .pmd_entry = swapin_walk_pmd_entry, + .walk_lock = PGWALK_RDLOCK, }; static void force_shm_swapin_readahead(struct vm_area_struct *vma, @@ -259,7 +259,7 @@ static void force_shm_swapin_readahead(struct vm_area_struct *vma, rcu_read_unlock(); page = read_swap_cache_async(swap, GFP_HIGHUSER_MOVABLE, - NULL, 0, false, &splug); + NULL, 0, &splug); if (page) put_page(page); @@ -541,6 +541,7 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, static const struct mm_walk_ops cold_walk_ops = { .pmd_entry = madvise_cold_or_pageout_pte_range, + .walk_lock = PGWALK_RDLOCK, }; static void madvise_cold_page_range(struct mmu_gather *tlb, @@ -763,6 +764,7 @@ static int madvise_free_pte_range(pmd_t *pmd, unsigned long addr, static const struct mm_walk_ops madvise_free_walk_ops = { .pmd_entry = madvise_free_pte_range, + .walk_lock = PGWALK_RDLOCK, }; static int madvise_free_single_vma(struct vm_area_struct *vma, diff --git a/mm/memcontrol.c b/mm/memcontrol.c index aa09cf4e8bb5..5879b5d6b483 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5966,6 +5966,7 @@ static int mem_cgroup_count_precharge_pte_range(pmd_t *pmd, static const struct mm_walk_ops precharge_walk_ops = { .pmd_entry = mem_cgroup_count_precharge_pte_range, + .walk_lock = PGWALK_RDLOCK, }; static unsigned long mem_cgroup_count_precharge(struct mm_struct *mm) @@ -6242,6 +6243,7 @@ static int mem_cgroup_move_charge_pte_range(pmd_t *pmd, static const struct mm_walk_ops charge_walk_ops = { .pmd_entry = mem_cgroup_move_charge_pte_range, + .walk_lock = PGWALK_RDLOCK, }; static void mem_cgroup_move_charge(void) diff --git a/mm/memory-failure.c b/mm/memory-failure.c index 4457f9423e2c..3badad5ab293 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -722,6 +722,7 @@ static int hwpoison_hugetlb_range(pte_t *ptep, unsigned long hmask, static const struct mm_walk_ops hwp_walk_ops = { .pmd_entry = hwpoison_pte_range, .hugetlb_entry = hwpoison_hugetlb_range, + .walk_lock = PGWALK_RDLOCK, }; /* diff --git a/mm/memory.c b/mm/memory.c index 16063c490b7f..0f780a8dfaef 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1319,7 +1319,7 @@ copy_page_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma) * Use the raw variant of the seqcount_t write API to avoid * lockdep complaining about preemptibility. */ - mmap_assert_write_locked(src_mm); + vma_assert_write_locked(src_vma); raw_write_seqcount_begin(&src_mm->write_protect_seq); } @@ -2851,10 +2851,16 @@ static inline int pte_unmap_same(struct vm_fault *vmf) return same; } -static inline bool __wp_page_copy_user(struct page *dst, struct page *src, - struct vm_fault *vmf) +/* + * Return: + * 0: copied succeeded + * -EHWPOISON: copy failed due to hwpoison in source page + * -EAGAIN: copied failed (some other reason) + */ +static inline int __wp_page_copy_user(struct page *dst, struct page *src, + struct vm_fault *vmf) { - bool ret; + int ret; void *kaddr; void __user *uaddr; bool locked = false; @@ -2863,8 +2869,11 @@ static inline bool __wp_page_copy_user(struct page *dst, struct page *src, unsigned long addr = vmf->address; if (likely(src)) { - copy_user_highpage(dst, src, addr, vma); - return true; + if (copy_mc_user_highpage(dst, src, addr, vma)) { + memory_failure_queue(page_to_pfn(src), 0); + return -EHWPOISON; + } + return 0; } /* @@ -2891,7 +2900,7 @@ static inline bool __wp_page_copy_user(struct page *dst, struct page *src, * and update local tlb only */ update_mmu_tlb(vma, addr, vmf->pte); - ret = false; + ret = -EAGAIN; goto pte_unlock; } @@ -2916,7 +2925,7 @@ static inline bool __wp_page_copy_user(struct page *dst, struct page *src, if (!likely(pte_same(*vmf->pte, vmf->orig_pte))) { /* The PTE changed under us, update local tlb */ update_mmu_tlb(vma, addr, vmf->pte); - ret = false; + ret = -EAGAIN; goto pte_unlock; } @@ -2935,7 +2944,7 @@ static inline bool __wp_page_copy_user(struct page *dst, struct page *src, } } - ret = true; + ret = 0; pte_unlock: if (locked) @@ -3107,6 +3116,7 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) pte_t entry; int page_copied = 0; struct mmu_notifier_range range; + int ret; delayacct_wpcopy_start(); @@ -3124,19 +3134,21 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) if (!new_page) goto oom; - if (!__wp_page_copy_user(new_page, old_page, vmf)) { + ret = __wp_page_copy_user(new_page, old_page, vmf); + if (ret) { /* * COW failed, if the fault was solved by other, * it's fine. If not, userspace would re-fault on * the same address and we will handle the fault * from the second attempt. + * The -EHWPOISON case will not be retried. */ put_page(new_page); if (old_page) put_page(old_page); delayacct_wpcopy_end(); - return 0; + return ret == -EHWPOISON ? VM_FAULT_HWPOISON : 0; } kmsan_copy_page_meta(new_page, old_page); } @@ -3302,6 +3314,11 @@ static vm_fault_t wp_pfn_shared(struct vm_fault *vmf) vm_fault_t ret; pte_unmap_unlock(vmf->pte, vmf->ptl); + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vmf->vma); + return VM_FAULT_RETRY; + } + vmf->flags |= FAULT_FLAG_MKWRITE; ret = vma->vm_ops->pfn_mkwrite(vmf); if (ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)) @@ -3324,6 +3341,12 @@ static vm_fault_t wp_page_shared(struct vm_fault *vmf) vm_fault_t tmp; pte_unmap_unlock(vmf->pte, vmf->ptl); + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + put_page(vmf->page); + vma_end_read(vmf->vma); + return VM_FAULT_RETRY; + } + tmp = do_page_mkwrite(vmf); if (unlikely(!tmp || (tmp & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))) { @@ -3626,6 +3649,7 @@ static vm_fault_t remove_device_exclusive_entry(struct vm_fault *vmf) struct folio *folio = page_folio(vmf->page); struct vm_area_struct *vma = vmf->vma; struct mmu_notifier_range range; + vm_fault_t ret; /* * We need a reference to lock the folio because we don't hold @@ -3638,9 +3662,10 @@ static vm_fault_t remove_device_exclusive_entry(struct vm_fault *vmf) if (!folio_try_get(folio)) return 0; - if (!folio_lock_or_retry(folio, vma->vm_mm, vmf->flags)) { + ret = folio_lock_or_retry(folio, vmf); + if (ret) { folio_put(folio); - return VM_FAULT_RETRY; + return ret; } mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0, vma, vma->vm_mm, vmf->address & PAGE_MASK, @@ -3750,18 +3775,12 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) bool exclusive = false; swp_entry_t entry; pte_t pte; - int locked; vm_fault_t ret = 0; void *shadow = NULL; if (!pte_unmap_same(vmf)) goto out; - if (vmf->flags & FAULT_FLAG_VMA_LOCK) { - ret = VM_FAULT_RETRY; - goto out; - } - entry = pte_to_swp_entry(vmf->orig_pte); if (unlikely(non_swap_entry(entry))) { if (is_migration_entry(entry)) { @@ -3771,6 +3790,16 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) vmf->page = pfn_swap_entry_to_page(entry); ret = remove_device_exclusive_entry(vmf); } else if (is_device_private_entry(entry)) { + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + /* + * migrate_to_ram is not yet ready to operate + * under VMA lock. + */ + vma_end_read(vma); + ret = VM_FAULT_RETRY; + goto out; + } + vmf->page = pfn_swap_entry_to_page(entry); vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address, &vmf->ptl); @@ -3874,12 +3903,9 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) goto out_release; } - locked = folio_lock_or_retry(folio, vma->vm_mm, vmf->flags); - - if (!locked) { - ret |= VM_FAULT_RETRY; + ret |= folio_lock_or_retry(folio, vmf); + if (ret & VM_FAULT_RETRY) goto out_release; - } if (swapcache) { /* @@ -4581,6 +4607,11 @@ static vm_fault_t do_read_fault(struct vm_fault *vmf) return ret; } + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vmf->vma); + return VM_FAULT_RETRY; + } + ret = __do_fault(vmf); if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY))) return ret; @@ -4597,6 +4628,11 @@ static vm_fault_t do_cow_fault(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; vm_fault_t ret; + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + if (unlikely(anon_vma_prepare(vma))) return VM_FAULT_OOM; @@ -4636,6 +4672,11 @@ static vm_fault_t do_shared_fault(struct vm_fault *vmf) struct vm_area_struct *vma = vmf->vma; vm_fault_t ret, tmp; + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + ret = __do_fault(vmf); if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY))) return ret; @@ -4846,33 +4887,45 @@ static vm_fault_t do_numa_page(struct vm_fault *vmf) static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf) { - if (vma_is_anonymous(vmf->vma)) + struct vm_area_struct *vma = vmf->vma; + if (vma_is_anonymous(vma)) return do_huge_pmd_anonymous_page(vmf); - if (vmf->vma->vm_ops->huge_fault) - return vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PMD); + if (vma->vm_ops->huge_fault) { + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + return vma->vm_ops->huge_fault(vmf, PE_SIZE_PMD); + } return VM_FAULT_FALLBACK; } /* `inline' is required to avoid gcc 4.1.2 build error */ static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf) { + struct vm_area_struct *vma = vmf->vma; const bool unshare = vmf->flags & FAULT_FLAG_UNSHARE; + vm_fault_t ret; - if (vma_is_anonymous(vmf->vma)) { + if (vma_is_anonymous(vma)) { if (likely(!unshare) && - userfaultfd_huge_pmd_wp(vmf->vma, vmf->orig_pmd)) + userfaultfd_huge_pmd_wp(vma, vmf->orig_pmd)) return handle_userfault(vmf, VM_UFFD_WP); return do_huge_pmd_wp_page(vmf); } - if (vmf->vma->vm_ops->huge_fault) { - vm_fault_t ret = vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PMD); + if (vma->vm_ops->huge_fault) { + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + ret = vma->vm_ops->huge_fault(vmf, PE_SIZE_PMD); if (!(ret & VM_FAULT_FALLBACK)) return ret; } /* COW or write-notify handled on pte level: split pmd. */ - __split_huge_pmd(vmf->vma, vmf->pmd, vmf->address, false, NULL); + __split_huge_pmd(vma, vmf->pmd, vmf->address, false, NULL); return VM_FAULT_FALLBACK; } @@ -4881,11 +4934,17 @@ static vm_fault_t create_huge_pud(struct vm_fault *vmf) { #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) + struct vm_area_struct *vma = vmf->vma; /* No support for anonymous transparent PUD pages yet */ - if (vma_is_anonymous(vmf->vma)) + if (vma_is_anonymous(vma)) return VM_FAULT_FALLBACK; - if (vmf->vma->vm_ops->huge_fault) - return vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); + if (vma->vm_ops->huge_fault) { + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + return vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); + } #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ return VM_FAULT_FALLBACK; } @@ -4894,18 +4953,25 @@ static vm_fault_t wp_huge_pud(struct vm_fault *vmf, pud_t orig_pud) { #if defined(CONFIG_TRANSPARENT_HUGEPAGE) && \ defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD) + struct vm_area_struct *vma = vmf->vma; + vm_fault_t ret; + /* No support for anonymous transparent PUD pages yet */ - if (vma_is_anonymous(vmf->vma)) + if (vma_is_anonymous(vma)) goto split; - if (vmf->vma->vm_ops->huge_fault) { - vm_fault_t ret = vmf->vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); + if (vma->vm_ops->huge_fault) { + if (vmf->flags & FAULT_FLAG_VMA_LOCK) { + vma_end_read(vma); + return VM_FAULT_RETRY; + } + ret = vma->vm_ops->huge_fault(vmf, PE_SIZE_PUD); if (!(ret & VM_FAULT_FALLBACK)) return ret; } split: /* COW or write-notify not handled on PUD level: split pud.*/ - __split_huge_pud(vmf->vma, vmf->pud, vmf->address); + __split_huge_pud(vma, vmf->pud, vmf->address); #endif /* CONFIG_TRANSPARENT_HUGEPAGE && CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */ return VM_FAULT_FALLBACK; } @@ -5027,10 +5093,10 @@ static vm_fault_t handle_pte_fault(struct vm_fault *vmf) } /* - * By the time we get here, we already hold the mm semaphore - * - * The mmap_lock may have been released depending on flags and our - * return value. See filemap_fault() and __folio_lock_or_retry(). + * On entry, we hold either the VMA lock or the mmap_lock + * (FAULT_FLAG_VMA_LOCK tells you which). If VM_FAULT_RETRY is set in + * the result, the mmap_lock is not held on exit. See filemap_fault() + * and __folio_lock_or_retry(). */ static vm_fault_t __handle_mm_fault(struct vm_area_struct *vma, unsigned long address, unsigned int flags) @@ -5231,6 +5297,17 @@ vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address, __set_current_state(TASK_RUNNING); +#ifdef CONFIG_PER_VMA_LOCK + /* + * Per-VMA locks can't be used with FAULT_FLAG_RETRY_NOWAIT because of + * the assumption that lock is dropped on VM_FAULT_RETRY. + */ + if (WARN_ON_ONCE((flags & + (FAULT_FLAG_VMA_LOCK | FAULT_FLAG_RETRY_NOWAIT)) == + (FAULT_FLAG_VMA_LOCK | FAULT_FLAG_RETRY_NOWAIT))) + return VM_FAULT_SIGSEGV; +#endif + /* do counter updates before entering really critical section. */ check_sync_rss_stat(current); @@ -5275,6 +5352,125 @@ vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address, } EXPORT_SYMBOL_GPL(handle_mm_fault); +#ifdef CONFIG_LOCK_MM_AND_FIND_VMA +#include + +static inline bool get_mmap_lock_carefully(struct mm_struct *mm, struct pt_regs *regs) +{ + /* Even if this succeeds, make it clear we *might* have slept */ + if (likely(mmap_read_trylock(mm))) { + might_sleep(); + return true; + } + + if (regs && !user_mode(regs)) { + unsigned long ip = instruction_pointer(regs); + if (!search_exception_tables(ip)) + return false; + } + + return !mmap_read_lock_killable(mm); +} + +static inline bool mmap_upgrade_trylock(struct mm_struct *mm) +{ + /* + * We don't have this operation yet. + * + * It should be easy enough to do: it's basically a + * atomic_long_try_cmpxchg_acquire() + * from RWSEM_READER_BIAS -> RWSEM_WRITER_LOCKED, but + * it also needs the proper lockdep magic etc. + */ + return false; +} + +static inline bool upgrade_mmap_lock_carefully(struct mm_struct *mm, struct pt_regs *regs) +{ + mmap_read_unlock(mm); + if (regs && !user_mode(regs)) { + unsigned long ip = instruction_pointer(regs); + if (!search_exception_tables(ip)) + return false; + } + return !mmap_write_lock_killable(mm); +} + +/* + * Helper for page fault handling. + * + * This is kind of equivalend to "mmap_read_lock()" followed + * by "find_extend_vma()", except it's a lot more careful about + * the locking (and will drop the lock on failure). + * + * For example, if we have a kernel bug that causes a page + * fault, we don't want to just use mmap_read_lock() to get + * the mm lock, because that would deadlock if the bug were + * to happen while we're holding the mm lock for writing. + * + * So this checks the exception tables on kernel faults in + * order to only do this all for instructions that are actually + * expected to fault. + * + * We can also actually take the mm lock for writing if we + * need to extend the vma, which helps the VM layer a lot. + */ +struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm, + unsigned long addr, struct pt_regs *regs) +{ + struct vm_area_struct *vma; + + if (!get_mmap_lock_carefully(mm, regs)) + return NULL; + + vma = find_vma(mm, addr); + if (likely(vma && (vma->vm_start <= addr))) + return vma; + + /* + * Well, dang. We might still be successful, but only + * if we can extend a vma to do so. + */ + if (!vma || !(vma->vm_flags & VM_GROWSDOWN)) { + mmap_read_unlock(mm); + return NULL; + } + + /* + * We can try to upgrade the mmap lock atomically, + * in which case we can continue to use the vma + * we already looked up. + * + * Otherwise we'll have to drop the mmap lock and + * re-take it, and also look up the vma again, + * re-checking it. + */ + if (!mmap_upgrade_trylock(mm)) { + if (!upgrade_mmap_lock_carefully(mm, regs)) + return NULL; + + vma = find_vma(mm, addr); + if (!vma) + goto fail; + if (vma->vm_start <= addr) + goto success; + if (!(vma->vm_flags & VM_GROWSDOWN)) + goto fail; + } + + if (expand_stack_locked(vma, addr)) + goto fail; + +success: + mmap_write_downgrade(mm); + return vma; + +fail: + mmap_write_unlock(mm); + return NULL; +} +#endif + #ifdef CONFIG_PER_VMA_LOCK /* * Lookup and lock a VMA under RCU protection. Returned VMA is guaranteed to be @@ -5293,31 +5489,21 @@ struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, if (!vma) goto inval; - /* Only anonymous vmas are supported for now */ - if (!vma_is_anonymous(vma)) - goto inval; - - /* find_mergeable_anon_vma uses adjacent vmas which are not locked */ - if (!vma->anon_vma) - goto inval; - if (!vma_start_read(vma)) goto inval; /* - * Due to the possibility of userfault handler dropping mmap_lock, avoid - * it for now and fall back to page fault handling under mmap_lock. + * find_mergeable_anon_vma uses adjacent vmas which are not locked. + * This check must happen after vma_start_read(); otherwise, a + * concurrent mremap() with MREMAP_DONTUNMAP could dissociate the VMA + * from its anon_vma. */ - if (userfaultfd_armed(vma)) { - vma_end_read(vma); - goto inval; - } + if (unlikely(!vma->anon_vma)) + goto inval_end_read; /* Check since vm_start/vm_end might change before we lock the VMA */ - if (unlikely(address < vma->vm_start || address >= vma->vm_end)) { - vma_end_read(vma); - goto inval; - } + if (unlikely(address < vma->vm_start || address >= vma->vm_end)) + goto inval_end_read; /* Check if the VMA got isolated after we found it */ if (vma->detached) { @@ -5329,6 +5515,9 @@ struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, rcu_read_unlock(); return vma; + +inval_end_read: + vma_end_read(vma); inval: rcu_read_unlock(); count_vm_vma_lock_event(VMA_LOCK_ABORT); @@ -5607,6 +5796,14 @@ int __access_remote_vm(struct mm_struct *mm, unsigned long addr, void *buf, if (mmap_read_lock_killable(mm)) return 0; + /* We might need to expand the stack to access it */ + vma = vma_lookup(mm, addr); + if (!vma) { + vma = expand_stack(mm, addr); + if (!vma) + return 0; + } + /* ignore errors, just check how much was successfully transferred */ while (len) { int bytes, ret, offset; diff --git a/mm/mempolicy.c b/mm/mempolicy.c index f940395667c8..7deb394c669a 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c @@ -384,8 +384,10 @@ void mpol_rebind_mm(struct mm_struct *mm, nodemask_t *new) VMA_ITERATOR(vmi, mm, 0); mmap_write_lock(mm); - for_each_vma(vmi, vma) + for_each_vma(vmi, vma) { + vma_start_write(vma); mpol_rebind_policy(vma->vm_policy, new); + } mmap_write_unlock(mm); } @@ -707,6 +709,14 @@ static const struct mm_walk_ops queue_pages_walk_ops = { .hugetlb_entry = queue_pages_hugetlb, .pmd_entry = queue_pages_pte_range, .test_walk = queue_pages_test_walk, + .walk_lock = PGWALK_RDLOCK, +}; + +static const struct mm_walk_ops queue_pages_lock_vma_walk_ops = { + .hugetlb_entry = queue_pages_hugetlb, + .pmd_entry = queue_pages_pte_range, + .test_walk = queue_pages_test_walk, + .walk_lock = PGWALK_WRLOCK, }; /* @@ -727,7 +737,7 @@ static const struct mm_walk_ops queue_pages_walk_ops = { static int queue_pages_range(struct mm_struct *mm, unsigned long start, unsigned long end, nodemask_t *nodes, unsigned long flags, - struct list_head *pagelist) + struct list_head *pagelist, bool lock_vma) { int err; struct queue_pages qp = { @@ -738,8 +748,10 @@ queue_pages_range(struct mm_struct *mm, unsigned long start, unsigned long end, .end = end, .first = NULL, }; + const struct mm_walk_ops *ops = lock_vma ? + &queue_pages_lock_vma_walk_ops : &queue_pages_walk_ops; - err = walk_page_range(mm, start, end, &queue_pages_walk_ops, &qp); + err = walk_page_range(mm, start, end, ops, &qp); if (!qp.first) /* whole range in hole */ @@ -759,6 +771,8 @@ static int vma_replace_policy(struct vm_area_struct *vma, struct mempolicy *old; struct mempolicy *new; + vma_assert_write_locked(vma); + pr_debug("vma %lx-%lx/%lx vm_ops %p vm_file %p set_policy %p\n", vma->vm_start, vma->vm_end, vma->vm_pgoff, vma->vm_ops, vma->vm_file, @@ -1082,7 +1096,7 @@ static int migrate_to_node(struct mm_struct *mm, int source, int dest, vma = find_vma(mm, 0); VM_BUG_ON(!(flags & (MPOL_MF_MOVE | MPOL_MF_MOVE_ALL))); queue_pages_range(mm, vma->vm_start, mm->task_size, &nmask, - flags | MPOL_MF_DISCONTIG_OK, &pagelist); + flags | MPOL_MF_DISCONTIG_OK, &pagelist, false); if (!list_empty(&pagelist)) { err = migrate_pages(&pagelist, alloc_migration_target, NULL, @@ -1320,8 +1334,12 @@ static long do_mbind(unsigned long start, unsigned long len, if (err) goto mpol_out; + /* + * Lock the VMAs before scanning for pages to migrate, to ensure we don't + * miss a concurrently inserted page. + */ ret = queue_pages_range(mm, start, end, nmask, - flags | MPOL_MF_INVERT, &pagelist); + flags | MPOL_MF_INVERT, &pagelist, true); if (ret < 0) { err = ret; @@ -1546,6 +1564,7 @@ SYSCALL_DEFINE4(set_mempolicy_home_node, unsigned long, start, unsigned long, le break; } + vma_start_write(vma); new->home_node = home_node; err = mbind_range(mm, vmstart, vmend, new); mpol_put(new); diff --git a/mm/migrate.c b/mm/migrate.c index 5c61c3d5b646..ef490976c98e 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -56,6 +56,10 @@ #include +#undef CREATE_TRACE_POINTS +#include +#include + #include "internal.h" int isolate_movable_page(struct page *page, isolate_mode_t mode) @@ -554,6 +558,8 @@ void folio_migrate_flags(struct folio *newfolio, struct folio *folio) if (folio_test_mappedtodisk(folio)) folio_set_mappedtodisk(newfolio); + trace_android_vh_look_around_migrate_folio(folio, newfolio); + /* Move dirty on pages not done by folio_migrate_mapping() */ if (folio_test_dirty(folio)) folio_set_dirty(newfolio); diff --git a/mm/migrate_device.c b/mm/migrate_device.c index 721b2365dbca..4b1491d5710a 100644 --- a/mm/migrate_device.c +++ b/mm/migrate_device.c @@ -286,6 +286,7 @@ static int migrate_vma_collect_pmd(pmd_t *pmdp, static const struct mm_walk_ops migrate_vma_walk_ops = { .pmd_entry = migrate_vma_collect_pmd, .pte_hole = migrate_vma_collect_hole, + .walk_lock = PGWALK_RDLOCK, }; /* diff --git a/mm/mincore.c b/mm/mincore.c index 1eb6aac88d84..dd8f8837f7d5 100644 --- a/mm/mincore.c +++ b/mm/mincore.c @@ -177,6 +177,7 @@ static const struct mm_walk_ops mincore_walk_ops = { .pmd_entry = mincore_pte_range, .pte_hole = mincore_unmapped_range, .hugetlb_entry = mincore_hugetlb, + .walk_lock = PGWALK_RDLOCK, }; /* diff --git a/mm/mlock.c b/mm/mlock.c index 9738d49bbc24..580f1d39f454 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -365,6 +365,7 @@ static void mlock_vma_pages_range(struct vm_area_struct *vma, { static const struct mm_walk_ops mlock_walk_ops = { .pmd_entry = mlock_pte_range, + .walk_lock = PGWALK_WRLOCK_VERIFY, }; /* @@ -380,6 +381,7 @@ static void mlock_vma_pages_range(struct vm_area_struct *vma, */ if (newflags & VM_LOCKED) newflags |= VM_IO; + vma_start_write(vma); vm_flags_reset_once(vma, newflags); lru_add_drain(); @@ -453,9 +455,9 @@ static int mlock_fixup(struct vm_area_struct *vma, struct vm_area_struct **prev, * It's okay if try_to_unmap_one unmaps a page just after we * set VM_LOCKED, populate_vma_page_range will bring it back. */ - if ((newflags & VM_LOCKED) && (oldflags & VM_LOCKED)) { /* No work to do, and mlocking twice would be wrong */ + vma_start_write(vma); vm_flags_reset(vma, newflags); } else { mlock_vma_pages_range(vma, start, end, newflags); diff --git a/mm/mmap.c b/mm/mmap.c index 36f129f23dfb..bd2140cfcf36 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -484,6 +484,8 @@ static int vma_link(struct mm_struct *mm, struct vm_area_struct *vma) if (mas_preallocate(&mas, vma, GFP_KERNEL)) return -ENOMEM; + vma_start_write(vma); + if (vma->vm_file) { mapping = vma->vm_file->f_mapping; i_mmap_lock_write(mapping); @@ -529,6 +531,7 @@ inline int vma_expand(struct ma_state *mas, struct vm_area_struct *vma, struct file *file = vma->vm_file; bool remove_next = false; + vma_start_write(vma); if (next && (vma != next) && (end == next->vm_end)) { remove_next = true; /* Lock the VMA before removing it */ @@ -553,7 +556,6 @@ inline int vma_expand(struct ma_state *mas, struct vm_area_struct *vma, if (mas_preallocate(mas, vma, GFP_KERNEL)) goto nomem; - vma_start_write(vma); vma_adjust_trans_huge(vma, start, end, 0); if (file) { @@ -743,8 +745,10 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start, if (adjust_next < 0) mas_set_range(&mas, next->vm_start + adjust_next, next->vm_end - 1); - else if (insert) + else if (insert) { + vma_start_write(insert); mas_set_range(&mas, insert->vm_start, insert->vm_end - 1); + } if (mas_preallocate(&mas, vma, GFP_KERNEL)) @@ -801,7 +805,8 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start, } if (end != vma->vm_end) { if (vma->vm_end > end) { - if (adjust_next >= 0 && !insert) { + if ((vma->vm_end + adjust_next != end) && + (!insert || (insert->vm_start != end))) { vma_mas_szero(&mas, end, vma->vm_end); mas_reset(&mas); VM_WARN_ON(insert && @@ -841,6 +846,7 @@ int __vma_adjust(struct vm_area_struct *vma, unsigned long start, * (it may either follow vma or precede it). */ mas_reset(&mas); + vma_start_write(insert); vma_mas_store(insert, &mas); mm->map_count++; } @@ -1988,7 +1994,7 @@ static int acct_stack_growth(struct vm_area_struct *vma, * PA-RISC uses this for its stack; IA64 for its Register Backing Store. * vma is the last one with address > vma->vm_end. Have to extend vma. */ -int expand_upwards(struct vm_area_struct *vma, unsigned long address) +static int expand_upwards(struct vm_area_struct *vma, unsigned long address) { struct mm_struct *mm = vma->vm_mm; struct vm_area_struct *next; @@ -2029,6 +2035,8 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) return -ENOMEM; } + /* Lock the VMA before expanding to prevent concurrent page faults */ + vma_start_write(vma); /* * vma->vm_start/vm_end cannot change under us because the caller * is required to hold the mmap_lock in read mode. We need the @@ -2080,6 +2088,7 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address) /* * vma is the first one with address < vma->vm_start. Have to extend vma. + * mmap_lock held for writing. */ int expand_downwards(struct vm_area_struct *vma, unsigned long address) { @@ -2088,16 +2097,20 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address) struct vm_area_struct *prev; int error = 0; + if (!(vma->vm_flags & VM_GROWSDOWN)) + return -EFAULT; + address &= PAGE_MASK; - if (address < mmap_min_addr) + if (address < mmap_min_addr || address < FIRST_USER_ADDRESS) return -EPERM; /* Enforce stack_guard_gap */ prev = mas_prev(&mas, 0); /* Check that both stack segments have the same anon_vma? */ - if (prev && !(prev->vm_flags & VM_GROWSDOWN) && - vma_is_accessible(prev)) { - if (address - prev->vm_end < stack_guard_gap) + if (prev) { + if (!(prev->vm_flags & VM_GROWSDOWN) && + vma_is_accessible(prev) && + (address - prev->vm_end < stack_guard_gap)) return -ENOMEM; } @@ -2111,6 +2124,8 @@ int expand_downwards(struct vm_area_struct *vma, unsigned long address) return -ENOMEM; } + /* Lock the VMA before expanding to prevent concurrent page faults */ + vma_start_write(vma); /* * vma->vm_start/vm_end cannot change under us because the caller * is required to hold the mmap_lock in read mode. We need the @@ -2177,13 +2192,12 @@ static int __init cmdline_parse_stack_guard_gap(char *p) __setup("stack_guard_gap=", cmdline_parse_stack_guard_gap); #ifdef CONFIG_STACK_GROWSUP -int expand_stack(struct vm_area_struct *vma, unsigned long address) +int expand_stack_locked(struct vm_area_struct *vma, unsigned long address) { return expand_upwards(vma, address); } -struct vm_area_struct * -find_extend_vma(struct mm_struct *mm, unsigned long addr) +struct vm_area_struct *find_extend_vma_locked(struct mm_struct *mm, unsigned long addr) { struct vm_area_struct *vma, *prev; @@ -2191,20 +2205,23 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr) vma = find_vma_prev(mm, addr, &prev); if (vma && (vma->vm_start <= addr)) return vma; - if (!prev || expand_stack(prev, addr)) + if (!prev) + return NULL; + if (expand_stack_locked(prev, addr)) return NULL; if (prev->vm_flags & VM_LOCKED) populate_vma_page_range(prev, addr, prev->vm_end, NULL); return prev; } #else -int expand_stack(struct vm_area_struct *vma, unsigned long address) +int expand_stack_locked(struct vm_area_struct *vma, unsigned long address) { + if (unlikely(!(vma->vm_flags & VM_GROWSDOWN))) + return -EINVAL; return expand_downwards(vma, address); } -struct vm_area_struct * -find_extend_vma(struct mm_struct *mm, unsigned long addr) +struct vm_area_struct *find_extend_vma_locked(struct mm_struct *mm, unsigned long addr) { struct vm_area_struct *vma; unsigned long start; @@ -2215,10 +2232,8 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr) return NULL; if (vma->vm_start <= addr) return vma; - if (!(vma->vm_flags & VM_GROWSDOWN)) - return NULL; start = vma->vm_start; - if (expand_stack(vma, addr)) + if (expand_stack_locked(vma, addr)) return NULL; if (vma->vm_flags & VM_LOCKED) populate_vma_page_range(vma, addr, start, NULL); @@ -2226,8 +2241,106 @@ find_extend_vma(struct mm_struct *mm, unsigned long addr) } #endif +/* + * ANDROID: Reintroduce find_extend_vma() as it's still used by some external + * modules. It was removed in commit 8d7071af8907 ("mm: always expand the + * stack with the mmap write lock held") + * In the future, everyone should just move to use the correct function instead + * of this old, legacy one. + */ +struct vm_area_struct *find_extend_vma(struct mm_struct *mm, + unsigned long addr) +{ + return find_extend_vma_locked(mm, addr); +} EXPORT_SYMBOL_GPL(find_extend_vma); +/* + * IA64 has some horrid mapping rules: it can expand both up and down, + * but with various special rules. + * + * We'll get rid of this architecture eventually, so the ugliness is + * temporary. + */ +#ifdef CONFIG_IA64 +static inline bool vma_expand_ok(struct vm_area_struct *vma, unsigned long addr) +{ + return REGION_NUMBER(addr) == REGION_NUMBER(vma->vm_start) && + REGION_OFFSET(addr) < RGN_MAP_LIMIT; +} + +/* + * IA64 stacks grow down, but there's a special register backing store + * that can grow up. Only sequentially, though, so the new address must + * match vm_end. + */ +static inline int vma_expand_up(struct vm_area_struct *vma, unsigned long addr) +{ + if (!vma_expand_ok(vma, addr)) + return -EFAULT; + if (vma->vm_end != (addr & PAGE_MASK)) + return -EFAULT; + return expand_upwards(vma, addr); +} + +static inline bool vma_expand_down(struct vm_area_struct *vma, unsigned long addr) +{ + if (!vma_expand_ok(vma, addr)) + return -EFAULT; + return expand_downwards(vma, addr); +} + +#elif defined(CONFIG_STACK_GROWSUP) + +#define vma_expand_up(vma,addr) expand_upwards(vma, addr) +#define vma_expand_down(vma, addr) (-EFAULT) + +#else + +#define vma_expand_up(vma,addr) (-EFAULT) +#define vma_expand_down(vma, addr) expand_downwards(vma, addr) + +#endif + +/* + * expand_stack(): legacy interface for page faulting. Don't use unless + * you have to. + * + * This is called with the mm locked for reading, drops the lock, takes + * the lock for writing, tries to look up a vma again, expands it if + * necessary, and downgrades the lock to reading again. + * + * If no vma is found or it can't be expanded, it returns NULL and has + * dropped the lock. + */ +struct vm_area_struct *expand_stack(struct mm_struct *mm, unsigned long addr) +{ + struct vm_area_struct *vma, *prev; + + mmap_read_unlock(mm); + if (mmap_write_lock_killable(mm)) + return NULL; + + vma = find_vma_prev(mm, addr, &prev); + if (vma && vma->vm_start <= addr) + goto success; + + if (prev && !vma_expand_up(prev, addr)) { + vma = prev; + goto success; + } + + if (vma && !vma_expand_down(vma, addr)) + goto success; + + mmap_write_unlock(mm); + return NULL; + +success: + mmap_write_downgrade(mm); + return vma; +} + /* * Ok - we have the memory areas we should free on a maple tree so release them, * and do the vma updates. @@ -2319,6 +2432,9 @@ int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma, if (new->vm_ops && new->vm_ops->open) new->vm_ops->open(new); + vma_start_write(vma); + vma_start_write(new); + if (new_below) err = vma_adjust(vma, addr, vma->vm_end, vma->vm_pgoff + ((addr - new->vm_start) >> PAGE_SHIFT), new); @@ -2359,21 +2475,6 @@ int split_vma(struct mm_struct *mm, struct vm_area_struct *vma, return __split_vma(mm, vma, addr, new_below); } -static inline int munmap_sidetree(struct vm_area_struct *vma, int count, - struct ma_state *mas_detach) -{ - vma_start_write(vma); - mas_set(mas_detach, count); - if (mas_store_gfp(mas_detach, vma, GFP_KERNEL)) - return -ENOMEM; - - vma_mark_detached(vma, true); - if (vma->vm_flags & VM_LOCKED) - vma->vm_mm->locked_vm -= vma_pages(vma); - - return 0; -} - /* * do_mas_align_munmap() - munmap the aligned region from @start to @end. * @mas: The maple_state, ideally set up to alter the correct tree location. @@ -2395,6 +2496,7 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, struct maple_tree mt_detach; int count = 0; int error = -ENOMEM; + unsigned long locked_vm = 0; MA_STATE(mas_detach, &mt_detach, 0, 0); mt_init_flags(&mt_detach, mas->tree->ma_flags & MT_FLAGS_LOCK_MASK); mt_set_external_lock(&mt_detach, &mm->mmap_lock); @@ -2450,18 +2552,28 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, mas_set(mas, end); split = mas_prev(mas, 0); - error = munmap_sidetree(split, count, &mas_detach); + vma_start_write(split); + mas_set(&mas_detach, count); + error = mas_store_gfp(&mas_detach, split, GFP_KERNEL); if (error) - goto munmap_sidetree_failed; + goto munmap_gather_failed; + vma_mark_detached(split, true); + if (split->vm_flags & VM_LOCKED) + locked_vm += vma_pages(split); count++; if (vma == next) vma = split; break; } - error = munmap_sidetree(next, count, &mas_detach); + vma_start_write(next); + mas_set(&mas_detach, count); + error = mas_store_gfp(&mas_detach, next, GFP_KERNEL); if (error) - goto munmap_sidetree_failed; + goto munmap_gather_failed; + vma_mark_detached(next, true); + if (next->vm_flags & VM_LOCKED) + locked_vm += vma_pages(next); count++; if (unlikely(uf)) { @@ -2519,6 +2631,7 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, if (mas_store_gfp(mas, NULL, GFP_KERNEL)) return -ENOMEM; + mm->locked_vm -= locked_vm; mm->map_count -= count; /* * Do not downgrade mmap_lock if we are next to VM_GROWSDOWN or @@ -2550,7 +2663,7 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, return downgrade ? 1 : 0; userfaultfd_error: -munmap_sidetree_failed: +munmap_gather_failed: end_split_failed: __mt_destroy(&mt_detach); start_split_failed: @@ -2795,6 +2908,8 @@ unsigned long mmap_region(struct file *file, unsigned long addr, goto free_vma; } + /* Lock the VMA since it is modified after insertion into VMA tree */ + vma_start_write(vma); if (vma->vm_file) i_mmap_lock_write(vma->vm_file->f_mapping); @@ -3096,6 +3211,7 @@ static int do_brk_flags(struct ma_state *mas, struct vm_area_struct *vma, vma->vm_pgoff = addr >> PAGE_SHIFT; vm_flags_init(vma, flags); vma->vm_page_prot = vm_get_page_prot(flags); + vma_start_write(vma); mas_set_range(mas, vma->vm_start, addr + len - 1); if (mas_store_gfp(mas, vma, GFP_KERNEL)) goto mas_store_fail; @@ -3342,7 +3458,6 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, get_file(new_vma->vm_file); if (new_vma->vm_ops && new_vma->vm_ops->open) new_vma->vm_ops->open(new_vma); - vma_start_write(new_vma); if (vma_link(mm, new_vma)) goto out_vma_link; *need_rmap_locks = false; @@ -3660,6 +3775,12 @@ int mm_take_all_locks(struct mm_struct *mm) mutex_lock(&mm_all_locks_mutex); + /* + * vma_start_write() does not have a complement in mm_drop_all_locks() + * because vma_start_write() is always asymmetrical; it marks a VMA as + * being written to until mmap_write_unlock() or mmap_write_downgrade() + * is reached. + */ mas_for_each(&mas, vma, ULONG_MAX) { if (signal_pending(current)) goto out_unlock; @@ -3756,7 +3877,6 @@ void mm_drop_all_locks(struct mm_struct *mm) if (vma->vm_file && vma->vm_file->f_mapping) vm_unlock_mapping(vma->vm_file->f_mapping); } - vma_end_write_all(mm); mutex_unlock(&mm_all_locks_mutex); } diff --git a/mm/mprotect.c b/mm/mprotect.c index 1b9198d38cdf..45a87f0ce625 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -542,6 +542,7 @@ static const struct mm_walk_ops prot_none_walk_ops = { .pte_entry = prot_none_pte_entry, .hugetlb_entry = prot_none_hugetlb_entry, .test_walk = prot_none_test, + .walk_lock = PGWALK_WRLOCK, }; int @@ -630,6 +631,7 @@ mprotect_fixup(struct mmu_gather *tlb, struct vm_area_struct *vma, * vm_flags and vm_page_prot are protected by the mmap_lock * held in write mode. */ + vma_start_write(vma); vm_flags_reset(vma, newflags); /* * We want to check manually if we can change individual PTEs writable diff --git a/mm/nommu.c b/mm/nommu.c index 14ffd4c668fe..30cc1228bd06 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -681,24 +681,21 @@ struct vm_area_struct *find_vma(struct mm_struct *mm, unsigned long addr) } EXPORT_SYMBOL(find_vma); -/* - * find a VMA - * - we don't extend stack VMAs under NOMMU conditions - */ -struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr) -{ - return find_vma(mm, addr); -} - /* * expand a stack to a given address * - not supported under NOMMU conditions */ -int expand_stack(struct vm_area_struct *vma, unsigned long address) +int expand_stack_locked(struct vm_area_struct *vma, unsigned long addr) { return -ENOMEM; } +struct vm_area_struct *expand_stack(struct mm_struct *mm, unsigned long addr) +{ + mmap_read_unlock(mm); + return NULL; +} + /* * look up the first VMA exactly that exactly matches addr * - should be called with mm->mmap_lock at least held readlocked diff --git a/mm/page_alloc.c b/mm/page_alloc.c index c6358579527e..d5ca46562e88 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -77,6 +77,7 @@ #include #include #include +#include #include #include @@ -2600,6 +2601,7 @@ static void prep_new_page(struct page *page, unsigned int order, gfp_t gfp_flags set_page_pfmemalloc(page); else clear_page_pfmemalloc(page); + trace_android_vh_test_clear_look_around_ref(page); } /* diff --git a/mm/pagewalk.c b/mm/pagewalk.c index 2ff3a5bebceb..d92c5b567837 100644 --- a/mm/pagewalk.c +++ b/mm/pagewalk.c @@ -384,6 +384,33 @@ static int __walk_page_range(unsigned long start, unsigned long end, return err; } +static inline void process_mm_walk_lock(struct mm_struct *mm, + enum page_walk_lock walk_lock) +{ + if (walk_lock == PGWALK_RDLOCK) + mmap_assert_locked(mm); + else + mmap_assert_write_locked(mm); +} + +static inline void process_vma_walk_lock(struct vm_area_struct *vma, + enum page_walk_lock walk_lock) +{ +#ifdef CONFIG_PER_VMA_LOCK + switch (walk_lock) { + case PGWALK_WRLOCK: + vma_start_write(vma); + break; + case PGWALK_WRLOCK_VERIFY: + vma_assert_write_locked(vma); + break; + case PGWALK_RDLOCK: + /* PGWALK_RDLOCK is handled by process_mm_walk_lock */ + break; + } +#endif +} + /** * walk_page_range - walk page table with caller specific callbacks * @mm: mm_struct representing the target process of page table walk @@ -443,7 +470,7 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, if (!walk.mm) return -EINVAL; - mmap_assert_locked(walk.mm); + process_mm_walk_lock(walk.mm, ops->walk_lock); vma = find_vma(walk.mm, start); do { @@ -458,6 +485,7 @@ int walk_page_range(struct mm_struct *mm, unsigned long start, if (ops->pte_hole) err = ops->pte_hole(start, next, -1, &walk); } else { /* inside vma */ + process_vma_walk_lock(vma, ops->walk_lock); walk.vma = vma; next = min(end, vma->vm_end); vma = find_vma(mm, vma->vm_end); @@ -531,7 +559,8 @@ int walk_page_vma(struct vm_area_struct *vma, const struct mm_walk_ops *ops, if (!walk.mm) return -EINVAL; - mmap_assert_locked(walk.mm); + process_mm_walk_lock(walk.mm, ops->walk_lock); + process_vma_walk_lock(vma, ops->walk_lock); err = walk_page_test(vma->vm_start, vma->vm_end, &walk); if (err > 0) diff --git a/mm/rmap.c b/mm/rmap.c index 9cf4f09cd71d..d1603eb79818 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -826,6 +826,7 @@ static bool folio_referenced_one(struct folio *folio, } if (pvmw.pte) { + trace_android_vh_look_around(&pvmw, folio, vma, &referenced); if (lru_gen_enabled() && pte_young(*pvmw.pte)) { lru_gen_look_around(&pvmw); referenced++; diff --git a/mm/swap.h b/mm/swap.h index cc08c459c619..9ad061576192 100644 --- a/mm/swap.h +++ b/mm/swap.h @@ -46,7 +46,6 @@ struct page *find_get_incore_page(struct address_space *mapping, pgoff_t index); struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, unsigned long addr, - bool do_poll, struct swap_iocb **plug); struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, diff --git a/mm/swap_state.c b/mm/swap_state.c index 438d0676c5be..3e7db8ea40f3 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c @@ -515,15 +515,14 @@ struct page *__read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, */ struct page *read_swap_cache_async(swp_entry_t entry, gfp_t gfp_mask, struct vm_area_struct *vma, - unsigned long addr, bool do_poll, - struct swap_iocb **plug) + unsigned long addr, struct swap_iocb **plug) { bool page_was_allocated; struct page *retpage = __read_swap_cache_async(entry, gfp_mask, vma, addr, &page_was_allocated); if (page_was_allocated) - swap_readpage(retpage, do_poll, plug); + swap_readpage(retpage, false, plug); return retpage; } @@ -618,7 +617,7 @@ struct page *swap_cluster_readahead(swp_entry_t entry, gfp_t gfp_mask, struct swap_info_struct *si = swp_swap_info(entry); struct blk_plug plug; struct swap_iocb *splug = NULL; - bool do_poll = true, page_allocated; + bool page_allocated; struct vm_area_struct *vma = vmf->vma; unsigned long addr = vmf->address; @@ -626,7 +625,6 @@ struct page *swap_cluster_readahead(swp_entry_t entry, gfp_t gfp_mask, if (!mask) goto skip; - do_poll = false; /* Read a page_cluster sized and aligned cluster around offset. */ start_offset = offset & ~mask; end_offset = offset | mask; @@ -658,7 +656,7 @@ struct page *swap_cluster_readahead(swp_entry_t entry, gfp_t gfp_mask, lru_add_drain(); /* Push any new pages onto the LRU now */ skip: /* The page was likely read above, so no need for plugging here */ - return read_swap_cache_async(entry, gfp_mask, vma, addr, do_poll, NULL); + return read_swap_cache_async(entry, gfp_mask, vma, addr, NULL); } int init_swap_address_space(unsigned int type, unsigned long nr_pages) @@ -832,7 +830,7 @@ static struct page *swap_vma_readahead(swp_entry_t fentry, gfp_t gfp_mask, skip: /* The page was likely read above, so no need for plugging here */ return read_swap_cache_async(fentry, gfp_mask, vma, vmf->address, - ra_info.win == 1, NULL); + NULL); } /** diff --git a/mm/vmscan.c b/mm/vmscan.c index cfde79671c01..b12f027ff098 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -1468,6 +1468,11 @@ static enum folio_references folio_check_references(struct folio *folio, { int referenced_ptes, referenced_folio; unsigned long vm_flags; + int ret = 0; + + trace_android_vh_check_folio_look_around_ref(folio, &ret); + if (ret) + return ret; referenced_ptes = folio_referenced(folio, 1, sc->target_mem_cgroup, &vm_flags); @@ -2176,6 +2181,25 @@ static __always_inline void update_lru_sizes(struct lruvec *lruvec, } +#ifdef CONFIG_CMA +/* + * It is waste of effort to scan and reclaim CMA pages if it is not available + * for current allocation context. Kswapd can not be enrolled as it can not + * distinguish this scenario by using sc->gfp_mask = GFP_KERNEL + */ +static bool skip_cma(struct folio *folio, struct scan_control *sc) +{ + return !current_is_kswapd() && + gfp_migratetype(sc->gfp_mask) != MIGRATE_MOVABLE && + get_pageblock_migratetype(&folio->page) == MIGRATE_CMA; +} +#else +static bool skip_cma(struct folio *folio, struct scan_control *sc) +{ + return false; +} +#endif + /* * Isolating page from the lruvec to fill in @dst list by nr_to_scan times. * @@ -2222,7 +2246,8 @@ static unsigned long isolate_lru_folios(unsigned long nr_to_scan, nr_pages = folio_nr_pages(folio); total_scan += nr_pages; - if (folio_zonenum(folio) > sc->reclaim_idx) { + if (folio_zonenum(folio) > sc->reclaim_idx || + skip_cma(folio, sc)) { nr_skipped[folio_zonenum(folio)] += nr_pages; move_to = &folios_skipped; goto move; @@ -3015,6 +3040,7 @@ static void get_scan_count(struct lruvec *lruvec, struct scan_control *sc, fraction[1] = fp; denominator = ap + fp; out: + trace_android_vh_tune_scan_type(&scan_balance); for_each_evictable_lru(lru) { int file = is_file_lru(lru); unsigned long lruvec_size; @@ -4188,6 +4214,7 @@ static void walk_mm(struct lruvec *lruvec, struct mm_struct *mm, struct lru_gen_ static const struct mm_walk_ops mm_walk_ops = { .test_walk = should_skip_vma, .p4d_entry = walk_pud_range, + .walk_lock = PGWALK_RDLOCK, }; int err; @@ -4343,7 +4370,7 @@ static void inc_max_seq(struct lruvec *lruvec, bool can_swap, bool force_scan) int prev, next; int type, zone; struct lru_gen_folio *lrugen = &lruvec->lrugen; - +restart: spin_lock_irq(&lruvec->lru_lock); VM_WARN_ON_ONCE(!seq_is_valid(lruvec)); @@ -4354,11 +4381,12 @@ static void inc_max_seq(struct lruvec *lruvec, bool can_swap, bool force_scan) VM_WARN_ON_ONCE(!force_scan && (type == LRU_GEN_FILE || can_swap)); - while (!inc_min_seq(lruvec, type, can_swap)) { - spin_unlock_irq(&lruvec->lru_lock); - cond_resched(); - spin_lock_irq(&lruvec->lru_lock); - } + if (inc_min_seq(lruvec, type, can_swap)) + continue; + + spin_unlock_irq(&lruvec->lru_lock); + cond_resched(); + goto restart; } /* @@ -4559,6 +4587,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk *pvmw) pte_t *pte = pvmw->pte; unsigned long addr = pvmw->address; struct folio *folio = pfn_folio(pvmw->pfn); + bool can_swap = !folio_is_file_lru(folio); struct mem_cgroup *memcg = folio_memcg(folio); struct pglist_data *pgdat = folio_pgdat(folio); struct lruvec *lruvec = mem_cgroup_lruvec(memcg, pgdat); @@ -4606,7 +4635,7 @@ void lru_gen_look_around(struct page_vma_mapped_walk *pvmw) if (!pte_young(pte[i])) continue; - folio = get_pfn_folio(pfn, memcg, pgdat, !walk || walk->can_swap); + folio = get_pfn_folio(pfn, memcg, pgdat, can_swap); if (!folio) continue; @@ -4841,7 +4870,7 @@ static bool sort_folio(struct lruvec *lruvec, struct folio *folio, struct scan_c } /* ineligible */ - if (zone > sc->reclaim_idx) { + if (zone > sc->reclaim_idx || skip_cma(folio, sc)) { gen = folio_inc_gen(lruvec, folio, false); list_move_tail(&folio->lru, &lrugen->folios[gen][type][zone]); return true; diff --git a/net/can/isotp.c b/net/can/isotp.c index 5761d4ab839d..82280ac70df9 100644 --- a/net/can/isotp.c +++ b/net/can/isotp.c @@ -1079,8 +1079,9 @@ static int isotp_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) if (err) goto err_event_drop; - if (sk->sk_err) - return -sk->sk_err; + err = sock_error(sk); + if (err) + return err; } return size; diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index 7a2cc24e9a33..ea2216826e11 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -195,6 +195,48 @@ static void nft_set_trans_bind(const struct nft_ctx *ctx, struct nft_set *set) } } +static void nft_chain_trans_bind(const struct nft_ctx *ctx, struct nft_chain *chain) +{ + struct nftables_pernet *nft_net; + struct net *net = ctx->net; + struct nft_trans *trans; + + if (!nft_chain_binding(chain)) + return; + + nft_net = nft_pernet(net); + list_for_each_entry_reverse(trans, &nft_net->commit_list, list) { + switch (trans->msg_type) { + case NFT_MSG_NEWCHAIN: + if (nft_trans_chain(trans) == chain) + nft_trans_chain_bound(trans) = true; + break; + case NFT_MSG_NEWRULE: + if (trans->ctx.chain == chain) + nft_trans_rule_bound(trans) = true; + break; + } + } +} + +int nf_tables_bind_chain(const struct nft_ctx *ctx, struct nft_chain *chain) +{ + if (!nft_chain_binding(chain)) + return 0; + + if (nft_chain_binding(ctx->chain)) + return -EOPNOTSUPP; + + if (chain->bound) + return -EBUSY; + + chain->bound = true; + chain->use++; + nft_chain_trans_bind(ctx, chain); + + return 0; +} + static int nft_netdev_register_hooks(struct net *net, struct list_head *hook_list) { @@ -340,8 +382,9 @@ static struct nft_trans *nft_trans_chain_add(struct nft_ctx *ctx, int msg_type) ntohl(nla_get_be32(ctx->nla[NFTA_CHAIN_ID])); } } - + nft_trans_chain(trans) = ctx->chain; nft_trans_commit_list_add_tail(ctx->net, trans); + return trans; } @@ -359,8 +402,7 @@ static int nft_delchain(struct nft_ctx *ctx) return 0; } -static void nft_rule_expr_activate(const struct nft_ctx *ctx, - struct nft_rule *rule) +void nft_rule_expr_activate(const struct nft_ctx *ctx, struct nft_rule *rule) { struct nft_expr *expr; @@ -373,9 +415,8 @@ static void nft_rule_expr_activate(const struct nft_ctx *ctx, } } -static void nft_rule_expr_deactivate(const struct nft_ctx *ctx, - struct nft_rule *rule, - enum nft_trans_phase phase) +void nft_rule_expr_deactivate(const struct nft_ctx *ctx, struct nft_rule *rule, + enum nft_trans_phase phase) { struct nft_expr *expr; @@ -2188,7 +2229,7 @@ static int nft_basechain_init(struct nft_base_chain *basechain, u8 family, return 0; } -static int nft_chain_add(struct nft_table *table, struct nft_chain *chain) +int nft_chain_add(struct nft_table *table, struct nft_chain *chain) { int err; @@ -3315,8 +3356,7 @@ static int nf_tables_getrule(struct sk_buff *skb, const struct nfnl_info *info, return err; } -static void nf_tables_rule_destroy(const struct nft_ctx *ctx, - struct nft_rule *rule) +void nf_tables_rule_destroy(const struct nft_ctx *ctx, struct nft_rule *rule) { struct nft_expr *expr, *next; @@ -3333,7 +3373,7 @@ static void nf_tables_rule_destroy(const struct nft_ctx *ctx, kfree(rule); } -void nf_tables_rule_release(const struct nft_ctx *ctx, struct nft_rule *rule) +static void nf_tables_rule_release(const struct nft_ctx *ctx, struct nft_rule *rule) { nft_rule_expr_deactivate(ctx, rule, NFT_TRANS_RELEASE); nf_tables_rule_destroy(ctx, rule); @@ -3760,6 +3800,8 @@ static int nf_tables_delrule(struct sk_buff *skb, const struct nfnl_info *info, list_for_each_entry(chain, &table->chains, list) { if (!nft_is_active_next(net, chain)) continue; + if (nft_chain_is_bound(chain)) + continue; ctx.chain = chain; err = nft_delrule_by_chain(&ctx); @@ -6447,7 +6489,6 @@ static int nf_tables_newsetelem(struct sk_buff *skb, void nft_data_hold(const struct nft_data *data, enum nft_data_types type) { struct nft_chain *chain; - struct nft_rule *rule; if (type == NFT_DATA_VERDICT) { switch (data->verdict.code) { @@ -6455,15 +6496,6 @@ void nft_data_hold(const struct nft_data *data, enum nft_data_types type) case NFT_GOTO: chain = data->verdict.chain; chain->use++; - - if (!nft_chain_is_bound(chain)) - break; - - chain->table->use++; - list_for_each_entry(rule, &chain->rules, list) - chain->use++; - - nft_chain_add(chain->table, chain); break; } } @@ -9325,7 +9357,7 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action) kfree(nft_trans_chain_name(trans)); nft_trans_destroy(trans); } else { - if (nft_chain_is_bound(trans->ctx.chain)) { + if (nft_trans_chain_bound(trans)) { nft_trans_destroy(trans); break; } @@ -9342,6 +9374,10 @@ static int __nf_tables_abort(struct net *net, enum nfnl_abort_action action) nft_trans_destroy(trans); break; case NFT_MSG_NEWRULE: + if (nft_trans_rule_bound(trans)) { + nft_trans_destroy(trans); + break; + } trans->ctx.chain->use--; list_del_rcu(&nft_trans_rule(trans)->list); nft_rule_expr_deactivate(&trans->ctx, @@ -9893,22 +9929,12 @@ static int nft_verdict_init(const struct nft_ctx *ctx, struct nft_data *data, static void nft_verdict_uninit(const struct nft_data *data) { struct nft_chain *chain; - struct nft_rule *rule; switch (data->verdict.code) { case NFT_JUMP: case NFT_GOTO: chain = data->verdict.chain; chain->use--; - - if (!nft_chain_is_bound(chain)) - break; - - chain->table->use--; - list_for_each_entry(rule, &chain->rules, list) - chain->use--; - - nft_chain_del(chain); break; } } diff --git a/net/netfilter/nft_immediate.c b/net/netfilter/nft_immediate.c index 5f28b21abc7d..457fc1e21841 100644 --- a/net/netfilter/nft_immediate.c +++ b/net/netfilter/nft_immediate.c @@ -76,11 +76,9 @@ static int nft_immediate_init(const struct nft_ctx *ctx, switch (priv->data.verdict.code) { case NFT_JUMP: case NFT_GOTO: - if (nft_chain_is_bound(chain)) { - err = -EBUSY; - goto err1; - } - chain->bound = true; + err = nf_tables_bind_chain(ctx, chain); + if (err < 0) + return err; break; default: break; @@ -98,6 +96,31 @@ static void nft_immediate_activate(const struct nft_ctx *ctx, const struct nft_expr *expr) { const struct nft_immediate_expr *priv = nft_expr_priv(expr); + const struct nft_data *data = &priv->data; + struct nft_ctx chain_ctx; + struct nft_chain *chain; + struct nft_rule *rule; + + if (priv->dreg == NFT_REG_VERDICT) { + switch (data->verdict.code) { + case NFT_JUMP: + case NFT_GOTO: + chain = data->verdict.chain; + if (!nft_chain_binding(chain)) + break; + + chain_ctx = *ctx; + chain_ctx.chain = chain; + + list_for_each_entry(rule, &chain->rules, list) + nft_rule_expr_activate(&chain_ctx, rule); + + nft_clear(ctx->net, chain); + break; + default: + break; + } + } return nft_data_hold(&priv->data, nft_dreg_to_type(priv->dreg)); } @@ -107,6 +130,40 @@ static void nft_immediate_deactivate(const struct nft_ctx *ctx, enum nft_trans_phase phase) { const struct nft_immediate_expr *priv = nft_expr_priv(expr); + const struct nft_data *data = &priv->data; + struct nft_ctx chain_ctx; + struct nft_chain *chain; + struct nft_rule *rule; + + if (priv->dreg == NFT_REG_VERDICT) { + switch (data->verdict.code) { + case NFT_JUMP: + case NFT_GOTO: + chain = data->verdict.chain; + if (!nft_chain_binding(chain)) + break; + + chain_ctx = *ctx; + chain_ctx.chain = chain; + + list_for_each_entry(rule, &chain->rules, list) + nft_rule_expr_deactivate(&chain_ctx, rule, phase); + + switch (phase) { + case NFT_TRANS_PREPARE: + nft_deactivate_next(ctx->net, chain); + break; + default: + nft_chain_del(chain); + chain->bound = false; + chain->table->use--; + break; + } + break; + default: + break; + } + } if (phase == NFT_TRANS_COMMIT) return; @@ -131,15 +188,27 @@ static void nft_immediate_destroy(const struct nft_ctx *ctx, case NFT_GOTO: chain = data->verdict.chain; - if (!nft_chain_is_bound(chain)) + if (!nft_chain_binding(chain)) break; + /* Rule construction failed, but chain is already bound: + * let the transaction records release this chain and its rules. + */ + if (chain->bound) { + chain->use--; + break; + } + + /* Rule has been deleted, release chain and its rules. */ chain_ctx = *ctx; chain_ctx.chain = chain; - list_for_each_entry_safe(rule, n, &chain->rules, list) - nf_tables_rule_release(&chain_ctx, rule); - + chain->use--; + list_for_each_entry_safe(rule, n, &chain->rules, list) { + chain->use--; + list_del(&rule->list); + nf_tables_rule_destroy(&chain_ctx, rule); + } nf_tables_chain_destroy(&chain_ctx); break; default: diff --git a/net/netfilter/nft_set_pipapo.c b/net/netfilter/nft_set_pipapo.c index 06d46d182634..4b79df6ecf6c 100644 --- a/net/netfilter/nft_set_pipapo.c +++ b/net/netfilter/nft_set_pipapo.c @@ -1908,7 +1908,11 @@ static void nft_pipapo_remove(const struct net *net, const struct nft_set *set, int i, start, rules_fx; match_start = data; - match_end = (const u8 *)nft_set_ext_key_end(&e->ext)->data; + + if (nft_set_ext_exists(&e->ext, NFT_SET_EXT_KEY_END)) + match_end = (const u8 *)nft_set_ext_key_end(&e->ext)->data; + else + match_end = data; start = first_rule; rules_fx = rules_f0; diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c index a32351da968c..1212b057b129 100644 --- a/net/sched/cls_fw.c +++ b/net/sched/cls_fw.c @@ -210,11 +210,6 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp, if (err < 0) return err; - if (tb[TCA_FW_CLASSID]) { - f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]); - tcf_bind_filter(tp, &f->res, base); - } - if (tb[TCA_FW_INDEV]) { int ret; ret = tcf_change_indev(net, tb[TCA_FW_INDEV], extack); @@ -231,6 +226,11 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp, } else if (head->mask != 0xFFFFFFFF) return err; + if (tb[TCA_FW_CLASSID]) { + f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]); + tcf_bind_filter(tp, &f->res, base); + } + return 0; } diff --git a/net/sched/sch_qfq.c b/net/sched/sch_qfq.c index 02098a02943e..d5610e145da2 100644 --- a/net/sched/sch_qfq.c +++ b/net/sched/sch_qfq.c @@ -113,6 +113,7 @@ #define QFQ_MTU_SHIFT 16 /* to support TSO/GSO */ #define QFQ_MIN_LMAX 512 /* see qfq_slot_insert */ +#define QFQ_MAX_LMAX (1UL << QFQ_MTU_SHIFT) #define QFQ_MAX_AGG_CLASSES 8 /* max num classes per aggregate allowed */ @@ -214,9 +215,14 @@ static struct qfq_class *qfq_find_class(struct Qdisc *sch, u32 classid) return container_of(clc, struct qfq_class, common); } +static struct netlink_range_validation lmax_range = { + .min = QFQ_MIN_LMAX, + .max = QFQ_MAX_LMAX, +}; + static const struct nla_policy qfq_policy[TCA_QFQ_MAX + 1] = { - [TCA_QFQ_WEIGHT] = { .type = NLA_U32 }, - [TCA_QFQ_LMAX] = { .type = NLA_U32 }, + [TCA_QFQ_WEIGHT] = NLA_POLICY_RANGE(NLA_U32, 1, QFQ_MAX_WEIGHT), + [TCA_QFQ_LMAX] = NLA_POLICY_FULL_RANGE(NLA_U32, &lmax_range), }; /* @@ -375,8 +381,13 @@ static int qfq_change_agg(struct Qdisc *sch, struct qfq_class *cl, u32 weight, u32 lmax) { struct qfq_sched *q = qdisc_priv(sch); - struct qfq_aggregate *new_agg = qfq_find_agg(q, lmax, weight); + struct qfq_aggregate *new_agg; + /* 'lmax' can range from [QFQ_MIN_LMAX, pktlen + stab overhead] */ + if (lmax > QFQ_MAX_LMAX) + return -EINVAL; + + new_agg = qfq_find_agg(q, lmax, weight); if (new_agg == NULL) { /* create new aggregate */ new_agg = kzalloc(sizeof(*new_agg), GFP_ATOMIC); if (new_agg == NULL) @@ -408,17 +419,13 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, } err = nla_parse_nested_deprecated(tb, TCA_QFQ_MAX, tca[TCA_OPTIONS], - qfq_policy, NULL); + qfq_policy, extack); if (err < 0) return err; - if (tb[TCA_QFQ_WEIGHT]) { + if (tb[TCA_QFQ_WEIGHT]) weight = nla_get_u32(tb[TCA_QFQ_WEIGHT]); - if (!weight || weight > (1UL << QFQ_MAX_WSHIFT)) { - pr_notice("qfq: invalid weight %u\n", weight); - return -EINVAL; - } - } else + else weight = 1; if (tb[TCA_QFQ_LMAX]) @@ -426,11 +433,6 @@ static int qfq_change_class(struct Qdisc *sch, u32 classid, u32 parentid, else lmax = psched_mtu(qdisc_dev(sch)); - if (lmax < QFQ_MIN_LMAX || lmax > (1UL << QFQ_MTU_SHIFT)) { - pr_notice("qfq: invalid max length %u\n", lmax); - return -EINVAL; - } - inv_w = ONE_FP / weight; weight = ONE_FP / inv_w; diff --git a/scripts/gen_gki_modules_headers.sh b/scripts/gen_gki_modules_headers.sh index 3aa221a058f4..ca435f49b62f 100755 --- a/scripts/gen_gki_modules_headers.sh +++ b/scripts/gen_gki_modules_headers.sh @@ -108,7 +108,7 @@ if [ "$(basename "${TARGET}")" = "gki_module_unprotected.h" ]; then generate_header "${TARGET}" "${GKI_VENDOR_SYMBOLS}" "unprotected" else # Sorted list of exported symbols - GKI_EXPORTED_SYMBOLS="${objtree}/abi_gki_protected_exports" + GKI_EXPORTED_SYMBOLS="include/config/abi_gki_protected_exports" if [ -z "${SYMBOL_LIST}" ]; then # Create empty list if ARCH doesn't have protected exports diff --git a/tools/testing/selftests/filesystems/fuse/fuse_test.c b/tools/testing/selftests/filesystems/fuse/fuse_test.c index bdb70e23b349..0bf1f030cbcd 100644 --- a/tools/testing/selftests/filesystems/fuse/fuse_test.c +++ b/tools/testing/selftests/filesystems/fuse/fuse_test.c @@ -1345,7 +1345,6 @@ static int flock_test(const char *mount_dir) int fuse_dev = -1; int fd = -1, fd2 = -1; int backing_fd = -1; - char *addr = NULL; TEST(src_fd = open(ft_src, O_DIRECTORY | O_RDONLY | O_CLOEXEC), src_fd != -1); @@ -2010,6 +2009,44 @@ static int bpf_test_lookup_postfilter(const char *mount_dir) return result; } +/** + * Test that a file made via create_and_open correctly gets the bpf assigned + * from the negative lookup + * bpf blocks file open, but also removes itself from children + * This test will fail if the 'remove' is unsuccessful + */ +static int bpf_test_create_and_remove_bpf(const char *mount_dir) +{ + const char *file = "file"; + + int result = TEST_FAILURE; + int src_fd = -1; + int bpf_fd = -1; + int fuse_dev = -1; + int fd = -1; + int fd2 = -1; + + TEST(src_fd = open(ft_src, O_DIRECTORY | O_RDONLY | O_CLOEXEC), + src_fd != -1); + TESTEQUAL(install_elf_bpf("test_bpf.bpf", "test_create_remove", &bpf_fd, + NULL, NULL), 0); + TESTEQUAL(mount_fuse_no_init(mount_dir, bpf_fd, src_fd, &fuse_dev), 0); + TEST(fd = s_creat(s_path(s(mount_dir), s(file)), 0777), + fd != -1); + TEST(fd2 = s_open(s_path(s(mount_dir), s(file)), O_RDONLY), + fd2 != -1); + + result = TEST_SUCCESS; +out: + close(fd2); + close(fd); + close(fuse_dev); + close(bpf_fd); + close(src_fd); + umount(mount_dir); + return result; +} + static void parse_range(const char *ranges, bool *run_test, size_t tests) { size_t i; @@ -2137,6 +2174,7 @@ int main(int argc, char *argv[]) MAKE_TEST(bpf_test_revalidate_handle_backing_fd), MAKE_TEST(bpf_test_lookup_postfilter), MAKE_TEST(flock_test), + MAKE_TEST(bpf_test_create_and_remove_bpf), }; #undef MAKE_TEST diff --git a/tools/testing/selftests/filesystems/fuse/test_bpf.c b/tools/testing/selftests/filesystems/fuse/test_bpf.c index 032cb1178f9f..e02bdb4a9380 100644 --- a/tools/testing/selftests/filesystems/fuse/test_bpf.c +++ b/tools/testing/selftests/filesystems/fuse/test_bpf.c @@ -505,3 +505,29 @@ int lookuppostfilter_test(struct fuse_bpf_args *fa) return FUSE_BPF_BACKING; } } + +SEC("test_create_remove") +int createremovebpf_test(struct fuse_bpf_args *fa) +{ + switch (fa->opcode) { + case FUSE_LOOKUP | FUSE_PREFILTER: { + return FUSE_BPF_BACKING | FUSE_BPF_POST_FILTER; + } + + case FUSE_LOOKUP | FUSE_POSTFILTER: { + struct fuse_entry_bpf_out *febo = fa->out_args[1].value; + + febo->bpf_action = FUSE_ACTION_REMOVE; + return 0; + } + + case FUSE_OPEN | FUSE_PREFILTER: { + return -EIO; + } + + default: + return FUSE_BPF_BACKING; + } +} + +