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 Signed-off-by: Peifeng Li <lipeifeng@oppo.com> Change-Id: Ifdeeed9f8934d87671ec3fa6787a02675b993082
This commit is contained in:

committed by
Suren Baghdasaryan

parent
a2485b8abd
commit
cb7c1a4c78
@@ -294,6 +294,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_shrink_slab_bypass);
|
|||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_page_referenced_check_bypass);
|
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_drain_all_pages_bypass);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cma_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_psi_event);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_event);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
|
||||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
|
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
|
||||||
|
@@ -125,6 +125,9 @@ DECLARE_HOOK(android_vh_drain_all_pages_bypass,
|
|||||||
DECLARE_HOOK(android_vh_cma_drain_all_pages_bypass,
|
DECLARE_HOOK(android_vh_cma_drain_all_pages_bypass,
|
||||||
TP_PROTO(unsigned int migratetype, bool *bypass),
|
TP_PROTO(unsigned int migratetype, bool *bypass),
|
||||||
TP_ARGS(migratetype, bypass));
|
TP_ARGS(migratetype, bypass));
|
||||||
|
DECLARE_HOOK(android_vh_pcplist_add_cma_pages_bypass,
|
||||||
|
TP_PROTO(int migratetype, bool *bypass),
|
||||||
|
TP_ARGS(migratetype, bypass));
|
||||||
struct device;
|
struct device;
|
||||||
DECLARE_HOOK(android_vh_subpage_dma_contig_alloc,
|
DECLARE_HOOK(android_vh_subpage_dma_contig_alloc,
|
||||||
TP_PROTO(bool *allow_subpage_alloc, struct device *dev, size_t *size),
|
TP_PROTO(bool *allow_subpage_alloc, struct device *dev, size_t *size),
|
||||||
|
@@ -3301,6 +3301,7 @@ static void free_unref_page_commit(struct page *page, unsigned long pfn)
|
|||||||
struct zone *zone = page_zone(page);
|
struct zone *zone = page_zone(page);
|
||||||
struct per_cpu_pages *pcp;
|
struct per_cpu_pages *pcp;
|
||||||
int migratetype;
|
int migratetype;
|
||||||
|
bool pcp_skip_cma_pages = false;
|
||||||
|
|
||||||
migratetype = get_pcppage_migratetype(page);
|
migratetype = get_pcppage_migratetype(page);
|
||||||
__count_vm_event(PGFREE);
|
__count_vm_event(PGFREE);
|
||||||
@@ -3313,7 +3314,10 @@ static void free_unref_page_commit(struct page *page, unsigned long pfn)
|
|||||||
* excessively into the page allocator
|
* excessively into the page allocator
|
||||||
*/
|
*/
|
||||||
if (migratetype >= MIGRATE_PCPTYPES) {
|
if (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(zone, page, pfn, 0, migratetype,
|
free_one_page(zone, page, pfn, 0, migratetype,
|
||||||
FPI_NONE);
|
FPI_NONE);
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user