mirror of
https://github.com/nxp-imx/linux-imx.git
synced 2025-07-19 07:39:54 +02:00
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:
commit
d247f814b1
|
@ -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
|
||||
|
|
|
@ -1230,6 +1230,7 @@
|
|||
kthread_should_park
|
||||
kthread_should_stop
|
||||
kthread_stop
|
||||
kthread_stop_put
|
||||
kthread_unpark
|
||||
kthread_worker_fn
|
||||
ktime_get
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
11
mm/memory.c
11
mm/memory.c
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user