diff --git a/BUILD.bazel b/BUILD.bazel index 1c1dc8627744..c420fcb3b3e8 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -99,16 +99,20 @@ filegroup( name = "aarch64_additional_kmi_symbol_lists", srcs = [ # keep sorted + "android/abi_gki_aarch64_asr", "android/abi_gki_aarch64_asus", "android/abi_gki_aarch64_db845c", "android/abi_gki_aarch64_exynos", "android/abi_gki_aarch64_exynosauto", "android/abi_gki_aarch64_galaxy", + "android/abi_gki_aarch64_honda", "android/abi_gki_aarch64_honor", "android/abi_gki_aarch64_imx", "android/abi_gki_aarch64_meizu", "android/abi_gki_aarch64_mtk", + "android/abi_gki_aarch64_nothing", "android/abi_gki_aarch64_oplus", + "android/abi_gki_aarch64_pasa", "android/abi_gki_aarch64_pixel", "android/abi_gki_aarch64_qcom", "android/abi_gki_aarch64_rockchip", diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index c87f9417d954..18bc322f2724 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -4882,6 +4882,11 @@ rcu_node tree with an eye towards determining why a new grace period has not yet started. + rcutree.enable_rcu_lazy= [KNL] + To save power, batch RCU callbacks and flush after + delay, memory pressure or callback list growing too + big. + rcuscale.gp_async= [KNL] Measure performance of asynchronous grace-period primitives such as call_rcu(). @@ -5130,6 +5135,21 @@ rcutorture.verbose= [KNL] Enable additional printk() statements. + rcupdate.rcu_boot_end_delay= [KNL] + Minimum time in milliseconds from the start of boot + that must elapse before the boot sequence can be marked + complete from RCU's perspective, after which RCU's + behavior becomes more relaxed. The default value is also + configurable via CONFIG_RCU_BOOT_END_DELAY. + Userspace can also mark the boot as completed + sooner by writing the time in milliseconds, say once + userspace considers the system as booted, to: + /sys/module/rcupdate/parameters/rcu_boot_end_delay + Or even just writing a value of 0 to this sysfs node. + The sysfs node can also be used to extend the delay + to be larger than the default, assuming the marking + of boot complete has not yet occurred. + rcupdate.rcu_cpu_stall_ftrace_dump= [KNL] Dump ftrace buffer after reporting RCU CPU stall warning. diff --git a/Documentation/arm64/silicon-errata.rst b/Documentation/arm64/silicon-errata.rst index e252004fb8b7..ebd457a4971b 100644 --- a/Documentation/arm64/silicon-errata.rst +++ b/Documentation/arm64/silicon-errata.rst @@ -217,3 +217,7 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Fujitsu | A64FX | E#010001 | FUJITSU_ERRATUM_010001 | +----------------+-----------------+-----------------+-----------------------------+ + ++----------------+-----------------+-----------------+-----------------------------+ +| ASR | ASR8601 | #8601001 | N/A | ++----------------+-----------------+-----------------+-----------------------------+ diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 3d98b0fbbf01..9c364f866934 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -183,6 +183,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x28e34a3d } +pointer_reference { + id: 0x00b27c00 + kind: POINTER + pointee_type_id: 0x2889169c +} pointer_reference { id: 0x00b7947f kind: POINTER @@ -2563,6 +2568,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x0f8cb195 } +pointer_reference { + id: 0x09793771 + kind: POINTER + pointee_type_id: 0x0fa43b5b +} pointer_reference { id: 0x097a80cb kind: POINTER @@ -3403,6 +3413,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1a8afd70 } +pointer_reference { + id: 0x0c32f89e + kind: POINTER + pointee_type_id: 0x1a8b04e5 +} pointer_reference { id: 0x0c337849 kind: POINTER @@ -4028,6 +4043,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x18bd6530 } +pointer_reference { + id: 0x0cc07624 + kind: POINTER + pointee_type_id: 0x19413e0d +} pointer_reference { id: 0x0cc2a6e7 kind: POINTER @@ -4413,6 +4433,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1e388fbe } +pointer_reference { + id: 0x0d1e2386 + kind: POINTER + pointee_type_id: 0x1e386887 +} pointer_reference { id: 0x0d1ea752 kind: POINTER @@ -5208,6 +5233,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x1cf53808 } +pointer_reference { + id: 0x0dae372d + kind: POINTER + pointee_type_id: 0x1cf83a2a +} pointer_reference { id: 0x0daecbaf kind: POINTER @@ -6788,6 +6818,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x165365f0 } +pointer_reference { + id: 0x0f04e485 + kind: POINTER + pointee_type_id: 0x16537488 +} pointer_reference { id: 0x0f04e7c1 kind: POINTER @@ -7928,6 +7963,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x6b752d98 } +pointer_reference { + id: 0x10504678 + kind: POINTER + pointee_type_id: 0x6b01ff7f +} pointer_reference { id: 0x105b358b kind: POINTER @@ -8103,6 +8143,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x6f28a54f } +pointer_reference { + id: 0x115cc476 + kind: POINTER + pointee_type_id: 0x6f33f746 +} pointer_reference { id: 0x115dc206 kind: POINTER @@ -8923,6 +8968,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x7c95d721 } +pointer_reference { + id: 0x15c24728 + kind: POINTER + pointee_type_id: 0x7d49fa3c +} pointer_reference { id: 0x15c389f6 kind: POINTER @@ -12373,6 +12423,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xbe42b117 } +pointer_reference { + id: 0x2511a6f5 + kind: POINTER + pointee_type_id: 0xbe067d4b +} pointer_reference { id: 0x2524545c kind: POINTER @@ -12873,6 +12928,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xb4f4f790 } +pointer_reference { + id: 0x27b13952 + kind: POINTER + pointee_type_id: 0xb48403d5 +} pointer_reference { id: 0x27b5ed37 kind: POINTER @@ -14268,6 +14328,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9b4af141 } +pointer_reference { + id: 0x2c42c82a + kind: POINTER + pointee_type_id: 0x9b4bc634 +} pointer_reference { id: 0x2c42cb6e kind: POINTER @@ -14278,6 +14343,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9b4bd74c } +pointer_reference { + id: 0x2c42fa17 + kind: POINTER + pointee_type_id: 0x9b4b0ec1 +} pointer_reference { id: 0x2c436299 kind: POINTER @@ -14448,6 +14518,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9b74c720 } +pointer_reference { + id: 0x2c4d46ea + kind: POINTER + pointee_type_id: 0x9b75fd34 +} pointer_reference { id: 0x2c4d6bfe kind: POINTER @@ -19383,6 +19458,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9352af9c } +pointer_reference { + id: 0x2e4676b7 + kind: POINTER + pointee_type_id: 0x93593c41 +} pointer_reference { id: 0x2e477ad3 kind: POINTER @@ -20538,6 +20618,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x91cfc9b1 } +pointer_reference { + id: 0x2ee404a5 + kind: POINTER + pointee_type_id: 0x91d0f40b +} pointer_reference { id: 0x2ee5b68c kind: POINTER @@ -22408,6 +22493,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeabee0bd } +pointer_reference { + id: 0x303f837b + kind: POINTER + pointee_type_id: 0xeabeeb71 +} pointer_reference { id: 0x30408c71 kind: POINTER @@ -22863,6 +22953,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeebb2bcf } +pointer_reference { + id: 0x31405c92 + kind: POINTER + pointee_type_id: 0xef4194d4 +} pointer_reference { id: 0x31433284 kind: POINTER @@ -22938,6 +23033,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xefa4cae6 } +pointer_reference { + id: 0x3181aee5 + kind: POINTER + pointee_type_id: 0xec465d0b +} pointer_reference { id: 0x31829648 kind: POINTER @@ -24413,6 +24513,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf87f5460 } +pointer_reference { + id: 0x3490b2d2 + kind: POINTER + pointee_type_id: 0xf8022dd7 +} pointer_reference { id: 0x3491860b kind: POINTER @@ -25433,6 +25538,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf1214399 } +pointer_reference { + id: 0x36dc02f2 + kind: POINTER + pointee_type_id: 0xf130ed57 +} pointer_reference { id: 0x36dc9e6f kind: POINTER @@ -25508,6 +25618,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xf1938ae0 } +pointer_reference { + id: 0x36f8a731 + kind: POINTER + pointee_type_id: 0xf1a27a59 +} pointer_reference { id: 0x36f98e5c kind: POINTER @@ -26608,6 +26723,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcebcf7b7 } +pointer_reference { + id: 0x3944cc8a + kind: POINTER + pointee_type_id: 0xcf53d4b6 +} pointer_reference { id: 0x39450091 kind: POINTER @@ -26838,6 +26958,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xccbdcf13 } +pointer_reference { + id: 0x39c040d1 + kind: POINTER + pointee_type_id: 0xcd41e5db +} pointer_reference { id: 0x39c0701e kind: POINTER @@ -26908,6 +27033,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcd0cdcf7 } +pointer_reference { + id: 0x39d477a1 + kind: POINTER + pointee_type_id: 0xcd113819 +} pointer_reference { id: 0x39d60e4a kind: POINTER @@ -27118,6 +27248,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc3bedf1f } +pointer_reference { + id: 0x3a80e450 + kind: POINTER + pointee_type_id: 0xc04377de +} pointer_reference { id: 0x3a813c8c kind: POINTER @@ -27498,6 +27633,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc7dbc4f1 } +pointer_reference { + id: 0x3b677dbb + kind: POINTER + pointee_type_id: 0xc7dd1073 +} pointer_reference { id: 0x3b68ec61 kind: POINTER @@ -27643,6 +27783,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc50a1b96 } +pointer_reference { + id: 0x3bd3f876 + kind: POINTER + pointee_type_id: 0xc50f0744 +} pointer_reference { id: 0x3bd6fa3a kind: POINTER @@ -27808,6 +27953,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdaa2f673 } +pointer_reference { + id: 0x3c3f3f74 + kind: POINTER + pointee_type_id: 0xdabc1b4d +} pointer_reference { id: 0x3c3fe9a7 kind: POINTER @@ -28053,6 +28203,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd88f2091 } +pointer_reference { + id: 0x3cbd250a + kind: POINTER + pointee_type_id: 0xd8b472b6 +} pointer_reference { id: 0x3cc5d159 kind: POINTER @@ -28113,6 +28268,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd99c0331 } +pointer_reference { + id: 0x3cf9dfcf + kind: POINTER + pointee_type_id: 0xd9a799a2 +} pointer_reference { id: 0x3cfc8982 kind: POINTER @@ -28133,6 +28293,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xde680909 } +pointer_reference { + id: 0x3d132f3c + kind: POINTER + pointee_type_id: 0xde0c5a6e +} pointer_reference { id: 0x3d1364e9 kind: POINTER @@ -28238,6 +28403,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xdfde7856 } +pointer_reference { + id: 0x3d6e017a + kind: POINTER + pointee_type_id: 0xdff8e374 +} pointer_reference { id: 0x3d723536 kind: POINTER @@ -28603,6 +28773,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd20232fd } +pointer_reference { + id: 0x3e12c07b + kind: POINTER + pointee_type_id: 0xd20be770 +} pointer_reference { id: 0x3e146274 kind: POINTER @@ -28803,6 +28978,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xd0f3b5bf } +pointer_reference { + id: 0x3ead5537 + kind: POINTER + pointee_type_id: 0xd0f5b243 +} pointer_reference { id: 0x3eafc7e2 kind: POINTER @@ -29873,6 +30053,11 @@ typedef { name: "cisco_proto" referred_type_id: 0x0a19ea99 } +typedef { + id: 0x70239517 + name: "clock_t" + referred_type_id: 0xe3186d0a +} typedef { id: 0x4478ba6b name: "clockid_t" @@ -31718,6 +31903,11 @@ qualified { qualifier: CONST qualified_type_id: 0x70919762 } +qualified { + id: 0xc04377de + qualifier: CONST + qualified_type_id: 0x714a69f1 +} qualified { id: 0xc04414ae qualifier: CONST @@ -32083,6 +32273,11 @@ qualified { qualifier: CONST qualified_type_id: 0x6f28a54f } +qualified { + id: 0xc7dd1073 + qualifier: CONST + qualified_type_id: 0x6f33f746 +} qualified { id: 0xc803d596 qualifier: CONST @@ -33028,6 +33223,11 @@ qualified { qualifier: CONST qualified_type_id: 0x1637ba4d } +qualified { + id: 0xd9a799a2 + qualifier: CONST + qualified_type_id: 0x16d9d002 +} qualified { id: 0xda235d29 qualifier: CONST @@ -33408,6 +33608,11 @@ qualified { qualifier: CONST qualified_type_id: 0x0f3e57d3 } +qualified { + id: 0xdff8e374 + qualifier: CONST + qualified_type_id: 0x0fa43b5b +} qualified { id: 0xe03e1a37 qualifier: CONST @@ -33968,6 +34173,11 @@ qualified { qualifier: CONST qualified_type_id: 0xdabc347f } +qualified { + id: 0xeabeeb71 + qualifier: CONST + qualified_type_id: 0xdabc1b4d +} qualified { id: 0xeae74d43 qualifier: CONST @@ -34078,6 +34288,11 @@ qualified { qualifier: CONST qualified_type_id: 0xc06242e6 } +qualified { + id: 0xec465d0b + qualifier: CONST + qualified_type_id: 0xc15ec2a7 +} qualified { id: 0xec4abfbd qualifier: CONST @@ -34278,6 +34493,11 @@ qualified { qualifier: CONST qualified_type_id: 0xcc87604a } +qualified { + id: 0xef4194d4 + qualifier: CONST + qualified_type_id: 0xcd41e5db +} qualified { id: 0xef4c2c8d qualifier: CONST @@ -34343,6 +34563,11 @@ qualified { qualifier: CONST qualified_type_id: 0xb469cc14 } +qualified { + id: 0xf130ed57 + qualifier: CONST + qualified_type_id: 0xb48403d5 +} qualified { id: 0xf16d39f2 qualifier: CONST @@ -35527,6 +35752,11 @@ array { number_of_elements: 3 element_type_id: 0x35448f63 } +array { + id: 0x201349f7 + number_of_elements: 29 + element_type_id: 0xd20232fd +} array { id: 0x2087fff2 number_of_elements: 3 @@ -37814,6 +38044,11 @@ array { id: 0xc227cae4 element_type_id: 0x18791053 } +array { + id: 0xc2477f5b + number_of_elements: 1020 + element_type_id: 0x384f7d7c +} array { id: 0xc28f8f19 number_of_elements: 19 @@ -38679,6 +38914,11 @@ array { number_of_elements: 8 element_type_id: 0x69318e08 } +array { + id: 0xfe82aef1 + number_of_elements: 15 + element_type_id: 0x2170d06d +} array { id: 0xfeb89bd6 number_of_elements: 65 @@ -39398,6 +39638,11 @@ member { type_id: 0x458b21a2 offset: 96 } +member { + id: 0x32a98097 + type_id: 0x458861c9 + offset: 64 +} member { id: 0x32ae3ded type_id: 0x459687a6 @@ -39921,6 +40166,10 @@ member { type_id: 0x6f2909ad offset: 832 } +member { + id: 0x381ff41d + type_id: 0x6f51a064 +} member { id: 0x38620a39 type_id: 0x6ea6707c @@ -49329,6 +49578,12 @@ member { type_id: 0x6720d32f offset: 9536 } +member { + id: 0xaa60592a + name: "asym_pause" + type_id: 0x6720d32f + offset: 128 +} member { id: 0x2059f065 name: "asym_prefer_cpu" @@ -55676,6 +55931,12 @@ member { name: "buf" type_id: 0xc8c766a0 } +member { + id: 0x9ad98a9e + name: "buf" + type_id: 0xc2477f5b + offset: 32 +} member { id: 0x9aeff0bf name: "buf" @@ -60550,6 +60811,18 @@ member { type_id: 0x139300cd offset: 256 } +member { + id: 0x67e96e72 + name: "checkentry" + type_id: 0x2e4676b7 + offset: 448 +} +member { + id: 0x67e9cc00 + name: "checkentry" + type_id: 0x2ee404a5 + offset: 448 +} member { id: 0x666c167f name: "checkreqprot" @@ -61917,6 +62190,12 @@ member { type_id: 0x13f8b706 offset: 2240 } +member { + id: 0x37a7cc74 + name: "clk_hw" + type_id: 0x0ae4a2c7 + offset: 320 +} member { id: 0x36da2546 name: "clk_list_head" @@ -63996,6 +64275,12 @@ member { type_id: 0xd25c011d offset: 192 } +member { + id: 0xc3d16b32 + name: "compat_from_user" + type_id: 0x0f04e485 + offset: 576 +} member { id: 0x4a54423a name: "compat_ioctl" @@ -64079,6 +64364,12 @@ member { type_id: 0x6720d32f offset: 192 } +member { + id: 0x8fe7966d + name: "compat_to_user" + type_id: 0x2c42c82a + offset: 640 +} member { id: 0x7a39bd0a name: "compat_version" @@ -64119,6 +64410,12 @@ member { name: "compatible_version" type_id: 0xe8034002 } +member { + id: 0xca1a8759 + name: "compatsize" + type_id: 0x4585663f + offset: 896 +} member { id: 0x989c0466 name: "compl_reqs" @@ -67108,6 +67405,12 @@ member { type_id: 0xc8e4d7d1 offset: 384 } +member { + id: 0x3dfda6f6 + name: "cpumask" + type_id: 0xc8e4d7d1 + offset: 704 +} member { id: 0x954a0e7b name: "cpupri" @@ -73681,6 +73984,12 @@ member { type_id: 0x0d1ea752 offset: 832 } +member { + id: 0xa4fb3edf + name: "destroy" + type_id: 0x0d1e2386 + offset: 512 +} member { id: 0xa4fb57dd name: "destroy" @@ -73698,6 +74007,12 @@ member { type_id: 0x0dad77a5 offset: 512 } +member { + id: 0xa4fb8ecb + name: "destroy" + type_id: 0x0dae372d + offset: 512 +} member { id: 0xa4fb8fb9 name: "destroy" @@ -80464,6 +80779,12 @@ member { type_id: 0x6720d32f offset: 9440 } +member { + id: 0x70edc889 + name: "duplex" + type_id: 0x6720d32f + offset: 64 +} member { id: 0x70edcbaf name: "duplex" @@ -83137,6 +83458,12 @@ member { type_id: 0xf1159c31 offset: 64 } +member { + id: 0x3fc83009 + name: "entryinfo" + type_id: 0x391f15ea + offset: 128 +} member { id: 0x8ef9a4f4 name: "enum_dv_timings" @@ -86231,6 +86558,18 @@ member { name: "family" type_id: 0x6720d32f } +member { + id: 0x9e5f12db + name: "family" + type_id: 0x0abe9fd1 + offset: 352 +} +member { + id: 0x9e5f1e4b + name: "family" + type_id: 0x0abe9fd1 + offset: 192 +} member { id: 0x9e6bbc49 name: "family" @@ -86254,6 +86593,12 @@ member { type_id: 0x295c7202 offset: 8 } +member { + id: 0x9e9c9282 + name: "family" + type_id: 0xc93e017b + offset: 976 +} member { id: 0x9e9c961c name: "family" @@ -91688,6 +92033,12 @@ member { name: "folio" type_id: 0x2170d06d } +member { + id: 0x53859aee + name: "folios" + type_id: 0xfe82aef1 + offset: 64 +} member { id: 0x53e7f764 name: "folios" @@ -92367,6 +92718,12 @@ member { type_id: 0x054f691a offset: 1024 } +member { + id: 0x0840fe2b + name: "fragoff" + type_id: 0x914dbfdc + offset: 224 +} member { id: 0x5ed9c6c0 name: "frags_cache_name" @@ -95150,6 +95507,12 @@ member { type_id: 0x2c3be0fd offset: 640 } +member { + id: 0x31757c02 + name: "get" + type_id: 0x2c42fa17 + offset: 384 +} member { id: 0x31766522 name: "get" @@ -96052,6 +96415,18 @@ member { type_id: 0x39b05793 offset: 1664 } +member { + id: 0x617b3df2 + name: "get_optmax" + type_id: 0x6720d32f + offset: 352 +} +member { + id: 0xff9b15ab + name: "get_optmin" + type_id: 0x6720d32f + offset: 320 +} member { id: 0x4aebacca name: "get_orientation" @@ -97585,6 +97960,12 @@ member { type_id: 0x6720d32f offset: 768 } +member { + id: 0x16cb0979 + name: "group_generation" + type_id: 0x4585663f + offset: 1120 +} member { id: 0x0f81c321 name: "group_index" @@ -100655,6 +101036,12 @@ member { name: "hook" type_id: 0x1d10c881 } +member { + id: 0x90452b86 + name: "hook_mask" + type_id: 0x4585663f + offset: 320 +} member { id: 0x4baf7b66 name: "hook_ops_type" @@ -100674,6 +101061,12 @@ member { type_id: 0xc3ac8280 offset: 64 } +member { + id: 0x64dd1fe7 + name: "hooks" + type_id: 0x4585663f + offset: 928 +} member { id: 0x28df8f7a name: "hooks_arp" @@ -101032,6 +101425,12 @@ member { type_id: 0x6720d32f offset: 1152 } +member { + id: 0xed2a5c83 + name: "hotdrop" + type_id: 0x6d7f5ff6 + offset: 240 +} member { id: 0x75d72ecb name: "hotplug" @@ -104299,6 +104698,12 @@ member { offset: 2561 bitsize: 1 } +member { + id: 0xaea1d4b8 + name: "idle_duration_us" + type_id: 0x4585663f + offset: 576 +} member { id: 0xafe870ea name: "idle_h_nr_running" @@ -104465,6 +104870,11 @@ member { name: "idr_rt" type_id: 0x80c20070 } +member { + id: 0x639387b1 + name: "idrinfo" + type_id: 0x3442a45d +} member { id: 0x63938e73 name: "idrinfo" @@ -112659,6 +113069,11 @@ member { type_id: 0x674028f7 offset: 832 } +member { + id: 0x8ea8c4ec + name: "key_id" + type_id: 0x405d0abf +} member { id: 0x8ec1ce72 name: "key_id" @@ -114774,6 +115189,12 @@ member { type_id: 0x160238dd offset: 2688 } +member { + id: 0x1e84361d + name: "latency_us" + type_id: 0x4585663f + offset: 640 +} member { id: 0xac824246 name: "latest_granting" @@ -116549,6 +116970,11 @@ member { type_id: 0x6720d32f offset: 128 } +member { + id: 0x55d9bf3e + name: "link" + type_id: 0x6720d32f +} member { id: 0x55ddaf31 name: "link" @@ -121945,6 +122371,12 @@ member { type_id: 0x2cdf41d9 offset: 512 } +member { + id: 0xe615f34c + name: "match" + type_id: 0x36f8a731 + offset: 384 +} member { id: 0xe61687a2 name: "match" @@ -121957,6 +122389,23 @@ member { type_id: 0x3493e68d offset: 256 } +member { + id: 0xe61e6099 + name: "match" + type_id: 0x3d6e017a + offset: 64 +} +member { + id: 0xe61e6478 + name: "match" + type_id: 0x3d6e017a +} +member { + id: 0xe61e6cb1 + name: "match" + type_id: 0x3d6e017a + offset: 192 +} member { id: 0xe62639eb name: "match" @@ -122055,6 +122504,29 @@ member { type_id: 0x33756485 offset: 960 } +member { + id: 0x4dc4136b + name: "matchinfo" + type_id: 0x18bd6530 + offset: 256 +} +member { + id: 0x4dc41a02 + name: "matchinfo" + type_id: 0x18bd6530 + offset: 128 +} +member { + id: 0x4de5b1b0 + name: "matchinfo" + type_id: 0x391f15ea +} +member { + id: 0xa1e58126 + name: "matchsize" + type_id: 0x4585663f + offset: 832 +} member { id: 0xcf872d8f name: "mattr" @@ -125039,6 +125511,12 @@ member { type_id: 0x0b27dc43 offset: 320 } +member { + id: 0x3e3e8f0f + name: "me" + type_id: 0x0b27dc43 + offset: 704 +} member { id: 0x8dae3d1f name: "mean" @@ -131049,6 +131527,12 @@ member { name: "name" type_id: 0x235dd3e0 } +member { + id: 0x0dfb76d6 + name: "name" + type_id: 0x201349f7 + offset: 128 +} member { id: 0x0dfb96fb name: "name" @@ -133752,6 +134236,12 @@ member { name: "nfs_fl" type_id: 0x35981da9 } +member { + id: 0x3d4d09b8 + name: "nft_compat" + type_id: 0x6d7f5ff6 + offset: 360 +} member { id: 0xe49ba3c7 name: "ngpio" @@ -139947,6 +140437,12 @@ member { type_id: 0xc9082b19 offset: 96 } +member { + id: 0x9be8ed4d + name: "offset" + type_id: 0xf435685e + offset: 64 +} member { id: 0x9beaae82 name: "offset" @@ -141120,6 +141616,12 @@ member { name: "ops" type_id: 0x3a40dd6c } +member { + id: 0xafb1449f + name: "ops" + type_id: 0x3a40dd6c + offset: 64 +} member { id: 0xafb144a9 name: "ops" @@ -142919,6 +143421,12 @@ member { type_id: 0x0b27dc43 offset: 1280 } +member { + id: 0x4a965527 + name: "owner" + type_id: 0x0b27dc43 + offset: 448 +} member { id: 0x4a96554f name: "owner" @@ -145469,6 +145977,12 @@ member { type_id: 0x04f0669a offset: 64 } +member { + id: 0x6d4fa7de + name: "pause" + type_id: 0x6720d32f + offset: 96 +} member { id: 0x6d4faa04 name: "pause" @@ -147201,6 +147715,12 @@ member { type_id: 0x914dbfdc offset: 64 } +member { + id: 0xca8bb222 + name: "pf" + type_id: 0x0abe9fd1 + offset: 128 +} member { id: 0xcaa851c4 name: "pf" @@ -154890,6 +155410,12 @@ member { type_id: 0x0db3daed offset: 1472 } +member { + id: 0x5daafa45 + name: "proto" + type_id: 0xc93e017b + offset: 960 +} member { id: 0x5dd026ed name: "proto" @@ -166276,6 +166802,12 @@ member { type_id: 0x3e10b518 offset: 128 } +member { + id: 0x94a26ac4 + name: "revision" + type_id: 0x0abe9fd1 + offset: 360 +} member { id: 0xbcd2bd0f name: "revmap" @@ -168263,6 +168795,12 @@ member { type_id: 0xd5df6730 offset: 64 } +member { + id: 0x424a09e3 + name: "run_duration_us" + type_id: 0x4585663f + offset: 608 +} member { id: 0x9f0f9059 name: "run_graceperiod" @@ -173842,6 +174380,12 @@ member { type_id: 0x2e37c006 offset: 320 } +member { + id: 0x3df20d1c + name: "set" + type_id: 0x2c4d46ea + offset: 256 +} member { id: 0x3df35b61 name: "set" @@ -174563,6 +175107,18 @@ member { type_id: 0x33756485 offset: 11648 } +member { + id: 0xbce3db87 + name: "set_optmax" + type_id: 0x6720d32f + offset: 192 +} +member { + id: 0x2ef1fff5 + name: "set_optmin" + type_id: 0x6720d32f + offset: 160 +} member { id: 0x01b2c6d9 name: "set_over_current_protection" @@ -180314,6 +180870,12 @@ member { type_id: 0xe62ebf07 offset: 32 } +member { + id: 0xa08da031 + name: "speed" + type_id: 0x6720d32f + offset: 32 +} member { id: 0xa08da7ed name: "speed" @@ -182781,6 +183343,12 @@ member { type_id: 0x33756485 offset: 1728 } +member { + id: 0x72c1076d + name: "state" + type_id: 0x32f2aeac + offset: 128 +} member { id: 0x72c92280 name: "state" @@ -187962,6 +188530,18 @@ member { name: "table" type_id: 0x3f8f92cb } +member { + id: 0xb6d524c4 + name: "table" + type_id: 0x3e10b518 + offset: 64 +} +member { + id: 0xb6d5288b + name: "table" + type_id: 0x3e10b518 + offset: 768 +} member { id: 0xb6ea05f8 name: "table" @@ -188395,6 +188975,29 @@ member { type_id: 0x33756485 offset: 512 } +member { + id: 0xb392e6ad + name: "target" + type_id: 0x303f837b + offset: 192 +} +member { + id: 0xb392ea85 + name: "target" + type_id: 0x303f837b + offset: 64 +} +member { + id: 0xb392ee64 + name: "target" + type_id: 0x303f837b +} +member { + id: 0xb39b94b9 + name: "target" + type_id: 0x3944cc8a + offset: 384 +} member { id: 0xb3add302 name: "target" @@ -188652,6 +189255,29 @@ member { type_id: 0x6720d32f offset: 160 } +member { + id: 0xce07641d + name: "targetsize" + type_id: 0x4585663f + offset: 832 +} +member { + id: 0x2f419094 + name: "targinfo" + type_id: 0x391f15ea +} +member { + id: 0x2f60324f + name: "targinfo" + type_id: 0x18bd6530 + offset: 256 +} +member { + id: 0x2f603b26 + name: "targinfo" + type_id: 0x18bd6530 + offset: 128 +} member { id: 0x9c26475e name: "task" @@ -189995,6 +190621,12 @@ member { type_id: 0x6720d32f offset: 3904 } +member { + id: 0x5a55ca66 + name: "thoff" + type_id: 0x4585663f + offset: 192 +} member { id: 0x0b535931 name: "thrashing_count" @@ -200363,6 +200995,12 @@ member { type_id: 0x4585663f offset: 2784 } +member { + id: 0xbb6c96d0 + name: "usersize" + type_id: 0x4585663f + offset: 864 +} member { id: 0x557afbd5 name: "userspace_addr" @@ -212521,6 +213159,15 @@ struct_union { member_id: 0x2380a48f } } +struct_union { + id: 0x458861c9 + kind: UNION + definition { + bytesize: 8 + member_id: 0x4de5b1b0 + member_id: 0x2f419094 + } +} struct_union { id: 0x458b21a2 kind: UNION @@ -214670,6 +215317,15 @@ struct_union { member_id: 0x7cb52b3e } } +struct_union { + id: 0x6f51a064 + kind: UNION + definition { + bytesize: 8 + member_id: 0xe61e6478 + member_id: 0xb392ee64 + } +} struct_union { id: 0x701090f6 kind: UNION @@ -221050,6 +221706,19 @@ struct_union { member_id: 0x2d5bf0a8 } } +struct_union { + id: 0xde0c5a6e + kind: STRUCT + name: "clk_lookup" + definition { + bytesize: 48 + member_id: 0x0fa6c6af + member_id: 0x8e5720f5 + member_id: 0xd70e055b + member_id: 0xc8e8283a + member_id: 0x37a7cc74 + } +} struct_union { id: 0x08a8a88b kind: STRUCT @@ -230115,6 +230784,19 @@ struct_union { member_id: 0x59119163 } } +struct_union { + id: 0xf8022dd7 + kind: STRUCT + name: "fixed_phy_status" + definition { + bytesize: 20 + member_id: 0x55d9bf3e + member_id: 0xa08da031 + member_id: 0x70edc889 + member_id: 0x6d4fa7de + member_id: 0xaa60592a + } +} struct_union { id: 0xc8adfcbd kind: STRUCT @@ -230188,6 +230870,16 @@ struct_union { member_id: 0x9ba29f20 } } +struct_union { + id: 0x16d9d002 + kind: STRUCT + name: "flow_dissector_key" + definition { + bytesize: 16 + member_id: 0x8ea8c4ec + member_id: 0x9be8ed4d + } +} struct_union { id: 0x7b243421 kind: STRUCT @@ -230392,6 +231084,17 @@ struct_union { member_id: 0xb4a7dfee } } +struct_union { + id: 0xd0f5b243 + kind: STRUCT + name: "folio_batch" + definition { + bytesize: 128 + member_id: 0xd1ffb44c + member_id: 0x4db3a084 + member_id: 0x53859aee + } +} struct_union { id: 0x9524b580 kind: STRUCT @@ -234053,6 +234756,19 @@ struct_union { member_id: 0x2de9701e } } +struct_union { + id: 0xd8b472b6 + kind: STRUCT + name: "idle_inject_device" + definition { + bytesize: 88 + member_id: 0x1dce6e8e + member_id: 0xaea1d4b8 + member_id: 0x424a09e3 + member_id: 0x1e84361d + member_id: 0x3dfda6f6 + } +} struct_union { id: 0x04b89667 kind: STRUCT @@ -244042,6 +244758,16 @@ struct_union { member_id: 0xf543a7c9 } } +struct_union { + id: 0xcd113819 + kind: STRUCT + name: "nf_log_buf" + definition { + bytesize: 1024 + member_id: 0x6560daa2 + member_id: 0x9ad98a9e + } +} struct_union { id: 0x2889169c kind: STRUCT @@ -244073,6 +244799,24 @@ struct_union { member_id: 0xe6309576 } } +struct_union { + id: 0xd20be770 + kind: STRUCT + name: "nf_sockopt_ops" + definition { + bytesize: 72 + member_id: 0x7c00ef52 + member_id: 0xca8bb222 + member_id: 0x2ef1fff5 + member_id: 0xbce3db87 + member_id: 0x3df20d1c + member_id: 0xff9b15ab + member_id: 0x617b3df2 + member_id: 0x31757c02 + member_id: 0x4a965527 + member_id: 0x2d081e2a + } +} struct_union { id: 0x2d20b515 kind: STRUCT @@ -246100,6 +246844,7 @@ struct_union { member_id: 0xb826ad15 member_id: 0xf0897d29 member_id: 0x26e58ea7 + member_id: 0x16cb0979 member_id: 0xc397b990 member_id: 0x933349d1 member_id: 0xbadfff7b @@ -258563,6 +259308,16 @@ struct_union { member_id: 0x59c72968 } } +struct_union { + id: 0x6b01ff7f + kind: STRUCT + name: "tc_action_net" + definition { + bytesize: 16 + member_id: 0x639387b1 + member_id: 0xafb1449f + } +} struct_union { id: 0x7d49fa3c kind: STRUCT @@ -270252,6 +271007,124 @@ struct_union { member_id: 0x24d20612 } } +struct_union { + id: 0xb48403d5 + kind: STRUCT + name: "xt_action_param" + definition { + bytesize: 32 + member_id: 0x381ff41d + member_id: 0x32a98097 + member_id: 0x72c1076d + member_id: 0x5a55ca66 + member_id: 0x0840fe2b + member_id: 0xed2a5c83 + } +} +struct_union { + id: 0x0fa43b5b + kind: STRUCT + name: "xt_match" + definition { + bytesize: 128 + member_id: 0x7c00ef52 + member_id: 0x0dfb76d6 + member_id: 0x94a26ac4 + member_id: 0xe615f34c + member_id: 0x67e96e72 + member_id: 0xa4fb8ecb + member_id: 0xc3d16b32 + member_id: 0x8fe7966d + member_id: 0x3e3e8f0f + member_id: 0xb6d5288b + member_id: 0xa1e58126 + member_id: 0xbb6c96d0 + member_id: 0xca1a8759 + member_id: 0x64dd1fe7 + member_id: 0x5daafa45 + member_id: 0x9e9c9282 + } +} +struct_union { + id: 0x6f33f746 + kind: STRUCT + name: "xt_mtchk_param" + definition { + bytesize: 48 + member_id: 0x7203ed5f + member_id: 0xb6d524c4 + member_id: 0x3fc83009 + member_id: 0xe61e6cb1 + member_id: 0x4dc4136b + member_id: 0x90452b86 + member_id: 0x9e5f12db + member_id: 0x3d4d09b8 + } +} +struct_union { + id: 0xc15ec2a7 + kind: STRUCT + name: "xt_mtdtor_param" + definition { + bytesize: 32 + member_id: 0x7203ed5f + member_id: 0xe61e6099 + member_id: 0x4dc41a02 + member_id: 0x9e5f1e4b + } +} +struct_union { + id: 0xdabc1b4d + kind: STRUCT + name: "xt_target" + definition { + bytesize: 128 + member_id: 0x7c00ef52 + member_id: 0x0dfb76d6 + member_id: 0x94a26ac4 + member_id: 0xb39b94b9 + member_id: 0x67e9cc00 + member_id: 0xa4fb3edf + member_id: 0xc3d16b32 + member_id: 0x8fe7966d + member_id: 0x3e3e8f0f + member_id: 0xb6d5288b + member_id: 0xce07641d + member_id: 0xbb6c96d0 + member_id: 0xca1a8759 + member_id: 0x64dd1fe7 + member_id: 0x5daafa45 + member_id: 0x9e9c9282 + } +} +struct_union { + id: 0xcd41e5db + kind: STRUCT + name: "xt_tgchk_param" + definition { + bytesize: 48 + member_id: 0x7203ed5f + member_id: 0xb6d524c4 + member_id: 0x3fc83009 + member_id: 0xb392e6ad + member_id: 0x2f60324f + member_id: 0x90452b86 + member_id: 0x9e5f12db + member_id: 0x3d4d09b8 + } +} +struct_union { + id: 0x714a69f1 + kind: STRUCT + name: "xt_tgdtor_param" + definition { + bytesize: 32 + member_id: 0x7203ed5f + member_id: 0xb392ea85 + member_id: 0x2f603b26 + member_id: 0x9e5f1e4b + } +} struct_union { id: 0x01c06930 kind: STRUCT @@ -271435,6 +272308,92 @@ enumeration { } } } +enumeration { + id: 0x6797b524 + name: "audit_nfcfgop" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "AUDIT_XT_OP_REGISTER" + } + enumerator { + name: "AUDIT_XT_OP_REPLACE" + value: 1 + } + enumerator { + name: "AUDIT_XT_OP_UNREGISTER" + value: 2 + } + enumerator { + name: "AUDIT_NFT_OP_TABLE_REGISTER" + value: 3 + } + enumerator { + name: "AUDIT_NFT_OP_TABLE_UNREGISTER" + value: 4 + } + enumerator { + name: "AUDIT_NFT_OP_CHAIN_REGISTER" + value: 5 + } + enumerator { + name: "AUDIT_NFT_OP_CHAIN_UNREGISTER" + value: 6 + } + enumerator { + name: "AUDIT_NFT_OP_RULE_REGISTER" + value: 7 + } + enumerator { + name: "AUDIT_NFT_OP_RULE_UNREGISTER" + value: 8 + } + enumerator { + name: "AUDIT_NFT_OP_SET_REGISTER" + value: 9 + } + enumerator { + name: "AUDIT_NFT_OP_SET_UNREGISTER" + value: 10 + } + enumerator { + name: "AUDIT_NFT_OP_SETELEM_REGISTER" + value: 11 + } + enumerator { + name: "AUDIT_NFT_OP_SETELEM_UNREGISTER" + value: 12 + } + enumerator { + name: "AUDIT_NFT_OP_GEN_REGISTER" + value: 13 + } + enumerator { + name: "AUDIT_NFT_OP_OBJ_REGISTER" + value: 14 + } + enumerator { + name: "AUDIT_NFT_OP_OBJ_UNREGISTER" + value: 15 + } + enumerator { + name: "AUDIT_NFT_OP_OBJ_RESET" + value: 16 + } + enumerator { + name: "AUDIT_NFT_OP_FLOWTABLE_REGISTER" + value: 17 + } + enumerator { + name: "AUDIT_NFT_OP_FLOWTABLE_UNREGISTER" + value: 18 + } + enumerator { + name: "AUDIT_NFT_OP_INVALID" + value: 19 + } + } +} enumeration { id: 0x6bbe1f72 name: "audit_state" @@ -277306,6 +278265,140 @@ enumeration { } } } +enumeration { + id: 0x405d0abf + name: "flow_dissector_key_id" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "FLOW_DISSECTOR_KEY_CONTROL" + } + enumerator { + name: "FLOW_DISSECTOR_KEY_BASIC" + value: 1 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_IPV4_ADDRS" + value: 2 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_IPV6_ADDRS" + value: 3 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_PORTS" + value: 4 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_PORTS_RANGE" + value: 5 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ICMP" + value: 6 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ETH_ADDRS" + value: 7 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_TIPC" + value: 8 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ARP" + value: 9 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_VLAN" + value: 10 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_FLOW_LABEL" + value: 11 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_GRE_KEYID" + value: 12 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_MPLS_ENTROPY" + value: 13 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_KEYID" + value: 14 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_IPV4_ADDRS" + value: 15 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS" + value: 16 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_CONTROL" + value: 17 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_PORTS" + value: 18 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_MPLS" + value: 19 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_TCP" + value: 20 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_IP" + value: 21 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_CVLAN" + value: 22 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_IP" + value: 23 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_ENC_OPTS" + value: 24 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_META" + value: 25 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_CT" + value: 26 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_HASH" + value: 27 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_NUM_OF_VLANS" + value: 28 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_PPPOE" + value: 29 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_L2TPV3" + value: 30 + } + enumerator { + name: "FLOW_DISSECTOR_KEY_MAX" + value: 31 + } + } +} enumeration { id: 0x08fa9aab name: "freq_qos_req_type" @@ -287207,6 +288300,13 @@ function { parameter_id: 0xb0c2eb21 parameter_id: 0x3e10b518 } +function { + id: 0x0118ea6e + return_type_id: 0x3c3f3f74 + parameter_id: 0x295c7202 + parameter_id: 0x3e10b518 + parameter_id: 0x295c7202 +} function { id: 0x012b29b0 return_type_id: 0x914dbfdc @@ -287501,6 +288601,24 @@ function { parameter_id: 0x6720d32f parameter_id: 0x6720d32f } +function { + id: 0x08f48955 + return_type_id: 0x48b5725f + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0xe276adef + parameter_id: 0x32a623d7 + parameter_id: 0xe276adef + parameter_id: 0x384c5795 + parameter_id: 0x384c5795 + parameter_id: 0x384c5795 +} +function { + id: 0x09028dcc + return_type_id: 0x48b5725f + parameter_id: 0x6720d32f + parameter_id: 0x14ba251a +} function { id: 0x091a93fa return_type_id: 0xa98dedee @@ -288559,6 +289677,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x00a43052 } +function { + id: 0x10b4ce93 + return_type_id: 0x48b5725f + parameter_id: 0x00b27c00 +} function { id: 0x10b5b48c return_type_id: 0x48b5725f @@ -289772,6 +290895,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x0ab9fa4c } +function { + id: 0x1237f667 + return_type_id: 0x48b5725f + parameter_id: 0x0abe9fd1 +} function { id: 0x1239dff8 return_type_id: 0x48b5725f @@ -290503,6 +291631,12 @@ function { parameter_id: 0x293f2663 parameter_id: 0x3da0a8e3 } +function { + id: 0x134cbffd + return_type_id: 0x48b5725f + parameter_id: 0x0ca27481 + parameter_id: 0x3f1cd3a6 +} function { id: 0x135157d2 return_type_id: 0x48b5725f @@ -290741,6 +291875,19 @@ function { parameter_id: 0x336c4b19 parameter_id: 0x3e10b518 } +function { + id: 0x138ba240 + return_type_id: 0x48b5725f + parameter_id: 0x0ca27481 + parameter_id: 0x0abe9fd1 + parameter_id: 0x4585663f + parameter_id: 0x3e6396e0 + parameter_id: 0x3399c453 + parameter_id: 0x3399c453 + parameter_id: 0x336c4b19 + parameter_id: 0x3e10b518 + parameter_id: 0xa52a0930 +} function { id: 0x138bff3f return_type_id: 0x0c2e195c @@ -292417,6 +293564,11 @@ function { parameter_id: 0x1cce8023 parameter_id: 0x6720d32f } +function { + id: 0x163a90aa + return_type_id: 0x48b5725f + parameter_id: 0x1a8b04e5 +} function { id: 0x163b1761 return_type_id: 0x48b5725f @@ -292480,6 +293632,12 @@ function { parameter_id: 0x1830dd64 parameter_id: 0x31c0ce8c } +function { + id: 0x16537488 + return_type_id: 0x48b5725f + parameter_id: 0x18bd6530 + parameter_id: 0x391f15ea +} function { id: 0x1653799a return_type_id: 0x48b5725f @@ -293384,6 +294542,12 @@ function { parameter_id: 0x1d7ca769 parameter_id: 0x295c7202 } +function { + id: 0x1766319b + return_type_id: 0x48b5725f + parameter_id: 0x1d19a9d5 + parameter_id: 0x2e029f76 +} function { id: 0x176c2cc0 return_type_id: 0x48b5725f @@ -293538,6 +294702,12 @@ function { parameter_id: 0x1d1533af parameter_id: 0x1e820193 } +function { + id: 0x17a860a1 + return_type_id: 0x48b5725f + parameter_id: 0x10504678 + parameter_id: 0xc9082b19 +} function { id: 0x17a9b884 return_type_id: 0x48b5725f @@ -294316,6 +295486,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x26847863 } +function { + id: 0x19413e0d + return_type_id: 0x48b5725f + parameter_id: 0x26ee682a + parameter_id: 0x18bd6530 +} function { id: 0x1942d44d return_type_id: 0x48b5725f @@ -294502,6 +295678,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x246dc7d4 } +function { + id: 0x19832808 + return_type_id: 0x48b5725f + parameter_id: 0x275ab027 + parameter_id: 0x33756485 +} function { id: 0x198668f4 return_type_id: 0x48b5725f @@ -294609,6 +295791,13 @@ function { return_type_id: 0x48b5725f parameter_id: 0x257d12af } +function { + id: 0x19c7e382 + return_type_id: 0x48b5725f + parameter_id: 0x275ab027 + parameter_id: 0x2170d06d + parameter_id: 0x33756485 +} function { id: 0x19c83efb return_type_id: 0x48b5725f @@ -295168,6 +296357,13 @@ function { parameter_id: 0x760e8adc parameter_id: 0x00256a1d } +function { + id: 0x1af68d6f + return_type_id: 0x48b5725f + parameter_id: 0x2a316b68 + parameter_id: 0x3cf9dfcf + parameter_id: 0x4585663f +} function { id: 0x1afeafa7 return_type_id: 0x48b5725f @@ -295864,6 +297060,13 @@ function { parameter_id: 0x310ec01d parameter_id: 0x33756485 } +function { + id: 0x1c167d2e + return_type_id: 0x48b5725f + parameter_id: 0x32ec08f2 + parameter_id: 0x0cc07624 + parameter_id: 0x18bd6530 +} function { id: 0x1c18b1c5 return_type_id: 0x48b5725f @@ -295952,6 +297155,14 @@ function { parameter_id: 0x32a623d7 parameter_id: 0x00c72527 } +function { + id: 0x1c33c003 + return_type_id: 0x48b5725f + parameter_id: 0x32caaf24 + parameter_id: 0x064d6086 + parameter_id: 0x064d6086 + parameter_id: 0x6720d32f +} function { id: 0x1c362eb2 return_type_id: 0x48b5725f @@ -296270,6 +297481,12 @@ function { parameter_id: 0x914dbfdc parameter_id: 0x6720d32f } +function { + id: 0x1ca12c7e + return_type_id: 0x48b5725f + parameter_id: 0x3176a085 + parameter_id: 0x19357319 +} function { id: 0x1ca44d8a return_type_id: 0x48b5725f @@ -296583,6 +297800,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x31b5a66f } +function { + id: 0x1cf83a2a + return_type_id: 0x48b5725f + parameter_id: 0x3181aee5 +} function { id: 0x1cf8df35 return_type_id: 0x48b5725f @@ -296684,6 +297906,15 @@ function { return_type_id: 0x48b5725f parameter_id: 0x3609467c } +function { + id: 0x1d1ccc70 + return_type_id: 0x48b5725f + parameter_id: 0x3fab28c8 + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0x92233392 + parameter_id: 0x6d7f5ff6 +} function { id: 0x1d1cf212 return_type_id: 0x48b5725f @@ -297499,6 +298730,11 @@ function { parameter_id: 0x295c7202 parameter_id: 0x11c404ba } +function { + id: 0x1e386887 + return_type_id: 0x48b5725f + parameter_id: 0x3a80e450 +} function { id: 0x1e388fbe return_type_id: 0x48b5725f @@ -297882,6 +299118,12 @@ function { parameter_id: 0x054f691a parameter_id: 0x27847a9a } +function { + id: 0x1ea10d49 + return_type_id: 0x48b5725f + parameter_id: 0x3cbd250a + parameter_id: 0x4585663f +} function { id: 0x1ea1f34b return_type_id: 0x48b5725f @@ -297910,6 +299152,13 @@ function { parameter_id: 0x3b461cc8 parameter_id: 0xc9082b19 } +function { + id: 0x1eb06c10 + return_type_id: 0x48b5725f + parameter_id: 0x3cbd250a + parameter_id: 0x4585663f + parameter_id: 0x4585663f +} function { id: 0x1eb41c27 return_type_id: 0x48b5725f @@ -298047,6 +299296,12 @@ function { parameter_id: 0x39487d35 parameter_id: 0x04a6a89c } +function { + id: 0x1ed96c59 + return_type_id: 0x48b5725f + parameter_id: 0x3a40dd6c + parameter_id: 0x3442a45d +} function { id: 0x1eda71a1 return_type_id: 0x48b5725f @@ -298131,6 +299386,11 @@ function { parameter_id: 0x295c7202 parameter_id: 0x295c7202 } +function { + id: 0x1eed4c7b + return_type_id: 0x48b5725f + parameter_id: 0x39d477a1 +} function { id: 0x1eedbe86 return_type_id: 0x48b5725f @@ -298286,6 +299546,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x3e10b518 } +function { + id: 0x1f1ce18d + return_type_id: 0x48b5725f + parameter_id: 0x3e12c07b +} function { id: 0x1f1f7d50 return_type_id: 0x48b5725f @@ -298789,6 +300054,15 @@ function { parameter_id: 0xf435685e parameter_id: 0x18bd6530 } +function { + id: 0x1fa9ce73 + return_type_id: 0x48b5725f + parameter_id: 0x3e10b518 + parameter_id: 0x295c7202 + parameter_id: 0x4585663f + parameter_id: 0x6797b524 + parameter_id: 0xf1a6dfed +} function { id: 0x1faab0ad return_type_id: 0x48b5725f @@ -298802,6 +300076,24 @@ function { parameter_id: 0x4585663f parameter_id: 0x4585663f } +function { + id: 0x1fae5edf + return_type_id: 0x48b5725f + parameter_id: 0x3e6396e0 + parameter_id: 0x2a316b68 + parameter_id: 0x18bd6530 +} +function { + id: 0x1faed94e + return_type_id: 0x48b5725f + parameter_id: 0x3e6396e0 + parameter_id: 0x2a316b68 + parameter_id: 0x18bd6530 + parameter_id: 0x2ec35650 + parameter_id: 0xf435685e + parameter_id: 0x6d7f5ff6 + parameter_id: 0x914dbfdc +} function { id: 0x1fafd1a4 return_type_id: 0x48b5725f @@ -298826,6 +300118,11 @@ function { parameter_id: 0x3e19e681 parameter_id: 0x2afee447 } +function { + id: 0x1fb718d1 + return_type_id: 0x48b5725f + parameter_id: 0x3cbd250a +} function { id: 0x1fb862d7 return_type_id: 0x48b5725f @@ -298930,6 +300227,11 @@ function { parameter_id: 0x6720d32f parameter_id: 0x6720d32f } +function { + id: 0x1fdc9a5c + return_type_id: 0x48b5725f + parameter_id: 0x3d132f3c +} function { id: 0x1fdd3c97 return_type_id: 0x48b5725f @@ -298943,6 +300245,13 @@ function { parameter_id: 0x3104f372 parameter_id: 0x6720d32f } +function { + id: 0x1fde2109 + return_type_id: 0x48b5725f + parameter_id: 0x3cbd250a + parameter_id: 0x1bf16028 + parameter_id: 0x1bf16028 +} function { id: 0x1fdf0b41 return_type_id: 0x48b5725f @@ -300684,6 +301993,11 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x33756485 } +function { + id: 0x416f964c + return_type_id: 0x70239517 + parameter_id: 0x33756485 +} function { id: 0x41818af1 return_type_id: 0xc9082b19 @@ -301416,6 +302730,11 @@ function { return_type_id: 0x295c7202 parameter_id: 0x0ae4a2c7 } +function { + id: 0x5221a908 + return_type_id: 0x2511a6f5 + parameter_id: 0x4585663f +} function { id: 0x523165ec return_type_id: 0x18bd6530 @@ -301910,6 +303229,14 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x0379c823 } +function { + id: 0x5776682f + return_type_id: 0x18bd6530 + parameter_id: 0x0258f96e + parameter_id: 0x548dee2a + parameter_id: 0x92cb2337 + parameter_id: 0x18bd6530 +} function { id: 0x578fa618 return_type_id: 0x295c7202 @@ -302618,6 +303945,15 @@ function { parameter_id: 0xf1a6dfed parameter_id: 0x6720d32f } +function { + id: 0x5f0ba086 + return_type_id: 0x18a2fb63 + parameter_id: 0x0490bb4a + parameter_id: 0x4585663f + parameter_id: 0x4585663f + parameter_id: 0x30351611 + parameter_id: 0x18bd6530 +} function { id: 0x5f133b10 return_type_id: 0x18a2fb63 @@ -302687,6 +304023,13 @@ function { parameter_id: 0x285cedbe parameter_id: 0x3e10b518 } +function { + id: 0x60249243 + return_type_id: 0x09793771 + parameter_id: 0x43e910ce + parameter_id: 0x3e10b518 + parameter_id: 0x43e910ce +} function { id: 0x60262630 return_type_id: 0x2488f94c @@ -302830,6 +304173,11 @@ function { return_type_id: 0x0130219f parameter_id: 0x0130219f } +function { + id: 0x65981286 + return_type_id: 0x3cbd250a + parameter_id: 0x38fa32ef +} function { id: 0x65a73fe6 return_type_id: 0x3ccb45d9 @@ -303697,6 +305045,13 @@ function { parameter_id: 0x322c8c4b parameter_id: 0x3e10b518 } +function { + id: 0x7a9367a8 + return_type_id: 0x09793771 + parameter_id: 0x295c7202 + parameter_id: 0x3e10b518 + parameter_id: 0x295c7202 +} function { id: 0x7a9510d5 return_type_id: 0xa256f9e0 @@ -304115,6 +305470,12 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x120540d1 } +function { + id: 0x841a3f70 + return_type_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x14ba251a +} function { id: 0x84257977 return_type_id: 0x6720d32f @@ -304184,6 +305545,14 @@ function { parameter_id: 0x0a126667 parameter_id: 0x0a126667 } +function { + id: 0x846ed06b + return_type_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x09451098 + parameter_id: 0x0c32f89e + parameter_id: 0x07dcdbe1 +} function { id: 0x84710953 return_type_id: 0x6720d32f @@ -306279,6 +307648,12 @@ function { parameter_id: 0x07fec5e7 parameter_id: 0x38d23361 } +function { + id: 0x9138bf4f + return_type_id: 0x6720d32f + parameter_id: 0x3176a085 + parameter_id: 0x397d1060 +} function { id: 0x913a79c8 return_type_id: 0x6720d32f @@ -306719,6 +308094,11 @@ function { parameter_id: 0x3f37d9d5 parameter_id: 0xf017819f } +function { + id: 0x918f03f1 + return_type_id: 0x6720d32f + parameter_id: 0x303f837b +} function { id: 0x91906f9c return_type_id: 0x6720d32f @@ -307284,6 +308664,11 @@ function { parameter_id: 0x33f8b54b parameter_id: 0x2b8f13b3 } +function { + id: 0x91d0f40b + return_type_id: 0x6720d32f + parameter_id: 0x31405c92 +} function { id: 0x91d1290e return_type_id: 0x6720d32f @@ -307735,6 +309120,11 @@ function { parameter_id: 0x064d6086 parameter_id: 0x6720d32f } +function { + id: 0x92045331 + return_type_id: 0x6720d32f + parameter_id: 0x3e12c07b +} function { id: 0x92046299 return_type_id: 0x6720d32f @@ -308677,6 +310067,11 @@ function { parameter_id: 0x15a30023 parameter_id: 0x146a39bf } +function { + id: 0x92afaa6d + return_type_id: 0x6720d32f + parameter_id: 0x3cbd250a +} function { id: 0x92b5578e return_type_id: 0x6720d32f @@ -308757,6 +310152,14 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x3185812b } +function { + id: 0x92c30011 + return_type_id: 0x6720d32f + parameter_id: 0x39c040d1 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0x6d7f5ff6 +} function { id: 0x92c4ddf1 return_type_id: 0x6720d32f @@ -308874,6 +310277,11 @@ function { parameter_id: 0x3df0a7d3 parameter_id: 0x099bbff0 } +function { + id: 0x92db6371 + return_type_id: 0x6720d32f + parameter_id: 0x3d6e017a +} function { id: 0x92dc6e62 return_type_id: 0x6720d32f @@ -309332,6 +310740,13 @@ function { parameter_id: 0x3806390a parameter_id: 0x295c7202 } +function { + id: 0x9324f691 + return_type_id: 0x6720d32f + parameter_id: 0x39d477a1 + parameter_id: 0x3e10b518 + parameter_id: 0xa52a0930 +} function { id: 0x9326478c return_type_id: 0x6720d32f @@ -309365,6 +310780,19 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3aac87ab } +function { + id: 0x932e1cba + return_type_id: 0x6720d32f + parameter_id: 0x3a433e0e + parameter_id: 0x09451098 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x1c934597 + parameter_id: 0x26a97673 + parameter_id: 0x18bd6530 + parameter_id: 0x18bd6530 + parameter_id: 0x38d23361 + parameter_id: 0x1bf16028 +} function { id: 0x93304bad return_type_id: 0x6720d32f @@ -309394,6 +310822,18 @@ function { return_type_id: 0x6720d32f parameter_id: 0x3ae3ff84 } +function { + id: 0x933cebfd + return_type_id: 0x6720d32f + parameter_id: 0x3a433e0e + parameter_id: 0x09451098 + parameter_id: 0x26a97673 + parameter_id: 0x18bd6530 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x38d23361 + parameter_id: 0x1bf16028 + parameter_id: 0x6d7f5ff6 +} function { id: 0x933f3b0e return_type_id: 0x6720d32f @@ -309463,6 +310903,11 @@ function { parameter_id: 0x33756485 parameter_id: 0x0a134144 } +function { + id: 0x93593c41 + return_type_id: 0x6720d32f + parameter_id: 0x3b677dbb +} function { id: 0x935a996a return_type_id: 0x15a30023 @@ -309690,6 +311135,15 @@ function { parameter_id: 0x3b04bead parameter_id: 0x33756485 } +function { + id: 0x938d088e + return_type_id: 0x6720d32f + parameter_id: 0x3a433e0e + parameter_id: 0x26a97673 + parameter_id: 0x18bd6530 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x6d7f5ff6 +} function { id: 0x938d8e84 return_type_id: 0x6720d32f @@ -309987,6 +311441,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x397d00ab } +function { + id: 0x93dfd462 + return_type_id: 0x6720d32f + parameter_id: 0x3fab28c8 + parameter_id: 0x6d7f5ff6 +} function { id: 0x93e044d4 return_type_id: 0x6720d32f @@ -311796,6 +313256,11 @@ function { return_type_id: 0x6720d32f parameter_id: 0x2e8ad82b } +function { + id: 0x962258fc + return_type_id: 0x6720d32f + parameter_id: 0x2e8aef4d +} function { id: 0x9625cb57 return_type_id: 0x6720d32f @@ -312186,6 +313651,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x2d01fcba } +function { + id: 0x96c1ea37 + return_type_id: 0x6720d32f + parameter_id: 0x295c7202 + parameter_id: 0x4585663f +} function { id: 0x96c3b4e1 return_type_id: 0x6720d32f @@ -313419,6 +314890,12 @@ function { parameter_id: 0x14b9453b parameter_id: 0x3f8f206d } +function { + id: 0x98511587 + return_type_id: 0x6720d32f + parameter_id: 0x15c24728 + parameter_id: 0x2859d899 +} function { id: 0x985410df return_type_id: 0x6720d32f @@ -314129,6 +315606,14 @@ function { parameter_id: 0x4585663f parameter_id: 0x4585663f } +function { + id: 0x98e42138 + return_type_id: 0x6720d32f + parameter_id: 0x115cc476 + parameter_id: 0x4585663f + parameter_id: 0x914dbfdc + parameter_id: 0x6d7f5ff6 +} function { id: 0x98e450c7 return_type_id: 0x6720d32f @@ -314767,6 +316252,14 @@ function { parameter_id: 0xeb0f6de6 parameter_id: 0x4585663f } +function { + id: 0x99777843 + return_type_id: 0x6720d32f + parameter_id: 0x10504678 + parameter_id: 0x38d23361 + parameter_id: 0x057af395 + parameter_id: 0x6720d32f +} function { id: 0x99780c28 return_type_id: 0xf435685e @@ -314832,6 +316325,16 @@ function { parameter_id: 0x203f3220 parameter_id: 0x0b0dddba } +function { + id: 0x998b6de0 + return_type_id: 0x6720d32f + parameter_id: 0x10504678 + parameter_id: 0x054f691a + parameter_id: 0x2cc3e4c8 + parameter_id: 0x6720d32f + parameter_id: 0x3a40dd6c + parameter_id: 0x07dcdbe1 +} function { id: 0x998be740 return_type_id: 0x6720d32f @@ -315009,6 +316512,13 @@ function { parameter_id: 0x116785ed parameter_id: 0x1aeeade4 } +function { + id: 0x99b35b75 + return_type_id: 0x6720d32f + parameter_id: 0x10504678 + parameter_id: 0x057af395 + parameter_id: 0xc9082b19 +} function { id: 0x99b42fa2 return_type_id: 0x6720d32f @@ -316472,6 +317982,17 @@ function { parameter_id: 0x4585663f parameter_id: 0x22b36393 } +function { + id: 0x9ab82f4e + return_type_id: 0x6720d32f + parameter_id: 0x10504678 + parameter_id: 0xc9082b19 + parameter_id: 0x239e18b5 + parameter_id: 0x057af395 + parameter_id: 0x3a40dd6c + parameter_id: 0x6720d32f + parameter_id: 0xc9082b19 +} function { id: 0x9ab830ae return_type_id: 0x3e10b518 @@ -317157,6 +318678,14 @@ function { parameter_id: 0x6d7f5ff6 parameter_id: 0x13580d6c } +function { + id: 0x9b247e43 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x24373219 + parameter_id: 0x6d7f5ff6 + parameter_id: 0x11cfee5a +} function { id: 0x9b248c83 return_type_id: 0x6720d32f @@ -317382,6 +318911,14 @@ function { parameter_id: 0x24373219 parameter_id: 0x1f8dbf97 } +function { + id: 0x9b38c2fb + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x24373219 + parameter_id: 0x1f8dbf97 + parameter_id: 0x11cfee5a +} function { id: 0x9b396630 return_type_id: 0x6720d32f @@ -317637,6 +319174,14 @@ function { parameter_id: 0x1bf16028 parameter_id: 0x0a0607fc } +function { + id: 0x9b4b0ec1 + return_type_id: 0x6720d32f + parameter_id: 0x1d44326e + parameter_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x13580d6c +} function { id: 0x9b4b35cf return_type_id: 0x6720d32f @@ -317656,6 +319201,12 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x390ad61e } +function { + id: 0x9b4bc634 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x391f15ea +} function { id: 0x9b4bcb26 return_type_id: 0x6720d32f @@ -317794,6 +319345,15 @@ function { parameter_id: 0x1a5d0549 parameter_id: 0x052fac00 } +function { + id: 0x9b538b4b + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x391f15ea + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f +} function { id: 0x9b538b4c return_type_id: 0x6720d32f @@ -318409,6 +319969,14 @@ function { parameter_id: 0x188b9e81 parameter_id: 0x35d37abd } +function { + id: 0x9b75fd34 + return_type_id: 0x6720d32f + parameter_id: 0x1d44326e + parameter_id: 0x6720d32f + parameter_id: 0xe61f67ea + parameter_id: 0x4585663f +} function { id: 0x9b76121f return_type_id: 0x6720d32f @@ -319292,6 +320860,16 @@ function { parameter_id: 0x1f8dbf97 parameter_id: 0x6720d32f } +function { + id: 0x9bb2f2c9 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x0508b7df + parameter_id: 0x24373219 + parameter_id: 0x1f8dbf97 + parameter_id: 0x6720d32f + parameter_id: 0x11cfee5a +} function { id: 0x9bb5868f return_type_id: 0x6720d32f @@ -319747,6 +321325,17 @@ function { parameter_id: 0x7be80061 parameter_id: 0x4585663f } +function { + id: 0x9bca793f + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1d19a9d5 + parameter_id: 0x4585663f + parameter_id: 0x33756485 + parameter_id: 0x24373219 + parameter_id: 0x1f8dbf97 + parameter_id: 0x13580d6c +} function { id: 0x9bca85c1 return_type_id: 0x6720d32f @@ -321125,6 +322714,13 @@ function { parameter_id: 0x3e10b518 parameter_id: 0x18bd6530 } +function { + id: 0x9c3c1b22 + return_type_id: 0x6720d32f + parameter_id: 0x054f691a + parameter_id: 0x384c5795 + parameter_id: 0x384c5795 +} function { id: 0x9c3e4be2 return_type_id: 0x6720d32f @@ -321271,6 +322867,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x079ff791 } +function { + id: 0x9c683430 + return_type_id: 0x6720d32f + parameter_id: 0x054f691a + parameter_id: 0x2ec35650 +} function { id: 0x9c6915bb return_type_id: 0x11c404ba @@ -322451,6 +324053,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x02862e14 } +function { + id: 0x9d217999 + return_type_id: 0x6720d32f + parameter_id: 0x054f691a + parameter_id: 0x7584e7da + parameter_id: 0x914dbfdc +} function { id: 0x9d220f74 return_type_id: 0x8fd1c081 @@ -324226,6 +325835,12 @@ function { parameter_id: 0x0258f96e parameter_id: 0x38514bfb } +function { + id: 0x9df99295 + return_type_id: 0x6720d32f + parameter_id: 0x0258f96e + parameter_id: 0x3bd3f876 +} function { id: 0x9dfae298 return_type_id: 0x6720d32f @@ -324460,6 +326075,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x0e7d50ff } +function { + id: 0x9e209977 + return_type_id: 0x6720d32f + parameter_id: 0x0abe9fd1 + parameter_id: 0x4585663f + parameter_id: 0x6720d32f +} function { id: 0x9e20c0b8 return_type_id: 0x6720d32f @@ -324576,6 +326198,12 @@ function { parameter_id: 0x0b036186 parameter_id: 0x13580d6c } +function { + id: 0x9e395143 + return_type_id: 0x6720d32f + parameter_id: 0x0abe9fd1 + parameter_id: 0x4585663f +} function { id: 0x9e3d18cf return_type_id: 0x6720d32f @@ -325053,6 +326681,13 @@ function { return_type_id: 0x6720d32f parameter_id: 0x0c2e195c } +function { + id: 0x9e8d4344 + return_type_id: 0x6720d32f + parameter_id: 0x0ca27481 + parameter_id: 0x0abe9fd1 + parameter_id: 0x3f1cd3a6 +} function { id: 0x9e8d7e1b return_type_id: 0x6720d32f @@ -325767,6 +327402,12 @@ function { parameter_id: 0x0e8833d6 parameter_id: 0x6720d32f } +function { + id: 0x9f2d8d2b + return_type_id: 0x6720d32f + parameter_id: 0x0abe9fd1 + parameter_id: 0x00b27c00 +} function { id: 0x9f2dbdb4 return_type_id: 0x6720d32f @@ -326935,6 +328576,13 @@ function { parameter_id: 0x270c2906 parameter_id: 0x3b461cc8 } +function { + id: 0xa2605fd7 + return_type_id: 0x3176a085 + parameter_id: 0x4585663f + parameter_id: 0x3490b2d2 + parameter_id: 0x347303b4 +} function { id: 0xa2832510 return_type_id: 0xfc0e1dbd @@ -327088,6 +328736,10 @@ function { parameter_id: 0xfc0e1dbd parameter_id: 0x0d9f5631 } +function { + id: 0xa5e2423c + return_type_id: 0x39d477a1 +} function { id: 0xa641688a return_type_id: 0xfc0e1dbd @@ -327619,6 +329271,19 @@ function { parameter_id: 0x0258f96e parameter_id: 0x4585663f } +function { + id: 0xace6c945 + return_type_id: 0x6720d32f + parameter_id: 0xc9082b19 + parameter_id: 0xc9082b19 +} +function { + id: 0xaced709f + return_type_id: 0x6720d32f + parameter_id: 0xc9082b19 + parameter_id: 0xc9082b19 + parameter_id: 0x2ee76b64 +} function { id: 0xad2e2b96 return_type_id: 0x0258f96e @@ -328791,6 +330456,11 @@ function { parameter_id: 0x2a285513 parameter_id: 0x4faa9b63 } +function { + id: 0xca3fb0b0 + return_type_id: 0x4585663f + parameter_id: 0x1393392e +} function { id: 0xca4b711f return_type_id: 0x1b084782 @@ -328848,6 +330518,24 @@ function { parameter_id: 0x116785ed parameter_id: 0x4585663f } +function { + id: 0xcbaec654 + return_type_id: 0x4585663f + parameter_id: 0x1582ab06 + parameter_id: 0x064d6086 + parameter_id: 0x33756485 + parameter_id: 0x3ead5537 +} +function { + id: 0xcbafd069 + return_type_id: 0x4585663f + parameter_id: 0x1582ab06 + parameter_id: 0x064d6086 + parameter_id: 0x33756485 + parameter_id: 0x7f7172c7 + parameter_id: 0x4585663f + parameter_id: 0x0b30ee00 +} function { id: 0xcbc6cc7a return_type_id: 0x0a9a051a @@ -329106,6 +330794,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x3e10b518 } +function { + id: 0xcf53d4b6 + return_type_id: 0x4585663f + parameter_id: 0x054f691a + parameter_id: 0x36dc02f2 +} function { id: 0xcf54e4d8 return_type_id: 0x65d74a06 @@ -329301,6 +330995,13 @@ function { parameter_id: 0x105c8027 parameter_id: 0x300fdc99 } +function { + id: 0xd6fcc6b4 + return_type_id: 0x1a8b04e5 + parameter_id: 0x3fab28c8 + parameter_id: 0x6720d32f + parameter_id: 0x1a8b04e5 +} function { id: 0xd742e545 return_type_id: 0x26ad5dc1 @@ -329419,6 +331120,11 @@ function { return_type_id: 0x3ee88c45 parameter_id: 0x0258f96e } +function { + id: 0xdd084b85 + return_type_id: 0x32ec08f2 + parameter_id: 0x3e10b518 +} function { id: 0xdd32bce5 return_type_id: 0x0ae4a2c7 @@ -330303,6 +332009,12 @@ function { return_type_id: 0x1344d43c parameter_id: 0x31829648 } +function { + id: 0xf1a27a59 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x3e6396e0 + parameter_id: 0x27b13952 +} function { id: 0xf1ad8e6c return_type_id: 0x6d7f5ff6 @@ -331254,6 +332966,11 @@ function { return_type_id: 0x6d7f5ff6 parameter_id: 0x10193e4a } +function { + id: 0xfab4e970 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x1042c9d1 +} function { id: 0xfabc5175 return_type_id: 0x6d7f5ff6 @@ -331976,6 +333693,15 @@ elf_symbol { symbol_type: FUNCTION crc: 0x3d93c7c2 } +elf_symbol { + id: 0xa610716e + name: "__audit_log_nfcfg" + is_defined: true + symbol_type: FUNCTION + crc: 0x9968aacb + type_id: 0x1fa9ce73 + full_name: "__audit_log_nfcfg" +} elf_symbol { id: 0x1bc9d7cd name: "__auxiliary_driver_register" @@ -334857,6 +336583,15 @@ elf_symbol { type_id: 0x9d54e5f2 full_name: "__skb_pad" } +elf_symbol { + id: 0xbdb79dce + name: "__skb_vlan_pop" + is_defined: true + symbol_type: FUNCTION + crc: 0x40bb17d8 + type_id: 0x9c683430 + full_name: "__skb_vlan_pop" +} elf_symbol { id: 0x7809a362 name: "__sock_create" @@ -336432,6 +338167,15 @@ elf_symbol { type_id: 0x9bd18c9d full_name: "__traceiter_android_vh_binder_free_proc" } +elf_symbol { + id: 0xe87f2d41 + name: "__traceiter_android_vh_binder_has_special_work_ilocked" + is_defined: true + symbol_type: FUNCTION + crc: 0x0ec74efc + type_id: 0x9b247e43 + full_name: "__traceiter_android_vh_binder_has_special_work_ilocked" +} elf_symbol { id: 0x6935b08b name: "__traceiter_android_vh_binder_has_work_ilocked" @@ -336441,6 +338185,24 @@ elf_symbol { type_id: 0x9b24741c full_name: "__traceiter_android_vh_binder_has_work_ilocked" } +elf_symbol { + id: 0xb0a95f1d + name: "__traceiter_android_vh_binder_ioctl_end" + is_defined: true + symbol_type: FUNCTION + crc: 0x8c109e21 + type_id: 0x9bca793f + full_name: "__traceiter_android_vh_binder_ioctl_end" +} +elf_symbol { + id: 0x49b3cee8 + name: "__traceiter_android_vh_binder_looper_exited" + is_defined: true + symbol_type: FUNCTION + crc: 0x31a70825 + type_id: 0x9b3885c4 + full_name: "__traceiter_android_vh_binder_looper_exited" +} elf_symbol { id: 0xd595bd2c name: "__traceiter_android_vh_binder_looper_state_registered" @@ -336531,6 +338293,15 @@ elf_symbol { type_id: 0x9ba25f4a full_name: "__traceiter_android_vh_binder_restore_priority" } +elf_symbol { + id: 0xbe951464 + name: "__traceiter_android_vh_binder_select_special_worklist" + is_defined: true + symbol_type: FUNCTION + crc: 0xa41a031a + type_id: 0x9bb2f2c9 + full_name: "__traceiter_android_vh_binder_select_special_worklist" +} elf_symbol { id: 0xd738b678 name: "__traceiter_android_vh_binder_select_worklist_ilocked" @@ -336549,6 +338320,15 @@ elf_symbol { type_id: 0x9ba25f4a full_name: "__traceiter_android_vh_binder_set_priority" } +elf_symbol { + id: 0xbce49c1c + name: "__traceiter_android_vh_binder_spawn_new_thread" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ffcc983 + type_id: 0x9b38c2fb + full_name: "__traceiter_android_vh_binder_spawn_new_thread" +} elf_symbol { id: 0x6bce867e name: "__traceiter_android_vh_binder_special_task" @@ -340446,6 +342226,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_binder_free_proc" } +elf_symbol { + id: 0x28cc114f + name: "__tracepoint_android_vh_binder_has_special_work_ilocked" + is_defined: true + symbol_type: OBJECT + crc: 0x522bc7e1 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_binder_has_special_work_ilocked" +} elf_symbol { id: 0x332635cd name: "__tracepoint_android_vh_binder_has_work_ilocked" @@ -340455,6 +342244,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_binder_has_work_ilocked" } +elf_symbol { + id: 0x8bf347a7 + name: "__tracepoint_android_vh_binder_ioctl_end" + is_defined: true + symbol_type: OBJECT + crc: 0xd0b11a87 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_binder_ioctl_end" +} +elf_symbol { + id: 0x12269b16 + name: "__tracepoint_android_vh_binder_looper_exited" + is_defined: true + symbol_type: OBJECT + crc: 0x2a34d63d + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_binder_looper_exited" +} elf_symbol { id: 0xf06625d6 name: "__tracepoint_android_vh_binder_looper_state_registered" @@ -340545,6 +342352,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_binder_restore_priority" } +elf_symbol { + id: 0x903775d2 + name: "__tracepoint_android_vh_binder_select_special_worklist" + is_defined: true + symbol_type: OBJECT + crc: 0x4b47e85e + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_binder_select_special_worklist" +} elf_symbol { id: 0x21d8d29a name: "__tracepoint_android_vh_binder_select_worklist_ilocked" @@ -340563,6 +342379,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_binder_set_priority" } +elf_symbol { + id: 0x14e4067e + name: "__tracepoint_android_vh_binder_spawn_new_thread" + is_defined: true + symbol_type: OBJECT + crc: 0x5accdd27 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_binder_spawn_new_thread" +} elf_symbol { id: 0xdda667b0 name: "__tracepoint_android_vh_binder_special_task" @@ -344539,6 +346364,15 @@ elf_symbol { type_id: 0x45f82b62 full_name: "arm_smccc_get_version" } +elf_symbol { + id: 0x4f8a812a + name: "arp_send" + is_defined: true + symbol_type: FUNCTION + crc: 0x9ae1c2c6 + type_id: 0x08f48955 + full_name: "arp_send" +} elf_symbol { id: 0x1eee53db name: "arp_tbl" @@ -344629,6 +346463,15 @@ elf_symbol { type_id: 0x9faad4c6 full_name: "attribute_container_unregister" } +elf_symbol { + id: 0x32300687 + name: "audit_enabled" + is_defined: true + symbol_type: OBJECT + crc: 0xb44e18ea + type_id: 0xc9082b19 + full_name: "audit_enabled" +} elf_symbol { id: 0x82786c66 name: "autoremove_wake_function" @@ -348063,6 +349906,15 @@ elf_symbol { type_id: 0x1febeb84 full_name: "clk_put" } +elf_symbol { + id: 0xfb0bf054 + name: "clk_rate_exclusive_put" + is_defined: true + symbol_type: FUNCTION + crc: 0xacb4d88c + type_id: 0x1febeb84 + full_name: "clk_rate_exclusive_put" +} elf_symbol { id: 0xbfeba170 name: "clk_register" @@ -348189,6 +350041,15 @@ elf_symbol { type_id: 0x923e8caa full_name: "clk_set_rate" } +elf_symbol { + id: 0x7c95444b + name: "clk_set_rate_exclusive" + is_defined: true + symbol_type: FUNCTION + crc: 0xc5604800 + type_id: 0x923e8caa + full_name: "clk_set_rate_exclusive" +} elf_symbol { id: 0x7fbd0d58 name: "clk_sync_state" @@ -348216,6 +350077,24 @@ elf_symbol { type_id: 0x1febeb84 full_name: "clk_unregister" } +elf_symbol { + id: 0xdf9b5d08 + name: "clkdev_add" + is_defined: true + symbol_type: FUNCTION + crc: 0xb1d8a384 + type_id: 0x1fdc9a5c + full_name: "clkdev_add" +} +elf_symbol { + id: 0x56748a0b + name: "clkdev_drop" + is_defined: true + symbol_type: FUNCTION + crc: 0x75245022 + type_id: 0x1fdc9a5c + full_name: "clkdev_drop" +} elf_symbol { id: 0x430bfeda name: "clockevents_config_and_register" @@ -352594,6 +354473,15 @@ elf_symbol { type_id: 0x10943c29 full_name: "devm_devfreq_unregister_notifier" } +elf_symbol { + id: 0xb3d128c7 + name: "devm_devfreq_unregister_opp_notifier" + is_defined: true + symbol_type: FUNCTION + crc: 0xbc91c0d5 + type_id: 0x1093c795 + full_name: "devm_devfreq_unregister_opp_notifier" +} elf_symbol { id: 0x8ed64fa4 name: "devm_device_add_group" @@ -353800,6 +355688,15 @@ elf_symbol { type_id: 0x9c603af1 full_name: "devres_destroy" } +elf_symbol { + id: 0xfe668bbf + name: "devres_find" + is_defined: true + symbol_type: FUNCTION + crc: 0x6cb8013f + type_id: 0x5776682f + full_name: "devres_find" +} elf_symbol { id: 0xe41962a4 name: "devres_free" @@ -360435,6 +362332,15 @@ elf_symbol { type_id: 0x98e049ee full_name: "filemap_flush" } +elf_symbol { + id: 0xa6f98003 + name: "filemap_get_folios" + is_defined: true + symbol_type: FUNCTION + crc: 0x162e44f4 + type_id: 0xcbaec654 + full_name: "filemap_get_folios" +} elf_symbol { id: 0xc7c68a05 name: "filemap_write_and_wait_range" @@ -360471,6 +362377,15 @@ elf_symbol { type_id: 0x93eb75f8 full_name: "find_extend_vma" } +elf_symbol { + id: 0xddb3e7a5 + name: "find_get_pages_range_tag" + is_defined: true + symbol_type: FUNCTION + crc: 0x40bbf264 + type_id: 0xcbafd069 + full_name: "find_get_pages_range_tag" +} elf_symbol { id: 0x02b1ce77 name: "find_get_pid" @@ -360561,6 +362476,24 @@ elf_symbol { type_id: 0x9cec28b8 full_name: "firmware_request_nowarn" } +elf_symbol { + id: 0x95cbf27f + name: "fixed_phy_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xcc37eda7 + type_id: 0xa2605fd7 + full_name: "fixed_phy_register" +} +elf_symbol { + id: 0x53f6e0dd + name: "fixed_phy_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0xce8bb312 + type_id: 0x1cc5f9b2 + full_name: "fixed_phy_unregister" +} elf_symbol { id: 0xbbba9aad name: "fixed_size_llseek" @@ -360588,6 +362521,15 @@ elf_symbol { type_id: 0x82854b3f full_name: "flow_keys_basic_dissector" } +elf_symbol { + id: 0xdf121e19 + name: "flow_rule_alloc" + is_defined: true + symbol_type: FUNCTION + crc: 0x0e39522d + type_id: 0x5221a908 + full_name: "flow_rule_alloc" +} elf_symbol { id: 0xdf189e23 name: "flow_rule_match_basic" @@ -360651,6 +362593,15 @@ elf_symbol { type_id: 0xf3110cae full_name: "flush_delayed_work" } +elf_symbol { + id: 0xa9d940b8 + name: "flush_signals" + is_defined: true + symbol_type: FUNCTION + crc: 0xe2b313b2 + type_id: 0x17de3be6 + full_name: "flush_signals" +} elf_symbol { id: 0x3c7c2553 name: "flush_work" @@ -361560,6 +363511,15 @@ elf_symbol { type_id: 0x8ce1baa0 full_name: "generic_handle_irq" } +elf_symbol { + id: 0xd5bc36ee + name: "generic_handle_irq_safe" + is_defined: true + symbol_type: FUNCTION + crc: 0x81e2bdf4 + type_id: 0x8ce1baa0 + full_name: "generic_handle_irq_safe" +} elf_symbol { id: 0x95a840b8 name: "generic_mii_ioctl" @@ -362002,6 +363962,15 @@ elf_symbol { type_id: 0x3a16a200 full_name: "get_each_object_track" } +elf_symbol { + id: 0x4579b2cf + name: "get_fs_type" + is_defined: true + symbol_type: FUNCTION + crc: 0x403e24c8 + type_id: 0xdd084b85 + full_name: "get_fs_type" +} elf_symbol { id: 0xdb82735d name: "get_governor_parent_kobj" @@ -364776,6 +366745,60 @@ elf_symbol { type_id: 0x1d307b55 full_name: "ida_free" } +elf_symbol { + id: 0xed9fa8eb + name: "idle_inject_get_duration" + is_defined: true + symbol_type: FUNCTION + crc: 0xe9cbcfd0 + type_id: 0x1fde2109 + full_name: "idle_inject_get_duration" +} +elf_symbol { + id: 0xba016e8c + name: "idle_inject_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xd9693e02 + type_id: 0x65981286 + full_name: "idle_inject_register" +} +elf_symbol { + id: 0xdcaf9152 + name: "idle_inject_set_duration" + is_defined: true + symbol_type: FUNCTION + crc: 0xc18575af + type_id: 0x1eb06c10 + full_name: "idle_inject_set_duration" +} +elf_symbol { + id: 0x6a3603c1 + name: "idle_inject_set_latency" + is_defined: true + symbol_type: FUNCTION + crc: 0x95e93783 + type_id: 0x1ea10d49 + full_name: "idle_inject_set_latency" +} +elf_symbol { + id: 0xef70cf07 + name: "idle_inject_start" + is_defined: true + symbol_type: FUNCTION + crc: 0x5b3a2cd6 + type_id: 0x92afaa6d + full_name: "idle_inject_start" +} +elf_symbol { + id: 0x1f7b646d + name: "idle_inject_stop" + is_defined: true + symbol_type: FUNCTION + crc: 0x85c2b7eb + type_id: 0x1fb718d1 + full_name: "idle_inject_stop" +} elf_symbol { id: 0x7f40c9c2 name: "idr_alloc" @@ -365334,6 +367357,15 @@ elf_symbol { type_id: 0x16dc304e full_name: "iio_trigger_free" } +elf_symbol { + id: 0xaaf2e930 + name: "iio_trigger_generic_data_rdy_poll" + is_defined: true + symbol_type: FUNCTION + crc: 0x2d6bcdcb + type_id: 0x3b6e45be + full_name: "iio_trigger_generic_data_rdy_poll" +} elf_symbol { id: 0x613f6d1f name: "iio_trigger_notify_done" @@ -365856,6 +367888,15 @@ elf_symbol { type_id: 0x15912855 full_name: "input_copy_abs" } +elf_symbol { + id: 0x5a86c89e + name: "input_device_enabled" + is_defined: true + symbol_type: FUNCTION + crc: 0x4e243813 + type_id: 0xfab4e970 + full_name: "input_device_enabled" +} elf_symbol { id: 0x1cfb5d03 name: "input_event" @@ -367125,6 +369166,15 @@ elf_symbol { type_id: 0x5807e85a full_name: "irq_domain_create_hierarchy" } +elf_symbol { + id: 0xe67fe9f7 + name: "irq_domain_create_simple" + is_defined: true + symbol_type: FUNCTION + crc: 0x63135fdc + type_id: 0x5f0ba086 + full_name: "irq_domain_create_simple" +} elf_symbol { id: 0xba41ecd4 name: "irq_domain_disconnect_hierarchy" @@ -367612,6 +369662,15 @@ elf_symbol { type_id: 0x9659ea27 full_name: "iterate_fd" } +elf_symbol { + id: 0xfea15456 + name: "iterate_supers_type" + is_defined: true + symbol_type: FUNCTION + crc: 0x4a91ba47 + type_id: 0x1c167d2e + full_name: "iterate_supers_type" +} elf_symbol { id: 0xca27ab6b name: "iunique" @@ -367729,6 +369788,15 @@ elf_symbol { type_id: 0x73531faf full_name: "jiffies_64_to_clock_t" } +elf_symbol { + id: 0x01438401 + name: "jiffies_to_clock_t" + is_defined: true + symbol_type: FUNCTION + crc: 0x7d0db45c + type_id: 0x416f964c + full_name: "jiffies_to_clock_t" +} elf_symbol { id: 0x9175ce1c name: "jiffies_to_msecs" @@ -369439,6 +371507,15 @@ elf_symbol { type_id: 0x984fafbd full_name: "l2tp_xmit_skb" } +elf_symbol { + id: 0x17e9fb87 + name: "led_blink_set_oneshot" + is_defined: true + symbol_type: FUNCTION + crc: 0x4161bcf8 + type_id: 0x1c33c003 + full_name: "led_blink_set_oneshot" +} elf_symbol { id: 0x709f7fc8 name: "led_classdev_flash_register_ext" @@ -369538,6 +371615,15 @@ elf_symbol { type_id: 0x91a53d53 full_name: "led_set_flash_timeout" } +elf_symbol { + id: 0xe0c4a1c1 + name: "led_stop_software_blink" + is_defined: true + symbol_type: FUNCTION + crc: 0x2e5a3d0d + type_id: 0x1c2afa5a + full_name: "led_stop_software_blink" +} elf_symbol { id: 0x1874c9e3 name: "led_sysfs_disable" @@ -369979,6 +372065,15 @@ elf_symbol { type_id: 0x9c585b1a full_name: "match_token" } +elf_symbol { + id: 0xfe698851 + name: "max_load_balance_interval" + is_defined: true + symbol_type: OBJECT + crc: 0xae14740f + type_id: 0x33756485 + full_name: "max_load_balance_interval" +} elf_symbol { id: 0x588e0fe2 name: "mbox_chan_received_data" @@ -372540,6 +374635,96 @@ elf_symbol { type_id: 0xfebe0504 full_name: "nf_ct_invert_tuple" } +elf_symbol { + id: 0x38b1d9e3 + name: "nf_log_buf_add" + is_defined: true + symbol_type: FUNCTION + crc: 0xcd6f2dc9 + type_id: 0x9324f691 + full_name: "nf_log_buf_add" +} +elf_symbol { + id: 0xeacec26b + name: "nf_log_buf_close" + is_defined: true + symbol_type: FUNCTION + crc: 0x80c68137 + type_id: 0x1eed4c7b + full_name: "nf_log_buf_close" +} +elf_symbol { + id: 0xfde35a24 + name: "nf_log_buf_open" + is_defined: true + symbol_type: FUNCTION + crc: 0x0d4961de + type_id: 0xa5e2423c + full_name: "nf_log_buf_open" +} +elf_symbol { + id: 0x05283614 + name: "nf_log_packet" + is_defined: true + symbol_type: FUNCTION + crc: 0xdaa07447 + type_id: 0x138ba240 + full_name: "nf_log_packet" +} +elf_symbol { + id: 0x8ecf8aa9 + name: "nf_log_register" + is_defined: true + symbol_type: FUNCTION + crc: 0x76eb5be6 + type_id: 0x9f2d8d2b + full_name: "nf_log_register" +} +elf_symbol { + id: 0x55dea4c4 + name: "nf_log_set" + is_defined: true + symbol_type: FUNCTION + crc: 0x939a54bd + type_id: 0x9e8d4344 + full_name: "nf_log_set" +} +elf_symbol { + id: 0x8ca42486 + name: "nf_log_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x616b7349 + type_id: 0x10b4ce93 + full_name: "nf_log_unregister" +} +elf_symbol { + id: 0xdd9bb11b + name: "nf_log_unset" + is_defined: true + symbol_type: FUNCTION + crc: 0x134619c3 + type_id: 0x134cbffd + full_name: "nf_log_unset" +} +elf_symbol { + id: 0x5eaca033 + name: "nf_logger_find_get" + is_defined: true + symbol_type: FUNCTION + crc: 0xd1f2eee2 + type_id: 0x841a3f70 + full_name: "nf_logger_find_get" +} +elf_symbol { + id: 0x7a73c649 + name: "nf_logger_put" + is_defined: true + symbol_type: FUNCTION + crc: 0xb8cd3a7f + type_id: 0x09028dcc + full_name: "nf_logger_put" +} elf_symbol { id: 0x8b1dfb41 name: "nf_register_net_hook" @@ -372558,6 +374743,15 @@ elf_symbol { type_id: 0x9e768b87 full_name: "nf_register_net_hooks" } +elf_symbol { + id: 0xaf6b3cf1 + name: "nf_register_sockopt" + is_defined: true + symbol_type: FUNCTION + crc: 0x953af51d + type_id: 0x92045331 + full_name: "nf_register_sockopt" +} elf_symbol { id: 0x840dad92 name: "nf_unregister_net_hook" @@ -372576,6 +374770,15 @@ elf_symbol { type_id: 0x136e393b full_name: "nf_unregister_net_hooks" } +elf_symbol { + id: 0x21972142 + name: "nf_unregister_sockopt" + is_defined: true + symbol_type: FUNCTION + crc: 0x94800529 + type_id: 0x1f1ce18d + full_name: "nf_unregister_sockopt" +} elf_symbol { id: 0x36bc8d13 name: "nfc_add_se" @@ -374637,6 +376840,15 @@ elf_symbol { type_id: 0x6720d32f full_name: "overflowuid" } +elf_symbol { + id: 0x23a386a4 + name: "page_cache_async_ra" + is_defined: true + symbol_type: FUNCTION + crc: 0x7f37eef2 + type_id: 0x19c7e382 + full_name: "page_cache_async_ra" +} elf_symbol { id: 0xdea2b008 name: "page_cache_next_miss" @@ -374655,6 +376867,15 @@ elf_symbol { type_id: 0x340d6f59 full_name: "page_cache_prev_miss" } +elf_symbol { + id: 0x591c4b4f + name: "page_cache_sync_ra" + is_defined: true + symbol_type: FUNCTION + crc: 0xe337e689 + type_id: 0x19832808 + full_name: "page_cache_sync_ra" +} elf_symbol { id: 0x60d84cc3 name: "page_endio" @@ -376503,6 +378724,24 @@ elf_symbol { type_id: 0x1c416a95 full_name: "phy_ethtool_get_wol" } +elf_symbol { + id: 0x55d86251 + name: "phy_ethtool_ksettings_get" + is_defined: true + symbol_type: FUNCTION + crc: 0x4b00eccd + type_id: 0x1ca12c7e + full_name: "phy_ethtool_ksettings_get" +} +elf_symbol { + id: 0xbaefa94a + name: "phy_ethtool_ksettings_set" + is_defined: true + symbol_type: FUNCTION + crc: 0xd044fa31 + type_id: 0x9138bf4f + full_name: "phy_ethtool_ksettings_set" +} elf_symbol { id: 0x6a3f9c83 name: "phy_ethtool_nway_reset" @@ -376764,6 +379003,15 @@ elf_symbol { type_id: 0x90738a48 full_name: "phy_read_paged" } +elf_symbol { + id: 0x7944625a + name: "phy_register_fixup_for_uid" + is_defined: true + symbol_type: FUNCTION + crc: 0x6b6cddac + type_id: 0xaced709f + full_name: "phy_register_fixup_for_uid" +} elf_symbol { id: 0x6e21f792 name: "phy_remove_link_mode" @@ -376818,6 +379066,15 @@ elf_symbol { type_id: 0x90580076 full_name: "phy_restore_page" } +elf_symbol { + id: 0x16bb21a4 + name: "phy_save_page" + is_defined: true + symbol_type: FUNCTION + crc: 0x2acbda9f + type_id: 0x91dd4b0e + full_name: "phy_save_page" +} elf_symbol { id: 0x0ccd2ae9 name: "phy_select_page" @@ -376944,6 +379201,15 @@ elf_symbol { type_id: 0x1cc5f9b2 full_name: "phy_trigger_machine" } +elf_symbol { + id: 0xde204c0c + name: "phy_unregister_fixup_for_uid" + is_defined: true + symbol_type: FUNCTION + crc: 0xd738ca1b + type_id: 0xace6c945 + full_name: "phy_unregister_fixup_for_uid" +} elf_symbol { id: 0xe7bafb12 name: "phy_validate" @@ -383280,6 +385546,15 @@ elf_symbol { type_id: 0x1c822746 full_name: "sdhci_enable_clk" } +elf_symbol { + id: 0xe34ae949 + name: "sdhci_enable_sdio_irq" + is_defined: true + symbol_type: FUNCTION + crc: 0x09984b8d + type_id: 0x1c8280d3 + full_name: "sdhci_enable_sdio_irq" +} elf_symbol { id: 0x5ab300fb name: "sdhci_enable_v4_mode" @@ -383406,6 +385681,15 @@ elf_symbol { type_id: 0x93dfa305 full_name: "sdhci_runtime_suspend_host" } +elf_symbol { + id: 0x5fc5a856 + name: "sdhci_send_tuning" + is_defined: true + symbol_type: FUNCTION + crc: 0x8b902c3e + type_id: 0x1de33115 + full_name: "sdhci_send_tuning" +} elf_symbol { id: 0xd2399e18 name: "sdhci_set_bus_width" @@ -385036,6 +387320,69 @@ elf_symbol { type_id: 0x9dc52cf1 full_name: "skb_ensure_writable" } +elf_symbol { + id: 0x4a80bd34 + name: "skb_eth_pop" + is_defined: true + symbol_type: FUNCTION + crc: 0x50d031fd + type_id: 0x9cd33969 + full_name: "skb_eth_pop" +} +elf_symbol { + id: 0xacfbcb27 + name: "skb_eth_push" + is_defined: true + symbol_type: FUNCTION + crc: 0xf0efc4fc + type_id: 0x9c3c1b22 + full_name: "skb_eth_push" +} +elf_symbol { + id: 0x414be22e + name: "skb_flow_dissect_ct" + is_defined: true + symbol_type: FUNCTION + crc: 0x3f0543e5 + type_id: 0x1faed94e + full_name: "skb_flow_dissect_ct" +} +elf_symbol { + id: 0x020865bd + name: "skb_flow_dissect_hash" + is_defined: true + symbol_type: FUNCTION + crc: 0x7622e705 + type_id: 0x1fae5edf + full_name: "skb_flow_dissect_hash" +} +elf_symbol { + id: 0xb3f58cb2 + name: "skb_flow_dissect_meta" + is_defined: true + symbol_type: FUNCTION + crc: 0xf1dd55b5 + type_id: 0x1fae5edf + full_name: "skb_flow_dissect_meta" +} +elf_symbol { + id: 0x236e8eb5 + name: "skb_flow_dissect_tunnel_info" + is_defined: true + symbol_type: FUNCTION + crc: 0x5b143d5e + type_id: 0x1fae5edf + full_name: "skb_flow_dissect_tunnel_info" +} +elf_symbol { + id: 0xd1a5a209 + name: "skb_flow_dissector_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xb11e6d8f + type_id: 0x1af68d6f + full_name: "skb_flow_dissector_init" +} elf_symbol { id: 0xca7402ca name: "skb_free_datagram" @@ -385234,6 +387581,24 @@ elf_symbol { type_id: 0x11b644af full_name: "skb_unlink" } +elf_symbol { + id: 0x4cb1cea9 + name: "skb_vlan_pop" + is_defined: true + symbol_type: FUNCTION + crc: 0xb3a96b22 + type_id: 0x9cd33969 + full_name: "skb_vlan_pop" +} +elf_symbol { + id: 0x2b9b7a92 + name: "skb_vlan_push" + is_defined: true + symbol_type: FUNCTION + crc: 0xa0805653 + type_id: 0x9d217999 + full_name: "skb_vlan_push" +} elf_symbol { id: 0x706a5214 name: "skcipher_alloc_instance_simple" @@ -388240,6 +390605,15 @@ elf_symbol { type_id: 0x394e2c9b full_name: "start_poll_synchronize_srcu" } +elf_symbol { + id: 0x03273441 + name: "static_key_count" + is_defined: true + symbol_type: FUNCTION + crc: 0x389b64a2 + type_id: 0x962258fc + full_name: "static_key_count" +} elf_symbol { id: 0xc24d49e4 name: "static_key_disable" @@ -388828,6 +391202,15 @@ elf_symbol { type_id: 0x8151bb19 full_name: "syscon_regmap_lookup_by_phandle_optional" } +elf_symbol { + id: 0xa32ba558 + name: "sysctl_nf_log_all_netns" + is_defined: true + symbol_type: OBJECT + crc: 0x9aaeefce + type_id: 0x6720d32f + full_name: "sysctl_nf_log_all_netns" +} elf_symbol { id: 0xbf1515af name: "sysctl_sched_features" @@ -389278,6 +391661,51 @@ elf_symbol { type_id: 0xf4933b90 full_name: "tasklist_lock" } +elf_symbol { + id: 0x1a591d57 + name: "tc_setup_cb_add" + is_defined: true + symbol_type: FUNCTION + crc: 0xcaeffa45 + type_id: 0x933cebfd + full_name: "tc_setup_cb_add" +} +elf_symbol { + id: 0xf099d343 + name: "tc_setup_cb_call" + is_defined: true + symbol_type: FUNCTION + crc: 0x76fe3f79 + type_id: 0x938d088e + full_name: "tc_setup_cb_call" +} +elf_symbol { + id: 0xadb59b05 + name: "tc_setup_cb_destroy" + is_defined: true + symbol_type: FUNCTION + crc: 0xc6603a57 + type_id: 0x933cebfd + full_name: "tc_setup_cb_destroy" +} +elf_symbol { + id: 0xbfd2d0d2 + name: "tc_setup_cb_reoffload" + is_defined: true + symbol_type: FUNCTION + crc: 0x0af2caa9 + type_id: 0x932e1cba + full_name: "tc_setup_cb_reoffload" +} +elf_symbol { + id: 0xd6059721 + name: "tcf_action_check_ctrlact" + is_defined: true + symbol_type: FUNCTION + crc: 0x46abbb86 + type_id: 0x846ed06b + full_name: "tcf_action_check_ctrlact" +} elf_symbol { id: 0x01cdd14d name: "tcf_action_exec" @@ -389287,6 +391715,33 @@ elf_symbol { type_id: 0x9cdfbc5a full_name: "tcf_action_exec" } +elf_symbol { + id: 0x2d797653 + name: "tcf_action_set_ctrlact" + is_defined: true + symbol_type: FUNCTION + crc: 0x40648ae8 + type_id: 0xd6fcc6b4 + full_name: "tcf_action_set_ctrlact" +} +elf_symbol { + id: 0x2fba8b59 + name: "tcf_action_update_stats" + is_defined: true + symbol_type: FUNCTION + crc: 0xc01351f4 + type_id: 0x1d1ccc70 + full_name: "tcf_action_update_stats" +} +elf_symbol { + id: 0xcda1c9b0 + name: "tcf_chain_put_by_act" + is_defined: true + symbol_type: FUNCTION + crc: 0x32e263c9 + type_id: 0x163a90aa + full_name: "tcf_chain_put_by_act" +} elf_symbol { id: 0xc924b9c3 name: "tcf_exts_destroy" @@ -389314,6 +391769,24 @@ elf_symbol { type_id: 0x9c9d758d full_name: "tcf_exts_dump_stats" } +elf_symbol { + id: 0xcc0525bc + name: "tcf_exts_num_actions" + is_defined: true + symbol_type: FUNCTION + crc: 0x622f18a2 + type_id: 0xca3fb0b0 + full_name: "tcf_exts_num_actions" +} +elf_symbol { + id: 0xb8aeb338 + name: "tcf_exts_terse_dump" + is_defined: true + symbol_type: FUNCTION + crc: 0x6ed8c02c + type_id: 0x9c9d758d + full_name: "tcf_exts_terse_dump" +} elf_symbol { id: 0xd6adc7e6 name: "tcf_exts_validate" @@ -389323,6 +391796,69 @@ elf_symbol { type_id: 0x9e8d7e1b full_name: "tcf_exts_validate" } +elf_symbol { + id: 0x15d83074 + name: "tcf_generic_walker" + is_defined: true + symbol_type: FUNCTION + crc: 0xed0b67db + type_id: 0x998b6de0 + full_name: "tcf_generic_walker" +} +elf_symbol { + id: 0x199994d8 + name: "tcf_idr_check_alloc" + is_defined: true + symbol_type: FUNCTION + crc: 0xc97e7304 + type_id: 0x99777843 + full_name: "tcf_idr_check_alloc" +} +elf_symbol { + id: 0xf8fc1781 + name: "tcf_idr_cleanup" + is_defined: true + symbol_type: FUNCTION + crc: 0x5d9b66f4 + type_id: 0x17a860a1 + full_name: "tcf_idr_cleanup" +} +elf_symbol { + id: 0x7d1274eb + name: "tcf_idr_create_from_flags" + is_defined: true + symbol_type: FUNCTION + crc: 0x9542eb81 + type_id: 0x9ab82f4e + full_name: "tcf_idr_create_from_flags" +} +elf_symbol { + id: 0xff33b55b + name: "tcf_idr_release" + is_defined: true + symbol_type: FUNCTION + crc: 0x37c812cd + type_id: 0x93dfd462 + full_name: "tcf_idr_release" +} +elf_symbol { + id: 0x6bb95f19 + name: "tcf_idr_search" + is_defined: true + symbol_type: FUNCTION + crc: 0xbe3be9ac + type_id: 0x99b35b75 + full_name: "tcf_idr_search" +} +elf_symbol { + id: 0x9945c609 + name: "tcf_idrinfo_destroy" + is_defined: true + symbol_type: FUNCTION + crc: 0x23943127 + type_id: 0x1ed96c59 + full_name: "tcf_idrinfo_destroy" +} elf_symbol { id: 0xcc386657 name: "tcf_queue_work" @@ -389332,6 +391868,24 @@ elf_symbol { type_id: 0xf39dedcb full_name: "tcf_queue_work" } +elf_symbol { + id: 0x529a9e72 + name: "tcf_register_action" + is_defined: true + symbol_type: FUNCTION + crc: 0x86a41cbc + type_id: 0x98511587 + full_name: "tcf_register_action" +} +elf_symbol { + id: 0x99d5bf98 + name: "tcf_unregister_action" + is_defined: true + symbol_type: FUNCTION + crc: 0xb6030976 + type_id: 0x98511587 + full_name: "tcf_unregister_action" +} elf_symbol { id: 0xeb0e3e9b name: "tcp_hashinfo" @@ -392779,6 +395333,15 @@ elf_symbol { type_id: 0x945a66f1 full_name: "update_devfreq" } +elf_symbol { + id: 0xcac5efbb + name: "update_misfit_status" + is_defined: true + symbol_type: FUNCTION + crc: 0x7e7e60ad + type_id: 0x1766319b + full_name: "update_misfit_status" +} elf_symbol { id: 0xa32cb360 name: "update_rq_clock" @@ -395335,6 +397898,15 @@ elf_symbol { type_id: 0x209ae488 full_name: "v4l2_format_info" } +elf_symbol { + id: 0xfb876b5c + name: "v4l2_fwnode_device_parse" + is_defined: true + symbol_type: FUNCTION + crc: 0x03ecb420 + type_id: 0x9df99295 + full_name: "v4l2_fwnode_device_parse" +} elf_symbol { id: 0x7ba36329 name: "v4l2_fwnode_endpoint_alloc_parse" @@ -397405,6 +399977,15 @@ elf_symbol { type_id: 0x5a4be8d0 full_name: "vmalloc" } +elf_symbol { + id: 0xe69feff9 + name: "vmalloc_node" + is_defined: true + symbol_type: FUNCTION + crc: 0x23fd3028 + type_id: 0x5bd76b9c + full_name: "vmalloc_node" +} elf_symbol { id: 0x3f9de086 name: "vmalloc_nr_pages" @@ -398665,6 +401246,132 @@ elf_symbol { type_id: 0xfe25e2a0 full_name: "xsk_uses_need_wakeup" } +elf_symbol { + id: 0xf5ab35e6 + name: "xt_check_match" + is_defined: true + symbol_type: FUNCTION + crc: 0x05cd1740 + type_id: 0x98e42138 + full_name: "xt_check_match" +} +elf_symbol { + id: 0x7403a15a + name: "xt_check_target" + is_defined: true + symbol_type: FUNCTION + crc: 0x1314973f + type_id: 0x92c30011 + full_name: "xt_check_target" +} +elf_symbol { + id: 0x2f309c50 + name: "xt_compat_add_offset" + is_defined: true + symbol_type: FUNCTION + crc: 0x823edea5 + type_id: 0x9e209977 + full_name: "xt_compat_add_offset" +} +elf_symbol { + id: 0x26744e0a + name: "xt_compat_calc_jump" + is_defined: true + symbol_type: FUNCTION + crc: 0xc7fae024 + type_id: 0x9e395143 + full_name: "xt_compat_calc_jump" +} +elf_symbol { + id: 0xe7886112 + name: "xt_compat_flush_offsets" + is_defined: true + symbol_type: FUNCTION + crc: 0x04e27719 + type_id: 0x1237f667 + full_name: "xt_compat_flush_offsets" +} +elf_symbol { + id: 0xcec5ff48 + name: "xt_compat_init_offsets" + is_defined: true + symbol_type: FUNCTION + crc: 0x50873741 + type_id: 0x96c1ea37 + full_name: "xt_compat_init_offsets" +} +elf_symbol { + id: 0x78c32641 + name: "xt_compat_lock" + is_defined: true + symbol_type: FUNCTION + crc: 0xa7c94f1d + type_id: 0x1237f667 + full_name: "xt_compat_lock" +} +elf_symbol { + id: 0x135c7495 + name: "xt_compat_match_offset" + is_defined: true + symbol_type: FUNCTION + crc: 0x14a0f8b0 + type_id: 0x92db6371 + full_name: "xt_compat_match_offset" +} +elf_symbol { + id: 0x85c54a29 + name: "xt_compat_target_offset" + is_defined: true + symbol_type: FUNCTION + crc: 0xfb916994 + type_id: 0x918f03f1 + full_name: "xt_compat_target_offset" +} +elf_symbol { + id: 0x5a8a6a49 + name: "xt_compat_unlock" + is_defined: true + symbol_type: FUNCTION + crc: 0xd1e246a2 + type_id: 0x1237f667 + full_name: "xt_compat_unlock" +} +elf_symbol { + id: 0x8eb67e0f + name: "xt_data_to_user" + is_defined: true + symbol_type: FUNCTION + crc: 0xc2666935 + type_id: 0x9b538b4b + full_name: "xt_data_to_user" +} +elf_symbol { + id: 0xf6d0be30 + name: "xt_find_match" + is_defined: true + symbol_type: FUNCTION + crc: 0x9ae59c00 + type_id: 0x7a9367a8 + full_name: "xt_find_match" +} +elf_symbol { + id: 0xffcb0fa2 + name: "xt_request_find_match" + is_defined: true + symbol_type: FUNCTION + crc: 0xbbf17510 + type_id: 0x60249243 + full_name: "xt_request_find_match" +} +elf_symbol { + id: 0xa2ee5f12 + name: "xt_request_find_target" + is_defined: true + symbol_type: FUNCTION + crc: 0x3f5ba116 + type_id: 0x0118ea6e + full_name: "xt_request_find_target" +} elf_symbol { id: 0x0fc8c78d name: "zap_vma_ptes" @@ -398883,6 +401590,7 @@ interface { symbol_id: 0xc77348b3 symbol_id: 0x21c9fe20 symbol_id: 0xeaf0b860 + symbol_id: 0xa610716e symbol_id: 0x1bc9d7cd symbol_id: 0xd97b055a symbol_id: 0xac51df48 @@ -399203,6 +401911,7 @@ interface { symbol_id: 0xe614bbc1 symbol_id: 0x07c5a76f symbol_id: 0x55574d11 + symbol_id: 0xbdb79dce symbol_id: 0x7809a362 symbol_id: 0x91762fff symbol_id: 0x7a4705f8 @@ -399378,7 +402087,10 @@ interface { symbol_id: 0x6e0b473c symbol_id: 0xcb807696 symbol_id: 0xbebf7d98 + symbol_id: 0xe87f2d41 symbol_id: 0x6935b08b + symbol_id: 0xb0a95f1d + symbol_id: 0x49b3cee8 symbol_id: 0xd595bd2c symbol_id: 0xfdb48c6a symbol_id: 0xbff39e0e @@ -399389,8 +402101,10 @@ interface { symbol_id: 0x5c1ee0c5 symbol_id: 0x2d244867 symbol_id: 0xc6c9353c + symbol_id: 0xbe951464 symbol_id: 0xd738b678 symbol_id: 0x2a9c6616 + symbol_id: 0xbce49c1c symbol_id: 0x6bce867e symbol_id: 0x4785a3dd symbol_id: 0x25f13dbe @@ -399824,7 +402538,10 @@ interface { symbol_id: 0x61b56472 symbol_id: 0x19dded7c symbol_id: 0xf32898c6 + symbol_id: 0x28cc114f symbol_id: 0x332635cd + symbol_id: 0x8bf347a7 + symbol_id: 0x12269b16 symbol_id: 0xf06625d6 symbol_id: 0x259ffe94 symbol_id: 0x95c75a1c @@ -399835,8 +402552,10 @@ interface { symbol_id: 0x54aac8cb symbol_id: 0x6de9ac69 symbol_id: 0x57a9a36a + symbol_id: 0x903775d2 symbol_id: 0x21d8d29a symbol_id: 0x2e04cb9c + symbol_id: 0x14e4067e symbol_id: 0xdda667b0 symbol_id: 0x306b5ff7 symbol_id: 0x2fce8f78 @@ -400279,6 +402998,7 @@ interface { symbol_id: 0xd634ca29 symbol_id: 0xd672b08d symbol_id: 0xb61718ed + symbol_id: 0x4f8a812a symbol_id: 0x1eee53db symbol_id: 0xd9184490 symbol_id: 0xe6ba30b7 @@ -400289,6 +403009,7 @@ interface { symbol_id: 0x24064426 symbol_id: 0x41765c03 symbol_id: 0xcd05507b + symbol_id: 0x32300687 symbol_id: 0x82786c66 symbol_id: 0xd772fde3 symbol_id: 0x1abdc14f @@ -400671,6 +403392,7 @@ interface { symbol_id: 0x3452fd74 symbol_id: 0x62ee7f8a symbol_id: 0x7d1f0700 + symbol_id: 0xfb0bf054 symbol_id: 0xbfeba170 symbol_id: 0x76cb6cc8 symbol_id: 0x822d6c04 @@ -400685,9 +403407,12 @@ interface { symbol_id: 0x2b1e3d59 symbol_id: 0x98850f9d symbol_id: 0x495f0223 + symbol_id: 0x7c95444b symbol_id: 0x7fbd0d58 symbol_id: 0x06f2ea68 symbol_id: 0xc8e117f2 + symbol_id: 0xdf9b5d08 + symbol_id: 0x56748a0b symbol_id: 0x430bfeda symbol_id: 0x0522e13b symbol_id: 0x961eb280 @@ -401175,6 +403900,7 @@ interface { symbol_id: 0x6415475c symbol_id: 0x2bf23b7c symbol_id: 0x97301de5 + symbol_id: 0xb3d128c7 symbol_id: 0x8ed64fa4 symbol_id: 0x0764373d symbol_id: 0x72706e55 @@ -401309,6 +404035,7 @@ interface { symbol_id: 0xd155689b symbol_id: 0xf4be3f1a symbol_id: 0x2f22f242 + symbol_id: 0xfe668bbf symbol_id: 0xe41962a4 symbol_id: 0xfb540e8c symbol_id: 0xabe60a33 @@ -402044,10 +404771,12 @@ interface { symbol_id: 0x3289d59f symbol_id: 0x82b19820 symbol_id: 0x7c937fc2 + symbol_id: 0xa6f98003 symbol_id: 0xc7c68a05 symbol_id: 0xb9dc79d0 symbol_id: 0x8bbdb127 symbol_id: 0xeaf15c9b + symbol_id: 0xddb3e7a5 symbol_id: 0x02b1ce77 symbol_id: 0x90d375c5 symbol_id: 0xdc16d76a @@ -402058,9 +404787,12 @@ interface { symbol_id: 0xf882020f symbol_id: 0x2e62a121 symbol_id: 0x24954a6b + symbol_id: 0x95cbf27f + symbol_id: 0x53f6e0dd symbol_id: 0xbbba9aad symbol_id: 0xd211b195 symbol_id: 0xba7efe3b + symbol_id: 0xdf121e19 symbol_id: 0xdf189e23 symbol_id: 0xae6c6645 symbol_id: 0x6097dede @@ -402068,6 +404800,7 @@ interface { symbol_id: 0xc442704c symbol_id: 0xb290a148 symbol_id: 0x09d08108 + symbol_id: 0xa9d940b8 symbol_id: 0x3c7c2553 symbol_id: 0x06c58be7 symbol_id: 0x159a69a3 @@ -402169,6 +404902,7 @@ interface { symbol_id: 0x3812bb22 symbol_id: 0x2f7205ee symbol_id: 0x7d577f86 + symbol_id: 0xd5bc36ee symbol_id: 0x95a840b8 symbol_id: 0x7f639ef1 symbol_id: 0x4c4073c3 @@ -402218,6 +404952,7 @@ interface { symbol_id: 0xaf0c4e38 symbol_id: 0x08e235b1 symbol_id: 0x00d00ad1 + symbol_id: 0x4579b2cf symbol_id: 0xdb82735d symbol_id: 0x7d6ec6da symbol_id: 0x56ec444f @@ -402526,6 +405261,12 @@ interface { symbol_id: 0x58de8ff6 symbol_id: 0xb9a0744d symbol_id: 0x9c458796 + symbol_id: 0xed9fa8eb + symbol_id: 0xba016e8c + symbol_id: 0xdcaf9152 + symbol_id: 0x6a3603c1 + symbol_id: 0xef70cf07 + symbol_id: 0x1f7b646d symbol_id: 0x7f40c9c2 symbol_id: 0x3b6f5da6 symbol_id: 0x4a59ab5d @@ -402588,6 +405329,7 @@ interface { symbol_id: 0xfc17cb5d symbol_id: 0x7ae28990 symbol_id: 0xcc1f3656 + symbol_id: 0xaaf2e930 symbol_id: 0x613f6d1f symbol_id: 0x83c94241 symbol_id: 0x7551a60b @@ -402646,6 +405388,7 @@ interface { symbol_id: 0xbc652525 symbol_id: 0x2336c16f symbol_id: 0x5b69d05f + symbol_id: 0x5a86c89e symbol_id: 0x1cfb5d03 symbol_id: 0x60efc3a4 symbol_id: 0xc802de31 @@ -402787,6 +405530,7 @@ interface { symbol_id: 0x9f4df92b symbol_id: 0x5e13f2f1 symbol_id: 0x135db1d2 + symbol_id: 0xe67fe9f7 symbol_id: 0xba41ecd4 symbol_id: 0x3fa49947 symbol_id: 0x327b1cbb @@ -402841,6 +405585,7 @@ interface { symbol_id: 0xbb7edccb symbol_id: 0xd4b34ea6 symbol_id: 0x3c6496cb + symbol_id: 0xfea15456 symbol_id: 0xca27ab6b symbol_id: 0x124d42c2 symbol_id: 0xd106aba0 @@ -402854,6 +405599,7 @@ interface { symbol_id: 0xd63a3f70 symbol_id: 0x075fdad1 symbol_id: 0x6bcfa61d + symbol_id: 0x01438401 symbol_id: 0x9175ce1c symbol_id: 0x81dadb36 symbol_id: 0x9bfc3a5e @@ -403044,6 +405790,7 @@ interface { symbol_id: 0x8066cf3a symbol_id: 0x8f6761e2 symbol_id: 0x20069858 + symbol_id: 0x17e9fb87 symbol_id: 0x709f7fc8 symbol_id: 0xa58e6f5d symbol_id: 0xfe24eb71 @@ -403055,6 +405802,7 @@ interface { symbol_id: 0x2e74d698 symbol_id: 0x7bbb8d5f symbol_id: 0xa18d331b + symbol_id: 0xe0c4a1c1 symbol_id: 0x1874c9e3 symbol_id: 0xef448c0c symbol_id: 0x678fcec9 @@ -403104,6 +405852,7 @@ interface { symbol_id: 0xcc9bd833 symbol_id: 0x97e555df symbol_id: 0x61c53930 + symbol_id: 0xfe698851 symbol_id: 0x588e0fe2 symbol_id: 0xdaf86712 symbol_id: 0xd8f7e87d @@ -403389,10 +406138,22 @@ interface { symbol_id: 0xb4e99805 symbol_id: 0x471faa17 symbol_id: 0x82e37620 + symbol_id: 0x38b1d9e3 + symbol_id: 0xeacec26b + symbol_id: 0xfde35a24 + symbol_id: 0x05283614 + symbol_id: 0x8ecf8aa9 + symbol_id: 0x55dea4c4 + symbol_id: 0x8ca42486 + symbol_id: 0xdd9bb11b + symbol_id: 0x5eaca033 + symbol_id: 0x7a73c649 symbol_id: 0x8b1dfb41 symbol_id: 0x43078d96 + symbol_id: 0xaf6b3cf1 symbol_id: 0x840dad92 symbol_id: 0x619db28f + symbol_id: 0x21972142 symbol_id: 0x36bc8d13 symbol_id: 0x38637341 symbol_id: 0x985a4d66 @@ -403622,8 +406383,10 @@ interface { symbol_id: 0x57ecab02 symbol_id: 0x27d0c7b6 symbol_id: 0x28b33064 + symbol_id: 0x23a386a4 symbol_id: 0xdea2b008 symbol_id: 0xdf2c83f5 + symbol_id: 0x591c4b4f symbol_id: 0x60d84cc3 symbol_id: 0xb613af5e symbol_id: 0xff029108 @@ -403829,6 +406592,8 @@ interface { symbol_id: 0x02d49a4a symbol_id: 0xc8a98327 symbol_id: 0x1e7f3ab3 + symbol_id: 0x55d86251 + symbol_id: 0xbaefa94a symbol_id: 0x6a3f9c83 symbol_id: 0xd75689cb symbol_id: 0x992e8b3c @@ -403858,12 +406623,14 @@ interface { symbol_id: 0xc7d3f838 symbol_id: 0x1a84af17 symbol_id: 0x13b5133e + symbol_id: 0x7944625a symbol_id: 0x6e21f792 symbol_id: 0x4e868331 symbol_id: 0xd306839f symbol_id: 0x8fff831c symbol_id: 0x61290d1f symbol_id: 0x409cd326 + symbol_id: 0x16bb21a4 symbol_id: 0x0ccd2ae9 symbol_id: 0x14a69275 symbol_id: 0x6a86851c @@ -403878,6 +406645,7 @@ interface { symbol_id: 0xf1503ace symbol_id: 0x2c0117f0 symbol_id: 0xa3314c5c + symbol_id: 0xde204c0c symbol_id: 0xe7bafb12 symbol_id: 0x32988703 symbol_id: 0x39bc463d @@ -404582,6 +407350,7 @@ interface { symbol_id: 0xc4c7fcde symbol_id: 0x20d4dbb9 symbol_id: 0x6febaf59 + symbol_id: 0xe34ae949 symbol_id: 0x5ab300fb symbol_id: 0x33d40ef0 symbol_id: 0xeb6692c0 @@ -404596,6 +407365,7 @@ interface { symbol_id: 0xa6fc085f symbol_id: 0x4e595f64 symbol_id: 0xd94e8fae + symbol_id: 0x5fc5a856 symbol_id: 0xd2399e18 symbol_id: 0x92732196 symbol_id: 0xd29660d9 @@ -404777,6 +407547,13 @@ interface { symbol_id: 0xe40dd16b symbol_id: 0xe3dfe241 symbol_id: 0x33735fec + symbol_id: 0x4a80bd34 + symbol_id: 0xacfbcb27 + symbol_id: 0x414be22e + symbol_id: 0x020865bd + symbol_id: 0xb3f58cb2 + symbol_id: 0x236e8eb5 + symbol_id: 0xd1a5a209 symbol_id: 0xca7402ca symbol_id: 0x778992cc symbol_id: 0x0e0dc50e @@ -404799,6 +407576,8 @@ interface { symbol_id: 0x745d77d7 symbol_id: 0xee44d535 symbol_id: 0xeedc57e1 + symbol_id: 0x4cb1cea9 + symbol_id: 0x2b9b7a92 symbol_id: 0x706a5214 symbol_id: 0x56fe28ac symbol_id: 0xfb0d7eaf @@ -405133,6 +407912,7 @@ interface { symbol_id: 0xbd07e567 symbol_id: 0xf304733e symbol_id: 0x153d2098 + symbol_id: 0x03273441 symbol_id: 0xc24d49e4 symbol_id: 0x8ac195eb symbol_id: 0xd09568e0 @@ -405199,6 +407979,7 @@ interface { symbol_id: 0x9a5404bf symbol_id: 0x2f857527 symbol_id: 0x3e5f4f82 + symbol_id: 0xa32ba558 symbol_id: 0xbf1515af symbol_id: 0xe6ea21b1 symbol_id: 0x87812861 @@ -405249,12 +408030,31 @@ interface { symbol_id: 0x9c77d018 symbol_id: 0x9b3fb280 symbol_id: 0x6c3c9573 + symbol_id: 0x1a591d57 + symbol_id: 0xf099d343 + symbol_id: 0xadb59b05 + symbol_id: 0xbfd2d0d2 + symbol_id: 0xd6059721 symbol_id: 0x01cdd14d + symbol_id: 0x2d797653 + symbol_id: 0x2fba8b59 + symbol_id: 0xcda1c9b0 symbol_id: 0xc924b9c3 symbol_id: 0x2c53af12 symbol_id: 0xa4bb7174 + symbol_id: 0xcc0525bc + symbol_id: 0xb8aeb338 symbol_id: 0xd6adc7e6 + symbol_id: 0x15d83074 + symbol_id: 0x199994d8 + symbol_id: 0xf8fc1781 + symbol_id: 0x7d1274eb + symbol_id: 0xff33b55b + symbol_id: 0x6bb95f19 + symbol_id: 0x9945c609 symbol_id: 0xcc386657 + symbol_id: 0x529a9e72 + symbol_id: 0x99d5bf98 symbol_id: 0xeb0e3e9b symbol_id: 0x5f96413a symbol_id: 0x34a062e9 @@ -405638,6 +408438,7 @@ interface { symbol_id: 0xe109b3fc symbol_id: 0xb9af2013 symbol_id: 0x2867d724 + symbol_id: 0xcac5efbb symbol_id: 0xa32cb360 symbol_id: 0x45dcd84f symbol_id: 0x54ba3937 @@ -405922,6 +408723,7 @@ interface { symbol_id: 0xe66642fe symbol_id: 0x538ad5cc symbol_id: 0x2244c8f0 + symbol_id: 0xfb876b5c symbol_id: 0x7ba36329 symbol_id: 0x2643c2c9 symbol_id: 0xcb8b4f14 @@ -406152,6 +408954,7 @@ interface { symbol_id: 0xca7f93d5 symbol_id: 0xac972f8d symbol_id: 0x3c915fdb + symbol_id: 0xe69feff9 symbol_id: 0x3f9de086 symbol_id: 0x6d8b459f symbol_id: 0xa1a341df @@ -406292,6 +409095,20 @@ interface { symbol_id: 0xe31eb78b symbol_id: 0xb73c4905 symbol_id: 0xbb650596 + symbol_id: 0xf5ab35e6 + symbol_id: 0x7403a15a + symbol_id: 0x2f309c50 + symbol_id: 0x26744e0a + symbol_id: 0xe7886112 + symbol_id: 0xcec5ff48 + symbol_id: 0x78c32641 + symbol_id: 0x135c7495 + symbol_id: 0x85c54a29 + symbol_id: 0x5a8a6a49 + symbol_id: 0x8eb67e0f + symbol_id: 0xf6d0be30 + symbol_id: 0xffcb0fa2 + symbol_id: 0xa2ee5f12 symbol_id: 0x0fc8c78d symbol_id: 0xe8e0ea6a symbol_id: 0xa5d58813 diff --git a/android/abi_gki_aarch64_asr b/android/abi_gki_aarch64_asr new file mode 100644 index 000000000000..c378a4b70c3f --- /dev/null +++ b/android/abi_gki_aarch64_asr @@ -0,0 +1,43 @@ +[abi_symbol_list] + +# required by asr5803.ko + sdhci_enable_sdio_irq + +# required by asr_serial.ko + uart_get_divisor + uart_handle_cts_change + uart_handle_dcd_change + uart_insert_char + +# required by ehci-asr-ci.ko + ehci_init_driver + ehci_setup + +# required by phy-asr-ci-usb2.ko + usb_add_phy_dev + usb_remove_phy + +# required by pvrsrvkm.ko + call_rcu + devm_devfreq_remove_device + dev_pm_opp_remove + dma_fence_array_ops + dma_fence_enable_sw_signaling + idr_replace + kthread_freezable_should_stop + rcu_barrier + +# required by sdhci_asr.ko + sdhci_resume_host + sdhci_send_tuning + sdhci_set_clock + sdhci_set_uhs_signaling + sdhci_suspend_host + +# required by vh_sched.ko + __traceiter_android_vh_map_util_freq + __tracepoint_android_vh_map_util_freq + +# required by asr_drm.ko + clk_set_rate_exclusive + clk_rate_exclusive_put diff --git a/android/abi_gki_aarch64_exynosauto b/android/abi_gki_aarch64_exynosauto index 1e8246795df8..3e1138f25bc1 100644 --- a/android/abi_gki_aarch64_exynosauto +++ b/android/abi_gki_aarch64_exynosauto @@ -34,14 +34,8 @@ clk_disable clk_enable clk_get - __clk_get_hw clk_get_rate - clk_hw_get_parent clk_prepare - clk_register - clk_register_clkdev - clk_register_fixed_factor - clk_register_fixed_rate clk_set_rate clk_unprepare cma_alloc @@ -90,6 +84,7 @@ _dev_info devm_add_action devm_clk_get + devm_clk_get_optional devm_free_irq devm_gen_pool_create devm_gpiod_get @@ -177,8 +172,6 @@ drm_atomic_helper_connector_destroy_state drm_atomic_helper_connector_duplicate_state drm_atomic_helper_connector_reset - __drm_atomic_helper_private_obj_duplicate_state - drm_atomic_private_obj_init drm_bridge_add drm_bridge_remove drm_compat_ioctl @@ -242,7 +235,6 @@ drm_modeset_unlock drm_mode_vrefresh drm_object_attach_property - drm_object_property_set_value drm_open drm_poll drm_prime_gem_destroy @@ -252,14 +244,18 @@ drm_release drm_vblank_init dump_stack + dw_pcie_ep_init dw_pcie_host_init dw_pcie_own_conf_map_bus dw_pcie_read + dw_pcie_read_dbi dw_pcie_setup_rc dw_pcie_write + dw_pcie_write_dbi enable_irq fd_install _find_first_bit + _find_first_zero_bit _find_next_bit finish_wait flush_delayed_work @@ -315,7 +311,9 @@ __init_waitqueue_head iomem_resource iommu_get_domain_for_dev + iommu_map iommu_register_device_fault_handler + iommu_unmap iommu_unregister_device_fault_handler ioremap_prot iounmap @@ -403,6 +401,7 @@ mipi_dsi_device_unregister mipi_dsi_driver_register_full mipi_dsi_driver_unregister + misc_deregister misc_register mod_timer module_layout @@ -419,13 +418,12 @@ netdev_warn noop_llseek nr_cpu_ids + nsecs_to_jiffies ns_to_timespec64 __num_online_cpus of_address_to_resource of_alias_get_id - of_clk_add_provider of_clk_get - of_clk_src_onecell_get of_count_phandle_with_args of_device_get_match_data of_device_is_available @@ -467,10 +465,15 @@ oops_in_progress panic panic_notifier_list + param_ops_bool param_ops_int param_ops_string param_ops_uint pcie_get_mps + pci_epc_mem_alloc_addr + pci_epc_mem_free_addr + pci_epc_set_bar + pci_epc_unmap_addr pcie_set_mps pci_find_bus pci_generic_config_read @@ -547,6 +550,7 @@ __register_chrdev register_console register_pm_notifier + register_reboot_notifier register_syscore_ops regmap_read regmap_update_bits_base @@ -647,6 +651,7 @@ ttm_bo_mmap_obj __udelay __unregister_chrdev + unregister_pm_notifier up up_write __usecs_to_jiffies @@ -687,6 +692,7 @@ vsnprintf vunmap vzalloc + wait_for_completion wait_for_completion_interruptible_timeout wait_for_completion_timeout __wake_up @@ -712,9 +718,18 @@ regmap_bulk_write regmap_register_patch +# required by clk_exynosauto.ko + __clk_get_hw + clk_hw_get_parent + clk_register + clk_register_clkdev + clk_register_fixed_factor + clk_register_fixed_rate + of_clk_add_provider + of_clk_src_onecell_get + # required by cmupmucal.ko debugfs_create_x32 - of_find_node_by_type # required by dmatest.ko __dma_request_channel @@ -726,7 +741,6 @@ mempool_free_slab param_get_bool param_get_string - param_ops_bool param_set_bool param_set_copystring set_freezable @@ -741,7 +755,9 @@ drm_atomic_get_new_private_obj_state drm_atomic_get_old_private_obj_state drm_atomic_get_private_obj_state + __drm_atomic_helper_private_obj_duplicate_state drm_atomic_private_obj_fini + drm_atomic_private_obj_init drm_crtc_commit_wait drm_crtc_wait_one_vblank __drm_debug @@ -750,6 +766,7 @@ drm_edid_duplicate drm_edid_get_monitor_name drm_modeset_lock_single_interruptible + drm_object_property_set_value __drm_printfn_debug memchr_inv __sw_hweight8 @@ -848,7 +865,6 @@ typec_set_pwr_role typec_unregister_partner typec_unregister_port - unregister_pm_notifier usb_gadget_set_state usb_otg_state_string wakeup_source_register @@ -945,7 +961,6 @@ drm_atomic_helper_update_plane drm_atomic_helper_wait_for_vblanks drm_bridge_attach - drm_connector_set_path_property drm_crtc_arm_vblank_event drm_crtc_handle_vblank drm_crtc_init_with_planes @@ -963,7 +978,6 @@ drm_gem_vm_open drm_get_connector_status_name drm_get_format_info - drm_helper_probe_detect drm_mode_config_helper_resume drm_mode_config_helper_suspend drm_mode_config_reset @@ -982,7 +996,6 @@ drm_plane_create_zpos_immutable_property drm_plane_create_zpos_property __drm_printfn_info - drm_property_blob_put drm_property_create drm_property_create_blob drm_rotation_simplify @@ -991,6 +1004,7 @@ drm_writeback_connector_init drm_writeback_queue_job drm_writeback_signal_completion + flush_signals gpiod_to_irq mipi_dsi_host_register mipi_dsi_host_unregister @@ -998,7 +1012,6 @@ of_drm_find_panel of_find_i2c_device_by_node of_graph_get_endpoint_by_regs - of_graph_get_endpoint_count of_graph_get_next_endpoint of_graph_get_port_by_id of_graph_get_remote_port @@ -1010,15 +1023,16 @@ platform_find_device_by_driver seq_hex_dump seq_release + strnstr synchronize_irq vmalloc_to_page # required by exynos_mfc.ko clk_put + dma_buf_begin_cpu_access_partial + dma_buf_end_cpu_access_partial hex_dump_to_buffer - iommu_map iommu_map_sg - iommu_unmap __sw_hweight64 _totalram_pages @@ -1056,10 +1070,12 @@ strncasecmp thermal_cdev_update +# required by exyswd-rng.ko + devm_hwrng_register + # required by gpu-sched.ko mod_delayed_work_on sched_set_fifo_low - wait_for_completion __xa_alloc xa_destroy xa_erase @@ -1113,6 +1129,9 @@ # required by panic-fingerprint.ko stack_trace_save +# required by pcie-exynos-dw-ep.ko + pci_epc_map_addr + # required by pcs_xpcs.ko mdiobus_modify_changed phylink_mii_c22_pcs_decode_state @@ -1198,6 +1217,12 @@ __devm_irq_alloc_descs handle_nested_irq +# required by s3c2410_wdt.ko + watchdog_init_timeout + watchdog_register_device + watchdog_set_restart_priority + watchdog_unregister_device + # required by sam-is.ko down down_trylock @@ -1206,9 +1231,9 @@ kernel_neon_end kobject_del kthread_flush_worker + pfn_is_map_memory pm_relax pm_stay_awake - register_reboot_notifier regulator_get_optional regulator_get_voltage regulator_is_enabled @@ -1246,7 +1271,6 @@ dma_heap_get_name is_dma_buf_file iterate_fd - misc_deregister remap_pfn_range __sg_page_iter_next __sg_page_iter_start @@ -1393,7 +1417,6 @@ drm_syncobj_get_handle drm_syncobj_replace_fence __fdget - _find_first_zero_bit __folio_put __get_task_comm handle_simple_irq @@ -1415,7 +1438,6 @@ memremap memunmap mmu_notifier_synchronize - nsecs_to_jiffies page_pinner_inited __page_pinner_put_page param_ops_charp @@ -1579,7 +1601,6 @@ stream_open # required by stmmac-platform.ko - devm_clk_get_optional of_get_mac_address of_phy_is_fixed_link @@ -1754,9 +1775,9 @@ current_work default_wake_function dma_buf_fd - dw_pcie_ep_init - dw_pcie_read_dbi - dw_pcie_write_dbi + drm_connector_set_path_property + drm_helper_probe_detect + drm_property_blob_put irq_create_of_mapping irq_dispose_mapping irq_find_matching_fwspec @@ -1769,21 +1790,17 @@ kthread_complete_and_exit nonseekable_open of_clk_del_provider + of_find_node_by_type + of_graph_get_endpoint_count of_irq_find_parent pci_disable_device pci_disable_msi pci_enable_device - pci_epc_map_addr - pci_epc_mem_alloc_addr - pci_epc_mem_free_addr - pci_epc_set_bar - pci_epc_unmap_addr pci_ioremap_wc_bar pci_num_vf __pci_register_driver pci_request_regions pci_unregister_driver - pfn_is_map_memory __platform_driver_probe pm_power_off proc_create_data @@ -1792,12 +1809,9 @@ remove_proc_entry remove_wait_queue sigprocmask - strnstr sysfs_create_bin_file sysfs_remove_bin_file __task_pid_nr_ns thermal_of_zone_register thermal_of_zone_unregister vprintk - watchdog_register_device - watchdog_unregister_device diff --git a/android/abi_gki_aarch64_honda b/android/abi_gki_aarch64_honda new file mode 100644 index 000000000000..8ee57762f944 --- /dev/null +++ b/android/abi_gki_aarch64_honda @@ -0,0 +1,91 @@ +[abi_symbol_list] +# commonly used by custom vendor modules + __bitmap_subset + devres_find + input_device_enabled + pvclock_gtod_register_notifier + refcount_dec_if_one + +# commonly required by ledtrig-heartbeat.ko modules + avenrun + +# commonly required by ledtrig-*.ko modules + led_blink_set_oneshot + led_set_brightness_nosleep + led_stop_software_blink + +# required by cls_flower.ko module + flow_rule_alloc + idr_get_next_ul + radix_tree_tagged + skb_flow_dissect_ct + skb_flow_dissect_hash + skb_flow_dissect_meta + skb_flow_dissect_tunnel_info + skb_flow_dissector_init + tc_setup_cb_call + tc_setup_cb_destroy + tc_setup_cb_reoffload + tc_setup_cb_add + tcf_exts_num_actions + tcf_exts_terse_dump + +# required by act_vlan.ko module + jiffies_to_clock_t + skb_eth_push + skb_eth_pop + __skb_vlan_pop + skb_vlan_push + skb_vlan_pop + tcf_action_check_ctrlact + tcf_action_set_ctrlact + tcf_action_update_stats + tcf_chain_put_by_act + tcf_generic_walker + tcf_idr_check_alloc + tcf_idr_cleanup + tcf_idr_create_from_flags + tcf_idr_release + tcf_idr_search + tcf_idrinfo_destroy + tcf_register_action + tcf_unregister_action + +# required by ebtables.ko module + __audit_log_nfcfg + audit_enabled + nf_register_sockopt + nf_unregister_sockopt + vmalloc_node + xt_check_match + xt_check_target + xt_compat_add_offset + xt_compat_calc_jump + xt_compat_flush_offsets + xt_compat_init_offsets + xt_compat_lock + xt_compat_match_offset + xt_compat_target_offset + xt_compat_unlock + xt_data_to_user + xt_find_match + xt_request_find_match + xt_request_find_target + +# required by ebt_arpreply.ko module + arp_send + +# required by ebt_log.ko module + nf_log_packet + sysctl_nf_log_all_netns + +# required by xt_LOG.ko module + nf_log_buf_add + nf_log_buf_close + nf_log_buf_open + nf_log_register + nf_log_set + nf_log_unregister + nf_log_unset + nf_logger_find_get + nf_logger_put diff --git a/android/abi_gki_aarch64_imx b/android/abi_gki_aarch64_imx index 1b556c8705f6..c7978e9b721f 100644 --- a/android/abi_gki_aarch64_imx +++ b/android/abi_gki_aarch64_imx @@ -2253,6 +2253,14 @@ usb_udc_vbus_handler __usecs_to_jiffies usleep_range_state + __v4l2_async_nf_add_fwnode + v4l2_async_nf_cleanup + v4l2_async_nf_init + v4l2_async_nf_register + v4l2_async_nf_unregister + v4l2_async_register_subdev + v4l2_async_register_subdev_sensor + v4l2_async_unregister_subdev v4l2_ctrl_auto_cluster v4l2_ctrl_handler_free v4l2_ctrl_handler_init_class @@ -2289,6 +2297,9 @@ v4l2_fh_init v4l2_fh_open __v4l2_find_nearest_size + v4l2_fwnode_device_parse + v4l2_fwnode_endpoint_alloc_parse + v4l2_fwnode_endpoint_parse v4l2_get_link_freq v4l2_g_parm_cap v4l2_i2c_subdev_init diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index d6dd01bc8c43..fdc0e3b84455 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -152,6 +152,8 @@ clk_bulk_put clk_bulk_put_all clk_bulk_unprepare + clkdev_add + clkdev_drop clk_disable clk_divider_ops clk_enable @@ -473,6 +475,7 @@ devm_devfreq_register_notifier devm_devfreq_remove_device devm_devfreq_unregister_notifier + devm_devfreq_unregister_opp_notifier devm_extcon_dev_allocate devm_extcon_dev_register devm_extcon_register_notifier @@ -928,6 +931,8 @@ find_vpid finish_wait firmware_request_nowarn + fixed_phy_register + fixed_phy_unregister flush_dcache_page flush_delayed_fput flush_delayed_work @@ -989,6 +994,7 @@ generic_file_llseek generic_handle_domain_irq generic_handle_irq + generic_handle_irq_safe genlmsg_multicast_allns genlmsg_put genl_register_family @@ -1257,6 +1263,7 @@ irq_create_of_mapping irq_dispose_mapping __irq_domain_add + irq_domain_create_simple irq_domain_free_irqs_common irq_domain_get_irq_data irq_domain_remove @@ -1861,6 +1868,8 @@ phy_ethtool_get_eee phy_ethtool_get_link_ksettings phy_ethtool_get_wol + phy_ethtool_ksettings_get + phy_ethtool_ksettings_set phy_ethtool_nway_reset phy_ethtool_set_eee phy_ethtool_set_link_ksettings @@ -1886,13 +1895,16 @@ phy_power_on phy_print_status phy_put + phy_register_fixup_for_uid phy_remove_link_mode + phy_save_page phy_set_mode_ext phy_start phy_start_aneg phy_stop phy_support_asym_pause phy_suspend + phy_unregister_fixup_for_uid pick_migrate_task pid_task pinconf_generic_parse_dt_config diff --git a/android/abi_gki_aarch64_nothing b/android/abi_gki_aarch64_nothing new file mode 100644 index 000000000000..5960f2b3c287 --- /dev/null +++ b/android/abi_gki_aarch64_nothing @@ -0,0 +1,4 @@ +[abi_symbol_list] +# required by mount_state.ko + iterate_supers_type + get_fs_type \ No newline at end of file diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index 8c9846b3a27d..38ee6cb19e5f 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -123,7 +123,10 @@ __traceiter_android_vh_record_rwsem_lock_starttime __traceiter_android_vh_alter_mutex_list_add __traceiter_android_vh_binder_free_proc + __traceiter_android_vh_binder_has_special_work_ilocked __traceiter_android_vh_binder_has_work_ilocked + __traceiter_android_vh_binder_ioctl_end + __traceiter_android_vh_binder_looper_exited __traceiter_android_vh_binder_looper_state_registered __traceiter_android_vh_binder_new_ref __traceiter_android_vh_binder_del_ref @@ -134,6 +137,8 @@ __traceiter_android_vh_binder_proc_transaction_finish __traceiter_android_vh_binder_read_done __traceiter_android_vh_binder_select_worklist_ilocked + __traceiter_android_vh_binder_select_special_worklist + __traceiter_android_vh_binder_spawn_new_thread __traceiter_android_vh_binder_thread_read __traceiter_android_vh_binder_thread_release __traceiter_android_vh_binder_wait_for_work @@ -209,7 +214,10 @@ __tracepoint_android_vh_account_task_time __tracepoint_android_vh_alter_mutex_list_add __tracepoint_android_vh_binder_free_proc + __tracepoint_android_vh_binder_has_special_work_ilocked __tracepoint_android_vh_binder_has_work_ilocked + __tracepoint_android_vh_binder_ioctl_end + __tracepoint_android_vh_binder_looper_exited __tracepoint_android_vh_binder_looper_state_registered __tracepoint_android_vh_binder_new_ref __tracepoint_android_vh_binder_del_ref @@ -220,6 +228,8 @@ __tracepoint_android_vh_binder_proc_transaction_finish __tracepoint_android_vh_binder_read_done __tracepoint_android_vh_binder_select_worklist_ilocked + __tracepoint_android_vh_binder_select_special_worklist + __tracepoint_android_vh_binder_spawn_new_thread __tracepoint_android_vh_binder_thread_read __tracepoint_android_vh_binder_thread_release __tracepoint_android_vh_binder_wait_for_work diff --git a/android/abi_gki_aarch64_pasa b/android/abi_gki_aarch64_pasa new file mode 100644 index 000000000000..87bebdec1cbb --- /dev/null +++ b/android/abi_gki_aarch64_pasa @@ -0,0 +1,4 @@ + +[abi_symbol_list] + iio_trigger_generic_data_rdy_poll + input_device_enabled diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index fac865d11e03..6542846a3ddb 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -543,6 +543,7 @@ dma_buf_fd dma_buf_get dma_buf_map_attachment + dma_buf_map_attachment_unlocked dma_buf_mmap dmabuf_page_pool_alloc dmabuf_page_pool_create @@ -552,6 +553,7 @@ dma_buf_put dma_buf_set_name dma_buf_unmap_attachment + dma_buf_unmap_attachment_unlocked dma_buf_vmap dma_buf_vunmap dma_direct_alloc @@ -995,6 +997,7 @@ gpiod_get_raw_value_cansleep gpiod_get_value gpiod_get_value_cansleep + gpiod_set_debounce gpiod_set_raw_value gpiod_set_raw_value_cansleep gpiod_set_value @@ -1054,6 +1057,12 @@ ida_alloc_range ida_destroy ida_free + idle_inject_get_duration + idle_inject_register + idle_inject_set_duration + idle_inject_set_latency + idle_inject_start + idle_inject_stop idr_alloc idr_alloc_cyclic idr_destroy @@ -1314,6 +1323,7 @@ loops_per_jiffy mac_pton mas_empty_area_rev + max_load_balance_interval mbox_chan_received_data mbox_controller_register mbox_controller_unregister @@ -1788,6 +1798,7 @@ register_inet6addr_notifier register_inetaddr_notifier register_kernel_break_hook + register_kretprobe register_netdev register_netdevice register_netdevice_notifier @@ -1826,6 +1837,7 @@ regulator_enable_regmap regulator_get regulator_get_optional + regulator_get_voltage regulator_get_voltage_sel_regmap regulator_is_enabled regulator_is_enabled_regmap @@ -1931,6 +1943,7 @@ scsi_set_sense_information scsi_unblock_requests sdev_prefix_printk + send_sig_info seq_hex_dump seq_lseek seq_open @@ -2133,6 +2146,7 @@ srcu_notifier_chain_unregister sscanf __stack_chk_fail + static_key_count static_key_disable static_key_enable static_key_slow_dec @@ -2277,6 +2291,9 @@ __traceiter_android_rvh_enqueue_task __traceiter_android_rvh_enqueue_task_fair __traceiter_android_rvh_find_lowest_rq + __traceiter_android_rvh_iommu_alloc_insert_iova + __traceiter_android_rvh_iommu_iovad_init_alloc_algo + __traceiter_android_rvh_iommu_limit_align_shift __traceiter_android_rvh_irqs_disable __traceiter_android_rvh_irqs_enable __traceiter_android_rvh_post_init_entity_util_avg @@ -2386,6 +2403,9 @@ __tracepoint_android_rvh_enqueue_task __tracepoint_android_rvh_enqueue_task_fair __tracepoint_android_rvh_find_lowest_rq + __tracepoint_android_rvh_iommu_alloc_insert_iova + __tracepoint_android_rvh_iommu_iovad_init_alloc_algo + __tracepoint_android_rvh_iommu_limit_align_shift __tracepoint_android_rvh_irqs_disable __tracepoint_android_rvh_irqs_enable __tracepoint_android_rvh_post_init_entity_util_avg @@ -2541,6 +2561,7 @@ unregister_chrdev_region unregister_inet6addr_notifier unregister_inetaddr_notifier + unregister_kretprobe unregister_netdev unregister_netdevice_many unregister_netdevice_notifier @@ -2560,6 +2581,7 @@ update_devfreq ___update_load_avg ___update_load_sum + update_misfit_status update_rq_clock up_read up_write diff --git a/android/abi_gki_aarch64_xiaomi b/android/abi_gki_aarch64_xiaomi index d502877c9b2c..dd305e697200 100644 --- a/android/abi_gki_aarch64_xiaomi +++ b/android/abi_gki_aarch64_xiaomi @@ -345,3 +345,8 @@ #required by mi_asap.ko __traceiter_android_vh_read_pages __tracepoint_android_vh_read_pages + page_cache_sync_ra + page_cache_async_ra + pagecache_get_page + filemap_get_folios + find_get_pages_range_tag diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index 38139e71219a..dbf1e1ca23fd 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -15,6 +15,8 @@ CONFIG_PSI=y CONFIG_RCU_EXPERT=y CONFIG_RCU_BOOST=y CONFIG_RCU_NOCB_CPU=y +CONFIG_RCU_LAZY=y +CONFIG_RCU_LAZY_DEFAULT_OFF=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_IKHEADERS=m @@ -314,6 +316,7 @@ CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_BLK_DEV_UBLK=y CONFIG_BLK_DEV_NVME=y +CONFIG_NVME_MULTIPATH=y CONFIG_SRAM=y CONFIG_UID_SYS_STATS=y CONFIG_SCSI=y @@ -445,7 +448,6 @@ CONFIG_LIRC=y # CONFIG_RC_MAP is not set CONFIG_RC_DECODERS=y CONFIG_RC_DEVICES=y -CONFIG_MEDIA_CEC_RC=y # CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set # CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set # CONFIG_MEDIA_RADIO_SUPPORT is not set diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 7e2df44033bc..8330afe50d28 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -17,6 +17,8 @@ CONFIG_PSI=y CONFIG_RCU_EXPERT=y CONFIG_RCU_BOOST=y CONFIG_RCU_NOCB_CPU=y +CONFIG_RCU_LAZY=y +CONFIG_RCU_LAZY_DEFAULT_OFF=y CONFIG_IKCONFIG=y CONFIG_IKCONFIG_PROC=y CONFIG_IKHEADERS=m @@ -300,6 +302,7 @@ CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_SIZE=8192 CONFIG_BLK_DEV_UBLK=y CONFIG_BLK_DEV_NVME=y +CONFIG_NVME_MULTIPATH=y CONFIG_SRAM=y CONFIG_UID_SYS_STATS=y CONFIG_SCSI=y @@ -411,7 +414,6 @@ CONFIG_LIRC=y # CONFIG_RC_MAP is not set CONFIG_RC_DECODERS=y CONFIG_RC_DEVICES=y -CONFIG_MEDIA_CEC_RC=y # CONFIG_MEDIA_ANALOG_TV_SUPPORT is not set # CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set # CONFIG_MEDIA_RADIO_SUPPORT is not set diff --git a/drivers/android/binder.c b/drivers/android/binder.c index 08da7a9f90a3..c6d7600cb9f9 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -560,6 +560,7 @@ static bool binder_has_work(struct binder_thread *thread, bool do_proc_work) binder_inner_proc_lock(thread->proc); has_work = binder_has_work_ilocked(thread, do_proc_work); + trace_android_vh_binder_has_special_work_ilocked(thread, do_proc_work, &has_work); binder_inner_proc_unlock(thread->proc); return has_work; @@ -4280,6 +4281,7 @@ static int binder_thread_write(struct binder_proc *proc, thread->looper |= BINDER_LOOPER_STATE_ENTERED; break; case BC_EXIT_LOOPER: + trace_android_vh_binder_looper_exited(thread, proc); binder_debug(BINDER_DEBUG_THREADS, "%d:%d BC_EXIT_LOOPER\n", proc->pid, thread->pid); @@ -4607,6 +4609,8 @@ static int binder_thread_read(struct binder_proc *proc, void __user *end = buffer + size; int ret = 0; + bool nothing_to_do = false; + bool force_spawn = false; int wait_for_proc_work; if (*consumed == 0) { @@ -4662,14 +4666,20 @@ retry: binder_inner_proc_lock(proc); trace_android_vh_binder_select_worklist_ilocked(&list, thread, proc, wait_for_proc_work); + trace_android_vh_binder_select_special_worklist(&list, thread, + proc, wait_for_proc_work, ¬hing_to_do); if (list) goto skip; + else if (nothing_to_do) + goto no_work; + if (!binder_worklist_empty_ilocked(&thread->todo)) list = &thread->todo; else if (!binder_worklist_empty_ilocked(&proc->todo) && wait_for_proc_work) list = &proc->todo; else { +no_work: binder_inner_proc_unlock(proc); /* no data added */ @@ -4987,11 +4997,14 @@ done: *consumed = ptr - buffer; binder_inner_proc_lock(proc); - if (proc->requested_threads == 0 && + trace_android_vh_binder_spawn_new_thread(thread, proc, &force_spawn); + + if ((proc->requested_threads == 0 && list_empty(&thread->proc->waiting_threads) && proc->requested_threads_started < proc->max_threads && (thread->looper & (BINDER_LOOPER_STATE_REGISTERED | - BINDER_LOOPER_STATE_ENTERED)) /* the user-space code fails to */ + BINDER_LOOPER_STATE_ENTERED))) || + force_spawn /* the user-space code fails to */ /*spawn a new thread if we leave this out */) { proc->requested_threads++; binder_inner_proc_unlock(proc); @@ -5781,6 +5794,7 @@ static long binder_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) goto err; } ret = 0; + trace_android_vh_binder_ioctl_end(current, cmd, arg, thread, proc, &ret); err: if (thread) thread->looper_need_return = false; diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 14bb47fcf8b0..3b50cf94742b 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -164,6 +164,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_wait_for_work); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_proc_transaction_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_proc_transaction_entry); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_select_worklist_ilocked); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_select_special_worklist); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sync_txn_recvd); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_freq_qos_add_request); @@ -370,3 +371,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_kmalloc_large_alloced); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_netlink_poll); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ep_create_wakeup_source); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_timerfd_create); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_ioctl_end); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_looper_exited); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_spawn_new_thread); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_has_special_work_ilocked); diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c index 69a485fff42e..819d9110a458 100644 --- a/drivers/base/power/main.c +++ b/drivers/base/power/main.c @@ -580,7 +580,7 @@ bool dev_pm_skip_resume(struct device *dev) } /** - * device_resume_noirq - Execute a "noirq resume" callback for given device. + * __device_resume_noirq - Execute a "noirq resume" callback for given device. * @dev: Device to handle. * @state: PM transition of the system being carried out. * @async: If true, the device is being resumed asynchronously. @@ -588,7 +588,7 @@ bool dev_pm_skip_resume(struct device *dev) * The driver of @dev will not receive interrupts while this function is being * executed. */ -static int device_resume_noirq(struct device *dev, pm_message_t state, bool async) +static void __device_resume_noirq(struct device *dev, pm_message_t state, bool async) { pm_callback_t callback = NULL; const char *info = NULL; @@ -656,7 +656,13 @@ Skip: Out: complete_all(&dev->power.completion); TRACE_RESUME(error); - return error; + + if (error) { + suspend_stats.failed_resume_noirq++; + dpm_save_failed_step(SUSPEND_RESUME_NOIRQ); + dpm_save_failed_dev(dev_name(dev)); + pm_dev_err(dev, state, async ? " async noirq" : " noirq", error); + } } static bool is_async(struct device *dev) @@ -669,11 +675,15 @@ static bool dpm_async_fn(struct device *dev, async_func_t func) { reinit_completion(&dev->power.completion); - if (is_async(dev)) { - get_device(dev); - async_schedule_dev(func, dev); + if (!is_async(dev)) + return false; + + get_device(dev); + + if (async_schedule_dev_nocall(func, dev)) return true; - } + + put_device(dev); return false; } @@ -681,15 +691,19 @@ static bool dpm_async_fn(struct device *dev, async_func_t func) static void async_resume_noirq(void *data, async_cookie_t cookie) { struct device *dev = (struct device *)data; - int error; - - error = device_resume_noirq(dev, pm_transition, true); - if (error) - pm_dev_err(dev, pm_transition, " async", error); + __device_resume_noirq(dev, pm_transition, true); put_device(dev); } +static void device_resume_noirq(struct device *dev) +{ + if (dpm_async_fn(dev, async_resume_noirq)) + return; + + __device_resume_noirq(dev, pm_transition, false); +} + static void dpm_noirq_resume_devices(pm_message_t state) { struct device *dev; @@ -699,14 +713,6 @@ static void dpm_noirq_resume_devices(pm_message_t state) mutex_lock(&dpm_list_mtx); pm_transition = state; - /* - * Advanced the async threads upfront, - * in case the starting of async threads is - * delayed by non-async resuming devices. - */ - list_for_each_entry(dev, &dpm_noirq_list, power.entry) - dpm_async_fn(dev, async_resume_noirq); - while (!list_empty(&dpm_noirq_list)) { dev = to_device(dpm_noirq_list.next); get_device(dev); @@ -714,17 +720,7 @@ static void dpm_noirq_resume_devices(pm_message_t state) mutex_unlock(&dpm_list_mtx); - if (!is_async(dev)) { - int error; - - error = device_resume_noirq(dev, state, false); - if (error) { - suspend_stats.failed_resume_noirq++; - dpm_save_failed_step(SUSPEND_RESUME_NOIRQ); - dpm_save_failed_dev(dev_name(dev)); - pm_dev_err(dev, state, " noirq", error); - } - } + device_resume_noirq(dev); put_device(dev); @@ -752,14 +748,14 @@ void dpm_resume_noirq(pm_message_t state) } /** - * device_resume_early - Execute an "early resume" callback for given device. + * __device_resume_early - Execute an "early resume" callback for given device. * @dev: Device to handle. * @state: PM transition of the system being carried out. * @async: If true, the device is being resumed asynchronously. * * Runtime PM is disabled for @dev while this function is being executed. */ -static int device_resume_early(struct device *dev, pm_message_t state, bool async) +static void __device_resume_early(struct device *dev, pm_message_t state, bool async) { pm_callback_t callback = NULL; const char *info = NULL; @@ -812,21 +808,31 @@ Out: pm_runtime_enable(dev); complete_all(&dev->power.completion); - return error; + + if (error) { + suspend_stats.failed_resume_early++; + dpm_save_failed_step(SUSPEND_RESUME_EARLY); + dpm_save_failed_dev(dev_name(dev)); + pm_dev_err(dev, state, async ? " async early" : " early", error); + } } static void async_resume_early(void *data, async_cookie_t cookie) { struct device *dev = (struct device *)data; - int error; - - error = device_resume_early(dev, pm_transition, true); - if (error) - pm_dev_err(dev, pm_transition, " async", error); + __device_resume_early(dev, pm_transition, true); put_device(dev); } +static void device_resume_early(struct device *dev) +{ + if (dpm_async_fn(dev, async_resume_early)) + return; + + __device_resume_early(dev, pm_transition, false); +} + /** * dpm_resume_early - Execute "early resume" callbacks for all devices. * @state: PM transition of the system being carried out. @@ -840,14 +846,6 @@ void dpm_resume_early(pm_message_t state) mutex_lock(&dpm_list_mtx); pm_transition = state; - /* - * Advanced the async threads upfront, - * in case the starting of async threads is - * delayed by non-async resuming devices. - */ - list_for_each_entry(dev, &dpm_late_early_list, power.entry) - dpm_async_fn(dev, async_resume_early); - while (!list_empty(&dpm_late_early_list)) { dev = to_device(dpm_late_early_list.next); get_device(dev); @@ -855,17 +853,7 @@ void dpm_resume_early(pm_message_t state) mutex_unlock(&dpm_list_mtx); - if (!is_async(dev)) { - int error; - - error = device_resume_early(dev, state, false); - if (error) { - suspend_stats.failed_resume_early++; - dpm_save_failed_step(SUSPEND_RESUME_EARLY); - dpm_save_failed_dev(dev_name(dev)); - pm_dev_err(dev, state, " early", error); - } - } + device_resume_early(dev); put_device(dev); @@ -889,12 +877,12 @@ void dpm_resume_start(pm_message_t state) EXPORT_SYMBOL_GPL(dpm_resume_start); /** - * device_resume - Execute "resume" callbacks for given device. + * __device_resume - Execute "resume" callbacks for given device. * @dev: Device to handle. * @state: PM transition of the system being carried out. * @async: If true, the device is being resumed asynchronously. */ -static int device_resume(struct device *dev, pm_message_t state, bool async) +static void __device_resume(struct device *dev, pm_message_t state, bool async) { pm_callback_t callback = NULL; const char *info = NULL; @@ -976,20 +964,30 @@ static int device_resume(struct device *dev, pm_message_t state, bool async) TRACE_RESUME(error); - return error; + if (error) { + suspend_stats.failed_resume++; + dpm_save_failed_step(SUSPEND_RESUME); + dpm_save_failed_dev(dev_name(dev)); + pm_dev_err(dev, state, async ? " async" : "", error); + } } static void async_resume(void *data, async_cookie_t cookie) { struct device *dev = (struct device *)data; - int error; - error = device_resume(dev, pm_transition, true); - if (error) - pm_dev_err(dev, pm_transition, " async", error); + __device_resume(dev, pm_transition, true); put_device(dev); } +static void device_resume(struct device *dev) +{ + if (dpm_async_fn(dev, async_resume)) + return; + + __device_resume(dev, pm_transition, false); +} + /** * dpm_resume - Execute "resume" callbacks for non-sysdev devices. * @state: PM transition of the system being carried out. @@ -1009,27 +1007,17 @@ void dpm_resume(pm_message_t state) pm_transition = state; async_error = 0; - list_for_each_entry(dev, &dpm_suspended_list, power.entry) - dpm_async_fn(dev, async_resume); - while (!list_empty(&dpm_suspended_list)) { dev = to_device(dpm_suspended_list.next); + get_device(dev); - if (!is_async(dev)) { - int error; - mutex_unlock(&dpm_list_mtx); + mutex_unlock(&dpm_list_mtx); - error = device_resume(dev, state, false); - if (error) { - suspend_stats.failed_resume++; - dpm_save_failed_step(SUSPEND_RESUME); - dpm_save_failed_dev(dev_name(dev)); - pm_dev_err(dev, state, "", error); - } + device_resume(dev); + + mutex_lock(&dpm_list_mtx); - mutex_lock(&dpm_list_mtx); - } if (!list_empty(&dev->power.entry)) list_move_tail(&dev->power.entry, &dpm_prepared_list); diff --git a/drivers/hwtracing/coresight/coresight-tmc-core.c b/drivers/hwtracing/coresight/coresight-tmc-core.c index 07abf28ad725..c106d142e632 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-core.c +++ b/drivers/hwtracing/coresight/coresight-tmc-core.c @@ -31,7 +31,7 @@ DEFINE_CORESIGHT_DEVLIST(etb_devs, "tmc_etb"); DEFINE_CORESIGHT_DEVLIST(etf_devs, "tmc_etf"); DEFINE_CORESIGHT_DEVLIST(etr_devs, "tmc_etr"); -void tmc_wait_for_tmcready(struct tmc_drvdata *drvdata) +int tmc_wait_for_tmcready(struct tmc_drvdata *drvdata) { struct coresight_device *csdev = drvdata->csdev; struct csdev_access *csa = &csdev->access; @@ -40,7 +40,9 @@ void tmc_wait_for_tmcready(struct tmc_drvdata *drvdata) if (coresight_timeout(csa, TMC_STS, TMC_STS_TMCREADY_BIT, 1)) { dev_err(&csdev->dev, "timeout while waiting for TMC to be Ready\n"); + return -EBUSY; } + return 0; } void tmc_flush_and_stop(struct tmc_drvdata *drvdata) diff --git a/drivers/hwtracing/coresight/coresight-tmc-etf.c b/drivers/hwtracing/coresight/coresight-tmc-etf.c index 3f207999377f..e374b02d98be 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etf.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etf.c @@ -16,12 +16,20 @@ static int tmc_set_etf_buffer(struct coresight_device *csdev, struct perf_output_handle *handle); -static void __tmc_etb_enable_hw(struct tmc_drvdata *drvdata) +static int __tmc_etb_enable_hw(struct tmc_drvdata *drvdata) { + int rc = 0; + CS_UNLOCK(drvdata->base); /* Wait for TMCSReady bit to be set */ - tmc_wait_for_tmcready(drvdata); + rc = tmc_wait_for_tmcready(drvdata); + if (rc) { + dev_err(&drvdata->csdev->dev, + "Failed to enable: TMC not ready\n"); + CS_LOCK(drvdata->base); + return rc; + } writel_relaxed(TMC_MODE_CIRCULAR_BUFFER, drvdata->base + TMC_MODE); writel_relaxed(TMC_FFCR_EN_FMT | TMC_FFCR_EN_TI | @@ -33,6 +41,7 @@ static void __tmc_etb_enable_hw(struct tmc_drvdata *drvdata) tmc_enable_hw(drvdata); CS_LOCK(drvdata->base); + return rc; } static int tmc_etb_enable_hw(struct tmc_drvdata *drvdata) @@ -42,8 +51,10 @@ static int tmc_etb_enable_hw(struct tmc_drvdata *drvdata) if (rc) return rc; - __tmc_etb_enable_hw(drvdata); - return 0; + rc = __tmc_etb_enable_hw(drvdata); + if (rc) + coresight_disclaim_device(drvdata->csdev); + return rc; } static void tmc_etb_dump_hw(struct tmc_drvdata *drvdata) @@ -91,12 +102,20 @@ static void tmc_etb_disable_hw(struct tmc_drvdata *drvdata) coresight_disclaim_device(drvdata->csdev); } -static void __tmc_etf_enable_hw(struct tmc_drvdata *drvdata) +static int __tmc_etf_enable_hw(struct tmc_drvdata *drvdata) { + int rc = 0; + CS_UNLOCK(drvdata->base); /* Wait for TMCSReady bit to be set */ - tmc_wait_for_tmcready(drvdata); + rc = tmc_wait_for_tmcready(drvdata); + if (rc) { + dev_err(&drvdata->csdev->dev, + "Failed to enable : TMC is not ready\n"); + CS_LOCK(drvdata->base); + return rc; + } writel_relaxed(TMC_MODE_HARDWARE_FIFO, drvdata->base + TMC_MODE); writel_relaxed(TMC_FFCR_EN_FMT | TMC_FFCR_EN_TI, @@ -105,6 +124,7 @@ static void __tmc_etf_enable_hw(struct tmc_drvdata *drvdata) tmc_enable_hw(drvdata); CS_LOCK(drvdata->base); + return rc; } static int tmc_etf_enable_hw(struct tmc_drvdata *drvdata) @@ -114,8 +134,10 @@ static int tmc_etf_enable_hw(struct tmc_drvdata *drvdata) if (rc) return rc; - __tmc_etf_enable_hw(drvdata); - return 0; + rc = __tmc_etf_enable_hw(drvdata); + if (rc) + coresight_disclaim_device(drvdata->csdev); + return rc; } static void tmc_etf_disable_hw(struct tmc_drvdata *drvdata) @@ -639,6 +661,7 @@ int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) char *buf = NULL; enum tmc_mode mode; unsigned long flags; + int rc = 0; /* config types are set a boot time and never change */ if (WARN_ON_ONCE(drvdata->config_type != TMC_CONFIG_TYPE_ETB && @@ -664,7 +687,11 @@ int tmc_read_unprepare_etb(struct tmc_drvdata *drvdata) * can't be NULL. */ memset(drvdata->buf, 0, drvdata->size); - __tmc_etb_enable_hw(drvdata); + rc = __tmc_etb_enable_hw(drvdata); + if (rc) { + spin_unlock_irqrestore(&drvdata->spinlock, flags); + return rc; + } } else { /* * The ETB/ETF is not tracing and the buffer was just read. diff --git a/drivers/hwtracing/coresight/coresight-tmc-etr.c b/drivers/hwtracing/coresight/coresight-tmc-etr.c index c88a6afb2951..3026ebdd9c68 100644 --- a/drivers/hwtracing/coresight/coresight-tmc-etr.c +++ b/drivers/hwtracing/coresight/coresight-tmc-etr.c @@ -985,15 +985,22 @@ static void tmc_sync_etr_buf(struct tmc_drvdata *drvdata) etr_buf->ops->sync(etr_buf, rrp, rwp); } -static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata) +static int __tmc_etr_enable_hw(struct tmc_drvdata *drvdata) { u32 axictl, sts; struct etr_buf *etr_buf = drvdata->etr_buf; + int rc = 0; CS_UNLOCK(drvdata->base); /* Wait for TMCSReady bit to be set */ - tmc_wait_for_tmcready(drvdata); + rc = tmc_wait_for_tmcready(drvdata); + if (rc) { + dev_err(&drvdata->csdev->dev, + "Failed to enable : TMC not ready\n"); + CS_LOCK(drvdata->base); + return rc; + } writel_relaxed(etr_buf->size / 4, drvdata->base + TMC_RSZ); writel_relaxed(TMC_MODE_CIRCULAR_BUFFER, drvdata->base + TMC_MODE); @@ -1034,6 +1041,7 @@ static void __tmc_etr_enable_hw(struct tmc_drvdata *drvdata) tmc_enable_hw(drvdata); CS_LOCK(drvdata->base); + return rc; } static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, @@ -1062,7 +1070,12 @@ static int tmc_etr_enable_hw(struct tmc_drvdata *drvdata, rc = coresight_claim_device(drvdata->csdev); if (!rc) { drvdata->etr_buf = etr_buf; - __tmc_etr_enable_hw(drvdata); + rc = __tmc_etr_enable_hw(drvdata); + if (rc) { + drvdata->etr_buf = NULL; + coresight_disclaim_device(drvdata->csdev); + tmc_etr_disable_catu(drvdata); + } } return rc; diff --git a/drivers/hwtracing/coresight/coresight-tmc.h b/drivers/hwtracing/coresight/coresight-tmc.h index 946aab12f980..26e6356261c1 100644 --- a/drivers/hwtracing/coresight/coresight-tmc.h +++ b/drivers/hwtracing/coresight/coresight-tmc.h @@ -255,7 +255,7 @@ struct tmc_sg_table { }; /* Generic functions */ -void tmc_wait_for_tmcready(struct tmc_drvdata *drvdata); +int tmc_wait_for_tmcready(struct tmc_drvdata *drvdata); void tmc_flush_and_stop(struct tmc_drvdata *drvdata); void tmc_enable_hw(struct tmc_drvdata *drvdata); void tmc_disable_hw(struct tmc_drvdata *drvdata); diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index b0c065108bb7..fdf889d77c90 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -39,6 +39,7 @@ #define FLAGS_WORKAROUND_GICR_WAKER_MSM8996 (1ULL << 0) #define FLAGS_WORKAROUND_CAVIUM_ERRATUM_38539 (1ULL << 1) #define FLAGS_WORKAROUND_MTK_GICR_SAVE (1ULL << 2) +#define FLAGS_WORKAROUND_ASR_ERRATUM_8601001 (1ULL << 3) #define GIC_IRQ_TYPE_PARTITION (GIC_IRQ_TYPE_LPI + 1) @@ -648,10 +649,16 @@ static int gic_irq_set_vcpu_affinity(struct irq_data *d, void *vcpu) return 0; } -static u64 gic_mpidr_to_affinity(unsigned long mpidr) +static u64 gic_cpu_to_affinity(int cpu) { + u64 mpidr = cpu_logical_map(cpu); u64 aff; + /* ASR8601 needs to have its affinities shifted down... */ + if (unlikely(gic_data.flags & FLAGS_WORKAROUND_ASR_ERRATUM_8601001)) + mpidr = (MPIDR_AFFINITY_LEVEL(mpidr, 1) | + (MPIDR_AFFINITY_LEVEL(mpidr, 2) << 8)); + aff = ((u64)MPIDR_AFFINITY_LEVEL(mpidr, 3) << 32 | MPIDR_AFFINITY_LEVEL(mpidr, 2) << 16 | MPIDR_AFFINITY_LEVEL(mpidr, 1) << 8 | @@ -906,7 +913,7 @@ void gic_v3_dist_init(void) * Set all global interrupts to the boot CPU only. ARE must be * enabled. */ - affinity = gic_mpidr_to_affinity(cpu_logical_map(smp_processor_id())); + affinity = gic_cpu_to_affinity(smp_processor_id()); for (i = 32; i < GIC_LINE_NR; i++) { trace_android_vh_gic_v3_affinity_init(i, GICD_IROUTER, &affinity); gic_write_irouter(affinity, base + GICD_IROUTER + i * 8); @@ -960,7 +967,7 @@ static int gic_iterate_rdists(int (*fn)(struct redist_region *, void __iomem *)) static int __gic_populate_rdist(struct redist_region *region, void __iomem *ptr) { - unsigned long mpidr = cpu_logical_map(smp_processor_id()); + unsigned long mpidr; u64 typer; u32 aff; @@ -968,6 +975,8 @@ static int __gic_populate_rdist(struct redist_region *region, void __iomem *ptr) * Convert affinity to a 32bit value that can be matched to * GICR_TYPER bits [63:32]. */ + mpidr = gic_cpu_to_affinity(smp_processor_id()); + aff = (MPIDR_AFFINITY_LEVEL(mpidr, 3) << 24 | MPIDR_AFFINITY_LEVEL(mpidr, 2) << 16 | MPIDR_AFFINITY_LEVEL(mpidr, 1) << 8 | @@ -1081,7 +1090,7 @@ static inline bool gic_dist_security_disabled(void) static void gic_cpu_sys_reg_init(void) { int i, cpu = smp_processor_id(); - u64 mpidr = cpu_logical_map(cpu); + u64 mpidr = gic_cpu_to_affinity(cpu); u64 need_rss = MPIDR_RS(mpidr); bool group0; u32 pribits; @@ -1180,11 +1189,11 @@ static void gic_cpu_sys_reg_init(void) for_each_online_cpu(i) { bool have_rss = per_cpu(has_rss, i) && per_cpu(has_rss, cpu); - need_rss |= MPIDR_RS(cpu_logical_map(i)); + need_rss |= MPIDR_RS(gic_cpu_to_affinity(i)); if (need_rss && (!have_rss)) pr_crit("CPU%d (%lx) can't SGI CPU%d (%lx), no RSS\n", cpu, (unsigned long)mpidr, - i, (unsigned long)cpu_logical_map(i)); + i, (unsigned long)gic_cpu_to_affinity(i)); } /** @@ -1261,9 +1270,11 @@ static u16 gic_compute_target_list(int *base_cpu, const struct cpumask *mask, unsigned long cluster_id) { int next_cpu, cpu = *base_cpu; - unsigned long mpidr = cpu_logical_map(cpu); + unsigned long mpidr; u16 tlist = 0; + mpidr = gic_cpu_to_affinity(cpu); + while (cpu < nr_cpu_ids) { tlist |= 1 << (mpidr & 0xf); @@ -1272,7 +1283,7 @@ static u16 gic_compute_target_list(int *base_cpu, const struct cpumask *mask, goto out; cpu = next_cpu; - mpidr = cpu_logical_map(cpu); + mpidr = gic_cpu_to_affinity(cpu); if (cluster_id != MPIDR_TO_SGI_CLUSTER_ID(mpidr)) { cpu--; @@ -1317,7 +1328,7 @@ static void gic_ipi_send_mask(struct irq_data *d, const struct cpumask *mask) dsb(ishst); for_each_cpu(cpu, mask) { - u64 cluster_id = MPIDR_TO_SGI_CLUSTER_ID(cpu_logical_map(cpu)); + u64 cluster_id = MPIDR_TO_SGI_CLUSTER_ID(gic_cpu_to_affinity(cpu)); u16 tlist; tlist = gic_compute_target_list(&cpu, mask, cluster_id); @@ -1377,7 +1388,7 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val, offset = convert_offset_index(d, GICD_IROUTER, &index); reg = gic_dist_base(d) + offset + (index * 8); - val = gic_mpidr_to_affinity(cpu_logical_map(cpu)); + val = gic_cpu_to_affinity(cpu); trace_android_rvh_gic_v3_set_affinity(d, mask_val, &val, force, gic_dist_base(d), gic_data.redist_regions[0].redist_base, @@ -1798,6 +1809,15 @@ static bool gic_enable_quirk_arm64_2941627(void *data) return true; } +static bool gic_enable_quirk_asr8601(void *data) +{ + struct gic_chip_data_v3 *d = data; + + d->flags |= FLAGS_WORKAROUND_ASR_ERRATUM_8601001; + + return true; +} + static const struct gic_quirk gic_quirks[] = { { .desc = "GICv3: Qualcomm MSM8996 broken firmware", @@ -1809,6 +1829,11 @@ static const struct gic_quirk gic_quirks[] = { .property = "mediatek,broken-save-restore-fw", .init = gic_enable_quirk_mtk_gicr, }, + { + .desc = "GICv3: ASR erratum 8601001", + .compatible = "asr,asr8601-gic-v3", + .init = gic_enable_quirk_asr8601, + }, { .desc = "GICv3: HIP06 erratum 161010803", .iidr = 0x0204043b, diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig index c4b89fb8590c..b3f752fac201 100644 --- a/drivers/misc/Kconfig +++ b/drivers/misc/Kconfig @@ -469,13 +469,6 @@ config UID_SYS_STATS Per UID based io statistics exported to /proc/uid_io Per UID based procstat control in /proc/uid_procstat -config UID_SYS_STATS_DEBUG - bool "Per-TASK statistics" - depends on UID_SYS_STATS - default n - help - Per TASK based io statistics exported to /proc/uid_io - config HISI_HIKEY_USB tristate "USB GPIO Hub on HiSilicon Hikey 960/970 Platform" depends on (OF && GPIOLIB) || COMPILE_TEST diff --git a/drivers/misc/uid_sys_stats.c b/drivers/misc/uid_sys_stats.c index 095962102ac7..13acc61539ab 100644 --- a/drivers/misc/uid_sys_stats.c +++ b/drivers/misc/uid_sys_stats.c @@ -76,9 +76,6 @@ struct uid_entry { int state; struct io_stats io[UID_STATE_SIZE]; struct hlist_node hash; -#ifdef CONFIG_UID_SYS_STATS_DEBUG - DECLARE_HASHTABLE(task_entries, UID_HASH_BITS); -#endif }; static inline int trylock_uid(uid_t uid) @@ -148,182 +145,6 @@ static void compute_io_bucket_stats(struct io_stats *io_bucket, memset(io_dead, 0, sizeof(struct io_stats)); } -#ifdef CONFIG_UID_SYS_STATS_DEBUG -static void get_full_task_comm(struct task_entry *task_entry, - struct task_struct *task) -{ - int i = 0, offset = 0, len = 0; - /* save one byte for terminating null character */ - int unused_len = MAX_TASK_COMM_LEN - TASK_COMM_LEN - 1; - char buf[MAX_TASK_COMM_LEN - TASK_COMM_LEN - 1]; - struct mm_struct *mm = task->mm; - - /* fill the first TASK_COMM_LEN bytes with thread name */ - __get_task_comm(task_entry->comm, TASK_COMM_LEN, task); - i = strlen(task_entry->comm); - while (i < TASK_COMM_LEN) - task_entry->comm[i++] = ' '; - - /* next the executable file name */ - if (mm) { - mmap_write_lock(mm); - if (mm->exe_file) { - char *pathname = d_path(&mm->exe_file->f_path, buf, - unused_len); - - if (!IS_ERR(pathname)) { - len = strlcpy(task_entry->comm + i, pathname, - unused_len); - i += len; - task_entry->comm[i++] = ' '; - unused_len--; - } - } - mmap_write_unlock(mm); - } - unused_len -= len; - - /* fill the rest with command line argument - * replace each null or new line character - * between args in argv with whitespace */ - len = get_cmdline(task, buf, unused_len); - while (offset < len) { - if (buf[offset] != '\0' && buf[offset] != '\n') - task_entry->comm[i++] = buf[offset]; - else - task_entry->comm[i++] = ' '; - offset++; - } - - /* get rid of trailing whitespaces in case when arg is memset to - * zero before being reset in userspace - */ - while (task_entry->comm[i-1] == ' ') - i--; - task_entry->comm[i] = '\0'; -} - -static struct task_entry *find_task_entry(struct uid_entry *uid_entry, - struct task_struct *task) -{ - struct task_entry *task_entry; - - hash_for_each_possible(uid_entry->task_entries, task_entry, hash, - task->pid) { - if (task->pid == task_entry->pid) { - /* if thread name changed, update the entire command */ - int len = strnchr(task_entry->comm, ' ', TASK_COMM_LEN) - - task_entry->comm; - - if (strncmp(task_entry->comm, task->comm, len)) - get_full_task_comm(task_entry, task); - return task_entry; - } - } - return NULL; -} - -static struct task_entry *find_or_register_task(struct uid_entry *uid_entry, - struct task_struct *task) -{ - struct task_entry *task_entry; - pid_t pid = task->pid; - - task_entry = find_task_entry(uid_entry, task); - if (task_entry) - return task_entry; - - task_entry = kzalloc(sizeof(struct task_entry), GFP_ATOMIC); - if (!task_entry) - return NULL; - - get_full_task_comm(task_entry, task); - - task_entry->pid = pid; - hash_add(uid_entry->task_entries, &task_entry->hash, (unsigned int)pid); - - return task_entry; -} - -static void remove_uid_tasks(struct uid_entry *uid_entry) -{ - struct task_entry *task_entry; - unsigned long bkt_task; - struct hlist_node *tmp_task; - - hash_for_each_safe(uid_entry->task_entries, bkt_task, - tmp_task, task_entry, hash) { - hash_del(&task_entry->hash); - kfree(task_entry); - } -} - -static void set_io_uid_tasks_zero(struct uid_entry *uid_entry) -{ - struct task_entry *task_entry; - unsigned long bkt_task; - - hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) { - memset(&task_entry->io[UID_STATE_TOTAL_CURR], 0, - sizeof(struct io_stats)); - } -} - -static void add_uid_tasks_io_stats(struct task_entry *task_entry, - struct task_io_accounting *ioac, int slot) -{ - struct io_stats *task_io_slot = &task_entry->io[slot]; - - task_io_slot->read_bytes += ioac->read_bytes; - task_io_slot->write_bytes += compute_write_bytes(ioac); - task_io_slot->rchar += ioac->rchar; - task_io_slot->wchar += ioac->wchar; - task_io_slot->fsync += ioac->syscfs; -} - -static void compute_io_uid_tasks(struct uid_entry *uid_entry) -{ - struct task_entry *task_entry; - unsigned long bkt_task; - - hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) { - compute_io_bucket_stats(&task_entry->io[uid_entry->state], - &task_entry->io[UID_STATE_TOTAL_CURR], - &task_entry->io[UID_STATE_TOTAL_LAST], - &task_entry->io[UID_STATE_DEAD_TASKS]); - } -} - -static void show_io_uid_tasks(struct seq_file *m, struct uid_entry *uid_entry) -{ - struct task_entry *task_entry; - unsigned long bkt_task; - - hash_for_each(uid_entry->task_entries, bkt_task, task_entry, hash) { - /* Separated by comma because space exists in task comm */ - seq_printf(m, "task,%s,%lu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu,%llu\n", - task_entry->comm, - (unsigned long)task_entry->pid, - task_entry->io[UID_STATE_FOREGROUND].rchar, - task_entry->io[UID_STATE_FOREGROUND].wchar, - task_entry->io[UID_STATE_FOREGROUND].read_bytes, - task_entry->io[UID_STATE_FOREGROUND].write_bytes, - task_entry->io[UID_STATE_BACKGROUND].rchar, - task_entry->io[UID_STATE_BACKGROUND].wchar, - task_entry->io[UID_STATE_BACKGROUND].read_bytes, - task_entry->io[UID_STATE_BACKGROUND].write_bytes, - task_entry->io[UID_STATE_FOREGROUND].fsync, - task_entry->io[UID_STATE_BACKGROUND].fsync); - } -} -#else -static void remove_uid_tasks(struct uid_entry *uid_entry) {}; -static void set_io_uid_tasks_zero(struct uid_entry *uid_entry) {}; -static void compute_io_uid_tasks(struct uid_entry *uid_entry) {}; -static void show_io_uid_tasks(struct seq_file *m, - struct uid_entry *uid_entry) {} -#endif - static struct uid_entry *find_uid_entry(uid_t uid) { struct uid_entry *uid_entry; @@ -347,9 +168,6 @@ static struct uid_entry *find_or_register_uid(uid_t uid) return NULL; uid_entry->uid = uid; -#ifdef CONFIG_UID_SYS_STATS_DEBUG - hash_init(uid_entry->task_entries); -#endif hash_add(hash_table, &uid_entry->hash, uid); return uid_entry; @@ -465,7 +283,6 @@ static ssize_t uid_remove_write(struct file *file, hash_for_each_possible_safe(hash_table, uid_entry, tmp, hash, (uid_t)uid_start) { if (uid_start == uid_entry->uid) { - remove_uid_tasks(uid_entry); hash_del(&uid_entry->hash); kfree(uid_entry); } @@ -503,10 +320,6 @@ static void add_uid_io_stats(struct uid_entry *uid_entry, if (slot != UID_STATE_DEAD_TASKS && (task->flags & PF_EXITING)) return; -#ifdef CONFIG_UID_SYS_STATS_DEBUG - task_entry = find_or_register_task(uid_entry, task); - add_uid_tasks_io_stats(task_entry, &task->ioac, slot); -#endif __add_uid_io_stats(uid_entry, &task->ioac, slot); } @@ -524,7 +337,6 @@ static void update_io_stats_all(void) hlist_for_each_entry(uid_entry, &hash_table[bkt], hash) { memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0, sizeof(struct io_stats)); - set_io_uid_tasks_zero(uid_entry); } unlock_uid_by_bkt(bkt); } @@ -552,24 +364,18 @@ static void update_io_stats_all(void) &uid_entry->io[UID_STATE_TOTAL_CURR], &uid_entry->io[UID_STATE_TOTAL_LAST], &uid_entry->io[UID_STATE_DEAD_TASKS]); - compute_io_uid_tasks(uid_entry); } unlock_uid_by_bkt(bkt); } } -#ifndef CONFIG_UID_SYS_STATS_DEBUG static void update_io_stats_uid(struct uid_entry *uid_entry) -#else -static void update_io_stats_uid_locked(struct uid_entry *uid_entry) -#endif { struct task_struct *task, *temp; struct user_namespace *user_ns = current_user_ns(); memset(&uid_entry->io[UID_STATE_TOTAL_CURR], 0, sizeof(struct io_stats)); - set_io_uid_tasks_zero(uid_entry); rcu_read_lock(); do_each_thread(temp, task) { @@ -583,7 +389,6 @@ static void update_io_stats_uid_locked(struct uid_entry *uid_entry) &uid_entry->io[UID_STATE_TOTAL_CURR], &uid_entry->io[UID_STATE_TOTAL_LAST], &uid_entry->io[UID_STATE_DEAD_TASKS]); - compute_io_uid_tasks(uid_entry); } @@ -610,8 +415,6 @@ static int uid_io_show(struct seq_file *m, void *v) uid_entry->io[UID_STATE_BACKGROUND].write_bytes, uid_entry->io[UID_STATE_FOREGROUND].fsync, uid_entry->io[UID_STATE_BACKGROUND].fsync); - - show_io_uid_tasks(m, uid_entry); } unlock_uid_by_bkt(bkt); } @@ -643,9 +446,7 @@ static ssize_t uid_procstat_write(struct file *file, uid_t uid; int argc, state; char input[128]; -#ifndef CONFIG_UID_SYS_STATS_DEBUG struct uid_entry uid_entry_tmp; -#endif if (count >= sizeof(input)) return -EINVAL; @@ -674,7 +475,6 @@ static ssize_t uid_procstat_write(struct file *file, return count; } -#ifndef CONFIG_UID_SYS_STATS_DEBUG /* * Update_io_stats_uid_locked would take a long lock-time of uid_lock * due to call do_each_thread to compute uid_entry->io, which would @@ -684,9 +484,8 @@ static ssize_t uid_procstat_write(struct file *file, * so that we can unlock_uid during update_io_stats_uid, in order * to avoid the unnecessary lock-time of uid_lock. */ - uid_entry_tmp.uid = uid_entry->uid; - memcpy(uid_entry_tmp.io, uid_entry->io, - sizeof(struct io_stats) * UID_STATE_SIZE); + uid_entry_tmp = *uid_entry; + unlock_uid(uid); update_io_stats_uid(&uid_entry_tmp); @@ -700,13 +499,6 @@ static ssize_t uid_procstat_write(struct file *file, } } unlock_uid(uid); -#else - update_io_stats_uid_locked(uid_entry); - - uid_entry->state = state; - - unlock_uid(uid); -#endif return count; } @@ -719,9 +511,6 @@ static const struct proc_ops uid_procstat_fops = { struct update_stats_work { uid_t uid; -#ifdef CONFIG_UID_SYS_STATS_DEBUG - struct task_struct *task; -#endif struct task_io_accounting ioac; u64 utime; u64 stime; @@ -747,19 +536,9 @@ static void update_stats_workfn(struct work_struct *work) 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 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); next: unlock_uid(usw->uid); -#ifdef CONFIG_UID_SYS_STATS_DEBUG - put_task_struct(usw->task); -#endif kfree(usw); } @@ -784,9 +563,6 @@ static int process_notifier(struct notifier_block *self, usw = kmalloc(sizeof(struct update_stats_work), GFP_KERNEL); if (usw) { usw->uid = uid; -#ifdef CONFIG_UID_SYS_STATS_DEBUG - usw->task = get_task_struct(task); -#endif /* * Copy task->ioac since task might be destroyed before * the work is later performed. diff --git a/drivers/powercap/idle_inject.c b/drivers/powercap/idle_inject.c index 999e218d7793..9bc8add42ebd 100644 --- a/drivers/powercap/idle_inject.c +++ b/drivers/powercap/idle_inject.c @@ -159,6 +159,7 @@ void idle_inject_set_duration(struct idle_inject_device *ii_dev, WRITE_ONCE(ii_dev->idle_duration_us, idle_duration_us); } } +EXPORT_SYMBOL_GPL(idle_inject_set_duration); /** * idle_inject_get_duration - idle and run duration retrieval helper @@ -172,6 +173,7 @@ void idle_inject_get_duration(struct idle_inject_device *ii_dev, *run_duration_us = READ_ONCE(ii_dev->run_duration_us); *idle_duration_us = READ_ONCE(ii_dev->idle_duration_us); } +EXPORT_SYMBOL_GPL(idle_inject_get_duration); /** * idle_inject_set_latency - set the maximum latency allowed @@ -182,6 +184,7 @@ void idle_inject_set_latency(struct idle_inject_device *ii_dev, { WRITE_ONCE(ii_dev->latency_us, latency_us); } +EXPORT_SYMBOL_GPL(idle_inject_set_latency); /** * idle_inject_start - start idle injections @@ -213,6 +216,7 @@ int idle_inject_start(struct idle_inject_device *ii_dev) return 0; } +EXPORT_SYMBOL_GPL(idle_inject_start); /** * idle_inject_stop - stops idle injections @@ -259,6 +263,7 @@ void idle_inject_stop(struct idle_inject_device *ii_dev) cpu_hotplug_enable(); } +EXPORT_SYMBOL_GPL(idle_inject_stop); /** * idle_inject_setup - prepare the current task for idle injection @@ -334,6 +339,7 @@ out_rollback: return NULL; } +EXPORT_SYMBOL_GPL(idle_inject_register); /** * idle_inject_unregister - unregister idle injection control device @@ -354,6 +360,7 @@ void idle_inject_unregister(struct idle_inject_device *ii_dev) kfree(ii_dev); } +EXPORT_SYMBOL_GPL(idle_inject_unregister); static struct smp_hotplug_thread idle_inject_threads = { .store = &idle_inject_thread.tsk, diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 10bd8120034b..4b07bdc4e3b6 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -317,7 +317,7 @@ void scsi_eh_scmd_add(struct scsi_cmnd *scmd) * Ensure that all tasks observe the host state change before the * host_failed change. */ - call_rcu(&scmd->rcu, scsi_eh_inc_host_failed); + call_rcu_hurry(&scmd->rcu, scsi_eh_inc_host_failed); } /** diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index f2c561ae4bfe..e32b1d3a11ae 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -2033,9 +2033,19 @@ static void update_port_device_state(struct usb_device *udev) if (udev->parent) { hub = usb_hub_to_struct_hub(udev->parent); - port_dev = hub->ports[udev->portnum - 1]; - WRITE_ONCE(port_dev->state, udev->state); - sysfs_notify_dirent(port_dev->state_kn); + + /* + * The Link Layer Validation System Driver (lvstest) + * has a test step to unbind the hub before running the + * rest of the procedure. This triggers hub_disconnect + * which will set the hub's maxchild to 0, further + * resulting in usb_hub_to_struct_hub returning NULL. + */ + if (hub) { + port_dev = hub->ports[udev->portnum - 1]; + WRITE_ONCE(port_dev->state, udev->state); + sysfs_notify_dirent(port_dev->state_kn); + } } } diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index 255230fa1e47..bff3a4e30e12 100644 --- a/drivers/usb/dwc3/core.c +++ b/drivers/usb/dwc3/core.c @@ -2362,12 +2362,15 @@ static int dwc3_resume(struct device *dev) pinctrl_pm_select_default_state(dev); - ret = dwc3_resume_common(dwc, PMSG_RESUME); - if (ret) - return ret; - pm_runtime_disable(dev); pm_runtime_set_active(dev); + + ret = dwc3_resume_common(dwc, PMSG_RESUME); + if (ret) { + pm_runtime_set_suspended(dev); + return ret; + } + pm_runtime_enable(dev); return 0; diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 61de693461da..ec3c33266547 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -236,7 +236,10 @@ void dwc3_ep0_stall_and_restart(struct dwc3 *dwc) struct dwc3_request *req; req = next_request(&dep->pending_list); - dwc3_gadget_giveback(dep, req, -ECONNRESET); + if (!dwc->connected) + dwc3_gadget_giveback(dep, req, -ESHUTDOWN); + else + dwc3_gadget_giveback(dep, req, -ECONNRESET); } dwc->eps[0]->trb_enqueue = 0; diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 121092e35ec6..c9c6255a047b 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -4590,15 +4590,13 @@ int dwc3_gadget_suspend(struct dwc3 *dwc) unsigned long flags; int ret; - if (!dwc->gadget_driver) - return 0; - ret = dwc3_gadget_soft_disconnect(dwc); if (ret) goto err; spin_lock_irqsave(&dwc->lock, flags); - dwc3_disconnect_gadget(dwc); + if (dwc->gadget_driver) + dwc3_disconnect_gadget(dwc); spin_unlock_irqrestore(&dwc->lock, flags); return 0; diff --git a/drivers/usb/gadget/function/uvc_video.c b/drivers/usb/gadget/function/uvc_video.c index 98ba524c27f5..dd3241fc6939 100644 --- a/drivers/usb/gadget/function/uvc_video.c +++ b/drivers/usb/gadget/function/uvc_video.c @@ -276,10 +276,9 @@ static int uvcg_video_usb_req_queue(struct uvc_video *video, bool is_bulk = video->max_payload_size; struct list_head *list = NULL; - if (!video->is_enabled) { - uvc_video_free_request(req->context, video->ep); + if (!video->is_enabled) return -ENODEV; - } + if (queue_to_ep) { struct uvc_request *ureq = req->context; /* @@ -464,12 +463,21 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req) * and this thread for isoc endpoints. */ ret = uvcg_video_usb_req_queue(video, to_queue, !is_bulk); - if (ret < 0) - uvcg_queue_cancel(queue, 0); + if (ret < 0) { + /* + * Endpoint error, but the stream is still enabled. + * Put request back in req_free for it to be cleaned + * up later. + */ + list_add_tail(&to_queue->list, &video->req_free); + } } else { uvc_video_free_request(ureq, ep); + ret = 0; } spin_unlock_irqrestore(&video->req_lock, flags); + if (ret < 0) + uvcg_queue_cancel(queue, 0); } static int diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c index be041bd65b19..d81d4aee1292 100644 --- a/drivers/usb/host/xhci.c +++ b/drivers/usb/host/xhci.c @@ -1133,6 +1133,7 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) int retval = 0; bool comp_timer_running = false; bool pending_portevent = false; + bool suspended_usb3_devs = false; bool reinit_xhc = false; if (!hcd->state) @@ -1282,10 +1283,16 @@ int xhci_resume(struct xhci_hcd *xhci, bool hibernated) /* * Resume roothubs only if there are pending events. * USB 3 devices resend U3 LFPS wake after a 100ms delay if - * the first wake signalling failed, give it that chance. + * the first wake signalling failed, give it that chance if + * there are suspended USB 3 devices. */ + if (xhci->usb3_rhub.bus_state.suspended_ports || + xhci->usb3_rhub.bus_state.bus_suspended) + suspended_usb3_devs = true; + pending_portevent = xhci_pending_portevent(xhci); - if (!pending_portevent) { + + if (suspended_usb3_devs && !pending_portevent) { msleep(120); pending_portevent = xhci_pending_portevent(xhci); } diff --git a/fs/fuse/backing.c b/fs/fuse/backing.c index 6ca74987f7da..0bc637db568f 100644 --- a/fs/fuse/backing.c +++ b/fs/fuse/backing.c @@ -401,23 +401,26 @@ int fuse_lseek_backing(struct fuse_bpf_args *fa, struct file *file, loff_t offse struct file *backing_file = fuse_file->backing_file; loff_t ret; - /* TODO: Handle changing of the file handle */ if (offset == 0) { if (whence == SEEK_CUR) { flo->offset = file->f_pos; - return flo->offset; + return 0; } if (whence == SEEK_SET) { flo->offset = vfs_setpos(file, 0, 0); - return flo->offset; + return 0; } } inode_lock(file->f_inode); backing_file->f_pos = file->f_pos; ret = vfs_llseek(backing_file, fli->offset, fli->whence); - flo->offset = ret; + + if (!IS_ERR(ERR_PTR(ret))) { + flo->offset = ret; + ret = 0; + } inode_unlock(file->f_inode); return ret; } diff --git a/include/linux/async.h b/include/linux/async.h index cce4ad31e8fc..33c9ff4afb49 100644 --- a/include/linux/async.h +++ b/include/linux/async.h @@ -90,6 +90,8 @@ async_schedule_dev(async_func_t func, struct device *dev) return async_schedule_node(func, dev, dev_to_node(dev)); } +bool async_schedule_dev_nocall(async_func_t func, struct device *dev); + /** * async_schedule_dev_domain - A device specific version of async_schedule_domain * @func: function to execute asynchronously diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 64eda2503892..19e7b77ef0cf 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -694,6 +694,9 @@ struct perf_event { /* The cumulative AND of all event_caps for events in this group. */ int group_caps; +#ifndef __GENKSYMS__ + unsigned int group_generation; +#endif struct perf_event *group_leader; struct pmu *pmu; void *pmu_private; diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index e9e61cd27ef6..46f05dc8b31a 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -108,6 +108,15 @@ static inline int rcu_preempt_depth(void) #endif /* #else #ifdef CONFIG_PREEMPT_RCU */ +#ifdef CONFIG_RCU_LAZY +void call_rcu_hurry(struct rcu_head *head, rcu_callback_t func); +#else +static inline void call_rcu_hurry(struct rcu_head *head, rcu_callback_t func) +{ + call_rcu(head, func); +} +#endif + /* Internal to kernel */ void rcu_init(void); extern int rcu_scheduler_active; diff --git a/include/linux/rcupdate_wait.h b/include/linux/rcupdate_wait.h index 699b938358bf..5e0f74f2f8ca 100644 --- a/include/linux/rcupdate_wait.h +++ b/include/linux/rcupdate_wait.h @@ -42,6 +42,11 @@ do { \ * call_srcu() function, with this wrapper supplying the pointer to the * corresponding srcu_struct. * + * Note that call_rcu_hurry() should be used instead of call_rcu() + * because in kernels built with CONFIG_RCU_LAZY=y the delay between the + * invocation of call_rcu() and that of the corresponding RCU callback + * can be multiple seconds. + * * The first argument tells Tiny RCU's _wait_rcu_gp() not to * bother waiting for RCU. The reason for this is because anywhere * synchronize_rcu_mult() can be called is automatically already a full diff --git a/include/trace/events/oom.h b/include/trace/events/oom.h index 26a11e4a2c36..3c5941da8075 100644 --- a/include/trace/events/oom.h +++ b/include/trace/events/oom.h @@ -72,19 +72,30 @@ TRACE_EVENT(reclaim_retry_zone, ); TRACE_EVENT(mark_victim, - TP_PROTO(int pid), + TP_PROTO(struct task_struct *task, uid_t uid), - TP_ARGS(pid), + TP_ARGS(task, uid), TP_STRUCT__entry( __field(int, pid) + __field(uid_t, uid) + __string(comm, task->comm) + __field(short, oom_score_adj) ), TP_fast_assign( - __entry->pid = pid; + __entry->pid = task->pid; + __entry->uid = uid; + __assign_str(comm, task->comm); + __entry->oom_score_adj = task->signal->oom_score_adj; ), - TP_printk("pid=%d", __entry->pid) + TP_printk("pid=%d uid=%u comm=%s oom_score_adj=%hd", + __entry->pid, + __entry->uid, + __get_str(comm), + __entry->oom_score_adj + ) ); TRACE_EVENT(wake_reaper, diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h index 216b5645db73..1a1d051fb079 100644 --- a/include/trace/hooks/binder.h +++ b/include/trace/hooks/binder.h @@ -74,6 +74,11 @@ DECLARE_HOOK(android_vh_binder_select_worklist_ilocked, TP_PROTO(struct list_head **list, struct binder_thread *thread, struct binder_proc *proc, int wait_for_proc_work), TP_ARGS(list, thread, proc, wait_for_proc_work)); +DECLARE_HOOK(android_vh_binder_select_special_worklist, + TP_PROTO(struct list_head **list, struct binder_thread *thread, struct binder_proc *proc, + int wait_for_proc_work, bool *nothing_to_do), + TP_ARGS(list, thread, proc, wait_for_proc_work, nothing_to_do)); + DECLARE_HOOK(android_vh_binder_alloc_new_buf_locked, TP_PROTO(size_t size, size_t *free_async_space, int is_async), TP_ARGS(size, free_async_space, is_async)); @@ -118,6 +123,23 @@ DECLARE_HOOK(android_vh_binder_free_buf, struct binder_buffer *buffer), TP_ARGS(proc, thread, buffer)); +DECLARE_HOOK(android_vh_binder_ioctl_end, + TP_PROTO(struct task_struct *caller_task, + unsigned int cmd, + unsigned long arg, + struct binder_thread *thread, + struct binder_proc *proc, + int *ret), + TP_ARGS(caller_task, cmd, arg, thread, proc, ret)); +DECLARE_HOOK(android_vh_binder_looper_exited, + TP_PROTO(struct binder_thread *thread, struct binder_proc *proc), + TP_ARGS(thread, proc)); +DECLARE_HOOK(android_vh_binder_spawn_new_thread, + TP_PROTO(struct binder_thread *thread, struct binder_proc *proc, bool *force_spawn), + TP_ARGS(thread, proc, force_spawn)); +DECLARE_HOOK(android_vh_binder_has_special_work_ilocked, + TP_PROTO(struct binder_thread *thread, bool do_proc_work, bool *has_work), + TP_ARGS(thread, do_proc_work, has_work)); #endif /* _TRACE_HOOK_BINDER_H */ /* This part must be outside protection */ #include diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 35894955b454..a27a2813d5b8 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -536,7 +536,7 @@ static void io_eventfd_signal(struct io_ring_ctx *ctx) } else { atomic_inc(&ev_fd->refs); if (!atomic_fetch_or(BIT(IO_EVENTFD_OP_SIGNAL_BIT), &ev_fd->ops)) - call_rcu(&ev_fd->rcu, io_eventfd_ops); + call_rcu_hurry(&ev_fd->rcu, io_eventfd_ops); else atomic_dec(&ev_fd->refs); } diff --git a/kernel/async.c b/kernel/async.c index b2c4ba5686ee..673bba6bdf3a 100644 --- a/kernel/async.c +++ b/kernel/async.c @@ -145,6 +145,39 @@ static void async_run_entry_fn(struct work_struct *work) wake_up(&async_done); } +static async_cookie_t __async_schedule_node_domain(async_func_t func, + void *data, int node, + struct async_domain *domain, + struct async_entry *entry) +{ + async_cookie_t newcookie; + unsigned long flags; + + INIT_LIST_HEAD(&entry->domain_list); + INIT_LIST_HEAD(&entry->global_list); + INIT_WORK(&entry->work, async_run_entry_fn); + entry->func = func; + entry->data = data; + entry->domain = domain; + + spin_lock_irqsave(&async_lock, flags); + + /* allocate cookie and queue */ + newcookie = entry->cookie = next_cookie++; + + list_add_tail(&entry->domain_list, &domain->pending); + if (domain->registered) + list_add_tail(&entry->global_list, &async_global_pending); + + atomic_inc(&entry_count); + spin_unlock_irqrestore(&async_lock, flags); + + /* schedule for execution */ + queue_work_node(node, system_unbound_wq, &entry->work); + + return newcookie; +} + /** * async_schedule_node_domain - NUMA specific version of async_schedule_domain * @func: function to execute asynchronously @@ -186,29 +219,8 @@ async_cookie_t async_schedule_node_domain(async_func_t func, void *data, func(data, newcookie); return newcookie; } - INIT_LIST_HEAD(&entry->domain_list); - INIT_LIST_HEAD(&entry->global_list); - INIT_WORK(&entry->work, async_run_entry_fn); - entry->func = func; - entry->data = data; - entry->domain = domain; - spin_lock_irqsave(&async_lock, flags); - - /* allocate cookie and queue */ - newcookie = entry->cookie = next_cookie++; - - list_add_tail(&entry->domain_list, &domain->pending); - if (domain->registered) - list_add_tail(&entry->global_list, &async_global_pending); - - atomic_inc(&entry_count); - spin_unlock_irqrestore(&async_lock, flags); - - /* schedule for execution */ - queue_work_node(node, system_unbound_wq, &entry->work); - - return newcookie; + return __async_schedule_node_domain(func, data, node, domain, entry); } EXPORT_SYMBOL_GPL(async_schedule_node_domain); @@ -231,6 +243,35 @@ async_cookie_t async_schedule_node(async_func_t func, void *data, int node) } EXPORT_SYMBOL_GPL(async_schedule_node); +/** + * async_schedule_dev_nocall - A simplified variant of async_schedule_dev() + * @func: function to execute asynchronously + * @dev: device argument to be passed to function + * + * @dev is used as both the argument for the function and to provide NUMA + * context for where to run the function. + * + * If the asynchronous execution of @func is scheduled successfully, return + * true. Otherwise, do nothing and return false, unlike async_schedule_dev() + * that will run the function synchronously then. + */ +bool async_schedule_dev_nocall(async_func_t func, struct device *dev) +{ + struct async_entry *entry; + + entry = kzalloc(sizeof(struct async_entry), GFP_KERNEL); + + /* Give up if there is no memory or too much work. */ + if (!entry || atomic_read(&entry_count) > MAX_WORK) { + kfree(entry); + return false; + } + + __async_schedule_node_domain(func, dev, dev_to_node(dev), + &async_dfl_domain, entry); + return true; +} + /** * async_synchronize_full - synchronize all asynchronous function calls * diff --git a/kernel/events/core.c b/kernel/events/core.c index 01699922330b..91feda5970c2 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -1987,6 +1987,7 @@ static void perf_group_attach(struct perf_event *event) list_add_tail(&event->sibling_list, &group_leader->sibling_list); group_leader->nr_siblings++; + group_leader->group_generation++; perf_event__header_size(group_leader); @@ -2181,6 +2182,7 @@ static void perf_group_detach(struct perf_event *event) if (leader != event) { list_del_init(&event->sibling_list); event->group_leader->nr_siblings--; + event->group_leader->group_generation++; goto out; } @@ -5305,7 +5307,7 @@ static int __perf_read_group_add(struct perf_event *leader, u64 read_format, u64 *values) { struct perf_event_context *ctx = leader->ctx; - struct perf_event *sub; + struct perf_event *sub, *parent; unsigned long flags; int n = 1; /* skip @nr */ int ret; @@ -5315,6 +5317,33 @@ static int __perf_read_group_add(struct perf_event *leader, return ret; raw_spin_lock_irqsave(&ctx->lock, flags); + /* + * Verify the grouping between the parent and child (inherited) + * events is still in tact. + * + * Specifically: + * - leader->ctx->lock pins leader->sibling_list + * - parent->child_mutex pins parent->child_list + * - parent->ctx->mutex pins parent->sibling_list + * + * Because parent->ctx != leader->ctx (and child_list nests inside + * ctx->mutex), group destruction is not atomic between children, also + * see perf_event_release_kernel(). Additionally, parent can grow the + * group. + * + * Therefore it is possible to have parent and child groups in a + * different configuration and summing over such a beast makes no sense + * what so ever. + * + * Reject this. + */ + parent = leader->parent; + if (parent && + (parent->group_generation != leader->group_generation || + parent->nr_siblings != leader->nr_siblings)) { + ret = -ECHILD; + goto unlock; + } /* * Since we co-schedule groups, {enabled,running} times of siblings @@ -5348,8 +5377,9 @@ static int __perf_read_group_add(struct perf_event *leader, values[n++] = atomic64_read(&sub->lost_samples); } +unlock: raw_spin_unlock_irqrestore(&ctx->lock, flags); - return 0; + return ret; } static int perf_read_group(struct perf_event *event, @@ -5368,10 +5398,6 @@ static int perf_read_group(struct perf_event *event, values[0] = 1 + leader->nr_siblings; - /* - * By locking the child_mutex of the leader we effectively - * lock the child list of all siblings.. XXX explain how. - */ mutex_lock(&leader->child_mutex); ret = __perf_read_group_add(leader, read_format, values); @@ -13278,6 +13304,7 @@ static int inherit_group(struct perf_event *parent_event, !perf_get_aux_event(child_ctr, leader)) return -EINVAL; } + leader->group_generation = parent_event->group_generation; return 0; } diff --git a/kernel/rcu/Kconfig b/kernel/rcu/Kconfig index d471d22a5e21..5ce3a8c258f3 100644 --- a/kernel/rcu/Kconfig +++ b/kernel/rcu/Kconfig @@ -311,4 +311,45 @@ config TASKS_TRACE_RCU_READ_MB Say N here if you hate read-side memory barriers. Take the default if you are unsure. +config RCU_LAZY + bool "RCU callback lazy invocation functionality" + depends on RCU_NOCB_CPU + default n + help + To save power, batch RCU callbacks and flush after delay, memory + pressure, or callback list growing too big. + Requires rcu_nocbs=all to be set. + + Use rcutree.enable_rcu_lazy=0 to turn it off at boot time. + +config RCU_LAZY_DEFAULT_OFF + bool "Turn RCU lazy invocation off by default" + depends on RCU_LAZY + default n + help + Allows building the kernel with CONFIG_RCU_LAZY=y yet keep it default + off. Boot time param rcutree.enable_rcu_lazy=1 can be used to switch + it back on. + +config RCU_BOOT_END_DELAY + int "Minimum time before RCU may consider in-kernel boot as completed" + range 0 120000 + default 20000 + help + Default value of the minimum time in milliseconds from the start of boot + that must elapse before the boot sequence can be marked complete from RCU's + perspective, after which RCU's behavior becomes more relaxed. + Userspace can also mark the boot as completed sooner than this default + by writing the time in milliseconds, say once userspace considers + the system as booted, to: /sys/module/rcupdate/parameters/rcu_boot_end_delay. + Or even just writing a value of 0 to this sysfs node. The sysfs node can + also be used to extend the delay to be larger than the default, assuming + the marking of boot completion has not yet occurred. + + The actual delay for RCU's view of the system to be marked as booted can be + higher than this value if the kernel takes a long time to initialize but it + will never be smaller than this value. + + Accept the default if unsure. + endmenu # "RCU Subsystem" diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h index 48d8f754b730..b6756ff69041 100644 --- a/kernel/rcu/rcu.h +++ b/kernel/rcu/rcu.h @@ -443,14 +443,20 @@ do { \ /* Tiny RCU doesn't expedite, as its purpose in life is instead to be tiny. */ static inline bool rcu_gp_is_normal(void) { return true; } static inline bool rcu_gp_is_expedited(void) { return false; } +static inline bool rcu_async_should_hurry(void) { return false; } static inline void rcu_expedite_gp(void) { } static inline void rcu_unexpedite_gp(void) { } +static inline void rcu_async_hurry(void) { } +static inline void rcu_async_relax(void) { } static inline void rcu_request_urgent_qs_task(struct task_struct *t) { } #else /* #ifdef CONFIG_TINY_RCU */ bool rcu_gp_is_normal(void); /* Internal RCU use. */ bool rcu_gp_is_expedited(void); /* Internal RCU use. */ +bool rcu_async_should_hurry(void); /* Internal RCU use. */ void rcu_expedite_gp(void); void rcu_unexpedite_gp(void); +void rcu_async_hurry(void); +void rcu_async_relax(void); void rcupdate_announce_bootup_oddness(void); #ifdef CONFIG_TASKS_RCU_GENERIC void show_rcu_tasks_gp_kthreads(void); @@ -474,6 +480,14 @@ enum rcutorture_type { INVALID_RCU_FLAVOR }; +#if defined(CONFIG_RCU_LAZY) +unsigned long rcu_lazy_get_jiffies_till_flush(void); +void rcu_lazy_set_jiffies_till_flush(unsigned long j); +#else +static inline unsigned long rcu_lazy_get_jiffies_till_flush(void) { return 0; } +static inline void rcu_lazy_set_jiffies_till_flush(unsigned long j) { } +#endif + #if defined(CONFIG_TREE_RCU) void rcutorture_get_gp_data(enum rcutorture_type test_type, int *flags, unsigned long *gp_seq); diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c index 0b88d96511ad..e4a203313906 100644 --- a/kernel/rcu/rcuscale.c +++ b/kernel/rcu/rcuscale.c @@ -175,7 +175,7 @@ static struct rcu_scale_ops rcu_ops = { .get_gp_seq = rcu_get_gp_seq, .gp_diff = rcu_seq_diff, .exp_completed = rcu_exp_batches_completed, - .async = call_rcu, + .async = call_rcu_hurry, .gp_barrier = rcu_barrier, .sync = synchronize_rcu, .exp_sync = synchronize_rcu_expedited, diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 503c2aa845a4..2226f86f54f7 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -510,7 +510,7 @@ static unsigned long rcu_no_completed(void) static void rcu_torture_deferred_free(struct rcu_torture *p) { - call_rcu(&p->rtort_rcu, rcu_torture_cb); + call_rcu_hurry(&p->rtort_rcu, rcu_torture_cb); } static void rcu_sync_torture_init(void) @@ -551,7 +551,7 @@ static struct rcu_torture_ops rcu_ops = { .start_gp_poll_exp_full = start_poll_synchronize_rcu_expedited_full, .poll_gp_state_exp = poll_state_synchronize_rcu, .cond_sync_exp = cond_synchronize_rcu_expedited, - .call = call_rcu, + .call = call_rcu_hurry, .cb_barrier = rcu_barrier, .fqs = rcu_force_quiescent_state, .stats = NULL, @@ -848,7 +848,7 @@ static void rcu_tasks_torture_deferred_free(struct rcu_torture *p) static void synchronize_rcu_mult_test(void) { - synchronize_rcu_mult(call_rcu_tasks, call_rcu); + synchronize_rcu_mult(call_rcu_tasks, call_rcu_hurry); } static struct rcu_torture_ops tasks_ops = { @@ -3388,13 +3388,13 @@ static void rcu_test_debug_objects(void) /* Try to queue the rh2 pair of callbacks for the same grace period. */ preempt_disable(); /* Prevent preemption from interrupting test. */ rcu_read_lock(); /* Make it impossible to finish a grace period. */ - call_rcu(&rh1, rcu_torture_leak_cb); /* Start grace period. */ + call_rcu_hurry(&rh1, rcu_torture_leak_cb); /* Start grace period. */ local_irq_disable(); /* Make it harder to start a new grace period. */ - call_rcu(&rh2, rcu_torture_leak_cb); - call_rcu(&rh2, rcu_torture_err_cb); /* Duplicate callback. */ + call_rcu_hurry(&rh2, rcu_torture_leak_cb); + call_rcu_hurry(&rh2, rcu_torture_err_cb); /* Duplicate callback. */ if (rhp) { - call_rcu(rhp, rcu_torture_leak_cb); - call_rcu(rhp, rcu_torture_err_cb); /* Another duplicate callback. */ + call_rcu_hurry(rhp, rcu_torture_leak_cb); + call_rcu_hurry(rhp, rcu_torture_err_cb); /* Another duplicate callback. */ } local_irq_enable(); rcu_read_unlock(); diff --git a/kernel/rcu/sync.c b/kernel/rcu/sync.c index 5cefc702158f..e550f97779b8 100644 --- a/kernel/rcu/sync.c +++ b/kernel/rcu/sync.c @@ -44,7 +44,7 @@ static void rcu_sync_func(struct rcu_head *rhp); static void rcu_sync_call(struct rcu_sync *rsp) { - call_rcu(&rsp->cb_head, rcu_sync_func); + call_rcu_hurry(&rsp->cb_head, rcu_sync_func); } /** diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c index a33a8d4942c3..72913ce21258 100644 --- a/kernel/rcu/tiny.c +++ b/kernel/rcu/tiny.c @@ -44,7 +44,7 @@ static struct rcu_ctrlblk rcu_ctrlblk = { void rcu_barrier(void) { - wait_rcu_gp(call_rcu); + wait_rcu_gp(call_rcu_hurry); } EXPORT_SYMBOL(rcu_barrier); diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 15df37bc052a..e1ad1900e2f4 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -2744,8 +2744,112 @@ static void check_cb_ovld(struct rcu_data *rdp) raw_spin_unlock_rcu_node(rnp); } +static void +__call_rcu_common(struct rcu_head *head, rcu_callback_t func, bool lazy_in) +{ + static atomic_t doublefrees; + unsigned long flags; + bool lazy; + struct rcu_data *rdp; + bool was_alldone; + + /* Misaligned rcu_head! */ + WARN_ON_ONCE((unsigned long)head & (sizeof(void *) - 1)); + + if (debug_rcu_head_queue(head)) { + /* + * Probable double call_rcu(), so leak the callback. + * Use rcu:rcu_callback trace event to find the previous + * time callback was passed to call_rcu(). + */ + if (atomic_inc_return(&doublefrees) < 4) { + pr_err("%s(): Double-freed CB %p->%pS()!!! ", __func__, head, head->func); + mem_dump_obj(head); + } + WRITE_ONCE(head->func, rcu_leak_callback); + return; + } + head->func = func; + head->next = NULL; + kasan_record_aux_stack_noalloc(head); + local_irq_save(flags); + rdp = this_cpu_ptr(&rcu_data); + lazy = lazy_in && !rcu_async_should_hurry(); + + /* Add the callback to our list. */ + if (unlikely(!rcu_segcblist_is_enabled(&rdp->cblist))) { + // This can trigger due to call_rcu() from offline CPU: + WARN_ON_ONCE(rcu_scheduler_active != RCU_SCHEDULER_INACTIVE); + WARN_ON_ONCE(!rcu_is_watching()); + // Very early boot, before rcu_init(). Initialize if needed + // and then drop through to queue the callback. + if (rcu_segcblist_empty(&rdp->cblist)) + rcu_segcblist_init(&rdp->cblist); + } + + check_cb_ovld(rdp); + if (rcu_nocb_try_bypass(rdp, head, &was_alldone, flags, lazy)) + return; // Enqueued onto ->nocb_bypass, so just leave. + // If no-CBs CPU gets here, rcu_nocb_try_bypass() acquired ->nocb_lock. + rcu_segcblist_enqueue(&rdp->cblist, head); + if (__is_kvfree_rcu_offset((unsigned long)func)) + trace_rcu_kvfree_callback(rcu_state.name, head, + (unsigned long)func, + rcu_segcblist_n_cbs(&rdp->cblist)); + else + trace_rcu_callback(rcu_state.name, head, + rcu_segcblist_n_cbs(&rdp->cblist)); + + trace_rcu_segcb_stats(&rdp->cblist, TPS("SegCBQueued")); + + /* Go handle any RCU core processing required. */ + if (unlikely(rcu_rdp_is_offloaded(rdp))) { + __call_rcu_nocb_wake(rdp, was_alldone, flags); /* unlocks */ + } else { + __call_rcu_core(rdp, head, flags); + local_irq_restore(flags); + } +} + +#ifdef CONFIG_RCU_LAZY +static bool enable_rcu_lazy __read_mostly = !IS_ENABLED(CONFIG_RCU_LAZY_DEFAULT_OFF); +module_param(enable_rcu_lazy, bool, 0444); + +/** + * call_rcu_hurry() - Queue RCU callback for invocation after grace period, and + * flush all lazy callbacks (including the new one) to the main ->cblist while + * doing so. + * + * @head: structure to be used for queueing the RCU updates. + * @func: actual callback function to be invoked after the grace period + * + * The callback function will be invoked some time after a full grace + * period elapses, in other words after all pre-existing RCU read-side + * critical sections have completed. + * + * Use this API instead of call_rcu() if you don't want the callback to be + * invoked after very long periods of time, which can happen on systems without + * memory pressure and on systems which are lightly loaded or mostly idle. + * This function will cause callbacks to be invoked sooner than later at the + * expense of extra power. Other than that, this function is identical to, and + * reuses call_rcu()'s logic. Refer to call_rcu() for more details about memory + * ordering and other functionality. + */ +void call_rcu_hurry(struct rcu_head *head, rcu_callback_t func) +{ + return __call_rcu_common(head, func, false); +} +EXPORT_SYMBOL_GPL(call_rcu_hurry); +#else +#define enable_rcu_lazy false +#endif + /** * call_rcu() - Queue an RCU callback for invocation after a grace period. + * By default the callbacks are 'lazy' and are kept hidden from the main + * ->cblist to prevent starting of grace periods too soon. + * If you desire grace periods to start very soon, use call_rcu_hurry(). + * * @head: structure to be used for queueing the RCU updates. * @func: actual callback function to be invoked after the grace period * @@ -2786,70 +2890,10 @@ static void check_cb_ovld(struct rcu_data *rdp) */ void call_rcu(struct rcu_head *head, rcu_callback_t func) { - static atomic_t doublefrees; - unsigned long flags; - struct rcu_data *rdp; - bool was_alldone; - - /* Misaligned rcu_head! */ - WARN_ON_ONCE((unsigned long)head & (sizeof(void *) - 1)); - - if (debug_rcu_head_queue(head)) { - /* - * Probable double call_rcu(), so leak the callback. - * Use rcu:rcu_callback trace event to find the previous - * time callback was passed to call_rcu(). - */ - if (atomic_inc_return(&doublefrees) < 4) { - pr_err("%s(): Double-freed CB %p->%pS()!!! ", __func__, head, head->func); - mem_dump_obj(head); - } - WRITE_ONCE(head->func, rcu_leak_callback); - return; - } - head->func = func; - head->next = NULL; - kasan_record_aux_stack_noalloc(head); - local_irq_save(flags); - rdp = this_cpu_ptr(&rcu_data); - - /* Add the callback to our list. */ - if (unlikely(!rcu_segcblist_is_enabled(&rdp->cblist))) { - // This can trigger due to call_rcu() from offline CPU: - WARN_ON_ONCE(rcu_scheduler_active != RCU_SCHEDULER_INACTIVE); - WARN_ON_ONCE(!rcu_is_watching()); - // Very early boot, before rcu_init(). Initialize if needed - // and then drop through to queue the callback. - if (rcu_segcblist_empty(&rdp->cblist)) - rcu_segcblist_init(&rdp->cblist); - } - - check_cb_ovld(rdp); - if (rcu_nocb_try_bypass(rdp, head, &was_alldone, flags)) - return; // Enqueued onto ->nocb_bypass, so just leave. - // If no-CBs CPU gets here, rcu_nocb_try_bypass() acquired ->nocb_lock. - rcu_segcblist_enqueue(&rdp->cblist, head); - if (__is_kvfree_rcu_offset((unsigned long)func)) - trace_rcu_kvfree_callback(rcu_state.name, head, - (unsigned long)func, - rcu_segcblist_n_cbs(&rdp->cblist)); - else - trace_rcu_callback(rcu_state.name, head, - rcu_segcblist_n_cbs(&rdp->cblist)); - - trace_rcu_segcb_stats(&rdp->cblist, TPS("SegCBQueued")); - - /* Go handle any RCU core processing required. */ - if (unlikely(rcu_rdp_is_offloaded(rdp))) { - __call_rcu_nocb_wake(rdp, was_alldone, flags); /* unlocks */ - } else { - __call_rcu_core(rdp, head, flags); - local_irq_restore(flags); - } + __call_rcu_common(head, func, enable_rcu_lazy); } EXPORT_SYMBOL_GPL(call_rcu); - /* Maximum number of jiffies to wait before draining a batch. */ #define KFREE_DRAIN_JIFFIES (5 * HZ) #define KFREE_N_BATCHES 2 @@ -3542,7 +3586,7 @@ void synchronize_rcu(void) if (rcu_gp_is_expedited()) synchronize_rcu_expedited(); else - wait_rcu_gp(call_rcu); + wait_rcu_gp(call_rcu_hurry); return; } @@ -3929,6 +3973,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) { unsigned long gseq = READ_ONCE(rcu_state.barrier_sequence); unsigned long lseq = READ_ONCE(rdp->barrier_seq_snap); + bool wake_nocb = false; + bool was_alldone = false; lockdep_assert_held(&rcu_state.barrier_lock); if (rcu_seq_state(lseq) || !rcu_seq_state(gseq) || rcu_seq_ctr(lseq) != rcu_seq_ctr(gseq)) @@ -3937,7 +3983,14 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) rdp->barrier_head.func = rcu_barrier_callback; debug_rcu_head_queue(&rdp->barrier_head); rcu_nocb_lock(rdp); - WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies)); + /* + * Flush bypass and wakeup rcuog if we add callbacks to an empty regular + * queue. This way we don't wait for bypass timer that can reach seconds + * if it's fully lazy. + */ + was_alldone = rcu_rdp_is_offloaded(rdp) && !rcu_segcblist_pend_cbs(&rdp->cblist); + WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies, false)); + wake_nocb = was_alldone && rcu_segcblist_pend_cbs(&rdp->cblist); if (rcu_segcblist_entrain(&rdp->cblist, &rdp->barrier_head)) { atomic_inc(&rcu_state.barrier_cpu_count); } else { @@ -3945,6 +3998,8 @@ static void rcu_barrier_entrain(struct rcu_data *rdp) rcu_barrier_trace(TPS("IRQNQ"), -1, rcu_state.barrier_sequence); } rcu_nocb_unlock(rdp); + if (wake_nocb) + wake_nocb_gp(rdp, false); smp_store_release(&rdp->barrier_seq_snap, gseq); } @@ -4369,7 +4424,7 @@ void rcutree_migrate_callbacks(int cpu) my_rdp = this_cpu_ptr(&rcu_data); my_rnp = my_rdp->mynode; rcu_nocb_lock(my_rdp); /* irqs already disabled. */ - WARN_ON_ONCE(!rcu_nocb_flush_bypass(my_rdp, NULL, jiffies)); + WARN_ON_ONCE(!rcu_nocb_flush_bypass(my_rdp, NULL, jiffies, false)); raw_spin_lock_rcu_node(my_rnp); /* irqs already disabled. */ /* Leverage recent GPs and set GP for new callbacks. */ needwake = rcu_advance_cbs(my_rnp, rdp) || @@ -4408,11 +4463,13 @@ static int rcu_pm_notify(struct notifier_block *self, switch (action) { case PM_HIBERNATION_PREPARE: case PM_SUSPEND_PREPARE: + rcu_async_hurry(); rcu_expedite_gp(); break; case PM_POST_HIBERNATION: case PM_POST_SUSPEND: rcu_unexpedite_gp(); + rcu_async_relax(); break; default: break; diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h index 7b702220d81c..c9fe64c71c2e 100644 --- a/kernel/rcu/tree.h +++ b/kernel/rcu/tree.h @@ -263,14 +263,16 @@ struct rcu_data { unsigned long last_fqs_resched; /* Time of last rcu_resched(). */ unsigned long last_sched_clock; /* Jiffies of last rcu_sched_clock_irq(). */ + long lazy_len; /* Length of buffered lazy callbacks. */ int cpu; }; /* Values for nocb_defer_wakeup field in struct rcu_data. */ #define RCU_NOCB_WAKE_NOT 0 #define RCU_NOCB_WAKE_BYPASS 1 -#define RCU_NOCB_WAKE 2 -#define RCU_NOCB_WAKE_FORCE 3 +#define RCU_NOCB_WAKE_LAZY 2 +#define RCU_NOCB_WAKE 3 +#define RCU_NOCB_WAKE_FORCE 4 #define RCU_JIFFIES_TILL_FORCE_QS (1 + (HZ > 250) + (HZ > 500)) /* For jiffies_till_first_fqs and */ @@ -443,10 +445,12 @@ static void zero_cpu_stall_ticks(struct rcu_data *rdp); static struct swait_queue_head *rcu_nocb_gp_get(struct rcu_node *rnp); static void rcu_nocb_gp_cleanup(struct swait_queue_head *sq); static void rcu_init_one_nocb(struct rcu_node *rnp); +static bool wake_nocb_gp(struct rcu_data *rdp, bool force); static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - unsigned long j); + unsigned long j, bool lazy); static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - bool *was_alldone, unsigned long flags); + bool *was_alldone, unsigned long flags, + bool lazy); static void __call_rcu_nocb_wake(struct rcu_data *rdp, bool was_empty, unsigned long flags); static int rcu_nocb_need_deferred_wakeup(struct rcu_data *rdp, int level); diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h index aa3ec3c3b9f7..b9637df7cda7 100644 --- a/kernel/rcu/tree_exp.h +++ b/kernel/rcu/tree_exp.h @@ -941,7 +941,7 @@ void synchronize_rcu_expedited(void) /* If expedited grace periods are prohibited, fall back to normal. */ if (rcu_gp_is_normal()) { - wait_rcu_gp(call_rcu); + wait_rcu_gp(call_rcu_hurry); return; } diff --git a/kernel/rcu/tree_nocb.h b/kernel/rcu/tree_nocb.h index 0a5f0ef41484..31eec9cb0095 100644 --- a/kernel/rcu/tree_nocb.h +++ b/kernel/rcu/tree_nocb.h @@ -256,6 +256,31 @@ static bool wake_nocb_gp(struct rcu_data *rdp, bool force) return __wake_nocb_gp(rdp_gp, rdp, force, flags); } +/* + * LAZY_FLUSH_JIFFIES decides the maximum amount of time that + * can elapse before lazy callbacks are flushed. Lazy callbacks + * could be flushed much earlier for a number of other reasons + * however, LAZY_FLUSH_JIFFIES will ensure no lazy callbacks are + * left unsubmitted to RCU after those many jiffies. + */ +#define LAZY_FLUSH_JIFFIES (10 * HZ) +static unsigned long jiffies_till_flush = LAZY_FLUSH_JIFFIES; + +#ifdef CONFIG_RCU_LAZY +// To be called only from test code. +void rcu_lazy_set_jiffies_till_flush(unsigned long jif) +{ + jiffies_till_flush = jif; +} +EXPORT_SYMBOL(rcu_lazy_set_jiffies_till_flush); + +unsigned long rcu_lazy_get_jiffies_till_flush(void) +{ + return jiffies_till_flush; +} +EXPORT_SYMBOL(rcu_lazy_get_jiffies_till_flush); +#endif + /* * Arrange to wake the GP kthread for this NOCB group at some future * time when it is safe to do so. @@ -269,10 +294,14 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype, raw_spin_lock_irqsave(&rdp_gp->nocb_gp_lock, flags); /* - * Bypass wakeup overrides previous deferments. In case - * of callback storm, no need to wake up too early. + * Bypass wakeup overrides previous deferments. In case of + * callback storms, no need to wake up too early. */ - if (waketype == RCU_NOCB_WAKE_BYPASS) { + if (waketype == RCU_NOCB_WAKE_LAZY && + rdp->nocb_defer_wakeup == RCU_NOCB_WAKE_NOT) { + mod_timer(&rdp_gp->nocb_timer, jiffies + jiffies_till_flush); + WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); + } else if (waketype == RCU_NOCB_WAKE_BYPASS) { mod_timer(&rdp_gp->nocb_timer, jiffies + 2); WRITE_ONCE(rdp_gp->nocb_defer_wakeup, waketype); } else { @@ -293,12 +322,16 @@ static void wake_nocb_gp_defer(struct rcu_data *rdp, int waketype, * proves to be initially empty, just return false because the no-CB GP * kthread may need to be awakened in this case. * + * Return true if there was something to be flushed and it succeeded, otherwise + * false. + * * Note that this function always returns true if rhp is NULL. */ -static bool rcu_nocb_do_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - unsigned long j) +static bool rcu_nocb_do_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp_in, + unsigned long j, bool lazy) { struct rcu_cblist rcl; + struct rcu_head *rhp = rhp_in; WARN_ON_ONCE(!rcu_rdp_is_offloaded(rdp)); rcu_lockdep_assert_cblist_protected(rdp); @@ -310,7 +343,20 @@ static bool rcu_nocb_do_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, /* Note: ->cblist.len already accounts for ->nocb_bypass contents. */ if (rhp) rcu_segcblist_inc_len(&rdp->cblist); /* Must precede enqueue. */ + + /* + * If the new CB requested was a lazy one, queue it onto the main + * ->cblist so that we can take advantage of the grace-period that will + * happen regardless. But queue it onto the bypass list first so that + * the lazy CB is ordered with the existing CBs in the bypass list. + */ + if (lazy && rhp) { + rcu_cblist_enqueue(&rdp->nocb_bypass, rhp); + rhp = NULL; + } rcu_cblist_flush_enqueue(&rcl, &rdp->nocb_bypass, rhp); + WRITE_ONCE(rdp->lazy_len, 0); + rcu_segcblist_insert_pend_cbs(&rdp->cblist, &rcl); WRITE_ONCE(rdp->nocb_bypass_first, j); rcu_nocb_bypass_unlock(rdp); @@ -326,13 +372,13 @@ static bool rcu_nocb_do_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, * Note that this function always returns true if rhp is NULL. */ static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - unsigned long j) + unsigned long j, bool lazy) { if (!rcu_rdp_is_offloaded(rdp)) return true; rcu_lockdep_assert_cblist_protected(rdp); rcu_nocb_bypass_lock(rdp); - return rcu_nocb_do_flush_bypass(rdp, rhp, j); + return rcu_nocb_do_flush_bypass(rdp, rhp, j, lazy); } /* @@ -345,7 +391,7 @@ static void rcu_nocb_try_flush_bypass(struct rcu_data *rdp, unsigned long j) if (!rcu_rdp_is_offloaded(rdp) || !rcu_nocb_bypass_trylock(rdp)) return; - WARN_ON_ONCE(!rcu_nocb_do_flush_bypass(rdp, NULL, j)); + WARN_ON_ONCE(!rcu_nocb_do_flush_bypass(rdp, NULL, j, false)); } /* @@ -367,12 +413,14 @@ static void rcu_nocb_try_flush_bypass(struct rcu_data *rdp, unsigned long j) * there is only one CPU in operation. */ static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - bool *was_alldone, unsigned long flags) + bool *was_alldone, unsigned long flags, + bool lazy) { unsigned long c; unsigned long cur_gp_seq; unsigned long j = jiffies; long ncbs = rcu_cblist_n_cbs(&rdp->nocb_bypass); + bool bypass_is_lazy = (ncbs == READ_ONCE(rdp->lazy_len)); lockdep_assert_irqs_disabled(); @@ -417,24 +465,29 @@ static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, // If there hasn't yet been all that many ->cblist enqueues // this jiffy, tell the caller to enqueue onto ->cblist. But flush // ->nocb_bypass first. - if (rdp->nocb_nobypass_count < nocb_nobypass_lim_per_jiffy) { + // Lazy CBs throttle this back and do immediate bypass queuing. + if (rdp->nocb_nobypass_count < nocb_nobypass_lim_per_jiffy && !lazy) { rcu_nocb_lock(rdp); *was_alldone = !rcu_segcblist_pend_cbs(&rdp->cblist); if (*was_alldone) trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, TPS("FirstQ")); - WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, j)); + + WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, j, false)); WARN_ON_ONCE(rcu_cblist_n_cbs(&rdp->nocb_bypass)); return false; // Caller must enqueue the callback. } // If ->nocb_bypass has been used too long or is too full, // flush ->nocb_bypass to ->cblist. - if ((ncbs && j != READ_ONCE(rdp->nocb_bypass_first)) || + if ((ncbs && !bypass_is_lazy && j != READ_ONCE(rdp->nocb_bypass_first)) || + (ncbs && bypass_is_lazy && + (time_after(j, READ_ONCE(rdp->nocb_bypass_first) + jiffies_till_flush))) || ncbs >= qhimark) { rcu_nocb_lock(rdp); - if (!rcu_nocb_flush_bypass(rdp, rhp, j)) { - *was_alldone = !rcu_segcblist_pend_cbs(&rdp->cblist); + *was_alldone = !rcu_segcblist_pend_cbs(&rdp->cblist); + + if (!rcu_nocb_flush_bypass(rdp, rhp, j, lazy)) { if (*was_alldone) trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, TPS("FirstQ")); @@ -447,7 +500,12 @@ static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, rcu_advance_cbs_nowake(rdp->mynode, rdp); rdp->nocb_gp_adv_time = j; } - rcu_nocb_unlock_irqrestore(rdp, flags); + + // The flush succeeded and we moved CBs into the regular list. + // Don't wait for the wake up timer as it may be too far ahead. + // Wake up the GP thread now instead, if the cblist was empty. + __call_rcu_nocb_wake(rdp, *was_alldone, flags); + return true; // Callback already enqueued. } @@ -457,13 +515,24 @@ static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, ncbs = rcu_cblist_n_cbs(&rdp->nocb_bypass); rcu_segcblist_inc_len(&rdp->cblist); /* Must precede enqueue. */ rcu_cblist_enqueue(&rdp->nocb_bypass, rhp); + + if (lazy) + WRITE_ONCE(rdp->lazy_len, rdp->lazy_len + 1); + if (!ncbs) { WRITE_ONCE(rdp->nocb_bypass_first, j); trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, TPS("FirstBQ")); } rcu_nocb_bypass_unlock(rdp); smp_mb(); /* Order enqueue before wake. */ - if (ncbs) { + // A wake up of the grace period kthread or timer adjustment + // needs to be done only if: + // 1. Bypass list was fully empty before (this is the first + // bypass list entry), or: + // 2. Both of these conditions are met: + // a. The bypass list previously had only lazy CBs, and: + // b. The new CB is non-lazy. + if (ncbs && (!bypass_is_lazy || lazy)) { local_irq_restore(flags); } else { // No-CBs GP kthread might be indefinitely asleep, if so, wake. @@ -491,8 +560,10 @@ static void __call_rcu_nocb_wake(struct rcu_data *rdp, bool was_alldone, unsigned long flags) __releases(rdp->nocb_lock) { + long bypass_len; unsigned long cur_gp_seq; unsigned long j; + long lazy_len; long len; struct task_struct *t; @@ -506,9 +577,16 @@ static void __call_rcu_nocb_wake(struct rcu_data *rdp, bool was_alldone, } // Need to actually to a wakeup. len = rcu_segcblist_n_cbs(&rdp->cblist); + bypass_len = rcu_cblist_n_cbs(&rdp->nocb_bypass); + lazy_len = READ_ONCE(rdp->lazy_len); if (was_alldone) { rdp->qlen_last_fqs_check = len; - if (!irqs_disabled_flags(flags)) { + // Only lazy CBs in bypass list + if (lazy_len && bypass_len == lazy_len) { + rcu_nocb_unlock_irqrestore(rdp, flags); + wake_nocb_gp_defer(rdp, RCU_NOCB_WAKE_LAZY, + TPS("WakeLazy")); + } else if (!irqs_disabled_flags(flags)) { /* ... if queue was empty ... */ rcu_nocb_unlock_irqrestore(rdp, flags); wake_nocb_gp(rdp, false); @@ -599,12 +677,12 @@ static void nocb_gp_sleep(struct rcu_data *my_rdp, int cpu) static void nocb_gp_wait(struct rcu_data *my_rdp) { bool bypass = false; - long bypass_ncbs; int __maybe_unused cpu = my_rdp->cpu; unsigned long cur_gp_seq; unsigned long flags; bool gotcbs = false; unsigned long j = jiffies; + bool lazy = false; bool needwait_gp = false; // This prevents actual uninitialized use. bool needwake; bool needwake_gp; @@ -634,24 +712,43 @@ static void nocb_gp_wait(struct rcu_data *my_rdp) * won't be ignored for long. */ list_for_each_entry(rdp, &my_rdp->nocb_head_rdp, nocb_entry_rdp) { + long bypass_ncbs; + bool flush_bypass = false; + long lazy_ncbs; + trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, TPS("Check")); rcu_nocb_lock_irqsave(rdp, flags); lockdep_assert_held(&rdp->nocb_lock); bypass_ncbs = rcu_cblist_n_cbs(&rdp->nocb_bypass); - if (bypass_ncbs && + lazy_ncbs = READ_ONCE(rdp->lazy_len); + + if (bypass_ncbs && (lazy_ncbs == bypass_ncbs) && + (time_after(j, READ_ONCE(rdp->nocb_bypass_first) + jiffies_till_flush) || + bypass_ncbs > 2 * qhimark)) { + flush_bypass = true; + } else if (bypass_ncbs && (lazy_ncbs != bypass_ncbs) && (time_after(j, READ_ONCE(rdp->nocb_bypass_first) + 1) || bypass_ncbs > 2 * qhimark)) { - // Bypass full or old, so flush it. - (void)rcu_nocb_try_flush_bypass(rdp, j); - bypass_ncbs = rcu_cblist_n_cbs(&rdp->nocb_bypass); + flush_bypass = true; } else if (!bypass_ncbs && rcu_segcblist_empty(&rdp->cblist)) { rcu_nocb_unlock_irqrestore(rdp, flags); continue; /* No callbacks here, try next. */ } + + if (flush_bypass) { + // Bypass full or old, so flush it. + (void)rcu_nocb_try_flush_bypass(rdp, j); + bypass_ncbs = rcu_cblist_n_cbs(&rdp->nocb_bypass); + lazy_ncbs = READ_ONCE(rdp->lazy_len); + } + if (bypass_ncbs) { trace_rcu_nocb_wake(rcu_state.name, rdp->cpu, - TPS("Bypass")); - bypass = true; + bypass_ncbs == lazy_ncbs ? TPS("Lazy") : TPS("Bypass")); + if (bypass_ncbs == lazy_ncbs) + lazy = true; + else + bypass = true; } rnp = rdp->mynode; @@ -699,12 +796,20 @@ static void nocb_gp_wait(struct rcu_data *my_rdp) my_rdp->nocb_gp_gp = needwait_gp; my_rdp->nocb_gp_seq = needwait_gp ? wait_gp_seq : 0; - if (bypass && !rcu_nocb_poll) { - // At least one child with non-empty ->nocb_bypass, so set - // timer in order to avoid stranding its callbacks. - wake_nocb_gp_defer(my_rdp, RCU_NOCB_WAKE_BYPASS, - TPS("WakeBypassIsDeferred")); + // At least one child with non-empty ->nocb_bypass, so set + // timer in order to avoid stranding its callbacks. + if (!rcu_nocb_poll) { + // If bypass list only has lazy CBs. Add a deferred lazy wake up. + if (lazy && !bypass) { + wake_nocb_gp_defer(my_rdp, RCU_NOCB_WAKE_LAZY, + TPS("WakeLazyIsDeferred")); + // Otherwise add a deferred bypass wake up. + } else if (bypass) { + wake_nocb_gp_defer(my_rdp, RCU_NOCB_WAKE_BYPASS, + TPS("WakeBypassIsDeferred")); + } } + if (rcu_nocb_poll) { /* Polling, so trace if first poll in the series. */ if (gotcbs) @@ -1030,7 +1135,7 @@ static long rcu_nocb_rdp_deoffload(void *arg) * return false, which means that future calls to rcu_nocb_try_bypass() * will refuse to put anything into the bypass. */ - WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies)); + WARN_ON_ONCE(!rcu_nocb_flush_bypass(rdp, NULL, jiffies, false)); /* * Start with invoking rcu_core() early. This way if the current thread * happens to preempt an ongoing call to rcu_core() in the middle, @@ -1207,6 +1312,55 @@ int rcu_nocb_cpu_offload(int cpu) } EXPORT_SYMBOL_GPL(rcu_nocb_cpu_offload); +static unsigned long +lazy_rcu_shrink_count(struct shrinker *shrink, struct shrink_control *sc) +{ + int cpu; + unsigned long count = 0; + + /* Snapshot count of all CPUs */ + for_each_possible_cpu(cpu) { + struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu); + + count += READ_ONCE(rdp->lazy_len); + } + + return count ? count : SHRINK_EMPTY; +} + +static unsigned long +lazy_rcu_shrink_scan(struct shrinker *shrink, struct shrink_control *sc) +{ + int cpu; + unsigned long flags; + unsigned long count = 0; + + /* Snapshot count of all CPUs */ + for_each_possible_cpu(cpu) { + struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu); + int _count = READ_ONCE(rdp->lazy_len); + + if (_count == 0) + continue; + rcu_nocb_lock_irqsave(rdp, flags); + WRITE_ONCE(rdp->lazy_len, 0); + rcu_nocb_unlock_irqrestore(rdp, flags); + wake_nocb_gp(rdp, false); + sc->nr_to_scan -= _count; + count += _count; + if (sc->nr_to_scan <= 0) + break; + } + return count ? count : SHRINK_STOP; +} + +static struct shrinker lazy_rcu_shrinker = { + .count_objects = lazy_rcu_shrink_count, + .scan_objects = lazy_rcu_shrink_scan, + .batch = 0, + .seeks = DEFAULT_SEEKS, +}; + void __init rcu_init_nohz(void) { int cpu; @@ -1249,6 +1403,9 @@ void __init rcu_init_nohz(void) if (offload_all) cpumask_setall(rcu_nocb_mask); + if (register_shrinker(&lazy_rcu_shrinker, "rcu-lazy")) + pr_err("Failed to register lazy_rcu shrinker!\n"); + if (!cpumask_subset(rcu_nocb_mask, cpu_possible_mask)) { pr_info("\tNote: kernel parameter 'rcu_nocbs=', 'nohz_full', or 'isolcpus=' contains nonexistent CPUs.\n"); cpumask_and(rcu_nocb_mask, cpu_possible_mask, @@ -1284,6 +1441,7 @@ static void __init rcu_boot_init_nocb_percpu_data(struct rcu_data *rdp) raw_spin_lock_init(&rdp->nocb_gp_lock); timer_setup(&rdp->nocb_timer, do_nocb_deferred_wakeup_timer, 0); rcu_cblist_init(&rdp->nocb_bypass); + WRITE_ONCE(rdp->lazy_len, 0); mutex_init(&rdp->nocb_gp_kthread_mutex); } @@ -1564,14 +1722,19 @@ static void rcu_init_one_nocb(struct rcu_node *rnp) { } +static bool wake_nocb_gp(struct rcu_data *rdp, bool force) +{ + return false; +} + static bool rcu_nocb_flush_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - unsigned long j) + unsigned long j, bool lazy) { return true; } static bool rcu_nocb_try_bypass(struct rcu_data *rdp, struct rcu_head *rhp, - bool *was_alldone, unsigned long flags) + bool *was_alldone, unsigned long flags, bool lazy) { return false; } diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c index 738842c4886b..0e2efb947d5d 100644 --- a/kernel/rcu/update.c +++ b/kernel/rcu/update.c @@ -43,6 +43,7 @@ #include #include #include +#include #define CREATE_TRACE_POINTS @@ -144,8 +145,45 @@ bool rcu_gp_is_normal(void) } EXPORT_SYMBOL_GPL(rcu_gp_is_normal); -static atomic_t rcu_expedited_nesting = ATOMIC_INIT(1); +static atomic_t rcu_async_hurry_nesting = ATOMIC_INIT(1); +/* + * Should call_rcu() callbacks be processed with urgency or are + * they OK being executed with arbitrary delays? + */ +bool rcu_async_should_hurry(void) +{ + return !IS_ENABLED(CONFIG_RCU_LAZY) || + atomic_read(&rcu_async_hurry_nesting); +} +EXPORT_SYMBOL_GPL(rcu_async_should_hurry); +/** + * rcu_async_hurry - Make future async RCU callbacks not lazy. + * + * After a call to this function, future calls to call_rcu() + * will be processed in a timely fashion. + */ +void rcu_async_hurry(void) +{ + if (IS_ENABLED(CONFIG_RCU_LAZY)) + atomic_inc(&rcu_async_hurry_nesting); +} +EXPORT_SYMBOL_GPL(rcu_async_hurry); + +/** + * rcu_async_relax - Make future async RCU callbacks lazy. + * + * After a call to this function, future calls to call_rcu() + * will be processed in a lazy fashion. + */ +void rcu_async_relax(void) +{ + if (IS_ENABLED(CONFIG_RCU_LAZY)) + atomic_dec(&rcu_async_hurry_nesting); +} +EXPORT_SYMBOL_GPL(rcu_async_relax); + +static atomic_t rcu_expedited_nesting = ATOMIC_INIT(1); /* * Should normal grace-period primitives be expedited? Intended for * use within RCU. Note that this function takes the rcu_expedited @@ -187,19 +225,90 @@ void rcu_unexpedite_gp(void) } EXPORT_SYMBOL_GPL(rcu_unexpedite_gp); +/* + * Minimum time in milliseconds from the start boot until RCU can consider + * in-kernel boot as completed. This can also be tuned at runtime to end the + * boot earlier, by userspace init code writing the time in milliseconds (even + * 0) to: /sys/module/rcupdate/parameters/rcu_boot_end_delay. The sysfs node + * can also be used to extend the delay to be larger than the default, assuming + * the marking of boot complete has not yet occurred. + */ +static int rcu_boot_end_delay = CONFIG_RCU_BOOT_END_DELAY; + static bool rcu_boot_ended __read_mostly; +static bool rcu_boot_end_called __read_mostly; +static DEFINE_MUTEX(rcu_boot_end_lock); /* - * Inform RCU of the end of the in-kernel boot sequence. + * Inform RCU of the end of the in-kernel boot sequence. The boot sequence will + * not be marked ended until at least rcu_boot_end_delay milliseconds have passed. */ -void rcu_end_inkernel_boot(void) +void rcu_end_inkernel_boot(void); +static void rcu_boot_end_work_fn(struct work_struct *work) { + rcu_end_inkernel_boot(); +} +static DECLARE_DELAYED_WORK(rcu_boot_end_work, rcu_boot_end_work_fn); + +/* Must be called with rcu_boot_end_lock held. */ +static void rcu_end_inkernel_boot_locked(void) +{ + rcu_boot_end_called = true; + + if (rcu_boot_ended) + return; + + if (rcu_boot_end_delay) { + u64 boot_ms = div_u64(ktime_get_boot_fast_ns(), 1000000UL); + + if (boot_ms < rcu_boot_end_delay) { + schedule_delayed_work(&rcu_boot_end_work, + msecs_to_jiffies(rcu_boot_end_delay - boot_ms)); + return; + } + } + + cancel_delayed_work(&rcu_boot_end_work); rcu_unexpedite_gp(); + rcu_async_relax(); if (rcu_normal_after_boot) WRITE_ONCE(rcu_normal, 1); rcu_boot_ended = true; } +void rcu_end_inkernel_boot(void) +{ + mutex_lock(&rcu_boot_end_lock); + rcu_end_inkernel_boot_locked(); + mutex_unlock(&rcu_boot_end_lock); +} + +static int param_set_rcu_boot_end(const char *val, const struct kernel_param *kp) +{ + uint end_ms; + int ret = kstrtouint(val, 0, &end_ms); + + if (ret) + return ret; + /* + * rcu_end_inkernel_boot() should be called at least once during init + * before we can allow param changes to end the boot. + */ + mutex_lock(&rcu_boot_end_lock); + rcu_boot_end_delay = end_ms; + if (!rcu_boot_ended && rcu_boot_end_called) { + rcu_end_inkernel_boot_locked(); + } + mutex_unlock(&rcu_boot_end_lock); + return ret; +} + +static const struct kernel_param_ops rcu_boot_end_ops = { + .set = param_set_rcu_boot_end, + .get = param_get_uint, +}; +module_param_cb(rcu_boot_end_delay, &rcu_boot_end_ops, &rcu_boot_end_delay, 0644); + /* * Let rcutorture know when it is OK to turn it up to eleven. */ diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index f0d68a636da1..a1456fd7ced6 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4574,7 +4574,7 @@ static inline int task_fits_cpu(struct task_struct *p, int cpu) return (util_fits_cpu(util, uclamp_min, uclamp_max, cpu) > 0); } -static inline void update_misfit_status(struct task_struct *p, struct rq *rq) +inline void update_misfit_status(struct task_struct *p, struct rq *rq) { bool need_update = true; @@ -4598,6 +4598,7 @@ static inline void update_misfit_status(struct task_struct *p, struct rq *rq) */ rq->misfit_task_load = max_t(unsigned long, task_h_load(p), 1); } +EXPORT_SYMBOL_GPL(update_misfit_status); #else /* CONFIG_SMP */ @@ -4947,7 +4948,13 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr) s64 delta; bool skip_preempt = false; - ideal_runtime = sched_slice(cfs_rq, curr); + /* + * When many tasks blow up the sched_period; it is possible that + * sched_slice() reports unusually large results (when many tasks are + * very light for example). Therefore impose a maximum. + */ + ideal_runtime = min_t(u64, sched_slice(cfs_rq, curr), sysctl_sched_latency); + delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime; trace_android_rvh_check_preempt_tick(current, &ideal_runtime, &skip_preempt, delta_exec, cfs_rq, curr, sysctl_sched_min_granularity); diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index 0c9c1c545926..55be195660a9 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -1410,27 +1410,19 @@ static int psi_cpu_show(struct seq_file *m, void *v) return psi_show(m, &psi_system, PSI_CPU); } -static int psi_open(struct file *file, int (*psi_show)(struct seq_file *, void *)) -{ - if (file->f_mode & FMODE_WRITE && !capable(CAP_SYS_RESOURCE)) - return -EPERM; - - return single_open(file, psi_show, NULL); -} - static int psi_io_open(struct inode *inode, struct file *file) { - return psi_open(file, psi_io_show); + return single_open(file, psi_io_show, NULL); } static int psi_memory_open(struct inode *inode, struct file *file) { - return psi_open(file, psi_memory_show); + return single_open(file, psi_memory_show, NULL); } static int psi_cpu_open(struct inode *inode, struct file *file) { - return psi_open(file, psi_cpu_show); + return single_open(file, psi_cpu_show, NULL); } static ssize_t psi_write(struct file *file, const char __user *user_buf, @@ -1544,7 +1536,7 @@ static int psi_irq_show(struct seq_file *m, void *v) static int psi_irq_open(struct inode *inode, struct file *file) { - return psi_open(file, psi_irq_show); + return single_open(file, psi_irq_show, NULL); } static ssize_t psi_irq_write(struct file *file, const char __user *user_buf, diff --git a/kernel/workqueue.c b/kernel/workqueue.c index cbba69c03b3d..98ce3d2b1eb5 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -1781,7 +1781,7 @@ bool queue_rcu_work(struct workqueue_struct *wq, struct rcu_work *rwork) if (!test_and_set_bit(WORK_STRUCT_PENDING_BIT, work_data_bits(work))) { rwork->wq = wq; - call_rcu(&rwork->rcu, rcu_work_rcufn); + call_rcu_hurry(&rwork->rcu, rcu_work_rcufn); return true; } diff --git a/lib/percpu-refcount.c b/lib/percpu-refcount.c index e5c5315da274..668f6aa6a75d 100644 --- a/lib/percpu-refcount.c +++ b/lib/percpu-refcount.c @@ -230,7 +230,8 @@ static void __percpu_ref_switch_to_atomic(struct percpu_ref *ref, percpu_ref_noop_confirm_switch; percpu_ref_get(ref); /* put after confirmation */ - call_rcu(&ref->data->rcu, percpu_ref_switch_to_atomic_rcu); + call_rcu_hurry(&ref->data->rcu, + percpu_ref_switch_to_atomic_rcu); } static void __percpu_ref_switch_to_percpu(struct percpu_ref *ref) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 1127aba1752b..180f75846935 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -5401,7 +5401,7 @@ static int mem_cgroup_css_online(struct cgroup_subsys_state *css) refcount_set(&memcg->id.ref, 1); css_get(css); - if (unlikely(mem_cgroup_is_root(memcg))) + if (unlikely(mem_cgroup_is_root(memcg)) && !mem_cgroup_disabled()) queue_delayed_work(system_unbound_wq, &stats_flush_dwork, 2UL*HZ); lru_gen_online_memcg(memcg); diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 76a1954071e1..6bb096462170 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include "internal.h" @@ -771,6 +772,8 @@ static void __mark_oom_victim(struct task_struct *tsk) */ static void mark_oom_victim(struct task_struct *tsk) { + const struct cred *cred; + WARN_ON(oom_killer_disabled); /* OOM killer might race with memcg OOM */ if (test_and_set_tsk_thread_flag(tsk, TIF_MEMDIE)) @@ -787,7 +790,9 @@ static void mark_oom_victim(struct task_struct *tsk) */ __thaw_task(tsk); atomic_inc(&oom_victims); - trace_mark_victim(tsk->pid); + cred = get_task_cred(tsk); + trace_mark_victim(tsk, cred->uid.val); + put_cred(cred); } /** diff --git a/net/core/dst.c b/net/core/dst.c index bc9c9be4e080..a4e738d321ba 100644 --- a/net/core/dst.c +++ b/net/core/dst.c @@ -174,7 +174,7 @@ void dst_release(struct dst_entry *dst) net_warn_ratelimited("%s: dst:%p refcnt:%d\n", __func__, dst, newrefcnt); if (!newrefcnt) - call_rcu(&dst->rcu_head, dst_destroy_rcu); + call_rcu_hurry(&dst->rcu_head, dst_destroy_rcu); } } EXPORT_SYMBOL(dst_release); diff --git a/tools/testing/selftests/filesystems/fuse/fuse_test.c b/tools/testing/selftests/filesystems/fuse/fuse_test.c index ad24ed48853e..c31f6fdcf61d 100644 --- a/tools/testing/selftests/filesystems/fuse/fuse_test.c +++ b/tools/testing/selftests/filesystems/fuse/fuse_test.c @@ -255,7 +255,7 @@ static int bpf_test_partial(const char *mount_dir) TEST(src_fd = open(ft_src, O_DIRECTORY | O_RDONLY | O_CLOEXEC), src_fd != -1); TESTEQUAL(create_file(src_fd, s(test_name), 1, 2), 0); - TESTEQUAL(install_elf_bpf("test_bpf.bpf", "test_trace", + TESTEQUAL(install_elf_bpf("test_bpf.bpf", "test_partial", &bpf_fd, NULL, NULL), 0); TESTEQUAL(mount_fuse(mount_dir, bpf_fd, src_fd, &fuse_dev), 0); @@ -363,7 +363,7 @@ static int bpf_test_readdir(const char *mount_dir) src_fd != -1); TESTEQUAL(create_file(src_fd, s(names[0]), 1, 2), 0); TESTEQUAL(create_file(src_fd, s(names[1]), 1, 2), 0); - TESTEQUAL(install_elf_bpf("test_bpf.bpf", "test_trace", + TESTEQUAL(install_elf_bpf("test_bpf.bpf", "test_partial", &bpf_fd, NULL, NULL), 0); TESTEQUAL(mount_fuse(mount_dir, bpf_fd, src_fd, &fuse_dev), 0); @@ -1490,6 +1490,8 @@ out: static int bpf_test_lseek(const char *mount_dir) { const char *file = "real"; + const char *sparse_file = "sparse"; + const off_t sparse_length = 0x100000000u; const char *test_data = "data"; int result = TEST_FAILURE; int src_fd = -1; @@ -1504,6 +1506,12 @@ static int bpf_test_lseek(const char *mount_dir) TESTEQUAL(write(fd, test_data, strlen(test_data)), strlen(test_data)); TESTSYSCALL(close(fd)); fd = -1; + TEST(fd = openat(src_fd, sparse_file, O_CREAT | O_RDWR | O_CLOEXEC, + 0777), + fd != -1); + TESTSYSCALL(ftruncate(fd, sparse_length)); + TESTSYSCALL(close(fd)); + fd = -1; TESTEQUAL(install_elf_bpf("test_bpf.bpf", "test_trace", &bpf_fd, NULL, NULL), 0); TESTEQUAL(mount_fuse(mount_dir, bpf_fd, src_fd, &fuse_dev), 0); @@ -1518,6 +1526,18 @@ static int bpf_test_lseek(const char *mount_dir) TESTEQUAL(bpf_test_trace("lseek"), 0); TESTEQUAL(lseek(fd, 1, SEEK_DATA), 1); TESTEQUAL(bpf_test_trace("lseek"), 0); + TESTSYSCALL(close(fd)); + fd = -1; + + TEST(fd = s_open(s_path(s(mount_dir), s(sparse_file)), + O_RDONLY | O_CLOEXEC), + fd != -1); + TESTEQUAL(lseek(fd, -256, SEEK_END), sparse_length - 256); + TESTEQUAL(lseek(fd, 0, SEEK_CUR), sparse_length - 256); + + TESTSYSCALL(close(fd)); + fd = -1; + result = TEST_SUCCESS; out: close(fd); diff --git a/tools/testing/selftests/filesystems/fuse/test_bpf.c b/tools/testing/selftests/filesystems/fuse/test_bpf.c index a014b915c059..be5f59ad8343 100644 --- a/tools/testing/selftests/filesystems/fuse/test_bpf.c +++ b/tools/testing/selftests/filesystems/fuse/test_bpf.c @@ -28,9 +28,9 @@ int readdir_test(struct fuse_bpf_args *fa) } } -SEC("test_trace") +SEC("test_partial") /* return FUSE_BPF_BACKING to use backing fs, 0 to pass to usermode */ -int trace_test(struct fuse_bpf_args *fa) +int partial_test(struct fuse_bpf_args *fa) { switch (fa->opcode) { case FUSE_LOOKUP | FUSE_PREFILTER: { @@ -329,6 +329,195 @@ int trace_test(struct fuse_bpf_args *fa) } } +SEC("test_trace") +/* return FUSE_BPF_BACKING to use backing fs, 0 to pass to usermode */ +int trace_test(struct fuse_bpf_args *fa) +{ + switch (fa->opcode) { + case FUSE_LOOKUP | FUSE_PREFILTER: { + /* real and partial use backing file */ + const char *name = fa->in_args[0].value; + + bpf_printk("lookup %s", name); + return FUSE_BPF_BACKING; + } + + case FUSE_ACCESS | FUSE_PREFILTER: { + bpf_printk("Access: %d", fa->nodeid); + return FUSE_BPF_BACKING; + } + + case FUSE_CREATE | FUSE_PREFILTER: + bpf_printk("Create: %d", fa->nodeid); + return FUSE_BPF_BACKING; + + case FUSE_MKNOD | FUSE_PREFILTER: { + const struct fuse_mknod_in *fmi = fa->in_args[0].value; + const char *name = fa->in_args[1].value; + + bpf_printk("mknod %s %x %x", name, fmi->rdev | fmi->mode, fmi->umask); + return FUSE_BPF_BACKING; + } + + case FUSE_MKDIR | FUSE_PREFILTER: { + const struct fuse_mkdir_in *fmi = fa->in_args[0].value; + const char *name = fa->in_args[1].value; + + bpf_printk("mkdir %s %x %x", name, fmi->mode, fmi->umask); + return FUSE_BPF_BACKING; + } + + case FUSE_RMDIR | FUSE_PREFILTER: { + const char *name = fa->in_args[0].value; + + bpf_printk("rmdir %s", name); + return FUSE_BPF_BACKING; + } + + case FUSE_RENAME | FUSE_PREFILTER: { + const char *oldname = fa->in_args[1].value; + const char *newname = fa->in_args[2].value; + + bpf_printk("rename from %s", oldname); + bpf_printk("rename to %s", newname); + return FUSE_BPF_BACKING; + } + + case FUSE_RENAME2 | FUSE_PREFILTER: { + const struct fuse_rename2_in *fri = fa->in_args[0].value; + uint32_t flags = fri->flags; + const char *oldname = fa->in_args[1].value; + const char *newname = fa->in_args[2].value; + + bpf_printk("rename(%x) from %s", flags, oldname); + bpf_printk("rename to %s", newname); + return FUSE_BPF_BACKING; + } + + case FUSE_UNLINK | FUSE_PREFILTER: { + const char *name = fa->in_args[0].value; + + bpf_printk("unlink %s", name); + return FUSE_BPF_BACKING; + } + + case FUSE_LINK | FUSE_PREFILTER: { + const struct fuse_link_in *fli = fa->in_args[0].value; + const char *link_name = fa->in_args[1].value; + + bpf_printk("link %d %s", fli->oldnodeid, link_name); + return FUSE_BPF_BACKING; + } + + case FUSE_SYMLINK | FUSE_PREFILTER: { + const char *link_name = fa->in_args[0].value; + const char *link_dest = fa->in_args[1].value; + + bpf_printk("symlink from %s", link_name); + bpf_printk("symlink to %s", link_dest); + return FUSE_BPF_BACKING; + } + + case FUSE_READLINK | FUSE_PREFILTER: { + const char *link_name = fa->in_args[0].value; + + bpf_printk("readlink from", link_name); + return FUSE_BPF_BACKING; + } + + case FUSE_OPEN | FUSE_PREFILTER: { + bpf_printk("open"); + return FUSE_BPF_BACKING; + } + + case FUSE_OPEN | FUSE_POSTFILTER: + bpf_printk("open postfilter"); + return FUSE_BPF_USER_FILTER; + + case FUSE_READ | FUSE_PREFILTER: { + const struct fuse_read_in *fri = fa->in_args[0].value; + + bpf_printk("read %llu", fri->offset); + return FUSE_BPF_BACKING; + } + + case FUSE_GETATTR | FUSE_PREFILTER: { + bpf_printk("getattr"); + return FUSE_BPF_BACKING; + } + + case FUSE_SETATTR | FUSE_PREFILTER: { + bpf_printk("setattr"); + return FUSE_BPF_BACKING; + } + + case FUSE_OPENDIR | FUSE_PREFILTER: { + bpf_printk("opendir"); + return FUSE_BPF_BACKING; + } + + case FUSE_READDIR | FUSE_PREFILTER: { + bpf_printk("readdir"); + return FUSE_BPF_BACKING; + } + + case FUSE_FLUSH | FUSE_PREFILTER: { + bpf_printk("Flush"); + return FUSE_BPF_BACKING; + } + + case FUSE_GETXATTR | FUSE_PREFILTER: { + const char *name = fa->in_args[1].value; + + bpf_printk("getxattr %s", name); + return FUSE_BPF_BACKING; + } + + case FUSE_LISTXATTR | FUSE_PREFILTER: { + const char *name = fa->in_args[1].value; + + bpf_printk("listxattr %s", name); + return FUSE_BPF_BACKING; + } + + case FUSE_SETXATTR | FUSE_PREFILTER: { + const char *name = fa->in_args[1].value; + unsigned int size = fa->in_args[2].size; + + bpf_printk("setxattr %s %u", name, size); + return FUSE_BPF_BACKING; + } + + case FUSE_REMOVEXATTR | FUSE_PREFILTER: { + const char *name = fa->in_args[0].value; + + bpf_printk("removexattr %s", name); + return FUSE_BPF_BACKING; + } + + case FUSE_CANONICAL_PATH | FUSE_PREFILTER: { + bpf_printk("canonical_path"); + return FUSE_BPF_BACKING; + } + + case FUSE_STATFS | FUSE_PREFILTER: { + bpf_printk("statfs"); + return FUSE_BPF_BACKING; + } + + case FUSE_LSEEK | FUSE_PREFILTER: { + const struct fuse_lseek_in *fli = fa->in_args[0].value; + + bpf_printk("lseek type:%d, offset:%lld", fli->whence, fli->offset); + return FUSE_BPF_BACKING; + } + + default: + bpf_printk("Unknown opcode %d", fa->opcode); + return FUSE_BPF_BACKING; + } +} + SEC("test_hidden") int trace_hidden(struct fuse_bpf_args *fa) {