static void free_owl_reserved_memory(unsigned int free_start, unsigned int free_size) { unsigned long n, start, end; #ifdef CONFIG_HIGHMEM unsigned long max_low = max_low_pfn + PHYS_PFN_OFFSET; #endif start = free_start; end = free_start + free_size; if( (start >> PAGE_SHIFT) <= max_low ) { if( (end >> PAGE_SHIFT) > max_low ) end = max_low << PAGE_SHIFT; n = free_reserved_area(__phys_to_virt(start), __phys_to_virt(end), 0, NULL); printk("free reserve pages %lu to buddy system\n", n); } #ifdef CONFIG_HIGHMEM start = free_start >> PAGE_SHIFT; end = (free_start + free_size) >> PAGE_SHIFT; if( end > max_low ) { if(start < max_low) start = max_low; for (n = start; n < end; n++) free_highmem_page(pfn_to_page(n)); printk("free reserve high memory pages %lu to buddy system\n", end - start); } #endif }
void __init nautilus_init_pci(void) { struct pci_controller *hose = hose_head; struct pci_bus *bus; struct pci_dev *irongate; unsigned long bus_align, bus_size, pci_mem; unsigned long memtop = max_low_pfn << PAGE_SHIFT; /* Scan our single hose. */ bus = pci_scan_bus(0, alpha_mv.pci_ops, hose); if (!bus) return; hose->bus = bus; pcibios_claim_one_bus(bus); irongate = pci_get_bus_and_slot(0, 0); bus->self = irongate; bus->resource[0] = &irongate_io; bus->resource[1] = &irongate_mem; pci_bus_size_bridges(bus); /* IO port range. */ bus->resource[0]->start = 0; bus->resource[0]->end = 0xffff; /* Set up PCI memory range - limit is hardwired to 0xffffffff, base must be at aligned to 16Mb. */ bus_align = bus->resource[1]->start; bus_size = bus->resource[1]->end + 1 - bus_align; if (bus_align < 0x1000000UL) bus_align = 0x1000000UL; pci_mem = (0x100000000UL - bus_size) & -bus_align; bus->resource[1]->start = pci_mem; bus->resource[1]->end = 0xffffffffUL; if (request_resource(&iomem_resource, bus->resource[1]) < 0) printk(KERN_ERR "Failed to request MEM on hose 0\n"); if (pci_mem < memtop) memtop = pci_mem; if (memtop > alpha_mv.min_mem_address) { free_reserved_area(__va(alpha_mv.min_mem_address), __va(memtop), -1, NULL); printk("nautilus_init_pci: %ldk freed\n", (memtop - alpha_mv.min_mem_address) >> 10); }
void apply_alternatives(void *start, size_t length) { struct alt_region region = { .begin = start, .end = start + length, }; __apply_alternatives(®ion); } void free_alternatives_memory(void) { free_reserved_area(__alt_instructions, __alt_instructions_end, 0, "alternatives"); }
void __init free_initrd_mem(unsigned long start, unsigned long end) { free_reserved_area(start, end, POISON_FREE_INITMEM, "initrd"); }
void free_alternatives_memory(void) { free_reserved_area(__alt_instructions, __alt_instructions_end, 0, "alternatives"); }
static __init void kvm_free_tmp(void) { free_reserved_area(&kvm_tmp[kvm_tmp_index], &kvm_tmp[ARRAY_SIZE(kvm_tmp)], -1, NULL); }
void __init free_initrd_mem(unsigned long start, unsigned long end) { free_reserved_area((void *)start, (void *)end, -1, "initrd"); }
void __init free_initrd_mem(unsigned long start, unsigned long end) { free_reserved_area(start, end, 0, "initrd"); }
void free_initrd_mem(unsigned long start, unsigned long end) { if (initrd_is_mapped) free_reserved_area((void *)start, (void *)end, -1, "initrd"); }
/** * platform_release_memory - release pre-allocated memory * @ptr: pointer to memory to release * @size: size of resource * * This must only be called for memory allocated or reserved via the boot * memory allocator. */ void platform_release_memory(void *ptr, int size) { free_reserved_area(ptr, ptr + size, -1, NULL); }