ChangeSet 1.1311.1.32, 2005/03/23 15:27:37-07:00, djm@djmnc4000.(none)
switch back to Xen memory allocator code
arch/ia64/Makefile | 19 +-
arch/ia64/domain.c | 26 +-
arch/ia64/irq.c | 9 -
arch/ia64/mm_init.c | 217 ------------------------
arch/ia64/patch/linux-2.6.7/mm_contig.c | 208 +++++++++++++++++------
arch/ia64/patch/linux-2.6.7/page.h | 26 ++
arch/ia64/patch/linux-2.6.7/pgalloc.h | 54 ++++++
arch/ia64/patch/linux-2.6.7/setup.c | 87 +++++++--
arch/ia64/patch/linux-2.6.7/swiotlb.c | 37 ++++
arch/ia64/smp.c | 11 -
arch/ia64/tools/mkbuildtree | 12 -
arch/ia64/vhpt.c | 9 -
arch/ia64/xenmisc.c | 21 --
arch/ia64/xensetup.c | 280 +++++++++++---------------------
common/Makefile | 4
include/asm-ia64/config.h | 22 --
include/asm-ia64/domain_page.h | 14 +
include/asm-ia64/flushtlb.h | 13 +
include/asm-ia64/mm.h | 63 ++++---
19 files changed, 563 insertions(+), 569 deletions(-)
diff -Nru a/xen/arch/ia64/Makefile b/xen/arch/ia64/Makefile
--- a/xen/arch/ia64/Makefile 2005-03-25 19:04:47 -05:00
+++ b/xen/arch/ia64/Makefile 2005-03-25 19:04:47 -05:00
@@ -6,7 +6,7 @@
xenmisc.o pdb-stub.o acpi.o hypercall.o \
machvec.o dom0_ops.o domain.o \
idle0_task.o pal.o hpsim.o efi.o efi_stub.o ivt.o mm_contig.o \
- mm_bootmem.o sal.o cmdline.o mm_init.o tlb.o page_alloc.o slab.o \
+ sal.o cmdline.o mm_init.o tlb.o \
extable.o linuxextable.o \
regionreg.o entry.o unaligned.o privop.o vcpu.o \
irq_ia64.o irq_lsapic.o hpsim_irq.o vhpt.o xenasm.o dom_fw.o
@@ -32,9 +32,22 @@
$(OBJCOPY) -R .note -R .comment -S $(TARGET)-syms $(TARGET)
# $(BASEDIR)/tools/elf-reloc $(MONITOR_BASE) $(LOAD_BASE) $(TARGET)
-asm-offsets.s: asm-offsets.c
+asm-offsets.s: asm-offsets.c $(BASEDIR)/include/asm-ia64/.offsets.h.stamp
$(CC) $(CFLAGS) -S -o $@ $<
+$(BASEDIR)/include/asm-ia64/.offsets.h.stamp:
+# Need such symbol link to make linux headers available
+ [ -e $(BASEDIR)/include/linux ] \
+ || ln -s $(BASEDIR)/include/xen $(BASEDIR)/include/linux
+ [ -e $(BASEDIR)/include/asm-ia64/xen ] \
+ || ln -s $(BASEDIR)/include/asm-ia64/linux
$(BASEDIR)/include/asm-ia64/xen
+# Solve circular reference on asm-offsets.h
+ [ -f $(BASEDIR)/include/asm-ia64/asm-offsets.h ] \
+ || echo "#define IA64_TASK_SIZE 0" >
$(BASEDIR)/include/asm-ia64/asm-offsets.h
+#Bad hack. Force asm-offsets.h out-of-date
+ sleep 1
+ touch $@
+
# I'm sure a Makefile wizard would know a better way to do this
xen.lds.s: xen.lds.S
$(CC) -E $(CPPFLAGS) -P -DXEN -D__ASSEMBLY__ \
@@ -44,7 +57,7 @@
$(MAKE) -C lib && cp lib/ia64lib.o .
clean:
- rm -f *.o *~ core xen.lds.s
+ rm -f *.o *~ core xen.lds.s
$(BASEDIR)/include/asm-ia64/.offsets.h.stamp
$(MAKE) -C lib clean
# setup.o contains bits of compile.h so it must be blown away
diff -Nru a/xen/arch/ia64/domain.c b/xen/arch/ia64/domain.c
--- a/xen/arch/ia64/domain.c 2005-03-25 19:04:47 -05:00
+++ b/xen/arch/ia64/domain.c 2005-03-25 19:04:47 -05:00
@@ -39,8 +39,6 @@
//FIXME: alignment should be 256MB, lest Linux use a 256MB page size
unsigned long dom0_align = 64*1024*1024;
-extern kmem_cache_t *domain_struct_cachep;
-
// initialized by arch/ia64/setup.c:find_initrd()
unsigned long initrd_start = 0, initrd_end = 0;
@@ -136,22 +134,24 @@
struct domain *arch_alloc_domain_struct(void)
{
- return xmem_cache_alloc(domain_struct_cachep);
+ return xmalloc(struct domain);
}
void arch_free_domain_struct(struct domain *d)
{
- xmem_cache_free(domain_struct_cachep,d);
+ xfree(d);
}
struct exec_domain *arch_alloc_exec_domain_struct(void)
{
- return alloc_task_struct();
+ /* Per-vp stack is used here. So we need keep exec_domain
+ * same page as per-vp stack */
+ return alloc_xenheap_pages(KERNEL_STACK_SIZE_ORDER);
}
void arch_free_exec_domain_struct(struct exec_domain *ed)
{
- free_task_struct(ed);
+ free_xenheap_pages(ed, KERNEL_STACK_SIZE_ORDER);
}
void arch_do_createdomain(struct exec_domain *ed)
@@ -307,7 +307,7 @@
if (d == dom0) p = map_new_domain0_page(mpaddr);
else
#endif
- p = alloc_page(GFP_KERNEL);
+ p = alloc_domheap_page(d);
if (unlikely(!p)) {
printf("map_new_domain_page: Can't alloc!!!! Aaaargh!\n");
return(p);
@@ -509,7 +509,13 @@
dom0_size = 128*1024*1024; //FIXME: Should be configurable
}
printf("alloc_dom0: starting (initializing %d
MB...)\n",dom0_size/(1024*1024));
- dom0_start =
__alloc_bootmem(dom0_size,dom0_align,__pa(MAX_DMA_ADDRESS));
+
+ /* FIXME: The first trunk (say 256M) should always be assigned to
+ * Dom0, since Dom0's physical == machine address for DMA purpose.
+ * Some old version linux, like 2.4, assumes physical memory existing
+ * in 2nd 64M space.
+ */
+ dom0_start = alloc_boot_pages(dom0_size,dom0_align);
if (!dom0_start) {
printf("construct_dom0: can't allocate contiguous memory size=%p\n",
dom0_size);
@@ -611,7 +617,7 @@
// prepare domain0 pagetable (maps METAphysical to physical)
// following is roughly mm_init() in linux/kernel/fork.c
- d->arch.mm = kmem_cache_alloc(mm_cachep, SLAB_KERNEL);
+ d->arch.mm = xmalloc(struct mm_struct);
if (unlikely(!d->arch.mm)) {
printk("Can't allocate mm_struct for domain0\n");
return -ENOMEM;
@@ -721,7 +727,7 @@
printk("parsedomainelfimage returns %d\n",rc);
if ( rc != 0 ) return rc;
- d->arch.mm = kmem_cache_alloc(mm_cachep, SLAB_KERNEL);
+ d->arch.mm = xmalloc(struct mm_struct);
if (unlikely(!d->arch.mm)) {
printk("Can't allocate mm_struct for domain %d\n",d->id);
return -ENOMEM;
diff -Nru a/xen/arch/ia64/irq.c b/xen/arch/ia64/irq.c
--- a/xen/arch/ia64/irq.c 2005-03-25 19:04:47 -05:00
+++ b/xen/arch/ia64/irq.c 2005-03-25 19:04:47 -05:00
@@ -649,8 +649,7 @@
if (!handler)
return -EINVAL;
- action = (struct irqaction *)
- kmalloc(sizeof(struct irqaction), GFP_ATOMIC);
+ action = xmalloc(struct irqaction);
if (!action)
return -ENOMEM;
@@ -667,7 +666,7 @@
retval = setup_irq(irq, action);
if (retval)
- kfree(action);
+ xfree(action);
return retval;
}
@@ -730,7 +729,7 @@
/* Wait to make sure it's not being used on another CPU
*/
synchronize_irq(irq);
- kfree(action);
+ xfree(action);
return;
}
printk(KERN_ERR "Trying to free free IRQ%d\n",irq);
@@ -1389,7 +1388,7 @@
goto out;
}
- action = xmalloc(sizeof(irq_guest_action_t));
+ action = xmalloc(irq_guest_action_t);
if ( (desc->action = (struct irqaction *)action) == NULL )
{
DPRINTK("Cannot bind IRQ %d to guest. Out of memory.\n", irq);
diff -Nru a/xen/arch/ia64/mm_init.c b/xen/arch/ia64/mm_init.c
--- a/xen/arch/ia64/mm_init.c 2005-03-25 19:04:47 -05:00
+++ b/xen/arch/ia64/mm_init.c 2005-03-25 19:04:47 -05:00
@@ -163,24 +163,6 @@
#endif /* XEN */
void
-check_pgt_cache (void)
-{
- int low, high;
-
- low = pgt_cache_water[0];
- high = pgt_cache_water[1];
-
- if (pgtable_cache_size > (u64) high) {
- do {
- if (pgd_quicklist)
- free_page((unsigned long)pgd_alloc_one_fast(0));
- if (pmd_quicklist)
- free_page((unsigned long)pmd_alloc_one_fast(0,
0));
- } while (pgtable_cache_size > (u64) low);
- }
-}
-
-void
update_mmu_cache (struct vm_area_struct *vma, unsigned long vaddr, pte_t pte)
{
unsigned long addr;
@@ -261,132 +243,9 @@
#endif
}
-void
-free_initmem (void)
-{
- unsigned long addr, eaddr;
-
- addr = (unsigned long) ia64_imva(__init_begin);
- eaddr = (unsigned long) ia64_imva(__init_end);
- while (addr < eaddr) {
- ClearPageReserved(virt_to_page(addr));
- set_page_count(virt_to_page(addr), 1);
- free_page(addr);
- ++totalram_pages;
- addr += PAGE_SIZE;
- }
- printk(KERN_INFO "Freeing unused kernel memory: %ldkB freed\n",
- (__init_end - __init_begin) >> 10);
-}
-
-void
-free_initrd_mem (unsigned long start, unsigned long end)
-{
- struct page *page;
- /*
- * EFI uses 4KB pages while the kernel can use 4KB or bigger.
- * Thus EFI and the kernel may have different page sizes. It is
- * therefore possible to have the initrd share the same page as
- * the end of the kernel (given current setup).
- *
- * To avoid freeing/using the wrong page (kernel sized) we:
- * - align up the beginning of initrd
- * - align down the end of initrd
- *
- * | |
- * |=============| a000
- * | |
- * | |
- * | | 9000
- * |/////////////|
- * |/////////////|
- * |=============| 8000
- * |///INITRD////|
- * |/////////////|
- * |/////////////| 7000
- * | |
- * |KKKKKKKKKKKKK|
- * |=============| 6000
- * |KKKKKKKKKKKKK|
- * |KKKKKKKKKKKKK|
- * K=kernel using 8KB pages
- *
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-changelog
|