From: "Kirill A. Shutemov" <kirill@shutemov.name> To: Hillf Danton <hillf.zj@alibaba-inc.com> Cc: Hugh Dickins <hughd@google.com>, "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>, linux-kernel <linux-kernel@vger.kernel.org>, linux-mm@kvack.org Subject: Re: [PATCHv9-rebased2 28/37] shmem: get_unmapped_area align huge page Date: Fri, 17 Jun 2016 14:29:50 +0300 [thread overview] Message-ID: <20160617112949.GB6534@node.shutemov.name> (raw) In-Reply-To: <054f01d1c86f$2994d5c0$7cbe8140$@alibaba-inc.com> On Fri, Jun 17, 2016 at 04:06:33PM +0800, Hillf Danton wrote: > > > > +unsigned long shmem_get_unmapped_area(struct file *file, > > + unsigned long uaddr, unsigned long len, > > + unsigned long pgoff, unsigned long flags) > > +{ > > + unsigned long (*get_area)(struct file *, > > + unsigned long, unsigned long, unsigned long, unsigned long); > > + unsigned long addr; > > + unsigned long offset; > > + unsigned long inflated_len; > > + unsigned long inflated_addr; > > + unsigned long inflated_offset; > > + > > + if (len > TASK_SIZE) > > + return -ENOMEM; > > + > > + get_area = current->mm->get_unmapped_area; > > + addr = get_area(file, uaddr, len, pgoff, flags); > > + > > + if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) > > + return addr; > > + if (IS_ERR_VALUE(addr)) > > + return addr; > > + if (addr & ~PAGE_MASK) > > + return addr; > > + if (addr > TASK_SIZE - len) > > + return addr; > > + > > + if (shmem_huge == SHMEM_HUGE_DENY) > > + return addr; > > + if (len < HPAGE_PMD_SIZE) > > + return addr; > > + if (flags & MAP_FIXED) > > + return addr; > > + /* > > + * Our priority is to support MAP_SHARED mapped hugely; > > + * and support MAP_PRIVATE mapped hugely too, until it is COWed. > > + * But if caller specified an address hint, respect that as before. > > + */ > > + if (uaddr) > > + return addr; > > + > > + if (shmem_huge != SHMEM_HUGE_FORCE) { > > + struct super_block *sb; > > + > > + if (file) { > > + VM_BUG_ON(file->f_op != &shmem_file_operations); > > + sb = file_inode(file)->i_sb; > > + } else { > > + /* > > + * Called directly from mm/mmap.c, or drivers/char/mem.c > > + * for "/dev/zero", to create a shared anonymous object. > > + */ > > + if (IS_ERR(shm_mnt)) > > + return addr; > > + sb = shm_mnt->mnt_sb; > > + } > > + if (SHMEM_SB(sb)->huge != SHMEM_HUGE_NEVER) > > + return addr; > > Try to ask for a larger arena if huge page is not disabled for > the mount(s/!=/==/)? <facepalm> I mostly test with SHMEM_HUGE_FORCE as it puts more stress on the system. Fixup: diff --git a/mm/shmem.c b/mm/shmem.c index e2c6b6e8387a..3f4ebe84ef61 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1979,7 +1979,7 @@ unsigned long shmem_get_unmapped_area(struct file *file, return addr; sb = shm_mnt->mnt_sb; } - if (SHMEM_SB(sb)->huge != SHMEM_HUGE_NEVER) + if (SHMEM_SB(sb)->huge == SHMEM_HUGE_NEVER) return addr; } -- Kirill A. Shutemov
WARNING: multiple messages have this Message-ID (diff)
From: "Kirill A. Shutemov" <kirill@shutemov.name> To: Hillf Danton <hillf.zj@alibaba-inc.com> Cc: Hugh Dickins <hughd@google.com>, "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>, linux-kernel <linux-kernel@vger.kernel.org>, linux-mm@kvack.org Subject: Re: [PATCHv9-rebased2 28/37] shmem: get_unmapped_area align huge page Date: Fri, 17 Jun 2016 14:29:50 +0300 [thread overview] Message-ID: <20160617112949.GB6534@node.shutemov.name> (raw) In-Reply-To: <054f01d1c86f$2994d5c0$7cbe8140$@alibaba-inc.com> On Fri, Jun 17, 2016 at 04:06:33PM +0800, Hillf Danton wrote: > > > > +unsigned long shmem_get_unmapped_area(struct file *file, > > + unsigned long uaddr, unsigned long len, > > + unsigned long pgoff, unsigned long flags) > > +{ > > + unsigned long (*get_area)(struct file *, > > + unsigned long, unsigned long, unsigned long, unsigned long); > > + unsigned long addr; > > + unsigned long offset; > > + unsigned long inflated_len; > > + unsigned long inflated_addr; > > + unsigned long inflated_offset; > > + > > + if (len > TASK_SIZE) > > + return -ENOMEM; > > + > > + get_area = current->mm->get_unmapped_area; > > + addr = get_area(file, uaddr, len, pgoff, flags); > > + > > + if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) > > + return addr; > > + if (IS_ERR_VALUE(addr)) > > + return addr; > > + if (addr & ~PAGE_MASK) > > + return addr; > > + if (addr > TASK_SIZE - len) > > + return addr; > > + > > + if (shmem_huge == SHMEM_HUGE_DENY) > > + return addr; > > + if (len < HPAGE_PMD_SIZE) > > + return addr; > > + if (flags & MAP_FIXED) > > + return addr; > > + /* > > + * Our priority is to support MAP_SHARED mapped hugely; > > + * and support MAP_PRIVATE mapped hugely too, until it is COWed. > > + * But if caller specified an address hint, respect that as before. > > + */ > > + if (uaddr) > > + return addr; > > + > > + if (shmem_huge != SHMEM_HUGE_FORCE) { > > + struct super_block *sb; > > + > > + if (file) { > > + VM_BUG_ON(file->f_op != &shmem_file_operations); > > + sb = file_inode(file)->i_sb; > > + } else { > > + /* > > + * Called directly from mm/mmap.c, or drivers/char/mem.c > > + * for "/dev/zero", to create a shared anonymous object. > > + */ > > + if (IS_ERR(shm_mnt)) > > + return addr; > > + sb = shm_mnt->mnt_sb; > > + } > > + if (SHMEM_SB(sb)->huge != SHMEM_HUGE_NEVER) > > + return addr; > > Try to ask for a larger arena if huge page is not disabled for > the mount(s/!=/==/)? <facepalm> I mostly test with SHMEM_HUGE_FORCE as it puts more stress on the system. Fixup: diff --git a/mm/shmem.c b/mm/shmem.c index e2c6b6e8387a..3f4ebe84ef61 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -1979,7 +1979,7 @@ unsigned long shmem_get_unmapped_area(struct file *file, return addr; sb = shm_mnt->mnt_sb; } - if (SHMEM_SB(sb)->huge != SHMEM_HUGE_NEVER) + if (SHMEM_SB(sb)->huge == SHMEM_HUGE_NEVER) return addr; } -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2016-06-17 11:29 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top [not found] <054e01d1c86d$c7261fd0$55725f70$@alibaba-inc.com> 2016-06-17 8:06 ` [PATCHv9-rebased2 28/37] shmem: get_unmapped_area align huge page Hillf Danton 2016-06-17 8:06 ` Hillf Danton 2016-06-17 11:29 ` Kirill A. Shutemov [this message] 2016-06-17 11:29 ` Kirill A. Shutemov 2016-06-06 14:06 [PATCHv9 00/32] THP-enabled tmpfs/shmem using compound pages Kirill A. Shutemov 2016-06-15 20:06 ` [PATCHv9-rebased2 00/37] " Kirill A. Shutemov 2016-06-15 20:06 ` [PATCHv9-rebased2 28/37] shmem: get_unmapped_area align huge page Kirill A. Shutemov 2016-06-15 20:06 ` Kirill A. Shutemov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20160617112949.GB6534@node.shutemov.name \ --to=kirill@shutemov.name \ --cc=hillf.zj@alibaba-inc.com \ --cc=hughd@google.com \ --cc=kirill.shutemov@linux.intel.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.