aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2013-01-17 10:56:34 +0100
committerJan Beulich <jbeulich@suse.com>2013-01-17 10:56:34 +0100
commitcda084b3d8901dab95f22aa6047e103e1032d486 (patch)
tree1667d5ddff071a9be2a3be8d57237cebc3dd2d34
parent39bc4673785f6455242f514ea0fa9359bdf1639c (diff)
downloadxen-cda084b3d8901dab95f22aa6047e103e1032d486.tar.gz
xen-cda084b3d8901dab95f22aa6047e103e1032d486.tar.bz2
xen-cda084b3d8901dab95f22aa6047e103e1032d486.zip
miscellaneous cleanup
... noticed while putting together the 16Tb support patches for x86. Briefly, this (in order of the changes below) - fixes an inefficiency in x86's context switch code (translations to/ from struct page are more involved than to/from MFNs) - drop unnecessary MFM-to-page conversions - drop a redundant call to destroy_xen_mappings() (an indentical call is being made a few lines up) - simplify a VA-to-MFN translation - drop dead code (several occurrences) - add a missing __init annotation Signed-off-by: Jan Beulich <jbeulich@suse.com> Acked-by: Keir Fraser <keir@xen.org>
-rw-r--r--xen/arch/x86/domain.c4
-rw-r--r--xen/arch/x86/x86_64/mm.c27
-rw-r--r--xen/common/domctl.c2
-rw-r--r--xen/include/asm-arm/mm.h1
-rw-r--r--xen/include/asm-x86/config.h4
-rw-r--r--xen/include/asm-x86/mm.h1
-rw-r--r--xen/include/asm-x86/page.h12
-rw-r--r--xen/xsm/xsm_policy.c5
8 files changed, 17 insertions, 39 deletions
diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c
index a40a95077b..a1e16887ef 100644
--- a/xen/arch/x86/domain.c
+++ b/xen/arch/x86/domain.c
@@ -1512,12 +1512,12 @@ static void __context_switch(void)
per_cpu(compat_gdt_table, cpu);
if ( need_full_gdt(n) )
{
- struct page_info *page = virt_to_page(gdt);
+ unsigned long mfn = virt_to_mfn(gdt);
unsigned int i;
for ( i = 0; i < NR_RESERVED_GDT_PAGES; i++ )
l1e_write(n->arch.perdomain_ptes +
FIRST_RESERVED_GDT_PAGE + i,
- l1e_from_page(page + i, __PAGE_HYPERVISOR));
+ l1e_from_pfn(mfn + i, __PAGE_HYPERVISOR));
}
if ( need_full_gdt(p) &&
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index d2f2125181..5acad4870f 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -422,11 +422,10 @@ void destroy_m2p_mapping(struct mem_hotadd_info *info)
*/
static int setup_compat_m2p_table(struct mem_hotadd_info *info)
{
- unsigned long i, va, smap, emap, rwva, epfn = info->epfn;
+ unsigned long i, va, smap, emap, rwva, epfn = info->epfn, mfn;
unsigned int n;
l3_pgentry_t *l3_ro_mpt = NULL;
l2_pgentry_t *l2_ro_mpt = NULL;
- struct page_info *l1_pg;
int err = 0;
smap = info->spfn & (~((1UL << (L2_PAGETABLE_SHIFT - 2)) -1));
@@ -475,16 +474,16 @@ static int setup_compat_m2p_table(struct mem_hotadd_info *info)
if ( n == CNT )
continue;
- l1_pg = mfn_to_page(alloc_hotadd_mfn(info));
- err = map_pages_to_xen(rwva, page_to_mfn(l1_pg),
- 1UL << PAGETABLE_ORDER,
+ mfn = alloc_hotadd_mfn(info);
+ err = map_pages_to_xen(rwva, mfn, 1UL << PAGETABLE_ORDER,
PAGE_HYPERVISOR);
if ( err )
break;
/* Fill with INVALID_M2P_ENTRY. */
memset((void *)rwva, 0xFF, 1UL << L2_PAGETABLE_SHIFT);
/* NB. Cannot be GLOBAL as the ptes get copied into per-VM space. */
- l2e_write(&l2_ro_mpt[l2_table_offset(va)], l2e_from_page(l1_pg, _PAGE_PSE|_PAGE_PRESENT));
+ l2e_write(&l2_ro_mpt[l2_table_offset(va)],
+ l2e_from_pfn(mfn, _PAGE_PSE|_PAGE_PRESENT));
}
#undef CNT
#undef MFN
@@ -501,7 +500,7 @@ static int setup_m2p_table(struct mem_hotadd_info *info)
unsigned int n, memflags;
l2_pgentry_t *l2_ro_mpt = NULL;
l3_pgentry_t *l3_ro_mpt = NULL;
- struct page_info *l1_pg, *l2_pg;
+ struct page_info *l2_pg;
int ret = 0;
ASSERT(l4e_get_flags(idle_pg_table[l4_table_offset(RO_MPT_VIRT_START)])
@@ -544,15 +543,13 @@ static int setup_m2p_table(struct mem_hotadd_info *info)
for ( n = 0; n < CNT; ++n)
if ( mfn_valid(i + n * PDX_GROUP_COUNT) )
break;
- if ( n == CNT )
- l1_pg = NULL;
- else
+ if ( n < CNT )
{
- l1_pg = mfn_to_page(alloc_hotadd_mfn(info));
+ unsigned long mfn = alloc_hotadd_mfn(info);
+
ret = map_pages_to_xen(
RDWR_MPT_VIRT_START + i * sizeof(unsigned long),
- page_to_mfn(l1_pg),
- 1UL << PAGETABLE_ORDER,
+ mfn, 1UL << PAGETABLE_ORDER,
PAGE_HYPERVISOR);
if ( ret )
goto error;
@@ -584,7 +581,7 @@ static int setup_m2p_table(struct mem_hotadd_info *info)
}
/* NB. Cannot be GLOBAL as shadow_mode_translate reuses this area. */
- l2e_write(l2_ro_mpt, l2e_from_page(l1_pg,
+ l2e_write(l2_ro_mpt, l2e_from_pfn(mfn,
/*_PAGE_GLOBAL|*/_PAGE_PSE|_PAGE_USER|_PAGE_PRESENT));
}
if ( !((unsigned long)l2_ro_mpt & ~PAGE_MASK) )
@@ -1548,8 +1545,6 @@ destroy_frametable:
NODE_DATA(node)->node_start_pfn = old_node_start;
NODE_DATA(node)->node_spanned_pages = old_node_span;
- destroy_xen_mappings((unsigned long)mfn_to_virt(spfn),
- (unsigned long)mfn_to_virt(epfn));
return ret;
}
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index caa68f7c79..a713ce6244 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -156,7 +156,7 @@ void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info)
info->max_pages = d->max_pages;
info->shr_pages = atomic_read(&d->shr_pages);
info->paged_pages = atomic_read(&d->paged_pages);
- info->shared_info_frame = mfn_to_gmfn(d, __pa(d->shared_info)>>PAGE_SHIFT);
+ info->shared_info_frame = mfn_to_gmfn(d, virt_to_mfn(d->shared_info));
BUG_ON(SHARED_M2P(info->shared_info_frame));
info->cpupool = d->cpupool ? d->cpupool->cpupool_id : CPUPOOLID_NONE;
diff --git a/xen/include/asm-arm/mm.h b/xen/include/asm-arm/mm.h
index e95ece1047..146507e253 100644
--- a/xen/include/asm-arm/mm.h
+++ b/xen/include/asm-arm/mm.h
@@ -121,7 +121,6 @@ extern unsigned long xenheap_virt_end;
#define page_set_owner(_p,_d) ((_p)->v.inuse.domain = (_d))
#define maddr_get_owner(ma) (page_get_owner(maddr_to_page((ma))))
-#define vaddr_get_owner(va) (page_get_owner(virt_to_page((va))))
#define XENSHARE_writable 0
#define XENSHARE_readonly 1
diff --git a/xen/include/asm-x86/config.h b/xen/include/asm-x86/config.h
index 1c086332cf..ce3a7c00a2 100644
--- a/xen/include/asm-x86/config.h
+++ b/xen/include/asm-x86/config.h
@@ -275,12 +275,8 @@ extern unsigned long xen_phys_start;
/* GDT/LDT shadow mapping area. The first per-domain-mapping sub-area. */
#define GDT_LDT_VCPU_SHIFT 5
#define GDT_LDT_VCPU_VA_SHIFT (GDT_LDT_VCPU_SHIFT + PAGE_SHIFT)
-#ifdef MAX_VIRT_CPUS
-#define GDT_LDT_MBYTES (MAX_VIRT_CPUS >> (20-GDT_LDT_VCPU_VA_SHIFT))
-#else
#define GDT_LDT_MBYTES PERDOMAIN_MBYTES
#define MAX_VIRT_CPUS (GDT_LDT_MBYTES << (20-GDT_LDT_VCPU_VA_SHIFT))
-#endif
#define GDT_LDT_VIRT_START PERDOMAIN_VIRT_START
#define GDT_LDT_VIRT_END (GDT_LDT_VIRT_START + (GDT_LDT_MBYTES << 20))
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index c5de186d26..bf91f03de3 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -265,7 +265,6 @@ struct spage_info
((_p)->v.inuse._domain = (_d) ? virt_to_pdx(_d) : 0)
#define maddr_get_owner(ma) (page_get_owner(maddr_to_page((ma))))
-#define vaddr_get_owner(va) (page_get_owner(virt_to_page((va))))
#define XENSHARE_writable 0
#define XENSHARE_readonly 1
diff --git a/xen/include/asm-x86/page.h b/xen/include/asm-x86/page.h
index 166caf086e..e4d4f85552 100644
--- a/xen/include/asm-x86/page.h
+++ b/xen/include/asm-x86/page.h
@@ -261,18 +261,6 @@ void copy_page_sse2(void *, const void *);
#endif /* !defined(__ASSEMBLY__) */
-/* High table entries are reserved by the hypervisor. */
-#define DOMAIN_ENTRIES_PER_L2_PAGETABLE 0
-#define HYPERVISOR_ENTRIES_PER_L2_PAGETABLE 0
-
-#define DOMAIN_ENTRIES_PER_L4_PAGETABLE \
- (l4_table_offset(HYPERVISOR_VIRT_START))
-#define GUEST_ENTRIES_PER_L4_PAGETABLE \
- (l4_table_offset(HYPERVISOR_VIRT_END))
-#define HYPERVISOR_ENTRIES_PER_L4_PAGETABLE \
- (L4_PAGETABLE_ENTRIES - GUEST_ENTRIES_PER_L4_PAGETABLE \
- + DOMAIN_ENTRIES_PER_L4_PAGETABLE)
-
/* Where to find each level of the linear mapping */
#define __linear_l1_table ((l1_pgentry_t *)(LINEAR_PT_VIRT_START))
#define __linear_l2_table \
diff --git a/xen/xsm/xsm_policy.c b/xen/xsm/xsm_policy.c
index a419cf4e84..65be61d415 100644
--- a/xen/xsm/xsm_policy.c
+++ b/xen/xsm/xsm_policy.c
@@ -25,8 +25,9 @@
char *__initdata policy_buffer = NULL;
u32 __initdata policy_size = 0;
-int xsm_policy_init(unsigned long *module_map, const multiboot_info_t *mbi,
- void *(*bootstrap_map)(const module_t *))
+int __init xsm_policy_init(unsigned long *module_map,
+ const multiboot_info_t *mbi,
+ void *(*bootstrap_map)(const module_t *))
{
int i;
module_t *mod = (module_t *)__va(mbi->mods_addr);