linux-2.6.33/__vunmap()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#yf87b521]
#backlinks
*説明 [#te17df5e]
-パス: [[linux-2.6.33/mm/vmalloc.c]]
-FIXME: これは何?
--説明
**引数 [#zc91f510]
-const void *addr
--マッピングを解除する領域の先頭の仮想アドレス。
-int deallocate_pages
--解放が必要(vmalloc で確保したページなど)なら 1、
そうでない(vmap でマッピングしたページなど)なら 0。
**返り値 [#af11e598]
-なし
**参考 [#u1eac875]
*実装 [#a6a51e41]
static void __vunmap(const void *addr, int deallocate_pa...
{
struct vm_struct *area;
-
--[[linux-2.6.33/vm_struct]]
if (!addr)
return;
-NULL が指定された場合は何もしない。
if ((PAGE_SIZE-1) & (unsigned long)addr) {
WARN(1, KERN_ERR "Trying to vfree() bad address (%p)\n...
return;
}
-ページサイズ境界に合わないアドレスを指定した場合、
エラーを表示する以外、何もしない。
-
--[[linux-2.6.33/PAGE_SIZE]]
-
--[[linux-2.6.33/WARN()]]
area = remove_vm_area(addr);
if (unlikely(!area)) {
WARN(1, KERN_ERR "Trying to vfree() nonexistent vm are...
addr);
return;
}
-
--[[linux-2.6.33/remove_vm_area()]]
-
--[[linux-2.6.33/unlikely()]]
debug_check_no_locks_freed(addr, area->size);
debug_check_no_obj_freed(addr, area->size);
-
--[[linux-2.6.33/debug_check_no_locks_freed()]]
-
--[[linux-2.6.33/debug_check_no_obj_freed()]]
if (deallocate_pages) {
int i;
-vmalloc で確保されたページなど、解放する必要がある場合。
for (i = 0; i < area->nr_pages; i++) {
struct page *page = area->pages[i];
-
--[[linux-2.6.33/page]]
BUG_ON(!page);
__free_page(page);
-
--[[linux-2.6.33/BUG_ON()]]
-
--[[linux-2.6.33/__free_page()]]
}
if (area->flags & VM_VPAGES)
vfree(area->pages);
else
kfree(area->pages);
-
--[[linux-2.6.33/vfree()]]
-
--[[linux-2.6.33/kfree()]]
}
kfree(area);
-
--[[linux-2.6.33/kfree()]]
return;
}
*コメント [#e163d115]
終了行:
*参照元 [#yf87b521]
#backlinks
*説明 [#te17df5e]
-パス: [[linux-2.6.33/mm/vmalloc.c]]
-FIXME: これは何?
--説明
**引数 [#zc91f510]
-const void *addr
--マッピングを解除する領域の先頭の仮想アドレス。
-int deallocate_pages
--解放が必要(vmalloc で確保したページなど)なら 1、
そうでない(vmap でマッピングしたページなど)なら 0。
**返り値 [#af11e598]
-なし
**参考 [#u1eac875]
*実装 [#a6a51e41]
static void __vunmap(const void *addr, int deallocate_pa...
{
struct vm_struct *area;
-
--[[linux-2.6.33/vm_struct]]
if (!addr)
return;
-NULL が指定された場合は何もしない。
if ((PAGE_SIZE-1) & (unsigned long)addr) {
WARN(1, KERN_ERR "Trying to vfree() bad address (%p)\n...
return;
}
-ページサイズ境界に合わないアドレスを指定した場合、
エラーを表示する以外、何もしない。
-
--[[linux-2.6.33/PAGE_SIZE]]
-
--[[linux-2.6.33/WARN()]]
area = remove_vm_area(addr);
if (unlikely(!area)) {
WARN(1, KERN_ERR "Trying to vfree() nonexistent vm are...
addr);
return;
}
-
--[[linux-2.6.33/remove_vm_area()]]
-
--[[linux-2.6.33/unlikely()]]
debug_check_no_locks_freed(addr, area->size);
debug_check_no_obj_freed(addr, area->size);
-
--[[linux-2.6.33/debug_check_no_locks_freed()]]
-
--[[linux-2.6.33/debug_check_no_obj_freed()]]
if (deallocate_pages) {
int i;
-vmalloc で確保されたページなど、解放する必要がある場合。
for (i = 0; i < area->nr_pages; i++) {
struct page *page = area->pages[i];
-
--[[linux-2.6.33/page]]
BUG_ON(!page);
__free_page(page);
-
--[[linux-2.6.33/BUG_ON()]]
-
--[[linux-2.6.33/__free_page()]]
}
if (area->flags & VM_VPAGES)
vfree(area->pages);
else
kfree(area->pages);
-
--[[linux-2.6.33/vfree()]]
-
--[[linux-2.6.33/kfree()]]
}
kfree(area);
-
--[[linux-2.6.33/kfree()]]
return;
}
*コメント [#e163d115]
ページ名: