linux-4.4.1/mmap_pgoff(syscall)
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#h6067d19]
#backlinks
*説明 [#m51ecb99]
-パス: [[linux-4.4.1/mm/mmap.c]]
-FIXME: これは何?
--説明
**引数 [#g200bdfc]
-unsigned long addr
--
-unsigned long len
--
-unsigned long prot
--
-unsigned long flags
--
-unsigned long fd
--
-unsigned long pgoff
--
**返り値 [#mfd9b0d1]
-unsigned long
--
**参考 [#i39d9053]
*実装 [#y9b64e6e]
SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigne...
unsigned long, prot, unsigned long, flags,
unsigned long, fd, unsigned long, pgoff)
{
struct file *file = NULL;
unsigned long retval;
-
--[[linux-4.4.1/file]]
if (!(flags & MAP_ANONYMOUS)) {
audit_mmap_fd(fd, flags);
file = fget(fd);
if (!file)
return -EBADF;
-
--[[linux-4.4.1/MAP_ANONYMOUS]]
--[[linux-4.4.1/audit_mmap_fd()]]
--[[linux-4.4.1/fget()]]
if (is_file_hugepages(file))
len = ALIGN(len, huge_page_size(...
-
--[[linux-4.4.1/is_file_hugepages()]]
--[[linux-4.4.1/ALIGN()]]
--[[linux-4.4.1/huge_page_size()]]
--[[linux-4.4.1/hstate_file()]]
retval = -EINVAL;
if (unlikely(flags & MAP_HUGETLB && !is_...
goto out_fput;
-
--[[linux-4.4.1/unlikely()]]
--[[linux-4.4.1/MAP_HUGETLB]]
} else if (flags & MAP_HUGETLB) {
struct user_struct *user = NULL;
struct hstate *hs;
-
--[[linux-4.4.1/user_struct]]
--[[linux-4.4.1/hstate]]
hs = hstate_sizelog((flags >> MAP_HUGE_S...
if (!hs)
return -EINVAL;
-
--[[linux-4.4.1/hstate_sizelog()]]
--[[linux-4.4.1/MAP_HUGE_SHIFT]]
--[[linux-4.4.1/SHM_HUGE_MASK]]
len = ALIGN(len, huge_page_size(hs));
/*
* VM_NORESERVE is used because the rese...
* taken when vm_ops->mmap() is called
* A dummy user value is used because we...
* memory so no accounting is necessary
*/
file = hugetlb_file_setup(HUGETLB_ANON_F...
VM_NORESERVE,
&user, HUGETLB_ANONHUGE_...
(flags >> MAP_HUGE_SHIFT...
if (IS_ERR(file))
return PTR_ERR(file);
-
--[[linux-4.4.1/hugetlb_file_setup()]]
--[[linux-4.4.1/HUGETLB_ANON_FILE]]
--[[linux-4.4.1/VM_NORESERVE]]
--[[linux-4.4.1/HUGETLB_ANONHUGE_INODE]]
}
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
retval = vm_mmap_pgoff(file, addr, len, prot, fl...
-
--[[linux-4.4.1/MAP_EXECUTABLE]]
--[[linux-4.4.1/MAP_DENYWRITE]]
--[[linux-4.4.1/vm_mmap_pgoff()]]
out_fput:
if (file)
fput(file);
return retval;
-
--[[linux-4.4.1/fput()]]
}
*コメント [#qbb1a95c]
終了行:
*参照元 [#h6067d19]
#backlinks
*説明 [#m51ecb99]
-パス: [[linux-4.4.1/mm/mmap.c]]
-FIXME: これは何?
--説明
**引数 [#g200bdfc]
-unsigned long addr
--
-unsigned long len
--
-unsigned long prot
--
-unsigned long flags
--
-unsigned long fd
--
-unsigned long pgoff
--
**返り値 [#mfd9b0d1]
-unsigned long
--
**参考 [#i39d9053]
*実装 [#y9b64e6e]
SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigne...
unsigned long, prot, unsigned long, flags,
unsigned long, fd, unsigned long, pgoff)
{
struct file *file = NULL;
unsigned long retval;
-
--[[linux-4.4.1/file]]
if (!(flags & MAP_ANONYMOUS)) {
audit_mmap_fd(fd, flags);
file = fget(fd);
if (!file)
return -EBADF;
-
--[[linux-4.4.1/MAP_ANONYMOUS]]
--[[linux-4.4.1/audit_mmap_fd()]]
--[[linux-4.4.1/fget()]]
if (is_file_hugepages(file))
len = ALIGN(len, huge_page_size(...
-
--[[linux-4.4.1/is_file_hugepages()]]
--[[linux-4.4.1/ALIGN()]]
--[[linux-4.4.1/huge_page_size()]]
--[[linux-4.4.1/hstate_file()]]
retval = -EINVAL;
if (unlikely(flags & MAP_HUGETLB && !is_...
goto out_fput;
-
--[[linux-4.4.1/unlikely()]]
--[[linux-4.4.1/MAP_HUGETLB]]
} else if (flags & MAP_HUGETLB) {
struct user_struct *user = NULL;
struct hstate *hs;
-
--[[linux-4.4.1/user_struct]]
--[[linux-4.4.1/hstate]]
hs = hstate_sizelog((flags >> MAP_HUGE_S...
if (!hs)
return -EINVAL;
-
--[[linux-4.4.1/hstate_sizelog()]]
--[[linux-4.4.1/MAP_HUGE_SHIFT]]
--[[linux-4.4.1/SHM_HUGE_MASK]]
len = ALIGN(len, huge_page_size(hs));
/*
* VM_NORESERVE is used because the rese...
* taken when vm_ops->mmap() is called
* A dummy user value is used because we...
* memory so no accounting is necessary
*/
file = hugetlb_file_setup(HUGETLB_ANON_F...
VM_NORESERVE,
&user, HUGETLB_ANONHUGE_...
(flags >> MAP_HUGE_SHIFT...
if (IS_ERR(file))
return PTR_ERR(file);
-
--[[linux-4.4.1/hugetlb_file_setup()]]
--[[linux-4.4.1/HUGETLB_ANON_FILE]]
--[[linux-4.4.1/VM_NORESERVE]]
--[[linux-4.4.1/HUGETLB_ANONHUGE_INODE]]
}
flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
retval = vm_mmap_pgoff(file, addr, len, prot, fl...
-
--[[linux-4.4.1/MAP_EXECUTABLE]]
--[[linux-4.4.1/MAP_DENYWRITE]]
--[[linux-4.4.1/vm_mmap_pgoff()]]
out_fput:
if (file)
fput(file);
return retval;
-
--[[linux-4.4.1/fput()]]
}
*コメント [#qbb1a95c]
ページ名: