Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.1:kernel-2.6.32
xen
19631-x86-frametable-map.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 19631-x86-frametable-map.patch of Package xen
# HG changeset patch # User Keir Fraser <keir.fraser@citrix.com> # Date 1242830132 -3600 # Node ID cafab208441018ca2d7f4f0b015b647b2a9cb4fc # Parent 1695a86b3d7c161a45dbc4b42446b07f87b281fc x86: don't map more than the allocated space for frame_table This is to avoid undue virtual address aliases in case the over-mapped pages happen to get allocated to a domain, and then get their cacheability attributes changed. At the same time, use 1Gb mappings if possible and reasonable. Signed-off-by: Jan Beulich <jbeulich@novell.com> --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -154,7 +154,7 @@ static DEFINE_PER_CPU(struct percpu_mm_i struct domain *dom_xen, *dom_io; /* Frame table and its size in pages. */ -struct page_info *frame_table; +struct page_info *__read_mostly frame_table; unsigned long max_page; unsigned long total_pages; @@ -189,11 +189,18 @@ void __init init_frametable(void) frame_table = (struct page_info *)FRAMETABLE_VIRT_START; nr_pages = PFN_UP(max_page * sizeof(*frame_table)); - page_step = (1 << L2_PAGETABLE_SHIFT) >> PAGE_SHIFT; + page_step = 1 << (cpu_has_page1gb ? L3_PAGETABLE_SHIFT - PAGE_SHIFT + : L2_PAGETABLE_SHIFT - PAGE_SHIFT); for ( i = 0; i < nr_pages; i += page_step ) { - mfn = alloc_boot_pages(min(nr_pages - i, page_step), page_step); + /* + * The hardcoded 4 below is arbitrary - just pick whatever you think + * is reasonable to waste as a trade-off for using a large page. + */ + while (nr_pages + 4 - i < page_step) + page_step >>= PAGETABLE_ORDER; + mfn = alloc_boot_pages(page_step, page_step); if ( mfn == 0 ) panic("Not enough memory for frame table\n"); map_pages_to_xen(
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor