From: Konrad Eisele <konrad@gaisler.com>
To: sparclinux@vger.kernel.org
Subject: nocache/highmem mapping
Date: Tue, 06 Oct 2009 15:35:24 +0000 [thread overview]
Message-ID: <4ACB63BC.90200@gaisler.com> (raw)
Hi,
We encountered something strange for out Sparc-Leon arch,
and would like to ask weather someone can clarify:
When running on a board with 512 MB we encountered
difficulties in highmem (256MB works ok). We could only
solve this problem by redefining the strange SRMMU_MAX_NOCACHE_PAGES
to a multiple of PMD_SIZE (0x400000)
-#define SRMMU_MAX_NOCACHE_PAGES (1280)
+#define SRMMU_MAX_NOCACHE_PAGES (1024)
So we would like to ask why is this the case only for Leon-Sparc,
Obviously other sun machines work well (maybe I'm wrong...)
Here is what we digged out:
The virtual address regions with 512 MB ram and
#define SRMMU_MAX_NOCACHE_PAGES (1280)
are:
0xfc0000000 - 0xfc5000000 : nocache mem
0xfc5000000 - 0xfc9000000 : highmem
however srmmu_nocache_init()->srmmu_early_allocate_ptable_skeleton()
initializes the the page skelleton in steps of:
...
while(start < end) {
...
start = (start + PMD_SIZE) & PMD_MASK;
}
...
PMD_SIZE is 0x4000000, that means it will will initilize
0xfc0000000 - 0xfc4000000 and
0xfc4000000 - 0xfc8000000
before it breaks.
But this leaves highmem's front region
0xfc5000000 - 0xfc8000000 allocated with a
skelleton (!).
The effect is that srmmu_paging_init()'s:
...
pgd = pgd_offset_k(PKMAP_BASE);
pmd = srmmu_pmd_offset(pgd, PKMAP_BASE);
pte = srmmu_pte_offset(pmd, PKMAP_BASE);
pkmap_page_table = pte;
...
pkmap_page_table will end up with the pte-ptd-set that nocache
has allocated, highmem's mm/highmem.c:map_new_virtual()
...
set_pte_at(&init_mm, vaddr,
&(pkmap_page_table[last_pkmap_nr]), mk_pte(page, kmap_prot));
...
will fail starting from v-address 0xfc800000.
The root of evil is vaddrs.h's strange:
...
#define SRMMU_MAX_NOCACHE_PAGES (1280)
...
We had to change it to
#define SRMMU_MAX_NOCACHE_PAGES (1024) (PMD_SIZE size multiple (0x400000))
I'm not shure why this is the case only on our machines.
Maybe I am missing something.
-- Konrad
next reply other threads:[~2009-10-06 15:35 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-06 15:35 Konrad Eisele [this message]
2009-10-07 12:01 ` nocache/highmem mapping David Miller
2009-11-02 10:45 ` David Miller
2009-11-02 12:28 ` David Miller
2009-11-02 12:33 ` Konrad Eisele
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=4ACB63BC.90200@gaisler.com \
--to=konrad@gaisler.com \
--cc=sparclinux@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.