From: Minchan Kim <minchan@kernel.org>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Thierry Reding <thierry.reding@avionic-design.de>,
Marek Szyprowski <m.szyprowski@samsung.com>,
Michal Nazarewicz <mina86@mina86.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
Kyungmin Park <kyungmin.park@samsung.com>,
Mark Brown <broonie@opensource.wolfsonmicro.com>,
Peter Ujfalusi <peter.ujfalusi@ti.com>,
Mel Gorman <mgorman@suse.de>
Subject: Re: CMA broken in next-20120926
Date: Fri, 28 Sep 2012 14:43:30 +0900 [thread overview]
Message-ID: <20120928054330.GA27594@bbox> (raw)
In-Reply-To: <20120927151159.4427fc8f.akpm@linux-foundation.org>
On Thu, Sep 27, 2012 at 03:11:59PM -0700, Andrew Morton wrote:
> On Thu, 27 Sep 2012 13:29:11 +0200
> Thierry Reding <thierry.reding@avionic-design.de> wrote:
>
> > Hi Marek,
> >
> > any idea why CMA might be broken in next-20120926. I see that there
> > haven't been any major changes to CMA itself, but there's been quite a
> > bit of restructuring of various memory allocation bits lately. I wasn't
> > able to track the problem down, though.
> >
> > What I see is this during boot (with CMA_DEBUG enabled):
> >
> > [ 0.266904] cma: dma_alloc_from_contiguous(cma db474f80, count 64, align 6)
> > [ 0.284469] cma: dma_alloc_from_contiguous(): memory range at c09d7000 is busy, retrying
> > [ 0.293648] cma: dma_alloc_from_contiguous(): memory range at c09d7800 is busy, retrying
> > ...
> > [ 2.648619] DMA: failed to allocate 256 KiB pool for atomic coherent allocation
> > ...
> > [ 4.196193] WARNING: at /home/thierry.reding/src/kernel/linux-ipmp.git/arch/arm/mm/dma-mapping.c:485 __alloc_from_pool+0xdc/0x110()
> > [ 4.207988] coherent pool not initialised!
> >
> > So the pool isn't getting initialized properly because CMA can't get at
> > the memory. Do you have any hints as to what might be going on? If it's
> > any help, I started seeing this with next-20120926 and it is in today's
> > next as well.
> >
>
> Bart and Minchan have made recent changes to CMA. Let us cc them.
Hi all,
I have no time now so I look over the problem during short time
so I mighte be wrong. Even I should leave the office soon and
Korea will have long vacation from now on so I will be off by next week.
So it's hard to reach on me.
I hope this patch fixes the bug. If this patch fixes the problem
but has some problem about description or someone has better idea,
feel free to modify and resend to akpm, Please.
Thierry, Could you test below patch?
>From 24a547855fa2bd4212a779cc73997837148310b3 Mon Sep 17 00:00:00 2001
From: Minchan Kim <minchan@kernel.org>
Date: Fri, 28 Sep 2012 14:28:32 +0900
Subject: [PATCH] revert mm: compaction: iron out isolate_freepages_block()
and isolate_freepages_range()
[1] made bug on CMA.
The nr_scanned should be never equal to total_isolated for successful CMA.
This patch reverts part of the patch.
[1] mm: compaction: iron out isolate_freepages_block() and isolate_freepages_range()
Cc: Mel Gorman <mgorman@suse.de>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
mm/compaction.c | 29 ++++++++++++++++-------------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/mm/compaction.c b/mm/compaction.c
index 5037399..7721197 100644
--- a/mm/compaction.c
+++ b/mm/compaction.c
@@ -269,13 +269,14 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
int isolated, i;
struct page *page = cursor;
- nr_scanned++;
if (!pfn_valid_within(blockpfn))
- continue;
+ goto strict_check;
+ nr_scanned++;
+
if (!valid_page)
valid_page = page;
if (!PageBuddy(page))
- continue;
+ goto strict_check;
/*
* The zone lock must be held to isolate freepages.
@@ -296,12 +297,12 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
/* Recheck this is a buddy page under lock */
if (!PageBuddy(page))
- continue;
+ goto strict_check;
/* Found a free page, break it into order-0 pages */
isolated = split_free_page(page);
if (!isolated && strict)
- break;
+ goto strict_check;
total_isolated += isolated;
for (i = 0; i < isolated; i++) {
list_add(&page->lru, freelist);
@@ -313,18 +314,20 @@ static unsigned long isolate_freepages_block(struct compact_control *cc,
blockpfn += isolated - 1;
cursor += isolated - 1;
}
+
+ continue;
+
+strict_check:
+ /* Abort isolation if the caller requested strict isolation */
+ if (strict) {
+ total_isolated = 0;
+ goto out;
+ }
}
trace_mm_compaction_isolate_freepages(nr_scanned, total_isolated);
- /*
- * If strict isolation is requested by CMA then check that all the
- * pages scanned were isolated. If there were any failures, 0 is
- * returned and CMA will fail.
- */
- if (strict && nr_scanned != total_isolated)
- total_isolated = 0;
-
+out:
if (locked)
spin_unlock_irqrestore(&cc->zone->lock, flags);
--
1.7.9.5
>
>
> --
> To unsubscribe, send a message with 'unsubscribe linux-mm' in
> the body to majordomo@kvack.org. For more info on Linux MM,
> see: http://www.linux-mm.org/ .
> Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
--
Kind regards,
Minchan Kim
next prev parent reply other threads:[~2012-09-28 5:40 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-09-27 11:29 CMA broken in next-20120926 Thierry Reding
2012-09-27 15:59 ` Marek Szyprowski
2012-09-27 17:49 ` Mark Brown
2012-09-27 22:11 ` Andrew Morton
2012-09-28 5:43 ` Minchan Kim [this message]
2012-09-28 6:10 ` Thierry Reding
2012-09-28 7:44 ` Peter Ujfalusi
2012-09-28 7:56 ` Mel Gorman
2012-09-28 8:09 ` Mel Gorman
2012-09-28 8:37 ` Mel Gorman
2012-09-28 8:48 ` Peter Ujfalusi
2012-09-28 10:27 ` Mel Gorman
2012-09-28 10:32 ` Thierry Reding
2012-09-28 10:38 ` Thierry Reding
2012-09-28 10:51 ` Thierry Reding
2012-09-28 11:07 ` Mel Gorman
2012-09-28 11:39 ` Thierry Reding
2012-09-28 12:43 ` Mel Gorman
2012-10-01 14:24 ` Thierry Reding
2012-10-02 12:48 ` Thierry Reding
2012-10-02 14:41 ` Mel Gorman
2012-10-02 15:03 ` Thierry Reding
2012-10-02 15:12 ` Mel Gorman
2012-10-08 8:06 ` Minchan Kim
2012-10-08 8:48 ` Mel Gorman
2012-10-09 8:40 ` Bartlomiej Zolnierkiewicz
2012-10-09 10:11 ` Mel Gorman
2012-10-09 11:02 ` Thierry Reding
2012-10-09 11:08 ` Bartlomiej Zolnierkiewicz
2012-10-09 11:32 ` Mel Gorman
2012-10-09 11:38 ` Thierry Reding
2012-09-28 10:52 ` Mel Gorman
2012-10-04 14:00 ` [PATCH] mm: compaction: Iron out isolate_freepages_block() and isolate_freepages_range() -fix1 Mel Gorman
2012-10-05 9:59 ` [PATCH] mm: compaction: Iron out isolate_freepages_block() and isolate_freepages_range() -fix2 Mel Gorman
2012-10-08 6:50 ` Minchan Kim
2012-10-08 6:53 ` [PATCH] mm: compaction: Iron out isolate_freepages_block() and isolate_freepages_range() -fix1 Minchan Kim
2012-10-04 14:03 ` [PATCH] mm: compaction: Cache if a pageblock was scanned and no pages were isolated -fix3 Mel Gorman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120928054330.GA27594@bbox \
--to=minchan@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=b.zolnierkie@samsung.com \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=kyungmin.park@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=m.szyprowski@samsung.com \
--cc=mgorman@suse.de \
--cc=mina86@mina86.com \
--cc=peter.ujfalusi@ti.com \
--cc=thierry.reding@avionic-design.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox