From: Andi Kleen <ak@muc.de>
To: Takao Indoh <indou.takao@soft.fujitsu.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/4][diskdump] x86-64 support
Date: Sat, 28 Aug 2004 16:13:10 +0200 [thread overview]
Message-ID: <m3r7prcpvt.fsf@averell.firstfloor.org> (raw)
In-Reply-To: <2y80v-1lR-13@gated-at.bofh.it> (Takao Indoh's message of "Sat, 28 Aug 2004 11:50:07 +0200")
Takao Indoh <indou.takao@soft.fujitsu.com> writes:
Hallo,
> Hi all,
>
> Here is the latest diskdump patch for kernel 2.6.8.1.
>
> - Supports x86_64
Thanks for doing this work.
> When I tested diskdump on x86-64 machine, I found that memory dump of
> the following two areas failed.
>
> 1) 04000000 - 07ffffff
> 2) around last two page
>
> Memory dump of the area 2) failed because page->flag was broken.
Broken in what way? That should probably just be fixed in the core
kernel.
> So I compare PFN to page_to_pfn(pfn_to_page(PFN)) and skip this PFN
> if these value is different.
>
> page = pfn_to_page(nr);
> if (nr != page_to_pfn(page)) {
> /* page_to_pfn() is called from kmap_atomic().
> * If page->flag is broken, it specified a wrong
> * zone and it causes kmap_atomic() fail.
> */
> Err("Bad page. PFN %lu flags %lx\n",
> nr, (unsigned long)page->flags);
> memset(scratch + blk_in_chunk * PAGE_SIZE, 0,
> PAGE_SIZE);
> sprintf(scratch + blk_in_chunk * PAGE_SIZE,
> "Bad page. PFN %lu flags %lx\n",
> nr, (unsigned long)page->flags);
> goto write;
> }
>
>
> Memory dump of the area 1) failed because this area was not mapped to
> vaddr. Diskdump checks page using page_is_ram() and maps it using
Yes, this is done intentionally because the IOMMU is not 100% cache
coherent in the way Linux uses it and accesses to the aperture
area by the CPU are not allowed. To prevent mistakes or the CPU
prefetching by its own into it it is unmapped.
SLAB DEBUG can cause the same thing and even on other architectures, so
you really need to handle it generically.
> kmap_atomic(). In the area 1), both page_is_ram() and kmap_atomic()
> return true, but page is not attached to the page table.
kmap_atomic() on 64bit always just returns the pointer, it's a nop.
Even on 32bit it cannot fail.
> I think this area is AGP Aperture. I found this message in the dmesg.
>
> PCI-DMA: Disabling AGP.
> PCI-DMA: aperture base @ 4000000 size 65536 KB
> PCI-DMA: Reserving 64MB of IOMMU area in the AGP aperture
>
> To resolve this problem, I check page using kern_addr_valid() before
> kmap_atomic().
kern_addr_valid is probably not a bad way to solve it, although it is
a bit costly.
When the page is not mapped you could always map it on your own with
ioremap(), but that address cannot be used for any DMA, so it
may not work. Skipping them is probably ok.
-Andi
next parent reply other threads:[~2004-08-28 14:13 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <2y80v-1lR-13@gated-at.bofh.it>
2004-08-28 14:13 ` Andi Kleen [this message]
2004-08-31 9:08 ` [PATCH 0/4][diskdump] x86-64 support Takao Indoh
2004-09-03 9:40 ` Takao Indoh
2004-08-28 9:43 Takao Indoh
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=m3r7prcpvt.fsf@averell.firstfloor.org \
--to=ak@muc.de \
--cc=indou.takao@soft.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
/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