diff --git a/BUILD.bazel b/BUILD.bazel index 5b7a4f7675a7..11eea4ff5940 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -120,6 +120,7 @@ filegroup( "android/abi_gki_aarch64_qcom", "android/abi_gki_aarch64_rockchip", "android/abi_gki_aarch64_sony", + "android/abi_gki_aarch64_sunxi", "android/abi_gki_aarch64_telechips", "android/abi_gki_aarch64_tuxera", "android/abi_gki_aarch64_type_visibility", @@ -144,8 +145,14 @@ define_common_kernels(target_configs = { "make_goals": _GKI_AARCH64_MAKE_GOALS, }, "kernel_aarch64_16k": { - "kmi_symbol_list_strict_mode": False, + "kmi_symbol_list_strict_mode": True, "module_implicit_outs": get_gki_modules_list("arm64"), + "kmi_symbol_list": "android/abi_gki_aarch64", + "rewrite_absolute_paths_in_config": True, + "kmi_symbol_list_add_only": True, + "additional_kmi_symbol_lists": [":aarch64_additional_kmi_symbol_lists"], + "protected_exports_list": "android/abi_gki_protected_exports_aarch64", + "protected_modules_list": "android/gki_aarch64_protected_modules", "make_goals": _GKI_AARCH64_MAKE_GOALS, }, "kernel_aarch64_debug": { diff --git a/Documentation/devicetree/bindings/arm/cpus.yaml b/Documentation/devicetree/bindings/arm/cpus.yaml index 5c13b73e4d57..e7847aa6ac01 100644 --- a/Documentation/devicetree/bindings/arm/cpus.yaml +++ b/Documentation/devicetree/bindings/arm/cpus.yaml @@ -296,7 +296,9 @@ properties: power-domains property. For PSCI based platforms, the name corresponding to the index of the PSCI - PM domain provider, must be "psci". + PM domain provider, must be "psci". For SCMI based platforms, the name + corresponding to the index of an SCMI performance domain provider, must be + "perf". qcom,saw: $ref: '/schemas/types.yaml#/definitions/phandle' diff --git a/Documentation/devicetree/bindings/firmware/arm,scmi.yaml b/Documentation/devicetree/bindings/firmware/arm,scmi.yaml index 1c0388da6721..39a4df2be5df 100644 --- a/Documentation/devicetree/bindings/firmware/arm,scmi.yaml +++ b/Documentation/devicetree/bindings/firmware/arm,scmi.yaml @@ -120,8 +120,15 @@ properties: '#clock-cells': const: 1 - required: - - '#clock-cells' + '#power-domain-cells': + const: 1 + + oneOf: + - required: + - '#clock-cells' + + - required: + - '#power-domain-cells' protocol@14: type: object diff --git a/Documentation/devicetree/bindings/power/power-domain.yaml b/Documentation/devicetree/bindings/power/power-domain.yaml index 889091b9814f..4a4af9405ec1 100644 --- a/Documentation/devicetree/bindings/power/power-domain.yaml +++ b/Documentation/devicetree/bindings/power/power-domain.yaml @@ -13,8 +13,9 @@ maintainers: description: |+ System on chip designs are often divided into multiple PM domains that can be - used for power gating of selected IP blocks for power saving by reduced leakage - current. + used for power gating of selected IP blocks for power saving by reduced + leakage current. Moreover, in some cases the similar PM domains may also be + capable of scaling performance for a group of IP blocks. This device tree binding can be used to bind PM domain consumer devices with their PM domains provided by PM domain providers. A PM domain provider can be @@ -25,7 +26,7 @@ description: |+ properties: $nodename: - pattern: "^(power-controller|power-domain)([@-].*)?$" + pattern: "^(power-controller|power-domain|performance-domain)([@-].*)?$" domain-idle-states: $ref: /schemas/types.yaml#/definitions/phandle-array @@ -47,11 +48,11 @@ properties: items: maxItems: 1 description: - Phandles to the OPP tables of power domains provided by a power domain - provider. If the provider provides a single power domain only or all - the power domains provided by the provider have identical OPP tables, - then this shall contain a single phandle. Refer to ../opp/opp-v2-base.yaml - for more information. + Phandles to the OPP tables of power domains that are capable of scaling + performance, provided by a power domain provider. If the provider provides + a single power domain only or all the power domains provided by the + provider have identical OPP tables, then this shall contain a single + phandle. Refer to ../opp/opp-v2-base.yaml for more information. "#power-domain-cells": description: diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 3d3a096761d5..de50c05259e2 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -4073,6 +4073,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x18b875ee } +pointer_reference { + id: 0x0cbee0ae + kind: POINTER + pointee_type_id: 0x18bb6425 +} pointer_reference { id: 0x0cbf60eb kind: POINTER @@ -4228,6 +4233,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x19d93429 } +pointer_reference { + id: 0x0ce7b4bf + kind: POINTER + pointee_type_id: 0x19de3463 +} pointer_reference { id: 0x0ce80834 kind: POINTER @@ -8763,6 +8773,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x6594ecd4 } +pointer_reference { + id: 0x13f5e4dd + kind: POINTER + pointee_type_id: 0x659775eb +} pointer_reference { id: 0x13f8b706 kind: POINTER @@ -8888,6 +8903,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x78ef929d } +pointer_reference { + id: 0x14b3256c + kind: POINTER + pointee_type_id: 0x788c732d +} pointer_reference { id: 0x14b9453b kind: POINTER @@ -12213,6 +12233,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xa7c362b0 } +pointer_reference { + id: 0x236b9af0 + kind: POINTER + pointee_type_id: 0xa7ee8d5f +} pointer_reference { id: 0x236d6a86 kind: POINTER @@ -15048,6 +15073,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x9bd4393a } +pointer_reference { + id: 0x2c6539ca + kind: POINTER + pointee_type_id: 0x9bd401b6 +} pointer_reference { id: 0x2c654423 kind: POINTER @@ -22258,6 +22288,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x94a6b558 } +pointer_reference { + id: 0x2fbb2eca + kind: POINTER + pointee_type_id: 0x94ac5db4 +} pointer_reference { id: 0x2fbbbd2f kind: POINTER @@ -22363,6 +22398,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0x955ad750 } +pointer_reference { + id: 0x2fc6b8c3 + kind: POINTER + pointee_type_id: 0x955a0593 +} pointer_reference { id: 0x2fc7c937 kind: POINTER @@ -22813,6 +22853,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xeb2226c1 } +pointer_reference { + id: 0x305baabf + kind: POINTER + pointee_type_id: 0xeb2e4c63 +} pointer_reference { id: 0x30600191 kind: POINTER @@ -27488,6 +27533,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xcd921577 } +pointer_reference { + id: 0x39f78276 + kind: POINTER + pointee_type_id: 0xcd9eef44 +} pointer_reference { id: 0x3a056647 kind: POINTER @@ -27538,6 +27588,11 @@ pointer_reference { kind: POINTER pointee_type_id: 0xc344f897 } +pointer_reference { + id: 0x3a41ae05 + kind: POINTER + pointee_type_id: 0xc3465e88 +} pointer_reference { id: 0x3a42306c kind: POINTER @@ -32488,6 +32543,11 @@ qualified { qualifier: CONST qualified_type_id: 0x7d5454d7 } +qualified { + id: 0xc3465e88 + qualifier: CONST + qualified_type_id: 0x7d5ecca9 +} qualified { id: 0xc35261da qualifier: CONST @@ -37432,6 +37492,11 @@ array { number_of_elements: 2 element_type_id: 0x18bd6530 } +array { + id: 0x6af4b9bd + number_of_elements: 2 + element_type_id: 0x1977e57b +} array { id: 0x6afc5176 number_of_elements: 252 @@ -37467,6 +37532,11 @@ array { number_of_elements: 7 element_type_id: 0x126add1c } +array { + id: 0x6c9889aa + number_of_elements: 2 + element_type_id: 0x00c72527 +} array { id: 0x6cb6e3da number_of_elements: 2 @@ -44768,6 +44838,11 @@ member { name: "adapter_id" type_id: 0x6720d32f } +member { + id: 0x2a19ba6f + name: "adc_channel_label" + type_id: 0x3e10b518 +} member { id: 0xc71d7293 name: "add" @@ -46630,6 +46705,12 @@ member { type_id: 0x6d7f5ff6 offset: 384 } +member { + id: 0xff0417d8 + name: "allow_utime" + type_id: 0xc93e017b + offset: 304 +} member { id: 0x4fbe8fdc name: "allow_zero_bytesused" @@ -53345,6 +53426,11 @@ member { name: "base" type_id: 0x3b0d08ae } +member { + id: 0x85e2db57 + name: "base" + type_id: 0x3835dcc0 +} member { id: 0x85e99dbc name: "base" @@ -54251,6 +54337,12 @@ member { type_id: 0x4585663f offset: 448 } +member { + id: 0xd6c15754 + name: "bhs" + type_id: 0x6af4b9bd + offset: 256 +} member { id: 0xc6e979bd name: "bi_bdev" @@ -59593,6 +59685,12 @@ member { type_id: 0x92233392 offset: 448 } +member { + id: 0x8fa8cc5b + name: "cancelling" + type_id: 0x6720d32f + offset: 448 +} member { id: 0xe33ac34a name: "cant_recv_wakeups" @@ -63841,6 +63939,12 @@ member { type_id: 0x07944f4b offset: 320 } +member { + id: 0xc8fe58de + name: "cluster_bits" + type_id: 0xc93e017b + offset: 16 +} member { id: 0x86cfd07d name: "cluster_id" @@ -63877,6 +63981,12 @@ member { type_id: 0x1c04d361 offset: 256 } +member { + id: 0x2f117fb7 + name: "cluster_size" + type_id: 0x4585663f + offset: 32 +} member { id: 0x38bc9c37 name: "cma_area" @@ -64533,6 +64643,12 @@ member { type_id: 0x6d472730 offset: 192 } +member { + id: 0xf088c5b6 + name: "codepage" + type_id: 0xc93e017b + offset: 96 +} member { id: 0x0fc968c6 name: "coder_state" @@ -66743,6 +66859,24 @@ member { type_id: 0x0258f96e offset: 192 } +member { + id: 0xf324e62b + name: "consumer_channel" + type_id: 0x3e10b518 + offset: 128 +} +member { + id: 0x167995aa + name: "consumer_data" + type_id: 0x18bd6530 + offset: 192 +} +member { + id: 0x697ffea5 + name: "consumer_dev_name" + type_id: 0x3e10b518 + offset: 64 +} member { id: 0x6bcdf1bd name: "consumer_head" @@ -67816,6 +67950,12 @@ member { name: "count" type_id: 0x92233392 } +member { + id: 0x65b77d65 + name: "count" + type_id: 0x92233392 + offset: 384 +} member { id: 0x65c3717b name: "count" @@ -72360,6 +72500,12 @@ member { type_id: 0xad4e3ade offset: 256 } +member { + id: 0x92018cb8 + name: "data_start" + type_id: 0x33756485 + offset: 320 +} member { id: 0xf93a991e name: "data_state" @@ -77867,6 +78013,24 @@ member { type_id: 0x0abe9fd1 offset: 152 } +member { + id: 0x6b95bcb0 + name: "dir_entries" + type_id: 0xc93e017b + offset: 256 +} +member { + id: 0x8b011dd4 + name: "dir_hash_lock" + type_id: 0xf313e71a + offset: 19520 +} +member { + id: 0x4d0d727b + name: "dir_hashtable" + type_id: 0x6e464516 + offset: 19584 +} member { id: 0xe029b7a1 name: "dir_in" @@ -77880,6 +78044,12 @@ member { type_id: 0x1253769c offset: 1824 } +member { + id: 0x6bb2defa + name: "dir_ops" + type_id: 0x391f15ea + offset: 2368 +} member { id: 0x648b9613 name: "dir_out" @@ -77887,6 +78057,24 @@ member { offset: 5 bitsize: 1 } +member { + id: 0x07a98e4b + name: "dir_per_block" + type_id: 0x6720d32f + offset: 2432 +} +member { + id: 0x0d4697e1 + name: "dir_per_block_bits" + type_id: 0x6720d32f + offset: 2464 +} +member { + id: 0x6c643354 + name: "dir_start" + type_id: 0x33756485 + offset: 192 +} member { id: 0x2ed2245a name: "dir_uid" @@ -78062,6 +78250,12 @@ member { type_id: 0x2efa73f5 offset: 128 } +member { + id: 0xb5d697eb + name: "dirty" + type_id: 0x4585663f + offset: 35968 +} member { id: 0x050fb49d name: "dirty_bitmap" @@ -78534,6 +78728,13 @@ member { type_id: 0xb34a0d30 offset: 64 } +member { + id: 0xf9f1b2e7 + name: "discard" + type_id: 0x4585663f + offset: 333 + bitsize: 1 +} member { id: 0x99be6e27 name: "discard_alignment" @@ -80011,6 +80212,20 @@ member { type_id: 0x39d30e9a offset: 128 } +member { + id: 0x64ddbf40 + name: "dos1xfloppy" + type_id: 0x4585663f + offset: 334 + bitsize: 1 +} +member { + id: 0xae8ac049 + name: "dotsOK" + type_id: 0x4585663f + offset: 323 + bitsize: 1 +} member { id: 0x4fbdcb60 name: "double_poll" @@ -84514,12 +84729,62 @@ member { type_id: 0x2e47a18c offset: 67456 } +member { + id: 0x1b055adc + name: "ent12_p" + type_id: 0x6c9889aa +} +member { + id: 0x24bc43b1 + name: "ent16_p" + type_id: 0x2c6539ca +} +member { + id: 0xe7fc7569 + name: "ent32_p" + type_id: 0x087aa58e +} +member { + id: 0x80405633 + name: "ent_blocknr" + type_id: 0x0cbee0ae +} +member { + id: 0xed8fc47b + name: "ent_bread" + type_id: 0x2fbb2eca + offset: 128 +} member { id: 0x9fb41354 name: "ent_enum" type_id: 0xd7f1f384 offset: 2048 } +member { + id: 0x34416368 + name: "ent_get" + type_id: 0x2fc6b8c3 + offset: 192 +} +member { + id: 0x03ea0cb4 + name: "ent_next" + type_id: 0x2fc6b8c3 + offset: 320 +} +member { + id: 0x095c4eef + name: "ent_put" + type_id: 0x0ce7b4bf + offset: 256 +} +member { + id: 0xa5dc376a + name: "ent_set_ptr" + type_id: 0x0ce7b4bf + offset: 64 +} member { id: 0x94f37550 name: "ent_size" @@ -84732,6 +84997,11 @@ member { name: "entry" type_id: 0x49a73111 } +member { + id: 0x4d3368ee + name: "entry" + type_id: 0x6720d32f +} member { id: 0x4d4645b4 name: "entry" @@ -85516,6 +85786,12 @@ member { type_id: 0xf1159c31 offset: 256 } +member { + id: 0x63099e78 + name: "errors" + type_id: 0x5d8155a5 + offset: 280 +} member { id: 0x636e25c6 name: "errors" @@ -88292,6 +88568,60 @@ member { type_id: 0x25e44921 offset: 1280 } +member { + id: 0x23e9d196 + name: "fat_bits" + type_id: 0x5d8155a5 + offset: 72 +} +member { + id: 0x98f2925e + name: "fat_inode" + type_id: 0x1b8590a8 + offset: 384 +} +member { + id: 0x98f29a96 + name: "fat_inode" + type_id: 0x1b8590a8 + offset: 2624 +} +member { + id: 0x91b784ab + name: "fat_length" + type_id: 0x33756485 + offset: 128 +} +member { + id: 0xb554d263 + name: "fat_lock" + type_id: 0xa7c362b0 + offset: 576 +} +member { + id: 0xfca58804 + name: "fat_start" + type_id: 0xc93e017b + offset: 80 +} +member { + id: 0xcbb665d2 + name: "fatent_ops" + type_id: 0x3a41ae05 + offset: 2560 +} +member { + id: 0x77210b94 + name: "fatent_shift" + type_id: 0x6720d32f + offset: 2528 +} +member { + id: 0xc808bcf8 + name: "fats" + type_id: 0x5d8155a5 + offset: 64 +} member { id: 0x7bb750d9 name: "fault" @@ -93120,6 +93450,13 @@ member { type_id: 0x26e52db9 offset: 1856 } +member { + id: 0xb6c9efb1 + name: "flush" + type_id: 0x4585663f + offset: 328 + bitsize: 1 +} member { id: 0x8934961f name: "flush_buffer" @@ -94679,6 +95016,18 @@ member { type_id: 0x0fa358e7 offset: 192 } +member { + id: 0x096aa500 + name: "free_clus_valid" + type_id: 0x4585663f + offset: 1792 +} +member { + id: 0x5ad273b5 + name: "free_clusters" + type_id: 0x4585663f + offset: 1760 +} member { id: 0x5afe9f54 name: "free_clusters" @@ -95454,12 +95803,30 @@ member { type_id: 0x0b59f310 offset: 128 } +member { + id: 0x4ae6a3fc + name: "fs_dmask" + type_id: 0xc93e017b + offset: 80 +} member { id: 0x2ec9b506 name: "fs_flags" type_id: 0x6720d32f offset: 64 } +member { + id: 0xea1673b7 + name: "fs_fmask" + type_id: 0xc93e017b + offset: 64 +} +member { + id: 0xf1ca03d6 + name: "fs_gid" + type_id: 0xb0ddb211 + offset: 32 +} member { id: 0x4ef12ece name: "fs_private" @@ -95478,6 +95845,11 @@ member { type_id: 0x32ec08f2 offset: 448 } +member { + id: 0xf5875972 + name: "fs_uid" + type_id: 0xe90b32b7 +} member { id: 0x62129df4 name: "fsflags" @@ -95526,6 +95898,18 @@ member { type_id: 0x891aa0dd offset: 64 } +member { + id: 0x549fad46 + name: "fsinfo_inode" + type_id: 0x1b8590a8 + offset: 2688 +} +member { + id: 0x20f385ae + name: "fsinfo_sector" + type_id: 0x33756485 + offset: 512 +} member { id: 0x992e67b4 name: "fsn_fa" @@ -109619,6 +110003,18 @@ member { type_id: 0x39d1288c offset: 1984 } +member { + id: 0xf1bb53fc + name: "inode_hash_lock" + type_id: 0xf313e71a + offset: 3072 +} +member { + id: 0x6440518b + name: "inode_hashtable" + type_id: 0x6e464516 + offset: 3136 +} member { id: 0x8c1d6568 name: "inodes" @@ -111227,6 +111623,12 @@ member { name: "iocb" type_id: 0x08b52b5b } +member { + id: 0x3741eca7 + name: "iocharset" + type_id: 0x0483e6f8 + offset: 192 +} member { id: 0x4d466701 name: "ioctl" @@ -113950,6 +114352,13 @@ member { type_id: 0x92233392 offset: 768 } +member { + id: 0xe0d447a8 + name: "isvfat" + type_id: 0x4585663f + offset: 324 + bitsize: 1 +} member { id: 0xd015d2ba name: "it" @@ -122880,6 +123289,12 @@ member { type_id: 0x7abd5475 offset: 448 } +member { + id: 0x8d9e156c + name: "map" + type_id: 0x686d198e + offset: 128 +} member { id: 0x8dbdb056 name: "map" @@ -124830,6 +125245,12 @@ member { type_id: 0xe8034002 offset: 16 } +member { + id: 0x104f2462 + name: "max_cluster" + type_id: 0x33756485 + offset: 384 +} member { id: 0x131f15d8 name: "max_cmd_len" @@ -133620,6 +134041,12 @@ member { type_id: 0x6720d32f offset: 320 } +member { + id: 0x51298e0d + name: "name_check" + type_id: 0x5d8155a5 + offset: 272 +} member { id: 0xe827458d name: "name_count" @@ -136296,11 +136723,23 @@ member { type_id: 0x7584e7da offset: 224 } +member { + id: 0x9f1d838a + name: "nfs" + type_id: 0x5d8155a5 + offset: 288 +} member { id: 0x6c93fd20 name: "nfs4_fl" type_id: 0x5d26223d } +member { + id: 0xcd620354 + name: "nfs_build_inode_lock" + type_id: 0xa7c362b0 + offset: 960 +} member { id: 0xc5e6562f name: "nfs_fl" @@ -136743,6 +137182,18 @@ member { type_id: 0xe8034002 offset: 32 } +member { + id: 0xeccd6b75 + name: "nls_disk" + type_id: 0x00daeb4b + offset: 2240 +} +member { + id: 0xa83e7db6 + name: "nls_io" + type_id: 0x00daeb4b + offset: 2304 +} member { id: 0xc9b27f69 name: "nlsk" @@ -137131,6 +137582,13 @@ member { type_id: 0x6d7f5ff6 offset: 1200 } +member { + id: 0x1b8202a3 + name: "nocase" + type_id: 0x4585663f + offset: 329 + bitsize: 1 +} member { id: 0xb9c6c9cf name: "nocb_gp_wq" @@ -137376,6 +137834,12 @@ member { type_id: 0xd3c80119 offset: 8384 } +member { + id: 0x0fa6cdb7 + name: "node" + type_id: 0xd3c80119 + offset: 512 +} member { id: 0x0fa6ce01 name: "node" @@ -138344,6 +138808,12 @@ member { type_id: 0x4585663f offset: 672 } +member { + id: 0x102b1569 + name: "nr_bhs" + type_id: 0x6720d32f + offset: 192 +} member { id: 0x061e4265 name: "nr_blocks" @@ -141586,6 +142056,13 @@ member { name: "numid" type_id: 0x4585663f } +member { + id: 0x32337329 + name: "numtail" + type_id: 0x4585663f + offset: 327 + bitsize: 1 +} member { id: 0xdb8e60db name: "nups" @@ -144585,6 +145062,12 @@ member { type_id: 0xaad72634 offset: 352 } +member { + id: 0xd2ad520a + name: "options" + type_id: 0x9ec1fb17 + offset: 1856 +} member { id: 0xd2d5b653 name: "options" @@ -155118,6 +155601,12 @@ member { type_id: 0x97012809 offset: 33792 } +member { + id: 0xde434006 + name: "prev_free" + type_id: 0x4585663f + offset: 1728 +} member { id: 0x4ac13271 name: "prev_growth" @@ -159867,6 +160356,13 @@ member { type_id: 0x1d19a9d5 offset: 20032 } +member { + id: 0x5ed13f3f + name: "quiet" + type_id: 0x4585663f + offset: 320 + bitsize: 1 +} member { id: 0xce3dd3dc name: "quirk" @@ -160757,6 +161253,12 @@ member { type_id: 0xa3ac7ea1 offset: 768 } +member { + id: 0xb3d91b71 + name: "ratelimit" + type_id: 0xa3ac7ea1 + offset: 2752 +} member { id: 0x3f10377e name: "rates" @@ -161584,6 +162086,12 @@ member { type_id: 0xe3222f5b offset: 10816 } +member { + id: 0x95daca5e + name: "rcu" + type_id: 0xe3222f5b + offset: 36032 +} member { id: 0x95dacb4a name: "rcu" @@ -169788,6 +170296,13 @@ member { type_id: 0xf57b706b offset: 256 } +member { + id: 0xe9340715 + name: "rodir" + type_id: 0x4585663f + offset: 332 + bitsize: 1 +} member { id: 0xc0218791 name: "role" @@ -170023,6 +170538,12 @@ member { type_id: 0x03d5ac6b offset: 3648 } +member { + id: 0xe7f1f92c + name: "root_cluster" + type_id: 0x33756485 + offset: 448 +} member { id: 0x83c4175b name: "root_cset" @@ -173058,6 +173579,12 @@ member { name: "s_list" type_id: 0xd3c80119 } +member { + id: 0x9d14efb4 + name: "s_lock" + type_id: 0xa7c362b0 + offset: 1344 +} member { id: 0xdb1c4cf1 name: "s_lock_key" @@ -175415,6 +175942,11 @@ member { type_id: 0xb3e7bac9 offset: 752 } +member { + id: 0x4e3368f6 + name: "sec_per_clus" + type_id: 0xc93e017b +} member { id: 0x5f20510d name: "sec_trim_mult" @@ -179629,6 +180161,12 @@ member { type_id: 0x5adf57ae offset: 288 } +member { + id: 0x3fab78ab + name: "shortname" + type_id: 0xc93e017b + offset: 256 +} member { id: 0xa7bc78ff name: "shost_data" @@ -179845,6 +180383,13 @@ member { type_id: 0x2d845a47 offset: 1216 } +member { + id: 0xdb0d0e45 + name: "showexec" + type_id: 0x4585663f + offset: 321 + bitsize: 1 +} member { id: 0x731ffc29 name: "shpc_managed" @@ -190312,6 +190857,13 @@ member { type_id: 0x4585663f offset: 192 } +member { + id: 0x3f6243c6 + name: "sys_immutable" + type_id: 0x4585663f + offset: 322 + bitsize: 1 +} member { id: 0x5f2a979c name: "sys_monoraw" @@ -194132,6 +194684,12 @@ member { type_id: 0x22f6cb5b offset: 448 } +member { + id: 0xae425e2a + name: "time_offset" + type_id: 0x6720d32f + offset: 128 +} member { id: 0xaec8823b name: "time_offset" @@ -200348,6 +200906,13 @@ member { type_id: 0xd3c80119 offset: 1472 } +member { + id: 0x8c6d4f35 + name: "tz_set" + type_id: 0x4585663f + offset: 331 + bitsize: 1 +} member { id: 0xf0c0380f name: "tzd" @@ -200411,6 +200976,12 @@ member { name: "u" type_id: 0x559f10ea } +member { + id: 0xec2f6a11 + name: "u" + type_id: 0x50329d99 + offset: 64 +} member { id: 0xec2faca6 name: "u" @@ -201635,6 +202206,13 @@ member { type_id: 0x2d34349d offset: 128 } +member { + id: 0x1e9ce52d + name: "unicode_xlate" + type_id: 0x4585663f + offset: 326 + bitsize: 1 +} member { id: 0xb7a98fcb name: "uniq" @@ -203715,6 +204293,13 @@ member { type_id: 0xb02b353a offset: 64 } +member { + id: 0x0ae074f9 + name: "usefree" + type_id: 0x4585663f + offset: 330 + bitsize: 1 +} member { id: 0x042a2048 name: "user" @@ -204230,6 +204815,13 @@ member { type_id: 0x3b1e48cc offset: 23296 } +member { + id: 0x9da2095c + name: "utf8" + type_id: 0x4585663f + offset: 325 + bitsize: 1 +} member { id: 0x37ff5ef8 name: "utf8agetab" @@ -205257,6 +205849,12 @@ member { type_id: 0xf313e71a offset: 3104 } +member { + id: 0x2ab87e79 + name: "vblank" + type_id: 0x0610b875 + offset: 320 +} member { id: 0x2ab87fb6 name: "vblank" @@ -207446,6 +208044,12 @@ member { type_id: 0xe8034002 offset: 6048 } +member { + id: 0x21a48c71 + name: "vol_id" + type_id: 0x4585663f + offset: 2496 +} member { id: 0x762946d6 name: "volatile_reg" @@ -216991,6 +217595,16 @@ struct_union { member_id: 0x220cbd53 } } +struct_union { + id: 0x50329d99 + kind: UNION + definition { + bytesize: 16 + member_id: 0x1b055adc + member_id: 0x24bc43b1 + member_id: 0xe7fc7569 + } +} struct_union { id: 0x50893793 kind: UNION @@ -231174,6 +231788,19 @@ struct_union { member_id: 0xf00bd56d } } +struct_union { + id: 0xeb2e4c63 + kind: STRUCT + name: "drm_vblank_work" + definition { + bytesize: 80 + member_id: 0x85e2db57 + member_id: 0x2ab87e79 + member_id: 0x65b77d65 + member_id: 0x8fa8cc5b + member_id: 0x0fa6cdb7 + } +} struct_union { id: 0x5547943d kind: STRUCT @@ -233276,6 +233903,68 @@ struct_union { member_id: 0xb724a620 } } +struct_union { + id: 0xa7ee8d5f + kind: STRUCT + name: "fat_entry" + definition { + bytesize: 56 + member_id: 0x4d3368ee + member_id: 0xec2f6a11 + member_id: 0x102b1569 + member_id: 0xd6c15754 + member_id: 0x98f2925e + } +} +struct_union { + id: 0x9ec1fb17 + kind: STRUCT + name: "fat_mount_options" + definition { + bytesize: 48 + member_id: 0xf5875972 + member_id: 0xf1ca03d6 + member_id: 0xea1673b7 + member_id: 0x4ae6a3fc + member_id: 0xf088c5b6 + member_id: 0xae425e2a + member_id: 0x3741eca7 + member_id: 0x3fab78ab + member_id: 0x51298e0d + member_id: 0x63099e78 + member_id: 0x9f1d838a + member_id: 0xff0417d8 + member_id: 0x5ed13f3f + member_id: 0xdb0d0e45 + member_id: 0x3f6243c6 + member_id: 0xae8ac049 + member_id: 0xe0d447a8 + member_id: 0x9da2095c + member_id: 0x1e9ce52d + member_id: 0x32337329 + member_id: 0xb6c9efb1 + member_id: 0x1b8202a3 + member_id: 0x0ae074f9 + member_id: 0x8c6d4f35 + member_id: 0xe9340715 + member_id: 0xf9f1b2e7 + member_id: 0x64ddbf40 + } +} +struct_union { + id: 0x7d5ecca9 + kind: STRUCT + name: "fatent_operations" + definition { + bytesize: 48 + member_id: 0x80405633 + member_id: 0xa5dc376a + member_id: 0xed8fc47b + member_id: 0x34416368 + member_id: 0x095c4eef + member_id: 0x03ea0cb4 + } +} struct_union { id: 0xd529883e kind: STRUCT @@ -239162,6 +239851,18 @@ struct_union { member_id: 0x712b765b } } +struct_union { + id: 0x659775eb + kind: STRUCT + name: "iio_map" + definition { + bytesize: 32 + member_id: 0x2a19ba6f + member_id: 0x697ffea5 + member_id: 0xf324e62b + member_id: 0x167995aa + } +} struct_union { id: 0x133963d3 kind: STRUCT @@ -246427,6 +247128,51 @@ struct_union { member_id: 0x5ee63f2d } } +struct_union { + id: 0xcd9eef44 + kind: STRUCT + name: "msdos_sb_info" + definition { + bytesize: 4520 + member_id: 0x4e3368f6 + member_id: 0xc8fe58de + member_id: 0x2f117fb7 + member_id: 0xc808bcf8 + member_id: 0x23e9d196 + member_id: 0xfca58804 + member_id: 0x91b784ab + member_id: 0x6c643354 + member_id: 0x6b95bcb0 + member_id: 0x92018cb8 + member_id: 0x104f2462 + member_id: 0xe7f1f92c + member_id: 0x20f385ae + member_id: 0xb554d263 + member_id: 0xcd620354 + member_id: 0x9d14efb4 + member_id: 0xde434006 + member_id: 0x5ad273b5 + member_id: 0x096aa500 + member_id: 0xd2ad520a + member_id: 0xeccd6b75 + member_id: 0xa83e7db6 + member_id: 0x6bb2defa + member_id: 0x07a98e4b + member_id: 0x0d4697e1 + member_id: 0x21a48c71 + member_id: 0x77210b94 + member_id: 0xcbb665d2 + member_id: 0x98f29a96 + member_id: 0x549fad46 + member_id: 0xb3d91b71 + member_id: 0xf1bb53fc + member_id: 0x6440518b + member_id: 0x8b011dd4 + member_id: 0x4d0d727b + member_id: 0xb5d697eb + member_id: 0x95daca5e + } +} struct_union { id: 0x992e3b77 kind: STRUCT @@ -253871,6 +254617,16 @@ struct_union { member_id: 0x2d1fec2e } } +struct_union { + id: 0x788c732d + kind: STRUCT + name: "rc_map_list" + definition { + bytesize: 56 + member_id: 0x7c00ef52 + member_id: 0x8d9e156c + } +} struct_union { id: 0xed49aaad kind: STRUCT @@ -276575,6 +277331,14 @@ enumeration { name: "BINDER_WORK_CLEAR_DEATH_NOTIFICATION" value: 8 } + enumerator { + name: "BINDER_WORK_FROZEN_BINDER" + value: 9 + } + enumerator { + name: "BINDER_WORK_CLEAR_FREEZE_NOTIFICATION" + value: 10 + } } } enumeration { @@ -287631,6 +288395,20 @@ enumeration { } } } +enumeration { + id: 0x33865753 + name: "profile_type" + definition { + underlying_type_id: 0x4585663f + enumerator { + name: "PROFILE_TASK_EXIT" + } + enumerator { + name: "PROFILE_MUNMAP" + value: 1 + } + } +} enumeration { id: 0x504235bb name: "psi_states" @@ -292556,6 +293334,13 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x015e0ae6 + return_type_id: 0x48b5725f + parameter_id: 0x4585663f + parameter_id: 0x2fb2b385 + parameter_id: 0x6720d32f +} function { id: 0x016f0c64 return_type_id: 0xa9403390 @@ -292598,6 +293383,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x09427c40 } +function { + id: 0x01e75921 + return_type_id: 0x48b5725f + parameter_id: 0x4585663f + parameter_id: 0x07944f4b +} function { id: 0x01ecbbc0 return_type_id: 0x48b5725f @@ -293065,6 +293856,14 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xf435685e } +function { + id: 0x0c5f338c + return_type_id: 0x33756485 + parameter_id: 0xf1a6dfed + parameter_id: 0x6720d32f + parameter_id: 0x1d5bae2a + parameter_id: 0x6720d32f +} function { id: 0x0cd36f30 return_type_id: 0x33756485 @@ -293738,6 +294537,14 @@ function { parameter_id: 0x0258f96e parameter_id: 0x1fc34bc2 } +function { + id: 0x1075e2ed + return_type_id: 0x48b5725f + parameter_id: 0x060cf413 + parameter_id: 0x52a8f1d9 + parameter_id: 0x92233392 + parameter_id: 0x295c7202 +} function { id: 0x10776911 return_type_id: 0x48b5725f @@ -293789,6 +294596,14 @@ function { parameter_id: 0x92233392 parameter_id: 0x92233392 } +function { + id: 0x109358f6 + return_type_id: 0x244b9b37 + parameter_id: 0x0d458514 + parameter_id: 0xc9082b19 + parameter_id: 0xc9082b19 + parameter_id: 0xc9082b19 +} function { id: 0x1093c795 return_type_id: 0x48b5725f @@ -294959,6 +295774,13 @@ function { return_type_id: 0x48b5725f parameter_id: 0x05003835 } +function { + id: 0x11d96a86 + return_type_id: 0x48b5725f + parameter_id: 0x054f691a + parameter_id: 0x054f691a + parameter_id: 0x1f73dead +} function { id: 0x11ddd684 return_type_id: 0x48b5725f @@ -295750,6 +296572,13 @@ function { parameter_id: 0x3e10b518 parameter_id: 0xa52a0930 } +function { + id: 0x12e1d579 + return_type_id: 0x48b5725f + parameter_id: 0x09483d5e + parameter_id: 0x0858434c + parameter_id: 0x2baac173 +} function { id: 0x12e4741f return_type_id: 0xd5cc9c9a @@ -296540,6 +297369,12 @@ function { return_type_id: 0x48b5725f parameter_id: 0x1259e377 } +function { + id: 0x140fc677 + return_type_id: 0x48b5725f + parameter_id: 0x1d44326e + parameter_id: 0xf1a6dfed +} function { id: 0x141076c6 return_type_id: 0x48b5725f @@ -297731,6 +298566,11 @@ function { return_type_id: 0x48b5725f parameter_id: 0x14abdd00 } +function { + id: 0x15b498c8 + return_type_id: 0x48b5725f + parameter_id: 0x14b3256c +} function { id: 0x15b600dd return_type_id: 0x48b5725f @@ -299734,6 +300574,14 @@ function { parameter_id: 0xb3e7bac9 parameter_id: 0xb3e7bac9 } +function { + id: 0x18bb6425 + return_type_id: 0x48b5725f + parameter_id: 0x26ee682a + parameter_id: 0x6720d32f + parameter_id: 0x13580d6c + parameter_id: 0x3ebcd127 +} function { id: 0x18befa18 return_type_id: 0x48b5725f @@ -300262,6 +301110,12 @@ function { parameter_id: 0x0130219f parameter_id: 0x6720d32f } +function { + id: 0x19de3463 + return_type_id: 0x48b5725f + parameter_id: 0x236b9af0 + parameter_id: 0x6720d32f +} function { id: 0x19e2f0b6 return_type_id: 0x48b5725f @@ -301497,6 +302351,12 @@ function { parameter_id: 0x36194830 parameter_id: 0x4585663f } +function { + id: 0x1c082c20 + return_type_id: 0x48b5725f + parameter_id: 0x3176a085 + parameter_id: 0x33756485 +} function { id: 0x1c0ba928 return_type_id: 0xd5cc9c9a @@ -301712,6 +302572,13 @@ function { parameter_id: 0x31b5a66f parameter_id: 0x2c8e1aaa } +function { + id: 0x1c48693a + return_type_id: 0x48b5725f + parameter_id: 0x305baabf + parameter_id: 0x315b7e01 + parameter_id: 0x0efff92a +} function { id: 0x1c487847 return_type_id: 0x48b5725f @@ -301924,6 +302791,11 @@ function { parameter_id: 0x33756485 parameter_id: 0x33756485 } +function { + id: 0x1c8ebb3c + return_type_id: 0x48b5725f + parameter_id: 0x305baabf +} function { id: 0x1c93cad8 return_type_id: 0x48b5725f @@ -303834,6 +304706,15 @@ function { return_type_id: 0x48b5725f parameter_id: 0x395e9ae2 } +function { + id: 0x1ed2fdaa + return_type_id: 0x48b5725f + parameter_id: 0x39f78276 + parameter_id: 0x04f728c1 + parameter_id: 0x9bd401b6 + parameter_id: 0x9bd401b6 + parameter_id: 0x295c7202 +} function { id: 0x1ed8d47c return_type_id: 0x48b5725f @@ -304001,6 +304882,15 @@ function { parameter_id: 0x6d7f5ff6 parameter_id: 0x2eafb82c } +function { + id: 0x1efdc546 + return_type_id: 0x48b5725f + parameter_id: 0x39f78276 + parameter_id: 0x04f728c1 + parameter_id: 0x2c6539ca + parameter_id: 0x2c6539ca + parameter_id: 0x00c72527 +} function { id: 0x1f00dfeb return_type_id: 0x48b5725f @@ -305021,6 +305911,11 @@ function { parameter_id: 0x18ea6ae3 parameter_id: 0x2ed8b8f9 } +function { + id: 0x229f1818 + return_type_id: 0x106029c6 + parameter_id: 0x18ea6ae3 +} function { id: 0x22a7ae7f return_type_id: 0x2b8f13b3 @@ -308200,6 +309095,13 @@ function { parameter_id: 0x347303b4 parameter_id: 0x6720d32f } +function { + id: 0x5a19767d + return_type_id: 0x18bd6530 + parameter_id: 0x347303b4 + parameter_id: 0x6720d32f + parameter_id: 0x3e10b518 +} function { id: 0x5a4be8d0 return_type_id: 0x18bd6530 @@ -308564,6 +309466,13 @@ function { parameter_id: 0x379d63b0 parameter_id: 0x379d63b0 } +function { + id: 0x5dfb031c + return_type_id: 0x18bd6530 + parameter_id: 0x2678c091 + parameter_id: 0xb3a3e4db + parameter_id: 0xf435685e +} function { id: 0x5e051163 return_type_id: 0x18bd6530 @@ -309226,6 +310135,16 @@ function { parameter_id: 0x0ac23bc5 parameter_id: 0x054f691a } +function { + id: 0x6cfb5677 + return_type_id: 0x1d44326e + parameter_id: 0x0ca27481 + parameter_id: 0xe276adef + parameter_id: 0x7584e7da + parameter_id: 0xe276adef + parameter_id: 0x7584e7da + parameter_id: 0x6720d32f +} function { id: 0x6d9955d1 return_type_id: 0x054f691a @@ -309389,6 +310308,16 @@ function { parameter_id: 0x0ac23bc5 parameter_id: 0x054f691a } +function { + id: 0x6f9cf071 + return_type_id: 0x1d44326e + parameter_id: 0x0ca27481 + parameter_id: 0x3b461cc8 + parameter_id: 0x7584e7da + parameter_id: 0x3b461cc8 + parameter_id: 0x7584e7da + parameter_id: 0x6720d32f +} function { id: 0x6fa775f5 return_type_id: 0x054f691a @@ -309471,6 +310400,18 @@ function { return_type_id: 0x1d19a9d5 parameter_id: 0x2e029f76 } +function { + id: 0x70f2e1e7 + return_type_id: 0x054f691a + 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: 0x71086e18 return_type_id: 0x24e24923 @@ -310096,6 +311037,11 @@ function { parameter_id: 0x064d6086 parameter_id: 0xc9082b19 } +function { + id: 0x8233b356 + return_type_id: 0x3a583251 + parameter_id: 0x14b9453b +} function { id: 0x825faca7 return_type_id: 0x31fa879c @@ -310765,6 +311711,15 @@ function { return_type_id: 0x6720d32f parameter_id: 0x5d8155a5 } +function { + id: 0x8af54231 + return_type_id: 0x01c5a749 + parameter_id: 0x074f1a14 + parameter_id: 0x249959de + parameter_id: 0x3e10b518 + parameter_id: 0x295c7202 + parameter_id: 0x3107a2d8 +} function { id: 0x8b00bfc7 return_type_id: 0x2e0f9112 @@ -310820,6 +311775,12 @@ function { parameter_id: 0x4585663f parameter_id: 0x328870e8 } +function { + id: 0x8c2c6f32 + return_type_id: 0x6720d32f + parameter_id: 0x4585663f + parameter_id: 0x33756485 +} function { id: 0x8c2fe37e return_type_id: 0x6720d32f @@ -310929,6 +311890,11 @@ function { parameter_id: 0x1b44744f parameter_id: 0x3e10b518 } +function { + id: 0x8cec1055 + return_type_id: 0x3a583251 + parameter_id: 0x2fc7c937 +} function { id: 0x8d172d0a return_type_id: 0xd41e888f @@ -311925,6 +312891,12 @@ function { parameter_id: 0x32a623d7 parameter_id: 0x6720d32f } +function { + id: 0x90b7b149 + return_type_id: 0x6720d32f + parameter_id: 0x347303b4 + parameter_id: 0x0ae4a2c7 +} function { id: 0x90b7ea24 return_type_id: 0x6720d32f @@ -312288,6 +313260,12 @@ function { parameter_id: 0xf435685e parameter_id: 0x0ab1f084 } +function { + id: 0x910fac6a + return_type_id: 0x6720d32f + parameter_id: 0x33865753 + parameter_id: 0x1bb6a471 +} function { id: 0x910fbd4c return_type_id: 0x6720d32f @@ -314523,6 +315501,15 @@ function { parameter_id: 0x2b9b3aed parameter_id: 0x18bd6530 } +function { + id: 0x925fc6da + return_type_id: 0x6720d32f + parameter_id: 0x3ec65828 + parameter_id: 0x18bd6530 + parameter_id: 0x38b368bf + parameter_id: 0x95ef30d6 + parameter_id: 0xf435685e +} function { id: 0x925fddc4 return_type_id: 0xf435685e @@ -316383,6 +317370,14 @@ function { parameter_id: 0x18ea6ae3 parameter_id: 0x4585663f } +function { + id: 0x93b7b77f + return_type_id: 0x6720d32f + parameter_id: 0x3ba261b0 + parameter_id: 0x384c5795 + parameter_id: 0xf435685e + parameter_id: 0xfc0e1dbd +} function { id: 0x93b941f7 return_type_id: 0x6720d32f @@ -316419,6 +317414,13 @@ function { parameter_id: 0x3b04bead parameter_id: 0x21003da7 } +function { + id: 0x93c5da99 + return_type_id: 0x6720d32f + parameter_id: 0x305baabf + parameter_id: 0x92233392 + parameter_id: 0x6d7f5ff6 +} function { id: 0x93c6821c return_type_id: 0x6720d32f @@ -317104,6 +318106,12 @@ function { parameter_id: 0x323908e0 parameter_id: 0x6d7f5ff6 } +function { + id: 0x946e6c80 + return_type_id: 0x6720d32f + parameter_id: 0x244b9b37 + parameter_id: 0x3f1a5886 +} function { id: 0x946eaca9 return_type_id: 0x52658204 @@ -317245,6 +318253,14 @@ function { return_type_id: 0x0611572c parameter_id: 0x332d6166 } +function { + id: 0x94ac5db4 + return_type_id: 0x6720d32f + parameter_id: 0x26ee682a + parameter_id: 0x236b9af0 + parameter_id: 0x6720d32f + parameter_id: 0xd0b3a203 +} function { id: 0x94ae1223 return_type_id: 0x6720d32f @@ -317755,6 +318771,11 @@ function { parameter_id: 0x6720d32f parameter_id: 0x6d7f5ff6 } +function { + id: 0x955a0593 + return_type_id: 0x6720d32f + parameter_id: 0x236b9af0 +} function { id: 0x955ad750 return_type_id: 0x6720d32f @@ -319301,6 +320322,13 @@ function { parameter_id: 0x281af600 parameter_id: 0x391f15ea } +function { + id: 0x976483ee + return_type_id: 0x6720d32f + parameter_id: 0x2a670b41 + parameter_id: 0x1c898f28 + parameter_id: 0x3e10b518 +} function { id: 0x976590a4 return_type_id: 0x2e0f9112 @@ -320027,6 +321055,12 @@ function { parameter_id: 0x6720d32f parameter_id: 0x0acb01fe } +function { + id: 0x9847d2a8 + return_type_id: 0x6720d32f + parameter_id: 0x14b9453b + parameter_id: 0x3a583251 +} function { id: 0x984b1567 return_type_id: 0x6720d32f @@ -320656,6 +321690,11 @@ function { parameter_id: 0xc9082b19 parameter_id: 0xc9082b19 } +function { + id: 0x98ac2a74 + return_type_id: 0x6720d32f + parameter_id: 0x14b3256c +} function { id: 0x98aeb261 return_type_id: 0x6720d32f @@ -324073,6 +325112,16 @@ function { parameter_id: 0x11cfee5a parameter_id: 0x13580d6c } +function { + id: 0x9b26096d + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2170d06d + parameter_id: 0x33756485 + parameter_id: 0x29b77961 + parameter_id: 0x2e18f543 + parameter_id: 0x13580d6c +} function { id: 0x9b261113 return_type_id: 0x6720d32f @@ -324114,6 +325163,15 @@ function { parameter_id: 0x2360e10b parameter_id: 0x13580d6c } +function { + id: 0x9b273c8b + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x2170d06d + parameter_id: 0x33756485 + parameter_id: 0x6720d32f + parameter_id: 0x11cfee5a +} function { id: 0x9b2837bd return_type_id: 0x6720d32f @@ -325138,6 +326196,13 @@ function { return_type_id: 0xf435685e parameter_id: 0x31675062 } +function { + id: 0x9b664ae7 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x3360dff4 + parameter_id: 0x11cfee5a +} function { id: 0x9b6740c7 return_type_id: 0x6720d32f @@ -325309,6 +326374,13 @@ function { parameter_id: 0x33756485 parameter_id: 0x01222f7d } +function { + id: 0x9b6ee445 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x3360dff4 + parameter_id: 0x33756485 +} function { id: 0x9b6fe394 return_type_id: 0x6720d32f @@ -326707,6 +327779,15 @@ function { parameter_id: 0x0258f96e parameter_id: 0x6720d32f } +function { + id: 0x9bc01a31 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x18ea6ae3 + parameter_id: 0x33756485 + parameter_id: 0x33756485 + parameter_id: 0x65d74a06 +} function { id: 0x9bc0372a return_type_id: 0x6720d32f @@ -326880,6 +327961,14 @@ function { parameter_id: 0x18bd6530 parameter_id: 0x716d7970 } +function { + id: 0x9bc62aec + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x18ea6ae3 + parameter_id: 0x27a7c613 + parameter_id: 0xf435685e +} function { id: 0x9bc64292 return_type_id: 0x6720d32f @@ -326947,6 +328036,14 @@ function { parameter_id: 0x1d19a9d5 parameter_id: 0x4585663f } +function { + id: 0x9bcae3c8 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x1b36c7a2 + parameter_id: 0x27162aac + parameter_id: 0x11cfee5a +} function { id: 0x9bcb2775 return_type_id: 0x6720d32f @@ -327901,6 +328998,12 @@ function { parameter_id: 0x02a8d0c9 parameter_id: 0x1f8dbf97 } +function { + id: 0x9bedd31c + return_type_id: 0x6720d32f + parameter_id: 0x188b9e81 + parameter_id: 0x13f5e4dd +} function { id: 0x9bee7944 return_type_id: 0x6720d32f @@ -328830,6 +329933,13 @@ function { parameter_id: 0x04b193cc parameter_id: 0x0a134144 } +function { + id: 0x9c85c36a + return_type_id: 0x6720d32f + parameter_id: 0x0258f96e + parameter_id: 0x6720d32f + parameter_id: 0x3e75499e +} function { id: 0x9c85ef5b return_type_id: 0x6720d32f @@ -329204,6 +330314,12 @@ function { return_type_id: 0x6720d32f parameter_id: 0x04f7a60d } +function { + id: 0x9cbe9fe5 + return_type_id: 0x6720d32f + parameter_id: 0x060cf413 + parameter_id: 0x2f5073a5 +} function { id: 0x9cc0eb8f return_type_id: 0x6720d32f @@ -330889,6 +332005,12 @@ function { parameter_id: 0x2f99f236 parameter_id: 0x6720d32f } +function { + id: 0x9db1c576 + return_type_id: 0x6720d32f + parameter_id: 0x0258f96e + parameter_id: 0x29c600bb +} function { id: 0x9db28ca2 return_type_id: 0x6720d32f @@ -331214,6 +332336,12 @@ function { parameter_id: 0x347303b4 parameter_id: 0x20054a7b } +function { + id: 0x9dcf11c9 + return_type_id: 0x6720d32f + parameter_id: 0x026c3dea + parameter_id: 0x353f6734 +} function { id: 0x9dcf64bf return_type_id: 0x6720d32f @@ -332315,6 +333443,11 @@ function { parameter_id: 0x0ca27481 parameter_id: 0x33e53462 } +function { + id: 0x9e68e60a + return_type_id: 0x6720d32f + parameter_id: 0x0fa01494 +} function { id: 0x9e68eb19 return_type_id: 0x6720d32f @@ -332367,6 +333500,15 @@ function { parameter_id: 0xe62ebf07 parameter_id: 0xc9082b19 } +function { + id: 0x9e6e3078 + return_type_id: 0x6720d32f + parameter_id: 0x0fa01494 + parameter_id: 0x0258f96e + parameter_id: 0x38c3714d + parameter_id: 0x6720d32f + parameter_id: 0x6720d32f +} function { id: 0x9e6e36b1 return_type_id: 0x6720d32f @@ -332637,6 +333779,13 @@ function { parameter_id: 0x02888010 parameter_id: 0x0e8833d6 } +function { + id: 0x9ea3b9a0 + return_type_id: 0x6720d32f + parameter_id: 0x0ca27481 + parameter_id: 0x0483e6f8 + parameter_id: 0x6720d32f +} function { id: 0x9ea548d2 return_type_id: 0x6720d32f @@ -334915,6 +336064,14 @@ function { parameter_id: 0x12e6ffae parameter_id: 0x36d2de0e } +function { + id: 0xa80dee82 + return_type_id: 0x31c8b544 + parameter_id: 0x3b04bead + parameter_id: 0x12e6ffae + parameter_id: 0x36d2de0e + parameter_id: 0x3db894b0 +} function { id: 0xa80f38e4 return_type_id: 0x0a1edf98 @@ -336258,6 +337415,11 @@ function { parameter_id: 0x2e029f76 parameter_id: 0x1d19a9d5 } +function { + id: 0xc5642af6 + return_type_id: 0x4585663f + parameter_id: 0x2efd5036 +} function { id: 0xc564dee2 return_type_id: 0x4585663f @@ -336417,6 +337579,11 @@ function { parameter_id: 0x4585663f parameter_id: 0x4585663f } +function { + id: 0xc9a5aa04 + return_type_id: 0x3e75499e + parameter_id: 0xc9082b19 +} function { id: 0xc9f4f8be return_type_id: 0x4585663f @@ -337061,6 +338228,11 @@ function { return_type_id: 0x6d7f5ff6 parameter_id: 0x914dbfdc } +function { + id: 0xdb365209 + return_type_id: 0x030b9acf + parameter_id: 0x11c404ba +} function { id: 0xdb53d61f return_type_id: 0x3f095459 @@ -338234,6 +339406,11 @@ function { parameter_id: 0x3176a085 parameter_id: 0x1d5935e7 } +function { + id: 0xf2b2b1ab + return_type_id: 0x6d7f5ff6 + parameter_id: 0x305baabf +} function { id: 0xf2bde902 return_type_id: 0x6d7f5ff6 @@ -338945,6 +340122,12 @@ function { parameter_id: 0x1e820193 parameter_id: 0x18bd6530 } +function { + id: 0xf98bdd41 + return_type_id: 0x6d7f5ff6 + parameter_id: 0x18e64f74 + parameter_id: 0x4585663f +} function { id: 0xf9d4ae0e return_type_id: 0x6d7f5ff6 @@ -341739,6 +342922,15 @@ elf_symbol { type_id: 0xddfd6c01 full_name: "__media_entity_next_link" } +elf_symbol { + id: 0xc50a781f + name: "__media_entity_setup_link" + is_defined: true + symbol_type: FUNCTION + crc: 0x3252a75e + type_id: 0x901c3c62 + full_name: "__media_entity_setup_link" +} elf_symbol { id: 0x47a4997d name: "__memcat_p" @@ -342711,6 +343903,15 @@ elf_symbol { type_id: 0x10189f78 full_name: "__sg_page_iter_start" } +elf_symbol { + id: 0xda0019b0 + name: "__show_mem" + is_defined: true + symbol_type: FUNCTION + crc: 0x59e928c1 + type_id: 0x015e0ae6 + full_name: "__show_mem" +} elf_symbol { id: 0x62009211 name: "__sk_receive_skb" @@ -345015,6 +346216,15 @@ elf_symbol { type_id: 0x9a35263f full_name: "__traceiter_android_vh_do_futex" } +elf_symbol { + id: 0xea6452e1 + name: "__traceiter_android_vh_do_read_fault" + is_defined: true + symbol_type: FUNCTION + crc: 0x324349a0 + type_id: 0x9b6ee445 + full_name: "__traceiter_android_vh_do_read_fault" +} elf_symbol { id: 0x1cc3aec5 name: "__traceiter_android_vh_do_send_sig_info" @@ -345168,6 +346378,24 @@ elf_symbol { type_id: 0x9bf4cdf9 full_name: "__traceiter_android_vh_filemap_get_folio" } +elf_symbol { + id: 0xb7d91f76 + name: "__traceiter_android_vh_filemap_map_pages" + is_defined: true + symbol_type: FUNCTION + crc: 0xbb9002c7 + type_id: 0x9bc01a31 + full_name: "__traceiter_android_vh_filemap_map_pages" +} +elf_symbol { + id: 0x158bf9d3 + name: "__traceiter_android_vh_filemap_read" + is_defined: true + symbol_type: FUNCTION + crc: 0x17256b24 + type_id: 0x9bc62aec + full_name: "__traceiter_android_vh_filemap_read" +} elf_symbol { id: 0x1fca37bf name: "__traceiter_android_vh_folio_trylock_clear" @@ -345735,6 +346963,15 @@ elf_symbol { type_id: 0x9b883042 full_name: "__traceiter_android_vh_mm_compaction_end" } +elf_symbol { + id: 0x6f5c8275 + name: "__traceiter_android_vh_mm_kcompactd_cpu_online" + is_defined: true + symbol_type: FUNCTION + crc: 0x0e957ed4 + type_id: 0x9a33392f + full_name: "__traceiter_android_vh_mm_kcompactd_cpu_online" +} elf_symbol { id: 0xe44dacb1 name: "__traceiter_android_vh_mmap_region" @@ -345870,6 +347107,24 @@ elf_symbol { type_id: 0x9b2239e7 full_name: "__traceiter_android_vh_mutex_wait_start" } +elf_symbol { + id: 0x724577f8 + name: "__traceiter_android_vh_oom_swapmem_gather_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0x29fbc105 + type_id: 0x9bc3617d + full_name: "__traceiter_android_vh_oom_swapmem_gather_finish" +} +elf_symbol { + id: 0xac55c769 + name: "__traceiter_android_vh_oom_swapmem_gather_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x1207cd48 + type_id: 0x9bc3617d + full_name: "__traceiter_android_vh_oom_swapmem_gather_init" +} elf_symbol { id: 0xacaadcc9 name: "__traceiter_android_vh_page_add_new_anon_rmap" @@ -345879,6 +347134,24 @@ elf_symbol { type_id: 0x9bb7fe1c full_name: "__traceiter_android_vh_page_add_new_anon_rmap" } +elf_symbol { + id: 0x3246acbb + name: "__traceiter_android_vh_page_referenced_check_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0xe720c887 + type_id: 0x9b273c8b + full_name: "__traceiter_android_vh_page_referenced_check_bypass" +} +elf_symbol { + id: 0xb4d5ffdc + name: "__traceiter_android_vh_page_should_be_protected" + is_defined: true + symbol_type: FUNCTION + crc: 0x77112e10 + type_id: 0x9b26096d + full_name: "__traceiter_android_vh_page_should_be_protected" +} elf_symbol { id: 0x13b0736e name: "__traceiter_android_vh_percpu_rwsem_down_read" @@ -346383,6 +347656,15 @@ elf_symbol { type_id: 0x9ba62ef4 full_name: "__traceiter_android_vh_sd_update_bus_speed_mode" } +elf_symbol { + id: 0x0b48ad7a + name: "__traceiter_android_vh_set_task_comm" + is_defined: true + symbol_type: FUNCTION + crc: 0x41a08c95 + type_id: 0x9bdbdcc4 + full_name: "__traceiter_android_vh_set_task_comm" +} elf_symbol { id: 0x874fcdb2 name: "__traceiter_android_vh_set_tsk_need_resched_lazy" @@ -346446,6 +347728,15 @@ elf_symbol { type_id: 0x9b1657a8 full_name: "__traceiter_android_vh_should_continue_reclaim" } +elf_symbol { + id: 0xda8424a2 + name: "__traceiter_android_vh_should_fault_around" + is_defined: true + symbol_type: FUNCTION + crc: 0xef8b5a7b + type_id: 0x9b664ae7 + full_name: "__traceiter_android_vh_should_fault_around" +} elf_symbol { id: 0x4d31a413 name: "__traceiter_android_vh_show_mem" @@ -346554,6 +347845,33 @@ elf_symbol { type_id: 0x9b83c6f7 full_name: "__traceiter_android_vh_sound_usb_support_cpu_suspend" } +elf_symbol { + id: 0x445e3749 + name: "__traceiter_android_vh_swapmem_gather_add_bypass" + is_defined: true + symbol_type: FUNCTION + crc: 0x47403b0c + type_id: 0x9bcae3c8 + full_name: "__traceiter_android_vh_swapmem_gather_add_bypass" +} +elf_symbol { + id: 0x3f14ea30 + name: "__traceiter_android_vh_swapmem_gather_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0xa8f4914c + type_id: 0x9bc3617d + full_name: "__traceiter_android_vh_swapmem_gather_finish" +} +elf_symbol { + id: 0x64e397a9 + name: "__traceiter_android_vh_swapmem_gather_init" + is_defined: true + symbol_type: FUNCTION + crc: 0x5f6a3d73 + type_id: 0x9bc3617d + full_name: "__traceiter_android_vh_swapmem_gather_init" +} elf_symbol { id: 0x58e7556b name: "__traceiter_android_vh_sync_txn_recvd" @@ -347130,6 +348448,15 @@ elf_symbol { type_id: 0x9bfc29dd full_name: "__traceiter_dwc3_readl" } +elf_symbol { + id: 0xa1c053cb + name: "__traceiter_dwc3_writel" + is_defined: true + symbol_type: FUNCTION + crc: 0xcff87172 + type_id: 0x9bfc29dd + full_name: "__traceiter_dwc3_writel" +} elf_symbol { id: 0x5e5d9a70 name: "__traceiter_error_report_end" @@ -349569,6 +350896,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_do_futex" } +elf_symbol { + id: 0xff7bbbff + name: "__tracepoint_android_vh_do_read_fault" + is_defined: true + symbol_type: OBJECT + crc: 0xd18be4d5 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_do_read_fault" +} elf_symbol { id: 0x82ce823f name: "__tracepoint_android_vh_do_send_sig_info" @@ -349722,6 +351058,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_filemap_get_folio" } +elf_symbol { + id: 0xb34d9200 + name: "__tracepoint_android_vh_filemap_map_pages" + is_defined: true + symbol_type: OBJECT + crc: 0x6cc3b878 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_filemap_map_pages" +} +elf_symbol { + id: 0xf61927fd + name: "__tracepoint_android_vh_filemap_read" + is_defined: true + symbol_type: OBJECT + crc: 0xe0c6f67a + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_filemap_read" +} elf_symbol { id: 0xa3ede5d5 name: "__tracepoint_android_vh_folio_trylock_clear" @@ -350289,6 +351643,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mm_compaction_end" } +elf_symbol { + id: 0x0f593caf + name: "__tracepoint_android_vh_mm_kcompactd_cpu_online" + is_defined: true + symbol_type: OBJECT + crc: 0x43ec1d5b + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_mm_kcompactd_cpu_online" +} elf_symbol { id: 0xb6da564f name: "__tracepoint_android_vh_mmap_region" @@ -350424,6 +351787,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_mutex_wait_start" } +elf_symbol { + id: 0xdfe6a3ee + name: "__tracepoint_android_vh_oom_swapmem_gather_finish" + is_defined: true + symbol_type: OBJECT + crc: 0xd5cc81a5 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_oom_swapmem_gather_finish" +} +elf_symbol { + id: 0x6bc613d3 + name: "__tracepoint_android_vh_oom_swapmem_gather_init" + is_defined: true + symbol_type: OBJECT + crc: 0x90f8e792 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_oom_swapmem_gather_init" +} elf_symbol { id: 0x20d2ceb3 name: "__tracepoint_android_vh_page_add_new_anon_rmap" @@ -350433,6 +351814,24 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_page_add_new_anon_rmap" } +elf_symbol { + id: 0x4a5e6e41 + name: "__tracepoint_android_vh_page_referenced_check_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0x6c78bb0e + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_page_referenced_check_bypass" +} +elf_symbol { + id: 0x352038ba + name: "__tracepoint_android_vh_page_should_be_protected" + is_defined: true + symbol_type: OBJECT + crc: 0x0ba3a10c + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_page_should_be_protected" +} elf_symbol { id: 0xa4c454d8 name: "__tracepoint_android_vh_percpu_rwsem_down_read" @@ -350937,6 +352336,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_sd_update_bus_speed_mode" } +elf_symbol { + id: 0x1f07c260 + name: "__tracepoint_android_vh_set_task_comm" + is_defined: true + symbol_type: OBJECT + crc: 0x344a08a8 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_set_task_comm" +} elf_symbol { id: 0xb6de2d88 name: "__tracepoint_android_vh_set_tsk_need_resched_lazy" @@ -351000,6 +352408,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_should_continue_reclaim" } +elf_symbol { + id: 0x88acddf0 + name: "__tracepoint_android_vh_should_fault_around" + is_defined: true + symbol_type: OBJECT + crc: 0x7af0e347 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_should_fault_around" +} elf_symbol { id: 0x823654f5 name: "__tracepoint_android_vh_show_mem" @@ -351108,6 +352525,33 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_sound_usb_support_cpu_suspend" } +elf_symbol { + id: 0x052557d7 + name: "__tracepoint_android_vh_swapmem_gather_add_bypass" + is_defined: true + symbol_type: OBJECT + crc: 0x234c1355 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_swapmem_gather_add_bypass" +} +elf_symbol { + id: 0x6fb8113a + name: "__tracepoint_android_vh_swapmem_gather_finish" + is_defined: true + symbol_type: OBJECT + crc: 0x5a4a8817 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_swapmem_gather_finish" +} +elf_symbol { + id: 0xab09fdb7 + name: "__tracepoint_android_vh_swapmem_gather_init" + is_defined: true + symbol_type: OBJECT + crc: 0x64be291a + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_swapmem_gather_init" +} elf_symbol { id: 0x39e68fed name: "__tracepoint_android_vh_sync_txn_recvd" @@ -351684,6 +353128,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_dwc3_readl" } +elf_symbol { + id: 0x66f49065 + name: "__tracepoint_dwc3_writel" + is_defined: true + symbol_type: OBJECT + crc: 0x7bad1f23 + type_id: 0x18ccbd2c + full_name: "__tracepoint_dwc3_writel" +} elf_symbol { id: 0x3b13741e name: "__tracepoint_error_report_end" @@ -353522,6 +354975,15 @@ elf_symbol { type_id: 0x33756485 full_name: "arch_freq_scale" } +elf_symbol { + id: 0x97ee5cc4 + name: "arch_invalidate_pmem" + is_defined: true + symbol_type: FUNCTION + crc: 0x2c635527 + type_id: 0x1567dd7e + full_name: "arch_invalidate_pmem" +} elf_symbol { id: 0xc447be59 name: "arch_timer_read_counter" @@ -353590,6 +355052,15 @@ elf_symbol { type_id: 0x45f82b62 full_name: "arm_smccc_get_version" } +elf_symbol { + id: 0x2d62fd75 + name: "arp_create" + is_defined: true + symbol_type: FUNCTION + crc: 0xa20ae461 + type_id: 0x70f2e1e7 + full_name: "arp_create" +} elf_symbol { id: 0x4f8a812a name: "arp_send" @@ -354013,6 +355484,15 @@ elf_symbol { type_id: 0x3fc78978 full_name: "bin2hex" } +elf_symbol { + id: 0x154309df + name: "binder_alloc_copy_from_buffer" + is_defined: true + symbol_type: FUNCTION + crc: 0x6ced1f12 + type_id: 0x925fc6da + full_name: "binder_alloc_copy_from_buffer" +} elf_symbol { id: 0x49201db3 name: "bio_add_page" @@ -357429,6 +358909,15 @@ elf_symbol { type_id: 0x1febeb84 full_name: "clk_unregister" } +elf_symbol { + id: 0x68c84c24 + name: "clk_unregister_fixed_factor" + is_defined: true + symbol_type: FUNCTION + crc: 0x45558f56 + type_id: 0x1febeb84 + full_name: "clk_unregister_fixed_factor" +} elf_symbol { id: 0x40da6f1f name: "clk_unregister_fixed_rate" @@ -357438,6 +358927,15 @@ elf_symbol { type_id: 0x1febeb84 full_name: "clk_unregister_fixed_rate" } +elf_symbol { + id: 0x9d70bb80 + name: "clk_unregister_gate" + is_defined: true + symbol_type: FUNCTION + crc: 0x8506baa8 + type_id: 0x1febeb84 + full_name: "clk_unregister_gate" +} elf_symbol { id: 0xdf9b5d08 name: "clkdev_add" @@ -360485,6 +361983,24 @@ elf_symbol { type_id: 0x13488e67 full_name: "dev_load" } +elf_symbol { + id: 0x9a2dbfca + name: "dev_mc_add" + is_defined: true + symbol_type: FUNCTION + crc: 0x5720adeb + type_id: 0x91c85a84 + full_name: "dev_mc_add" +} +elf_symbol { + id: 0xafae816a + name: "dev_mc_del" + is_defined: true + symbol_type: FUNCTION + crc: 0x6518341f + type_id: 0x91c85a84 + full_name: "dev_mc_del" +} elf_symbol { id: 0x47c790a6 name: "dev_mc_sync" @@ -362159,6 +363675,15 @@ elf_symbol { type_id: 0xa671941e full_name: "devm_clk_get" } +elf_symbol { + id: 0x4cc1057f + name: "devm_clk_get_enabled" + is_defined: true + symbol_type: FUNCTION + crc: 0xcd3f21c7 + type_id: 0xa671941e + full_name: "devm_clk_get_enabled" +} elf_symbol { id: 0xf569682d name: "devm_clk_get_optional" @@ -363239,6 +364764,15 @@ elf_symbol { type_id: 0x9c86c8d2 full_name: "devm_regulator_bulk_get_const" } +elf_symbol { + id: 0x9f156785 + name: "devm_regulator_bulk_get_enable" + is_defined: true + symbol_type: FUNCTION + crc: 0xf83e0712 + type_id: 0x9c85c36a + full_name: "devm_regulator_bulk_get_enable" +} elf_symbol { id: 0xadafc9a7 name: "devm_regulator_get" @@ -363356,6 +364890,24 @@ elf_symbol { type_id: 0x9d9d4b64 full_name: "devm_reset_controller_register" } +elf_symbol { + id: 0xbc1b7b65 + name: "devm_rproc_add" + is_defined: true + symbol_type: FUNCTION + crc: 0x6fe72a07 + type_id: 0x9db1c576 + full_name: "devm_rproc_add" +} +elf_symbol { + id: 0x2df89a54 + name: "devm_rproc_alloc" + is_defined: true + symbol_type: FUNCTION + crc: 0xd2a21170 + type_id: 0xbd324cd3 + full_name: "devm_rproc_alloc" +} elf_symbol { id: 0x752a2b5b name: "devm_rtc_allocate_device" @@ -364150,6 +365702,15 @@ elf_symbol { type_id: 0x9df2edfa full_name: "dma_fence_add_callback" } +elf_symbol { + id: 0x7ab07b7f + name: "dma_fence_allocate_private_stub" + is_defined: true + symbol_type: FUNCTION + crc: 0x297c8a7d + type_id: 0xdb365209 + full_name: "dma_fence_allocate_private_stub" +} elf_symbol { id: 0xe2ee283f name: "dma_fence_array_create" @@ -364375,6 +365936,15 @@ elf_symbol { type_id: 0x13dca967 full_name: "dma_free_pages" } +elf_symbol { + id: 0x451c2c07 + name: "dma_get_any_slave_channel" + is_defined: true + symbol_type: FUNCTION + crc: 0x49d18271 + type_id: 0x8cec1055 + full_name: "dma_get_any_slave_channel" +} elf_symbol { id: 0xd0e88c9a name: "dma_get_required_mask" @@ -364924,6 +366494,15 @@ elf_symbol { type_id: 0x13db1588 full_name: "dmam_free_coherent" } +elf_symbol { + id: 0xac16424d + name: "dmam_pool_create" + is_defined: true + symbol_type: FUNCTION + crc: 0xcab45a40 + type_id: 0x5f4c14dc + full_name: "dmam_pool_create" +} elf_symbol { id: 0x6bebb14a name: "do_SAK" @@ -366130,6 +367709,24 @@ elf_symbol { type_id: 0x1c18b1c5 full_name: "drm_calc_timestamping_constants" } +elf_symbol { + id: 0x005134ba + name: "drm_client_buffer_vmap" + is_defined: true + symbol_type: FUNCTION + crc: 0x2655e936 + type_id: 0x946e6c80 + full_name: "drm_client_buffer_vmap" +} +elf_symbol { + id: 0x877c985c + name: "drm_client_framebuffer_create" + is_defined: true + symbol_type: FUNCTION + crc: 0xffc28aa5 + type_id: 0x109358f6 + full_name: "drm_client_framebuffer_create" +} elf_symbol { id: 0x51df4337 name: "drm_client_init" @@ -367111,6 +368708,15 @@ elf_symbol { type_id: 0x91bfa9d8 full_name: "drm_gem_fb_create_handle" } +elf_symbol { + id: 0x3948069d + name: "drm_gem_fb_create_with_funcs" + is_defined: true + symbol_type: FUNCTION + crc: 0xfd2eb98d + type_id: 0xa80dee82 + full_name: "drm_gem_fb_create_with_funcs" +} elf_symbol { id: 0x128b55c8 name: "drm_gem_fb_destroy" @@ -368677,6 +370283,15 @@ elf_symbol { type_id: 0xf7820d73 full_name: "drm_probe_ddc" } +elf_symbol { + id: 0xe0832a10 + name: "drm_property_add_enum" + is_defined: true + symbol_type: FUNCTION + crc: 0x95d2dcc0 + type_id: 0x976483ee + full_name: "drm_property_add_enum" +} elf_symbol { id: 0x0768ccdb name: "drm_property_blob_get" @@ -369073,6 +370688,42 @@ elf_symbol { type_id: 0x9257d91c full_name: "drm_vblank_init" } +elf_symbol { + id: 0x67c8f92b + name: "drm_vblank_work_cancel_sync" + is_defined: true + symbol_type: FUNCTION + crc: 0x123b3e87 + type_id: 0xf2b2b1ab + full_name: "drm_vblank_work_cancel_sync" +} +elf_symbol { + id: 0xc2c5f476 + name: "drm_vblank_work_flush" + is_defined: true + symbol_type: FUNCTION + crc: 0x09f67abe + type_id: 0x1c8ebb3c + full_name: "drm_vblank_work_flush" +} +elf_symbol { + id: 0xf73ea9f7 + name: "drm_vblank_work_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xe02a1488 + type_id: 0x1c48693a + full_name: "drm_vblank_work_init" +} +elf_symbol { + id: 0xdc9144c7 + name: "drm_vblank_work_schedule" + is_defined: true + symbol_type: FUNCTION + crc: 0x6d28d4ee + type_id: 0x93c5da99 + full_name: "drm_vblank_work_schedule" +} elf_symbol { id: 0x7993ff4e name: "drm_wait_one_vblank" @@ -369082,6 +370733,15 @@ elf_symbol { type_id: 0x1f4f6ba0 full_name: "drm_wait_one_vblank" } +elf_symbol { + id: 0xd8f127ed + name: "drm_warn_on_modeset_not_all_locked" + is_defined: true + symbol_type: FUNCTION + crc: 0x0a7b5985 + type_id: 0x1e597e38 + full_name: "drm_warn_on_modeset_not_all_locked" +} elf_symbol { id: 0x9a93a123 name: "drm_writeback_cleanup_job" @@ -369163,6 +370823,15 @@ elf_symbol { type_id: 0x167935b9 full_name: "drop_nlink" } +elf_symbol { + id: 0x367672f6 + name: "drop_super" + is_defined: true + symbol_type: FUNCTION + crc: 0xa2b9262b + type_id: 0x1923cb99 + full_name: "drop_super" +} elf_symbol { id: 0xe2b96ffd name: "dst_cache_destroy" @@ -370117,6 +371786,24 @@ elf_symbol { type_id: 0x8432b9df full_name: "fasync_helper" } +elf_symbol { + id: 0x69cfb246 + name: "fat_time_fat2unix" + is_defined: true + symbol_type: FUNCTION + crc: 0x21adac54 + type_id: 0x1ed2fdaa + full_name: "fat_time_fat2unix" +} +elf_symbol { + id: 0xcbfddb66 + name: "fat_time_unix2fat" + is_defined: true + symbol_type: FUNCTION + crc: 0x5d216602 + type_id: 0x1efdc546 + full_name: "fat_time_unix2fat" +} elf_symbol { id: 0xc56006c7 name: "fault_in_iov_iter_readable" @@ -373144,6 +374831,15 @@ elf_symbol { type_id: 0x9f5ff0f6 full_name: "gpiochip_irq_reqres" } +elf_symbol { + id: 0x6e6c9891 + name: "gpiochip_line_is_irq" + is_defined: true + symbol_type: FUNCTION + crc: 0xdaafae4f + type_id: 0xf98bdd41 + full_name: "gpiochip_line_is_irq" +} elf_symbol { id: 0x65492c23 name: "gpiochip_line_is_valid" @@ -374440,6 +376136,15 @@ elf_symbol { type_id: 0x9f2e9dbc full_name: "hwspin_lock_free" } +elf_symbol { + id: 0xf9b62266 + name: "hwspin_lock_register" + is_defined: true + symbol_type: FUNCTION + crc: 0x411c126b + type_id: 0x9e6e3078 + full_name: "hwspin_lock_register" +} elf_symbol { id: 0xaa95b979 name: "hwspin_lock_request_specific" @@ -374449,6 +376154,15 @@ elf_symbol { type_id: 0xd208e2cb full_name: "hwspin_lock_request_specific" } +elf_symbol { + id: 0xfad21763 + name: "hwspin_lock_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x23fa971e + type_id: 0x9e68e60a + full_name: "hwspin_lock_unregister" +} elf_symbol { id: 0xe15d2559 name: "hypervisor_kobj" @@ -375709,6 +377423,24 @@ elf_symbol { type_id: 0x884063ea full_name: "iio_get_time_ns" } +elf_symbol { + id: 0x2c6f9f9a + name: "iio_map_array_register" + is_defined: true + symbol_type: FUNCTION + crc: 0x4e6fb213 + type_id: 0x9bedd31c + full_name: "iio_map_array_register" +} +elf_symbol { + id: 0xa4bca904 + name: "iio_map_array_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0xa720e467 + type_id: 0x9ba2048f + full_name: "iio_map_array_unregister" +} elf_symbol { id: 0x2dd4437a name: "iio_pollfunc_store_time" @@ -376159,6 +377891,15 @@ elf_symbol { type_id: 0x18c93498 full_name: "init_net" } +elf_symbol { + id: 0xb79bab94 + name: "init_on_alloc" + is_defined: true + symbol_type: OBJECT + crc: 0x954cef6f + type_id: 0xd2755d5f + full_name: "init_on_alloc" +} elf_symbol { id: 0x86c8a137 name: "init_on_free" @@ -377221,6 +378962,15 @@ elf_symbol { type_id: 0x9d16dd74 full_name: "iommu_unregister_device_fault_handler" } +elf_symbol { + id: 0x45ab591d + name: "ioport_resource" + is_defined: true + symbol_type: OBJECT + crc: 0x6bbf1b3e + type_id: 0xc7736674 + full_name: "ioport_resource" +} elf_symbol { id: 0xa0390871 name: "ioremap_prot" @@ -377572,6 +379322,24 @@ elf_symbol { type_id: 0x3d278a00 full_name: "ipv6_stub" } +elf_symbol { + id: 0x5ba96acf + name: "ir_raw_event_handle" + is_defined: true + symbol_type: FUNCTION + crc: 0x2954c918 + type_id: 0x111b6c97 + full_name: "ir_raw_event_handle" +} +elf_symbol { + id: 0xd15ab841 + name: "ir_raw_event_store" + is_defined: true + symbol_type: FUNCTION + crc: 0x886bccae + type_id: 0x9cbe9fe5 + full_name: "ir_raw_event_store" +} elf_symbol { id: 0x915bc321 name: "ir_raw_event_store_edge" @@ -378148,6 +379916,15 @@ elf_symbol { type_id: 0x85d454a8 full_name: "irq_set_parent" } +elf_symbol { + id: 0x83cf5af5 + name: "irq_setup_alt_chip" + is_defined: true + symbol_type: FUNCTION + crc: 0xd4588da0 + type_id: 0x9e49e56e + full_name: "irq_setup_alt_chip" +} elf_symbol { id: 0x3b8e2bac name: "irq_stat" @@ -378995,6 +380772,15 @@ elf_symbol { type_id: 0x1b45f00a full_name: "kmem_cache_free" } +elf_symbol { + id: 0x7d2abcd7 + name: "kmem_cache_size" + is_defined: true + symbol_type: FUNCTION + crc: 0x26dcf5b6 + type_id: 0xc5642af6 + full_name: "kmem_cache_size" +} elf_symbol { id: 0xc5292cdd name: "kmemdup" @@ -381173,6 +382959,15 @@ elf_symbol { type_id: 0x1510b6d0 full_name: "media_device_unregister" } +elf_symbol { + id: 0x9217871e + name: "media_device_unregister_entity" + is_defined: true + symbol_type: FUNCTION + crc: 0x514e5de9 + type_id: 0x173d80e7 + full_name: "media_device_unregister_entity" +} elf_symbol { id: 0xf60a5d60 name: "media_devnode_create" @@ -381619,6 +383414,15 @@ elf_symbol { binding: WEAK crc: 0xdcb764ad } +elf_symbol { + id: 0x3e836f55 + name: "memset16" + is_defined: true + symbol_type: FUNCTION + crc: 0x654449c3 + type_id: 0x5dfb031c + full_name: "memset16" +} elf_symbol { id: 0x4742ac18 name: "memset32" @@ -383032,6 +384836,15 @@ elf_symbol { type_id: 0x1c31d966 full_name: "netdev_features_change" } +elf_symbol { + id: 0x980489ec + name: "netdev_get_name" + is_defined: true + symbol_type: FUNCTION + crc: 0x7069f1bc + type_id: 0x9ea3b9a0 + full_name: "netdev_get_name" +} elf_symbol { id: 0x1a34a34f name: "netdev_increment_features" @@ -384445,6 +386258,15 @@ elf_symbol { type_id: 0xdd32bce5 full_name: "of_clk_hw_onecell_get" } +elf_symbol { + id: 0x36058f3f + name: "of_clk_hw_register" + is_defined: true + symbol_type: FUNCTION + crc: 0x68222cc8 + type_id: 0x90b7b149 + full_name: "of_clk_hw_register" +} elf_symbol { id: 0xebf521c2 name: "of_clk_hw_simple_get" @@ -385210,6 +387032,15 @@ elf_symbol { type_id: 0xbce9e1eb full_name: "of_icc_xlate_onecell" } +elf_symbol { + id: 0x21b8efef + name: "of_io_request_and_map" + is_defined: true + symbol_type: FUNCTION + crc: 0x51499fb7 + type_id: 0x5a19767d + full_name: "of_io_request_and_map" +} elf_symbol { id: 0xb6e53400 name: "of_iomap" @@ -388246,6 +390077,15 @@ elf_symbol { type_id: 0x10219d88 full_name: "phy_put" } +elf_symbol { + id: 0x4cab5615 + name: "phy_queue_state_machine" + is_defined: true + symbol_type: FUNCTION + crc: 0x91f62051 + type_id: 0x1c082c20 + full_name: "phy_queue_state_machine" +} elf_symbol { id: 0x1a84af17 name: "phy_read_mmd" @@ -388417,6 +390257,15 @@ elf_symbol { type_id: 0x9109cd4f full_name: "phy_sfp_probe" } +elf_symbol { + id: 0x4d3be8fa + name: "phy_speed_to_str" + is_defined: true + symbol_type: FUNCTION + crc: 0xe4b818c3 + type_id: 0x8b8c2368 + full_name: "phy_speed_to_str" +} elf_symbol { id: 0x6e315775 name: "phy_start" @@ -389047,6 +390896,15 @@ elf_symbol { type_id: 0x8ce1baa0 full_name: "pinctrl_gpio_direction_output" } +elf_symbol { + id: 0x54a103db + name: "pinctrl_gpio_set_config" + is_defined: true + symbol_type: FUNCTION + crc: 0x9b92d16e + type_id: 0x8c2c6f32 + full_name: "pinctrl_gpio_set_config" +} elf_symbol { id: 0x173c6399 name: "pinctrl_lookup_state" @@ -390559,6 +392417,24 @@ elf_symbol { type_id: 0x3962f9e8 full_name: "proc_symlink" } +elf_symbol { + id: 0x34a73ce1 + name: "profile_event_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xa389a49a + type_id: 0x910fac6a + full_name: "profile_event_register" +} +elf_symbol { + id: 0xedc563f7 + name: "profile_event_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0xdd391eff + type_id: 0x910fac6a + full_name: "profile_event_unregister" +} elf_symbol { id: 0x2197c0b9 name: "proto_register" @@ -391459,6 +393335,33 @@ elf_symbol { type_id: 0x11085c29 full_name: "rb_replace_node" } +elf_symbol { + id: 0x2f505fb1 + name: "rc_keydown" + is_defined: true + symbol_type: FUNCTION + crc: 0xce3ac2dc + type_id: 0x1075e2ed + full_name: "rc_keydown" +} +elf_symbol { + id: 0x44afa897 + name: "rc_map_register" + is_defined: true + symbol_type: FUNCTION + crc: 0xb960f15c + type_id: 0x98ac2a74 + full_name: "rc_map_register" +} +elf_symbol { + id: 0x449f96cf + name: "rc_map_unregister" + is_defined: true + symbol_type: FUNCTION + crc: 0x2ed90ced + type_id: 0x15b498c8 + full_name: "rc_map_unregister" +} elf_symbol { id: 0xdbf9c67a name: "rcu_barrier" @@ -393322,6 +395225,15 @@ elf_symbol { type_id: 0x978438bd full_name: "reset_control_reset" } +elf_symbol { + id: 0xb5e4cc08 + name: "reset_control_status" + is_defined: true + symbol_type: FUNCTION + crc: 0x8c743fb6 + type_id: 0x978438bd + full_name: "reset_control_status" +} elf_symbol { id: 0xd41c441b name: "reset_controller_register" @@ -396049,6 +397961,15 @@ elf_symbol { type_id: 0x1d80f189 full_name: "serdev_device_wait_until_sent" } +elf_symbol { + id: 0x3a629e14 + name: "serdev_device_write" + is_defined: true + symbol_type: FUNCTION + crc: 0x578962bc + type_id: 0x93b7b77f + full_name: "serdev_device_write" +} elf_symbol { id: 0x6e10178a name: "serdev_device_write_buf" @@ -396067,6 +397988,15 @@ elf_symbol { type_id: 0x1e70c9ff full_name: "serdev_device_write_flush" } +elf_symbol { + id: 0x826ffe72 + name: "serdev_device_write_wakeup" + is_defined: true + symbol_type: FUNCTION + crc: 0x0d49287e + type_id: 0x1e70c9ff + full_name: "serdev_device_write_wakeup" +} elf_symbol { id: 0x98b882af name: "serial8250_do_pm" @@ -396742,6 +398672,15 @@ elf_symbol { type_id: 0x10d0da4c full_name: "show_regs" } +elf_symbol { + id: 0x59a21b13 + name: "shrink_slab" + is_defined: true + symbol_type: FUNCTION + crc: 0xbc86f3ec + type_id: 0x0c5f338c + full_name: "shrink_slab" +} elf_symbol { id: 0xaba9754d name: "si_mem_available" @@ -397022,6 +398961,15 @@ elf_symbol { type_id: 0x10572c13 full_name: "skb_add_rx_frag" } +elf_symbol { + id: 0x34556105 + name: "skb_append" + is_defined: true + symbol_type: FUNCTION + crc: 0x58422e60 + type_id: 0x11d96a86 + full_name: "skb_append" +} elf_symbol { id: 0x736f4bcb name: "skb_append_pagefrags" @@ -397832,6 +399780,42 @@ elf_symbol { type_id: 0x1c27266a full_name: "snd_dma_free_pages" } +elf_symbol { + id: 0xa3379f89 + name: "snd_dmaengine_pcm_close_release_chan" + is_defined: true + symbol_type: FUNCTION + crc: 0xec0aad1e + type_id: 0x98aeb261 + full_name: "snd_dmaengine_pcm_close_release_chan" +} +elf_symbol { + id: 0x5604a4fb + name: "snd_dmaengine_pcm_get_chan" + is_defined: true + symbol_type: FUNCTION + crc: 0x84522a0f + type_id: 0x8233b356 + full_name: "snd_dmaengine_pcm_get_chan" +} +elf_symbol { + id: 0xa6fbd01c + name: "snd_dmaengine_pcm_open" + is_defined: true + symbol_type: FUNCTION + crc: 0xaf6cbb11 + type_id: 0x9847d2a8 + full_name: "snd_dmaengine_pcm_open" +} +elf_symbol { + id: 0x9c327127 + name: "snd_dmaengine_pcm_pointer" + is_defined: true + symbol_type: FUNCTION + crc: 0x25ffc596 + type_id: 0x2f31eea6 + full_name: "snd_dmaengine_pcm_pointer" +} elf_symbol { id: 0x2e657b50 name: "snd_dmaengine_pcm_prepare_slave_config" @@ -397859,6 +399843,15 @@ elf_symbol { type_id: 0x1ec5beaa full_name: "snd_dmaengine_pcm_set_config_from_dai_data" } +elf_symbol { + id: 0x800ec478 + name: "snd_dmaengine_pcm_trigger" + is_defined: true + symbol_type: FUNCTION + crc: 0x971271c8 + type_id: 0x9932312d + full_name: "snd_dmaengine_pcm_trigger" +} elf_symbol { id: 0xf8dd0a45 name: "snd_hwdep_new" @@ -399731,6 +401724,15 @@ elf_symbol { type_id: 0x11cb8bd5 full_name: "sock_efree" } +elf_symbol { + id: 0xd661cceb + name: "sock_from_file" + is_defined: true + symbol_type: FUNCTION + crc: 0x541bec09 + type_id: 0x229f1818 + full_name: "sock_from_file" +} elf_symbol { id: 0x4ece0732 name: "sock_gen_put" @@ -400280,6 +402282,15 @@ elf_symbol { type_id: 0x10af3538 full_name: "spi_unregister_controller" } +elf_symbol { + id: 0x648ea3a7 + name: "spi_unregister_device" + is_defined: true + symbol_type: FUNCTION + crc: 0xaf0c6cf8 + type_id: 0x14287f03 + full_name: "spi_unregister_device" +} elf_symbol { id: 0xf74b4f61 name: "spi_write_then_read" @@ -401984,6 +403995,15 @@ elf_symbol { type_id: 0x98511587 full_name: "tcf_unregister_action" } +elf_symbol { + id: 0xb4592621 + name: "tcp_done" + is_defined: true + symbol_type: FUNCTION + crc: 0x00b1358f + type_id: 0x17c95d08 + full_name: "tcp_done" +} elf_symbol { id: 0xeb0e3e9b name: "tcp_hashinfo" @@ -402029,6 +404049,15 @@ elf_symbol { type_id: 0x42a927f9 full_name: "tcp_reno_undo_cwnd" } +elf_symbol { + id: 0x862e9de5 + name: "tcp_send_active_reset" + is_defined: true + symbol_type: FUNCTION + crc: 0xfedb3bc4 + type_id: 0x140fc677 + full_name: "tcp_send_active_reset" +} elf_symbol { id: 0xe6a46ba8 name: "tcp_slow_start" @@ -402056,6 +404085,15 @@ elf_symbol { type_id: 0x17c95d08 full_name: "tcp_sock_set_nodelay" } +elf_symbol { + id: 0xef808179 + name: "tcp_sync_mss" + is_defined: true + symbol_type: FUNCTION + crc: 0xca5e7028 + type_id: 0xcaae52cc + full_name: "tcp_sync_mss" +} elf_symbol { id: 0xefab10bf name: "tcp_unregister_congestion_control" @@ -404540,6 +406578,24 @@ elf_symbol { type_id: 0x127accc9 full_name: "udp4_hwcsum" } +elf_symbol { + id: 0x7764a4dc + name: "udp4_lib_lookup" + is_defined: true + symbol_type: FUNCTION + crc: 0xafe8b903 + type_id: 0x6cfb5677 + full_name: "udp4_lib_lookup" +} +elf_symbol { + id: 0xec561477 + name: "udp6_lib_lookup" + is_defined: true + symbol_type: FUNCTION + crc: 0xabc1da1b + type_id: 0x6f9cf071 + full_name: "udp6_lib_lookup" +} elf_symbol { id: 0x93e3a105 name: "udp6_set_csum" @@ -407870,6 +409926,15 @@ elf_symbol { type_id: 0x01ecbbc0 full_name: "v4l2_ctrl_auto_cluster" } +elf_symbol { + id: 0xe41a5275 + name: "v4l2_ctrl_cluster" + is_defined: true + symbol_type: FUNCTION + crc: 0xc6c7e356 + type_id: 0x01e75921 + full_name: "v4l2_ctrl_cluster" +} elf_symbol { id: 0x218d39b6 name: "v4l2_ctrl_find" @@ -407897,6 +409962,15 @@ elf_symbol { type_id: 0x8b00bfc7 full_name: "v4l2_ctrl_g_ctrl_int64" } +elf_symbol { + id: 0xcab5ad52 + name: "v4l2_ctrl_get_menu" + is_defined: true + symbol_type: FUNCTION + crc: 0x315de2cf + type_id: 0xc9a5aa04 + full_name: "v4l2_ctrl_get_menu" +} elf_symbol { id: 0x1b3bffbd name: "v4l2_ctrl_get_name" @@ -408059,6 +410133,33 @@ elf_symbol { type_id: 0x912c9057 full_name: "v4l2_ctrl_subscribe_event" } +elf_symbol { + id: 0xacd6c6a5 + name: "v4l2_ctrl_type_op_equal" + is_defined: true + symbol_type: FUNCTION + crc: 0xbc7ad599 + type_id: 0xf2f112a6 + full_name: "v4l2_ctrl_type_op_equal" +} +elf_symbol { + id: 0xcc09aff4 + name: "v4l2_ctrl_type_op_init" + is_defined: true + symbol_type: FUNCTION + crc: 0xdad08393 + type_id: 0x1f3c2ec8 + full_name: "v4l2_ctrl_type_op_init" +} +elf_symbol { + id: 0xc9069849 + name: "v4l2_ctrl_type_op_log" + is_defined: true + symbol_type: FUNCTION + crc: 0x2371f180 + type_id: 0x1c155f01 + full_name: "v4l2_ctrl_type_op_log" +} elf_symbol { id: 0x426bca09 name: "v4l2_device_register" @@ -408302,6 +410403,15 @@ elf_symbol { type_id: 0x9cfc5a75 full_name: "v4l2_fwnode_endpoint_parse" } +elf_symbol { + id: 0x6eac099d + name: "v4l2_g_ctrl" + is_defined: true + symbol_type: FUNCTION + crc: 0xe37c2dcc + type_id: 0x9dcf11c9 + full_name: "v4l2_g_ctrl" +} elf_symbol { id: 0x58330374 name: "v4l2_g_parm_cap" @@ -408320,6 +410430,15 @@ elf_symbol { type_id: 0x8798b290 full_name: "v4l2_get_link_freq" } +elf_symbol { + id: 0xa8467fd4 + name: "v4l2_i2c_new_subdev" + is_defined: true + symbol_type: FUNCTION + crc: 0x7412770a + type_id: 0x8af54231 + full_name: "v4l2_i2c_new_subdev" +} elf_symbol { id: 0x5e36dba6 name: "v4l2_i2c_subdev_init" @@ -408338,6 +410457,15 @@ elf_symbol { type_id: 0x1ce56ba2 full_name: "v4l2_m2m_buf_copy_metadata" } +elf_symbol { + id: 0x75d8eadc + name: "v4l2_m2m_buf_done_and_job_finish" + is_defined: true + symbol_type: FUNCTION + crc: 0xbc6ccb59 + type_id: 0x12e1d579 + full_name: "v4l2_m2m_buf_done_and_job_finish" +} elf_symbol { id: 0x31a465c5 name: "v4l2_m2m_buf_queue" @@ -408572,6 +410700,15 @@ elf_symbol { type_id: 0x12eb3fc9 full_name: "v4l2_m2m_job_finish" } +elf_symbol { + id: 0x2877aa0d + name: "v4l2_m2m_last_buf" + is_defined: true + symbol_type: FUNCTION + crc: 0x2d5f3b25 + type_id: 0x318cc368 + full_name: "v4l2_m2m_last_buf" +} elf_symbol { id: 0x1aa035d8 name: "v4l2_m2m_last_buffer_done" @@ -408950,6 +411087,15 @@ elf_symbol { type_id: 0xe32fa2b6 full_name: "vb2_dma_contig_memops" } +elf_symbol { + id: 0xd187d6a0 + name: "vb2_dma_contig_set_max_seg_size" + is_defined: true + symbol_type: FUNCTION + crc: 0x2dce21d6 + type_id: 0x9c00c8ec + full_name: "vb2_dma_contig_set_max_seg_size" +} elf_symbol { id: 0xde8f3957 name: "vb2_dma_sg_memops" @@ -412295,6 +414441,7 @@ interface { symbol_id: 0xc8acd38c symbol_id: 0x1dfbf9ac symbol_id: 0x91810af1 + symbol_id: 0xc50a781f symbol_id: 0x47a4997d symbol_id: 0x92f8c9de symbol_id: 0x3ac6d939 @@ -412403,6 +414550,7 @@ interface { symbol_id: 0x29a11d8a symbol_id: 0x208b66fa symbol_id: 0x4a440f54 + symbol_id: 0xda0019b0 symbol_id: 0x62009211 symbol_id: 0x6a35982c symbol_id: 0xe0752d30 @@ -412659,6 +414807,7 @@ interface { symbol_id: 0x5e9ed424 symbol_id: 0xada127d2 symbol_id: 0xd593b3ef + symbol_id: 0xea6452e1 symbol_id: 0x1cc3aec5 symbol_id: 0xb12728da symbol_id: 0x54bc5972 @@ -412676,6 +414825,8 @@ interface { symbol_id: 0x343adff1 symbol_id: 0x93a4717b symbol_id: 0x49c69e22 + symbol_id: 0xb7d91f76 + symbol_id: 0x158bf9d3 symbol_id: 0x1fca37bf symbol_id: 0xe6702595 symbol_id: 0x9e91661b @@ -412739,6 +414890,7 @@ interface { symbol_id: 0x49cebcae symbol_id: 0x22de652b symbol_id: 0xf928bf8a + symbol_id: 0x6f5c8275 symbol_id: 0xe44dacb1 symbol_id: 0x0c9da1aa symbol_id: 0xc168df93 @@ -412754,7 +414906,11 @@ interface { symbol_id: 0x0b2ba11b symbol_id: 0xe17999f4 symbol_id: 0x721b87b7 + symbol_id: 0x724577f8 + symbol_id: 0xac55c769 symbol_id: 0xacaadcc9 + symbol_id: 0x3246acbb + symbol_id: 0xb4d5ffdc symbol_id: 0x13b0736e symbol_id: 0xc72f2012 symbol_id: 0xd14f3adb @@ -412811,6 +414967,7 @@ interface { symbol_id: 0xedb34a44 symbol_id: 0xb841c45e symbol_id: 0xe4ec133d + symbol_id: 0x0b48ad7a symbol_id: 0x874fcdb2 symbol_id: 0xaa3f6a65 symbol_id: 0xa2fe718f @@ -412818,6 +414975,7 @@ interface { symbol_id: 0x70e34072 symbol_id: 0x53263f73 symbol_id: 0xe828d15b + symbol_id: 0xda8424a2 symbol_id: 0x4d31a413 symbol_id: 0xe7f6f975 symbol_id: 0x78accdce @@ -412830,6 +414988,9 @@ interface { symbol_id: 0x0562cb47 symbol_id: 0x08f4cbb0 symbol_id: 0xbc7bbb37 + symbol_id: 0x445e3749 + symbol_id: 0x3f14ea30 + symbol_id: 0x64e397a9 symbol_id: 0x58e7556b symbol_id: 0x2ecf85e9 symbol_id: 0x34a01a22 @@ -412894,6 +415055,7 @@ interface { symbol_id: 0x7b03aae7 symbol_id: 0x92373f85 symbol_id: 0xafc53276 + symbol_id: 0xa1c053cb symbol_id: 0x5e5d9a70 symbol_id: 0x104ffeec symbol_id: 0x6d4f31c4 @@ -413165,6 +415327,7 @@ interface { symbol_id: 0x325e746a symbol_id: 0x4db9ff7c symbol_id: 0x9fe99d05 + symbol_id: 0xff7bbbff symbol_id: 0x82ce823f symbol_id: 0x474d211c symbol_id: 0xeb9f1c78 @@ -413182,6 +415345,8 @@ interface { symbol_id: 0x2121385f symbol_id: 0x50a83025 symbol_id: 0x6d970e8c + symbol_id: 0xb34d9200 + symbol_id: 0xf61927fd symbol_id: 0xa3ede5d5 symbol_id: 0x539bf337 symbol_id: 0x901d0e89 @@ -413245,6 +415410,7 @@ interface { symbol_id: 0xf2890610 symbol_id: 0xa3d5f70d symbol_id: 0x72c79d80 + symbol_id: 0x0f593caf symbol_id: 0xb6da564f symbol_id: 0x1daf6454 symbol_id: 0x3c1c2029 @@ -413260,7 +415426,11 @@ interface { symbol_id: 0x68d68809 symbol_id: 0x76e879b6 symbol_id: 0xae5bbde9 + symbol_id: 0xdfe6a3ee + symbol_id: 0x6bc613d3 symbol_id: 0x20d2ceb3 + symbol_id: 0x4a5e6e41 + symbol_id: 0x352038ba symbol_id: 0xa4c454d8 symbol_id: 0x7d42b7c8 symbol_id: 0x3d63616d @@ -413317,6 +415487,7 @@ interface { symbol_id: 0xaaf6a826 symbol_id: 0xff2bccb8 symbol_id: 0xcfab6e83 + symbol_id: 0x1f07c260 symbol_id: 0xb6de2d88 symbol_id: 0xd7ceb15f symbol_id: 0x923147c1 @@ -413324,6 +415495,7 @@ interface { symbol_id: 0x6ed615c4 symbol_id: 0xd860c719 symbol_id: 0x5b6bc3a9 + symbol_id: 0x88acddf0 symbol_id: 0x823654f5 symbol_id: 0x42ad45a3 symbol_id: 0x0a5014f0 @@ -413336,6 +415508,9 @@ interface { symbol_id: 0x4a999b29 symbol_id: 0x547e3912 symbol_id: 0x4ed55b15 + symbol_id: 0x052557d7 + symbol_id: 0x6fb8113a + symbol_id: 0xab09fdb7 symbol_id: 0x39e68fed symbol_id: 0xefb9e5a3 symbol_id: 0x3fe0157c @@ -413400,6 +415575,7 @@ interface { symbol_id: 0xef6e6795 symbol_id: 0xb2d6f207 symbol_id: 0x53afc62c + symbol_id: 0x66f49065 symbol_id: 0x3b13741e symbol_id: 0xd8f3ca82 symbol_id: 0xff315556 @@ -413604,6 +415780,7 @@ interface { symbol_id: 0x520c1997 symbol_id: 0x2d3715da symbol_id: 0x7ff45ec2 + symbol_id: 0x97ee5cc4 symbol_id: 0xc447be59 symbol_id: 0xc6d0ad0a symbol_id: 0x9403cfad @@ -413612,6 +415789,7 @@ interface { symbol_id: 0xd634ca29 symbol_id: 0xd672b08d symbol_id: 0xb61718ed + symbol_id: 0x2d62fd75 symbol_id: 0x4f8a812a symbol_id: 0x1eee53db symbol_id: 0xac417394 @@ -413659,6 +415837,7 @@ interface { symbol_id: 0xcdba3a55 symbol_id: 0x7f80f1f5 symbol_id: 0x977cc973 + symbol_id: 0x154309df symbol_id: 0x49201db3 symbol_id: 0xacc709b0 symbol_id: 0x2b2698f0 @@ -414039,7 +416218,9 @@ interface { symbol_id: 0x7fbd0d58 symbol_id: 0x06f2ea68 symbol_id: 0xc8e117f2 + symbol_id: 0x68c84c24 symbol_id: 0x40da6f1f + symbol_id: 0x9d70bb80 symbol_id: 0xdf9b5d08 symbol_id: 0x56748a0b symbol_id: 0x430bfeda @@ -414379,6 +416560,8 @@ interface { symbol_id: 0x87df61b4 symbol_id: 0x8abf96ef symbol_id: 0x33035bf6 + symbol_id: 0x9a2dbfca + symbol_id: 0xafae816a symbol_id: 0x47c790a6 symbol_id: 0x63999db6 symbol_id: 0xf58cd5f2 @@ -414565,6 +416748,7 @@ interface { symbol_id: 0x70cc5ef2 symbol_id: 0xf770e060 symbol_id: 0xfe156c9a + symbol_id: 0x4cc1057f symbol_id: 0xf569682d symbol_id: 0x8837a38c symbol_id: 0x0d9ec99a @@ -414685,6 +416869,7 @@ interface { symbol_id: 0xc08bcc4a symbol_id: 0x09b1d689 symbol_id: 0x7c6f39ac + symbol_id: 0x9f156785 symbol_id: 0xadafc9a7 symbol_id: 0x502d0b80 symbol_id: 0x3c0cefc0 @@ -414698,6 +416883,8 @@ interface { symbol_id: 0xb7d7707e symbol_id: 0xdb0692a6 symbol_id: 0xfafcdec5 + symbol_id: 0xbc1b7b65 + symbol_id: 0x2df89a54 symbol_id: 0x752a2b5b symbol_id: 0xca559b71 symbol_id: 0xa5b63f73 @@ -414784,6 +416971,7 @@ interface { symbol_id: 0x279bd3a7 symbol_id: 0x0e847130 symbol_id: 0xd13969dd + symbol_id: 0x7ab07b7f symbol_id: 0xe2ee283f symbol_id: 0xf5808a3e symbol_id: 0x2762abc3 @@ -414809,6 +416997,7 @@ interface { symbol_id: 0x3b69b427 symbol_id: 0x1d7e2299 symbol_id: 0x23e816b8 + symbol_id: 0x451c2c07 symbol_id: 0xd0e88c9a symbol_id: 0x28fa142c symbol_id: 0x425ac3ac @@ -414870,6 +417059,7 @@ interface { symbol_id: 0xbd678b0e symbol_id: 0x400fac71 symbol_id: 0xdae2cdaf + symbol_id: 0xac16424d symbol_id: 0x6bebb14a symbol_id: 0x9c1c9dfa symbol_id: 0xb50c088c @@ -415004,6 +417194,8 @@ interface { symbol_id: 0x69a31cde symbol_id: 0xfbc28ac3 symbol_id: 0xe2f527ca + symbol_id: 0x005134ba + symbol_id: 0x877c985c symbol_id: 0x51df4337 symbol_id: 0xa27d2f32 symbol_id: 0xa978b6c8 @@ -415113,6 +417305,7 @@ interface { symbol_id: 0xc7970f23 symbol_id: 0x5758ca8d symbol_id: 0x8f687080 + symbol_id: 0x3948069d symbol_id: 0x128b55c8 symbol_id: 0xd2191311 symbol_id: 0x585410d0 @@ -415287,6 +417480,7 @@ interface { symbol_id: 0xb3c9d206 symbol_id: 0xcd5d6af6 symbol_id: 0xac3356ce + symbol_id: 0xe0832a10 symbol_id: 0x0768ccdb symbol_id: 0x4310a9de symbol_id: 0x65aa6e41 @@ -415331,7 +417525,12 @@ interface { symbol_id: 0x1e7c4dd7 symbol_id: 0xb8f84f03 symbol_id: 0xad1fada2 + symbol_id: 0x67c8f92b + symbol_id: 0xc2c5f476 + symbol_id: 0xf73ea9f7 + symbol_id: 0xdc9144c7 symbol_id: 0x7993ff4e + symbol_id: 0xd8f127ed symbol_id: 0x9a93a123 symbol_id: 0x2f0e7bff symbol_id: 0x716e8cc6 @@ -415341,6 +417540,7 @@ interface { symbol_id: 0x1f1ab070 symbol_id: 0x66dcfd31 symbol_id: 0x4dae13e9 + symbol_id: 0x367672f6 symbol_id: 0xe2b96ffd symbol_id: 0x126bb89f symbol_id: 0x2e0e7810 @@ -415447,6 +417647,8 @@ interface { symbol_id: 0xad3eb214 symbol_id: 0xb107d2cd symbol_id: 0x8628f24d + symbol_id: 0x69cfb246 + symbol_id: 0xcbfddb66 symbol_id: 0xc56006c7 symbol_id: 0x639b2403 symbol_id: 0xbbfb394e @@ -415783,6 +417985,7 @@ interface { symbol_id: 0x04d3cd28 symbol_id: 0xf7c116d2 symbol_id: 0x6b47e2c7 + symbol_id: 0x6e6c9891 symbol_id: 0x65492c23 symbol_id: 0xa106a350 symbol_id: 0x59b3b64e @@ -415927,7 +418130,9 @@ interface { symbol_id: 0x5af755ee symbol_id: 0xecce2e76 symbol_id: 0x9a65c4be + symbol_id: 0xf9b62266 symbol_id: 0xaa95b979 + symbol_id: 0xfad21763 symbol_id: 0xe15d2559 symbol_id: 0x9cf659eb symbol_id: 0xeadbb948 @@ -416068,6 +418273,8 @@ interface { symbol_id: 0xef661661 symbol_id: 0x83815ff1 symbol_id: 0x01f28688 + symbol_id: 0x2c6f9f9a + symbol_id: 0xa4bca904 symbol_id: 0x2dd4437a symbol_id: 0x23b23c74 symbol_id: 0x88fdf87a @@ -416118,6 +418325,7 @@ interface { symbol_id: 0x7ded1ffe symbol_id: 0xe42479db symbol_id: 0xd8b14976 + symbol_id: 0xb79bab94 symbol_id: 0x86c8a137 symbol_id: 0x64e448f4 symbol_id: 0x4e874464 @@ -416236,6 +418444,7 @@ interface { symbol_id: 0x2d2eb8bc symbol_id: 0x08ecc90d symbol_id: 0x42137268 + symbol_id: 0x45ab591d symbol_id: 0xa0390871 symbol_id: 0xfb789e26 symbol_id: 0x382b3272 @@ -416275,6 +418484,8 @@ interface { symbol_id: 0xd70b3ff0 symbol_id: 0x1f294d29 symbol_id: 0xc610fcd6 + symbol_id: 0x5ba96acf + symbol_id: 0xd15ab841 symbol_id: 0x915bc321 symbol_id: 0xbf9d3356 symbol_id: 0xd8989bc0 @@ -416339,6 +418550,7 @@ interface { symbol_id: 0x5904d735 symbol_id: 0xcb7dc482 symbol_id: 0xaed00f8c + symbol_id: 0x83cf5af5 symbol_id: 0x3b8e2bac symbol_id: 0xc89a8e29 symbol_id: 0x92dfef70 @@ -416433,6 +418645,7 @@ interface { symbol_id: 0xa5a4fafa symbol_id: 0xc37ba22c symbol_id: 0xbce770e6 + symbol_id: 0x7d2abcd7 symbol_id: 0xc5292cdd symbol_id: 0xdaa011df symbol_id: 0xeecf2614 @@ -416675,6 +418888,7 @@ interface { symbol_id: 0xa54f3ef4 symbol_id: 0xe245d69b symbol_id: 0x84271f20 + symbol_id: 0x9217871e symbol_id: 0xf60a5d60 symbol_id: 0xea64439d symbol_id: 0x53ff8fb5 @@ -416725,6 +418939,7 @@ interface { symbol_id: 0x56171277 symbol_id: 0x67a278cb symbol_id: 0xd1412061 + symbol_id: 0x3e836f55 symbol_id: 0x4742ac18 symbol_id: 0x343d8d9d symbol_id: 0xabdeef21 @@ -416882,6 +419097,7 @@ interface { symbol_id: 0x2ebee953 symbol_id: 0xfac0e8e6 symbol_id: 0xeb2d9bd2 + symbol_id: 0x980489ec symbol_id: 0x1a34a34f symbol_id: 0x06bf2dbd symbol_id: 0x5635039f @@ -417039,6 +419255,7 @@ interface { symbol_id: 0x26767170 symbol_id: 0x40d34b30 symbol_id: 0xeb805131 + symbol_id: 0x36058f3f symbol_id: 0xebf521c2 symbol_id: 0x0fa1166f symbol_id: 0x9dc7df03 @@ -417124,6 +419341,7 @@ interface { symbol_id: 0x453bec03 symbol_id: 0x08284f40 symbol_id: 0xbd1c7f26 + symbol_id: 0x21b8efef symbol_id: 0xb6e53400 symbol_id: 0xa6b53b87 symbol_id: 0xa66a671b @@ -417461,6 +419679,7 @@ interface { symbol_id: 0x67bb32d8 symbol_id: 0xccd5125f symbol_id: 0xc7d3f838 + symbol_id: 0x4cab5615 symbol_id: 0x1a84af17 symbol_id: 0x13b5133e symbol_id: 0x7944625a @@ -417480,6 +419699,7 @@ interface { symbol_id: 0x61d52d25 symbol_id: 0xac255df6 symbol_id: 0xe1cb7751 + symbol_id: 0x4d3be8fa symbol_id: 0x6e315775 symbol_id: 0x10d51eda symbol_id: 0x94a5496d @@ -417550,6 +419770,7 @@ interface { symbol_id: 0x761cec78 symbol_id: 0x0707a7ce symbol_id: 0x470ca027 + symbol_id: 0x54a103db symbol_id: 0x173c6399 symbol_id: 0xecd5c994 symbol_id: 0xf439020c @@ -417718,6 +419939,8 @@ interface { symbol_id: 0x1561afad symbol_id: 0x7ba3baed symbol_id: 0xceb41cae + symbol_id: 0x34a73ce1 + symbol_id: 0xedc563f7 symbol_id: 0x2197c0b9 symbol_id: 0x830bfa0f symbol_id: 0x5a85390c @@ -417818,6 +420041,9 @@ interface { symbol_id: 0x829cc511 symbol_id: 0xd8d641e9 symbol_id: 0xf1e11c16 + symbol_id: 0x2f505fb1 + symbol_id: 0x44afa897 + symbol_id: 0x449f96cf symbol_id: 0xdbf9c67a symbol_id: 0xd1e79536 symbol_id: 0x2c564089 @@ -418025,6 +420251,7 @@ interface { symbol_id: 0x642147cd symbol_id: 0x9c7a2d6c symbol_id: 0x48fc2cb6 + symbol_id: 0xb5e4cc08 symbol_id: 0xd41c441b symbol_id: 0x8607d899 symbol_id: 0xaca7b406 @@ -418328,8 +420555,10 @@ interface { symbol_id: 0x39477e15 symbol_id: 0x05a66e98 symbol_id: 0x3c71822d + symbol_id: 0x3a629e14 symbol_id: 0x6e10178a symbol_id: 0x5d6a93ff + symbol_id: 0x826ffe72 symbol_id: 0x98b882af symbol_id: 0x2bb7ad6a symbol_id: 0x4bb58367 @@ -418405,6 +420634,7 @@ interface { symbol_id: 0x96bd64f2 symbol_id: 0x064eb0d1 symbol_id: 0xbf6056e5 + symbol_id: 0x59a21b13 symbol_id: 0xaba9754d symbol_id: 0x6a9fad39 symbol_id: 0x99c66454 @@ -418436,6 +420666,7 @@ interface { symbol_id: 0xa3febb65 symbol_id: 0x1bedb04f symbol_id: 0xd8114005 + symbol_id: 0x34556105 symbol_id: 0x736f4bcb symbol_id: 0x3ffd8828 symbol_id: 0x38f9f2a7 @@ -418526,9 +420757,14 @@ interface { symbol_id: 0x74d92df1 symbol_id: 0x7983b6b1 symbol_id: 0xafa6f89a + symbol_id: 0xa3379f89 + symbol_id: 0x5604a4fb + symbol_id: 0xa6fbd01c + symbol_id: 0x9c327127 symbol_id: 0x2e657b50 symbol_id: 0xf9680c5d symbol_id: 0x4b5d3ed2 + symbol_id: 0x800ec478 symbol_id: 0xf8dd0a45 symbol_id: 0x7d021e87 symbol_id: 0x8a143ba0 @@ -418737,6 +420973,7 @@ interface { symbol_id: 0x5ca98337 symbol_id: 0xbcf8b9bf symbol_id: 0x83497546 + symbol_id: 0xd661cceb symbol_id: 0x4ece0732 symbol_id: 0x284bec0f symbol_id: 0xb2cef8e2 @@ -418798,6 +421035,7 @@ interface { symbol_id: 0xdaf3a27e symbol_id: 0xbe2a8422 symbol_id: 0x38ac4651 + symbol_id: 0x648ea3a7 symbol_id: 0xf74b4f61 symbol_id: 0xf76668be symbol_id: 0xc1ff3a0f @@ -418988,14 +421226,17 @@ interface { symbol_id: 0xcc386657 symbol_id: 0x529a9e72 symbol_id: 0x99d5bf98 + symbol_id: 0xb4592621 symbol_id: 0xeb0e3e9b symbol_id: 0x5f96413a symbol_id: 0x34a062e9 symbol_id: 0x97edc1c5 symbol_id: 0xdb8e8104 + symbol_id: 0x862e9de5 symbol_id: 0xe6a46ba8 symbol_id: 0xb56d0844 symbol_id: 0x51ff5f80 + symbol_id: 0xef808179 symbol_id: 0xefab10bf symbol_id: 0x857e5dc9 symbol_id: 0x85459353 @@ -419272,6 +421513,8 @@ interface { symbol_id: 0xe750d0b7 symbol_id: 0x9cefccb0 symbol_id: 0xef1a96f5 + symbol_id: 0x7764a4dc + symbol_id: 0xec561477 symbol_id: 0x93e3a105 symbol_id: 0xf946dfdd symbol_id: 0xa7d65bf5 @@ -419642,9 +421885,11 @@ interface { symbol_id: 0xf440f7f1 symbol_id: 0xf39bae65 symbol_id: 0xfd78bf45 + symbol_id: 0xe41a5275 symbol_id: 0x218d39b6 symbol_id: 0xd71b366d symbol_id: 0xe2254576 + symbol_id: 0xcab5ad52 symbol_id: 0x1b3bffbd symbol_id: 0xd811c59d symbol_id: 0xd669e74b @@ -419663,6 +421908,9 @@ interface { symbol_id: 0x5f83fb51 symbol_id: 0x06acb36e symbol_id: 0xc62e4949 + symbol_id: 0xacd6c6a5 + symbol_id: 0xcc09aff4 + symbol_id: 0xc9069849 symbol_id: 0x426bca09 symbol_id: 0xabdb2ade symbol_id: 0xdc3fca57 @@ -419690,10 +421938,13 @@ interface { symbol_id: 0x7ba36329 symbol_id: 0x2643c2c9 symbol_id: 0xcb8b4f14 + symbol_id: 0x6eac099d symbol_id: 0x58330374 symbol_id: 0xdb18c924 + symbol_id: 0xa8467fd4 symbol_id: 0x5e36dba6 symbol_id: 0xbca2a56b + symbol_id: 0x75d8eadc symbol_id: 0x31a465c5 symbol_id: 0x101dc375 symbol_id: 0xc60ea189 @@ -419720,6 +421971,7 @@ interface { symbol_id: 0xd34d4e91 symbol_id: 0x2e26a86b symbol_id: 0x143e338b + symbol_id: 0x2877aa0d symbol_id: 0x1aa035d8 symbol_id: 0xaf1caca5 symbol_id: 0xb4198f5a @@ -419762,6 +422014,7 @@ interface { symbol_id: 0x7fb65c50 symbol_id: 0x61c086ce symbol_id: 0x03410164 + symbol_id: 0xd187d6a0 symbol_id: 0xde8f3957 symbol_id: 0x3997b003 symbol_id: 0xafcd1744 diff --git a/android/abi_gki_aarch64_asr b/android/abi_gki_aarch64_asr index c378a4b70c3f..c984ed96be74 100644 --- a/android/abi_gki_aarch64_asr +++ b/android/abi_gki_aarch64_asr @@ -41,3 +41,17 @@ # required by asr_drm.ko clk_set_rate_exclusive clk_rate_exclusive_put + +# required by mercury.ko + media_device_register_entity + media_device_unregister_entity + v4l2_ctrl_get_menu + v4l2_ctrl_type_op_equal + v4l2_ctrl_type_op_init + v4l2_ctrl_type_op_log + v4l2_m2m_buf_done_and_job_finish + v4l2_m2m_last_buf + +# required by jpu_heap.ko + kmem_cache_size + memset16 diff --git a/android/abi_gki_aarch64_bcmstb b/android/abi_gki_aarch64_bcmstb index 0998f7d29e70..0376d93363c3 100644 --- a/android/abi_gki_aarch64_bcmstb +++ b/android/abi_gki_aarch64_bcmstb @@ -355,7 +355,6 @@ nr_cpu_ids ns_capable of_address_to_resource - of_alias_get_id of_clk_get_by_name of_count_phandle_with_args of_device_get_match_data @@ -422,7 +421,6 @@ __platform_driver_register platform_driver_unregister platform_get_irq - platform_get_irq_byname platform_get_irq_byname_optional platform_get_irq_optional platform_get_resource @@ -747,18 +745,6 @@ vlan_vid_add vlan_vid_del -# required by 8250_bcm7271.ko - serial8250_do_set_termios - serial8250_do_shutdown - serial8250_do_startup - serial8250_get_port - serial8250_handle_irq - serial8250_register_8250_port - serial8250_resume_port - serial8250_suspend_port - serial8250_unregister_port - uart_write_wakeup - # required by ahci_brcm.ko phy_calibrate @@ -797,6 +783,7 @@ dma_sync_single_for_cpu of_get_ethdev_address of_platform_populate + platform_get_irq_byname __skb_pad synchronize_irq @@ -1069,6 +1056,7 @@ netif_schedule_queue netif_set_real_num_rx_queues netif_set_real_num_tx_queues + of_alias_get_id of_get_compatible_child of_phy_find_device phy_attach diff --git a/android/abi_gki_aarch64_exynosauto b/android/abi_gki_aarch64_exynosauto index 643e5949901f..8a9f0cc588b7 100644 --- a/android/abi_gki_aarch64_exynosauto +++ b/android/abi_gki_aarch64_exynosauto @@ -612,6 +612,8 @@ seq_putc seq_puts seq_read + serdev_device_write + serdev_device_write_wakeup set_cpus_allowed_ptr set_normalized_timespec64 sg_alloc_table diff --git a/android/abi_gki_aarch64_honor b/android/abi_gki_aarch64_honor index ffc84d30e5eb..c39002d8fcf9 100644 --- a/android/abi_gki_aarch64_honor +++ b/android/abi_gki_aarch64_honor @@ -2,6 +2,8 @@ __tracepoint_android_vh_get_page_wmark __tracepoint_android_vh_page_add_new_anon_rmap __tracepoint_android_vh_do_shrink_slab + __tracepoint_android_vh_should_fault_around + __traceiter_android_vh_should_fault_around __tracepoint_android_vh_shrink_slab_bypass __tracepoint_android_vh_mutex_init __tracepoint_android_vh_file_is_tiny_bypass @@ -14,6 +16,33 @@ __traceiter_android_vh_shrink_slab_bypass __traceiter_android_vh_mutex_init __traceiter_android_vh_file_is_tiny_bypass + __tracepoint_android_vh_do_read_fault + __tracepoint_android_vh_filemap_read + __tracepoint_android_vh_filemap_map_pages + __traceiter_android_vh_do_read_fault + __traceiter_android_vh_filemap_read + __traceiter_android_vh_filemap_map_pages __traceiter_android_vh_modify_scan_control __traceiter_android_vh_should_continue_reclaim __traceiter_android_vh_tune_fault_around_bytes + binder_alloc_copy_from_buffer + kfree + __kmalloc + mod_node_page_state + page_cache_sync_ra + proc_create + profile_event_register + profile_event_unregister + drop_super + si_swapinfo + __show_mem + single_open + sock_from_file + task_cputime_adjusted + tcp_sync_mss + netdev_get_name + tcp_send_active_reset + tcp_done + udp4_lib_lookup + udp6_lib_lookup + next_arg diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index b58300bbea2d..ec310139240c 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -554,6 +554,8 @@ devm_request_threaded_irq __devm_reset_control_get devm_reset_controller_register + devm_rproc_add + devm_rproc_alloc devm_rtc_allocate_device devm_rtc_nvmem_register __devm_rtc_register_device diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index 95d325b8f9d2..3b32e905b1b2 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -576,6 +576,7 @@ dma_direct_free dmaengine_unmap_put dma_fence_add_callback + dma_fence_allocate_private_stub dma_fence_array_create dma_fence_array_ops dma_fence_context_alloc @@ -1359,6 +1360,7 @@ mbox_controller_unregister mbox_free_channel mbox_request_channel + mbox_request_channel_byname mbox_send_message memchr memchr_inv @@ -2307,6 +2309,7 @@ teo_cpu_get_util_threshold teo_cpu_set_util_threshold thermal_cdev_update + thermal_cooling_device_register thermal_cooling_device_unregister thermal_of_cooling_device_register thermal_pressure @@ -2371,6 +2374,7 @@ __traceiter_android_rvh_set_user_nice __traceiter_android_rvh_set_user_nice_locked __traceiter_android_rvh_tick_entry + __traceiter_android_rvh_try_to_wake_up_success __traceiter_android_rvh_typec_tcpci_get_vbus __traceiter_android_rvh_uclamp_eff_get __traceiter_android_rvh_ufs_complete_init @@ -2399,12 +2403,14 @@ __traceiter_android_vh_meminfo_proc_show __traceiter_android_vh_mm_compaction_begin __traceiter_android_vh_mm_compaction_end + __traceiter_android_vh_mm_kcompactd_cpu_online __traceiter_android_vh_prio_inheritance __traceiter_android_vh_prio_restore __traceiter_android_vh_resume_end __traceiter_android_vh_rmqueue __traceiter_android_vh_scheduler_tick __traceiter_android_vh_setscheduler_uclamp + __traceiter_android_vh_set_task_comm __traceiter_android_vh_si_meminfo_adjust __traceiter_android_vh_sound_usb_support_cpu_suspend __traceiter_android_vh_sysrq_crash @@ -2426,6 +2432,7 @@ __traceiter_android_vh_ufs_update_sysfs __traceiter_android_vh_usb_dev_resume __traceiter_android_vh_use_amu_fie + __traceiter_android_vh_vmscan_kswapd_done __traceiter_clock_set_rate __traceiter_cma_alloc_finish __traceiter_cma_alloc_start @@ -2444,6 +2451,7 @@ __traceiter_mmap_lock_start_locking __traceiter_mm_vmscan_direct_reclaim_begin __traceiter_mm_vmscan_direct_reclaim_end + __traceiter_mm_vmscan_kswapd_wake __traceiter_pelt_cfs_tp __traceiter_pelt_dl_tp __traceiter_pelt_irq_tp @@ -2501,6 +2509,7 @@ __tracepoint_android_rvh_set_user_nice __tracepoint_android_rvh_set_user_nice_locked __tracepoint_android_rvh_tick_entry + __tracepoint_android_rvh_try_to_wake_up_success __tracepoint_android_rvh_typec_tcpci_get_vbus __tracepoint_android_rvh_uclamp_eff_get __tracepoint_android_rvh_ufs_complete_init @@ -2529,12 +2538,14 @@ __tracepoint_android_vh_meminfo_proc_show __tracepoint_android_vh_mm_compaction_begin __tracepoint_android_vh_mm_compaction_end + __tracepoint_android_vh_mm_kcompactd_cpu_online __tracepoint_android_vh_prio_inheritance __tracepoint_android_vh_prio_restore __tracepoint_android_vh_resume_end __tracepoint_android_vh_rmqueue __tracepoint_android_vh_scheduler_tick __tracepoint_android_vh_setscheduler_uclamp + __tracepoint_android_vh_set_task_comm __tracepoint_android_vh_si_meminfo_adjust __tracepoint_android_vh_sound_usb_support_cpu_suspend __tracepoint_android_vh_sysrq_crash @@ -2556,6 +2567,7 @@ __tracepoint_android_vh_ufs_update_sysfs __tracepoint_android_vh_usb_dev_resume __tracepoint_android_vh_use_amu_fie + __tracepoint_android_vh_vmscan_kswapd_done __tracepoint_clock_set_rate __tracepoint_cma_alloc_finish __tracepoint_cma_alloc_start @@ -2574,6 +2586,7 @@ __tracepoint_mmap_lock_start_locking __tracepoint_mm_vmscan_direct_reclaim_begin __tracepoint_mm_vmscan_direct_reclaim_end + __tracepoint_mm_vmscan_kswapd_wake __tracepoint_pelt_cfs_tp __tracepoint_pelt_dl_tp __tracepoint_pelt_irq_tp diff --git a/android/abi_gki_aarch64_qcom b/android/abi_gki_aarch64_qcom index bcba5106b9e8..b6826eaa123e 100644 --- a/android/abi_gki_aarch64_qcom +++ b/android/abi_gki_aarch64_qcom @@ -45,6 +45,7 @@ __arch_copy_from_user __arch_copy_to_user arch_freq_scale + arch_invalidate_pmem arch_timer_read_counter argv_free argv_split diff --git a/android/abi_gki_aarch64_rockchip b/android/abi_gki_aarch64_rockchip index 1702d5c65191..27d4fd3a623b 100644 --- a/android/abi_gki_aarch64_rockchip +++ b/android/abi_gki_aarch64_rockchip @@ -200,6 +200,7 @@ devm_clk_bulk_get devm_clk_bulk_get_all devm_clk_get + devm_clk_get_enabled devm_clk_get_optional devm_clk_hw_register devm_clk_register @@ -252,6 +253,7 @@ __devm_regmap_init_i2c __devm_regmap_init_mmio_clk devm_regulator_bulk_get + devm_regulator_bulk_get_enable devm_regulator_get devm_regulator_get_optional devm_regulator_register @@ -1975,6 +1977,7 @@ scsi_remove_device scsi_remove_host scsi_rescan_device + scsi_resume_device scsi_schedule_eh scsi_sense_desc_find scsi_set_sense_field_pointer diff --git a/android/abi_gki_aarch64_sunxi b/android/abi_gki_aarch64_sunxi new file mode 100644 index 000000000000..39653df676c4 --- /dev/null +++ b/android/abi_gki_aarch64_sunxi @@ -0,0 +1,55 @@ +[abi_symbol_list] + arp_create + clk_unregister_gate + clk_unregister_fixed_factor + dev_mc_add + dev_mc_del + dma_get_any_slave_channel + dmam_pool_create + drm_client_buffer_vmap + drm_client_framebuffer_create + drm_gem_fb_create_with_funcs + drm_property_add_enum + drm_vblank_work_init + drm_vblank_work_schedule + drm_vblank_work_cancel_sync + drm_vblank_work_flush + drm_warn_on_modeset_not_all_locked + fat_time_fat2unix + fat_time_unix2fat + gpiochip_line_is_irq + hwspin_lock_register + hwspin_lock_unregister + init_on_alloc + iio_map_array_register + iio_map_array_unregister + ioport_resource + irq_setup_alt_chip + ir_raw_event_store + ir_raw_event_handle + of_io_request_and_map + of_clk_hw_register + pinctrl_gpio_set_config + phy_queue_state_machine + phy_speed_to_str + rc_map_register + rc_map_unregister + rc_keydown + reset_control_status + skb_append + snd_dmaengine_pcm_close_release_chan + snd_dmaengine_pcm_get_chan + snd_dmaengine_pcm_open + snd_dmaengine_pcm_pointer + snd_dmaengine_pcm_trigger + spi_unregister_device + v4l2_ctrl_cluster + v4l2_g_ctrl + v4l2_i2c_new_subdev + vb2_dma_contig_set_max_seg_size + __media_entity_setup_link + __traceiter_dwc3_readl + __traceiter_dwc3_writel + __tracepoint_dwc3_readl + __tracepoint_dwc3_writel + diff --git a/android/abi_gki_aarch64_type_visibility b/android/abi_gki_aarch64_type_visibility index e700c6e36d0f..64b5ef1f548e 100644 --- a/android/abi_gki_aarch64_type_visibility +++ b/android/abi_gki_aarch64_type_visibility @@ -3,3 +3,6 @@ # for type visibility ANDROID_GKI_struct_dwc3 ANDROID_GKI_struct_kernel_all_info + +# symbol no longer needed + serial8250_handle_irq diff --git a/android/abi_gki_aarch64_vivo b/android/abi_gki_aarch64_vivo index 52f18122bd06..f98284eb252c 100644 --- a/android/abi_gki_aarch64_vivo +++ b/android/abi_gki_aarch64_vivo @@ -408,6 +408,8 @@ __traceiter_android_vh_mmap_region __traceiter_android_vh_mutex_wait_finish __traceiter_android_vh_mutex_wait_start + __traceiter_android_vh_oom_swapmem_gather_finish + __traceiter_android_vh_oom_swapmem_gather_init __traceiter_android_vh_percpu_rwsem_down_read __traceiter_android_vh_percpu_rwsem_up_write __traceiter_android_vh_printk_hotplug @@ -428,6 +430,9 @@ __traceiter_android_vh_shmem_swapin_folio __traceiter_android_vh_show_resume_epoch_val __traceiter_android_vh_show_suspend_epoch_val + __traceiter_android_vh_swapmem_gather_add_bypass + __traceiter_android_vh_swapmem_gather_finish + __traceiter_android_vh_swapmem_gather_init __traceiter_android_vh_sysrq_crash __traceiter_android_vh_timer_calc_index __traceiter_android_vh_try_to_freeze_todo @@ -513,6 +518,8 @@ __tracepoint_android_rvh_is_cpu_allowed __tracepoint_android_rvh_migrate_queued_task __tracepoint_android_rvh_new_task_stats + __tracepoint_android_vh_oom_swapmem_gather_finish + __tracepoint_android_vh_oom_swapmem_gather_init __tracepoint_android_rvh_panic_unhandled __tracepoint_android_rvh_percpu_rwsem_wait_complete __tracepoint_android_rvh_pick_next_entity @@ -546,6 +553,9 @@ __tracepoint_android_rvh_setscheduler __tracepoint_android_rvh_shmem_get_folio __tracepoint_android_rvh_show_max_freq + __tracepoint_android_vh_swapmem_gather_add_bypass + __tracepoint_android_vh_swapmem_gather_finish + __tracepoint_android_vh_swapmem_gather_init __tracepoint_android_rvh_tick_entry __tracepoint_android_rvh_try_to_wake_up __tracepoint_android_rvh_try_to_wake_up_success diff --git a/android/abi_gki_aarch64_xiaomi b/android/abi_gki_aarch64_xiaomi index f7daca8d7907..9ead59c27520 100644 --- a/android/abi_gki_aarch64_xiaomi +++ b/android/abi_gki_aarch64_xiaomi @@ -373,6 +373,9 @@ pci_sriov_set_totalvfs pci_num_vf +# required by shrink memory module + shrink_slab + #required by cifs.ko add_swap_extent asn1_ber_decoder @@ -459,6 +462,13 @@ __fs_parse __filemap_get_folio +#required by mem_reclaim_ctl.ko +__traceiter_android_vh_page_should_be_protected +__tracepoint_android_vh_page_should_be_protected +__traceiter_android_vh_page_referenced_check_bypass +__tracepoint_android_vh_page_referenced_check_bypass +__page_mapcount + #required by mi_async_reclaim.ko __traceiter_android_vh_handle_trylock_failed_folio __tracepoint_android_vh_handle_trylock_failed_folio diff --git a/android/abi_gki_protected_exports_aarch64 b/android/abi_gki_protected_exports_aarch64 index 1f9b851b3947..b6c36d7a9e7c 100644 --- a/android/abi_gki_protected_exports_aarch64 +++ b/android/abi_gki_protected_exports_aarch64 @@ -22,6 +22,7 @@ bt_err_ratelimited bt_info bt_procfs_cleanup bt_procfs_init +bt_sock_alloc bt_sock_ioctl bt_sock_link bt_sock_poll diff --git a/arch/arm64/configs/gki_defconfig b/arch/arm64/configs/gki_defconfig index b216e097b27e..1d6b7015c013 100644 --- a/arch/arm64/configs/gki_defconfig +++ b/arch/arm64/configs/gki_defconfig @@ -402,7 +402,6 @@ CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_NR_UARTS=32 CONFIG_SERIAL_8250_RUNTIME_UARTS=0 CONFIG_SERIAL_8250_DW=y -# CONFIG_SERIAL_8250_BCM7271 is not set CONFIG_SERIAL_OF_PLATFORM=y CONFIG_SERIAL_AMBA_PL011=y CONFIG_SERIAL_AMBA_PL011_CONSOLE=y @@ -732,6 +731,7 @@ CONFIG_CRYPTO_AES_ARM64_CE_BLK=y CONFIG_TRACE_MMIO_ACCESS=y CONFIG_CRC_CCITT=y CONFIG_XZ_DEC=y +CONFIG_DMA_RESTRICTED_POOL=y CONFIG_DMA_CMA=y CONFIG_PRINTK_TIME=y CONFIG_PRINTK_CALLER=y @@ -751,7 +751,6 @@ CONFIG_UBSAN_LOCAL_BOUNDS=y CONFIG_PAGE_OWNER=y CONFIG_PAGE_PINNER=y CONFIG_PER_VMA_LOCK_STATS=y -CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_KASAN=y CONFIG_KASAN_HW_TAGS=y diff --git a/arch/arm64/kvm/hyp/include/nvhe/trace.h b/arch/arm64/kvm/hyp/include/nvhe/trace.h index 2aec8f755f53..399147484f84 100644 --- a/arch/arm64/kvm/hyp/include/nvhe/trace.h +++ b/arch/arm64/kvm/hyp/include/nvhe/trace.h @@ -58,8 +58,8 @@ void *rb_reserve_trace_entry(struct hyp_rb_per_cpu *cpu_buffer, unsigned long le int __pkvm_load_tracing(unsigned long pack_va, size_t pack_size); void __pkvm_teardown_tracing(void); int __pkvm_enable_tracing(bool enable); -int __pkvm_rb_swap_reader_page(int cpu); -int __pkvm_rb_update_footers(int cpu); +int __pkvm_rb_swap_reader_page(unsigned int cpu); +int __pkvm_rb_update_footers(unsigned int cpu); int __pkvm_enable_event(unsigned short id, bool enable); #define HYP_EVENT(__name, __proto, __struct, __assign, __printk) \ @@ -94,12 +94,12 @@ static inline void __pkvm_teardown_tracing(void) { } static inline int __pkvm_enable_tracing(bool enable) { return -ENODEV; } -static inline int __pkvm_rb_swap_reader_page(int cpu) +static inline int __pkvm_rb_swap_reader_page(unsigned int cpu) { return -ENODEV; } -static inline int __pkvm_rb_update_footers(int cpu) +static inline int __pkvm_rb_update_footers(unsigned int cpu) { return -ENODEV; } diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-init.S b/arch/arm64/kvm/hyp/nvhe/hyp-init.S index 73ced9c646c4..c6f2e941c856 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-init.S +++ b/arch/arm64/kvm/hyp/nvhe/hyp-init.S @@ -126,7 +126,7 @@ alternative_else_nop_endif /* Invalidate the stale TLBs from Bootloader */ tlbi alle2 - tlbi vmalls12e1 + tlbi alle1 dsb sy mov_q x0, INIT_SCTLR_EL2_MMU_ON diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c index 87ca8cd735ea..eec014b1b4fa 100644 --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c @@ -1241,14 +1241,14 @@ static void handle___pkvm_enable_tracing(struct kvm_cpu_context *host_ctxt) static void handle___pkvm_rb_swap_reader_page(struct kvm_cpu_context *host_ctxt) { - DECLARE_REG(int, cpu, host_ctxt, 1); + DECLARE_REG(unsigned int, cpu, host_ctxt, 1); cpu_reg(host_ctxt, 1) = __pkvm_rb_swap_reader_page(cpu); } static void handle___pkvm_rb_update_footers(struct kvm_cpu_context *host_ctxt) { - DECLARE_REG(int, cpu, host_ctxt, 1); + DECLARE_REG(unsigned int, cpu, host_ctxt, 1); cpu_reg(host_ctxt, 1) = __pkvm_rb_update_footers(cpu); } diff --git a/arch/arm64/kvm/hyp/nvhe/tlb.c b/arch/arm64/kvm/hyp/nvhe/tlb.c index 692bd7f881f1..e98d417c3487 100644 --- a/arch/arm64/kvm/hyp/nvhe/tlb.c +++ b/arch/arm64/kvm/hyp/nvhe/tlb.c @@ -106,10 +106,10 @@ static void exit_vmid_context(struct tlb_inv_context *cxt) else __load_host_stage2(); - if (cpus_have_final_cap(ARM64_WORKAROUND_SPECULATIVE_AT)) { - /* Ensure write of the old VMID */ - isb(); + /* Ensure write of the old VMID */ + isb(); + if (cpus_have_final_cap(ARM64_WORKAROUND_SPECULATIVE_AT)) { if (!(cxt->sctlr & SCTLR_ELx_M)) { write_sysreg_el1(cxt->sctlr, SYS_SCTLR); isb(); diff --git a/arch/arm64/kvm/hyp/nvhe/trace.c b/arch/arm64/kvm/hyp/nvhe/trace.c index 6f796ec7b826..20e011a8785d 100644 --- a/arch/arm64/kvm/hyp/nvhe/trace.c +++ b/arch/arm64/kvm/hyp/nvhe/trace.c @@ -485,7 +485,7 @@ static void rb_teardown_bpage_backing(void) hyp_buffer_pages_backing.size = 0; } -int __pkvm_rb_update_footers(int cpu) +int __pkvm_rb_update_footers(unsigned int cpu) { struct hyp_rb_per_cpu *cpu_buffer; int ret = 0; @@ -508,9 +508,9 @@ int __pkvm_rb_update_footers(int cpu) return ret; } -int __pkvm_rb_swap_reader_page(int cpu) +int __pkvm_rb_swap_reader_page(unsigned int cpu) { - struct hyp_rb_per_cpu *cpu_buffer = per_cpu_ptr(&trace_rb, cpu); + struct hyp_rb_per_cpu *cpu_buffer; int ret = 0; if (cpu >= hyp_nr_cpus) diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c index ea51f04be78f..52e17cfac0d7 100644 --- a/arch/arm64/kvm/hyp/pgtable.c +++ b/arch/arm64/kvm/hyp/pgtable.c @@ -420,7 +420,7 @@ static int hyp_unmap_walker(u64 addr, u64 end, u32 level, kvm_pte_t *ptep, kvm_clear_pte(ptep); dsb(ishst); - __tlbi_level(vae2is, __TLBI_VADDR(addr, 0), level); + __tlbi_level(vae2is, __TLBI_VADDR(addr, 0), 0); } else { if (end - addr < granule) return -EINVAL; @@ -661,10 +661,15 @@ static bool stage2_pte_needs_update(struct kvm_pgtable *pgt, static void stage2_clear_pte(kvm_pte_t *ptep, struct kvm_s2_mmu *mmu, u64 addr, u32 level) { - if (!kvm_pte_valid(*ptep)) + kvm_pte_t pte = *ptep; + + if (!kvm_pte_valid(pte)) return; kvm_clear_pte(ptep); + + if (kvm_pte_table(pte, level)) + level = 0; kvm_call_hyp(__kvm_tlb_flush_vmid_ipa, mmu, addr, level); } diff --git a/arch/x86/configs/gki_defconfig b/arch/x86/configs/gki_defconfig index 696d631131ab..1a95465a5468 100644 --- a/arch/x86/configs/gki_defconfig +++ b/arch/x86/configs/gki_defconfig @@ -512,7 +512,6 @@ CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_TRANSIENT=y CONFIG_EDAC=y CONFIG_RTC_CLASS=y -# CONFIG_RTC_HCTOSYS is not set CONFIG_DMABUF_HEAPS=y CONFIG_DMABUF_SYSFS_STATS=y CONFIG_DMABUF_HEAPS_DEFERRED_FREE=y @@ -665,7 +664,6 @@ CONFIG_UBSAN_LOCAL_BOUNDS=y # CONFIG_UBSAN_ENUM is not set CONFIG_PAGE_OWNER=y CONFIG_PER_VMA_LOCK_STATS=y -CONFIG_DEBUG_STACK_USAGE=y CONFIG_DEBUG_MEMORY_INIT=y CONFIG_KFENCE=y CONFIG_KFENCE_SAMPLE_INTERVAL=500 diff --git a/drivers/android/binder.c b/drivers/android/binder.c index ef3e8e8fbecb..4e0d6de0851a 100644 --- a/drivers/android/binder.c +++ b/drivers/android/binder.c @@ -1236,6 +1236,63 @@ static struct binder_ref *binder_get_ref_olocked(struct binder_proc *proc, return NULL; } +/* Find the smallest unused descriptor the "slow way" */ +static u32 slow_desc_lookup_olocked(struct binder_proc *proc, u32 offset) +{ + struct binder_ref *ref; + struct rb_node *n; + u32 desc; + + desc = offset; + for (n = rb_first(&proc->refs_by_desc); n; n = rb_next(n)) { + ref = rb_entry(n, struct binder_ref, rb_node_desc); + if (ref->data.desc > desc) + break; + desc = ref->data.desc + 1; + } + + return desc; +} + +/* + * Find an available reference descriptor ID. The proc->outer_lock might + * be released in the process, in which case -EAGAIN is returned and the + * @desc should be considered invalid. + */ +static int get_ref_desc_olocked(struct binder_proc *proc, + struct binder_node *node, + u32 *desc) +{ + struct dbitmap *dmap = &proc_wrapper(proc)->dmap; + unsigned int nbits, offset; + unsigned long *new, bit; + + /* 0 is reserved for the context manager */ + offset = (node == proc->context->binder_context_mgr_node) ? 0 : 1; + + if (!dbitmap_enabled(dmap)) { + *desc = slow_desc_lookup_olocked(proc, offset); + return 0; + } + + if (dbitmap_acquire_next_zero_bit(dmap, offset, &bit) == 0) { + *desc = bit; + return 0; + } + + /* + * The dbitmap is full and needs to grow. The proc->outer_lock + * is briefly released to allocate the new bitmap safely. + */ + nbits = dbitmap_grow_nbits(dmap); + binder_proc_unlock(proc); + new = bitmap_zalloc(nbits, GFP_KERNEL); + binder_proc_lock(proc); + dbitmap_grow(dmap, new, nbits); + + return -EAGAIN; +} + /** * binder_get_ref_for_node_olocked() - get the ref associated with given node * @proc: binder_proc that owns the ref @@ -1259,12 +1316,14 @@ static struct binder_ref *binder_get_ref_for_node_olocked( struct binder_node *node, struct binder_ref *new_ref) { - struct binder_context *context = proc->context; - struct rb_node **p = &proc->refs_by_node.rb_node; - struct rb_node *parent = NULL; struct binder_ref *ref; - struct rb_node *n; + struct rb_node *parent; + struct rb_node **p; + u32 desc; +retry: + p = &proc->refs_by_node.rb_node; + parent = NULL; while (*p) { parent = *p; ref = rb_entry(parent, struct binder_ref, rb_node_node); @@ -1279,6 +1338,10 @@ static struct binder_ref *binder_get_ref_for_node_olocked( if (!new_ref) return NULL; + /* might release the proc->outer_lock */ + if (get_ref_desc_olocked(proc, node, &desc) == -EAGAIN) + goto retry; + binder_stats_created(BINDER_STAT_REF); new_ref->data.debug_id = atomic_inc_return(&binder_last_id); new_ref->proc = proc; @@ -1286,14 +1349,7 @@ static struct binder_ref *binder_get_ref_for_node_olocked( rb_link_node(&new_ref->rb_node_node, parent, p); rb_insert_color(&new_ref->rb_node_node, &proc->refs_by_node); - new_ref->data.desc = (node == context->binder_context_mgr_node) ? 0 : 1; - for (n = rb_first(&proc->refs_by_desc); n != NULL; n = rb_next(n)) { - ref = rb_entry(n, struct binder_ref, rb_node_desc); - if (ref->data.desc > new_ref->data.desc) - break; - new_ref->data.desc = ref->data.desc + 1; - } - + new_ref->data.desc = desc; p = &proc->refs_by_desc.rb_node; while (*p) { parent = *p; @@ -1323,6 +1379,7 @@ static struct binder_ref *binder_get_ref_for_node_olocked( static void binder_cleanup_ref_olocked(struct binder_ref *ref) { + struct dbitmap *dmap = &proc_wrapper(ref->proc)->dmap; bool delete_node = false; binder_debug(BINDER_DEBUG_INTERNAL_REFS, @@ -1330,6 +1387,8 @@ static void binder_cleanup_ref_olocked(struct binder_ref *ref) ref->proc->pid, ref->data.debug_id, ref->data.desc, ref->node->debug_id); + if (dbitmap_enabled(dmap)) + dbitmap_clear_bit(dmap, ref->data.desc); rb_erase(&ref->rb_node_desc, &ref->proc->refs_by_desc); rb_erase(&ref->rb_node_node, &ref->proc->refs_by_node); @@ -1360,6 +1419,10 @@ static void binder_cleanup_ref_olocked(struct binder_ref *ref) binder_dequeue_work(ref->proc, &ref->death->work); binder_stats_deleted(BINDER_STAT_DEATH); } + + if (ref->freeze) + binder_dequeue_work(ref->proc, &ref->freeze->work); + binder_stats_deleted(BINDER_STAT_REF); } @@ -1489,9 +1552,30 @@ static void binder_free_ref(struct binder_ref *ref) if (ref->node) binder_free_node(ref->node); kfree(ref->death); + kfree(ref->freeze); kfree(ref); } +/* shrink descriptor bitmap if needed */ +static void try_shrink_dmap(struct binder_proc *proc) +{ + struct dbitmap *dmap = &proc_wrapper(proc)->dmap; + unsigned long *new; + int nbits; + + binder_proc_lock(proc); + nbits = dbitmap_shrink_nbits(dmap); + binder_proc_unlock(proc); + + if (!nbits) + return; + + new = bitmap_zalloc(nbits, GFP_KERNEL); + binder_proc_lock(proc); + dbitmap_shrink(dmap, new, nbits); + binder_proc_unlock(proc); +} + /** * binder_update_ref_for_handle() - inc/dec the ref for given handle * @proc: proc containing the ref @@ -1528,8 +1612,10 @@ static int binder_update_ref_for_handle(struct binder_proc *proc, *rdata = ref->data; binder_proc_unlock(proc); - if (delete_ref) + if (delete_ref) { binder_free_ref(ref); + try_shrink_dmap(proc); + } return ret; err_no_ref: @@ -3564,6 +3650,7 @@ static void binder_transaction(struct binder_proc *proc, */ copy_size = object_offset - user_offset; if (copy_size && (user_offset > object_offset || + object_offset > tr->data_size || binder_alloc_copy_user_to_buffer( &target_proc->alloc, t->buffer, user_offset, @@ -3986,6 +4073,154 @@ err_invalid_target_handle: } } +static int +binder_request_freeze_notification(struct binder_proc *proc, + struct binder_thread *thread, + struct binder_handle_cookie *handle_cookie) +{ + struct binder_ref_freeze *freeze; + struct binder_ref *ref; + bool is_frozen; + + freeze = kzalloc(sizeof(*freeze), GFP_KERNEL); + if (!freeze) + return -ENOMEM; + binder_proc_lock(proc); + ref = binder_get_ref_olocked(proc, handle_cookie->handle, false); + if (!ref) { + binder_user_error("%d:%d BC_REQUEST_FREEZE_NOTIFICATION invalid ref %d\n", + proc->pid, thread->pid, handle_cookie->handle); + binder_proc_unlock(proc); + kfree(freeze); + return -EINVAL; + } + + binder_node_lock(ref->node); + + if (ref->freeze || !ref->node->proc) { + binder_user_error("%d:%d invalid BC_REQUEST_FREEZE_NOTIFICATION %s\n", + proc->pid, thread->pid, + ref->freeze ? "already set" : "dead node"); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + kfree(freeze); + return -EINVAL; + } + binder_inner_proc_lock(ref->node->proc); + is_frozen = ref->node->proc->is_frozen; + binder_inner_proc_unlock(ref->node->proc); + + INIT_LIST_HEAD(&freeze->work.entry); + freeze->cookie = handle_cookie->cookie; + freeze->work.type = BINDER_WORK_FROZEN_BINDER; + freeze->is_frozen = is_frozen; + + ref->freeze = freeze; + + binder_inner_proc_lock(proc); + binder_enqueue_work_ilocked(&ref->freeze->work, &proc->todo); + binder_wakeup_proc_ilocked(proc); + binder_inner_proc_unlock(proc); + + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return 0; +} + +static int +binder_clear_freeze_notification(struct binder_proc *proc, + struct binder_thread *thread, + struct binder_handle_cookie *handle_cookie) +{ + struct binder_ref_freeze *freeze; + struct binder_ref *ref; + + binder_proc_lock(proc); + ref = binder_get_ref_olocked(proc, handle_cookie->handle, false); + if (!ref) { + binder_user_error("%d:%d BC_CLEAR_FREEZE_NOTIFICATION invalid ref %d\n", + proc->pid, thread->pid, handle_cookie->handle); + binder_proc_unlock(proc); + return -EINVAL; + } + + binder_node_lock(ref->node); + + if (!ref->freeze) { + binder_user_error("%d:%d BC_CLEAR_FREEZE_NOTIFICATION freeze notification not active\n", + proc->pid, thread->pid); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return -EINVAL; + } + freeze = ref->freeze; + binder_inner_proc_lock(proc); + if (freeze->cookie != handle_cookie->cookie) { + binder_user_error("%d:%d BC_CLEAR_FREEZE_NOTIFICATION freeze notification cookie mismatch %016llx != %016llx\n", + proc->pid, thread->pid, (u64)freeze->cookie, + (u64)handle_cookie->cookie); + binder_inner_proc_unlock(proc); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return -EINVAL; + } + ref->freeze = NULL; + /* + * Take the existing freeze object and overwrite its work type. There are three cases here: + * 1. No pending notification. In this case just add the work to the queue. + * 2. A notification was sent and is pending an ack from userspace. Once an ack arrives, we + * should resend with the new work type. + * 3. A notification is pending to be sent. Since the work is already in the queue, nothing + * needs to be done here. + */ + freeze->work.type = BINDER_WORK_CLEAR_FREEZE_NOTIFICATION; + if (list_empty(&freeze->work.entry)) { + binder_enqueue_work_ilocked(&freeze->work, &proc->todo); + binder_wakeup_proc_ilocked(proc); + } else if (freeze->sent) { + freeze->resend = true; + } + binder_inner_proc_unlock(proc); + binder_node_unlock(ref->node); + binder_proc_unlock(proc); + return 0; +} + +static int +binder_freeze_notification_done(struct binder_proc *proc, + struct binder_thread *thread, + binder_uintptr_t cookie) +{ + struct binder_ref_freeze *freeze = NULL; + struct binder_work *w; + + binder_inner_proc_lock(proc); + list_for_each_entry(w, &proc_wrapper(proc)->delivered_freeze, entry) { + struct binder_ref_freeze *tmp_freeze = + container_of(w, struct binder_ref_freeze, work); + + if (tmp_freeze->cookie == cookie) { + freeze = tmp_freeze; + break; + } + } + if (!freeze) { + binder_user_error("%d:%d BC_FREEZE_NOTIFICATION_DONE %016llx not found\n", + proc->pid, thread->pid, (u64)cookie); + binder_inner_proc_unlock(proc); + return -EINVAL; + } + binder_dequeue_work_ilocked(&freeze->work); + freeze->sent = false; + if (freeze->resend) { + freeze->resend = false; + binder_enqueue_work_ilocked(&freeze->work, &proc->todo); + binder_wakeup_proc_ilocked(proc); + } + binder_inner_proc_unlock(proc); + return 0; +} + /** * binder_free_buf() - free the specified buffer * @proc: binder proc that owns buffer @@ -4480,6 +4715,44 @@ static int binder_thread_write(struct binder_proc *proc, binder_inner_proc_unlock(proc); } break; + case BC_REQUEST_FREEZE_NOTIFICATION: { + struct binder_handle_cookie handle_cookie; + int error; + + if (copy_from_user(&handle_cookie, ptr, sizeof(handle_cookie))) + return -EFAULT; + ptr += sizeof(handle_cookie); + error = binder_request_freeze_notification(proc, thread, + &handle_cookie); + if (error) + return error; + } break; + + case BC_CLEAR_FREEZE_NOTIFICATION: { + struct binder_handle_cookie handle_cookie; + int error; + + if (copy_from_user(&handle_cookie, ptr, sizeof(handle_cookie))) + return -EFAULT; + ptr += sizeof(handle_cookie); + error = binder_clear_freeze_notification(proc, thread, &handle_cookie); + if (error) + return error; + } break; + + case BC_FREEZE_NOTIFICATION_DONE: { + binder_uintptr_t cookie; + int error; + + if (get_user(cookie, (binder_uintptr_t __user *)ptr)) + return -EFAULT; + + ptr += sizeof(cookie); + error = binder_freeze_notification_done(proc, thread, cookie); + if (error) + return error; + } break; + default: pr_err("%d:%d unknown command %u\n", proc->pid, thread->pid, cmd); @@ -4881,6 +5154,45 @@ skip: if (cmd == BR_DEAD_BINDER) goto done; /* DEAD_BINDER notifications can cause transactions */ } break; + + case BINDER_WORK_FROZEN_BINDER: { + struct binder_ref_freeze *freeze; + struct binder_frozen_state_info info; + + memset(&info, 0, sizeof(info)); + freeze = container_of(w, struct binder_ref_freeze, work); + info.is_frozen = freeze->is_frozen; + info.cookie = freeze->cookie; + freeze->sent = true; + binder_enqueue_work_ilocked(w, &proc_wrapper(proc)->delivered_freeze); + binder_inner_proc_unlock(proc); + + if (put_user(BR_FROZEN_BINDER, (uint32_t __user *)ptr)) + return -EFAULT; + ptr += sizeof(uint32_t); + if (copy_to_user(ptr, &info, sizeof(info))) + return -EFAULT; + ptr += sizeof(info); + binder_stat_br(proc, thread, BR_FROZEN_BINDER); + goto done; /* BR_FROZEN_BINDER notifications can cause transactions */ + } break; + + case BINDER_WORK_CLEAR_FREEZE_NOTIFICATION: { + struct binder_ref_freeze *freeze = + container_of(w, struct binder_ref_freeze, work); + binder_uintptr_t cookie = freeze->cookie; + + binder_inner_proc_unlock(proc); + kfree(freeze); + if (put_user(BR_CLEAR_FREEZE_NOTIFICATION_DONE, (uint32_t __user *)ptr)) + return -EFAULT; + ptr += sizeof(uint32_t); + if (put_user(cookie, (binder_uintptr_t __user *)ptr)) + return -EFAULT; + ptr += sizeof(binder_uintptr_t); + binder_stat_br(proc, thread, BR_CLEAR_FREEZE_NOTIFICATION_DONE); + } break; + default: binder_inner_proc_unlock(proc); pr_err("%d:%d: bad work type %d\n", @@ -5163,7 +5475,6 @@ static struct binder_thread *binder_get_thread(struct binder_proc *proc) static void binder_free_proc(struct binder_proc *proc) { - struct binder_proc_wrap *proc_wrap; struct binder_device *device; BUG_ON(!list_empty(&proc->todo)); @@ -5180,9 +5491,9 @@ static void binder_free_proc(struct binder_proc *proc) put_task_struct(proc->tsk); put_cred(proc->cred); binder_stats_deleted(BINDER_STAT_PROC); + dbitmap_free(&proc_wrapper(proc)->dmap); trace_android_vh_binder_free_proc(proc); - proc_wrap = binder_proc_wrap_entry(proc); - kfree(proc_wrap); + kfree(proc_wrapper(proc)); } static void binder_free_thread(struct binder_thread *thread) @@ -5502,6 +5813,57 @@ static bool binder_txns_pending_ilocked(struct binder_proc *proc) return false; } +static void binder_add_freeze_work(struct binder_proc *proc, bool is_frozen) +{ + struct binder_node *prev = NULL; + struct rb_node *n; + struct binder_ref *ref; + + binder_inner_proc_lock(proc); + for (n = rb_first(&proc->nodes); n; n = rb_next(n)) { + struct binder_node *node; + + node = rb_entry(n, struct binder_node, rb_node); + binder_inc_node_tmpref_ilocked(node); + binder_inner_proc_unlock(proc); + if (prev) + binder_put_node(prev); + binder_node_lock(node); + hlist_for_each_entry(ref, &node->refs, node_entry) { + /* + * Need the node lock to synchronize + * with new notification requests and the + * inner lock to synchronize with queued + * freeze notifications. + */ + binder_inner_proc_lock(ref->proc); + if (!ref->freeze) { + binder_inner_proc_unlock(ref->proc); + continue; + } + ref->freeze->work.type = BINDER_WORK_FROZEN_BINDER; + if (list_empty(&ref->freeze->work.entry)) { + ref->freeze->is_frozen = is_frozen; + binder_enqueue_work_ilocked(&ref->freeze->work, &ref->proc->todo); + binder_wakeup_proc_ilocked(ref->proc); + } else { + if (ref->freeze->sent && ref->freeze->is_frozen != is_frozen) + ref->freeze->resend = true; + ref->freeze->is_frozen = is_frozen; + } + binder_inner_proc_unlock(ref->proc); + } + prev = node; + binder_node_unlock(node); + binder_inner_proc_lock(proc); + if (proc->is_dead) + break; + } + binder_inner_proc_unlock(proc); + if (prev) + binder_put_node(prev); +} + static int binder_ioctl_freeze(struct binder_freeze_info *info, struct binder_proc *target_proc) { @@ -5513,6 +5875,7 @@ static int binder_ioctl_freeze(struct binder_freeze_info *info, target_proc->async_recv = false; target_proc->is_frozen = false; binder_inner_proc_unlock(target_proc); + binder_add_freeze_work(target_proc, false); return 0; } @@ -5545,6 +5908,8 @@ static int binder_ioctl_freeze(struct binder_freeze_info *info, binder_inner_proc_lock(target_proc); target_proc->is_frozen = false; binder_inner_proc_unlock(target_proc); + } else { + binder_add_freeze_work(target_proc, true); } return ret; @@ -5903,6 +6268,7 @@ static int binder_open(struct inode *nodp, struct file *filp) return -ENOMEM; proc = &proc_wrap->proc; + dbitmap_init(&proc_wrapper(proc)->dmap); spin_lock_init(&proc->inner_lock); spin_lock_init(&proc->outer_lock); get_task_struct(current->group_leader); @@ -5934,6 +6300,7 @@ static int binder_open(struct inode *nodp, struct file *filp) binder_stats_created(BINDER_STAT_PROC); proc->pid = current->group_leader->pid; INIT_LIST_HEAD(&proc->delivered_death); + INIT_LIST_HEAD(&proc_wrapper(proc)->delivered_freeze); INIT_LIST_HEAD(&proc->waiting_threads); filp->private_data = proc; @@ -6314,6 +6681,9 @@ static void print_binder_work_ilocked(struct seq_file *m, case BINDER_WORK_CLEAR_DEATH_NOTIFICATION: seq_printf(m, "%shas cleared death notification\n", prefix); break; + case BINDER_WORK_FROZEN_BINDER: + seq_printf(m, "%shas frozen binder\n", prefix); + break; default: seq_printf(m, "%sunknown work: type %d\n", prefix, w->type); break; @@ -6520,7 +6890,7 @@ static const char * const binder_objstat_strings[] = { "ref", "death", "transaction", - "transaction_complete" + "transaction_complete", }; static void print_binder_stats(struct seq_file *m, const char *prefix, diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c index 6ce5a0264946..4753911fcb96 100644 --- a/drivers/android/binder_alloc.c +++ b/drivers/android/binder_alloc.c @@ -955,9 +955,9 @@ void binder_alloc_deferred_release(struct binder_alloc *alloc) __free_page(alloc->pages[i].page_ptr); page_count++; } - kfree(alloc->pages); } binder_alloc_unlock(alloc); + kfree(alloc->pages); if (alloc->mm) mmdrop(alloc->mm); @@ -1315,4 +1315,4 @@ int binder_alloc_copy_from_buffer(struct binder_alloc *alloc, return binder_alloc_do_buffer_copy(alloc, false, buffer, buffer_offset, dest, bytes); } - +EXPORT_SYMBOL_GPL(binder_alloc_copy_from_buffer); diff --git a/drivers/android/binder_internal.h b/drivers/android/binder_internal.h index 4164c346b301..06ac60a7c6dc 100644 --- a/drivers/android/binder_internal.h +++ b/drivers/android/binder_internal.h @@ -14,6 +14,7 @@ #include #include #include "binder_alloc.h" +#include "dbitmap.h" struct binder_context { struct binder_node *binder_context_mgr_node; @@ -158,6 +159,10 @@ struct binder_work { BINDER_WORK_DEAD_BINDER, BINDER_WORK_DEAD_BINDER_AND_CLEAR, BINDER_WORK_CLEAR_DEATH_NOTIFICATION, +#ifndef __GENKSYMS__ + BINDER_WORK_FROZEN_BINDER, + BINDER_WORK_CLEAR_FREEZE_NOTIFICATION, +#endif } type; }; @@ -279,6 +284,14 @@ struct binder_ref_death { binder_uintptr_t cookie; }; +struct binder_ref_freeze { + struct binder_work work; + binder_uintptr_t cookie; + bool is_frozen:1; + bool sent:1; + bool resend:1; +}; + /** * struct binder_ref_data - binder_ref counts and id * @debug_id: unique ID for the ref @@ -311,6 +324,8 @@ struct binder_ref_data { * @node indicates the node must be freed * @death: pointer to death notification (ref_death) if requested * (protected by @node->lock) + * @freeze: pointer to freeze notification (ref_freeze) if requested + * (protected by @node->lock) * * Structure to track references from procA to target node (on procB). This * structure is unsafe to access without holding @proc->outer_lock. @@ -327,6 +342,7 @@ struct binder_ref { struct binder_proc *proc; struct binder_node *node; struct binder_ref_death *death; + struct binder_ref_freeze *freeze; }; /** @@ -443,7 +459,6 @@ struct binder_proc { bool sync_recv; bool async_recv; wait_queue_head_t freeze_wait; - struct list_head todo; struct binder_stats stats; struct list_head delivered_death; @@ -461,27 +476,38 @@ struct binder_proc { bool oneway_spam_detection_enabled; }; +/** + * struct binder_proc_wrap - wrapper to preserve KMI in binder_proc + * @proc: binder_proc being wrapped + * @dmap: dbitmap to manage available reference descriptors + * (protected by @proc.outer_lock) + * @lock: protects @proc->alloc fields + * @delivered_freeze: list of delivered freeze notification + * (protected by @inner_lock) + */ struct binder_proc_wrap { struct binder_proc proc; + struct dbitmap dmap; spinlock_t lock; + struct list_head delivered_freeze; }; +static inline +struct binder_proc_wrap *proc_wrapper(struct binder_proc *proc) +{ + return container_of(proc, struct binder_proc_wrap, proc); +} + static inline struct binder_proc * binder_proc_entry(struct binder_alloc *alloc) { return container_of(alloc, struct binder_proc, alloc); } -static inline struct binder_proc_wrap * -binder_proc_wrap_entry(struct binder_proc *proc) -{ - return container_of(proc, struct binder_proc_wrap, proc); -} - static inline struct binder_proc_wrap * binder_alloc_to_proc_wrap(struct binder_alloc *alloc) { - return binder_proc_wrap_entry(binder_proc_entry(alloc)); + return proc_wrapper(binder_proc_entry(alloc)); } static inline void binder_alloc_lock_init(struct binder_alloc *alloc) diff --git a/drivers/android/binderfs.c b/drivers/android/binderfs.c index 09b2ce7e4c34..aa5f37845501 100644 --- a/drivers/android/binderfs.c +++ b/drivers/android/binderfs.c @@ -60,6 +60,7 @@ enum binderfs_stats_mode { struct binder_features { bool oneway_spam_detection; bool extended_error; + bool freeze_notification; }; static const struct constant_table binderfs_param_stats[] = { @@ -76,6 +77,7 @@ static const struct fs_parameter_spec binderfs_fs_parameters[] = { static struct binder_features binder_features = { .oneway_spam_detection = true, .extended_error = true, + .freeze_notification = true, }; static inline struct binderfs_info *BINDERFS_SB(const struct super_block *sb) @@ -610,6 +612,12 @@ static int init_binder_features(struct super_block *sb) if (IS_ERR(dentry)) return PTR_ERR(dentry); + dentry = binderfs_create_file(dir, "freeze_notification", + &binder_features_fops, + &binder_features.freeze_notification); + if (IS_ERR(dentry)) + return PTR_ERR(dentry); + return 0; } diff --git a/drivers/android/dbitmap.h b/drivers/android/dbitmap.h new file mode 100644 index 000000000000..956f1bd087d1 --- /dev/null +++ b/drivers/android/dbitmap.h @@ -0,0 +1,168 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright 2024 Google LLC + * + * dbitmap - dynamically sized bitmap library. + * + * Used by the binder driver to optimize the allocation of the smallest + * available descriptor ID. Each bit in the bitmap represents the state + * of an ID. + * + * A dbitmap can grow or shrink as needed. This part has been designed + * considering that users might need to briefly release their locks in + * order to allocate memory for the new bitmap. These operations then, + * are verified to determine if the grow or shrink is sill valid. + * + * This library does not provide protection against concurrent access + * by itself. Binder uses the proc->outer_lock for this purpose. + */ + +#ifndef _LINUX_DBITMAP_H +#define _LINUX_DBITMAP_H +#include + +#define NBITS_MIN BITS_PER_TYPE(unsigned long) + +struct dbitmap { + unsigned int nbits; + unsigned long *map; +}; + +static inline int dbitmap_enabled(struct dbitmap *dmap) +{ + return !!dmap->nbits; +} + +static inline void dbitmap_free(struct dbitmap *dmap) +{ + dmap->nbits = 0; + kfree(dmap->map); +} + +/* Returns the nbits that a dbitmap can shrink to, 0 if not possible. */ +static inline unsigned int dbitmap_shrink_nbits(struct dbitmap *dmap) +{ + unsigned int bit; + + if (dmap->nbits <= NBITS_MIN) + return 0; + + /* + * Determine if the bitmap can shrink based on the position of + * its last set bit. If the bit is within the first quarter of + * the bitmap then shrinking is possible. In this case, the + * bitmap should shrink to half its current size. + */ + bit = find_last_bit(dmap->map, dmap->nbits); + if (bit < (dmap->nbits >> 2)) + return dmap->nbits >> 1; + + /* find_last_bit() returns dmap->nbits when no bits are set. */ + if (bit == dmap->nbits) + return NBITS_MIN; + + return 0; +} + +/* Replace the internal bitmap with a new one of different size */ +static inline void +dbitmap_replace(struct dbitmap *dmap, unsigned long *new, unsigned int nbits) +{ + bitmap_copy(new, dmap->map, min(dmap->nbits, nbits)); + kfree(dmap->map); + dmap->map = new; + dmap->nbits = nbits; +} + +static inline void +dbitmap_shrink(struct dbitmap *dmap, unsigned long *new, unsigned int nbits) +{ + if (!new) + return; + + /* + * Verify that shrinking to @nbits is still possible. The @new + * bitmap might have been allocated without locks, so this call + * could now be outdated. In this case, free @new and move on. + */ + if (!dbitmap_enabled(dmap) || dbitmap_shrink_nbits(dmap) != nbits) { + kfree(new); + return; + } + + dbitmap_replace(dmap, new, nbits); +} + +/* Returns the nbits that a dbitmap can grow to. */ +static inline unsigned int dbitmap_grow_nbits(struct dbitmap *dmap) +{ + return dmap->nbits << 1; +} + +static inline void +dbitmap_grow(struct dbitmap *dmap, unsigned long *new, unsigned int nbits) +{ + /* + * Verify that growing to @nbits is still possible. The @new + * bitmap might have been allocated without locks, so this call + * could now be outdated. In this case, free @new and move on. + */ + if (!dbitmap_enabled(dmap) || nbits <= dmap->nbits) { + kfree(new); + return; + } + + /* + * Check for ENOMEM after confirming the grow operation is still + * required. This ensures we only disable the dbitmap when it's + * necessary. Once the dbitmap is disabled, binder will fallback + * to slow_desc_lookup_olocked(). + */ + if (!new) { + dbitmap_free(dmap); + return; + } + + dbitmap_replace(dmap, new, nbits); +} + +/* + * Finds and sets the next zero bit in the bitmap. Upon success @bit + * is populated with the index and 0 is returned. Otherwise, -ENOSPC + * is returned to indicate that a dbitmap_grow() is needed. + */ +static inline int +dbitmap_acquire_next_zero_bit(struct dbitmap *dmap, unsigned long offset, + unsigned long *bit) +{ + unsigned long n; + + n = find_next_zero_bit(dmap->map, dmap->nbits, offset); + if (n == dmap->nbits) + return -ENOSPC; + + *bit = n; + set_bit(n, dmap->map); + + return 0; +} + +static inline void +dbitmap_clear_bit(struct dbitmap *dmap, unsigned long bit) +{ + clear_bit(bit, dmap->map); +} + +static inline int dbitmap_init(struct dbitmap *dmap) +{ + dmap->map = bitmap_zalloc(NBITS_MIN, GFP_KERNEL); + if (!dmap->map) { + dmap->nbits = 0; + return -ENOMEM; + } + + dmap->nbits = NBITS_MIN; + + return 0; +} +#endif diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 20a40e94757f..7cb794211f29 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -276,6 +276,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_gfp_zone_flags); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_readahead_gfp_mask); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_mutex_list_add); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_unlock_slowpath); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_should_fault_around); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_wake_finish); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_fault_around_bytes); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_adjust_alloc_flags); @@ -377,6 +378,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_alloc_pages_may_oom_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_vmscan_kswapd_done); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_begin); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_compaction_end); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mm_kcompactd_cpu_online); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_bus_iommu_probe); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rmqueue); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_resume_begin); @@ -442,3 +444,13 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_trylock_clear); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_folio_trylock_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_trylock_failed_folio); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_hibernate_state); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_should_be_protected); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_add_bypass); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapmem_gather_finish); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_init); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_oom_swapmem_gather_finish); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_do_read_fault); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_read); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_map_pages); diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c index 72115917e0bd..299496e1381d 100644 --- a/drivers/base/power/common.c +++ b/drivers/base/power/common.c @@ -167,6 +167,115 @@ struct device *dev_pm_domain_attach_by_name(struct device *dev, } EXPORT_SYMBOL_GPL(dev_pm_domain_attach_by_name); +/** + * dev_pm_domain_attach_list - Associate a device with its PM domains. + * @dev: The device used to lookup the PM domains for. + * @data: The data used for attaching to the PM domains. + * @list: An out-parameter with an allocated list of attached PM domains. + * + * This function helps to attach a device to its multiple PM domains. The + * caller, which is typically a driver's probe function, may provide a list of + * names for the PM domains that we should try to attach the device to, but it + * may also provide an empty list, in case the attach should be done for all of + * the available PM domains. + * + * Callers must ensure proper synchronization of this function with power + * management callbacks. + * + * Returns the number of attached PM domains or a negative error code in case of + * a failure. Note that, to detach the list of PM domains, the driver shall call + * dev_pm_domain_detach_list(), typically during the remove phase. + */ +int dev_pm_domain_attach_list(struct device *dev, + const struct dev_pm_domain_attach_data *data, + struct dev_pm_domain_list **list) +{ + struct device_node *np = dev->of_node; + struct dev_pm_domain_list *pds; + struct device *pd_dev = NULL; + int ret, i, num_pds = 0; + bool by_id = true; + u32 pd_flags = data ? data->pd_flags : 0; + u32 link_flags = pd_flags & PD_FLAG_NO_DEV_LINK ? 0 : + DL_FLAG_STATELESS | DL_FLAG_PM_RUNTIME; + + if (dev->pm_domain) + return -EEXIST; + + /* For now this is limited to OF based platforms. */ + if (!np) + return 0; + + if (data && data->pd_names) { + num_pds = data->num_pd_names; + by_id = false; + } else { + num_pds = of_count_phandle_with_args(np, "power-domains", + "#power-domain-cells"); + } + + if (num_pds <= 0) + return 0; + + pds = devm_kzalloc(dev, sizeof(*pds), GFP_KERNEL); + if (!pds) + return -ENOMEM; + + pds->pd_devs = devm_kcalloc(dev, num_pds, sizeof(*pds->pd_devs), + GFP_KERNEL); + if (!pds->pd_devs) + return -ENOMEM; + + pds->pd_links = devm_kcalloc(dev, num_pds, sizeof(*pds->pd_links), + GFP_KERNEL); + if (!pds->pd_links) + return -ENOMEM; + + if (link_flags && pd_flags & PD_FLAG_DEV_LINK_ON) + link_flags |= DL_FLAG_RPM_ACTIVE; + + for (i = 0; i < num_pds; i++) { + if (by_id) + pd_dev = dev_pm_domain_attach_by_id(dev, i); + else + pd_dev = dev_pm_domain_attach_by_name(dev, + data->pd_names[i]); + if (IS_ERR_OR_NULL(pd_dev)) { + ret = pd_dev ? PTR_ERR(pd_dev) : -ENODEV; + goto err_attach; + } + + if (link_flags) { + struct device_link *link; + + link = device_link_add(dev, pd_dev, link_flags); + if (!link) { + ret = -ENODEV; + goto err_link; + } + + pds->pd_links[i] = link; + } + + pds->pd_devs[i] = pd_dev; + } + + pds->num_pds = num_pds; + *list = pds; + return num_pds; + +err_link: + dev_pm_domain_detach(pd_dev, true); +err_attach: + while (--i >= 0) { + if (pds->pd_links[i]) + device_link_del(pds->pd_links[i]); + dev_pm_domain_detach(pds->pd_devs[i], true); + } + return ret; +} +EXPORT_SYMBOL_GPL(dev_pm_domain_attach_list); + /** * dev_pm_domain_detach - Detach a device from its PM domain. * @dev: Device to detach. @@ -187,6 +296,31 @@ void dev_pm_domain_detach(struct device *dev, bool power_off) } EXPORT_SYMBOL_GPL(dev_pm_domain_detach); +/** + * dev_pm_domain_detach_list - Detach a list of PM domains. + * @list: The list of PM domains to detach. + * + * This function reverse the actions from dev_pm_domain_attach_list(). + * Typically it should be invoked during the remove phase from drivers. + * + * Callers must ensure proper synchronization of this function with power + * management callbacks. + */ +void dev_pm_domain_detach_list(struct dev_pm_domain_list *list) +{ + int i; + + if (!list) + return; + + for (i = 0; i < list->num_pds; i++) { + if (list->pd_links[i]) + device_link_del(list->pd_links[i]); + dev_pm_domain_detach(list->pd_devs[i], true); + } +} +EXPORT_SYMBOL_GPL(dev_pm_domain_detach_list); + /** * dev_pm_domain_start - Start the device through its PM domain. * @dev: Device to start. diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index d238b47f74c3..f1b14574d53d 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -130,6 +130,7 @@ static const struct genpd_lock_ops genpd_spin_ops = { #define genpd_is_active_wakeup(genpd) (genpd->flags & GENPD_FLAG_ACTIVE_WAKEUP) #define genpd_is_cpu_domain(genpd) (genpd->flags & GENPD_FLAG_CPU_DOMAIN) #define genpd_is_rpm_always_on(genpd) (genpd->flags & GENPD_FLAG_RPM_ALWAYS_ON) +#define genpd_is_opp_table_fw(genpd) (genpd->flags & GENPD_FLAG_OPP_TABLE_FW) static inline bool irq_safe_dev_in_sleep_domain(struct device *dev, const struct generic_pm_domain *genpd) @@ -2319,7 +2320,7 @@ int of_genpd_add_provider_simple(struct device_node *np, genpd->dev.of_node = np; /* Parse genpd OPP table */ - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table(&genpd->dev); if (ret) return dev_err_probe(&genpd->dev, ret, "Failed to add OPP table\n"); @@ -2334,7 +2335,7 @@ int of_genpd_add_provider_simple(struct device_node *np, ret = genpd_add_provider(np, genpd_xlate_simple, genpd); if (ret) { - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2378,7 +2379,7 @@ int of_genpd_add_provider_onecell(struct device_node *np, genpd->dev.of_node = np; /* Parse genpd OPP table */ - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { ret = dev_pm_opp_of_add_table_indexed(&genpd->dev, i); if (ret) { dev_err_probe(&genpd->dev, ret, @@ -2414,7 +2415,7 @@ error: genpd->provider = NULL; genpd->has_provider = false; - if (genpd->set_performance_state) { + if (!genpd_is_opp_table_fw(genpd) && genpd->set_performance_state) { dev_pm_opp_put_opp_table(genpd->opp_table); dev_pm_opp_of_remove_table(&genpd->dev); } @@ -2446,7 +2447,7 @@ void of_genpd_del_provider(struct device_node *np) if (gpd->provider == &np->fwnode) { gpd->has_provider = false; - if (!gpd->set_performance_state) + if (genpd_is_opp_table_fw(gpd) || !gpd->set_performance_state) continue; dev_pm_opp_put_opp_table(gpd->opp_table); diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c index 028df8a5f537..4ee23f4ebf4a 100644 --- a/drivers/cpufreq/scmi-cpufreq.c +++ b/drivers/cpufreq/scmi-cpufreq.c @@ -70,15 +70,35 @@ static unsigned int scmi_cpufreq_fast_switch(struct cpufreq_policy *policy, return 0; } -static int -scmi_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) +static int scmi_cpu_domain_id(struct device *cpu_dev) { - int cpu, domain, tdomain; - struct device *tcpu_dev; + struct device_node *np = cpu_dev->of_node; + struct of_phandle_args domain_id; + int index; - domain = perf_ops->device_domain_id(cpu_dev); - if (domain < 0) - return domain; + if (of_parse_phandle_with_args(np, "clocks", "#clock-cells", 0, + &domain_id)) { + /* Find the corresponding index for power-domain "perf". */ + index = of_property_match_string(np, "power-domain-names", + "perf"); + if (index < 0) + return -EINVAL; + + if (of_parse_phandle_with_args(np, "power-domains", + "#power-domain-cells", index, + &domain_id)) + return -EINVAL; + } + + return domain_id.args[0]; +} + +static int +scmi_get_sharing_cpus(struct device *cpu_dev, int domain, + struct cpumask *cpumask) +{ + int cpu, tdomain; + struct device *tcpu_dev; for_each_possible_cpu(cpu) { if (cpu == cpu_dev->id) @@ -88,7 +108,7 @@ scmi_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) if (!tcpu_dev) continue; - tdomain = perf_ops->device_domain_id(tcpu_dev); + tdomain = scmi_cpu_domain_id(tcpu_dev); if (tdomain == domain) cpumask_set_cpu(cpu, cpumask); } @@ -104,7 +124,7 @@ scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, unsigned long Hz; int ret, domain; - domain = perf_ops->device_domain_id(cpu_dev); + domain = scmi_cpu_domain_id(cpu_dev); if (domain < 0) return domain; @@ -126,7 +146,7 @@ scmi_get_cpu_power(struct device *cpu_dev, unsigned long *power, static int scmi_cpufreq_init(struct cpufreq_policy *policy) { - int ret, nr_opp; + int ret, nr_opp, domain; unsigned int latency; struct device *cpu_dev; struct scmi_data *priv; @@ -138,6 +158,10 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) return -ENODEV; } + domain = scmi_cpu_domain_id(cpu_dev); + if (domain < 0) + return domain; + priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) return -ENOMEM; @@ -148,7 +172,7 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) } /* Obtain CPUs that share SCMI performance controls */ - ret = scmi_get_sharing_cpus(cpu_dev, policy->cpus); + ret = scmi_get_sharing_cpus(cpu_dev, domain, policy->cpus); if (ret) { dev_warn(cpu_dev, "failed to get sharing cpumask\n"); goto out_free_cpumask; @@ -176,7 +200,7 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) */ nr_opp = dev_pm_opp_get_opp_count(cpu_dev); if (nr_opp <= 0) { - ret = perf_ops->device_opps_add(ph, cpu_dev); + ret = perf_ops->device_opps_add(ph, cpu_dev, domain); if (ret) { dev_warn(cpu_dev, "failed to add opps to the device\n"); goto out_free_cpumask; @@ -209,7 +233,7 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) } priv->cpu_dev = cpu_dev; - priv->domain_id = perf_ops->device_domain_id(cpu_dev); + priv->domain_id = domain; policy->driver_data = priv; policy->freq_table = freq_table; @@ -217,14 +241,14 @@ static int scmi_cpufreq_init(struct cpufreq_policy *policy) /* SCMI allows DVFS request for any domain from any CPU */ policy->dvfs_possible_from_any_cpu = true; - latency = perf_ops->transition_latency_get(ph, cpu_dev); + latency = perf_ops->transition_latency_get(ph, domain); if (!latency) latency = CPUFREQ_ETERNAL; policy->cpuinfo.transition_latency = latency; policy->fast_switch_possible = - perf_ops->fast_switch_possible(ph, cpu_dev); + perf_ops->fast_switch_possible(ph, domain); return 0; diff --git a/drivers/firmware/arm_scmi/perf.c b/drivers/firmware/arm_scmi/perf.c index 2775bcafe40f..57e4f1cbdbd2 100644 --- a/drivers/firmware/arm_scmi/perf.c +++ b/drivers/firmware/arm_scmi/perf.c @@ -124,7 +124,6 @@ struct scmi_msg_resp_perf_describe_levels { struct perf_dom_info { bool set_limits; - bool set_perf; bool perf_limit_notify; bool perf_level_notify; bool perf_fastchannels; @@ -132,7 +131,7 @@ struct perf_dom_info { u32 sustained_freq_khz; u32 sustained_perf_level; unsigned long mult_factor; - char name[SCMI_MAX_STR_SIZE]; + struct scmi_perf_domain_info info; struct scmi_opp opp[MAX_OPPS]; struct scmi_fc_info *fc_info; }; @@ -209,7 +208,7 @@ scmi_perf_domain_attributes_get(const struct scmi_protocol_handle *ph, flags = le32_to_cpu(attr->flags); dom_info->set_limits = SUPPORTS_SET_LIMITS(flags); - dom_info->set_perf = SUPPORTS_SET_PERF_LVL(flags); + dom_info->info.set_perf = SUPPORTS_SET_PERF_LVL(flags); dom_info->perf_limit_notify = SUPPORTS_PERF_LIMIT_NOTIFY(flags); dom_info->perf_level_notify = SUPPORTS_PERF_LEVEL_NOTIFY(flags); dom_info->perf_fastchannels = SUPPORTS_PERF_FASTCHANNELS(flags); @@ -225,7 +224,8 @@ scmi_perf_domain_attributes_get(const struct scmi_protocol_handle *ph, dom_info->mult_factor = (dom_info->sustained_freq_khz * 1000UL) / dom_info->sustained_perf_level; - strscpy(dom_info->name, attr->name, SCMI_SHORT_NAME_MAX_SIZE); + strscpy(dom_info->info.name, attr->name, + SCMI_SHORT_NAME_MAX_SIZE); } ph->xops->xfer_put(ph, t); @@ -237,7 +237,7 @@ scmi_perf_domain_attributes_get(const struct scmi_protocol_handle *ph, if (!ret && PROTOCOL_REV_MAJOR(version) >= 0x3 && SUPPORTS_EXTENDED_NAMES(flags)) ph->hops->extended_name_get(ph, PERF_DOMAIN_NAME_GET, domain, - dom_info->name, SCMI_MAX_STR_SIZE); + dom_info->info.name, SCMI_MAX_STR_SIZE); return ret; } @@ -333,6 +333,36 @@ scmi_perf_describe_levels_get(const struct scmi_protocol_handle *ph, u32 domain, return ret; } +static int scmi_perf_num_domains_get(const struct scmi_protocol_handle *ph) +{ + struct scmi_perf_info *pi = ph->get_priv(ph); + + return pi->num_domains; +} + +static inline struct perf_dom_info * +scmi_perf_domain_lookup(const struct scmi_protocol_handle *ph, u32 domain) +{ + struct scmi_perf_info *pi = ph->get_priv(ph); + + if (domain >= pi->num_domains) + return ERR_PTR(-EINVAL); + + return pi->dom_info + domain; +} + +static const struct scmi_perf_domain_info * +scmi_perf_info_get(const struct scmi_protocol_handle *ph, u32 domain) +{ + struct perf_dom_info *dom; + + dom = scmi_perf_domain_lookup(ph, domain); + if (IS_ERR(dom)) + return ERR_PTR(-EINVAL); + + return &dom->info; +} + static int scmi_perf_mb_limits_set(const struct scmi_protocol_handle *ph, u32 domain, u32 max_perf, u32 min_perf) { @@ -356,17 +386,6 @@ static int scmi_perf_mb_limits_set(const struct scmi_protocol_handle *ph, return ret; } -static inline struct perf_dom_info * -scmi_perf_domain_lookup(const struct scmi_protocol_handle *ph, u32 domain) -{ - struct scmi_perf_info *pi = ph->get_priv(ph); - - if (domain >= pi->num_domains) - return ERR_PTR(-EINVAL); - - return pi->dom_info + domain; -} - static int scmi_perf_limits_set(const struct scmi_protocol_handle *ph, u32 domain, u32 max_perf, u32 min_perf) { @@ -579,62 +598,43 @@ static void scmi_perf_domain_init_fc(const struct scmi_protocol_handle *ph, *p_fc = fc; } -/* Device specific ops */ -static int scmi_dev_domain_id(struct device *dev) -{ - struct of_phandle_args clkspec; - - if (of_parse_phandle_with_args(dev->of_node, "clocks", "#clock-cells", - 0, &clkspec)) - return -EINVAL; - - return clkspec.args[0]; -} - static int scmi_dvfs_device_opps_add(const struct scmi_protocol_handle *ph, - struct device *dev) + struct device *dev, u32 domain) { - int idx, ret, domain; + int idx, ret; unsigned long freq; - struct scmi_opp *opp; + struct dev_pm_opp_data data = {}; struct perf_dom_info *dom; - domain = scmi_dev_domain_id(dev); - if (domain < 0) - return -EINVAL; - dom = scmi_perf_domain_lookup(ph, domain); if (IS_ERR(dom)) return PTR_ERR(dom); - for (opp = dom->opp, idx = 0; idx < dom->opp_count; idx++, opp++) { - freq = opp->perf * dom->mult_factor; + for (idx = 0; idx < dom->opp_count; idx++) { + freq = dom->opp[idx].perf * dom->mult_factor; - ret = dev_pm_opp_add(dev, freq, 0); + data.level = dom->opp[idx].perf; + data.freq = freq; + + ret = dev_pm_opp_add_dynamic(dev, &data); if (ret) { dev_warn(dev, "failed to add opp %luHz\n", freq); - - while (idx-- > 0) { - freq = (--opp)->perf * dom->mult_factor; - dev_pm_opp_remove(dev, freq); - } + dev_pm_opp_remove_all_dynamic(dev); return ret; } + + dev_dbg(dev, "[%d][%s]:: Registered OPP[%d] %lu\n", + domain, dom->info.name, idx, freq); } return 0; } static int scmi_dvfs_transition_latency_get(const struct scmi_protocol_handle *ph, - struct device *dev) + u32 domain) { - int domain; struct perf_dom_info *dom; - domain = scmi_dev_domain_id(dev); - if (domain < 0) - return -EINVAL; - dom = scmi_perf_domain_lookup(ph, domain); if (IS_ERR(dom)) return PTR_ERR(dom); @@ -701,15 +701,10 @@ static int scmi_dvfs_est_power_get(const struct scmi_protocol_handle *ph, } static bool scmi_fast_switch_possible(const struct scmi_protocol_handle *ph, - struct device *dev) + u32 domain) { - int domain; struct perf_dom_info *dom; - domain = scmi_dev_domain_id(dev); - if (domain < 0) - return false; - dom = scmi_perf_domain_lookup(ph, domain); if (IS_ERR(dom)) return false; @@ -726,11 +721,12 @@ scmi_power_scale_get(const struct scmi_protocol_handle *ph) } static const struct scmi_perf_proto_ops perf_proto_ops = { + .num_domains_get = scmi_perf_num_domains_get, + .info_get = scmi_perf_info_get, .limits_set = scmi_perf_limits_set, .limits_get = scmi_perf_limits_get, .level_set = scmi_perf_level_set, .level_get = scmi_perf_level_get, - .device_domain_id = scmi_dev_domain_id, .transition_latency_get = scmi_dvfs_transition_latency_get, .device_opps_add = scmi_dvfs_device_opps_add, .freq_set = scmi_dvfs_freq_set, diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c index c6a648fd8744..a78e17a43a9d 100644 --- a/drivers/nvdimm/nd_virtio.c +++ b/drivers/nvdimm/nd_virtio.c @@ -44,6 +44,15 @@ static int virtio_pmem_flush(struct nd_region *nd_region) unsigned long flags; int err, err1; + /* + * Don't bother to submit the request to the device if the device is + * not activated. + */ + if (vdev->config->get_status(vdev) & VIRTIO_CONFIG_S_NEEDS_RESET) { + dev_info(&vdev->dev, "virtio pmem device needs a reset\n"); + return -EIO; + } + might_sleep(); req_data = kmalloc(sizeof(*req_data), GFP_KERNEL); if (!req_data) diff --git a/drivers/opp/core.c b/drivers/opp/core.c index 71d3e3ba909a..5dd9ae2f3489 100644 --- a/drivers/opp/core.c +++ b/drivers/opp/core.c @@ -1011,6 +1011,28 @@ static int _set_required_opps(struct device *dev, return ret; } +static int _set_opp_level(struct device *dev, struct opp_table *opp_table, + struct dev_pm_opp *opp) +{ + unsigned int level = 0; + int ret = 0; + + if (opp) { + if (!opp->level) + return 0; + + level = opp->level; + } + + /* Request a new performance state through the device's PM domain. */ + ret = dev_pm_genpd_set_performance_state(dev, level); + if (ret) + dev_err(dev, "Failed to set performance state %u (%d)\n", level, + ret); + + return ret; +} + static void _find_current_opp(struct device *dev, struct opp_table *opp_table) { struct dev_pm_opp *opp = ERR_PTR(-ENODEV); @@ -1058,8 +1080,13 @@ static int _disable_opp_table(struct device *dev, struct opp_table *opp_table) if (opp_table->regulators) regulator_disable(opp_table->regulators[0]); + ret = _set_opp_level(dev, opp_table, NULL); + if (ret) + goto out; + ret = _set_required_opps(dev, opp_table, NULL, false); +out: opp_table->enabled = false; return ret; } @@ -1102,6 +1129,10 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, return ret; } + ret = _set_opp_level(dev, opp_table, opp); + if (ret) + return ret; + ret = _set_opp_bw(opp_table, opp, dev); if (ret) { dev_err(dev, "Failed to set bw: %d\n", ret); @@ -1145,6 +1176,10 @@ static int _set_opp(struct device *dev, struct opp_table *opp_table, return ret; } + ret = _set_opp_level(dev, opp_table, opp); + if (ret) + return ret; + ret = _set_required_opps(dev, opp_table, opp, false); if (ret) { dev_err(dev, "Failed to set required opps: %d\n", ret); @@ -1914,8 +1949,7 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, * _opp_add_v1() - Allocate a OPP based on v1 bindings. * @opp_table: OPP table * @dev: device for which we do this operation - * @freq: Frequency in Hz for this OPP - * @u_volt: Voltage in uVolts for this OPP + * @data: The OPP data for the OPP to add * @dynamic: Dynamically added OPPs. * * This function adds an opp definition to the opp table and returns status. @@ -1933,10 +1967,10 @@ int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, * -ENOMEM Memory allocation failure */ int _opp_add_v1(struct opp_table *opp_table, struct device *dev, - unsigned long freq, long u_volt, bool dynamic) + struct dev_pm_opp_data *data, bool dynamic) { struct dev_pm_opp *new_opp; - unsigned long tol; + unsigned long tol, u_volt = data->u_volt; int ret; if (!assert_single_clk(opp_table)) @@ -1947,7 +1981,8 @@ int _opp_add_v1(struct opp_table *opp_table, struct device *dev, return -ENOMEM; /* populate the opp table */ - new_opp->rates[0] = freq; + new_opp->rates[0] = data->freq; + new_opp->level = data->level; tol = u_volt * opp_table->voltage_tolerance_v1 / 100; new_opp->supplies[0].u_volt = u_volt; new_opp->supplies[0].u_volt_min = u_volt - tol; @@ -2731,10 +2766,9 @@ unlock: } /** - * dev_pm_opp_add() - Add an OPP table from a table definitions - * @dev: device for which we do this operation - * @freq: Frequency in Hz for this OPP - * @u_volt: Voltage in uVolts for this OPP + * dev_pm_opp_add_dynamic() - Add an OPP table from a table definitions + * @dev: The device for which we do this operation + * @data: The OPP data for the OPP to add * * This function adds an opp definition to the opp table and returns status. * The opp is made available by default and it can be controlled using @@ -2747,7 +2781,7 @@ unlock: * Duplicate OPPs (both freq and volt are same) and !opp->available * -ENOMEM Memory allocation failure */ -int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) +int dev_pm_opp_add_dynamic(struct device *dev, struct dev_pm_opp_data *data) { struct opp_table *opp_table; int ret; @@ -2759,12 +2793,24 @@ int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) /* Fix regulator count for dynamic OPPs */ opp_table->regulator_count = 1; - ret = _opp_add_v1(opp_table, dev, freq, u_volt, true); + ret = _opp_add_v1(opp_table, dev, data, true); if (ret) dev_pm_opp_put_opp_table(opp_table); return ret; } +EXPORT_SYMBOL_GPL(dev_pm_opp_add_dynamic); + +int dev_pm_opp_add(struct device *dev, unsigned long freq, + unsigned long u_volt) +{ + struct dev_pm_opp_data data = { + .freq = freq, + .u_volt = u_volt, + }; + + return dev_pm_opp_add_dynamic(dev, &data); +} EXPORT_SYMBOL_GPL(dev_pm_opp_add); /** diff --git a/drivers/opp/of.c b/drivers/opp/of.c index 605d68673f92..daad18d5928b 100644 --- a/drivers/opp/of.c +++ b/drivers/opp/of.c @@ -1108,11 +1108,15 @@ static int _of_add_opp_table_v1(struct device *dev, struct opp_table *opp_table) while (nr) { unsigned long freq = be32_to_cpup(val++) * 1000; unsigned long volt = be32_to_cpup(val++); + struct dev_pm_opp_data data = { + .freq = freq, + .u_volt = volt, + }; - ret = _opp_add_v1(opp_table, dev, freq, volt, false); + ret = _opp_add_v1(opp_table, dev, &data, false); if (ret) { dev_err(dev, "%s: Failed to add OPP %ld (%d)\n", - __func__, freq, ret); + __func__, data.freq, ret); goto remove_static_opp; } nr -= 2; diff --git a/drivers/opp/opp.h b/drivers/opp/opp.h index 3a6e077df386..cb3bc6056e44 100644 --- a/drivers/opp/opp.h +++ b/drivers/opp/opp.h @@ -252,7 +252,7 @@ struct dev_pm_opp *_opp_allocate(struct opp_table *opp_table); void _opp_free(struct dev_pm_opp *opp); int _opp_compare_key(struct opp_table *opp_table, struct dev_pm_opp *opp1, struct dev_pm_opp *opp2); int _opp_add(struct device *dev, struct dev_pm_opp *new_opp, struct opp_table *opp_table); -int _opp_add_v1(struct opp_table *opp_table, struct device *dev, unsigned long freq, long u_volt, bool dynamic); +int _opp_add_v1(struct opp_table *opp_table, struct device *dev, struct dev_pm_opp_data *data, bool dynamic); void _dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask, int last_cpu); struct opp_table *_add_opp_table_indexed(struct device *dev, int index, bool getclk); void _put_opp_list_kref(struct opp_table *opp_table); diff --git a/drivers/tty/serial/8250/8250_bcm7271.c b/drivers/tty/serial/8250/8250_bcm7271.c index a28f115f6194..e011510737d7 100644 --- a/drivers/tty/serial/8250/8250_bcm7271.c +++ b/drivers/tty/serial/8250/8250_bcm7271.c @@ -1059,7 +1059,7 @@ static int brcmuart_probe(struct platform_device *pdev) dev_dbg(dev, "DMA is %senabled\n", priv->dma_enabled ? "" : "not "); memset(&up, 0, sizeof(up)); - up.port.type = PORT_16550A; + up.port.type = PORT_BCM7271; up.port.uartclk = clk_rate; up.port.dev = dev; up.port.mapbase = mapbase; @@ -1073,8 +1073,6 @@ static int brcmuart_probe(struct platform_device *pdev) | UPF_FIXED_PORT | UPF_FIXED_TYPE; up.port.dev = dev; up.port.private_data = priv; - up.capabilities = UART_CAP_FIFO | UART_CAP_AFE; - up.port.fifosize = 32; /* Check for a fixed line number */ ret = of_alias_get_id(np, "serial"); diff --git a/drivers/tty/serial/8250/8250_port.c b/drivers/tty/serial/8250/8250_port.c index 1dc64a3401cc..d4b962676308 100644 --- a/drivers/tty/serial/8250/8250_port.c +++ b/drivers/tty/serial/8250/8250_port.c @@ -314,6 +314,14 @@ static const struct serial8250_config uart_config[] = { .rxtrig_bytes = {1, 4, 8, 14}, .flags = UART_CAP_FIFO, }, + [PORT_BCM7271] = { + .name = "Broadcom BCM7271 UART", + .fifo_size = 32, + .tx_loadsz = 32, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01, + .rxtrig_bytes = {1, 8, 16, 30}, + .flags = UART_CAP_FIFO | UART_CAP_AFE, + }, }; /* Uart divisor latch read */ diff --git a/drivers/ufs/core/ufs-mcq.c b/drivers/ufs/core/ufs-mcq.c index 7ed17949febe..ad4e8d63c676 100644 --- a/drivers/ufs/core/ufs-mcq.c +++ b/drivers/ufs/core/ufs-mcq.c @@ -105,16 +105,15 @@ EXPORT_SYMBOL_GPL(ufshcd_mcq_config_mac); * @hba: per adapter instance * @req: pointer to the request to be issued * - * Returns the hardware queue instance on which the request would - * be queued. + * Return: the hardware queue instance on which the request will be or has + * been queued. %NULL if the request has already been freed. */ struct ufs_hw_queue *ufshcd_mcq_req_to_hwq(struct ufs_hba *hba, struct request *req) { - u32 utag = blk_mq_unique_tag(req); - u32 hwq = blk_mq_unique_tag_to_hwq(utag); + struct blk_mq_hw_ctx *hctx = READ_ONCE(req->mq_hctx); - return &hba->uhq[hwq]; + return hctx ? &hba->uhq[hctx->queue_num] : NULL; } /** @@ -521,6 +520,8 @@ int ufshcd_mcq_sq_cleanup(struct ufs_hba *hba, int task_tag) if (!cmd) return -EINVAL; hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(cmd)); + if (!hwq) + return 0; } else { hwq = hba->dev_cmd_queue; } diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c index 224cb31bbf06..a788d9537e4e 100644 --- a/drivers/ufs/core/ufshcd.c +++ b/drivers/ufs/core/ufshcd.c @@ -6489,6 +6489,8 @@ static bool ufshcd_abort_all(struct ufs_hba *hba) goto out; } hwq = ufshcd_mcq_req_to_hwq(hba, scsi_cmd_to_rq(lrbp->cmd)); + if (!hwq) + return 0; spin_lock_irqsave(&hwq->cq_lock, flags); if (ufshcd_cmd_inflight(lrbp->cmd)) ufshcd_release_scsi_cmd(hba, lrbp); diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index 36034ce25539..a820e3e24d7a 100644 --- a/drivers/usb/typec/tcpm/tcpm.c +++ b/drivers/usb/typec/tcpm/tcpm.c @@ -2453,7 +2453,7 @@ static int tcpm_register_sink_caps(struct tcpm_port *port) { struct usb_power_delivery_desc desc = { port->negotiated_rev }; struct usb_power_delivery_capabilities_desc caps = { }; - struct usb_power_delivery_capabilities *cap = port->partner_source_caps; + struct usb_power_delivery_capabilities *cap; if (!port->partner_pd) port->partner_pd = usb_power_delivery_register(NULL, &desc); @@ -2463,11 +2463,6 @@ static int tcpm_register_sink_caps(struct tcpm_port *port) memcpy(caps.pdo, port->sink_caps, sizeof(u32) * port->nr_sink_caps); caps.role = TYPEC_SINK; - if (cap) { - usb_power_delivery_unregister_capabilities(cap); - port->partner_source_caps = NULL; - } - cap = usb_power_delivery_register_capabilities(port->partner_pd, &caps); if (IS_ERR(cap)) return PTR_ERR(cap); diff --git a/fs/erofs/zutil.c b/fs/erofs/zutil.c index e8e901c839a7..1b3eeb27f21b 100644 --- a/fs/erofs/zutil.c +++ b/fs/erofs/zutil.c @@ -111,7 +111,8 @@ int z_erofs_gbuf_growsize(unsigned int nrpages) out: if (i < z_erofs_gbuf_count && tmp_pages) { for (j = 0; j < nrpages; ++j) - if (tmp_pages[j] && tmp_pages[j] != gbuf->pages[j]) + if (tmp_pages[j] && (j >= gbuf->nrpages || + tmp_pages[j] != gbuf->pages[j])) __free_page(tmp_pages[j]); kfree(tmp_pages); } diff --git a/fs/exec.c b/fs/exec.c index e9fb363ec9a1..751c13fca83d 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -73,6 +73,7 @@ #include "internal.h" #include +#include static int bprm_creds_from_file(struct linux_binprm *bprm); @@ -1238,6 +1239,7 @@ void __set_task_comm(struct task_struct *tsk, const char *buf, bool exec) task_lock(tsk); trace_task_rename(tsk, buf); strscpy_pad(tsk->comm, buf, sizeof(tsk->comm)); + trace_android_vh_set_task_comm(tsk); task_unlock(tsk); perf_event_comm(tsk, exec); } diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 4156ab127ade..63647de3d330 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -798,6 +798,7 @@ enum { FI_ALIGNED_WRITE, /* enable aligned write */ FI_COW_FILE, /* indicate COW file */ FI_ATOMIC_COMMITTED, /* indicate atomic commit completed except disk sync */ + FI_ATOMIC_DIRTIED, /* indicate atomic file is dirtied */ FI_ATOMIC_REPLACE, /* indicate atomic replace */ FI_MAX, /* max flag, never be used */ }; @@ -3001,7 +3002,6 @@ static inline void __mark_inode_dirty_flag(struct inode *inode, case FI_INLINE_DOTS: case FI_PIN_FILE: case FI_COMPRESS_RELEASED: - case FI_ATOMIC_COMMITTED: f2fs_mark_inode_dirty_sync(inode, true); } } diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index f0bd87cfe07c..9bd78d45a0bd 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -33,6 +33,11 @@ void f2fs_mark_inode_dirty_sync(struct inode *inode, bool sync) if (f2fs_inode_dirtied(inode, sync)) return; + if (f2fs_is_atomic_file(inode)) { + set_inode_flag(inode, FI_ATOMIC_DIRTIED); + return; + } + mark_inode_dirty_sync(inode); } diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index 87751df3565a..e5ee1aa7ee34 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -199,6 +199,10 @@ void f2fs_abort_atomic_write(struct inode *inode, bool clean) clear_inode_flag(inode, FI_ATOMIC_COMMITTED); clear_inode_flag(inode, FI_ATOMIC_REPLACE); clear_inode_flag(inode, FI_ATOMIC_FILE); + if (is_inode_flag_set(inode, FI_ATOMIC_DIRTIED)) { + clear_inode_flag(inode, FI_ATOMIC_DIRTIED); + f2fs_mark_inode_dirty_sync(inode, true); + } stat_dec_atomic_inode(inode); F2FS_I(inode)->atomic_write_task = NULL; @@ -368,6 +372,10 @@ out: } else { sbi->committed_atomic_block += fi->atomic_write_cnt; set_inode_flag(inode, FI_ATOMIC_COMMITTED); + if (is_inode_flag_set(inode, FI_ATOMIC_DIRTIED)) { + clear_inode_flag(inode, FI_ATOMIC_DIRTIED); + f2fs_mark_inode_dirty_sync(inode, true); + } } __complete_revoke_list(inode, &revoke_list, ret ? true : false); diff --git a/include/linux/mm.h b/include/linux/mm.h index a17bd3a6413f..3a031ad7ed28 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -834,6 +835,8 @@ static inline void vm_flags_reset(struct vm_area_struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); + /* Preserve padding flags */ + flags = vma_pad_fixup_flags(vma, flags); vm_flags_init(vma, flags); } @@ -841,6 +844,8 @@ static inline void vm_flags_reset_once(struct vm_area_struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); + /* Preserve padding flags */ + flags = vma_pad_fixup_flags(vma, flags); WRITE_ONCE(ACCESS_PRIVATE(vma, __vm_flags), flags); } diff --git a/include/linux/pgsize_migration.h b/include/linux/pgsize_migration.h index e3dc1de19f83..48672dbc84e9 100644 --- a/include/linux/pgsize_migration.h +++ b/include/linux/pgsize_migration.h @@ -13,35 +13,9 @@ * page size in Android. */ -#include +#include #include -#include - -/* - * vm_flags representation of VMA padding pages. - * - * This allows the kernel to identify the portion of an ELF LOAD segment VMA - * that is padding. - * - * 4 high bits of vm_flags [63,60] are used to represent ELF segment padding - * up to 60kB, which is sufficient for ELFs of both 16kB and 64kB segment - * alignment (p_align). - * - * The representation is illustrated below. - * - * 63 62 61 60 - * _________ _________ _________ _________ - * | Bit 3 | Bit 2 | Bit 1 | Bit 0 | - * | of 4kB | of 4kB | of 4kB | of 4kB | - * | chunks | chunks | chunks | chunks | - * |_________|_________|_________|_________| - */ - -#define VM_PAD_WIDTH 4 -#define VM_PAD_SHIFT (BITS_PER_LONG - VM_PAD_WIDTH) -#define VM_TOTAL_PAD_PAGES ((1ULL << VM_PAD_WIDTH) - 1) -#define VM_PAD_MASK (VM_TOTAL_PAD_PAGES << VM_PAD_SHIFT) -#define VMA_PAD_START(vma) (vma->vm_end - (vma_pad_pages(vma) << PAGE_SHIFT)) +#include #if PAGE_SIZE == SZ_4K && defined(CONFIG_64BIT) extern void vma_set_pad_pages(struct vm_area_struct *vma, @@ -63,9 +37,6 @@ extern void show_map_pad_vma(struct vm_area_struct *vma, extern void split_pad_vma(struct vm_area_struct *vma, struct vm_area_struct *new, unsigned long addr, int new_below); -extern unsigned long vma_pad_fixup_flags(struct vm_area_struct *vma, - unsigned long newflags); - extern bool is_mergable_pad_vma(struct vm_area_struct *vma, unsigned long vm_flags); @@ -107,12 +78,6 @@ static inline void split_pad_vma(struct vm_area_struct *vma, struct vm_area_stru { } -static inline unsigned long vma_pad_fixup_flags(struct vm_area_struct *vma, - unsigned long newflags) -{ - return newflags; -} - static inline bool is_mergable_pad_vma(struct vm_area_struct *vma, unsigned long vm_flags) { diff --git a/include/linux/pgsize_migration_inline.h b/include/linux/pgsize_migration_inline.h new file mode 100644 index 000000000000..362eed4b7dcc --- /dev/null +++ b/include/linux/pgsize_migration_inline.h @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _LINUX_PAGE_SIZE_MIGRATION_INLINE_H +#define _LINUX_PAGE_SIZE_MIGRATION_INLINE_H + +/* + * Page Size Migration + * + * Copyright (c) 2024, Google LLC. + * Author: Kalesh Singh + * + * This file contains inline APIs for mitigations to ensure + * app compatibility during the transition from 4kB to 16kB + * page size in Android. + */ + +#include +#include + +#include + +/* + * vm_flags representation of VMA padding pages. + * + * This allows the kernel to identify the portion of an ELF LOAD segment VMA + * that is padding. + * + * 4 high bits of vm_flags [63,60] are used to represent ELF segment padding + * up to 60kB, which is sufficient for ELFs of both 16kB and 64kB segment + * alignment (p_align). + * + * The representation is illustrated below. + * + * 63 62 61 60 + * _________ _________ _________ _________ + * | Bit 3 | Bit 2 | Bit 1 | Bit 0 | + * | of 4kB | of 4kB | of 4kB | of 4kB | + * | chunks | chunks | chunks | chunks | + * |_________|_________|_________|_________| + */ + +#define VM_PAD_WIDTH 4 +#define VM_PAD_SHIFT (BITS_PER_LONG - VM_PAD_WIDTH) +#define VM_TOTAL_PAD_PAGES ((1ULL << VM_PAD_WIDTH) - 1) +#define VM_PAD_MASK (VM_TOTAL_PAD_PAGES << VM_PAD_SHIFT) +#define VMA_PAD_START(vma) (vma->vm_end - (vma_pad_pages(vma) << PAGE_SHIFT)) + +#if PAGE_SIZE == SZ_4K && defined(CONFIG_64BIT) +/* + * Sets the correct padding bits / flags for a VMA split. + */ +static inline unsigned long vma_pad_fixup_flags(struct vm_area_struct *vma, + unsigned long newflags) +{ + if (newflags & VM_PAD_MASK) + return (newflags & ~VM_PAD_MASK) | (vma->vm_flags & VM_PAD_MASK); + else + return newflags; +} +#else /* PAGE_SIZE != SZ_4K || !defined(CONFIG_64BIT) */ +static inline unsigned long vma_pad_fixup_flags(struct vm_area_struct *vma, + unsigned long newflags) +{ + return newflags; +} +#endif /* PAGE_SIZE == SZ_4K && defined(CONFIG_64BIT) */ + +#endif /* _LINUX_PAGE_SIZE_MIGRATION_INLINE_H */ diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index ebc351698090..6649c5397697 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h @@ -18,6 +18,33 @@ #include #include +/* + * Flags to control the behaviour when attaching a device to its PM domains. + * + * PD_FLAG_NO_DEV_LINK: As the default behaviour creates a device-link + * for every PM domain that gets attached, this + * flag can be used to skip that. + * + * PD_FLAG_DEV_LINK_ON: Add the DL_FLAG_RPM_ACTIVE to power-on the + * supplier and its PM domain when creating the + * device-links. + * + */ +#define PD_FLAG_NO_DEV_LINK BIT(0) +#define PD_FLAG_DEV_LINK_ON BIT(1) + +struct dev_pm_domain_attach_data { + const char * const *pd_names; + const u32 num_pd_names; + const u32 pd_flags; +}; + +struct dev_pm_domain_list { + struct device **pd_devs; + struct device_link **pd_links; + u32 num_pds; +}; + /* * Flags to control the behaviour of a genpd. * @@ -60,6 +87,10 @@ * GENPD_FLAG_MIN_RESIDENCY: Enable the genpd governor to consider its * components' next wakeup when determining the * optimal idle state. + * + * GENPD_FLAG_OPP_TABLE_FW: The genpd provider supports performance states, + * but its corresponding OPP tables are not + * described in DT, but are given directly by FW. */ #define GENPD_FLAG_PM_CLK (1U << 0) #define GENPD_FLAG_IRQ_SAFE (1U << 1) @@ -68,6 +99,7 @@ #define GENPD_FLAG_CPU_DOMAIN (1U << 4) #define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5) #define GENPD_FLAG_MIN_RESIDENCY (1U << 6) +#define GENPD_FLAG_OPP_TABLE_FW (1U << 7) enum gpd_status { GENPD_STATE_ON = 0, /* PM domain is on */ @@ -415,7 +447,11 @@ struct device *dev_pm_domain_attach_by_id(struct device *dev, unsigned int index); struct device *dev_pm_domain_attach_by_name(struct device *dev, const char *name); +int dev_pm_domain_attach_list(struct device *dev, + const struct dev_pm_domain_attach_data *data, + struct dev_pm_domain_list **list); void dev_pm_domain_detach(struct device *dev, bool power_off); +void dev_pm_domain_detach_list(struct dev_pm_domain_list *list); int dev_pm_domain_start(struct device *dev); void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd); #else @@ -433,7 +469,14 @@ static inline struct device *dev_pm_domain_attach_by_name(struct device *dev, { return NULL; } +static inline int dev_pm_domain_attach_list(struct device *dev, + const struct dev_pm_domain_attach_data *data, + struct dev_pm_domain_list **list) +{ + return 0; +} static inline void dev_pm_domain_detach(struct device *dev, bool power_off) {} +static inline void dev_pm_domain_detach_list(struct dev_pm_domain_list *list) {} static inline int dev_pm_domain_start(struct device *dev) { return 0; diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h index dc1fb5890792..a2900f3a85ab 100644 --- a/include/linux/pm_opp.h +++ b/include/linux/pm_opp.h @@ -92,6 +92,18 @@ struct dev_pm_opp_config { struct device ***virt_devs; }; +/** + * struct dev_pm_opp_data - The data to use to initialize an OPP. + * @level: The performance level for the OPP. + * @freq: The clock rate in Hz for the OPP. + * @u_volt: The voltage in uV for the OPP. + */ +struct dev_pm_opp_data { + unsigned int level; + unsigned long freq; + unsigned long u_volt; +}; + #if defined(CONFIG_PM_OPP) struct opp_table *dev_pm_opp_get_opp_table(struct device *dev); @@ -140,8 +152,9 @@ struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev, void dev_pm_opp_put(struct dev_pm_opp *opp); -int dev_pm_opp_add(struct device *dev, unsigned long freq, - unsigned long u_volt); +int dev_pm_opp_add_dynamic(struct device *dev, struct dev_pm_opp_data *opp); +int dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt); + void dev_pm_opp_remove(struct device *dev, unsigned long freq); void dev_pm_opp_remove_all_dynamic(struct device *dev); @@ -291,8 +304,14 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev, static inline void dev_pm_opp_put(struct dev_pm_opp *opp) {} -static inline int dev_pm_opp_add(struct device *dev, unsigned long freq, - unsigned long u_volt) +static inline int +dev_pm_opp_add_dynamic(struct device *dev, struct dev_pm_opp_data *opp) +{ + return -EOPNOTSUPP; +} + +static inline int +dev_pm_opp_add(struct device *dev, unsigned long freq, unsigned long u_volt) { return -EOPNOTSUPP; } diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h index a21d111cfbd4..ae8ddaf33417 100644 --- a/include/linux/scmi_protocol.h +++ b/include/linux/scmi_protocol.h @@ -100,15 +100,21 @@ struct scmi_clk_proto_ops { ANDROID_KABI_RESERVE(1); }; +struct scmi_perf_domain_info { + char name[SCMI_MAX_STR_SIZE]; + bool set_perf; +}; + /** * struct scmi_perf_proto_ops - represents the various operations provided * by SCMI Performance Protocol * + * @num_domains_get: gets the number of supported performance domains + * @info_get: get the information of a performance domain * @limits_set: sets limits on the performance level of a domain * @limits_get: gets limits on the performance level of a domain * @level_set: sets the performance level of a domain * @level_get: gets the performance level of a domain - * @device_domain_id: gets the scmi domain id for a given device * @transition_latency_get: gets the DVFS transition latency for a given device * @device_opps_add: adds all the OPPs for a given device * @freq_set: sets the frequency for a given device using sustained frequency @@ -123,6 +129,9 @@ struct scmi_clk_proto_ops { * or in some other (abstract) scale */ struct scmi_perf_proto_ops { + int (*num_domains_get)(const struct scmi_protocol_handle *ph); + const struct scmi_perf_domain_info __must_check *(*info_get) + (const struct scmi_protocol_handle *ph, u32 domain); int (*limits_set)(const struct scmi_protocol_handle *ph, u32 domain, u32 max_perf, u32 min_perf); int (*limits_get)(const struct scmi_protocol_handle *ph, u32 domain, @@ -131,11 +140,10 @@ struct scmi_perf_proto_ops { u32 level, bool poll); int (*level_get)(const struct scmi_protocol_handle *ph, u32 domain, u32 *level, bool poll); - int (*device_domain_id)(struct device *dev); int (*transition_latency_get)(const struct scmi_protocol_handle *ph, - struct device *dev); + u32 domain); int (*device_opps_add)(const struct scmi_protocol_handle *ph, - struct device *dev); + struct device *dev, u32 domain); int (*freq_set)(const struct scmi_protocol_handle *ph, u32 domain, unsigned long rate, bool poll); int (*freq_get)(const struct scmi_protocol_handle *ph, u32 domain, @@ -143,7 +151,7 @@ struct scmi_perf_proto_ops { int (*est_power_get)(const struct scmi_protocol_handle *ph, u32 domain, unsigned long *rate, unsigned long *power); bool (*fast_switch_possible)(const struct scmi_protocol_handle *ph, - struct device *dev); + u32 domain); enum scmi_power_scale (*power_scale_get)(const struct scmi_protocol_handle *ph); ANDROID_KABI_RESERVE(1); diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index b8527123813f..776ede13ae0c 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -145,6 +145,9 @@ DECLARE_HOOK(android_vh_mm_compaction_begin, DECLARE_HOOK(android_vh_mm_compaction_end, TP_PROTO(struct compact_control *cc, long vendor_ret), TP_ARGS(cc, vendor_ret)); +DECLARE_HOOK(android_vh_mm_kcompactd_cpu_online, + TP_PROTO(int cpu), + TP_ARGS(cpu)); DECLARE_HOOK(android_vh_free_unref_page_bypass, TP_PROTO(struct page *page, int order, int migratetype, bool *bypass), TP_ARGS(page, order, migratetype, bypass)); @@ -208,6 +211,9 @@ DECLARE_HOOK(android_vh_look_around, DECLARE_HOOK(android_vh_mm_alloc_pages_direct_reclaim_enter, TP_PROTO(unsigned int order), TP_ARGS(order)); +DECLARE_HOOK(android_vh_should_fault_around, + TP_PROTO(struct vm_fault *vmf, bool *should_around), + TP_ARGS(vmf, should_around)); DECLARE_HOOK(android_vh_mm_alloc_pages_direct_reclaim_exit, TP_PROTO(unsigned long did_some_progress, int retry_times), TP_ARGS(did_some_progress, retry_times)); @@ -246,6 +252,36 @@ DECLARE_HOOK(android_vh_shmem_swapin_folio, DECLARE_HOOK(android_vh_madvise_cold_or_pageout_page, TP_PROTO(bool pageout, struct page *page), TP_ARGS(pageout, page)); +DECLARE_HOOK(android_vh_page_should_be_protected, + TP_PROTO(struct folio *folio, unsigned long nr_scanned, + s8 priority, u64 *ext, int *should_protect), + TP_ARGS(folio, nr_scanned, priority, ext, should_protect)); + +DECLARE_HOOK(android_vh_swapmem_gather_init, + TP_PROTO(struct mm_struct *mm), + TP_ARGS(mm)); +DECLARE_HOOK(android_vh_swapmem_gather_add_bypass, + TP_PROTO(struct mm_struct *mm, swp_entry_t entry, bool *bypass), + TP_ARGS(mm, entry, bypass)); +DECLARE_HOOK(android_vh_swapmem_gather_finish, + TP_PROTO(struct mm_struct *mm), + TP_ARGS(mm)); +DECLARE_HOOK(android_vh_oom_swapmem_gather_init, + TP_PROTO(struct mm_struct *mm), + TP_ARGS(mm)); +DECLARE_HOOK(android_vh_oom_swapmem_gather_finish, + TP_PROTO(struct mm_struct *mm), + TP_ARGS(mm)); +DECLARE_HOOK(android_vh_do_read_fault, + TP_PROTO(struct vm_fault *vmf, unsigned long fault_around_bytes), + TP_ARGS(vmf, fault_around_bytes)); +DECLARE_HOOK(android_vh_filemap_read, + TP_PROTO(struct file *file, loff_t pos, size_t size), + TP_ARGS(file, pos, size)); +DECLARE_HOOK(android_vh_filemap_map_pages, + TP_PROTO(struct file *file, pgoff_t first_pgoff, + pgoff_t last_pgoff, vm_fault_t ret), + TP_ARGS(file, first_pgoff, last_pgoff, ret)); #endif /* _TRACE_HOOK_MM_H */ /* This part must be outside protection */ diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 61af20b66740..ce26b58b9e3c 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -458,6 +458,10 @@ DECLARE_HOOK(android_vh_prio_restore, TP_PROTO(int saved_prio), TP_ARGS(saved_prio)); +DECLARE_HOOK(android_vh_set_task_comm, + TP_PROTO(struct task_struct *p), + TP_ARGS(p)); + #endif /* _TRACE_HOOK_SCHED_H */ /* This part must be outside protection */ #include diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 0c5385bdb175..369a2c596376 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -69,6 +69,9 @@ DECLARE_HOOK(android_vh_do_folio_trylock, TP_PROTO(struct folio *folio, struct rw_semaphore *sem, bool *got_lock, bool *skip), TP_ARGS(folio, sem, got_lock, skip)); +DECLARE_HOOK(android_vh_page_referenced_check_bypass, + TP_PROTO(struct folio *folio, unsigned long nr_to_scan, int lru, bool *bypass), + TP_ARGS(folio, nr_to_scan, lru, bypass)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/include/uapi/linux/android/binder.h b/include/uapi/linux/android/binder.h index 7fa36a8ad30d..f9c33731af86 100644 --- a/include/uapi/linux/android/binder.h +++ b/include/uapi/linux/android/binder.h @@ -284,6 +284,12 @@ struct binder_frozen_status_info { __u32 async_recv; }; +struct binder_frozen_state_info { + binder_uintptr_t cookie; + __u32 is_frozen; + __u32 reserved; +}; + /* struct binder_extened_error - extended error information * @id: identifier for the failed operation * @command: command as defined by binder_driver_return_protocol @@ -508,6 +514,17 @@ enum binder_driver_return_protocol { * asynchronous transaction makes the allocated async buffer size exceed * detection threshold. No parameters. */ + + BR_FROZEN_BINDER = _IOR('r', 21, struct binder_frozen_state_info), + /* + * The cookie and a boolean (is_frozen) that indicates whether the process + * transitioned into a frozen or an unfrozen state. + */ + + BR_CLEAR_FREEZE_NOTIFICATION_DONE = _IOR('r', 22, binder_uintptr_t), + /* + * void *: cookie + */ }; enum binder_driver_command_protocol { @@ -591,6 +608,25 @@ enum binder_driver_command_protocol { /* * binder_transaction_data_sg: the sent command. */ + + BC_REQUEST_FREEZE_NOTIFICATION = + _IOW('c', 19, struct binder_handle_cookie), + /* + * int: handle + * void *: cookie + */ + + BC_CLEAR_FREEZE_NOTIFICATION = _IOW('c', 20, + struct binder_handle_cookie), + /* + * int: handle + * void *: cookie + */ + + BC_FREEZE_NOTIFICATION_DONE = _IOW('c', 21, binder_uintptr_t), + /* + * void *: cookie + */ }; #endif /* _UAPI_LINUX_BINDER_H */ diff --git a/include/uapi/linux/serial_core.h b/include/uapi/linux/serial_core.h index 3ba34d8378bd..1138d9bf7b18 100644 --- a/include/uapi/linux/serial_core.h +++ b/include/uapi/linux/serial_core.h @@ -144,6 +144,9 @@ /* Blackfin bf5xx */ #define PORT_BFIN 75 +/* Broadcom BCM7271 UART */ +#define PORT_BCM7271 76 + /* Broadcom SB1250, etc. SOC */ #define PORT_SB1250_DUART 77 diff --git a/kernel/events/core.c b/kernel/events/core.c index f3fa7d565089..a92188783ed1 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -13328,7 +13328,8 @@ 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; + if (leader) + leader->group_generation = parent_event->group_generation; return 0; } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 508423887370..043c5a31abfd 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -721,7 +721,6 @@ static void update_rq_clock_task(struct rq *rq, s64 delta) rq->prev_irq_time += irq_delta; delta -= irq_delta; - psi_account_irqtime(rq->curr, irq_delta); #endif #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING if (static_key_false((¶virt_steal_rq_enabled))) { @@ -5679,7 +5678,7 @@ void scheduler_tick(void) { int cpu = smp_processor_id(); struct rq *rq = cpu_rq(cpu); - struct task_struct *curr = rq->curr; + struct task_struct *curr; struct rq_flags rf; unsigned long thermal_pressure; u64 resched_latency; @@ -5691,6 +5690,9 @@ void scheduler_tick(void) rq_lock(rq, &rf); + curr = rq->curr; + psi_account_irqtime(rq, curr, NULL); + update_rq_clock(rq); trace_android_rvh_tick_entry(rq); @@ -6736,6 +6738,7 @@ static void __sched notrace __schedule(unsigned int sched_mode) ++*switch_count; migrate_disable_switch(rq, prev); + psi_account_irqtime(rq, prev, next); psi_sched_switch(prev, next, !task_on_rq_queued(prev)); trace_sched_switch(sched_mode & SM_MASK_PREEMPT, prev, next, prev_state); diff --git a/kernel/sched/psi.c b/kernel/sched/psi.c index 55be195660a9..eb69db4b2d6f 100644 --- a/kernel/sched/psi.c +++ b/kernel/sched/psi.c @@ -737,6 +737,7 @@ static void psi_group_change(struct psi_group *group, int cpu, enum psi_states s; u32 state_mask; + lockdep_assert_rq_held(cpu_rq(cpu)); groupc = per_cpu_ptr(group->pcpu, cpu); /* @@ -955,19 +956,31 @@ void psi_task_switch(struct task_struct *prev, struct task_struct *next, } #ifdef CONFIG_IRQ_TIME_ACCOUNTING -void psi_account_irqtime(struct task_struct *task, u32 delta) +static DEFINE_PER_CPU(u64, psi_irq_time); +void psi_account_irqtime(struct rq *rq, struct task_struct *curr, struct task_struct *prev) { - int cpu = task_cpu(task); + int cpu = task_cpu(curr); struct psi_group *group; struct psi_group_cpu *groupc; - u64 now; + u64 now, irq, *psi_time; + s64 delta; - if (!task->pid) + if (!curr->pid) + return; + + lockdep_assert_rq_held(rq); + group = task_psi_group(curr); + if (prev && task_psi_group(prev) == group) return; now = cpu_clock(cpu); + irq = irq_time_read(cpu); + psi_time = &per_cpu(psi_irq_time, cpu); + delta = (s64)(irq - *psi_time); + if (delta < 0) + return; + *psi_time = irq; - group = task_psi_group(task); do { if (!group->enabled) continue; diff --git a/kernel/sched/stats.h b/kernel/sched/stats.h index 84a188913cc9..b49a96fad1d2 100644 --- a/kernel/sched/stats.h +++ b/kernel/sched/stats.h @@ -110,8 +110,12 @@ __schedstats_from_se(struct sched_entity *se) void psi_task_change(struct task_struct *task, int clear, int set); void psi_task_switch(struct task_struct *prev, struct task_struct *next, bool sleep); -void psi_account_irqtime(struct task_struct *task, u32 delta); - +#ifdef CONFIG_IRQ_TIME_ACCOUNTING +void psi_account_irqtime(struct rq *rq, struct task_struct *curr, struct task_struct *prev); +#else +static inline void psi_account_irqtime(struct rq *rq, struct task_struct *curr, + struct task_struct *prev) {} +#endif /*CONFIG_IRQ_TIME_ACCOUNTING */ /* * PSI tracks state that persists across sleeps, such as iowaits and * memory stalls. As a result, it has to distinguish between sleeps, @@ -206,7 +210,8 @@ static inline void psi_ttwu_dequeue(struct task_struct *p) {} static inline void psi_sched_switch(struct task_struct *prev, struct task_struct *next, bool sleep) {} -static inline void psi_account_irqtime(struct task_struct *task, u32 delta) {} +static inline void psi_account_irqtime(struct rq *rq, struct task_struct *curr, + struct task_struct *prev) {} #endif /* CONFIG_PSI */ #ifdef CONFIG_SCHED_INFO diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index 8a3ce9f567f1..46a67d9b6344 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -115,3 +115,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_blocked_fair); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_rt_rq_load_avg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_prio_inheritance); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_prio_restore); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_task_comm); diff --git a/lib/show_mem.c b/lib/show_mem.c index f62c5b38470c..8848039712c8 100644 --- a/lib/show_mem.c +++ b/lib/show_mem.c @@ -44,3 +44,4 @@ void __show_mem(unsigned int filter, nodemask_t *nodemask, int max_zone_idx) #endif trace_android_vh_show_mem(filter, nodemask); } +EXPORT_SYMBOL_GPL(__show_mem); diff --git a/mm/compaction.c b/mm/compaction.c index 6dbb02de8b9d..1ff0bafa46d6 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -3070,6 +3070,7 @@ static int kcompactd_cpu_online(unsigned int cpu) if (pgdat->kcompactd) set_cpus_allowed_ptr(pgdat->kcompactd, mask); } + trace_android_vh_mm_kcompactd_cpu_online(cpu); return 0; } diff --git a/mm/filemap.c b/mm/filemap.c index 373165ba8a1f..5edd973dbe5f 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2736,6 +2736,7 @@ ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *iter, iov_iter_truncate(iter, inode->i_sb->s_maxbytes); folio_batch_init(&fbatch); + trace_android_vh_filemap_read(filp, iocb->ki_pos, iov_iter_count(iter)); do { cond_resched(); @@ -3438,11 +3439,13 @@ vm_fault_t filemap_map_pages(struct vm_fault *vmf, struct page *page; unsigned int mmap_miss = READ_ONCE(file->f_ra.mmap_miss); vm_fault_t ret = 0; + pgoff_t first_pgoff = 0; rcu_read_lock(); folio = first_map_page(mapping, &xas, end_pgoff); if (!folio) goto out; + first_pgoff = xas.xa_index; if (filemap_map_pmd(vmf, &folio->page)) { ret = VM_FAULT_NOPAGE; @@ -3498,6 +3501,8 @@ unlock: out: rcu_read_unlock(); WRITE_ONCE(file->f_ra.mmap_miss, mmap_miss); + trace_android_vh_filemap_map_pages(file, first_pgoff, last_pgoff, ret); + return ret; } EXPORT_SYMBOL(filemap_map_pages); diff --git a/mm/memory.c b/mm/memory.c index 3ee3360706ac..551453be4b64 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -81,6 +81,7 @@ #include #include +#include #undef CREATE_TRACE_POINTS #include @@ -1426,6 +1427,7 @@ static unsigned long zap_pte_range(struct mmu_gather *tlb, pte_t *start_pte; pte_t *pte; swp_entry_t entry; + bool bypass = false; tlb_change_page_size(tlb, PAGE_SIZE); again: @@ -1498,6 +1500,9 @@ again: if (!should_zap_cows(details)) continue; rss[MM_SWAPENTS]--; + trace_android_vh_swapmem_gather_add_bypass(mm, entry, &bypass); + if (bypass) + goto skip; if (unlikely(!free_swap_and_cache(entry))) print_bad_pte(vma, addr, ptent, NULL); } else if (is_migration_entry(entry)) { @@ -1517,6 +1522,7 @@ again: /* We should have covered all the swap entry types */ WARN_ON_ONCE(1); } +skip: pte_clear_not_present_full(mm, addr, pte, tlb->fullmm); zap_install_uffd_wp_if_needed(vma, addr, pte, details, ptent); } while (pte++, addr += PAGE_SIZE, addr != end); @@ -4658,6 +4664,7 @@ static vm_fault_t do_fault_around(struct vm_fault *vmf) /* Return true if we should do read fault-around, false otherwise */ static inline bool should_fault_around(struct vm_fault *vmf) { + bool should_around = true; /* No ->map_pages? No way to fault around... */ if (!vmf->vma->vm_ops->map_pages) return false; @@ -4665,6 +4672,10 @@ static inline bool should_fault_around(struct vm_fault *vmf) if (uffd_disable_fault_around(vmf->vma)) return false; + trace_android_vh_should_fault_around(vmf, &should_around); + if (!should_around) + return false; + return fault_around_bytes >> PAGE_SHIFT > 1; } @@ -4685,6 +4696,8 @@ static vm_fault_t do_read_fault(struct vm_fault *vmf) ret = do_fault_around(vmf); if (ret) return ret; + } else { + trace_android_vh_do_read_fault(vmf, fault_around_bytes); } ret = vmf_can_call_fault(vmf); diff --git a/mm/mlock.c b/mm/mlock.c index 4f029298b09e..4296d742014d 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -459,7 +459,7 @@ success: if ((newflags & VM_LOCKED) && (oldflags & VM_LOCKED)) { /* No work to do, and mlocking twice would be wrong */ vma_start_write(vma); - vm_flags_reset(vma, vma_pad_fixup_flags(vma, newflags)); + vm_flags_reset(vma, newflags); } else { mlock_vma_pages_range(vma, start, end, newflags); } diff --git a/mm/mmap.c b/mm/mmap.c index efe4859cd9e6..f38b3b610c72 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -3329,9 +3329,11 @@ void exit_mmap(struct mm_struct *mm) lru_add_drain(); flush_cache_mm(mm); tlb_gather_mmu_fullmm(&tlb, mm); + trace_android_vh_swapmem_gather_init(mm); /* update_hiwater_rss(mm) here? but nobody should be looking */ /* Use ULONG_MAX here to ensure all VMAs in the mm are unmapped */ unmap_vmas(&tlb, &mm->mm_mt, vma, 0, ULONG_MAX, vma->vm_end, ULONG_MAX, false); + trace_android_vh_swapmem_gather_finish(mm); mmap_read_unlock(mm); /* diff --git a/mm/mprotect.c b/mm/mprotect.c index 044c17ffaecf..774ff1fd443c 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -633,7 +633,7 @@ success: * held in write mode. */ vma_start_write(vma); - vm_flags_reset(vma, vma_pad_fixup_flags(vma, newflags)); + vm_flags_reset(vma, newflags); /* * We want to check manually if we can change individual PTEs writable * if we can't do that automatically for all PTEs in a mapping. For diff --git a/mm/oom_kill.c b/mm/oom_kill.c index 7a9e1c7f636c..18f57ec75233 100644 --- a/mm/oom_kill.c +++ b/mm/oom_kill.c @@ -53,6 +53,9 @@ #define CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#include + static int sysctl_panic_on_oom; static int sysctl_oom_kill_allocating_task; static int sysctl_oom_dump_tasks = 1; @@ -525,6 +528,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm) */ set_bit(MMF_UNSTABLE, &mm->flags); + trace_android_vh_oom_swapmem_gather_init(mm); for_each_vma(vmi, vma) { if (vma->vm_flags & (VM_HUGETLB|VM_PFNMAP)) continue; @@ -557,6 +561,7 @@ bool __oom_reap_task_mm(struct mm_struct *mm) tlb_finish_mmu(&tlb); } } + trace_android_vh_oom_swapmem_gather_finish(mm); return ret; } diff --git a/mm/pgsize_migration.c b/mm/pgsize_migration.c index 3b89b6489159..623a50e965a8 100644 --- a/mm/pgsize_migration.c +++ b/mm/pgsize_migration.c @@ -140,7 +140,7 @@ unsigned long vma_pad_pages(struct vm_area_struct *vma) if (!is_pgsize_migration_enabled()) return 0; - return vma->vm_flags >> VM_PAD_SHIFT; + return (vma->vm_flags & VM_PAD_MASK) >> VM_PAD_SHIFT; } static __always_inline bool str_has_suffix(const char *str, const char *suffix) @@ -413,8 +413,8 @@ void split_pad_vma(struct vm_area_struct *vma, struct vm_area_struct *new, nr_vma2_pages = vma_pages(second); - if (nr_vma2_pages >= nr_pad_pages) { /* Case 1 & 3*/ - vm_flags_clear(first, VM_PAD_MASK); + if (nr_vma2_pages >= nr_pad_pages) { /* Case 1 & 3 */ + vma_set_pad_pages(first, 0); vma_set_pad_pages(second, nr_pad_pages); } else { /* Case 2 */ vma_set_pad_pages(first, nr_pad_pages - nr_vma2_pages); @@ -422,18 +422,6 @@ void split_pad_vma(struct vm_area_struct *vma, struct vm_area_struct *new, } } -/* - * Sets the correct padding bits / flags for a VMA split. - */ -unsigned long vma_pad_fixup_flags(struct vm_area_struct *vma, - unsigned long newflags) -{ - if (newflags & VM_PAD_MASK) - return (newflags & ~VM_PAD_MASK) | (vma->vm_flags & VM_PAD_MASK); - else - return newflags; -} - /* * Merging of padding VMAs is uncommon, as padding is only allowed * from the linker context. diff --git a/mm/vmscan.c b/mm/vmscan.c index 68ce62a518b5..c00758f99113 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -994,7 +994,7 @@ static unsigned long shrink_slab_memcg(gfp_t gfp_mask, int nid, * * Returns the number of reclaimed slab objects. */ -static unsigned long shrink_slab(gfp_t gfp_mask, int nid, +unsigned long shrink_slab(gfp_t gfp_mask, int nid, struct mem_cgroup *memcg, int priority) { @@ -1047,6 +1047,8 @@ out: return freed; } +EXPORT_SYMBOL_GPL(shrink_slab); + static void drop_slab_node(int nid) { unsigned long freed; @@ -1478,6 +1480,10 @@ static enum folio_references folio_check_references(struct folio *folio, int ret = 0; bool trylock_failed = false; +#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA + trace_android_vh_page_should_be_protected(folio, sc->nr_scanned, + sc->priority, &sc->android_vendor_data1, &ret); +#endif trace_android_vh_check_folio_look_around_ref(folio, &ret); if (ret) return ret; @@ -2647,6 +2653,8 @@ static void shrink_active_list(unsigned long nr_to_scan, unsigned nr_rotated = 0; int file = is_file_lru(lru); struct pglist_data *pgdat = lruvec_pgdat(lruvec); + int should_protect = 0; + bool bypass = false; lru_add_drain(); @@ -2683,6 +2691,19 @@ static void shrink_active_list(unsigned long nr_to_scan, } } +#ifdef CONFIG_ANDROID_VENDOR_OEM_DATA + trace_android_vh_page_should_be_protected(folio, sc->nr_scanned, + sc->priority, &sc->android_vendor_data1, &should_protect); +#endif + if (unlikely(should_protect)) { + nr_rotated += folio_nr_pages(folio); + list_add(&folio->lru, &l_active); + continue; + } + + trace_android_vh_page_referenced_check_bypass(folio, nr_to_scan, lru, &bypass); + if (bypass) + goto skip_folio_referenced; trace_android_vh_folio_trylock_set(folio); /* Referenced or rmap lock contention: rotate */ if (folio_referenced(folio, 0, sc->target_mem_cgroup, @@ -2704,6 +2725,7 @@ static void shrink_active_list(unsigned long nr_to_scan, } } trace_android_vh_folio_trylock_clear(folio); +skip_folio_referenced: folio_clear_active(folio); /* we are de-activating */ folio_set_workingset(folio); list_add(&folio->lru, &l_inactive); diff --git a/net/core/dev.c b/net/core/dev.c index 3c6d188148ba..809a8f3ac55f 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -927,6 +927,7 @@ out: up_read(&devnet_rename_sem); return ret; } +EXPORT_SYMBOL_GPL(netdev_get_name); /** * dev_getbyhwaddr_rcu - find a device by its hardware address diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 736b48d068ac..79c54c8a9f51 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -3487,6 +3487,7 @@ void tcp_send_active_reset(struct sock *sk, gfp_t priority) */ trace_tcp_send_reset(sk, NULL); } +EXPORT_SYMBOL_GPL(tcp_send_active_reset); /* Send a crossed SYN-ACK during socket establishment. * WARNING: This routine must only be called when we have already sent diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index d0e045116d4e..a18b24c125f4 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -437,12 +437,10 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, struct netem_sched_data *q = qdisc_priv(sch); /* We don't fill cb now as skb_unshare() may invalidate it */ struct netem_skb_cb *cb; - struct sk_buff *skb2; + struct sk_buff *skb2 = NULL; struct sk_buff *segs = NULL; unsigned int prev_len = qdisc_pkt_len(skb); int count = 1; - int rc = NET_XMIT_SUCCESS; - int rc_drop = NET_XMIT_DROP; /* Do not fool qdisc_drop_all() */ skb->prev = NULL; @@ -471,19 +469,11 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, skb_orphan_partial(skb); /* - * If we need to duplicate packet, then re-insert at top of the - * qdisc tree, since parent queuer expects that only one - * skb will be queued. + * If we need to duplicate packet, then clone it before + * original is modified. */ - if (count > 1 && (skb2 = skb_clone(skb, GFP_ATOMIC)) != NULL) { - struct Qdisc *rootq = qdisc_root_bh(sch); - u32 dupsave = q->duplicate; /* prevent duplicating a dup... */ - - q->duplicate = 0; - rootq->enqueue(skb2, rootq, to_free); - q->duplicate = dupsave; - rc_drop = NET_XMIT_SUCCESS; - } + if (count > 1) + skb2 = skb_clone(skb, GFP_ATOMIC); /* * Randomized packet corruption. @@ -495,7 +485,8 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, if (skb_is_gso(skb)) { skb = netem_segment(skb, sch, to_free); if (!skb) - return rc_drop; + goto finish_segs; + segs = skb->next; skb_mark_not_on_list(skb); qdisc_skb_cb(skb)->pkt_len = skb->len; @@ -521,7 +512,24 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, /* re-link segs, so that qdisc_drop_all() frees them all */ skb->next = segs; qdisc_drop_all(skb, sch, to_free); - return rc_drop; + if (skb2) + __qdisc_drop(skb2, to_free); + return NET_XMIT_DROP; + } + + /* + * If doing duplication then re-insert at top of the + * qdisc tree, since parent queuer expects that only one + * skb will be queued. + */ + if (skb2) { + struct Qdisc *rootq = qdisc_root_bh(sch); + u32 dupsave = q->duplicate; /* prevent duplicating a dup... */ + + q->duplicate = 0; + rootq->enqueue(skb2, rootq, to_free); + q->duplicate = dupsave; + skb2 = NULL; } qdisc_qstats_backlog_inc(sch, skb); @@ -592,9 +600,12 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, } finish_segs: + if (skb2) + __qdisc_drop(skb2, to_free); + if (segs) { unsigned int len, last_len; - int nb; + int rc, nb; len = skb ? skb->len : 0; nb = skb ? 1 : 0; diff --git a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c index 5f362c0fd890..319567f0fae1 100644 --- a/tools/testing/selftests/filesystems/binderfs/binderfs_test.c +++ b/tools/testing/selftests/filesystems/binderfs/binderfs_test.c @@ -65,6 +65,7 @@ static int __do_binderfs_test(struct __test_metadata *_metadata) static const char * const binder_features[] = { "oneway_spam_detection", "extended_error", + "freeze_notification", }; change_mountns(_metadata);