diff --git a/android/abi_gki_aarch64.xml b/android/abi_gki_aarch64.xml index 6b7544d173c9..fbbcdb424bf5 100644 --- a/android/abi_gki_aarch64.xml +++ b/android/abi_gki_aarch64.xml @@ -723,6 +723,7 @@ + @@ -1051,6 +1052,7 @@ + @@ -1162,6 +1164,7 @@ + @@ -1358,6 +1361,7 @@ + @@ -1660,6 +1664,7 @@ + @@ -2611,6 +2616,7 @@ + @@ -3097,6 +3103,7 @@ + @@ -3233,6 +3240,7 @@ + @@ -3266,6 +3274,8 @@ + + @@ -4067,6 +4077,7 @@ + @@ -4507,6 +4518,7 @@ + @@ -4861,6 +4873,7 @@ + @@ -4869,12 +4882,14 @@ + + @@ -5098,6 +5113,7 @@ + @@ -5112,6 +5128,9 @@ + + + @@ -5215,6 +5234,7 @@ + @@ -5255,6 +5275,7 @@ + @@ -5619,6 +5640,7 @@ + @@ -6498,6 +6520,7 @@ + @@ -6911,7 +6934,7 @@ - + @@ -7906,6 +7929,7 @@ + @@ -8256,7 +8280,7 @@ - + @@ -8353,6 +8377,7 @@ + @@ -9669,21 +9694,21 @@ - + - + - + - + - + - + @@ -10276,6 +10301,7 @@ + @@ -11733,42 +11759,42 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -14687,18 +14713,18 @@ - + - + - + - + - + @@ -14767,7 +14793,47 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -15988,18 +16054,18 @@ - + - + - + - + - + @@ -17275,6 +17341,7 @@ + @@ -18390,6 +18457,7 @@ + @@ -18819,6 +18887,12 @@ + + + + + + @@ -19326,51 +19400,51 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -19391,39 +19465,39 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -22203,6 +22277,7 @@ + @@ -27249,36 +27324,36 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -28411,6 +28486,13 @@ + + + + + + + @@ -31056,27 +31138,27 @@ - + - + - + - + - + - + - + - + @@ -32328,6 +32410,7 @@ + @@ -32560,7 +32643,20 @@ - + + + + + + + + + + + + + + @@ -33504,7 +33600,7 @@ - + @@ -38181,24 +38277,24 @@ - + - + - + - + - + - + - + @@ -39304,18 +39400,18 @@ - + - + - + - + - + @@ -40184,6 +40280,7 @@ + @@ -40385,24 +40482,24 @@ - + - + - + - + - + - + - + @@ -40801,6 +40898,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -48230,7 +48353,17 @@ - + + + + + + + + + + + @@ -48247,6 +48380,14 @@ + + + + + + + + @@ -50267,18 +50408,18 @@ - + - + - + - + - + @@ -50681,12 +50822,12 @@ - + - + - + @@ -52827,6 +52968,14 @@ + + + + + + + + @@ -54366,6 +54515,7 @@ + @@ -56424,18 +56574,18 @@ - + - + - + - + - + @@ -57999,7 +58149,7 @@ - + @@ -60389,12 +60539,12 @@ - + - + - + @@ -61783,6 +61933,12 @@ + + + + + + @@ -62556,7 +62712,7 @@ - + @@ -65199,15 +65355,15 @@ - + - + - + - + @@ -65328,7 +65484,35 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -65946,72 +66130,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -66591,6 +66775,12 @@ + + + + + + @@ -66767,6 +66957,20 @@ + + + + + + + + + + + + + + @@ -67054,18 +67258,18 @@ - + - + - + - + - + @@ -68748,6 +68952,7 @@ + @@ -68985,12 +69190,12 @@ - + - + - + @@ -70624,6 +70829,11 @@ + + + + + @@ -71514,7 +71724,7 @@ - + @@ -72774,6 +72984,12 @@ + + + + + + @@ -73322,54 +73538,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -75586,7 +75802,7 @@ - + @@ -75605,6 +75821,13 @@ + + + + + + + @@ -75740,7 +75963,7 @@ - + @@ -75908,54 +76131,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -77801,6 +78024,7 @@ + @@ -77988,7 +78212,26 @@ - + + + + + + + + + + + + + + + + + + + + @@ -79061,6 +79304,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -82142,54 +82406,54 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -82474,12 +82738,12 @@ - + - + - + @@ -82841,12 +83105,12 @@ - + - + - + @@ -83074,15 +83338,15 @@ - + - + - + - + @@ -83177,7 +83441,7 @@ - + @@ -84276,291 +84540,291 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -84778,6 +85042,14 @@ + + + + + + + + @@ -86336,7 +86608,7 @@ - + @@ -87225,7 +87497,38 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -88269,6 +88572,20 @@ + + + + + + + + + + + + + + @@ -89010,6 +89327,14 @@ + + + + + + + + @@ -90373,6 +90698,7 @@ + @@ -90718,10 +91044,19 @@ + + + + + + + + + @@ -91689,20 +92024,7 @@ - - - - - - - - - - - - - - + @@ -98979,7 +99301,17 @@ - + + + + + + + + + + + @@ -99682,12 +100014,12 @@ - + - + - + @@ -101577,6 +101909,13 @@ + + + + + + + @@ -102005,7 +102344,7 @@ - + @@ -104147,21 +104486,21 @@ - + - + - + - + - + - + @@ -104767,6 +105106,11 @@ + + + + + @@ -105588,6 +105932,7 @@ + @@ -105681,48 +106026,48 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106170,66 +106515,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -106412,35 +106757,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -107118,24 +107435,24 @@ - + - + - + - + - + - + - + @@ -107291,87 +107608,87 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -111229,7 +111546,7 @@ - + @@ -112028,99 +112345,99 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -112361,6 +112678,7 @@ + @@ -113336,6 +113654,7 @@ + @@ -115731,12 +116050,12 @@ - - + + - - + + @@ -116218,96 +116537,96 @@ - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + - - - + + + - - - - + + + + - - - + + + - - - - + + + + @@ -116315,153 +116634,153 @@ - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - + + + - - - - - - + + + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - - + + + + + + + - - - - - + + + + + @@ -116476,25 +116795,25 @@ - - - - - + + + + + - - - - - - - + + + + + + + - - - + + + @@ -116504,24 +116823,24 @@ - - - - - + + + + + - - - - - - + + + + + + - - - + + + @@ -116536,19 +116855,19 @@ - - - + + + - - - - - - - - + + + + + + + + @@ -116558,113 +116877,113 @@ - - - - + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - - - + + + + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - + + + - - - - - + + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + @@ -116672,49 +116991,49 @@ - - - - + + + + - - - + + + - - - - + + + + - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - + + + @@ -116723,154 +117042,154 @@ - - - + + + - - - + + + - - - + + + - - - + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - - + + + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - + + + - - - - - + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - - + + + + + @@ -116880,19 +117199,19 @@ - - - - - - + + + + + + - - - - - + + + + + @@ -116903,200 +117222,200 @@ - - - - - + + + + + - - - - + + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - - + + + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - - + + + + + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - - + + + + + - - - - - - + + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - - - - + + + + + + @@ -117111,55 +117430,55 @@ - - - - + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - - + + + + - - - - + + + + @@ -117195,63 +117514,63 @@ - - - - + + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - + + + + + + - - - - - + + + + + @@ -117260,71 +117579,71 @@ - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - + + + - - - - - - - + + + + + + + - - - + + + - - - - + + + + @@ -117366,11 +117685,11 @@ - - - - - + + + + + @@ -117384,51 +117703,51 @@ - - - - - - - - - - - - + + + + + - - - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - - - + + + @@ -117437,151 +117756,151 @@ - - - - + + + + - - - + + + - - - + + + - - - - - + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + - - - - - - - - + + + + + + + + - - - - + + + + - - - - - + + + + + - - - + + + - - - - - + + + + + - - - - + + + + - - - + + + - - - + + + - - - + + + @@ -117590,10 +117909,10 @@ - - - - + + + + @@ -117604,25 +117923,25 @@ - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + @@ -117630,92 +117949,92 @@ - - - - + + + + - - - - + + + + - - - - + + + + - - - - - - - - - - - - - + + + + + + + + - + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + - - - - + + + + - - - - - + + + + - - - - + + + + + + + + + + + - - - + + + @@ -117723,15 +118042,15 @@ - - - + + + - - - - + + + + @@ -117787,35 +118106,35 @@ - - - + + + - - - + + + - - - - + + + + - - - - - + + + + + - - - - - - + + + + + + @@ -117824,10 +118143,10 @@ - - - - + + + + @@ -117835,10 +118154,10 @@ - - - - + + + + @@ -117880,22 +118199,22 @@ - - - - + + + + - - - - + + + + - - - - + + + + @@ -117910,12 +118229,12 @@ - - - - - - + + + + + + @@ -117934,107 +118253,107 @@ - - - - - + + + + + - - - - - + + + + + - - - - - - - - + + + + + + + + - - - - - + + + + + - - - - + + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - + + + + + + - - - - - - + + + + + + - - - - + + + + - - - - - + + + + + - - - - - + + + + + - - - + + + - - - + + + @@ -118056,27 +118375,27 @@ - - - - - - + + + + + + - - - - - + + + + + - - - - - - + + + + + + @@ -118477,186 +118796,186 @@ - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - + + + - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -118664,78 +118983,78 @@ - + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - + + @@ -118745,57 +119064,57 @@ - - - - - - + + + + + + - + - + - - - - + + + + - - - + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - + + + + + @@ -119253,6 +119572,10 @@ + + + + @@ -119263,12 +119586,12 @@ - - - - - - + + + + + + @@ -119307,11 +119630,11 @@ - - - - - + + + + + @@ -119353,9 +119676,9 @@ - - - + + + @@ -119472,9 +119795,9 @@ - - - + + + @@ -120727,11 +121050,11 @@ - - - - - + + + + + @@ -121056,6 +121379,9 @@ + + + @@ -121652,6 +121978,12 @@ + + + + + + @@ -122637,6 +122969,15 @@ + + + + + + + + + @@ -122837,21 +123178,21 @@ - - - - - - - - + + + + + + + + - - - - - + + + + + @@ -124267,6 +124608,14 @@ + + + + + + + + @@ -124344,17 +124693,17 @@ - - - + + + - - - - - - + + + + + + @@ -128419,10 +128768,10 @@ - - - - + + + + @@ -128473,14 +128822,14 @@ - - - + + + - - - + + + @@ -128719,32 +129068,32 @@ - - - + + + - - - - + + + + - - - - + + + + - - - + + + - - - - + + + + @@ -129282,6 +129631,10 @@ + + + + @@ -129973,6 +130326,7 @@ + @@ -131764,6 +132118,9 @@ + + + @@ -132497,6 +132854,10 @@ + + + + @@ -132641,6 +133002,16 @@ + + + + + + + + + + @@ -133166,30 +133537,30 @@ - - - + + + - - - - - + + + + + - - - + + + - - - - - - - + + + + + + + @@ -133393,11 +133764,11 @@ - - - - - + + + + + @@ -135191,8 +135562,8 @@ - - + + @@ -136727,6 +137098,10 @@ + + + + @@ -137295,8 +137670,8 @@ - - + + @@ -138197,12 +138572,12 @@ - - - - - - + + + + + + @@ -138555,30 +138930,30 @@ - - + + - - - + + + - - - + + + - - - - - - + + + + + + - - + + @@ -138620,8 +138995,8 @@ - - + + @@ -138649,57 +139024,57 @@ - - + + - - + + - - + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - + + - - - + + + - - - + + + - - - + + + - - + + @@ -138898,6 +139273,13 @@ + + + + + + + @@ -140016,15 +140398,15 @@ - + - - + + - - + + @@ -140781,6 +141163,12 @@ + + + + + + @@ -140830,6 +141218,13 @@ + + + + + + + @@ -140862,6 +141257,11 @@ + + + + + @@ -142031,6 +142431,11 @@ + + + + + @@ -142096,14 +142501,28 @@ + + + + + + + + + + + + + + - - + + @@ -142614,6 +143033,12 @@ + + + + + + @@ -142829,6 +143254,9 @@ + + + @@ -142871,11 +143299,11 @@ - - - - - + + + + + @@ -143791,11 +144219,11 @@ - - - - - + + + + + @@ -144619,6 +145047,10 @@ + + + + @@ -146089,22 +146521,22 @@ - - - - + + + + - - - - + + + + - - - - + + + + @@ -146175,23 +146607,23 @@ - - - - + + + + - - - - + + + + - - - - - + + + + + diff --git a/android/abi_gki_aarch64_mtk b/android/abi_gki_aarch64_mtk index 137ee9d40680..807be584e15b 100644 --- a/android/abi_gki_aarch64_mtk +++ b/android/abi_gki_aarch64_mtk @@ -158,6 +158,7 @@ clk_set_parent clk_set_rate clk_unprepare + clockevents_config_and_register clocks_calc_mult_shift __close_fd cma_alloc @@ -180,12 +181,14 @@ config_group_init_type_name console_drivers console_suspend_enabled + console_unlock __const_udelay consume_skb contig_page_data _copy_from_iter copy_from_kernel_nofault _copy_to_iter + copy_to_user_fromio __cpu_active_mask cpu_all_bits cpu_bit_bitmap @@ -195,6 +198,7 @@ cpufreq_disable_fast_switch cpufreq_driver_fast_switch cpufreq_driver_resolve_freq + cpufreq_driver_target __cpufreq_driver_target cpufreq_enable_fast_switch cpufreq_frequency_table_get_index @@ -205,12 +209,14 @@ cpufreq_quick_get cpufreq_register_driver cpufreq_register_governor + cpufreq_register_notifier cpufreq_remove_update_util_hook cpufreq_table_index_unsorted cpufreq_this_cpu_can_update cpufreq_unregister_driver cpufreq_unregister_governor cpufreq_update_limits + cpufreq_update_policy cpufreq_update_util_data cpu_hotplug_disable cpu_hotplug_enable @@ -283,6 +289,7 @@ debugfs_create_devm_seqfile debugfs_create_dir debugfs_create_file + debugfs_create_file_size debugfs_create_regset32 debugfs_create_symlink debugfs_create_u16 @@ -349,6 +356,7 @@ device_init_wakeup device_link_add device_link_remove + device_node_to_regmap device_property_present device_property_read_string device_property_read_u32_array @@ -416,6 +424,7 @@ devm_phy_get devm_pinctrl_get devm_pinctrl_put + devm_pinctrl_register devm_pinctrl_register_and_init devm_platform_get_and_ioremap_resource devm_platform_ioremap_resource @@ -426,6 +435,7 @@ devm_rc_register_device devm_regmap_add_irq_chip devm_regmap_field_alloc + devm_regmap_field_bulk_alloc __devm_regmap_init __devm_regmap_init_i2c __devm_regmap_init_mmio_clk @@ -447,27 +457,37 @@ devm_usb_get_phy devm_watchdog_register_device _dev_notice + dev_pm_domain_attach dev_pm_domain_attach_by_id dev_pm_domain_attach_by_name dev_pm_domain_detach dev_pm_genpd_add_notifier dev_pm_genpd_set_performance_state dev_pm_opp_add + dev_pm_opp_adjust_voltage + dev_pm_opp_disable + dev_pm_opp_enable dev_pm_opp_find_freq_ceil dev_pm_opp_find_freq_ceil_by_volt dev_pm_opp_find_freq_exact dev_pm_opp_find_freq_floor + dev_pm_opp_free_cpufreq_table dev_pm_opp_get_freq dev_pm_opp_get_level dev_pm_opp_get_opp_count dev_pm_opp_get_opp_table dev_pm_opp_get_voltage + dev_pm_opp_init_cpufreq_table dev_pm_opp_of_add_table dev_pm_opp_of_add_table_indexed + dev_pm_opp_of_cpumask_add_table + dev_pm_opp_of_cpumask_remove_table + dev_pm_opp_of_get_sharing_cpus dev_pm_opp_of_remove_table dev_pm_opp_put dev_pm_opp_put_opp_table dev_pm_opp_put_regulators + dev_pm_opp_register_notifier dev_pm_opp_remove_all_dynamic dev_pm_opp_set_regulators dev_pm_qos_update_request @@ -606,6 +626,7 @@ drm_connector_attach_encoder drm_connector_cleanup drm_connector_init + drm_connector_set_panel_orientation drm_connector_update_edid_property drm_crtc_cleanup drm_crtc_handle_vblank @@ -832,10 +853,12 @@ gov_attr_set_put governor_sysfs_ops gpiochip_add_data_with_key + gpiochip_add_pin_range gpiochip_generic_free gpiochip_generic_request gpiochip_get_data gpiochip_lock_as_irq + gpiochip_remove gpiochip_unlock_as_irq gpiod_direction_input gpiod_direction_output @@ -860,6 +883,7 @@ have_governor_per_policy hex_asc hex_to_bin + high_memory hrtimer_active hrtimer_cancel hrtimer_forward @@ -965,15 +989,25 @@ iounmap iput ipv6_skip_exthdr + irq_chip_eoi_parent + irq_chip_mask_parent + irq_chip_retrigger_hierarchy + irq_chip_set_affinity_parent + irq_chip_unmask_parent irq_create_mapping_affinity irq_create_of_mapping irq_dispose_mapping __irq_domain_add + irq_domain_alloc_irqs_parent + irq_domain_create_hierarchy + irq_domain_free_irqs_common irq_domain_remove + irq_domain_set_hwirq_and_chip irq_domain_simple_ops irq_domain_xlate_onetwocell irq_domain_xlate_twocell irq_find_mapping + irq_find_matching_fwspec irq_get_irqchip_state irq_get_irq_data irq_modify_status @@ -1085,6 +1119,7 @@ kthread_stop kthread_worker_fn ktime_get + ktime_get_coarse_ts64 ktime_get_coarse_with_offset ktime_get_mono_fast_ns ktime_get_raw @@ -1107,6 +1142,8 @@ led_trigger_remove led_update_brightness led_update_flash_brightness + linear_range_get_max_value + linear_range_get_value __list_add_valid __list_del_entry_valid list_sort @@ -1160,6 +1197,7 @@ __memcpy_fromio __memcpy_toio memdup_user + memdup_user_nul memmove memory_read_from_buffer memparse @@ -1177,7 +1215,9 @@ mii_link_ok mii_nway_restart mipi_dsi_attach + mipi_dsi_dcs_enter_sleep_mode mipi_dsi_dcs_read + mipi_dsi_dcs_set_display_off mipi_dsi_dcs_write mipi_dsi_dcs_write_buffer mipi_dsi_detach @@ -1235,6 +1275,7 @@ napi_gro_receive __napi_schedule napi_schedule_prep + __ndelay nd_tbl neigh_destroy neigh_lookup @@ -1274,6 +1315,7 @@ __nlmsg_put no_llseek nonseekable_open + noop_llseek nr_cpu_ids nsecs_to_jiffies ns_to_timespec64 @@ -1308,6 +1350,7 @@ of_dma_xlate_by_chan_id of_drm_find_bridge of_drm_find_panel + of_drm_get_panel_orientation of_find_backlight_by_node of_find_compatible_node of_find_device_by_node @@ -1398,6 +1441,7 @@ param_set_uint param_set_ulong pause_cpus + pci_bus_type PDE_DATA __per_cpu_offset perf_event_create_kernel_counter @@ -1439,6 +1483,7 @@ pinctrl_pm_select_sleep_state pinctrl_put pinctrl_select_state + pinctrl_unregister pinctrl_utils_add_map_configs pinctrl_utils_free_map pinctrl_utils_reserve_map @@ -1464,6 +1509,7 @@ platform_get_irq_optional platform_get_resource platform_get_resource_byname + platform_irqchip_probe __platform_register_drivers platform_unregister_drivers pm_genpd_add_device @@ -1551,6 +1597,7 @@ _raw_spin_lock_irq _raw_spin_lock_irqsave _raw_spin_trylock + _raw_spin_trylock_bh _raw_spin_unlock _raw_spin_unlock_bh _raw_spin_unlock_irq @@ -1609,6 +1656,7 @@ regmap_field_update_bits_base __regmap_init regmap_irq_get_domain + regmap_multi_reg_write regmap_raw_read regmap_raw_write regmap_read @@ -1654,8 +1702,10 @@ remove_proc_entry remove_proc_subtree remove_wait_queue + report_iommu_fault request_firmware request_firmware_nowait + __request_module __request_percpu_irq __request_region request_threaded_irq @@ -1679,6 +1729,7 @@ __rht_bucket_nested rht_bucket_nested rht_bucket_nested_insert + root_task_group round_jiffies round_jiffies_relative round_jiffies_up @@ -1726,6 +1777,8 @@ sched_uclamp_used schedule schedule_timeout + schedule_timeout_interruptible + schedutil_cpu_util scmi_driver_register scmi_driver_unregister scmi_protocol_register @@ -1763,6 +1816,7 @@ sdio_writel sdio_writesb send_sig + send_sig_info seq_hex_dump seq_lseek seq_open @@ -1842,6 +1896,8 @@ smp_call_function_single snd_card_add_dev_attr snd_ctl_boolean_mono_info + snd_dma_alloc_pages + snd_dma_free_pages snd_jack_set_key snd_pcm_format_physical_width snd_pcm_format_width @@ -1850,12 +1906,17 @@ snd_pcm_hw_constraint_mask64 snd_pcm_hw_constraint_minmax snd_pcm_hw_constraint_step + _snd_pcm_hw_params_any + snd_pcm_kernel_ioctl snd_pcm_lib_free_pages snd_pcm_lib_malloc_pages snd_pcm_lib_preallocate_free_for_all snd_pcm_lib_preallocate_pages_for_all + snd_pcm_open_substream snd_pcm_period_elapsed + snd_pcm_release_substream snd_pcm_set_ops + snd_pcm_stop snd_soc_add_component_controls snd_soc_bytes_info_ext snd_soc_bytes_tlv_callback @@ -1866,6 +1927,7 @@ snd_soc_component_set_jack snd_soc_component_update_bits snd_soc_component_write + snd_soc_dai_active snd_soc_dai_set_sysclk snd_soc_dapm_add_routes snd_soc_dapm_disable_pin @@ -1873,20 +1935,25 @@ snd_soc_dapm_get_enum_double snd_soc_dapm_get_pin_switch snd_soc_dapm_get_volsw + snd_soc_dapm_ignore_suspend snd_soc_dapm_info_pin_switch + snd_soc_dapm_kcontrol_dapm snd_soc_dapm_new_controls snd_soc_dapm_new_widgets snd_soc_dapm_put_enum_double snd_soc_dapm_put_pin_switch snd_soc_dapm_put_volsw snd_soc_dapm_sync + snd_soc_dpcm_get_substream snd_soc_find_dai + snd_soc_get_pcm_runtime snd_soc_get_volsw snd_soc_info_enum_double snd_soc_info_volsw snd_soc_jack_report snd_soc_new_compress snd_soc_of_get_dai_link_codecs + snd_soc_pm_ops snd_soc_poweroff snd_soc_put_volsw snd_soc_register_component @@ -1951,6 +2018,7 @@ strncpy strncpy_from_user strnlen + strnlen_user strnstr strrchr strreplace @@ -2000,18 +2068,26 @@ tasklet_kill __tasklet_schedule tasklet_setup + tasklist_lock task_may_not_preempt __task_pid_nr_ns __task_rq_lock task_sched_runtime + thermal_cooling_device_register thermal_cooling_device_unregister thermal_of_cooling_device_register + thermal_zone_bind_cooling_device + thermal_zone_device_enable + thermal_zone_device_register + thermal_zone_device_unregister thermal_zone_device_update thermal_zone_get_temp thermal_zone_get_zone_by_name + thermal_zone_unbind_cooling_device tick_nohz_get_idle_calls_cpu timecounter_init timecounter_read + timer_of_init timer_unstable_counter_workaround topology_set_thermal_pressure _totalram_pages @@ -2042,6 +2118,7 @@ __traceiter_android_rvh_setscheduler __traceiter_android_rvh_set_user_nice __traceiter_android_rvh_tick_entry + __traceiter_android_rvh_uclamp_eff_get __traceiter_android_rvh_update_cpu_capacity __traceiter_android_rvh_v4l2subdev_set_fmt __traceiter_android_rvh_v4l2subdev_set_frame_interval @@ -2125,6 +2202,7 @@ __tracepoint_android_rvh_setscheduler __tracepoint_android_rvh_set_user_nice __tracepoint_android_rvh_tick_entry + __tracepoint_android_rvh_uclamp_eff_get __tracepoint_android_rvh_update_cpu_capacity __tracepoint_android_rvh_v4l2subdev_set_fmt __tracepoint_android_rvh_v4l2subdev_set_frame_interval @@ -2193,6 +2271,7 @@ __tracepoint_xhci_urb_giveback trace_print_array_seq trace_print_flags_seq + trace_print_hex_seq trace_print_symbols_seq __trace_puts trace_raw_output_prep @@ -2281,6 +2360,7 @@ unregister_reboot_notifier unregister_rpmsg_driver unregister_shrinker + unregister_syscore_ops unregister_sysctl_table unregister_virtio_device unregister_virtio_driver @@ -2377,6 +2457,7 @@ usb_remove_phy usb_role_switch_get usb_role_switch_get_drvdata + usb_role_switch_get_role usb_role_switch_register usb_role_switch_set_role usb_role_switch_unregister @@ -2580,70 +2661,609 @@ zlib_deflate_workspacesize # preserved by --additions-only + alloc_etherdev_mqs + alloc_pages_exact + all_vm_events + arp_tbl + async_schedule_node + atomic_notifier_call_chain + autoremove_wake_function + __bitmap_andnot + __bitmap_equal + bitmap_find_free_region + bitmap_free + __bitmap_or + bitmap_release_region + bitmap_to_arr32 + bitmap_zalloc blk_insert_cloned_request + bpf_trace_run12 class_create_file_ns + class_for_each_device class_remove_file_ns + clk_bulk_put_all + cma_alloc + cma_release + complete_all + completion_done + config_ep_by_speed + config_group_init_type_name console_unlock + _copy_from_iter + _copy_to_iter + cpu_all_bits + cpufreq_add_update_util_hook + cpufreq_disable_fast_switch + cpufreq_driver_fast_switch + cpufreq_driver_resolve_freq + __cpufreq_driver_target + cpufreq_enable_fast_switch + cpufreq_frequency_table_get_index + cpufreq_policy_transition_delay_us + cpufreq_register_governor + cpufreq_remove_update_util_hook + cpufreq_this_cpu_can_update + cpufreq_unregister_governor + cpufreq_update_limits + cpufreq_update_util_data + cpu_pm_register_notifier + cpu_pm_unregister_notifier + dapm_clock_event + dapm_regulator_event + debugfs_create_blob + debugfs_create_devm_seqfile + debugfs_create_symlink + debugfs_create_u16 + debugfs_create_u8 + debugfs_create_x32 debug_locks_off + desc_to_gpio + dev_base_lock dev_change_flags + devfreq_get_devfreq_by_phandle + dev_get_by_name + dev_get_stats + device_create_bin_file + device_for_each_child + device_property_read_string + device_remove_bin_file + device_set_of_node_from_dev + device_set_wakeup_capable + device_show_bool + device_store_bool + __devm_alloc_percpu + devm_clk_bulk_get_optional + devm_devfreq_add_device + devm_devfreq_register_notifier + devm_devfreq_remove_device + devm_devfreq_unregister_notifier + devm_gpiod_get_index + devm_gpio_free + devm_ioremap_wc + devm_iounmap + devm_memremap + devm_nvmem_cell_get devm_of_pwm_get + devm_pinctrl_register_and_init + devm_rc_allocate_device + devm_rc_register_device + devm_regmap_add_irq_chip + devm_usb_get_phy + dev_pm_domain_attach_by_id + dev_pm_domain_attach_by_name + dev_pm_opp_add + dev_pm_opp_find_freq_ceil_by_volt + dev_pm_opp_get_opp_table + dev_pm_opp_of_add_table_indexed + dev_pm_opp_put_opp_table + dev_pm_opp_remove_all_dynamic + dev_pm_qos_update_request + dev_set_mac_address + disable_percpu_irq + dma_fence_array_ops + dma_fence_enable_sw_signaling + dma_heap_buffer_free + dma_map_resource + dma_unmap_resource + do_wait_intr_irq + drain_workqueue drm_gem_private_object_init + drm_get_format_name + drm_mode_equal + enable_percpu_irq + eth_header + eth_header_cache + eth_header_cache_update + eth_header_parse + frame_vector_create + frame_vector_destroy + frame_vector_to_pages + frame_vector_to_pfns + free_pages_exact + free_percpu_irq + fwnode_device_is_available + fwnode_get_name + fwnode_graph_get_next_endpoint + fwnode_graph_get_port_parent + fwnode_graph_get_remote_endpoint + fwnode_graph_get_remote_port_parent + fwnode_graph_parse_endpoint + fwnode_property_get_reference_args + fwnode_property_read_u64_array + gen_pool_dma_alloc_align + gen_pool_has_addr + getboottime64 + get_governor_parent_kobj + get_task_exe_file + get_vaddr_frames + get_zeroed_page + gov_attr_set_get + gov_attr_set_init + gov_attr_set_put + governor_sysfs_ops + gpiod_direction_output + gpiod_get_optional + gpiod_get_value + gpiod_set_raw_value_cansleep + gpio_request hashlen_string + have_governor_per_policy hci_alloc_dev hci_free_dev hci_recv_frame hci_register_dev hci_unregister_dev hex_dump_to_buffer + hex_to_bin + i2c_get_adapter + ida_alloc_range + ida_destroy + ida_free + idr_preload + idr_replace + iio_channel_release + iio_get_channel_type + input_free_device + input_mt_init_slots + input_mt_report_slot_state + iommu_map + iommu_map_sg + iommu_unmap + ioremap_cache + ipv6_skip_exthdr + irq_work_queue + irq_work_run + irq_work_sync + jiffies_64_to_clock_t + kill_pid + kobject_init_and_add kset_find_obj + ksize + kstrtoint_from_user + kstrtol_from_user + kthread_bind_mask + kthread_cancel_delayed_work_sync + kthread_cancel_work_sync + kthread_create_worker + kthread_delayed_work_timer_fn + kthread_destroy_worker + kthread_flush_work + kthread_flush_worker + kthread_freezable_should_stop + __kthread_init_worker + kthread_queue_delayed_work + kthread_queue_work + kthread_worker_fn + led_classdev_flash_register_ext + led_classdev_flash_unregister led_classdev_unregister + loops_per_jiffy match_hex match_int + match_string match_token + media_create_intf_link + media_create_pad_link + media_device_cleanup + media_devnode_create + media_devnode_remove + media_entity_remote_pad + media_entity_remove_links + __media_entity_setup_link + media_graph_walk_next + media_graph_walk_start + media_pipeline_start + media_pipeline_stop + media_request_get_by_fd + media_request_object_complete + media_request_put + memblock_end_of_DRAM + memory_read_from_buffer + memunmap + migrate_swap + mipi_dsi_generic_read + mipi_dsi_generic_write + mmc_cmdq_disable + mmc_cmdq_enable + mmc_get_card + mmc_hw_reset + mmc_put_card + mmc_set_data_timeout + mmc_switch + mmc_wait_for_req + napi_disable + napi_gro_flush + __napi_schedule + napi_schedule_prep + nd_tbl + neigh_destroy + neigh_lookup + netdev_alloc_frag + netif_napi_add + net_namespace_list + nf_register_net_hooks + nf_unregister_net_hooks nla_put_nohdr + of_find_i2c_device_by_node + of_get_parent + of_irq_to_resource_table + of_property_read_u64_index + of_reserved_mem_device_init_by_idx + of_root + of_thermal_get_trip_points + of_translate_address + param_get_bool + param_ops_long + param_ops_string + param_set_bool + param_set_int + pause_cpus + perf_num_counters + pinctrl_enable + pinctrl_put + pin_user_pages pin_user_pages_remote - root_task_group - schedutil_cpu_util - send_sig_info - skb_pull_rcsum - snd_soc_component_test_bits - strpbrk - strspn + platform_device_add_data + platform_device_add_resources + platform_device_del + __platform_driver_probe + platform_find_device_by_driver + pm_wq + power_supply_is_system_supplied + power_supply_unreg_notifier + prepare_to_wait + printk_deferred + proc_create_seq_private + proc_create_single_data + proc_dointvec_minmax + put_vaddr_frames + register_netdev + register_pernet_subsys + register_sysctl_table + register_virtio_device + register_virtio_driver + regmap_irq_get_domain + regulator_get_mode + regulator_set_load + regulator_set_voltage_time + regulator_sync_voltage + release_pages + __request_percpu_irq + resume_cpus + root_task_group + rpmsg_send + rproc_put + rps_needed + sched_feat_names + sched_set_fifo + sched_setscheduler_nocheck + schedutil_cpu_util + scsi_autopm_get_device + scsi_autopm_put_device + scsi_print_sense_hdr + send_sig_info + seq_hex_dump + seq_vprintf + sg_copy_from_buffer + sg_copy_to_buffer + sg_miter_next + sg_miter_start + sg_miter_stop + shmem_file_setup + si_mem_available + si_meminfo + simple_strtol + skb_pull_rcsum + skb_realloc_headroom + snd_card_add_dev_attr + snd_pcm_format_physical_width + snd_pcm_hw_constraint_list + snd_pcm_hw_constraint_mask64 + snd_soc_component_exit_regmap + snd_soc_component_read + snd_soc_component_set_jack + snd_soc_component_test_bits + snd_soc_component_update_bits + snd_soc_component_write + snd_soc_dai_set_sysclk + snd_soc_dapm_disable_pin + snd_soc_dapm_enable_pin + snd_soc_dapm_get_pin_switch + snd_soc_dapm_info_pin_switch + snd_soc_dapm_put_pin_switch + snd_soc_dapm_sync + snd_soc_find_dai + snd_soc_new_compress + snd_soc_of_get_dai_link_codecs + snd_soc_poweroff + snd_soc_resume + spi_bus_type + __spi_register_driver + spi_setup + spi_sync + split_page + sprint_symbol + sprint_symbol_no_offset + static_key_disable_cpuslocked + static_key_enable_cpuslocked + strcasecmp + strlcat + strpbrk + strrchr + strreplace + strspn + synchronize_srcu syscore_resume syscore_suspend + sysctl_sched_features + sysfs_create_bin_file + sysfs_merge_group + sysfs_notify + sysfs_remove_bin_file + system_highpri_wq + system_long_wq + __tasklet_hi_schedule tasklist_lock + task_may_not_preempt + __task_rq_lock + thermal_zone_device_update + tick_nohz_get_idle_calls_cpu + __trace_bputs + __traceiter_android_rvh_dequeue_task_fair + __traceiter_android_rvh_enqueue_task_fair + __traceiter_android_rvh_finish_prio_fork + __traceiter_android_rvh_media_device_setup_link + __traceiter_android_rvh_new_task_stats + __traceiter_android_rvh_prepare_prio_fork + __traceiter_android_rvh_rtmutex_prepare_setprio __traceiter_android_rvh_sched_rebalance_domains + __traceiter_android_rvh_select_task_rq_fair + __traceiter_android_rvh_select_task_rq_rt + __traceiter_android_rvh_setscheduler + __traceiter_android_rvh_set_user_nice __traceiter_android_rvh_uclamp_eff_get + __traceiter_android_rvh_v4l2subdev_set_fmt + __traceiter_android_rvh_v4l2subdev_set_frame_interval + __traceiter_android_rvh_v4l2subdev_set_selection + __traceiter_android_vh_alter_futex_plist_add + __traceiter_android_vh_alter_rwsem_list_add + __traceiter_android_vh_arch_set_freq_scale + __traceiter_android_vh_binder_restore_priority + __traceiter_android_vh_binder_set_priority + __traceiter_android_vh_binder_transaction_init + __traceiter_android_vh_cgroup_set_task + __traceiter_android_vh_clear_mask_adjust + __traceiter_android_vh_clear_reserved_fmt_fields __traceiter_android_vh_em_cpu_energy + __traceiter_android_vh_fill_ext_fmtdesc + __traceiter_android_vh_finish_update_load_avg_se + __traceiter_android_vh_freq_qos_add_request __traceiter_android_vh_freq_qos_remove_request + __traceiter_android_vh_freq_qos_update_request __traceiter_android_vh_iommu_alloc_iova __traceiter_android_vh_iommu_free_iova + __traceiter_android_vh_iommu_iovad_alloc_iova + __traceiter_android_vh_iommu_iovad_free_iova + __traceiter_android_vh_ipv6_gen_linklocal_addr __traceiter_android_vh_media_device_setup_link + __traceiter_android_vh_prepare_update_load_avg_se + __traceiter_android_vh_rwsem_init + __traceiter_android_vh_rwsem_wake + __traceiter_android_vh_rwsem_write_finished __traceiter_android_vh_scmi_timeout_sync + __traceiter_android_vh_show_resume_epoch_val + __traceiter_android_vh_show_suspend_epoch_val + __traceiter_android_vh_snd_compr_use_pause_in_drain __traceiter_android_vh_snd_soc_card_get_comp_chain + __traceiter_android_vh_sound_usb_support_cpu_suspend + __traceiter_android_vh_syscall_prctl_finished __traceiter_android_vh_v4l2subdev_set_fmt __traceiter_android_vh_v4l2subdev_set_frame_interval __traceiter_android_vh_v4l2subdev_set_selection + __traceiter_cpu_frequency + __traceiter_sched_update_nr_running_tp + __tracepoint_android_rvh_dequeue_task_fair + __tracepoint_android_rvh_enqueue_task_fair + __tracepoint_android_rvh_finish_prio_fork + __tracepoint_android_rvh_media_device_setup_link + __tracepoint_android_rvh_new_task_stats + __tracepoint_android_rvh_prepare_prio_fork + __tracepoint_android_rvh_rtmutex_prepare_setprio __tracepoint_android_rvh_sched_rebalance_domains + __tracepoint_android_rvh_select_task_rq_fair + __tracepoint_android_rvh_select_task_rq_rt + __tracepoint_android_rvh_setscheduler + __tracepoint_android_rvh_set_user_nice + __tracepoint_android_rvh_v4l2subdev_set_fmt + __tracepoint_android_rvh_v4l2subdev_set_frame_interval + __tracepoint_android_rvh_v4l2subdev_set_selection __tracepoint_android_rvh_uclamp_eff_get + __tracepoint_android_vh_alter_futex_plist_add + __tracepoint_android_vh_alter_rwsem_list_add + __tracepoint_android_vh_arch_set_freq_scale + __tracepoint_android_vh_binder_restore_priority + __tracepoint_android_vh_binder_set_priority + __tracepoint_android_vh_binder_transaction_init + __tracepoint_android_vh_cgroup_set_task + __tracepoint_android_vh_clear_mask_adjust + __tracepoint_android_vh_clear_reserved_fmt_fields __tracepoint_android_vh_em_cpu_energy + __tracepoint_android_vh_fill_ext_fmtdesc + __tracepoint_android_vh_finish_update_load_avg_se + __tracepoint_android_vh_freq_qos_add_request __tracepoint_android_vh_freq_qos_remove_request + __tracepoint_android_vh_freq_qos_update_request __tracepoint_android_vh_iommu_alloc_iova __tracepoint_android_vh_iommu_free_iova + __tracepoint_android_vh_iommu_iovad_alloc_iova + __tracepoint_android_vh_iommu_iovad_free_iova + __tracepoint_android_vh_ipv6_gen_linklocal_addr __tracepoint_android_vh_media_device_setup_link + __tracepoint_android_vh_prepare_update_load_avg_se + __tracepoint_android_vh_rwsem_init + __tracepoint_android_vh_rwsem_wake + __tracepoint_android_vh_rwsem_write_finished __tracepoint_android_vh_scmi_timeout_sync + __tracepoint_android_vh_show_resume_epoch_val + __tracepoint_android_vh_show_suspend_epoch_val + __tracepoint_android_vh_snd_compr_use_pause_in_drain __tracepoint_android_vh_snd_soc_card_get_comp_chain + __tracepoint_android_vh_sound_usb_support_cpu_suspend + __tracepoint_android_vh_syscall_prctl_finished __tracepoint_android_vh_ufs_update_sdev __tracepoint_android_vh_v4l2subdev_set_fmt __tracepoint_android_vh_v4l2subdev_set_frame_interval __tracepoint_android_vh_v4l2subdev_set_selection + __tracepoint_cpu_frequency + __tracepoint_sched_update_nr_running_tp + tracepoint_srcu trace_print_hex_seq + trace_set_clr_event + tracing_off typec_get_drvdata + typec_mux_get_drvdata + typec_mux_register + typec_mux_set + typec_mux_unregister + typec_partner_set_identity + typec_register_partner + typec_register_port + typec_set_data_role + typec_set_orientation + typec_set_pwr_opmode + typec_set_pwr_role + typec_set_vconn_role + typec_switch_get_drvdata + typec_switch_register + typec_switch_unregister + typec_unregister_partner + typec_unregister_port ufshcd_auto_hibern8_update + ufshcd_read_desc_param ufshcd_shutdown + unpin_user_page + unregister_netdev + unregister_pernet_subsys unregister_syscore_ops + unregister_sysctl_table + unregister_virtio_device + unregister_virtio_driver + update_devfreq + usb_add_phy_dev + usb_assign_descriptors + usb_copy_descriptors + usb_ep_alloc_request + usb_ep_autoconfig + usb_ep_disable + usb_ep_enable + usb_ep_free_request + usb_ep_queue + usb_free_all_descriptors + usb_function_register + usb_function_unregister + usb_gstrings_attach + usb_hcd_check_unlink_urb + usb_hcd_giveback_urb + usb_hcd_link_urb_to_ep + usb_hcd_resume_root_hub + usb_hcd_unlink_urb_from_ep + usb_hcd_unmap_urb_for_dma + usb_interface_id + usb_os_desc_prepare_interf_dir + usb_otg_state_string + usb_phy_set_charger_current + usb_remove_phy + v4l2_async_notifier_add_subdev + v4l2_async_notifier_cleanup + v4l2_async_subdev_notifier_register + v4l2_compat_ioctl32 + v4l2_ctrl_find + v4l2_ctrl_g_ctrl + v4l2_ctrl_g_ctrl_int64 + __v4l2_ctrl_modify_range + v4l2_ctrl_new_std_menu_items + v4l2_ctrl_request_complete + v4l2_ctrl_request_setup + __v4l2_ctrl_s_ctrl_compound + v4l2_ctrl_subdev_subscribe_event + v4l2_device_register_subdev + v4l2_event_queue + v4l2_event_subdev_unsubscribe + v4l2_fh_open + __v4l2_find_nearest_size + v4l2_format_info + v4l2_m2m_buf_copy_metadata v4l2_m2m_buf_remove_by_buf + v4l2_m2m_register_media_controller + v4l2_m2m_request_queue + v4l2_m2m_unregister_media_controller + v4l2_pipeline_link_notify + v4l2_subdev_call_wrappers + v4l2_subdev_link_validate + v4l2_subdev_link_validate_default + vb2_common_vm_ops + vb2_create_framevec + vb2_destroy_framevec + vb2_fop_mmap + vb2_fop_poll + vb2_fop_release + vb2_ioctl_create_bufs + vb2_ioctl_dqbuf + vb2_ioctl_expbuf + vb2_ioctl_prepare_buf + vb2_ioctl_qbuf + vb2_ioctl_querybuf + vb2_ioctl_reqbufs + vb2_ioctl_streamoff + vb2_ioctl_streamon + vb2_request_object_is_buffer + vb2_request_queue + vb2_request_validate + video_device_release_empty + virtqueue_add_inbuf + virtqueue_add_outbuf + virtqueue_detach_unused_buf + virtqueue_get_buf + virtqueue_get_vring_size virtqueue_kick + virtqueue_kick_prepare + virtqueue_notify + vmalloc_to_page + vmf_insert_mixed + vm_get_page_prot + vm_insert_page + vm_map_ram + vm_unmap_ram + vprintk + vring_del_virtqueue + vring_interrupt + vring_new_virtqueue + vsscanf + wait_for_completion_killable + wait_for_completion_killable_timeout + wakeup_source_destroy + wakeup_source_remove wireless_send_event + work_busy ww_mutex_lock ww_mutex_lock_interruptible diff --git a/android/abi_gki_aarch64_oplus b/android/abi_gki_aarch64_oplus index 5f50e47ef58a..5b208407c2a5 100644 --- a/android/abi_gki_aarch64_oplus +++ b/android/abi_gki_aarch64_oplus @@ -3103,6 +3103,7 @@ trace_raw_output_prep trace_seq_printf trace_seq_putc + tracing_is_on tracing_off truncate_inode_pages_range truncate_pagecache_range diff --git a/android/abi_gki_aarch64_transsion b/android/abi_gki_aarch64_transsion new file mode 100644 index 000000000000..7538d32cf51b --- /dev/null +++ b/android/abi_gki_aarch64_transsion @@ -0,0 +1,8 @@ +[abi_symbol_list] + get_mem_cgroup_from_mm + is_swap_slot_cache_enabled + swapcache_free_entries + swap_type_to_swap_info + scan_swap_map_slots + swap_alloc_cluster + check_cache_active diff --git a/build.config.gki.aarch64 b/build.config.gki.aarch64 index 37a8271fd178..9e70748400a1 100644 --- a/build.config.gki.aarch64 +++ b/build.config.gki.aarch64 @@ -29,6 +29,7 @@ android/abi_gki_aarch64_virtual_device android/abi_gki_aarch64_vivo android/abi_gki_aarch64_xiaomi android/abi_gki_aarch64_asus +android/abi_gki_aarch64_transsion " FILES="${FILES} diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 271df56a34ed..a6c589b266da 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -407,3 +407,26 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_tlb_conf); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node_memcgs); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ra_tuning_max_page); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_tune_memcg_scan_type); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_handle_pte_fault_end); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cow_user_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swapin_add_anon_rmap); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_waiting_for_page_migration); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_migrate_page_states); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_one_end); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_count_pswpin); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_count_pswpout); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_count_swpout_vm_event); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_swap_slot_cache_active); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_drain_slots_cache_cpu); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_swap_slot_cache); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_swap_slot); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_swap_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_isolated_for_reclaim); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_inactive_is_low); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_snapshot_refaults); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_account_swap_pages); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_unuse_swap_page); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_init_swap_info_struct); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_si_swapinfo); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_si); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_pages); diff --git a/drivers/base/devcoredump.c b/drivers/base/devcoredump.c index 9243468e2c99..ef23c1c33eb2 100644 --- a/drivers/base/devcoredump.c +++ b/drivers/base/devcoredump.c @@ -29,6 +29,47 @@ struct devcd_entry { struct device devcd_dev; void *data; size_t datalen; + /* + * Here, mutex is required to serialize the calls to del_wk work between + * user/kernel space which happens when devcd is added with device_add() + * and that sends uevent to user space. User space reads the uevents, + * and calls to devcd_data_write() which try to modify the work which is + * not even initialized/queued from devcoredump. + * + * + * + * cpu0(X) cpu1(Y) + * + * dev_coredump() uevent sent to user space + * device_add() ======================> user space process Y reads the + * uevents writes to devcd fd + * which results into writes to + * + * devcd_data_write() + * mod_delayed_work() + * try_to_grab_pending() + * del_timer() + * debug_assert_init() + * INIT_DELAYED_WORK() + * schedule_delayed_work() + * + * + * Also, mutex alone would not be enough to avoid scheduling of + * del_wk work after it get flush from a call to devcd_free() + * mentioned as below. + * + * disabled_store() + * devcd_free() + * mutex_lock() devcd_data_write() + * flush_delayed_work() + * mutex_unlock() + * mutex_lock() + * mod_delayed_work() + * mutex_unlock() + * So, delete_work flag is required. + */ + struct mutex mutex; + bool delete_work; struct module *owner; ssize_t (*read)(char *buffer, loff_t offset, size_t count, void *data, size_t datalen); @@ -88,7 +129,12 @@ static ssize_t devcd_data_write(struct file *filp, struct kobject *kobj, struct device *dev = kobj_to_dev(kobj); struct devcd_entry *devcd = dev_to_devcd(dev); - mod_delayed_work(system_wq, &devcd->del_wk, 0); + mutex_lock(&devcd->mutex); + if (!devcd->delete_work) { + devcd->delete_work = true; + mod_delayed_work(system_wq, &devcd->del_wk, 0); + } + mutex_unlock(&devcd->mutex); return count; } @@ -116,7 +162,12 @@ static int devcd_free(struct device *dev, void *data) { struct devcd_entry *devcd = dev_to_devcd(dev); + mutex_lock(&devcd->mutex); + if (!devcd->delete_work) + devcd->delete_work = true; + flush_delayed_work(&devcd->del_wk); + mutex_unlock(&devcd->mutex); return 0; } @@ -126,6 +177,30 @@ static ssize_t disabled_show(struct class *class, struct class_attribute *attr, return sysfs_emit(buf, "%d\n", devcd_disabled); } +/* + * + * disabled_store() worker() + * class_for_each_device(&devcd_class, + * NULL, NULL, devcd_free) + * ... + * ... + * while ((dev = class_dev_iter_next(&iter)) + * devcd_del() + * device_del() + * put_device() <- last reference + * error = fn(dev, data) devcd_dev_release() + * devcd_free(dev, data) kfree(devcd) + * mutex_lock(&devcd->mutex); + * + * + * In the above diagram, It looks like disabled_store() would be racing with parallely + * running devcd_del() and result in memory abort while acquiring devcd->mutex which + * is called after kfree of devcd memory after dropping its last reference with + * put_device(). However, this will not happens as fn(dev, data) runs + * with its own reference to device via klist_node so it is not its last reference. + * so, above situation would not occur. + */ + static ssize_t disabled_store(struct class *class, struct class_attribute *attr, const char *buf, size_t count) { @@ -282,13 +357,16 @@ void dev_coredumpm(struct device *dev, struct module *owner, devcd->read = read; devcd->free = free; devcd->failing_dev = get_device(dev); + devcd->delete_work = false; + mutex_init(&devcd->mutex); device_initialize(&devcd->devcd_dev); dev_set_name(&devcd->devcd_dev, "devcd%d", atomic_inc_return(&devcd_count)); devcd->devcd_dev.class = &devcd_class; + mutex_lock(&devcd->mutex); if (device_add(&devcd->devcd_dev)) goto put_device; @@ -302,10 +380,11 @@ void dev_coredumpm(struct device *dev, struct module *owner, INIT_DELAYED_WORK(&devcd->del_wk, devcd_del); schedule_delayed_work(&devcd->del_wk, DEVCD_TIMEOUT); - + mutex_unlock(&devcd->mutex); return; put_device: put_device(&devcd->devcd_dev); + mutex_unlock(&devcd->mutex); put_module: module_put(owner); free: diff --git a/drivers/nfc/nfcmrvl/main.c b/drivers/nfc/nfcmrvl/main.c index 529be35ac178..54d228acc0f5 100644 --- a/drivers/nfc/nfcmrvl/main.c +++ b/drivers/nfc/nfcmrvl/main.c @@ -194,6 +194,7 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv) { struct nci_dev *ndev = priv->ndev; + nci_unregister_device(ndev); if (priv->ndev->nfc_dev->fw_download_in_progress) nfcmrvl_fw_dnld_abort(priv); @@ -202,7 +203,6 @@ void nfcmrvl_nci_unregister_dev(struct nfcmrvl_private *priv) if (gpio_is_valid(priv->config.reset_n_io)) gpio_free(priv->config.reset_n_io); - nci_unregister_device(ndev); nci_free_device(ndev); kfree(priv); } diff --git a/drivers/usb/common/usb-conn-gpio.c b/drivers/usb/common/usb-conn-gpio.c index c9545a4eff66..068cd2c20bf7 100644 --- a/drivers/usb/common/usb-conn-gpio.c +++ b/drivers/usb/common/usb-conn-gpio.c @@ -275,6 +275,7 @@ static int usb_conn_probe(struct platform_device *pdev) } platform_set_drvdata(pdev, info); + device_set_wakeup_capable(&pdev->dev, true); /* Perform initial detection */ usb_conn_queue_dwork(info, 0); @@ -304,6 +305,14 @@ static int __maybe_unused usb_conn_suspend(struct device *dev) { struct usb_conn_info *info = dev_get_drvdata(dev); + if (device_may_wakeup(dev)) { + if (info->id_gpiod) + enable_irq_wake(info->id_irq); + if (info->vbus_gpiod) + enable_irq_wake(info->vbus_irq); + return 0; + } + if (info->id_gpiod) disable_irq(info->id_irq); if (info->vbus_gpiod) @@ -318,6 +327,14 @@ static int __maybe_unused usb_conn_resume(struct device *dev) { struct usb_conn_info *info = dev_get_drvdata(dev); + if (device_may_wakeup(dev)) { + if (info->id_gpiod) + disable_irq_wake(info->id_irq); + if (info->vbus_gpiod) + disable_irq_wake(info->vbus_irq); + return 0; + } + pinctrl_pm_select_default_state(dev); if (info->id_gpiod) diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index bb0d92837f67..ecf298bc49ed 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -122,8 +122,6 @@ struct ffs_ep { struct usb_endpoint_descriptor *descs[3]; u8 num; - - int status; /* P: epfile->mutex */ }; struct ffs_epfile { @@ -227,6 +225,9 @@ struct ffs_io_data { bool use_sg; struct ffs_data *ffs; + + int status; + struct completion done; }; struct ffs_desc_helper { @@ -705,12 +706,15 @@ static const struct file_operations ffs_ep0_operations = { static void ffs_epfile_io_complete(struct usb_ep *_ep, struct usb_request *req) { + struct ffs_io_data *io_data = req->context; + ENTER(); - if (likely(req->context)) { - struct ffs_ep *ep = _ep->driver_data; - ep->status = req->status ? req->status : req->actual; - complete(req->context); - } + if (req->status) + io_data->status = req->status; + else + io_data->status = req->actual; + + complete(&io_data->done); } static ssize_t ffs_copy_to_iter(void *data, int data_len, struct iov_iter *iter) @@ -1048,7 +1052,6 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) WARN(1, "%s: data_len == -EINVAL\n", __func__); ret = -EINVAL; } else if (!io_data->aio) { - DECLARE_COMPLETION_ONSTACK(done); bool interrupted = false; req = ep->req; @@ -1064,7 +1067,8 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) io_data->buf = data; - req->context = &done; + init_completion(&io_data->done); + req->context = io_data; req->complete = ffs_epfile_io_complete; ret = usb_ep_queue(ep->ep, req, GFP_ATOMIC); @@ -1073,7 +1077,12 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) spin_unlock_irq(&epfile->ffs->eps_lock); - if (unlikely(wait_for_completion_interruptible(&done))) { + if (unlikely(wait_for_completion_interruptible(&io_data->done))) { + spin_lock_irq(&epfile->ffs->eps_lock); + if (epfile->ep != ep) { + ret = -ESHUTDOWN; + goto error_lock; + } /* * To avoid race condition with ffs_epfile_io_complete, * dequeue the request first then check @@ -1081,17 +1090,18 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) * condition with req->complete callback. */ usb_ep_dequeue(ep->ep, req); - wait_for_completion(&done); - interrupted = ep->status < 0; + spin_unlock_irq(&epfile->ffs->eps_lock); + wait_for_completion(&io_data->done); + interrupted = io_data->status < 0; } if (interrupted) ret = -EINTR; - else if (io_data->read && ep->status > 0) - ret = __ffs_epfile_read_data(epfile, data, ep->status, + else if (io_data->read && io_data->status > 0) + ret = __ffs_epfile_read_data(epfile, data, io_data->status, &io_data->data); else - ret = ep->status; + ret = io_data->status; goto error_mutex; } else if (!(req = usb_ep_alloc_request(ep->ep, GFP_ATOMIC))) { ret = -ENOMEM; diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c index 03db2d6b2dba..12fe0be35528 100644 --- a/drivers/usb/gadget/function/f_mass_storage.c +++ b/drivers/usb/gadget/function/f_mass_storage.c @@ -1188,6 +1188,8 @@ static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh) int msf = common->cmnd[1] & 0x02; int start_track = common->cmnd[6]; u8 *buf = (u8 *)bh->buf; + u8 format; + int i, len; if ((common->cmnd[1] & ~0x02) != 0 || /* Mask away MSF */ start_track > 1) { @@ -1195,18 +1197,62 @@ static int do_read_toc(struct fsg_common *common, struct fsg_buffhd *bh) return -EINVAL; } - memset(buf, 0, 20); - buf[1] = (20-2); /* TOC data length */ - buf[2] = 1; /* First track number */ - buf[3] = 1; /* Last track number */ - buf[5] = 0x16; /* Data track, copying allowed */ - buf[6] = 0x01; /* Only track is number 1 */ - store_cdrom_address(&buf[8], msf, 0); + format = common->cmnd[2] & 0xf; + /* + * Check if CDB is old style SFF-8020i + * i.e. format is in 2 MSBs of byte 9 + * Mac OS-X host sends us this. + */ + if (format == 0) + format = (common->cmnd[9] >> 6) & 0x3; + + switch (format) { + case 0: + /* Formatted TOC */ + len = 4 + 2*8; /* 4 byte header + 2 descriptors */ + memset(buf, 0, len); + buf[1] = len - 2; /* TOC Length excludes length field */ + buf[2] = 1; /* First track number */ + buf[3] = 1; /* Last track number */ + buf[5] = 0x16; /* Data track, copying allowed */ + buf[6] = 0x01; /* Only track is number 1 */ + store_cdrom_address(&buf[8], msf, 0); + + buf[13] = 0x16; /* Lead-out track is data */ + buf[14] = 0xAA; /* Lead-out track number */ + store_cdrom_address(&buf[16], msf, curlun->num_sectors); + return len; + + case 2: + /* Raw TOC */ + len = 4 + 3*11; /* 4 byte header + 3 descriptors */ + memset(buf, 0, len); /* Header + A0, A1 & A2 descriptors */ + buf[1] = len - 2; /* TOC Length excludes length field */ + buf[2] = 1; /* First complete session */ + buf[3] = 1; /* Last complete session */ + + buf += 4; + /* fill in A0, A1 and A2 points */ + for (i = 0; i < 3; i++) { + buf[0] = 1; /* Session number */ + buf[1] = 0x16; /* Data track, copying allowed */ + /* 2 - Track number 0 -> TOC */ + buf[3] = 0xA0 + i; /* A0, A1, A2 point */ + /* 4, 5, 6 - Min, sec, frame is zero */ + buf[8] = 1; /* Pmin: last track number */ + buf += 11; /* go to next track descriptor */ + } + buf -= 11; /* go back to A2 descriptor */ - buf[13] = 0x16; /* Lead-out track is data */ - buf[14] = 0xAA; /* Lead-out track number */ - store_cdrom_address(&buf[16], msf, curlun->num_sectors); - return 20; + /* For A2, 7, 8, 9, 10 - zero, Pmin, Psec, Pframe of Lead out */ + store_cdrom_address(&buf[7], msf, curlun->num_sectors); + return len; + + default: + /* Multi-session, PMA, ATIP, CD-TEXT not supported/required */ + curlun->sense_data = SS_INVALID_FIELD_IN_CDB; + return -EINVAL; + } } static int do_mode_sense(struct fsg_common *common, struct fsg_buffhd *bh) @@ -1933,7 +1979,7 @@ static int do_scsi_command(struct fsg_common *common) common->data_size_from_cmnd = get_unaligned_be16(&common->cmnd[7]); reply = check_command(common, 10, DATA_DIR_TO_HOST, - (7<<6) | (1<<1), 1, + (0xf<<6) | (3<<1), 1, "READ TOC"); if (reply == 0) reply = do_read_toc(common, bh); diff --git a/drivers/usb/gadget/function/uvc_queue.c b/drivers/usb/gadget/function/uvc_queue.c index 51c83eea8318..a76eed073dfe 100644 --- a/drivers/usb/gadget/function/uvc_queue.c +++ b/drivers/usb/gadget/function/uvc_queue.c @@ -43,7 +43,8 @@ static int uvc_queue_setup(struct vb2_queue *vq, { struct uvc_video_queue *queue = vb2_get_drv_priv(vq); struct uvc_video *video = container_of(queue, struct uvc_video, queue); - struct usb_composite_dev *cdev = video->uvc->func.config->cdev; + unsigned int req_size; + unsigned int nreq; if (*nbuffers > UVC_MAX_VIDEO_BUFFERS) *nbuffers = UVC_MAX_VIDEO_BUFFERS; @@ -52,10 +53,16 @@ static int uvc_queue_setup(struct vb2_queue *vq, sizes[0] = video->imagesize; - if (cdev->gadget->speed < USB_SPEED_SUPER) - video->uvc_num_requests = 4; - else - video->uvc_num_requests = 64; + req_size = video->ep->maxpacket + * max_t(unsigned int, video->ep->maxburst, 1) + * (video->ep->mult); + + /* We divide by two, to increase the chance to run + * into fewer requests for smaller framesizes. + */ + nreq = DIV_ROUND_UP(DIV_ROUND_UP(sizes[0], 2), req_size); + nreq = clamp(nreq, 4U, 64U); + video->uvc_num_requests = nreq; return 0; } diff --git a/drivers/usb/gadget/function/uvc_video.c b/drivers/usb/gadget/function/uvc_video.c index e5e2c2bae3b9..be555c612b9c 100644 --- a/drivers/usb/gadget/function/uvc_video.c +++ b/drivers/usb/gadget/function/uvc_video.c @@ -302,6 +302,9 @@ static void uvcg_video_pump(struct work_struct *work) uvcg_queue_cancel(queue, 0); break; } + + /* Endpoint now owns the request */ + req = NULL; } if (!req) diff --git a/fs/exfat/balloc.c b/fs/exfat/balloc.c index 579c10f57c2b..75ab43905f73 100644 --- a/fs/exfat/balloc.c +++ b/fs/exfat/balloc.c @@ -141,7 +141,7 @@ void exfat_free_bitmap(struct exfat_sb_info *sbi) kfree(sbi->vol_amap); } -int exfat_set_bitmap(struct inode *inode, unsigned int clu) +int exfat_set_bitmap(struct inode *inode, unsigned int clu, bool sync) { int i, b; unsigned int ent_idx; @@ -154,7 +154,7 @@ int exfat_set_bitmap(struct inode *inode, unsigned int clu) b = BITMAP_OFFSET_BIT_IN_SECTOR(sb, ent_idx); set_bit_le(b, sbi->vol_amap[i]->b_data); - exfat_update_bh(sbi->vol_amap[i], IS_DIRSYNC(inode)); + exfat_update_bh(sbi->vol_amap[i], sync); return 0; } diff --git a/fs/exfat/dir.c b/fs/exfat/dir.c index dedbc55cd48f..09514bf42e76 100644 --- a/fs/exfat/dir.c +++ b/fs/exfat/dir.c @@ -317,7 +317,7 @@ int exfat_alloc_new_dir(struct inode *inode, struct exfat_chain *clu) exfat_chain_set(clu, EXFAT_EOF_CLUSTER, 0, ALLOC_NO_FAT_CHAIN); - ret = exfat_alloc_cluster(inode, 1, clu); + ret = exfat_alloc_cluster(inode, 1, clu, IS_DIRSYNC(inode)); if (ret) return ret; diff --git a/fs/exfat/exfat_fs.h b/fs/exfat/exfat_fs.h index b8f0e829ecbd..c5d370990d39 100644 --- a/fs/exfat/exfat_fs.h +++ b/fs/exfat/exfat_fs.h @@ -388,7 +388,7 @@ int exfat_clear_volume_dirty(struct super_block *sb); #define exfat_get_next_cluster(sb, pclu) exfat_ent_get(sb, *(pclu), pclu) int exfat_alloc_cluster(struct inode *inode, unsigned int num_alloc, - struct exfat_chain *p_chain); + struct exfat_chain *p_chain, bool sync_bmap); int exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain); int exfat_ent_get(struct super_block *sb, unsigned int loc, unsigned int *content); @@ -407,7 +407,7 @@ int exfat_count_num_clusters(struct super_block *sb, /* balloc.c */ int exfat_load_bitmap(struct super_block *sb); void exfat_free_bitmap(struct exfat_sb_info *sbi); -int exfat_set_bitmap(struct inode *inode, unsigned int clu); +int exfat_set_bitmap(struct inode *inode, unsigned int clu, bool sync); void exfat_clear_bitmap(struct inode *inode, unsigned int clu); unsigned int exfat_find_free_bitmap(struct super_block *sb, unsigned int clu); int exfat_count_used_clusters(struct super_block *sb, unsigned int *ret_count); diff --git a/fs/exfat/fatent.c b/fs/exfat/fatent.c index c3c9afee7418..6078cbfdfe8a 100644 --- a/fs/exfat/fatent.c +++ b/fs/exfat/fatent.c @@ -277,7 +277,7 @@ int exfat_zeroed_cluster(struct inode *dir, unsigned int clu) } int exfat_alloc_cluster(struct inode *inode, unsigned int num_alloc, - struct exfat_chain *p_chain) + struct exfat_chain *p_chain, bool sync_bmap) { int ret = -ENOSPC; unsigned int num_clusters = 0, total_cnt; @@ -339,7 +339,7 @@ int exfat_alloc_cluster(struct inode *inode, unsigned int num_alloc, } /* update allocation bitmap */ - if (exfat_set_bitmap(inode, new_clu)) { + if (exfat_set_bitmap(inode, new_clu, sync_bmap)) { ret = -EIO; goto free_cluster; } diff --git a/fs/exfat/inode.c b/fs/exfat/inode.c index 2a9f6a80584e..842cdf5e8b9c 100644 --- a/fs/exfat/inode.c +++ b/fs/exfat/inode.c @@ -178,7 +178,8 @@ static int exfat_map_cluster(struct inode *inode, unsigned int clu_offset, return -EIO; } - ret = exfat_alloc_cluster(inode, num_to_be_allocated, &new_clu); + ret = exfat_alloc_cluster(inode, num_to_be_allocated, &new_clu, + inode_needs_sync(inode)); if (ret) return ret; diff --git a/fs/exfat/namei.c b/fs/exfat/namei.c index 935f60050900..7bafc82d4dc7 100644 --- a/fs/exfat/namei.c +++ b/fs/exfat/namei.c @@ -340,7 +340,7 @@ static int exfat_find_empty_entry(struct inode *inode, exfat_chain_set(&clu, last_clu + 1, 0, p_dir->flags); /* allocate a cluster */ - ret = exfat_alloc_cluster(inode, 1, &clu); + ret = exfat_alloc_cluster(inode, 1, &clu, IS_DIRSYNC(inode)); if (ret) return ret; diff --git a/fs/io_uring.c b/fs/io_uring.c index af4295673613..b9e9046777db 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1556,6 +1556,7 @@ static void __io_queue_deferred(struct io_ring_ctx *ctx) static void io_flush_timeouts(struct io_ring_ctx *ctx) { + struct io_kiocb *req, *tmp; u32 seq; if (list_empty(&ctx->timeout_list)) @@ -1563,10 +1564,8 @@ static void io_flush_timeouts(struct io_ring_ctx *ctx) seq = ctx->cached_cq_tail - atomic_read(&ctx->cq_timeouts); - do { + list_for_each_entry_safe(req, tmp, &ctx->timeout_list, timeout.list) { u32 events_needed, events_got; - struct io_kiocb *req = list_first_entry(&ctx->timeout_list, - struct io_kiocb, timeout.list); if (io_is_timeout_noseq(req)) break; @@ -1583,9 +1582,8 @@ static void io_flush_timeouts(struct io_ring_ctx *ctx) if (events_got < events_needed) break; - list_del_init(&req->timeout.list); io_kill_timeout(req, 0); - } while (!list_empty(&ctx->timeout_list)); + } ctx->cq_last_tm_flush = seq; } @@ -5639,6 +5637,7 @@ static int io_timeout_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe, else data->mode = HRTIMER_MODE_REL; + INIT_LIST_HEAD(&req->timeout.list); hrtimer_init(&data->timer, CLOCK_MONOTONIC, data->mode); return 0; } @@ -6282,12 +6281,12 @@ static enum hrtimer_restart io_link_timeout_fn(struct hrtimer *timer) if (!list_empty(&req->link_list)) { prev = list_entry(req->link_list.prev, struct io_kiocb, link_list); - if (refcount_inc_not_zero(&prev->refs)) - list_del_init(&req->link_list); - else + list_del_init(&req->link_list); + if (!refcount_inc_not_zero(&prev->refs)) prev = NULL; } + list_del(&req->timeout.list); spin_unlock_irqrestore(&ctx->completion_lock, flags); if (prev) { diff --git a/include/trace/hooks/binder.h b/include/trace/hooks/binder.h index a5c090f38388..2b9e7e09a13d 100644 --- a/include/trace/hooks/binder.h +++ b/include/trace/hooks/binder.h @@ -11,13 +11,26 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ -struct binder_transaction; -struct task_struct; +#ifdef __GENKSYMS__ struct binder_alloc; struct binder_proc; struct binder_thread; -struct binder_transaction_data; +struct binder_transaction; +struct task_struct; struct seq_file; +struct binder_transaction_data; +#else +/* struct binder_alloc */ +#include <../drivers/android/binder_alloc.h> +/* struct binder_proc, struct binder_thread, struct binder_transaction */ +#include <../drivers/android/binder_internal.h> +/* struct task_struct */ +#include +/* struct seq_file */ +#include +/* struct binder_transaction_data */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_binder_transaction_init, TP_PROTO(struct binder_transaction *t), TP_ARGS(t)); @@ -30,8 +43,6 @@ DECLARE_HOOK(android_vh_binder_set_priority, DECLARE_HOOK(android_vh_binder_restore_priority, TP_PROTO(struct binder_transaction *t, struct task_struct *task), TP_ARGS(t, task)); -struct binder_proc; -struct binder_thread; DECLARE_HOOK(android_vh_binder_wakeup_ilocked, TP_PROTO(struct task_struct *task, bool sync, struct binder_proc *proc), TP_ARGS(task, sync, proc)); diff --git a/include/trace/hooks/block.h b/include/trace/hooks/block.h index 0d9d7db39968..964fff355602 100644 --- a/include/trace/hooks/block.h +++ b/include/trace/hooks/block.h @@ -10,9 +10,18 @@ #include #include -struct blk_mq_tag_set; +#ifdef __GENKSYMS__ struct blk_mq_tags; struct blk_mq_alloc_data; +struct blk_mq_tag_set; +#else +/* struct blk_mq_tags */ +#include <../block/blk-mq-tag.h> +/* struct blk_mq_alloc_data */ +#include <../block/blk-mq.h> +/* struct blk_mq_tag_set */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_blk_alloc_rqs, TP_PROTO(size_t *rq_size, struct blk_mq_tag_set *set, diff --git a/include/trace/hooks/cgroup.h b/include/trace/hooks/cgroup.h index 6b6d7918c518..68818ad29600 100644 --- a/include/trace/hooks/cgroup.h +++ b/include/trace/hooks/cgroup.h @@ -8,7 +8,16 @@ #include #include +struct cgroup_taskset; +#ifdef __GENKSYMS__ +struct cgroup_subsys; struct task_struct; +#else +/* struct cgroup_subsys */ +#include +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_cgroup_set_task, TP_PROTO(int ret, struct task_struct *task), TP_ARGS(ret, task)); @@ -22,8 +31,6 @@ DECLARE_RESTRICTED_HOOK(android_rvh_refrigerator, TP_PROTO(bool f), TP_ARGS(f), 1); -struct cgroup_subsys; -struct cgroup_taskset; DECLARE_HOOK(android_vh_cgroup_attach, TP_PROTO(struct cgroup_subsys *ss, struct cgroup_taskset *tset), TP_ARGS(ss, tset)) diff --git a/include/trace/hooks/cpuidle.h b/include/trace/hooks/cpuidle.h index 6d1f4bf7f1ed..8d1e83cdc436 100644 --- a/include/trace/hooks/cpuidle.h +++ b/include/trace/hooks/cpuidle.h @@ -10,7 +10,12 @@ #include #include +#ifdef __GENKSYMS__ struct cpuidle_device; +#else +/* struct cpuidle_device */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_cpu_idle_enter, TP_PROTO(int *state, struct cpuidle_device *dev), diff --git a/include/trace/hooks/cpuidle_psci.h b/include/trace/hooks/cpuidle_psci.h index 94b01eba0b4e..994e76b3db1b 100644 --- a/include/trace/hooks/cpuidle_psci.h +++ b/include/trace/hooks/cpuidle_psci.h @@ -11,7 +11,12 @@ * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct cpuidle_device; +#else +/* struct cpuidle_device */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_cpuidle_psci_enter, TP_PROTO(struct cpuidle_device *dev, bool s2idle), TP_ARGS(dev, s2idle)); diff --git a/include/trace/hooks/creds.h b/include/trace/hooks/creds.h index dd877e3a1f3e..a3042e0ffd4d 100644 --- a/include/trace/hooks/creds.h +++ b/include/trace/hooks/creds.h @@ -11,8 +11,15 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct cred; struct task_struct; +#else +/* struct cred */ +#include +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_commit_creds, TP_PROTO(const struct task_struct *task, const struct cred *new), TP_ARGS(task, new)); diff --git a/include/trace/hooks/debug.h b/include/trace/hooks/debug.h index ac006d7fdd0a..3ed574dbfaeb 100644 --- a/include/trace/hooks/debug.h +++ b/include/trace/hooks/debug.h @@ -11,7 +11,12 @@ #include #if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +#ifdef __GENKSYMS__ struct pt_regs; +#else +/* struct pt_regs */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_ipi_stop, TP_PROTO(struct pt_regs *regs), diff --git a/include/trace/hooks/dtask.h b/include/trace/hooks/dtask.h index 7053563e2e8f..9890bfe5c41d 100644 --- a/include/trace/hooks/dtask.h +++ b/include/trace/hooks/dtask.h @@ -11,7 +11,21 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct mutex; +struct rt_mutex; +struct rw_semaphore; +struct task_struct; +#else +/* struct mutex */ +#include +/* struct rt_mutex */ +#include +/* struct rw_semaphore */ +#include +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_mutex_wait_start, TP_PROTO(struct mutex *lock), TP_ARGS(lock)); @@ -19,7 +33,6 @@ DECLARE_HOOK(android_vh_mutex_wait_finish, TP_PROTO(struct mutex *lock), TP_ARGS(lock)); -struct rt_mutex; DECLARE_HOOK(android_vh_rtmutex_wait_start, TP_PROTO(struct rt_mutex *lock), TP_ARGS(lock)); @@ -27,7 +40,6 @@ DECLARE_HOOK(android_vh_rtmutex_wait_finish, TP_PROTO(struct rt_mutex *lock), TP_ARGS(lock)); -struct rw_semaphore; DECLARE_HOOK(android_vh_rwsem_read_wait_start, TP_PROTO(struct rw_semaphore *sem), TP_ARGS(sem)); @@ -41,7 +53,6 @@ DECLARE_HOOK(android_vh_rwsem_write_wait_finish, TP_PROTO(struct rw_semaphore *sem), TP_ARGS(sem)); -struct task_struct; DECLARE_HOOK(android_vh_sched_show_task, TP_PROTO(struct task_struct *task), TP_ARGS(task)); diff --git a/include/trace/hooks/fault.h b/include/trace/hooks/fault.h index 2c4176001ead..de66a1ca33c7 100644 --- a/include/trace/hooks/fault.h +++ b/include/trace/hooks/fault.h @@ -11,7 +11,12 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct pt_regs; +#else +/* struct pt_regs */ +#include +#endif /* __GENKSYMS__ */ DECLARE_RESTRICTED_HOOK(android_rvh_die_kernel_fault, TP_PROTO(struct pt_regs *regs, unsigned int esr, unsigned long addr, const char *msg), TP_ARGS(regs, esr, addr, msg), 1); diff --git a/include/trace/hooks/fips140.h b/include/trace/hooks/fips140.h index 3aebf6168791..02283a1b126f 100644 --- a/include/trace/hooks/fips140.h +++ b/include/trace/hooks/fips140.h @@ -8,7 +8,12 @@ #include #include +#ifdef __GENKSYMS__ struct crypto_aes_ctx; +#else +/* struct crypto_aes_ctx */ +#include +#endif /* __GENKSYMS__ */ /* * These hooks exist only for the benefit of the FIPS140 crypto module, which diff --git a/include/trace/hooks/fpsimd.h b/include/trace/hooks/fpsimd.h index a4a3ce228fff..ab7c34ce64f8 100644 --- a/include/trace/hooks/fpsimd.h +++ b/include/trace/hooks/fpsimd.h @@ -10,7 +10,12 @@ #include #include +#ifdef __GENKSYMS__ struct task_struct; +#else +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_is_fpsimd_save, TP_PROTO(struct task_struct *prev, struct task_struct *next), diff --git a/include/trace/hooks/gic_v3.h b/include/trace/hooks/gic_v3.h index 42e0bb934570..6b649fd865b1 100644 --- a/include/trace/hooks/gic_v3.h +++ b/include/trace/hooks/gic_v3.h @@ -10,8 +10,15 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ -struct irq_data; +#ifdef __GENKSYMS__ struct cpumask; +struct irq_data; +#else +/* struct cpumask */ +#include +/* struct irq_data */ +#include +#endif /* __GENKSYMS__ */ DECLARE_RESTRICTED_HOOK(android_rvh_gic_v3_set_affinity, TP_PROTO(struct irq_data *d, const struct cpumask *mask_val, u64 *affinity, bool force, void __iomem *base), diff --git a/include/trace/hooks/iommu.h b/include/trace/hooks/iommu.h index e818b90e482c..28bd0a3929ed 100644 --- a/include/trace/hooks/iommu.h +++ b/include/trace/hooks/iommu.h @@ -12,6 +12,12 @@ #include #include +#ifdef __GENKSYMS__ +struct iova_domain; +#else +/* struct iova_domain */ +#include +#endif /* __GENKSYMS__ */ DECLARE_RESTRICTED_HOOK(android_rvh_iommu_setup_dma_ops, TP_PROTO(struct device *dev, u64 dma_base, u64 size), TP_ARGS(dev, dma_base, size), 1); @@ -24,7 +30,6 @@ DECLARE_HOOK(android_vh_iommu_alloc_iova, TP_PROTO(struct device *dev, dma_addr_t iova, size_t size), TP_ARGS(dev, iova, size)); -struct iova_domain; DECLARE_HOOK(android_vh_iommu_iovad_alloc_iova, TP_PROTO(struct device *dev, struct iova_domain *iovad, dma_addr_t iova, size_t size), diff --git a/include/trace/hooks/logbuf.h b/include/trace/hooks/logbuf.h index f73ad597fc64..6aeb10a4661b 100644 --- a/include/trace/hooks/logbuf.h +++ b/include/trace/hooks/logbuf.h @@ -10,8 +10,13 @@ #include #include -struct printk_ringbuffer; +#ifdef __GENKSYMS__ struct printk_record; +struct printk_ringbuffer; +#else +/* struct printk_record, struct printk_ringbuffer */ +#include <../kernel/printk/printk_ringbuffer.h> +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_logbuf, TP_PROTO(struct printk_ringbuffer *rb, struct printk_record *r), diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 4af456345aa4..91d9172c6b4a 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -14,7 +14,26 @@ #include #include +#ifdef __GENKSYMS__ +struct slabinfo; +struct cgroup_subsys_state; +struct device; +struct mem_cgroup; +struct readahead_control; +#else +/* struct slabinfo */ +#include <../mm/slab.h> +/* struct cgroup_subsys_state */ +#include +/* struct device */ +#include +/* struct mem_cgroup */ +#include +/* struct readahead_control */ +#include +#endif /* __GENKSYMS__ */ struct cma; +struct swap_slots_cache; DECLARE_RESTRICTED_HOOK(android_rvh_set_skip_swapcache_flags, TP_PROTO(gfp_t *flags), @@ -68,7 +87,6 @@ DECLARE_HOOK(android_vh_include_reserved_zone, DECLARE_HOOK(android_vh_show_mem, TP_PROTO(unsigned int filter, nodemask_t *nodemask), TP_ARGS(filter, nodemask)); -struct slabinfo; struct dirty_throttle_control; DECLARE_HOOK(android_vh_mm_dirty_limits, TP_PROTO(struct dirty_throttle_control *const gdtc, bool strictlimit, @@ -88,7 +106,6 @@ DECLARE_HOOK(android_vh_show_stack_hash, DECLARE_HOOK(android_vh_save_track_hash, TP_PROTO(bool alloc, unsigned long p), TP_ARGS(alloc, p)); -struct mem_cgroup; DECLARE_HOOK(android_vh_vmpressure, TP_PROTO(struct mem_cgroup *memcg, bool *bypass), TP_ARGS(memcg, bypass)); @@ -101,7 +118,6 @@ DECLARE_HOOK(android_vh_mem_cgroup_free, DECLARE_HOOK(android_vh_mem_cgroup_id_remove, TP_PROTO(struct mem_cgroup *memcg), TP_ARGS(memcg)); -struct cgroup_subsys_state; DECLARE_HOOK(android_vh_mem_cgroup_css_online, TP_PROTO(struct cgroup_subsys_state *css, struct mem_cgroup *memcg), TP_ARGS(css, memcg)); @@ -128,14 +144,77 @@ DECLARE_HOOK(android_vh_cma_drain_all_pages_bypass, DECLARE_HOOK(android_vh_pcplist_add_cma_pages_bypass, TP_PROTO(int migratetype, bool *bypass), TP_ARGS(migratetype, bypass)); -struct device; DECLARE_HOOK(android_vh_subpage_dma_contig_alloc, TP_PROTO(bool *allow_subpage_alloc, struct device *dev, size_t *size), TP_ARGS(allow_subpage_alloc, dev, size)); -struct readahead_control; DECLARE_HOOK(android_vh_ra_tuning_max_page, TP_PROTO(struct readahead_control *ractl, unsigned long *max_page), TP_ARGS(ractl, max_page)); +DECLARE_HOOK(android_vh_handle_pte_fault_end, + TP_PROTO(struct vm_fault *vmf, unsigned long highest_memmap_pfn), + TP_ARGS(vmf, highest_memmap_pfn)); +DECLARE_HOOK(android_vh_cow_user_page, + TP_PROTO(struct vm_fault *vmf, struct page *page), + TP_ARGS(vmf, page)); +DECLARE_HOOK(android_vh_swapin_add_anon_rmap, + TP_PROTO(struct vm_fault *vmf, struct page *page), + TP_ARGS(vmf, page)); +DECLARE_HOOK(android_vh_waiting_for_page_migration, + TP_PROTO(struct page *page), + TP_ARGS(page)); +DECLARE_HOOK(android_vh_migrate_page_states, + TP_PROTO(struct page *page, struct page *newpage), + TP_ARGS(page, newpage)); +DECLARE_HOOK(android_vh_page_referenced_one_end, + TP_PROTO(struct vm_area_struct *vma, struct page *page, int referenced), + TP_ARGS(vma, page, referenced)); +DECLARE_HOOK(android_vh_count_pswpin, + TP_PROTO(struct swap_info_struct *sis), + TP_ARGS(sis)); +DECLARE_HOOK(android_vh_count_pswpout, + TP_PROTO(struct swap_info_struct *sis), + TP_ARGS(sis)); +DECLARE_HOOK(android_vh_count_swpout_vm_event, + TP_PROTO(struct swap_info_struct *sis, struct page *page, bool *skip), + TP_ARGS(sis, page, skip)); +DECLARE_HOOK(android_vh_swap_slot_cache_active, + TP_PROTO(bool swap_slot_cache_active), + TP_ARGS(swap_slot_cache_active)); +DECLARE_HOOK(android_vh_drain_slots_cache_cpu, + TP_PROTO(struct swap_slots_cache *cache, unsigned int type, + bool free_slots, bool *skip), + TP_ARGS(cache, type, free_slots, skip)); +DECLARE_HOOK(android_vh_alloc_swap_slot_cache, + TP_PROTO(struct swap_slots_cache *cache, int *ret, bool *skip), + TP_ARGS(cache, ret, skip)); +DECLARE_HOOK(android_vh_free_swap_slot, + TP_PROTO(swp_entry_t entry, struct swap_slots_cache *cache, bool *skip), + TP_ARGS(entry, cache, skip)); +DECLARE_HOOK(android_vh_get_swap_page, + TP_PROTO(struct page *page, swp_entry_t *entry, + struct swap_slots_cache *cache, bool *found), + TP_ARGS(page, entry, cache, found)); +DECLARE_HOOK(android_vh_page_isolated_for_reclaim, + TP_PROTO(struct mm_struct *mm, struct page *page), + TP_ARGS(mm, page)); +DECLARE_HOOK(android_vh_account_swap_pages, + TP_PROTO(struct swap_info_struct *si, bool *skip), + TP_ARGS(si, skip)); +DECLARE_HOOK(android_vh_unuse_swap_page, + TP_PROTO(struct swap_info_struct *si, struct page *page), + TP_ARGS(si, page)); +DECLARE_HOOK(android_vh_init_swap_info_struct, + TP_PROTO(struct swap_info_struct *p, struct plist_head *swap_avail_heads), + TP_ARGS(p, swap_avail_heads)); +DECLARE_HOOK(android_vh_si_swapinfo, + TP_PROTO(struct swap_info_struct *si, bool *skip), + TP_ARGS(si, skip)); +DECLARE_HOOK(android_vh_alloc_si, + TP_PROTO(struct swap_info_struct **p, bool *skip), + TP_ARGS(p, skip)); +DECLARE_HOOK(android_vh_free_pages, + TP_PROTO(struct page *page, unsigned int order), + TP_ARGS(page, order)); /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_MM_H */ diff --git a/include/trace/hooks/mmc_core.h b/include/trace/hooks/mmc_core.h index ad367782d59f..b4b93b2f4c9e 100644 --- a/include/trace/hooks/mmc_core.h +++ b/include/trace/hooks/mmc_core.h @@ -10,9 +10,18 @@ #include #include -struct mmc_host; -struct mmc_card; +#ifdef __GENKSYMS__ struct sdhci_host; +struct mmc_card; +struct mmc_host; +#else +/* struct sdhci_host */ +#include <../drivers/mmc/host/sdhci.h> +/* struct mmc_card */ +#include +/* struct mmc_host */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_mmc_blk_reset, TP_PROTO(struct mmc_host *host, int err, bool *allow), diff --git a/include/trace/hooks/module.h b/include/trace/hooks/module.h index 281cb0d37c12..3c552945e92e 100644 --- a/include/trace/hooks/module.h +++ b/include/trace/hooks/module.h @@ -11,7 +11,12 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct module; +#else +/* struct module */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_set_module_permit_before_init, TP_PROTO(const struct module *mod), TP_ARGS(mod)); diff --git a/include/trace/hooks/net.h b/include/trace/hooks/net.h index acb2fd2c7e07..f5347e393f5f 100644 --- a/include/trace/hooks/net.h +++ b/include/trace/hooks/net.h @@ -9,9 +9,18 @@ #include #include +#ifdef __GENKSYMS__ struct packet_type; -struct list_head; struct sk_buff; +struct list_head; +#else +/* struct packet_type */ +#include +/* struct sk_buff */ +#include +/* struct list_head */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_ptype_head, TP_PROTO(const struct packet_type *pt, struct list_head *vendor_pt), TP_ARGS(pt, vendor_pt)); diff --git a/include/trace/hooks/pm_domain.h b/include/trace/hooks/pm_domain.h index 548e350e8090..7021850865ff 100644 --- a/include/trace/hooks/pm_domain.h +++ b/include/trace/hooks/pm_domain.h @@ -11,7 +11,12 @@ #include #include +#ifdef __GENKSYMS__ struct generic_pm_domain; +#else +/* struct generic_pm_domain */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_allow_domain_state, TP_PROTO(struct generic_pm_domain *genpd, uint32_t idx, bool *allow), TP_ARGS(genpd, idx, allow)) diff --git a/include/trace/hooks/power.h b/include/trace/hooks/power.h index 149ea08580b8..de747ac98472 100644 --- a/include/trace/hooks/power.h +++ b/include/trace/hooks/power.h @@ -11,7 +11,17 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ +enum freq_qos_req_type; +struct freq_constraints; +struct freq_qos_request; struct task_struct; +#else +/* enum freq_qos_req_type, struct freq_constraints, struct freq_qos_request */ +#include +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_try_to_freeze_todo, TP_PROTO(unsigned int todo, unsigned int elapsed_msecs, bool wq_busy), TP_ARGS(todo, elapsed_msecs, wq_busy)); @@ -20,9 +30,6 @@ DECLARE_HOOK(android_vh_try_to_freeze_todo_unfrozen, TP_PROTO(struct task_struct *p), TP_ARGS(p)); -enum freq_qos_req_type; -struct freq_qos_request; -struct freq_constraints; DECLARE_HOOK(android_vh_freq_qos_add_request, TP_PROTO(struct freq_constraints *qos, struct freq_qos_request *req, diff --git a/include/trace/hooks/psi.h b/include/trace/hooks/psi.h index 62d1a0ee7b63..3842118af3c3 100644 --- a/include/trace/hooks/psi.h +++ b/include/trace/hooks/psi.h @@ -12,8 +12,13 @@ #if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) -struct psi_trigger; +#ifdef __GENKSYMS__ struct psi_group; +struct psi_trigger; +#else +/* struct psi_group, struct psi_trigger */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_psi_event, TP_PROTO(struct psi_trigger *t), TP_ARGS(t)); diff --git a/include/trace/hooks/remoteproc.h b/include/trace/hooks/remoteproc.h index c39c2c1bffb3..e596d7c3b37f 100644 --- a/include/trace/hooks/remoteproc.h +++ b/include/trace/hooks/remoteproc.h @@ -10,7 +10,12 @@ #include #include +#ifdef __GENKSYMS__ struct rproc; +#else +/* struct rproc */ +#include +#endif /* __GENKSYMS__ */ /* When recovery succeeds */ DECLARE_HOOK(android_vh_rproc_recovery, diff --git a/include/trace/hooks/rwsem.h b/include/trace/hooks/rwsem.h index c8e445216910..ed9daf91f133 100644 --- a/include/trace/hooks/rwsem.h +++ b/include/trace/hooks/rwsem.h @@ -10,8 +10,13 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct rw_semaphore; struct rwsem_waiter; +#else +/* struct rw_semaphore, struct rwsem_waiter */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_rwsem_init, TP_PROTO(struct rw_semaphore *sem), TP_ARGS(sem)); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 55fc6c3a1a89..9f16fffd89e4 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -10,7 +10,25 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +struct cgroup_taskset; +#ifdef __GENKSYMS__ +struct cgroup_subsys_state; +struct cpufreq_policy; +struct em_perf_domain; +enum uclamp_id; +struct sched_entity; struct task_struct; +struct uclamp_se; +#else +/* struct cgroup_subsys_state */ +#include +/* struct cpufreq_policy */ +#include +/* struct em_perf_domain */ +#include +/* enum uclamp_id, struct sched_entity, struct task_struct, struct uclamp_se */ +#include +#endif /* __GENKSYMS__ */ DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair, TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu), TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1); @@ -178,7 +196,6 @@ DECLARE_RESTRICTED_HOOK(android_rvh_account_irq, TP_PROTO(struct task_struct *curr, int cpu, s64 delta), TP_ARGS(curr, cpu, delta), 1); -struct sched_entity; DECLARE_RESTRICTED_HOOK(android_rvh_place_entity, TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial, u64 vruntime), TP_ARGS(cfs_rq, se, initial, vruntime), 1); @@ -195,7 +212,6 @@ DECLARE_RESTRICTED_HOOK(android_rvh_update_misfit_status, TP_PROTO(struct task_struct *p, struct rq *rq, bool *need_update), TP_ARGS(p, rq, need_update), 1); -struct cgroup_taskset; DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_attach, TP_PROTO(struct cgroup_taskset *tset), TP_ARGS(tset), 1); @@ -204,7 +220,6 @@ DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_can_attach, TP_PROTO(struct cgroup_taskset *tset, int *retval), TP_ARGS(tset, retval), 1); -struct cgroup_subsys_state; DECLARE_RESTRICTED_HOOK(android_rvh_cpu_cgroup_online, TP_PROTO(struct cgroup_subsys_state *css), TP_ARGS(css), 1); @@ -225,14 +240,12 @@ DECLARE_RESTRICTED_HOOK(android_rvh_sched_exec, TP_PROTO(bool *cond), TP_ARGS(cond), 1); -struct cpufreq_policy; DECLARE_HOOK(android_vh_map_util_freq, TP_PROTO(unsigned long util, unsigned long freq, unsigned long cap, unsigned long *next_freq, struct cpufreq_policy *policy, bool *need_freq_update), TP_ARGS(util, freq, cap, next_freq, policy, need_freq_update)); -struct em_perf_domain; DECLARE_HOOK(android_vh_em_cpu_energy, TP_PROTO(struct em_perf_domain *pd, unsigned long max_util, unsigned long sum_util, @@ -268,7 +281,7 @@ DECLARE_HOOK(android_vh_set_wake_flags, TP_PROTO(int *wake_flags, unsigned int *mode), TP_ARGS(wake_flags, mode)); -enum uclamp_id; +/* Conditionally defined upon CONFIG_UCLAMP_TASK */ struct uclamp_se; DECLARE_RESTRICTED_HOOK(android_rvh_uclamp_eff_get, TP_PROTO(struct task_struct *p, enum uclamp_id clamp_id, @@ -329,7 +342,6 @@ DECLARE_RESTRICTED_HOOK(android_rvh_after_dequeue_task, TP_ARGS(rq, p), 1); struct cfs_rq; -struct sched_entity; struct rq_flags; DECLARE_RESTRICTED_HOOK(android_rvh_enqueue_entity, TP_PROTO(struct cfs_rq *cfs, struct sched_entity *se), diff --git a/include/trace/hooks/shmem_fs.h b/include/trace/hooks/shmem_fs.h index 08e63033070e..617bc69f3d06 100644 --- a/include/trace/hooks/shmem_fs.h +++ b/include/trace/hooks/shmem_fs.h @@ -8,7 +8,12 @@ #include #include +#ifdef __GENKSYMS__ struct page; +#else +/* struct page */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_shmem_alloc_page, TP_PROTO(struct page **page), TP_ARGS(page)); diff --git a/include/trace/hooks/signal.h b/include/trace/hooks/signal.h index ee36ea1de283..1bb556e728c8 100644 --- a/include/trace/hooks/signal.h +++ b/include/trace/hooks/signal.h @@ -8,7 +8,12 @@ #include #include +#ifdef __GENKSYMS__ struct task_struct; +#else +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_do_send_sig_info, TP_PROTO(int sig, struct task_struct *killer, struct task_struct *dst), TP_ARGS(sig, killer, dst)); diff --git a/include/trace/hooks/softlockup.h b/include/trace/hooks/softlockup.h index 9294913f91df..cfa899f5de11 100644 --- a/include/trace/hooks/softlockup.h +++ b/include/trace/hooks/softlockup.h @@ -11,7 +11,12 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct pt_regs; +#else +/* struct pt_regs */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_watchdog_timer_softlockup, TP_PROTO(int duration, struct pt_regs *regs, bool is_panic), TP_ARGS(duration, regs, is_panic)); diff --git a/include/trace/hooks/sys.h b/include/trace/hooks/sys.h index 9e5d7a5cb2cf..adcf9eaa7716 100644 --- a/include/trace/hooks/sys.h +++ b/include/trace/hooks/sys.h @@ -8,7 +8,12 @@ #include #include +#ifdef __GENKSYMS__ struct task_struct; +#else +/* struct task_struct */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_syscall_prctl_finished, TP_PROTO(int option, struct task_struct *task), TP_ARGS(option, task)); diff --git a/include/trace/hooks/syscall_check.h b/include/trace/hooks/syscall_check.h index d39802aa4a1e..54720d10cde8 100644 --- a/include/trace/hooks/syscall_check.h +++ b/include/trace/hooks/syscall_check.h @@ -11,8 +11,15 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct file; union bpf_attr; +#else +/* struct file */ +#include +/* union bpf_attr */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_check_mmap_file, TP_PROTO(const struct file *file, unsigned long prot, unsigned long flag, unsigned long ret), diff --git a/include/trace/hooks/thermal.h b/include/trace/hooks/thermal.h index 944454ca0e48..5e61ecd38425 100644 --- a/include/trace/hooks/thermal.h +++ b/include/trace/hooks/thermal.h @@ -10,11 +10,16 @@ #include #include +#ifdef __GENKSYMS__ +struct thermal_zone_device; +#else +/* struct thermal_zone_device */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_enable_thermal_genl_check, TP_PROTO(int event, int tz_id, int *enable_thermal_genl), TP_ARGS(event, tz_id, enable_thermal_genl)); -struct thermal_zone_device; DECLARE_HOOK(android_vh_thermal_pm_notify_suspend, TP_PROTO(struct thermal_zone_device *tz, int *irq_wakeable), TP_ARGS(tz, irq_wakeable)); diff --git a/include/trace/hooks/traps.h b/include/trace/hooks/traps.h index d1ceb632c1d5..116c49b73dc7 100644 --- a/include/trace/hooks/traps.h +++ b/include/trace/hooks/traps.h @@ -11,7 +11,12 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct pt_regs; +#else +/* struct pt_regs */ +#include +#endif /* __GENKSYMS__ */ DECLARE_RESTRICTED_HOOK(android_rvh_do_undefinstr, TP_PROTO(struct pt_regs *regs, bool user), TP_ARGS(regs, user), diff --git a/include/trace/hooks/typec.h b/include/trace/hooks/typec.h index f87151124075..db06fb8c30e9 100644 --- a/include/trace/hooks/typec.h +++ b/include/trace/hooks/typec.h @@ -11,8 +11,13 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ -struct tcpci; +#ifdef __GENKSYMS__ struct tcpci_data; +#else +/* struct tcpci_data */ +#include <../drivers/usb/typec/tcpm/tcpci.h> +#endif /* __GENKSYMS__ */ +struct tcpci; struct tcpm_port; #ifndef TYPEC_TIMER diff --git a/include/trace/hooks/ufshcd.h b/include/trace/hooks/ufshcd.h index 744a1db41631..8483dc966c6c 100644 --- a/include/trace/hooks/ufshcd.h +++ b/include/trace/hooks/ufshcd.h @@ -10,9 +10,20 @@ * Following tracepoints are not exported in tracefs and provide a * mechanism for vendor modules to hook and extend functionality */ +#ifdef __GENKSYMS__ struct ufs_hba; -struct request; struct ufshcd_lrb; +struct uic_command; +struct request; +struct scsi_device; +#else +/* struct ufs_hba, struct ufshcd_lrb, struct uic_command */ +#include <../drivers/scsi/ufs/ufshcd.h> +/* struct request */ +#include +/* struct scsi_device */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_ufs_fill_prdt, TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp, @@ -44,7 +55,6 @@ DECLARE_HOOK(android_vh_ufs_compl_command, TP_PROTO(struct ufs_hba *hba, struct ufshcd_lrb *lrbp), TP_ARGS(hba, lrbp)); -struct uic_command; DECLARE_HOOK(android_vh_ufs_send_uic_command, TP_PROTO(struct ufs_hba *hba, struct uic_command *ucmd, const char *str), @@ -58,7 +68,6 @@ DECLARE_HOOK(android_vh_ufs_check_int_errors, TP_PROTO(struct ufs_hba *hba, bool queue_eh_work), TP_ARGS(hba, queue_eh_work)); -struct scsi_device; DECLARE_HOOK(android_vh_ufs_update_sdev, TP_PROTO(struct scsi_device *sdev), TP_ARGS(sdev)); diff --git a/include/trace/hooks/v4l2core.h b/include/trace/hooks/v4l2core.h index 7207810a7e37..bb53021a7796 100644 --- a/include/trace/hooks/v4l2core.h +++ b/include/trace/hooks/v4l2core.h @@ -10,12 +10,26 @@ #include #include +#ifdef __GENKSYMS__ +struct v4l2_subdev; +struct v4l2_subdev_pad_config; +struct v4l2_subdev_format; +struct v4l2_subdev_frame_interval; +struct v4l2_subdev_selection; +struct v4l2_fmtdesc; struct v4l2_format; +#else +/* struct v4l2_subdev, struct v4l2_subdev_pad_config */ +#include +/* struct v4l2_subdev_format, struct v4l2_subdev_frame_interval, struct v4l2_subdev_selection */ +#include +/* struct v4l2_fmtdesc, struct v4l2_format */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_clear_reserved_fmt_fields, TP_PROTO(struct v4l2_format *fmt, int *ret), TP_ARGS(fmt, ret)); -struct v4l2_fmtdesc; DECLARE_HOOK(android_vh_fill_ext_fmtdesc, TP_PROTO(struct v4l2_fmtdesc *fmtd, const char **descr), TP_ARGS(fmtd, descr)); @@ -24,21 +38,16 @@ DECLARE_HOOK(android_vh_clear_mask_adjust, TP_PROTO(unsigned int ctrl, int *n), TP_ARGS(ctrl, n)); -struct v4l2_subdev; -struct v4l2_subdev_pad_config; -struct v4l2_subdev_selection; DECLARE_HOOK(android_vh_v4l2subdev_set_selection, TP_PROTO(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *pad, struct v4l2_subdev_selection *sel, int *ret), TP_ARGS(sd, pad, sel, ret)); -struct v4l2_subdev_format; DECLARE_HOOK(android_vh_v4l2subdev_set_fmt, TP_PROTO(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *pad, struct v4l2_subdev_format *format, int *ret), TP_ARGS(sd, pad, format, ret)); -struct v4l2_subdev_frame_interval; DECLARE_HOOK(android_vh_v4l2subdev_set_frame_interval, TP_PROTO(struct v4l2_subdev *sd, struct v4l2_subdev_frame_interval *fi, int *ret), diff --git a/include/trace/hooks/v4l2mc.h b/include/trace/hooks/v4l2mc.h index 0f60515bb8e2..1f4edc658616 100644 --- a/include/trace/hooks/v4l2mc.h +++ b/include/trace/hooks/v4l2mc.h @@ -10,8 +10,15 @@ #include #include +#ifdef __GENKSYMS__ struct media_link; struct media_link_desc; +#else +/* struct media_link */ +#include +/* struct media_link_desc */ +#include +#endif /* __GENKSYMS__ */ DECLARE_HOOK(android_vh_media_device_setup_link, TP_PROTO(struct media_link *link, struct media_link_desc *linkd, int *ret), TP_ARGS(link, linkd, ret)); diff --git a/include/trace/hooks/vmscan.h b/include/trace/hooks/vmscan.h index 7b4d222301af..4f1d6ab9f498 100644 --- a/include/trace/hooks/vmscan.h +++ b/include/trace/hooks/vmscan.h @@ -34,6 +34,13 @@ DECLARE_HOOK(android_vh_shrink_node_memcgs, DECLARE_HOOK(android_vh_tune_memcg_scan_type, TP_PROTO(struct mem_cgroup *memcg, char *scan_type), TP_ARGS(memcg, scan_type)); +DECLARE_HOOK(android_vh_inactive_is_low, + TP_PROTO(unsigned long gb, unsigned long *inactive_ratio, + enum lru_list inactive_lru, bool *skip), + TP_ARGS(gb, inactive_ratio, inactive_lru, skip)); +DECLARE_HOOK(android_vh_snapshot_refaults, + TP_PROTO(struct lruvec *target_lruvec), + TP_ARGS(target_lruvec)); #endif /* _TRACE_HOOK_VMSCAN_H */ /* This part must be outside protection */ #include diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c index f8ae54679865..6bca5077ee71 100644 --- a/kernel/dma/debug.c +++ b/kernel/dma/debug.c @@ -1147,10 +1147,11 @@ static void check_sync(struct device *dev, dir2name[entry->direction], dir2name[ref->direction]); + /* sg list count can be less than map count when partial cache sync */ if (ref->sg_call_ents && ref->type == dma_debug_sg && - ref->sg_call_ents != entry->sg_call_ents) { + ref->sg_call_ents > entry->sg_call_ents) { err_printk(ref->dev, entry, "device driver syncs " - "DMA sg list with different entry count " + "DMA sg list count larger than map count " "[map count=%d] [sync count=%d]\n", entry->sg_call_ents, ref->sg_call_ents); } diff --git a/mm/madvise.c b/mm/madvise.c index e54da6abda9f..db54a747d6f3 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -462,8 +463,10 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, if (!isolate_lru_page(page)) { if (PageUnevictable(page)) putback_lru_page(page); - else + else { list_add(&page->lru, &page_list); + trace_android_vh_page_isolated_for_reclaim(mm, page); + } } } else deactivate_page(page); diff --git a/mm/memory.c b/mm/memory.c index 5243236f018b..7d70acf494d4 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -86,6 +86,7 @@ #include "pgalloc-track.h" #include "internal.h" +#include #define CREATE_TRACE_POINTS #include @@ -3141,6 +3142,7 @@ static vm_fault_t wp_page_copy(struct vm_fault *vmf) put_page(old_page); return 0; } + trace_android_vh_cow_user_page(vmf, new_page); } if (mem_cgroup_charge(new_page, mm, GFP_KERNEL)) @@ -3782,6 +3784,7 @@ vm_fault_t do_swap_page(struct vm_fault *vmf) do_page_add_anon_rmap(page, vma, vmf->address, exclusive); } + trace_android_vh_swapin_add_anon_rmap(vmf, page); swap_free(entry); if (mem_cgroup_swap_full(page) || (vmf->vma_flags & VM_LOCKED) || PageMlocked(page)) @@ -4760,6 +4763,7 @@ static vm_fault_t handle_pte_fault(struct vm_fault *vmf) if (vmf->flags & FAULT_FLAG_WRITE) flush_tlb_fix_spurious_fault(vmf->vma, vmf->address); } + trace_android_vh_handle_pte_fault_end(vmf, highest_memmap_pfn); unlock: pte_unmap_unlock(vmf->pte, vmf->ptl); return ret; diff --git a/mm/migrate.c b/mm/migrate.c index 26f8595de076..6d09285f3c1a 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -54,6 +54,8 @@ #define CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#include #include "internal.h" @@ -311,6 +313,7 @@ void __migration_entry_wait(struct mm_struct *mm, pte_t *ptep, if (!get_page_unless_zero(page)) goto out; pte_unmap_unlock(ptep, ptl); + trace_android_vh_waiting_for_page_migration(page); put_and_wait_on_page_locked(page); return; out: @@ -584,6 +587,8 @@ void migrate_page_states(struct page *newpage, struct page *page) { int cpupid; + trace_android_vh_migrate_page_states(page, newpage); + if (PageError(page)) SetPageError(newpage); if (PageReferenced(page)) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 9209be35258a..27b18887bf5f 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -5180,6 +5180,7 @@ static inline void free_the_page(struct page *page, unsigned int order) void __free_pages(struct page *page, unsigned int order) { + trace_android_vh_free_pages(page, order); if (put_page_testzero(page)) free_the_page(page, order); else if (!PageHead(page)) diff --git a/mm/page_io.c b/mm/page_io.c index d5efe9558b8a..04b3a7ebfe9e 100644 --- a/mm/page_io.c +++ b/mm/page_io.c @@ -25,6 +25,7 @@ #include #include #include +#include static struct bio *get_swap_bio(gfp_t gfp_flags, struct page *page, bio_end_io_t end_io) @@ -256,6 +257,7 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, struct bio *bio; int ret; struct swap_info_struct *sis = page_swap_info(page); + bool skip = false; VM_BUG_ON_PAGE(!PageSwapCache(page), page); if (data_race(sis->flags & SWP_FS_OPS)) { @@ -277,6 +279,7 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, unlock_page(page); ret = mapping->a_ops->direct_IO(&kiocb, &from); if (ret == PAGE_SIZE) { + trace_android_vh_count_pswpout(sis); count_vm_event(PSWPOUT); ret = 0; } else { @@ -301,7 +304,9 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, ret = bdev_write_page(sis->bdev, swap_page_sector(page), page, wbc); if (!ret) { - count_swpout_vm_event(page); + trace_android_vh_count_swpout_vm_event(sis, page, &skip); + if (!skip) + count_swpout_vm_event(page); return 0; } @@ -313,7 +318,9 @@ int __swap_writepage(struct page *page, struct writeback_control *wbc, } bio->bi_opf = REQ_OP_WRITE | REQ_SWAP | wbc_to_write_flags(wbc); bio_associate_blkg_from_page(bio, page); - count_swpout_vm_event(page); + trace_android_vh_count_swpout_vm_event(sis, page, &skip); + if (!skip) + count_swpout_vm_event(page); set_page_writeback(page); unlock_page(page); submit_bio(bio); @@ -352,14 +359,17 @@ int swap_readpage(struct page *page, bool synchronous) struct address_space *mapping = swap_file->f_mapping; ret = mapping->a_ops->readpage(swap_file, page); - if (!ret) + if (!ret) { + trace_android_vh_count_pswpin(sis); count_vm_event(PSWPIN); + } goto out; } if (sis->flags & SWP_SYNCHRONOUS_IO) { ret = bdev_read_page(sis->bdev, swap_page_sector(page), page); if (!ret) { + trace_android_vh_count_pswpin(sis); count_vm_event(PSWPIN); goto out; } @@ -383,6 +393,7 @@ int swap_readpage(struct page *page, bool synchronous) get_task_struct(current); bio->bi_private = current; } + trace_android_vh_count_pswpin(sis); count_vm_event(PSWPIN); bio_get(bio); qc = submit_bio(bio); diff --git a/mm/rmap.c b/mm/rmap.c index 22464daf02d6..1a0a75d8b4ce 100644 --- a/mm/rmap.c +++ b/mm/rmap.c @@ -819,6 +819,7 @@ static bool page_referenced_one(struct page *page, struct vm_area_struct *vma, pra->vm_flags |= vma->vm_flags; } + trace_android_vh_page_referenced_one_end(vma, page, referenced); if (!pra->mapcount) return false; /* To break the loop */ diff --git a/mm/swap_slots.c b/mm/swap_slots.c index 0357fbe70645..1392649a4d9a 100644 --- a/mm/swap_slots.c +++ b/mm/swap_slots.c @@ -33,6 +33,7 @@ #include #include #include +#include static DEFINE_PER_CPU(struct swap_slots_cache, swp_slots); static bool swap_slot_cache_active; @@ -54,6 +55,7 @@ static void deactivate_swap_slots_cache(void) { mutex_lock(&swap_slots_cache_mutex); swap_slot_cache_active = false; + trace_android_vh_swap_slot_cache_active(false); __drain_swap_slots_cache(SLOTS_CACHE|SLOTS_CACHE_RET); mutex_unlock(&swap_slots_cache_mutex); } @@ -62,6 +64,7 @@ static void reactivate_swap_slots_cache(void) { mutex_lock(&swap_slots_cache_mutex); swap_slot_cache_active = true; + trace_android_vh_swap_slot_cache_active(true); mutex_unlock(&swap_slots_cache_mutex); } @@ -89,7 +92,13 @@ void reenable_swap_slots_cache_unlock(void) mutex_unlock(&swap_slots_cache_enable_mutex); } -static bool check_cache_active(void) +bool is_swap_slot_cache_enabled(void) +{ + return swap_slot_cache_enabled; +} +EXPORT_SYMBOL_GPL(is_swap_slot_cache_enabled); + +bool check_cache_active(void) { long pages; @@ -110,17 +119,24 @@ static bool check_cache_active(void) out: return swap_slot_cache_active; } +EXPORT_SYMBOL_GPL(check_cache_active); static int alloc_swap_slot_cache(unsigned int cpu) { struct swap_slots_cache *cache; swp_entry_t *slots, *slots_ret; + bool skip = false; + int ret = 0; /* * Do allocation outside swap_slots_cache_mutex * as kvzalloc could trigger reclaim and get_swap_page, * which can lock swap_slots_cache_mutex. */ + trace_android_vh_alloc_swap_slot_cache(&per_cpu(swp_slots, cpu), + &ret, &skip); + if (skip) + return ret; slots = kvcalloc(SWAP_SLOTS_CACHE_SIZE, sizeof(swp_entry_t), GFP_KERNEL); if (!slots) @@ -171,8 +187,13 @@ static void drain_slots_cache_cpu(unsigned int cpu, unsigned int type, { struct swap_slots_cache *cache; swp_entry_t *slots = NULL; + bool skip = false; cache = &per_cpu(swp_slots, cpu); + trace_android_vh_drain_slots_cache_cpu(cache, type, + free_slots, &skip); + if (skip) + return; if ((type & SLOTS_CACHE) && cache->slots) { mutex_lock(&cache->alloc_lock); swapcache_free_entries(cache->slots + cache->cur, cache->nr); @@ -274,8 +295,12 @@ static int refill_swap_slots_cache(struct swap_slots_cache *cache) int free_swap_slot(swp_entry_t entry) { struct swap_slots_cache *cache; + bool skip = false; cache = raw_cpu_ptr(&swp_slots); + trace_android_vh_free_swap_slot(entry, cache, &skip); + if (skip) + return 0; if (likely(use_swap_slot_cache && cache->slots_ret)) { spin_lock_irq(&cache->free_lock); /* Swap slots cache may be deactivated before acquiring lock */ @@ -307,9 +332,13 @@ swp_entry_t get_swap_page(struct page *page) { swp_entry_t entry; struct swap_slots_cache *cache; - + bool found = false; entry.val = 0; + trace_android_vh_get_swap_page(page, &entry, raw_cpu_ptr(&swp_slots), &found); + if (found) + goto out; + if (PageTransHuge(page)) { if (IS_ENABLED(CONFIG_THP_SWAP)) get_swap_pages(1, &entry, HPAGE_PMD_NR); diff --git a/mm/swapfile.c b/mm/swapfile.c index 646145953eeb..677f235806c2 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -43,6 +43,7 @@ #include #include #include +#include static bool swap_count_continued(struct swap_info_struct *, pgoff_t, unsigned char); @@ -98,7 +99,7 @@ static atomic_t proc_poll_event = ATOMIC_INIT(0); atomic_t nr_rotate_swap = ATOMIC_INIT(0); -static struct swap_info_struct *swap_type_to_swap_info(int type) +struct swap_info_struct *swap_type_to_swap_info(int type) { if (type >= READ_ONCE(nr_swapfiles)) return NULL; @@ -106,6 +107,7 @@ static struct swap_info_struct *swap_type_to_swap_info(int type) smp_rmb(); /* Pairs with smp_wmb in alloc_swap_info. */ return READ_ONCE(swap_info[type]); } +EXPORT_SYMBOL_GPL(swap_type_to_swap_info); static inline unsigned char swap_count(unsigned char ent) { @@ -712,6 +714,7 @@ static void swap_range_free(struct swap_info_struct *si, unsigned long offset, unsigned long begin = offset; unsigned long end = offset + nr_entries - 1; void (*swap_slot_free_notify)(struct block_device *, unsigned long); + bool skip = false; if (offset < si->lowest_bit) si->lowest_bit = offset; @@ -722,7 +725,9 @@ static void swap_range_free(struct swap_info_struct *si, unsigned long offset, if (was_full && (si->flags & SWP_WRITEOK)) add_to_avail_list(si); } - atomic_long_add(nr_entries, &nr_swap_pages); + trace_android_vh_account_swap_pages(si, &skip); + if (!skip) + atomic_long_add(nr_entries, &nr_swap_pages); si->inuse_pages -= nr_entries; if (si->flags & SWP_BLKDEV) swap_slot_free_notify = @@ -767,7 +772,7 @@ static void set_cluster_next(struct swap_info_struct *si, unsigned long next) this_cpu_write(*si->cluster_next_cpu, next); } -static int scan_swap_map_slots(struct swap_info_struct *si, +int scan_swap_map_slots(struct swap_info_struct *si, unsigned char usage, int nr, swp_entry_t slots[]) { @@ -983,8 +988,9 @@ static int scan_swap_map_slots(struct swap_info_struct *si, si->flags -= SWP_SCANNING; return n_ret; } +EXPORT_SYMBOL_GPL(scan_swap_map_slots); -static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) +int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) { unsigned long idx; struct swap_cluster_info *ci; @@ -1018,6 +1024,7 @@ static int swap_alloc_cluster(struct swap_info_struct *si, swp_entry_t *slot) return 1; } +EXPORT_SYMBOL_GPL(swap_alloc_cluster); static void swap_free_cluster(struct swap_info_struct *si, unsigned long idx) { @@ -1137,6 +1144,7 @@ swp_entry_t get_swap_page_of_type(int type) { struct swap_info_struct *si = swap_type_to_swap_info(type); pgoff_t offset; + bool skip = false; if (!si) goto fail; @@ -1146,7 +1154,9 @@ swp_entry_t get_swap_page_of_type(int type) /* This is called for allocating swap entry, not cache */ offset = scan_swap_map(si, 1); if (offset) { - atomic_long_dec(&nr_swap_pages); + trace_android_vh_account_swap_pages(si, &skip); + if (!skip) + atomic_long_dec(&nr_swap_pages); spin_unlock(&si->lock); return swp_entry(type, offset); } @@ -1478,6 +1488,7 @@ void swapcache_free_entries(swp_entry_t *entries, int n) if (p) spin_unlock(&p->lock); } +EXPORT_SYMBOL_GPL(swapcache_free_entries); /* * How many references to page are currently swapped out? @@ -2007,6 +2018,7 @@ static int unuse_pte_range(struct vm_area_struct *vma, pmd_t *pmd, } try_to_free_swap(page); + trace_android_vh_unuse_swap_page(si, page); unlock_page(page); put_page(page); @@ -2245,6 +2257,7 @@ int try_to_unuse(unsigned int type, bool frontswap, lock_page(page); wait_on_page_writeback(page); try_to_free_swap(page); + trace_android_vh_unuse_swap_page(si, page); unlock_page(page); put_page(page); @@ -2499,10 +2512,14 @@ static void setup_swap_info(struct swap_info_struct *p, int prio, static void _enable_swap_info(struct swap_info_struct *p) { - p->flags |= SWP_WRITEOK | SWP_VALID; - atomic_long_add(p->pages, &nr_swap_pages); - total_swap_pages += p->pages; + bool skip = false; + p->flags |= SWP_WRITEOK | SWP_VALID; + trace_android_vh_account_swap_pages(p, &skip); + if (!skip) { + atomic_long_add(p->pages, &nr_swap_pages); + total_swap_pages += p->pages; + } assert_spin_locked(&swap_lock); /* * both lists are plists, and thus priority ordered. @@ -2574,6 +2591,7 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) struct filename *pathname; int err, found = 0; unsigned int old_block_size; + bool skip = false; if (!capable(CAP_SYS_ADMIN)) return -EPERM; @@ -2628,8 +2646,11 @@ SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) least_priority++; } plist_del(&p->list, &swap_active_head); - atomic_long_sub(p->pages, &nr_swap_pages); - total_swap_pages -= p->pages; + trace_android_vh_account_swap_pages(p, &skip); + if (!skip) { + atomic_long_sub(p->pages, &nr_swap_pages); + total_swap_pages -= p->pages; + } p->flags &= ~SWP_WRITEOK; spin_unlock(&p->lock); spin_unlock(&swap_lock); @@ -2881,12 +2902,15 @@ late_initcall(max_swapfiles_check); static struct swap_info_struct *alloc_swap_info(void) { - struct swap_info_struct *p; + struct swap_info_struct *p = NULL; struct swap_info_struct *defer = NULL; unsigned int type; int i; + bool skip = false; - p = kvzalloc(struct_size(p, avail_lists, nr_node_ids), GFP_KERNEL); + trace_android_vh_alloc_si(&p, &skip); + if (!skip) + p = kvzalloc(struct_size(p, avail_lists, nr_node_ids), GFP_KERNEL); if (!p) return ERR_PTR(-ENOMEM); @@ -3369,6 +3393,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) (swap_flags & SWAP_FLAG_PRIO_MASK) >> SWAP_FLAG_PRIO_SHIFT; enable_swap_info(p, prio, swap_map, cluster_info, frontswap_map); + trace_android_vh_init_swap_info_struct(p, swap_avail_heads); pr_info("Adding %uk swap on %s. Priority:%d extents:%d across:%lluk %s%s%s%s%s\n", p->pages<<(PAGE_SHIFT-10), name->name, p->prio, nr_extents, (unsigned long long)span<<(PAGE_SHIFT-10), @@ -3433,8 +3458,10 @@ void si_swapinfo(struct sysinfo *val) spin_lock(&swap_lock); for (type = 0; type < nr_swapfiles; type++) { struct swap_info_struct *si = swap_info[type]; + bool skip = false; - if ((si->flags & SWP_USED) && !(si->flags & SWP_WRITEOK)) + trace_android_vh_si_swapinfo(si, &skip); + if (!skip && (si->flags & SWP_USED) && !(si->flags & SWP_WRITEOK)) nr_to_be_unused += si->inuse_pages; } val->freeswap = atomic_long_read(&nr_swap_pages) + nr_to_be_unused; diff --git a/mm/vmscan.c b/mm/vmscan.c index 0c47c99b4cdb..24b0c38c2c5c 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -2270,11 +2270,16 @@ static bool inactive_is_low(struct lruvec *lruvec, enum lru_list inactive_lru) unsigned long inactive, active; unsigned long inactive_ratio; unsigned long gb; + bool skip = false; inactive = lruvec_page_state(lruvec, NR_LRU_BASE + inactive_lru); active = lruvec_page_state(lruvec, NR_LRU_BASE + active_lru); gb = (inactive + active) >> (30 - PAGE_SHIFT); + trace_android_vh_inactive_is_low(gb, &inactive_ratio, inactive_lru, &skip); + if (skip) + goto out; + if (gb) inactive_ratio = int_sqrt(10 * gb); else @@ -2282,6 +2287,7 @@ static bool inactive_is_low(struct lruvec *lruvec, enum lru_list inactive_lru) trace_android_vh_tune_inactive_ratio(&inactive_ratio, is_file_lru(inactive_lru)); +out: return inactive * inactive_ratio < active; } @@ -3079,6 +3085,7 @@ static void snapshot_refaults(struct mem_cgroup *target_memcg, pg_data_t *pgdat) target_lruvec->refaults[0] = refaults; refaults = lruvec_page_state(target_lruvec, WORKINGSET_ACTIVATE_FILE); target_lruvec->refaults[1] = refaults; + trace_android_vh_snapshot_refaults(target_lruvec); } /*