Bad page about page->flag 0xa(error|uptodate) when get_page_from_freelist

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi all:
there is a Bad page happen on my platform like below:
(the first line is the message I purposely add in __rmqueue to report
the order and migrtype)

__rmqueue :  order= 0, migratetype = 2
BUG: Bad page state in process TSK_MID_SI  pfn:1a780
page:c0c00000 count:0 mapcount:0 mapping:  (null) index:0x2
page flags: 0xa(error|uptodate)
Modules linked in: mtu_sta(O) mali(O) ump(O) kteeclient(O) ndptsd(O)
ndpci(O) ndpdemod(O) ndptuner(O) ndphdmiswitch(O) ndphdmi(O) ndp_pq(O)
ndpcodec(O) ndpalsa(O)
ndpextin(O) ndpdrm(O) driver(O) fusion(O) PreInit(O)
CPU: 1 PID: 1643 Comm: TSK_MID_SI Tainted: G           O 3.10.0+ #7
Backtrace:
[<c0012ad4>] (dump_backtrace+0x0/0x114) from [<c0012d44>] (show_stack+0x20/0x24)
 r6:c0c00000 r5:c07760c0 r4:c08cbe08 r3:271ae71c
[<c0012d24>] (show_stack+0x0/0x24) from [<c0542508>] (dump_stack+0x24/0x28)
[<c05424e4>] (dump_stack+0x0/0x28) from [<c010e080>] (bad_page+0xc4/0x114)
[<c010dfbc>] (bad_page+0x0/0x114) from [<c010e6b0>]
(get_page_from_freelist+0x458/0x6c0)
 r6:0155f000 r5:c0c00000 r4:c0776640 r3:00000000
[<c010e258>] (get_page_from_freelist+0x0/0x6c0) from [<c010f63c>]
(__alloc_pages_nodemask+0x128/0x9a4)
[<c010f514>] (__alloc_pages_nodemask+0x0/0x9a4) from [<c012b37c>]
(do_wp_page+0xd0/0x74c)
[<c012b2ac>] (do_wp_page+0x0/0x74c) from [<c012cef4>]
(handle_pte_fault+0x41c/0x6b0)
[<c012cad8>] (handle_pte_fault+0x0/0x6b0) from [<c012d214>]
(handle_mm_fault+0x8c/0xbc)
[<c012d188>] (handle_mm_fault+0x0/0xbc) from [<c054858c>]
(do_page_fault+0x310/0x428)
[<c054827c>] (do_page_fault+0x0/0x428) from [<c0008424>]
(do_DataAbort+0x48/0xac)
[<c00083dc>] (do_DataAbort+0x0/0xac) from [<c054691c>] (__dabt_usr+0x3c/0x40)
 Exception stack(0xe4861fb0 to 0xe4861ff8)
 1fa0:                                     a582ac34 00000002 00000000 00000002
 1fc0: a582b4d4 a582b450 000003e8 00000000 00000061 a582af90 a582b450 00000000
 1fe0: 00000000 a582ac30 b41b12ab b41dd184 600d0170 ffffffff 00000000
  r8:00000061
 r7:00000000 r6:ffffffff r5:600d0170 r4:b41dd184

I list my platform paramter like below
1. Arm cortex A9 SMP 2 cores
2. kernel version is 3.10


What makes me curious are
1. evety time Bad page happen, it is always the same page, pfn= 1a780.
2. in my case, the page that is reported as bad page, is allocated
from __rmqueue_fallback.
    Why there will be PG_error put in buddy and marked as free for
later allocation?
3. Why we don't put PG_error in PAGE_FLAGS_CHECK_AT_FREE?
    as far as I know, PG_error means error ever occurs during an I/O
operation involving the page.
    Does that mean even the page gets I/O error, we still can put it
as free one before any proper handling?
4. why we need to check_new_page with PG_error, if we don't care it in
free_pages_check?
5. If I try to add more debug message in __rmqueue_fallback the bad
page report will NOT happen.
from #5,it seems some race condition happen for page management.
Is there other debug methods, suggestions or need I provide more
information to check this kind of problem?

appreciate all your kind help in advance,

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]