diff --git a/BUILD.bazel b/BUILD.bazel index 6f4d747cdc94..1c1dc8627744 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -198,6 +198,34 @@ copy_to_dist_dir( log = "info", ) +kernel_build( + name = "kernel_aarch64_microdroid_16k", + srcs = ["//common:kernel_aarch64_sources"], + outs = [ + "Image", + "System.map", + "modules.builtin", + "modules.builtin.modinfo", + "vmlinux", + "vmlinux.symvers", + ], + build_config = "build.config.microdroid.aarch64", + make_goals = [ + "Image", + ], + page_size = "16k", +) + +copy_to_dist_dir( + name = "kernel_aarch64_microdroid_16k_dist", + data = [ + ":kernel_aarch64_microdroid_16k", + ], + dist_dir = "out/kernel_aarch64_microdroid_16k/dist", + flat = True, + log = "info", +) + # Microdroid is not a real device. The kernel image is built with special # configs to reduce the size. Hence, not using mixed build. kernel_build( diff --git a/android/abi_gki_aarch64.stg b/android/abi_gki_aarch64.stg index 9bca0b8dbf27..3d98b0fbbf01 100644 --- a/android/abi_gki_aarch64.stg +++ b/android/abi_gki_aarch64.stg @@ -317323,6 +317323,12 @@ function { parameter_id: 0x064d6086 parameter_id: 0x064d6086 } +function { + id: 0x9b32d0a3 + return_type_id: 0x6720d32f + parameter_id: 0x18bd6530 + parameter_id: 0x275ab027 +} function { id: 0x9b32f2ad return_type_id: 0x6720d32f @@ -337695,6 +337701,15 @@ elf_symbol { type_id: 0x9b3343fb full_name: "__traceiter_android_vh_ra_tuning_max_page" } +elf_symbol { + id: 0xb35da0ec + name: "__traceiter_android_vh_read_pages" + is_defined: true + symbol_type: FUNCTION + crc: 0x4cb21384 + type_id: 0x9b32d0a3 + full_name: "__traceiter_android_vh_read_pages" +} elf_symbol { id: 0x7d069e91 name: "__traceiter_android_vh_record_mutex_lock_starttime" @@ -341700,6 +341715,15 @@ elf_symbol { type_id: 0x18ccbd2c full_name: "__tracepoint_android_vh_ra_tuning_max_page" } +elf_symbol { + id: 0x9fc2933e + name: "__tracepoint_android_vh_read_pages" + is_defined: true + symbol_type: OBJECT + crc: 0xb3878023 + type_id: 0x18ccbd2c + full_name: "__tracepoint_android_vh_read_pages" +} elf_symbol { id: 0x761f292f name: "__tracepoint_android_vh_record_mutex_lock_starttime" @@ -354354,6 +354378,24 @@ elf_symbol { type_id: 0x1023f4f6 full_name: "dma_contiguous_default_area" } +elf_symbol { + id: 0x279bd3a7 + name: "dma_direct_alloc" + is_defined: true + symbol_type: FUNCTION + crc: 0xb02b3af0 + type_id: 0x55df36a2 + full_name: "dma_direct_alloc" +} +elf_symbol { + id: 0x0e847130 + name: "dma_direct_free" + is_defined: true + symbol_type: FUNCTION + crc: 0x051debf6 + type_id: 0x13db1955 + full_name: "dma_direct_free" +} elf_symbol { id: 0xd13969dd name: "dma_fence_add_callback" @@ -372912,6 +372954,15 @@ elf_symbol { type_id: 0xfcd23386 full_name: "ns_capable" } +elf_symbol { + id: 0x27a870d1 + name: "ns_capable_noaudit" + is_defined: true + symbol_type: FUNCTION + crc: 0x3c75b0e0 + type_id: 0xfcd23386 + full_name: "ns_capable_noaudit" +} elf_symbol { id: 0xf68f8b33 name: "ns_to_kernel_old_timeval" @@ -399468,6 +399519,7 @@ interface { symbol_id: 0xf2c39651 symbol_id: 0x93303c51 symbol_id: 0x3a545b61 + symbol_id: 0xb35da0ec symbol_id: 0x7d069e91 symbol_id: 0x0fa39b81 symbol_id: 0x1a91ec8c @@ -399913,6 +399965,7 @@ interface { symbol_id: 0x0e92ee53 symbol_id: 0xb0c197a3 symbol_id: 0x811d5fab + symbol_id: 0x9fc2933e symbol_id: 0x761f292f symbol_id: 0xef7ad117 symbol_id: 0x158c4cfa @@ -401318,6 +401371,8 @@ interface { symbol_id: 0x710f1fc2 symbol_id: 0xaa54a71f symbol_id: 0x5f554bc7 + symbol_id: 0x279bd3a7 + symbol_id: 0x0e847130 symbol_id: 0xd13969dd symbol_id: 0xe2ee283f symbol_id: 0xf5808a3e @@ -403380,6 +403435,7 @@ interface { symbol_id: 0xea37502b symbol_id: 0x0bb7f730 symbol_id: 0xb65e3baf + symbol_id: 0x27a870d1 symbol_id: 0xf68f8b33 symbol_id: 0xfab02ca8 symbol_id: 0xd7668767 diff --git a/android/abi_gki_aarch64_pixel b/android/abi_gki_aarch64_pixel index d0f6d7be74ff..fac865d11e03 100644 --- a/android/abi_gki_aarch64_pixel +++ b/android/abi_gki_aarch64_pixel @@ -3,8 +3,11 @@ add_cpu add_timer add_timer_on + add_uevent_var add_wait_queue adjust_managed_page_count + aes_encrypt + aes_expandkey alarm_cancel alarm_init alarm_start_relative @@ -19,6 +22,7 @@ __alloc_percpu __alloc_percpu_gfp __alloc_skb + alloc_skb_with_frags alloc_workqueue alt_cb_patch_nops amba_bustype @@ -243,6 +247,7 @@ cpufreq_get_policy cpufreq_policy_transition_delay_us cpufreq_quick_get + cpufreq_quick_get_max cpufreq_register_driver cpufreq_register_governor cpufreq_register_notifier @@ -261,6 +266,7 @@ cpu_hwcaps cpuidle_driver_state_disabled cpuidle_get_driver + cpuidle_governor_latency_req cpu_latency_qos_add_request cpu_latency_qos_remove_request cpu_latency_qos_update_request @@ -276,6 +282,7 @@ cpus_read_lock cpus_read_unlock cpu_subsys + cpu_topology crc32_be crc32_le crc8 @@ -298,6 +305,7 @@ crypto_register_shash crypto_req_done crypto_shash_digest + crypto_shash_final crypto_shash_finup crypto_shash_setkey crypto_shash_update @@ -311,10 +319,12 @@ csum_partial csum_tcpudp_nofold _ctype + datagram_poll deactivate_task debugfs_attr_read debugfs_attr_write debugfs_create_atomic_t + debugfs_create_blob debugfs_create_bool debugfs_create_devm_seqfile debugfs_create_dir @@ -499,7 +509,11 @@ dev_pm_opp_of_remove_table dev_pm_opp_put dev_pm_opp_set_config + dev_pm_qos_add_notifier + dev_pm_qos_add_request dev_pm_qos_read_value + dev_pm_qos_remove_notifier + dev_pm_qos_remove_request dev_pm_qos_update_request _dev_printk dev_printk_emit @@ -540,6 +554,8 @@ dma_buf_unmap_attachment dma_buf_vmap dma_buf_vunmap + dma_direct_alloc + dma_direct_free dmaengine_unmap_put dma_fence_add_callback dma_fence_array_create @@ -559,6 +575,7 @@ dma_fence_wait_timeout dma_free_attrs dma_free_pages + dma_get_sgtable_attrs dma_get_slave_caps dma_get_slave_channel dma_heap_add @@ -865,6 +882,7 @@ find_task_by_vpid find_vma_intersection finish_wait + firmware_request_nowarn flush_dcache_page flush_delayed_work flush_work @@ -1037,6 +1055,7 @@ ida_destroy ida_free idr_alloc + idr_alloc_cyclic idr_destroy idr_find idr_for_each @@ -1056,6 +1075,7 @@ in6_pton in_aton inc_zone_page_state + in_egroup_p inet_csk_get_port init_dummy_netdev init_iova_domain @@ -1065,6 +1085,7 @@ __init_swait_queue_head init_task init_timer_key + init_user_ns init_uts_ns init_wait_entry __init_waitqueue_head @@ -1132,8 +1153,10 @@ io_schedule_timeout iounmap iova_domain_init_rcaches + iov_iter_revert ip_compute_csum ip_send_check + __ipv6_addr_type __irq_alloc_descs __irq_apply_affinity_hint irq_create_mapping_affinity @@ -1165,11 +1188,16 @@ jiffies_to_usecs kasan_flag_enabled kasprintf + kernel_bind + kernel_connect kernel_cpustat + kernel_getsockname kernel_kobj kernel_param_lock kernel_param_unlock + kernel_recvmsg kernel_restart + kernel_sendmsg kernfs_find_and_get_ns kernfs_notify kernfs_path_from_node @@ -1196,6 +1224,7 @@ kmalloc_trace kmem_cache_alloc kmem_cache_create + kmem_cache_create_usercopy kmem_cache_destroy kmem_cache_free kmemdup @@ -1210,6 +1239,7 @@ kobject_uevent_env kobj_sysfs_ops krealloc + ksize kstat kstrdup kstrndup @@ -1274,6 +1304,7 @@ __list_del_entry_valid list_sort __local_bh_enable_ip + lock_sock_nested log_abnormal_wakeup_reason log_post_read_mmio log_post_write_mmio @@ -1299,6 +1330,12 @@ memdup_user_nul memmove memparse + mempool_alloc + mempool_alloc_slab + mempool_create + mempool_destroy + mempool_free + mempool_free_slab memremap mem_section memset @@ -1350,6 +1387,7 @@ napi_complete_done napi_disable napi_enable + napi_gro_flush napi_gro_receive __napi_schedule napi_schedule_prep @@ -1366,7 +1404,9 @@ netif_receive_skb netif_receive_skb_list netif_rx + netif_tx_lock netif_tx_stop_all_queues + netif_tx_unlock netif_tx_wake_queue netlink_broadcast __netlink_kernel_create @@ -1393,6 +1433,7 @@ nr_cpu_ids nr_irqs ns_capable + ns_capable_noaudit nsec_to_clock_t ns_to_timespec64 __num_online_cpus @@ -1494,6 +1535,7 @@ panic_notifier_list param_array_ops param_get_int + param_get_string param_ops_bool param_ops_byte param_ops_charp @@ -1502,10 +1544,14 @@ param_ops_string param_ops_uint param_ops_ulong + param_set_copystring + param_set_int pci_alloc_irq_vectors_affinity pci_assign_resource pci_clear_master pci_disable_device + pci_disable_msi + pcie_capability_read_word pci_enable_device pci_enable_wake pci_find_bus @@ -1513,6 +1559,9 @@ pci_find_ext_capability pci_free_irq_vectors pci_get_device + pci_iomap + pci_iounmap + pci_irq_vector pci_load_and_free_saved_state pci_load_saved_state pci_msi_mask_irq @@ -1520,7 +1569,9 @@ pci_read_config_dword pci_read_config_word __pci_register_driver + pci_release_region pci_release_regions + pci_request_region pci_rescan_bus pci_restore_msi_state pci_restore_state @@ -1618,6 +1669,7 @@ __pm_runtime_use_autosuspend __pm_stay_awake pm_stay_awake + pm_system_wakeup pm_wakeup_dev_event pm_wakeup_ws_event power_supply_changed @@ -1652,6 +1704,8 @@ proc_remove proc_set_size proc_symlink + proto_register + proto_unregister pskb_expand_head __pskb_pull_tail ___pskb_trim @@ -1672,7 +1726,9 @@ radix_tree_delete_item radix_tree_gang_lookup radix_tree_insert + radix_tree_iter_delete radix_tree_lookup + radix_tree_next_chunk radix_tree_preload ___ratelimit raw_notifier_call_chain @@ -1680,9 +1736,11 @@ raw_notifier_chain_unregister _raw_read_lock _raw_read_lock_bh + _raw_read_lock_irq _raw_read_lock_irqsave _raw_read_unlock _raw_read_unlock_bh + _raw_read_unlock_irq _raw_read_unlock_irqrestore _raw_spin_lock _raw_spin_lock_bh @@ -1696,9 +1754,11 @@ _raw_spin_unlock_irq _raw_spin_unlock_irqrestore _raw_write_lock + _raw_write_lock_bh _raw_write_lock_irq _raw_write_lock_irqsave _raw_write_unlock + _raw_write_unlock_bh _raw_write_unlock_irq _raw_write_unlock_irqrestore rb_erase @@ -1713,6 +1773,7 @@ rdev_get_drvdata rdev_get_id reboot_mode + refcount_dec_not_one refcount_warn_saturate __refrigerator regcache_cache_only @@ -1730,6 +1791,7 @@ register_netdev register_netdevice register_netdevice_notifier + register_netevent_notifier register_oom_notifier register_pernet_device register_pernet_subsys @@ -1772,11 +1834,13 @@ regulator_notifier_call_chain regulator_put regulator_set_active_discharge_regmap + regulator_set_load regulator_set_voltage regulator_set_voltage_sel_regmap regulator_unregister release_firmware __release_region + release_sock remap_pfn_range remap_vmalloc_range remove_cpu @@ -1877,6 +1941,7 @@ seq_read seq_release seq_release_private + seq_vprintf seq_write set_capacity set_capacity_and_notify @@ -1917,20 +1982,25 @@ single_open single_open_size single_release + sk_alloc skb_add_rx_frag skb_checksum skb_checksum_help skb_clone skb_clone_sk + skb_coalesce_rx_frag skb_complete_wifi_ack skb_copy skb_copy_bits + skb_copy_datagram_iter skb_copy_expand skb_dequeue skb_dequeue_tail skb_ensure_writable + skb_free_datagram __skb_get_hash __skb_gso_segment + __skb_pad skb_pull skb_push skb_put @@ -1938,7 +2008,11 @@ skb_queue_purge skb_queue_tail skb_realloc_headroom + skb_recv_datagram + skb_set_owner_w + skb_store_bits skb_trim + sk_free skip_spaces smp_call_function smp_call_function_single @@ -2015,8 +2089,22 @@ snd_soc_unregister_component snprintf soc_device_register + sock_alloc_send_pskb __sock_create + sock_create_kern + sock_gettstamp + sock_init_data + sock_no_accept + sock_no_listen + sock_no_mmap + sock_no_sendpage + sock_no_shutdown + sock_no_socketpair + sock_queue_rcv_skb_reason + sock_register sock_release + sock_setsockopt + sock_unregister sock_wfree softnet_data sort @@ -2054,6 +2142,7 @@ strcasecmp strcat strchr + strchrnul strcmp strcpy strcspn @@ -2456,6 +2545,7 @@ unregister_netdevice_many unregister_netdevice_notifier unregister_netdevice_queue + unregister_netevent_notifier unregister_oom_notifier unregister_pernet_device unregister_pernet_subsys @@ -2604,6 +2694,7 @@ vring_del_virtqueue vring_interrupt vring_new_virtqueue + vscnprintf vsnprintf vunmap vzalloc @@ -2611,6 +2702,7 @@ wait_for_completion wait_for_completion_interruptible wait_for_completion_interruptible_timeout + wait_for_completion_killable wait_for_completion_timeout wait_woken __wake_up @@ -2628,6 +2720,7 @@ watchdog_set_restart_priority watchdog_unregister_device wireless_nlevent_flush + wireless_send_event woken_wake_function work_busy __write_overflow_field @@ -2639,11 +2732,13 @@ xa_find xa_find_after xa_get_mark + __xa_insert xa_load xa_set_mark xas_find xas_pause __xa_store + xa_store __xfrm_state_destroy xfrm_state_lookup_byspi xfrm_stateonly_find diff --git a/android/abi_gki_aarch64_xiaomi b/android/abi_gki_aarch64_xiaomi index 1ca73267f242..d502877c9b2c 100644 --- a/android/abi_gki_aarch64_xiaomi +++ b/android/abi_gki_aarch64_xiaomi @@ -341,3 +341,7 @@ #required by zram.ko bioset_init bioset_exit + +#required by mi_asap.ko + __traceiter_android_vh_read_pages + __tracepoint_android_vh_read_pages diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index ee68032b1918..14bb47fcf8b0 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -312,6 +312,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_thermal_unregister); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_get_thermal_zone_device); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_thermal_power_cap); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_enable_thermal_power_throttle); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_read_pages); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_reclaim_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_pages_failure_bypass); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_madvise_pageout_swap_entry); diff --git a/drivers/phy/qualcomm/Kconfig b/drivers/phy/qualcomm/Kconfig index 5c98850f5a36..1d3a8062e651 100644 --- a/drivers/phy/qualcomm/Kconfig +++ b/drivers/phy/qualcomm/Kconfig @@ -50,13 +50,55 @@ config PHY_QCOM_PCIE2 Enable this to support the Qualcomm PCIe PHY, used with the Synopsys based PCIe controller. -config PHY_QCOM_QMP - tristate "Qualcomm QMP PHY Driver" +menuconfig PHY_QCOM_QMP + tristate "Qualcomm QMP PHY Drivers" depends on OF && COMMON_CLK && (ARCH_QCOM || COMPILE_TEST) + +if PHY_QCOM_QMP + +config PHY_QCOM_QMP_COMBO + tristate "Qualcomm QMP Combo PHY Driver" + default PHY_QCOM_QMP select GENERIC_PHY help - Enable this to support the QMP PHY transceiver that is used - with controllers such as PCIe, UFS, and USB on Qualcomm chips. + Enable this to support the QMP Combo PHY transceiver that is used + with USB3 and DisplayPort controllers on Qualcomm chips. + +config PHY_QCOM_QMP_PCIE + tristate "Qualcomm QMP PCIe PHY Driver" + depends on PCI || COMPILE_TEST + select GENERIC_PHY + default PHY_QCOM_QMP + help + Enable this to support the QMP PCIe PHY transceiver that is used + with PCIe controllers on Qualcomm chips. + +config PHY_QCOM_QMP_PCIE_8996 + tristate "Qualcomm QMP PCIe 8996 PHY Driver" + depends on PCI || COMPILE_TEST + select GENERIC_PHY + default PHY_QCOM_QMP + help + Enable this to support the QMP PCIe PHY transceiver that is used + with PCIe controllers on Qualcomm msm8996 chips. + +config PHY_QCOM_QMP_UFS + tristate "Qualcomm QMP UFS PHY Driver" + select GENERIC_PHY + default PHY_QCOM_QMP + help + Enable this to support the QMP UFS PHY transceiver that is used + with UFS controllers on Qualcomm chips. + +config PHY_QCOM_QMP_USB + tristate "Qualcomm QMP USB PHY Driver" + select GENERIC_PHY + default PHY_QCOM_QMP + help + Enable this to support the QMP USB PHY transceiver that is used + with USB3 controllers on Qualcomm chips. + +endif # PHY_QCOM_QMP config PHY_QCOM_QUSB2 tristate "Qualcomm QUSB2 PHY Driver" diff --git a/drivers/phy/qualcomm/Makefile b/drivers/phy/qualcomm/Makefile index 65f6c30a3e93..79dd4e507961 100644 --- a/drivers/phy/qualcomm/Makefile +++ b/drivers/phy/qualcomm/Makefile @@ -5,12 +5,12 @@ obj-$(CONFIG_PHY_QCOM_EDP) += phy-qcom-edp.o obj-$(CONFIG_PHY_QCOM_IPQ4019_USB) += phy-qcom-ipq4019-usb.o obj-$(CONFIG_PHY_QCOM_IPQ806X_SATA) += phy-qcom-ipq806x-sata.o obj-$(CONFIG_PHY_QCOM_PCIE2) += phy-qcom-pcie2.o -obj-$(CONFIG_PHY_QCOM_QMP) += \ - phy-qcom-qmp-combo.o \ - phy-qcom-qmp-pcie.o \ - phy-qcom-qmp-pcie-msm8996.o \ - phy-qcom-qmp-ufs.o \ - phy-qcom-qmp-usb.o + +obj-$(CONFIG_PHY_QCOM_QMP_COMBO) += phy-qcom-qmp-combo.o +obj-$(CONFIG_PHY_QCOM_QMP_PCIE) += phy-qcom-qmp-pcie.o +obj-$(CONFIG_PHY_QCOM_QMP_PCIE_8996) += phy-qcom-qmp-pcie-msm8996.o +obj-$(CONFIG_PHY_QCOM_QMP_UFS) += phy-qcom-qmp-ufs.o +obj-$(CONFIG_PHY_QCOM_QMP_USB) += phy-qcom-qmp-usb.o obj-$(CONFIG_PHY_QCOM_QUSB2) += phy-qcom-qusb2.o obj-$(CONFIG_PHY_QCOM_USB_HS) += phy-qcom-usb-hs.o diff --git a/include/trace/hooks/mm.h b/include/trace/hooks/mm.h index 0bd0c34e17b9..50addc57dc10 100644 --- a/include/trace/hooks/mm.h +++ b/include/trace/hooks/mm.h @@ -76,6 +76,9 @@ struct slabinfo; DECLARE_HOOK(android_vh_cache_show, TP_PROTO(struct seq_file *m, struct slabinfo *sinfo, struct kmem_cache *s), TP_ARGS(m, sinfo, s)); +DECLARE_HOOK(android_vh_read_pages, + TP_PROTO(struct readahead_control *ractl), + TP_ARGS(ractl)); DECLARE_HOOK(android_vh_alloc_pages_reclaim_bypass, TP_PROTO(gfp_t gfp_mask, int order, int alloc_flags, int migratetype, struct page **page), diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index f3af16ce1f64..50a59769828a 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -567,7 +567,8 @@ * @NL80211_CMD_DEL_PMKSA: Delete a PMKSA cache entry, using %NL80211_ATTR_MAC * (for the BSSID) and %NL80211_ATTR_PMKID or using %NL80211_ATTR_SSID, * %NL80211_ATTR_FILS_CACHE_ID, and %NL80211_ATTR_PMKID in case of FILS - * authentication. + * authentication. Additionally in case of SAE offload and OWE offloads + * PMKSA entry can be deleted using %NL80211_ATTR_SSID. * @NL80211_CMD_FLUSH_PMKSA: Flush all PMKSA cache entries. * * @NL80211_CMD_REG_CHANGE: indicates to userspace the regulatory domain diff --git a/mm/cma.c b/mm/cma.c index 9817bc6394b8..c49279a715e9 100644 --- a/mm/cma.c +++ b/mm/cma.c @@ -438,6 +438,9 @@ struct page *__cma_alloc(struct cma *cma, unsigned long count, int ret = -ENOMEM; int num_attempts = 0; int max_retries = 5; + const char *name = cma ? cma->name : NULL; + + trace_cma_alloc_start(name, count, align); if (WARN_ON_ONCE((gfp_mask & GFP_KERNEL) == 0 || (gfp_mask & ~(GFP_KERNEL|__GFP_NOWARN|__GFP_NORETRY)) != 0)) @@ -452,8 +455,6 @@ struct page *__cma_alloc(struct cma *cma, unsigned long count, if (!count) goto out; - trace_cma_alloc_start(cma->name, count, align); - mask = cma_bitmap_aligned_mask(cma, align); offset = cma_bitmap_aligned_offset(cma, align); bitmap_maxno = cma_bitmap_maxno(cma); @@ -522,8 +523,6 @@ struct page *__cma_alloc(struct cma *cma, unsigned long count, start = bitmap_no + mask + 1; } - trace_cma_alloc_finish(cma->name, pfn, page, count, align); - /* * CMA can allocate multiple page blocks, which results in different * blocks being marked with different tags. Reset the tags to ignore @@ -542,6 +541,7 @@ struct page *__cma_alloc(struct cma *cma, unsigned long count, pr_debug("%s(): returned %p\n", __func__, page); out: + trace_cma_alloc_finish(name, pfn, page, count, align); if (page) { count_vm_event(CMA_ALLOC_SUCCESS); cma_sysfs_account_success_pages(cma, count); diff --git a/mm/readahead.c b/mm/readahead.c index 3947d3ce7204..3ecf48186519 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -167,6 +167,7 @@ static void read_pages(struct readahead_control *rac) psi_memstall_enter(&rac->_pflags); blk_start_plug(&plug); + trace_android_vh_read_pages(rac); if (aops->readahead) { aops->readahead(rac); /* diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 5576b6f4feed..62f73981e37a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -12017,16 +12017,18 @@ static int nl80211_wiphy_netns(struct sk_buff *skb, struct genl_info *info) return err; } -static int nl80211_setdel_pmksa(struct sk_buff *skb, struct genl_info *info) +static int nl80211_set_pmksa(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev = info->user_ptr[0]; - int (*rdev_ops)(struct wiphy *wiphy, struct net_device *dev, - struct cfg80211_pmksa *pmksa) = NULL; struct net_device *dev = info->user_ptr[1]; struct cfg80211_pmksa pmksa; + bool ap_pmksa_caching_support = false; memset(&pmksa, 0, sizeof(struct cfg80211_pmksa)); + ap_pmksa_caching_support = wiphy_ext_feature_isset(&rdev->wiphy, + NL80211_EXT_FEATURE_AP_PMKSA_CACHING); + if (!info->attrs[NL80211_ATTR_PMKID]) return -EINVAL; @@ -12035,16 +12037,15 @@ static int nl80211_setdel_pmksa(struct sk_buff *skb, struct genl_info *info) if (info->attrs[NL80211_ATTR_MAC]) { pmksa.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); } else if (info->attrs[NL80211_ATTR_SSID] && - info->attrs[NL80211_ATTR_FILS_CACHE_ID] && - (info->genlhdr->cmd == NL80211_CMD_DEL_PMKSA || - info->attrs[NL80211_ATTR_PMK])) { + info->attrs[NL80211_ATTR_FILS_CACHE_ID] && + info->attrs[NL80211_ATTR_PMK]) { pmksa.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); pmksa.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); - pmksa.cache_id = - nla_data(info->attrs[NL80211_ATTR_FILS_CACHE_ID]); + pmksa.cache_id = nla_data(info->attrs[NL80211_ATTR_FILS_CACHE_ID]); } else { return -EINVAL; } + if (info->attrs[NL80211_ATTR_PMK]) { pmksa.pmk = nla_data(info->attrs[NL80211_ATTR_PMK]); pmksa.pmk_len = nla_len(info->attrs[NL80211_ATTR_PMK]); @@ -12056,32 +12057,71 @@ static int nl80211_setdel_pmksa(struct sk_buff *skb, struct genl_info *info) if (info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD]) pmksa.pmk_reauth_threshold = - nla_get_u8( - info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD]); + nla_get_u8(info->attrs[NL80211_ATTR_PMK_REAUTH_THRESHOLD]); if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT && - !(dev->ieee80211_ptr->iftype == NL80211_IFTYPE_AP && - wiphy_ext_feature_isset(&rdev->wiphy, - NL80211_EXT_FEATURE_AP_PMKSA_CACHING))) + !((dev->ieee80211_ptr->iftype == NL80211_IFTYPE_AP || + dev->ieee80211_ptr->iftype == NL80211_IFTYPE_P2P_GO) && + ap_pmksa_caching_support)) return -EOPNOTSUPP; - switch (info->genlhdr->cmd) { - case NL80211_CMD_SET_PMKSA: - rdev_ops = rdev->ops->set_pmksa; - break; - case NL80211_CMD_DEL_PMKSA: - rdev_ops = rdev->ops->del_pmksa; - break; - default: - WARN_ON(1); - break; + if (!rdev->ops->set_pmksa) + return -EOPNOTSUPP; + + return rdev_set_pmksa(rdev, dev, &pmksa); +} + +static int nl80211_del_pmksa(struct sk_buff *skb, struct genl_info *info) +{ + struct cfg80211_registered_device *rdev = info->user_ptr[0]; + struct net_device *dev = info->user_ptr[1]; + struct cfg80211_pmksa pmksa; + bool sae_offload_support = false; + bool owe_offload_support = false; + bool ap_pmksa_caching_support = false; + + memset(&pmksa, 0, sizeof(struct cfg80211_pmksa)); + + sae_offload_support = wiphy_ext_feature_isset(&rdev->wiphy, + NL80211_EXT_FEATURE_SAE_OFFLOAD); + owe_offload_support = wiphy_ext_feature_isset(&rdev->wiphy, + NL80211_EXT_FEATURE_OWE_OFFLOAD); + ap_pmksa_caching_support = wiphy_ext_feature_isset(&rdev->wiphy, + NL80211_EXT_FEATURE_AP_PMKSA_CACHING); + + if (info->attrs[NL80211_ATTR_PMKID]) + pmksa.pmkid = nla_data(info->attrs[NL80211_ATTR_PMKID]); + + if (info->attrs[NL80211_ATTR_MAC]) { + pmksa.bssid = nla_data(info->attrs[NL80211_ATTR_MAC]); + } else if (info->attrs[NL80211_ATTR_SSID]) { + /* SSID based pmksa flush suppported only for FILS, + * OWE/SAE OFFLOAD cases + */ + if (info->attrs[NL80211_ATTR_FILS_CACHE_ID] && + info->attrs[NL80211_ATTR_PMK]) { + pmksa.cache_id = nla_data(info->attrs[NL80211_ATTR_FILS_CACHE_ID]); + } else if (!sae_offload_support && !owe_offload_support) { + return -EINVAL; + } + pmksa.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]); + pmksa.ssid_len = nla_len(info->attrs[NL80211_ATTR_SSID]); + } else { + return -EINVAL; } - if (!rdev_ops) + if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_STATION && + dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_CLIENT && + !((dev->ieee80211_ptr->iftype == NL80211_IFTYPE_AP || + dev->ieee80211_ptr->iftype == NL80211_IFTYPE_P2P_GO) && + ap_pmksa_caching_support)) return -EOPNOTSUPP; - return rdev_ops(&rdev->wiphy, dev, &pmksa); + if (!rdev->ops->del_pmksa) + return -EOPNOTSUPP; + + return rdev_del_pmksa(rdev, dev, &pmksa); } static int nl80211_flush_pmksa(struct sk_buff *skb, struct genl_info *info) @@ -16817,7 +16857,7 @@ static const struct genl_small_ops nl80211_small_ops[] = { { .cmd = NL80211_CMD_SET_PMKSA, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, - .doit = nl80211_setdel_pmksa, + .doit = nl80211_set_pmksa, .flags = GENL_UNS_ADMIN_PERM, .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP | NL80211_FLAG_CLEAR_SKB), @@ -16825,7 +16865,7 @@ static const struct genl_small_ops nl80211_small_ops[] = { { .cmd = NL80211_CMD_DEL_PMKSA, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, - .doit = nl80211_setdel_pmksa, + .doit = nl80211_del_pmksa, .flags = GENL_UNS_ADMIN_PERM, .internal_flags = IFLAGS(NL80211_FLAG_NEED_NETDEV_UP), },