mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
ANDROID: vendor_hooks: Add hooks to for free_unref_page_commit
Provide a vendor hook to skip cma-pages to add in pcplist when free_unref_page_commit. The patch is revelant to skip drain_all_pages in alloc_contig_range, the revelant hooks is android_vh_cma_drain_all_pages_bypass which is to avoid to delay in drain pcppages when drain_all_pages. In most case, pcp->high is small so that free-pages with other mt_types can also fill with pcplist full. Bug: 224732340 Bug: 234405962 Signed-off-by: Peifeng Li <lipeifeng@oppo.com> Change-Id: Ifdeeed9f8934d87671ec3fa6787a02675b993082
This commit is contained in:
committed by
Carlos Llamas
parent
c46b91c287
commit
998b760798
@@ -212,6 +212,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_show_max_freq);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_drain_all_pages_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_drain_all_pages_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_pcplist_add_cma_pages_bypass);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_enqueue_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_dequeue_task);
|
||||
|
||||
@@ -33,6 +33,9 @@ DECLARE_HOOK(android_vh_drain_all_pages_bypass,
|
||||
DECLARE_HOOK(android_vh_cma_drain_all_pages_bypass,
|
||||
TP_PROTO(unsigned int migratetype, bool *bypass),
|
||||
TP_ARGS(migratetype, bypass));
|
||||
DECLARE_HOOK(android_vh_pcplist_add_cma_pages_bypass,
|
||||
TP_PROTO(int migratetype, bool *bypass),
|
||||
TP_ARGS(migratetype, bypass));
|
||||
|
||||
#endif /* _TRACE_HOOK_MM_H */
|
||||
|
||||
|
||||
@@ -3508,6 +3508,7 @@ void free_unref_page(struct page *page, unsigned int order)
|
||||
unsigned long flags;
|
||||
unsigned long pfn = page_to_pfn(page);
|
||||
int migratetype;
|
||||
bool pcp_skip_cma_pages = false;
|
||||
|
||||
if (!free_unref_page_prepare(page, pfn, order))
|
||||
return;
|
||||
@@ -3521,7 +3522,10 @@ void free_unref_page(struct page *page, unsigned int order)
|
||||
*/
|
||||
migratetype = get_pcppage_migratetype(page);
|
||||
if (unlikely(migratetype >= MIGRATE_PCPTYPES)) {
|
||||
if (unlikely(is_migrate_isolate(migratetype))) {
|
||||
trace_android_vh_pcplist_add_cma_pages_bypass(migratetype,
|
||||
&pcp_skip_cma_pages);
|
||||
if (unlikely(is_migrate_isolate(migratetype)) ||
|
||||
pcp_skip_cma_pages) {
|
||||
free_one_page(page_zone(page), page, pfn, order, migratetype, FPI_NONE);
|
||||
return;
|
||||
}
|
||||
@@ -3542,6 +3546,7 @@ void free_unref_page_list(struct list_head *list)
|
||||
unsigned long flags, pfn;
|
||||
int batch_count = 0;
|
||||
int migratetype;
|
||||
bool pcp_skip_cma_pages = false;
|
||||
|
||||
/* Prepare pages for freeing */
|
||||
list_for_each_entry_safe(page, next, list, lru) {
|
||||
@@ -3556,7 +3561,10 @@ void free_unref_page_list(struct list_head *list)
|
||||
* comment in free_unref_page.
|
||||
*/
|
||||
migratetype = get_pcppage_migratetype(page);
|
||||
if (unlikely(is_migrate_isolate(migratetype))) {
|
||||
trace_android_vh_pcplist_add_cma_pages_bypass(migratetype,
|
||||
&pcp_skip_cma_pages);
|
||||
if (unlikely(is_migrate_isolate(migratetype)) ||
|
||||
pcp_skip_cma_pages) {
|
||||
list_del(&page->lru);
|
||||
free_one_page(page_zone(page), page, pfn, 0, migratetype, FPI_NONE);
|
||||
continue;
|
||||
|
||||
Reference in New Issue
Block a user