[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <1413430551-22392-5-git-send-email-zhuhui@xiaomi.com>
Date: Thu, 16 Oct 2014 11:35:51 +0800
From: Hui Zhu <zhuhui@...omi.com>
To: <rjw@...ysocki.net>, <len.brown@...el.com>, <pavel@....cz>,
<m.szyprowski@...sung.com>, <akpm@...ux-foundation.org>,
<mina86@...a86.com>, <aneesh.kumar@...ux.vnet.ibm.com>,
<iamjoonsoo.kim@....com>, <hannes@...xchg.org>, <riel@...hat.com>,
<mgorman@...e.de>, <minchan@...nel.org>, <nasa4836@...il.com>,
<ddstreet@...e.org>, <hughd@...gle.com>, <mingo@...nel.org>,
<rientjes@...gle.com>, <peterz@...radead.org>,
<keescook@...omium.org>, <atomlin@...hat.com>, <raistlin@...ux.it>,
<axboe@...com>, <paulmck@...ux.vnet.ibm.com>,
<kirill.shutemov@...ux.intel.com>, <n-horiguchi@...jp.nec.com>,
<k.khlebnikov@...sung.com>, <msalter@...hat.com>, <deller@....de>,
<tangchen@...fujitsu.com>, <ben@...adent.org.uk>,
<akinobu.mita@...il.com>, <lauraa@...eaurora.org>,
<vbabka@...e.cz>, <sasha.levin@...cle.com>,
<vdavydov@...allels.com>, <suleiman@...gle.com>
CC: <linux-kernel@...r.kernel.org>, <linux-pm@...r.kernel.org>,
<linux-mm@...ck.org>, Hui Zhu <zhuhui@...omi.com>
Subject: [PATCH 4/4] (CMA_AGGRESSIVE) Update page alloc function
If page alloc function __rmqueue try to get pages from MIGRATE_MOVABLE and
conditions (cma_alloc_counter, cma_aggressive_free_min, cma_alloc_counter)
allow, MIGRATE_CMA will be allocated as MIGRATE_MOVABLE first.
Signed-off-by: Hui Zhu <zhuhui@...omi.com>
---
mm/page_alloc.c | 42 +++++++++++++++++++++++++++++++-----------
1 file changed, 31 insertions(+), 11 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 736d8e1..87bc326 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -65,6 +65,10 @@
#include <asm/div64.h>
#include "internal.h"
+#ifdef CONFIG_CMA_AGGRESSIVE
+#include <linux/cma.h>
+#endif
+
/* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields */
static DEFINE_MUTEX(pcp_batch_high_lock);
#define MIN_PERCPU_PAGELIST_FRACTION (8)
@@ -1189,20 +1193,36 @@ static struct page *__rmqueue(struct zone *zone, unsigned int order,
{
struct page *page;
-retry_reserve:
+#ifdef CONFIG_CMA_AGGRESSIVE
+ if (cma_aggressive_switch
+ && migratetype == MIGRATE_MOVABLE
+ && atomic_read(&cma_alloc_counter) == 0
+ && global_page_state(NR_FREE_CMA_PAGES) > cma_aggressive_free_min
+ + (1 << order))
+ migratetype = MIGRATE_CMA;
+#endif
+retry:
page = __rmqueue_smallest(zone, order, migratetype);
- if (unlikely(!page) && migratetype != MIGRATE_RESERVE) {
- page = __rmqueue_fallback(zone, order, migratetype);
+ if (unlikely(!page)) {
+#ifdef CONFIG_CMA_AGGRESSIVE
+ if (migratetype == MIGRATE_CMA) {
+ migratetype = MIGRATE_MOVABLE;
+ goto retry;
+ }
+#endif
+ if (migratetype != MIGRATE_RESERVE) {
+ page = __rmqueue_fallback(zone, order, migratetype);
- /*
- * Use MIGRATE_RESERVE rather than fail an allocation. goto
- * is used because __rmqueue_smallest is an inline function
- * and we want just one call site
- */
- if (!page) {
- migratetype = MIGRATE_RESERVE;
- goto retry_reserve;
+ /*
+ * Use MIGRATE_RESERVE rather than fail an allocation.
+ * goto is used because __rmqueue_smallest is an inline
+ * function and we want just one call site
+ */
+ if (!page) {
+ migratetype = MIGRATE_RESERVE;
+ goto retry;
+ }
}
}
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists