|
@@ -51,6 +51,7 @@
|
|
|
#include <asm/numa.h>
|
|
#include <asm/numa.h>
|
|
|
#include <asm/cacheflush.h>
|
|
#include <asm/cacheflush.h>
|
|
|
#include <asm/init.h>
|
|
#include <asm/init.h>
|
|
|
|
|
+#include <asm/setup.h>
|
|
|
|
|
|
|
|
static int __init parse_direct_gbpages_off(char *arg)
|
|
static int __init parse_direct_gbpages_off(char *arg)
|
|
|
{
|
|
{
|
|
@@ -293,18 +294,18 @@ void __init init_extra_mapping_uc(unsigned long phys, unsigned long size)
|
|
|
* to the compile time generated pmds. This results in invalid pmds up
|
|
* to the compile time generated pmds. This results in invalid pmds up
|
|
|
* to the point where we hit the physaddr 0 mapping.
|
|
* to the point where we hit the physaddr 0 mapping.
|
|
|
*
|
|
*
|
|
|
- * We limit the mappings to the region from _text to _end. _end is
|
|
|
|
|
- * rounded up to the 2MB boundary. This catches the invalid pmds as
|
|
|
|
|
|
|
+ * We limit the mappings to the region from _text to _brk_end. _brk_end
|
|
|
|
|
+ * is rounded up to the 2MB boundary. This catches the invalid pmds as
|
|
|
* well, as they are located before _text:
|
|
* well, as they are located before _text:
|
|
|
*/
|
|
*/
|
|
|
void __init cleanup_highmap(void)
|
|
void __init cleanup_highmap(void)
|
|
|
{
|
|
{
|
|
|
unsigned long vaddr = __START_KERNEL_map;
|
|
unsigned long vaddr = __START_KERNEL_map;
|
|
|
- unsigned long end = roundup((unsigned long)_end, PMD_SIZE) - 1;
|
|
|
|
|
|
|
+ unsigned long vaddr_end = __START_KERNEL_map + (max_pfn_mapped << PAGE_SHIFT);
|
|
|
|
|
+ unsigned long end = roundup((unsigned long)_brk_end, PMD_SIZE) - 1;
|
|
|
pmd_t *pmd = level2_kernel_pgt;
|
|
pmd_t *pmd = level2_kernel_pgt;
|
|
|
- pmd_t *last_pmd = pmd + PTRS_PER_PMD;
|
|
|
|
|
|
|
|
|
|
- for (; pmd < last_pmd; pmd++, vaddr += PMD_SIZE) {
|
|
|
|
|
|
|
+ for (; vaddr + PMD_SIZE - 1 < vaddr_end; pmd++, vaddr += PMD_SIZE) {
|
|
|
if (pmd_none(*pmd))
|
|
if (pmd_none(*pmd))
|
|
|
continue;
|
|
continue;
|
|
|
if (vaddr < (unsigned long) _text || vaddr > end)
|
|
if (vaddr < (unsigned long) _text || vaddr > end)
|