Merge branch 'android15-6.6' into android15-6.6-lts

More merges back to resolve some build issues and handle updates to abi
symbols to ensure that they stay stable over time.  Included in here are
the following commits:

* 09d40ffd7d ANDROID: update symbol for unisoc audio modules
* 90fa1a5580 ANDROID: GKI: update symbol list file for xiaomi
* d70733e0bc ANDROID: vendor_hook: customize gfp and orders to alloc large folio
* a450ed506c ANDROID: GKI: update symbol list file for xiaomi
* 1e539e8035 ANDROID: vendor_hook: customize order for thp pcp list
* ce8a12cd07 BACKPORT: mm: simplify thp_vma_allowable_order
* a8890d3ea1 ANDROID: abi_gki_aarch64_qcom: update abi symbol list
* b9a812a2c8 ANDROID: virt: gunyah: Correct n_mem_entries calculation in gunyah_gup_share_parcel
* c9ef18a284 ANDROID: add kthread_stop_put to symbol list

Change-Id: I2f2be1d6188e91a5964dd2da8cb0953742aea275
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Greg Kroah-Hartman 2024-08-28 19:52:20 +00:00
commit d247f814b1
14 changed files with 195 additions and 40 deletions

View File

@ -331004,6 +331004,14 @@ function {
parameter_id: 0x188b9e81
parameter_id: 0x35d37abd
}
function {
id: 0x9b758262
return_type_id: 0x6720d32f
parameter_id: 0x18bd6530
parameter_id: 0x36f98e5c
parameter_id: 0x064d6086
parameter_id: 0x13580d6c
}
function {
id: 0x9b76121f
return_type_id: 0x6720d32f
@ -340507,6 +340515,11 @@ function {
parameter_id: 0xac0d3a85
parameter_id: 0x92233392
}
function {
id: 0xa3813acf
return_type_id: 0x3e10b518
parameter_id: 0xc714b5b1
}
function {
id: 0xa395744b
return_type_id: 0x35d510c3
@ -351144,6 +351157,24 @@ elf_symbol {
type_id: 0x9b653d03
full_name: "__traceiter_android_vh_customize_alloc_gfp"
}
elf_symbol {
id: 0x3444cc6c
name: "__traceiter_android_vh_customize_thp_gfp_orders"
is_defined: true
symbol_type: FUNCTION
crc: 0x53d7a35c
type_id: 0x9b758262
full_name: "__traceiter_android_vh_customize_thp_gfp_orders"
}
elf_symbol {
id: 0x2bfcc3a6
name: "__traceiter_android_vh_customize_thp_pcp_order"
is_defined: true
symbol_type: FUNCTION
crc: 0x70a4428c
type_id: 0x9bc07fe3
full_name: "__traceiter_android_vh_customize_thp_pcp_order"
}
elf_symbol {
id: 0xbb17692f
name: "__traceiter_android_vh_dc_receive"
@ -356832,6 +356863,24 @@ elf_symbol {
type_id: 0x18ccbd2c
full_name: "__tracepoint_android_vh_customize_alloc_gfp"
}
elf_symbol {
id: 0x66823d32
name: "__tracepoint_android_vh_customize_thp_gfp_orders"
is_defined: true
symbol_type: OBJECT
crc: 0xf3f684c7
type_id: 0x18ccbd2c
full_name: "__tracepoint_android_vh_customize_thp_gfp_orders"
}
elf_symbol {
id: 0xc47ad4bc
name: "__tracepoint_android_vh_customize_thp_pcp_order"
is_defined: true
symbol_type: OBJECT
crc: 0x366195af
type_id: 0x18ccbd2c
full_name: "__tracepoint_android_vh_customize_thp_pcp_order"
}
elf_symbol {
id: 0x869fd955
name: "__tracepoint_android_vh_dc_receive"
@ -405057,6 +405106,15 @@ elf_symbol {
type_id: 0xac45ce43
full_name: "snd_pcm_format_linear"
}
elf_symbol {
id: 0xf76bb227
name: "snd_pcm_format_name"
is_defined: true
symbol_type: FUNCTION
crc: 0xa286a234
type_id: 0xa3813acf
full_name: "snd_pcm_format_name"
}
elf_symbol {
id: 0xcd9887e8
name: "snd_pcm_format_physical_width"
@ -419391,6 +419449,8 @@ interface {
symbol_id: 0x431c5bf5
symbol_id: 0x9f47ed94
symbol_id: 0x96cfd964
symbol_id: 0x3444cc6c
symbol_id: 0x2bfcc3a6
symbol_id: 0xbb17692f
symbol_id: 0xc8db6e69
symbol_id: 0x45f41f73
@ -420023,6 +420083,8 @@ interface {
symbol_id: 0x66a766d7
symbol_id: 0xc44d61e6
symbol_id: 0x611b30be
symbol_id: 0x66823d32
symbol_id: 0xc47ad4bc
symbol_id: 0x869fd955
symbol_id: 0xaab0786f
symbol_id: 0x5e32ebbd
@ -425372,6 +425434,7 @@ interface {
symbol_id: 0xbfd5ebac
symbol_id: 0x68c67cd0
symbol_id: 0xc10b3ddb
symbol_id: 0xf76bb227
symbol_id: 0xcd9887e8
symbol_id: 0xb132031d
symbol_id: 0x9ebdc6d8

View File

@ -1230,6 +1230,7 @@
kthread_should_park
kthread_should_stop
kthread_stop
kthread_stop_put
kthread_unpark
kthread_worker_fn
ktime_get

View File

@ -1595,6 +1595,7 @@
regulator_get_voltage_rdev
regulator_is_enabled
regulator_is_supported_voltage
regulator_list_voltage_linear
regulator_notifier_call_chain
regulator_put
regulator_register_notifier

View File

@ -243,15 +243,76 @@
# required by apsys-dvfs.ko
devfreq_update_status
# required by audio-card.ko
devm_snd_soc_register_card
snd_info_free_entry
snd_info_register
snd_interval_refine
snd_soc_daifmt_parse_clock_provider_raw
snd_soc_daifmt_parse_format
snd_soc_dapm_disable_pin
snd_soc_dapm_enable_pin
snd_soc_dapm_sync
snd_soc_of_get_dai_name
snd_soc_of_parse_audio_routing
snd_soc_of_parse_audio_simple_widgets
snd_soc_of_parse_card_name
snd_soc_of_parse_tdm_slot
snd_soc_pm_ops
# required by audio-codec.ko
dapm_regulator_event
desc_to_gpio
iio_channel_get
iio_read_channel_raw
regulator_get_mode
regulator_register
regulator_set_mode
regulator_unregister
snd_jack_set_key
snd_soc_card_jack_new
snd_soc_component_read
snd_soc_component_update_bits
snd_soc_dapm_get_enum_double
snd_soc_dapm_get_volsw
snd_soc_dapm_put_enum_double
snd_soc_dapm_put_volsw
snd_soc_jack_report
# required by audio-dai.ko
snd_soc_dapm_add_routes
snd_soc_new_compress
# required by audio-platform.ko
snd_pcm_hw_constraint_integer
snd_pcm_hw_constraint_step
snd_pcm_period_elapsed
snd_pcm_rate_bit_to_rate
snd_soc_dapm_mixer_update_power
snd_soc_rtdcom_lookup
snd_soc_set_runtime_hwparams
# required by audio-misc.ko
__kfifo_from_user_r
__kfifo_init
__kfifo_to_user_r
pm_runtime_barrier
pm_runtime_irq_safe
snd_ctl_add
snd_ctl_new1
snd_hwdep_new
snd_pcm_format_name
snd_soc_add_card_controls
snd_soc_bytes_info_ext
snd_usb_autoresume
snd_usb_autosuspend
snd_usb_endpoint_prepare
snd_usb_hw_free
snd_usb_hw_params
snd_usb_lock_shutdown
snd_usb_register_platform_ops
snd_usb_unlock_shutdown
snd_usb_unregister_platform_ops
# required by gzvm.ko
__traceiter_android_vh_gzvm_vcpu_exit_reason

View File

@ -78,6 +78,10 @@
__traceiter_android_vh_compact_finished
__tracepoint_android_vh_madvise_cold_or_pageout_abort
__tracepoint_android_vh_compact_finished
__traceiter_android_vh_customize_thp_pcp_order
__tracepoint_android_vh_customize_thp_pcp_order
__traceiter_android_vh_customize_thp_gfp_orders
__tracepoint_android_vh_customize_thp_gfp_orders
#required by metis.ko module
__traceiter_android_vh_rwsem_read_wait_start

View File

@ -535,4 +535,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_tcp_retransmit_timer);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_udp_unicast_rcv_skb);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_udp6_unicast_rcv_skb);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ogki_kmem_cache_create_usercopy);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_pcp_order);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_gfp_orders);

View File

@ -473,7 +473,7 @@ int gunyah_gup_share_parcel(struct gunyah_vm *ghvm, struct gunyah_rm_mem_parcel
u16 vmid;
struct folio *folio;
unsigned int gup_flags;
unsigned long i, offset;
unsigned long i, offset, entries;
parcel->mem_handle = GUNYAH_MEM_HANDLE_INVAL;
@ -548,6 +548,7 @@ int gunyah_gup_share_parcel(struct gunyah_vm *ghvm, struct gunyah_rm_mem_parcel
parcel->acl_entries[1].perms = GUNYAH_RM_ACL_R | GUNYAH_RM_ACL_W | GUNYAH_RM_ACL_X;
}
/* overallocate & assume no large folios */
parcel->mem_entries = kcalloc(pinned, sizeof(parcel->mem_entries[0]),
GFP_KERNEL_ACCOUNT);
if (!parcel->mem_entries) {
@ -559,17 +560,20 @@ int gunyah_gup_share_parcel(struct gunyah_vm *ghvm, struct gunyah_rm_mem_parcel
parcel->mem_entries[0].size = cpu_to_le64(folio_size(folio));
parcel->mem_entries[0].phys_addr = cpu_to_le64(PFN_PHYS(folio_pfn(folio)));
for (i = 1; i < pinned; i++) {
for (i = 1, entries = 1; i < pinned; i++) {
folio = page_folio(pages[i]);
if (pages[i] == folio_page(folio, 0)) {
parcel->mem_entries[i].size = cpu_to_le64(folio_size(folio));
parcel->mem_entries[i].phys_addr = cpu_to_le64(PFN_PHYS(folio_pfn(folio)));
parcel->mem_entries[entries].size =
cpu_to_le64(folio_size(folio));
parcel->mem_entries[entries].phys_addr =
cpu_to_le64(PFN_PHYS(folio_pfn(folio)));
entries++;
} else {
unpin_user_page(pages[i]);
account_locked_vm(current->mm, 1, false);
}
}
parcel->n_mem_entries = i;
parcel->n_mem_entries = entries;
ret = gunyah_rm_mem_share(ghvm->rm, parcel);
goto free_pages;

View File

@ -896,8 +896,8 @@ static int show_smap(struct seq_file *m, void *v)
__show_smap(m, &mss, false);
seq_printf(m, "THPeligible: %8u\n",
!!thp_vma_allowable_orders(vma, vma->vm_flags, true, false,
true, THP_ORDERS_ALL));
!!thp_vma_allowable_orders(vma, vma->vm_flags,
TVA_SMAPS | TVA_ENFORCE_SYSFS, THP_ORDERS_ALL));
if (arch_pkeys_enabled())
seq_printf(m, "ProtectionKey: %8u\n", vma_pkey(vma));

View File

@ -84,8 +84,12 @@ extern struct kobj_attribute shmem_enabled_attr;
*/
#define THP_ORDERS_ALL (THP_ORDERS_ALL_ANON | THP_ORDERS_ALL_FILE)
#define thp_vma_allowable_order(vma, vm_flags, smaps, in_pf, enforce_sysfs, order) \
(!!thp_vma_allowable_orders(vma, vm_flags, smaps, in_pf, enforce_sysfs, BIT(order)))
#define TVA_SMAPS (1 << 0) /* Will be used for procfs */
#define TVA_IN_PF (1 << 1) /* Page fault handler */
#define TVA_ENFORCE_SYSFS (1 << 2) /* Obey sysfs configuration */
#define thp_vma_allowable_order(vma, vm_flags, tva_flags, order) \
(!!thp_vma_allowable_orders(vma, vm_flags, tva_flags, BIT(order)))
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
#define HPAGE_PMD_SHIFT PMD_SHIFT
@ -211,17 +215,15 @@ static inline bool file_thp_enabled(struct vm_area_struct *vma)
}
unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma,
unsigned long vm_flags, bool smaps,
bool in_pf, bool enforce_sysfs,
unsigned long vm_flags,
unsigned long tva_flags,
unsigned long orders);
/**
* thp_vma_allowable_orders - determine hugepage orders that are allowed for vma
* @vma: the vm area to check
* @vm_flags: use these vm_flags instead of vma->vm_flags
* @smaps: whether answer will be used for smaps file
* @in_pf: whether answer will be used by page fault handler
* @enforce_sysfs: whether sysfs config should be taken into account
* @tva_flags: Which TVA flags to honour
* @orders: bitfield of all orders to consider
*
* Calculates the intersection of the requested hugepage orders and the allowed
@ -234,12 +236,12 @@ unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma,
*/
static inline
unsigned long thp_vma_allowable_orders(struct vm_area_struct *vma,
unsigned long vm_flags, bool smaps,
bool in_pf, bool enforce_sysfs,
unsigned long vm_flags,
unsigned long tva_flags,
unsigned long orders)
{
/* Optimization to check if required orders are enabled early. */
if (enforce_sysfs && vma_is_anonymous(vma)) {
if ((tva_flags & TVA_ENFORCE_SYSFS) && vma_is_anonymous(vma)) {
unsigned long mask = READ_ONCE(huge_anon_orders_always);
if (vm_flags & VM_HUGEPAGE)
@ -253,8 +255,7 @@ unsigned long thp_vma_allowable_orders(struct vm_area_struct *vma,
return 0;
}
return __thp_vma_allowable_orders(vma, vm_flags, smaps, in_pf,
enforce_sysfs, orders);
return __thp_vma_allowable_orders(vma, vm_flags, tva_flags, orders);
}
enum mthp_stat_item {
@ -432,8 +433,8 @@ static inline unsigned long thp_vma_suitable_orders(struct vm_area_struct *vma,
}
static inline unsigned long thp_vma_allowable_orders(struct vm_area_struct *vma,
unsigned long vm_flags, bool smaps,
bool in_pf, bool enforce_sysfs,
unsigned long vm_flags,
unsigned long tva_flags,
unsigned long orders)
{
return 0;

View File

@ -381,6 +381,12 @@ DECLARE_HOOK(android_vh_zs_shrinker_adjust,
DECLARE_HOOK(android_vh_zs_shrinker_bypass,
TP_PROTO(bool *bypass),
TP_ARGS(bypass));
DECLARE_HOOK(android_vh_customize_thp_pcp_order,
TP_PROTO(unsigned int *order),
TP_ARGS(order));
DECLARE_HOOK(android_vh_customize_thp_gfp_orders,
TP_PROTO(gfp_t *gfp_mask, unsigned long *orders, int *order),
TP_ARGS(gfp_mask, orders, order));
#endif /* _TRACE_HOOK_MM_H */
/* This part must be outside protection */

View File

@ -76,10 +76,13 @@ unsigned long huge_anon_orders_madvise __read_mostly;
unsigned long huge_anon_orders_inherit __read_mostly;
unsigned long __thp_vma_allowable_orders(struct vm_area_struct *vma,
unsigned long vm_flags, bool smaps,
bool in_pf, bool enforce_sysfs,
unsigned long vm_flags,
unsigned long tva_flags,
unsigned long orders)
{
bool smaps = tva_flags & TVA_SMAPS;
bool in_pf = tva_flags & TVA_IN_PF;
bool enforce_sysfs = tva_flags & TVA_ENFORCE_SYSFS;
/* Check the intersection of requested and supported orders. */
orders &= vma_is_anonymous(vma) ?
THP_ORDERS_ALL_ANON : THP_ORDERS_ALL_FILE;

View File

@ -446,7 +446,7 @@ void khugepaged_enter_vma(struct vm_area_struct *vma,
{
if (!test_bit(MMF_VM_HUGEPAGE, &vma->vm_mm->flags) &&
hugepage_flags_enabled()) {
if (thp_vma_allowable_order(vma, vm_flags, false, false, true,
if (thp_vma_allowable_order(vma, vm_flags, TVA_ENFORCE_SYSFS,
PMD_ORDER))
__khugepaged_enter(vma->vm_mm);
}
@ -912,6 +912,7 @@ static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address,
struct collapse_control *cc)
{
struct vm_area_struct *vma;
unsigned long tva_flags = cc->is_khugepaged ? TVA_ENFORCE_SYSFS : 0;
if (unlikely(hpage_collapse_test_exit(mm)))
return SCAN_ANY_PROCESS;
@ -922,8 +923,7 @@ static int hugepage_vma_revalidate(struct mm_struct *mm, unsigned long address,
if (!thp_vma_suitable_order(vma, address, PMD_ORDER))
return SCAN_ADDRESS_RANGE;
if (!thp_vma_allowable_order(vma, vma->vm_flags, false, false,
cc->is_khugepaged, PMD_ORDER))
if (!thp_vma_allowable_order(vma, vma->vm_flags, tva_flags, PMD_ORDER))
return SCAN_VMA_CHECK;
/*
* Anon VMA expected, the address may be unmapped then
@ -1505,8 +1505,7 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, unsigned long addr,
* and map it by a PMD, regardless of sysfs THP settings. As such, let's
* analogously elide sysfs THP settings here.
*/
if (!thp_vma_allowable_order(vma, vma->vm_flags, false, false, false,
PMD_ORDER))
if (!thp_vma_allowable_order(vma, vma->vm_flags, 0, PMD_ORDER))
return SCAN_VMA_CHECK;
/* Keep pmd pgtable for uffd-wp; see comment in retract_page_tables() */
@ -2371,8 +2370,8 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, int *result,
progress++;
break;
}
if (!thp_vma_allowable_order(vma, vma->vm_flags, false, false,
true, PMD_ORDER)) {
if (!thp_vma_allowable_order(vma, vma->vm_flags,
TVA_ENFORCE_SYSFS, PMD_ORDER)) {
skip:
progress++;
continue;
@ -2709,8 +2708,7 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev,
*prev = vma;
if (!thp_vma_allowable_order(vma, vma->vm_flags, false, false, false,
PMD_ORDER))
if (!thp_vma_allowable_order(vma, vma->vm_flags, 0, PMD_ORDER))
return -EINVAL;
cc = kmalloc(sizeof(*cc), GFP_KERNEL);

View File

@ -4394,8 +4394,8 @@ static struct folio *alloc_anon_folio(struct vm_fault *vmf)
* for this vma. Then filter out the orders that can't be allocated over
* the faulting address and still be fully contained in the vma.
*/
orders = thp_vma_allowable_orders(vma, vma->vm_flags, false, true, true,
BIT(PMD_ORDER) - 1);
orders = thp_vma_allowable_orders(vma, vma->vm_flags,
TVA_IN_PF | TVA_ENFORCE_SYSFS, BIT(PMD_ORDER) - 1);
orders = thp_vma_suitable_orders(vma, vmf->address, orders);
if (!orders)
@ -4425,6 +4425,7 @@ static struct folio *alloc_anon_folio(struct vm_fault *vmf)
/* Try allocating the highest of the remaining orders. */
gfp = vma_thp_gfp_mask(vma);
trace_android_vh_customize_thp_gfp_orders(&gfp, &orders, &order);
while (orders) {
addr = ALIGN_DOWN(vmf->address, PAGE_SIZE << order);
folio = vma_alloc_folio(gfp, order, vma, addr, true);
@ -5455,7 +5456,8 @@ static vm_fault_t __handle_mm_fault(struct vm_area_struct *vma,
return VM_FAULT_OOM;
retry_pud:
if (pud_none(*vmf.pud) &&
thp_vma_allowable_order(vma, vm_flags, false, true, true, PUD_ORDER)) {
thp_vma_allowable_order(vma, vm_flags,
TVA_IN_PF | TVA_ENFORCE_SYSFS, PUD_ORDER)) {
ret = create_huge_pud(&vmf);
if (!(ret & VM_FAULT_FALLBACK))
return ret;
@ -5489,7 +5491,8 @@ retry_pud:
goto retry_pud;
if (pmd_none(*vmf.pmd) &&
thp_vma_allowable_order(vma, vm_flags, false, true, true, PMD_ORDER)) {
thp_vma_allowable_order(vma, vm_flags,
TVA_IN_PF | TVA_ENFORCE_SYSFS, PMD_ORDER)) {
ret = create_huge_pmd(&vmf);
if (!(ret & VM_FAULT_FALLBACK))
return ret;

View File

@ -603,7 +603,10 @@ static inline unsigned int order_to_pindex(int migratetype, int order)
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
if (order > PAGE_ALLOC_COSTLY_ORDER) {
VM_BUG_ON(order != pageblock_order);
unsigned int expected_order = pageblock_order;
trace_android_vh_customize_thp_pcp_order(&expected_order);
VM_BUG_ON(order != expected_order);
return NR_LOWORDER_PCP_LISTS;
}
#else
@ -618,8 +621,10 @@ static inline int pindex_to_order(unsigned int pindex)
int order = pindex / MIGRATE_PCPTYPES;
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
if (pindex == NR_LOWORDER_PCP_LISTS)
if (pindex == NR_LOWORDER_PCP_LISTS) {
order = pageblock_order;
trace_android_vh_customize_thp_pcp_order(&order);
}
#else
VM_BUG_ON(order > PAGE_ALLOC_COSTLY_ORDER);
#endif
@ -629,10 +634,14 @@ static inline int pindex_to_order(unsigned int pindex)
static inline bool pcp_allowed_order(unsigned int order)
{
unsigned int __maybe_unused allowed_order;
if (order <= PAGE_ALLOC_COSTLY_ORDER)
return true;
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
if (order == pageblock_order)
allowed_order = pageblock_order;
trace_android_vh_customize_thp_pcp_order(&allowed_order);
if (order == allowed_order)
return true;
#endif
return false;