From: Andrew Morton <akpm@linux-foundation.org>
To: mikko.cal@gmail.com
Cc: thellstrom@vmware.com, devnull@plzk.org,
bugzilla-daemon@bugzilla.kernel.org,
dri-devel@lists.freedesktop.org, Dave Airlie <airlied@redhat.com>
Subject: Re: [Bug 16148] page allocation failure. order:1, mode:0x50d0
Date: Tue, 15 Jun 2010 15:41:38 -0700 [thread overview]
Message-ID: <20100615154138.11622d81.akpm@linux-foundation.org> (raw)
In-Reply-To: <201006131301.o5DD1vqb002755@demeter.kernel.org>
(switched to email. Please respond via emailed reply-to-all, not via the
bugzilla web interface).
(switching back to email, actually)
On Sun, 13 Jun 2010 13:01:57 GMT
bugzilla-daemon@bugzilla.kernel.org wrote:
> https://bugzilla.kernel.org/show_bug.cgi?id=16148
>
>
> Mikko C. <mikko.cal@gmail.com> changed:
>
> What |Removed |Added
> ----------------------------------------------------------------------------
> CC| |mikko.cal@gmail.com
>
>
>
>
> --- Comment #8 from Mikko C. <mikko.cal@gmail.com> 2010-06-13 13:01:53 ---
> I have been getting this with 2.6.35-rc2 and rc3.
> Could it be the same problem?
>
>
> X: page allocation failure. order:0, mode:0x4
> Pid: 1514, comm: X Not tainted 2.6.35-rc3 #1
> Call Trace:
> [<ffffffff8108ce49>] ? __alloc_pages_nodemask+0x629/0x680
> [<ffffffff8108c920>] ? __alloc_pages_nodemask+0x100/0x680
> [<ffffffffa00db8f3>] ? ttm_get_pages+0x2c3/0x448 [ttm]
> [<ffffffffa00d4658>] ? __ttm_tt_get_page+0x98/0xc0 [ttm]
> [<ffffffffa00d4988>] ? ttm_tt_populate+0x48/0x90 [ttm]
> [<ffffffffa00d4a26>] ? ttm_tt_bind+0x56/0xa0 [ttm]
> [<ffffffffa00d5230>] ? ttm_bo_handle_move_mem+0x1d0/0x430 [ttm]
> [<ffffffffa00d76d6>] ? ttm_bo_move_buffer+0x166/0x180 [ttm]
> [<ffffffffa00b9736>] ? drm_mm_kmalloc+0x26/0xc0 [drm]
> [<ffffffff81030ea9>] ? get_parent_ip+0x9/0x20
> [<ffffffffa00d7786>] ? ttm_bo_validate+0x96/0x130 [ttm]
> [<ffffffffa00d7b35>] ? ttm_bo_init+0x315/0x390 [ttm]
> [<ffffffffa0122eb8>] ? radeon_bo_create+0x118/0x210 [radeon]
> [<ffffffffa0122fb0>] ? radeon_ttm_bo_destroy+0x0/0xb0 [radeon]
> [<ffffffffa013704c>] ? radeon_gem_object_create+0x8c/0x110 [radeon]
> [<ffffffffa013711f>] ? radeon_gem_create_ioctl+0x4f/0xe0 [radeon]
> [<ffffffffa00b10e6>] ? drm_ioctl+0x3d6/0x470 [drm]
> [<ffffffffa01370d0>] ? radeon_gem_create_ioctl+0x0/0xe0 [radeon]
> [<ffffffff810b965f>] ? do_sync_read+0xbf/0x100
> [<ffffffff810c8965>] ? vfs_ioctl+0x35/0xd0
> [<ffffffff810c8b28>] ? do_vfs_ioctl+0x88/0x530
> [<ffffffff81031ed7>] ? sub_preempt_count+0x87/0xb0
> [<ffffffff810c9019>] ? sys_ioctl+0x49/0x80
> [<ffffffff810ba4fe>] ? sys_read+0x4e/0x90
> [<ffffffff810024ab>] ? system_call_fastpath+0x16/0x1b
That's different. ttm_get_pages() looks pretty busted to me. It's not
using __GFP_WAIT and it's not using __GFP_FS. It's using a plain
GFP_DMA32 so it's using atomic allocations even though it doesn't need
to. IOW, it's shooting itself in the head.
Given that it will sometimes use GFP_HIGHUSER which includes __GFP_FS
and __GFP_WAIT, I assume it can always include __GFP_FS and __GFP_WAIT.
If so, it should very much do so. If not then the function is
misdesigned and should be altered to take a gfp_t argument so the
caller can tell ttm_get_pages() which is the strongest allocation mode
which it may use.
> [TTM] Unable to allocate page.
> radeon 0000:01:05.0: object_init failed for (7827456, 0x00000002)
> [drm:radeon_gem_object_create] *ERROR* Failed to allocate GEM object (7827456,
> 2, 4096, -12)
This bug actually broke stuff for you.
Something like this:
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c~a
+++ a/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -677,7 +677,7 @@ int ttm_get_pages(struct list_head *page
/* No pool for cached pages */
if (pool == NULL) {
if (flags & TTM_PAGE_FLAG_DMA32)
- gfp_flags |= GFP_DMA32;
+ gfp_flags |= GFP_KERNEL|GFP_DMA32;
else
gfp_flags |= GFP_HIGHUSER;
_
although I wonder whether it should be using pool->gfp_flags.
It's a shame that this code was developed and merged in secret :( Had
we known, we could have looked at enhancing mempools to cover the
requirement, or at implementing this in some generic fashion rather
than hiding it down in drivers/gpu/drm.
next prev parent reply other threads:[~2010-06-15 22:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <bug-16148-27@https.bugzilla.kernel.org/>
2010-06-10 22:38 ` [Bug 16148] New: page allocation failure. order:1, mode:0x50d0 Andrew Morton
2010-06-10 23:15 ` Dave Airlie
2010-06-11 8:46 ` Thomas Hellstrom
2010-06-11 17:24 ` Andrew Morton
2010-06-11 20:22 ` Thomas Hellstrom
2010-06-11 20:37 ` Andrew Morton
2010-06-11 21:39 ` Thomas Hellstrom
[not found] ` <201006131301.o5DD1vqb002755@demeter.kernel.org>
2010-06-15 22:41 ` Andrew Morton [this message]
2010-06-15 22:57 ` [Bug 16148] " Dave Airlie
2010-06-16 13:54 ` 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=20100615154138.11622d81.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=airlied@redhat.com \
--cc=bugzilla-daemon@bugzilla.kernel.org \
--cc=devnull@plzk.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=mikko.cal@gmail.com \
--cc=thellstrom@vmware.com \
/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