Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 99412
b: refs/heads/master
c: 65280e6
h: refs/heads/master
v: v3
  • Loading branch information
Thomas Gleixner authored and Ingo Molnar committed Jul 8, 2008
1 parent 6c46dcc commit 80a07e6
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: ce0c0e50f94e8c55b00a722e8c6e8d6c802be211
refs/heads/master: 65280e613fada41704f35709b6c8952ca4b8750c
48 changes: 26 additions & 22 deletions trunk/arch/x86/mm/pageattr.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,18 +34,40 @@ struct cpa_data {
unsigned force_split : 1;
};

#ifdef CONFIG_PROC_FS
static unsigned long direct_pages_count[PG_LEVEL_NUM];

void __meminit update_page_count(int level, unsigned long pages)
void update_page_count(int level, unsigned long pages)
{
#ifdef CONFIG_PROC_FS
unsigned long flags;

/* Protect against CPA */
spin_lock_irqsave(&pgd_lock, flags);
direct_pages_count[level] += pages;
spin_unlock_irqrestore(&pgd_lock, flags);
}

static void split_page_count(int level)
{
direct_pages_count[level]--;
direct_pages_count[level - 1] += PTRS_PER_PTE;
}

int arch_report_meminfo(char *page)
{
int n = sprintf(page, "DirectMap4k: %8lu\n"
"DirectMap2M: %8lu\n",
direct_pages_count[PG_LEVEL_4K],
direct_pages_count[PG_LEVEL_2M]);
#ifdef CONFIG_X86_64
n += sprintf(page + n, "DirectMap1G: %8lu\n",
direct_pages_count[PG_LEVEL_1G]);
#endif
return n;
}
#else
static inline void split_page_count(int level) { }
#endif

#ifdef CONFIG_X86_64

Expand Down Expand Up @@ -514,10 +536,8 @@ static int split_large_page(pte_t *kpte, unsigned long address)
set_pte(&pbase[i], pfn_pte(pfn, ref_prot));

if (address >= (unsigned long)__va(0) &&
address < (unsigned long)__va(max_pfn_mapped << PAGE_SHIFT)) {
direct_pages_count[level]--;
direct_pages_count[level - 1] += PTRS_PER_PTE;
}
address < (unsigned long)__va(max_pfn_mapped << PAGE_SHIFT))
split_page_count(level);

/*
* Install the new, split up pagetable. Important details here:
Expand Down Expand Up @@ -1048,22 +1068,6 @@ bool kernel_page_present(struct page *page)

#endif /* CONFIG_DEBUG_PAGEALLOC */

#ifdef CONFIG_PROC_FS
int arch_report_meminfo(char *page)
{
int n;
n = sprintf(page, "DirectMap4k: %8lu\n"
"DirectMap2M: %8lu\n",
direct_pages_count[PG_LEVEL_4K],
direct_pages_count[PG_LEVEL_2M]);
#ifdef CONFIG_X86_64
n += sprintf(page + n, "DirectMap1G: %8lu\n",
direct_pages_count[PG_LEVEL_1G]);
#endif
return n;
}
#endif

/*
* The testcases use internal knowledge of the implementation that shouldn't
* be exposed to the rest of the kernel. Include these directly here.
Expand Down
6 changes: 5 additions & 1 deletion trunk/include/asm-x86/pgtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -372,7 +372,11 @@ enum {
PG_LEVEL_NUM
};

void update_page_count(int level, unsigned long pages);
#ifdef CONFIG_PROC_FS
extern void update_page_count(int level, unsigned long pages);
#else
static inline void update_page_count(int level, unsigned long pages) { }
#endif

/*
* Helper function that returns the kernel pagetable entry controlling
Expand Down

0 comments on commit 80a07e6

Please sign in to comment.