예제 #1
0
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
}
예제 #2
0
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);
	}
예제 #3
0
void apply_alternatives(void *start, size_t length)
{
	struct alt_region region = {
		.begin	= start,
		.end	= start + length,
	};

	__apply_alternatives(&region);
}

void free_alternatives_memory(void)
{
	free_reserved_area(__alt_instructions, __alt_instructions_end,
			   0, "alternatives");
}
예제 #4
0
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");
}
예제 #6
0
파일: kvm.c 프로젝트: 0-T-0/ps4-linux
static __init void kvm_free_tmp(void)
{
	free_reserved_area(&kvm_tmp[kvm_tmp_index],
			   &kvm_tmp[ARRAY_SIZE(kvm_tmp)], -1, NULL);
}
예제 #7
0
void __init free_initrd_mem(unsigned long start, unsigned long end)
{
	free_reserved_area((void *)start, (void *)end, -1, "initrd");
}
예제 #8
0
void __init free_initrd_mem(unsigned long start, unsigned long end)
{
	free_reserved_area(start, end, 0, "initrd");
}
예제 #9
0
파일: init.c 프로젝트: godknowspe/linux
void free_initrd_mem(unsigned long start, unsigned long end)
{
	if (initrd_is_mapped)
		free_reserved_area((void *)start, (void *)end, -1, "initrd");
}
예제 #10
0
/**
 * 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);
}