参照元

説明

引数

返り値

参考

実装

static void __vunmap(const void *addr, int deallocate_pages)
{
	struct vm_struct *area;
	if (!addr)
		return;
	if ((PAGE_SIZE-1) & (unsigned long)addr) {
		WARN(1, KERN_ERR "Trying to vfree() bad address (%p)\n", addr);
		return;
	}
	area = remove_vm_area(addr);
	if (unlikely(!area)) {
		WARN(1, KERN_ERR "Trying to vfree() nonexistent vm area (%p)\n",
				addr);
		return;
	}
	debug_check_no_locks_freed(addr, area->size);
	debug_check_no_obj_freed(addr, area->size);
	if (deallocate_pages) {
		int i;
		for (i = 0; i < area->nr_pages; i++) {
			struct page *page = area->pages[i];
			BUG_ON(!page);
			__free_page(page);
		}

		if (area->flags & VM_VPAGES)
			vfree(area->pages);
		else
			kfree(area->pages);
	}

	kfree(area);
	return;
}

コメント


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS