[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Clean up the page allocator interface a little. In particular
ChangeSet 1.1700, 2005/06/09 16:25:29+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx Clean up the page allocator interface a little. In particular physical addresses are now passed as physaddr_t rather than unsigned long (required for 32-bit pae mode). Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> arch/ia64/domain.c | 8 +++++- arch/ia64/patch/linux-2.6.7/mm_contig.c | 1 arch/ia64/xenmem.c | 9 ++++--- arch/x86/apic.c | 10 +++----- arch/x86/dom0_ops.c | 4 +-- arch/x86/domain.c | 14 ++++++------ arch/x86/mm.c | 37 ++++++++++++++------------------ arch/x86/smpboot.c | 2 - arch/x86/vmx_vmcs.c | 6 ++--- arch/x86/x86_32/mm.c | 8 +++--- arch/x86/x86_64/mm.c | 10 ++++---- common/domain.c | 2 - common/grant_table.c | 14 ++++++------ common/page_alloc.c | 37 ++++++++++++++------------------ common/trace.c | 2 - common/xmalloc.c | 8 +++--- drivers/char/console.c | 2 - drivers/char/serial.c | 2 - include/asm-x86/mm.h | 1 include/asm-x86/page.h | 2 - include/asm-x86/x86_32/page-2level.h | 2 - include/xen/mm.h | 21 +++++++++--------- 22 files changed, 99 insertions(+), 103 deletions(-) diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c --- a/xen/arch/ia64/domain.c 2005-06-09 12:03:00 -04:00 +++ b/xen/arch/ia64/domain.c 2005-06-09 12:03:00 -04:00 @@ -680,7 +680,9 @@ * Some old version linux, like 2.4, assumes physical memory existing * in 2nd 64M space. */ - dom0_start = alloc_boot_pages(dom0_size,dom0_align); + dom0_start = alloc_boot_pages( + dom0_size >> PAGE_SHIFT, dom0_align >> PAGE_SHIFT); + dom0_start <<= PAGE_SHIFT; if (!dom0_start) { printf("construct_dom0: can't allocate contiguous memory size=%p\n", dom0_size); @@ -698,7 +700,9 @@ { domU_staging_size = 32*1024*1024; //FIXME: Should be configurable printf("alloc_domU_staging: starting (initializing %d MB...)\n",domU_staging_size/(1024*1024)); - domU_staging_start= alloc_boot_pages(domU_staging_size,domU_staging_align); + domU_staging_start = alloc_boot_pages( + domU_staging_size >> PAGE_SHIFT, domU_staging_align >> PAGE_SHIFT); + domU_staging_start <<= PAGE_SHIFT; if (!domU_staging_size) { printf("alloc_domU_staging: can't allocate, spinning...\n"); while(1); diff -Nru a/xen/arch/ia64/patch/linux-2.6.7/mm_contig.c b/xen/arch/ia64/patch/linux-2.6.7/mm_contig.c --- a/xen/arch/ia64/patch/linux-2.6.7/mm_contig.c 2005-06-09 12:03:00 -04:00 +++ b/xen/arch/ia64/patch/linux-2.6.7/mm_contig.c 2005-06-09 12:03:00 -04:00 @@ -204,7 +204,7 @@ + + /* Request continuous trunk from boot allocator, since HV + * address is identity mapped */ -+ p = alloc_boot_pages(frame_table_size, FT_ALIGN_SIZE); ++ p = alloc_boot_pages(frame_table_size>>PAGE_SHIFT, FT_ALIGN_SIZE>>PAGE_SHIFT) << PAGE_SHIFT; + if (p == 0) + panic("Not enough memory for frame table.\n"); + diff -Nru a/xen/arch/ia64/xenmem.c b/xen/arch/ia64/xenmem.c --- a/xen/arch/ia64/xenmem.c 2005-06-09 12:03:00 -04:00 +++ b/xen/arch/ia64/xenmem.c 2005-06-09 12:03:00 -04:00 @@ -82,17 +82,18 @@ #define FT_ALIGN_SIZE (16UL << 20) void __init init_frametable(void) { - unsigned long i, p; + unsigned long i, pfn; frame_table_size = max_page * sizeof(struct pfn_info); frame_table_size = (frame_table_size + PAGE_SIZE - 1) & PAGE_MASK; /* Request continuous trunk from boot allocator, since HV * address is identity mapped */ - p = alloc_boot_pages(frame_table_size, FT_ALIGN_SIZE); - if (p == 0) + pfn = alloc_boot_pages( + frame_table_size >> PAGE_SHIFT, FT_ALIGN_SIZE >> PAGE_SHIFT); + if (pfn == 0) panic("Not enough memory for frame table.\n"); - frame_table = __va(p); + frame_table = __va(pfn << PAGE_SHIFT); memset(frame_table, 0, frame_table_size); printk("size of frame_table: %lukB\n", frame_table_size >> 10); diff -Nru a/xen/arch/x86/apic.c b/xen/arch/x86/apic.c --- a/xen/arch/x86/apic.c 2005-06-09 12:03:03 -04:00 +++ b/xen/arch/x86/apic.c 2005-06-09 12:03:03 -04:00 @@ -580,10 +580,9 @@ * zeroes page to simulate the local APIC and another * one for the IO-APIC. */ - if (!smp_found_config && detect_init_APIC()) { - apic_phys = alloc_xenheap_page(); - apic_phys = __pa(apic_phys); - } else + if (!smp_found_config && detect_init_APIC()) + apic_phys = __pa(alloc_xenheap_page()); + else apic_phys = mp_lapic_addr; set_fixmap_nocache(FIX_APIC_BASE, apic_phys); @@ -616,8 +615,7 @@ } } else { fake_ioapic_page: - ioapic_phys = alloc_xenheap_page(); - ioapic_phys = __pa(ioapic_phys); + ioapic_phys = __pa(alloc_xenheap_page()); } set_fixmap_nocache(idx, ioapic_phys); apic_printk(APIC_VERBOSE, "mapped IOAPIC to %08lx (%08lx)\n", diff -Nru a/xen/arch/x86/dom0_ops.c b/xen/arch/x86/dom0_ops.c --- a/xen/arch/x86/dom0_ops.c 2005-06-09 12:03:01 -04:00 +++ b/xen/arch/x86/dom0_ops.c 2005-06-09 12:03:01 -04:00 @@ -259,7 +259,7 @@ break; } - l_arr = (unsigned long *)alloc_xenheap_page(); + l_arr = alloc_xenheap_page(); ret = 0; for( n = 0; n < num; ) @@ -324,7 +324,7 @@ n += j; } - free_xenheap_page((unsigned long)l_arr); + free_xenheap_page(l_arr); put_domain(d); } diff -Nru a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c --- a/xen/arch/x86/domain.c 2005-06-09 12:03:01 -04:00 +++ b/xen/arch/x86/domain.c 2005-06-09 12:03:01 -04:00 @@ -222,10 +222,10 @@ void free_perdomain_pt(struct domain *d) { - free_xenheap_page((unsigned long)d->arch.mm_perdomain_pt); + free_xenheap_page(d->arch.mm_perdomain_pt); #ifdef __x86_64__ - free_xenheap_page((unsigned long)d->arch.mm_perdomain_l2); - free_xenheap_page((unsigned long)d->arch.mm_perdomain_l3); + free_xenheap_page(d->arch.mm_perdomain_l2); + free_xenheap_page(d->arch.mm_perdomain_l3); #endif } @@ -240,7 +240,7 @@ v->arch.schedule_tail = continue_nonidle_task; - d->shared_info = (void *)alloc_xenheap_page(); + d->shared_info = alloc_xenheap_page(); memset(d->shared_info, 0, PAGE_SIZE); v->vcpu_info = &d->shared_info->vcpu_data[v->vcpu_id]; v->cpumap = CPUMAP_RUNANYWHERE; @@ -248,7 +248,7 @@ machine_to_phys_mapping[virt_to_phys(d->shared_info) >> PAGE_SHIFT] = INVALID_M2P_ENTRY; - d->arch.mm_perdomain_pt = (l1_pgentry_t *)alloc_xenheap_page(); + d->arch.mm_perdomain_pt = alloc_xenheap_page(); memset(d->arch.mm_perdomain_pt, 0, PAGE_SIZE); machine_to_phys_mapping[virt_to_phys(d->arch.mm_perdomain_pt) >> PAGE_SHIFT] = INVALID_M2P_ENTRY; @@ -263,12 +263,12 @@ v->arch.guest_vl3table = __linear_l3_table; v->arch.guest_vl4table = __linear_l4_table; - d->arch.mm_perdomain_l2 = (l2_pgentry_t *)alloc_xenheap_page(); + d->arch.mm_perdomain_l2 = alloc_xenheap_page(); memset(d->arch.mm_perdomain_l2, 0, PAGE_SIZE); d->arch.mm_perdomain_l2[l2_table_offset(PERDOMAIN_VIRT_START)] = l2e_from_page(virt_to_page(d->arch.mm_perdomain_pt), __PAGE_HYPERVISOR); - d->arch.mm_perdomain_l3 = (l3_pgentry_t *)alloc_xenheap_page(); + d->arch.mm_perdomain_l3 = alloc_xenheap_page(); memset(d->arch.mm_perdomain_l3, 0, PAGE_SIZE); d->arch.mm_perdomain_l3[l3_table_offset(PERDOMAIN_VIRT_START)] = l3e_from_page(virt_to_page(d->arch.mm_perdomain_l2), diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c --- a/xen/arch/x86/mm.c 2005-06-09 12:03:00 -04:00 +++ b/xen/arch/x86/mm.c 2005-06-09 12:03:00 -04:00 @@ -145,31 +145,28 @@ /* Frame table and its size in pages. */ struct pfn_info *frame_table; -unsigned long frame_table_size; unsigned long max_page; void __init init_frametable(void) { - unsigned long i, p, step; + unsigned long nr_pages, page_step, i, pfn; - frame_table = (struct pfn_info *)FRAMETABLE_VIRT_START; - frame_table_size = max_page * sizeof(struct pfn_info); - frame_table_size = (frame_table_size + PAGE_SIZE - 1) & PAGE_MASK; + frame_table = (struct pfn_info *)FRAMETABLE_VIRT_START; - step = (1 << L2_PAGETABLE_SHIFT); - for ( i = 0; i < frame_table_size; i += step ) + nr_pages = PFN_UP(max_page * sizeof(*frame_table)); + page_step = (1 << L2_PAGETABLE_SHIFT) >> PAGE_SHIFT; + + for ( i = 0; i < nr_pages; i += page_step ) { - p = alloc_boot_pages(min(frame_table_size - i, step), step); - if ( p == 0 ) + pfn = alloc_boot_pages(min(nr_pages - i, page_step), page_step); + if ( pfn == 0 ) panic("Not enough memory for frame table\n"); map_pages_to_xen( - FRAMETABLE_VIRT_START + i, - p >> PAGE_SHIFT, - step >> PAGE_SHIFT, - PAGE_HYPERVISOR); + FRAMETABLE_VIRT_START + (i << PAGE_SHIFT), + pfn, page_step, PAGE_HYPERVISOR); } - memset(frame_table, 0, frame_table_size); + memset(frame_table, 0, nr_pages << PAGE_SHIFT); } void arch_init_memory(void) @@ -2954,15 +2951,15 @@ int ptwr_init(struct domain *d) { - void *x = (void *)alloc_xenheap_page(); - void *y = (void *)alloc_xenheap_page(); + void *x = alloc_xenheap_page(); + void *y = alloc_xenheap_page(); if ( (x == NULL) || (y == NULL) ) { if ( x != NULL ) - free_xenheap_page((unsigned long)x); + free_xenheap_page(x); if ( y != NULL ) - free_xenheap_page((unsigned long)y); + free_xenheap_page(y); return -ENOMEM; } @@ -2975,8 +2972,8 @@ void ptwr_destroy(struct domain *d) { cleanup_writable_pagetable(d); - free_xenheap_page((unsigned long)d->arch.ptwr[PTWR_PT_ACTIVE].page); - free_xenheap_page((unsigned long)d->arch.ptwr[PTWR_PT_INACTIVE].page); + free_xenheap_page(d->arch.ptwr[PTWR_PT_ACTIVE].page); + free_xenheap_page(d->arch.ptwr[PTWR_PT_INACTIVE].page); } void cleanup_writable_pagetable(struct domain *d) diff -Nru a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c --- a/xen/arch/x86/smpboot.c 2005-06-09 12:03:01 -04:00 +++ b/xen/arch/x86/smpboot.c 2005-06-09 12:03:01 -04:00 @@ -781,7 +781,7 @@ /* So we see what's up */ printk("Booting processor %d/%d eip %lx\n", cpu, apicid, start_eip); - stack = (void *)alloc_xenheap_pages(STACK_ORDER); + stack = alloc_xenheap_pages(STACK_ORDER); #if defined(__i386__) stack_start.esp = (void *)__pa(stack); #elif defined(__x86_64__) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |