ANDROID: vendor_hook: customize gfp and decide whether to bypass in the large folio allocation path
This hook is used as a supplement to the previous hook to dynamic modify the gfp and bypass of order pmd: https://android-review.googlesource.com/c/kernel/common/+/3227165 Bug: 438090847 Change-Id: Ia33fdc62ab466cf5cfcc53d02b515e28a1ac1431 Signed-off-by: yan chang <changyan1@xiaomi.com>
This commit is contained in:
committed by
Treehugger Robot
parent
d62d9aa3e3
commit
3dd71156b3
@@ -582,6 +582,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mem_cgroup_charge);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_filemap_add_folio);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_node);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_thp_gfp_orders);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_customize_pmd_gfp_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_thp_vma_allowable_orders);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alloc_uid);
|
||||
|
||||
@@ -603,6 +603,9 @@ DECLARE_HOOK(android_vh_mm_try_split_folio_bypass,
|
||||
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));
|
||||
DECLARE_HOOK(android_vh_customize_pmd_gfp_bypass,
|
||||
TP_PROTO(gfp_t *gfp_mask, bool *bypass),
|
||||
TP_ARGS(gfp_mask, bypass));
|
||||
DECLARE_HOOK(android_vh_thp_vma_allowable_orders,
|
||||
TP_PROTO(struct vm_area_struct *vma, unsigned long *orders),
|
||||
TP_ARGS(vma, orders));
|
||||
|
||||
@@ -1281,6 +1281,7 @@ vm_fault_t do_huge_pmd_anonymous_page(struct vm_fault *vmf)
|
||||
struct folio *folio;
|
||||
unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
|
||||
vm_fault_t ret;
|
||||
bool bypass = false;
|
||||
|
||||
if (!thp_vma_suitable_order(vma, haddr, PMD_ORDER))
|
||||
return VM_FAULT_FALLBACK;
|
||||
@@ -1330,6 +1331,9 @@ vm_fault_t do_huge_pmd_anonymous_page(struct vm_fault *vmf)
|
||||
return ret;
|
||||
}
|
||||
gfp = vma_thp_gfp_mask(vma);
|
||||
trace_android_vh_customize_pmd_gfp_bypass(&gfp, &bypass);
|
||||
if (bypass)
|
||||
return VM_FAULT_FALLBACK;
|
||||
folio = vma_alloc_folio(gfp, HPAGE_PMD_ORDER, vma, haddr, true);
|
||||
if (unlikely(!folio)) {
|
||||
count_vm_event(THP_FAULT_FALLBACK);
|
||||
|
||||
Reference in New Issue
Block a user