From: Steven Truelove <steven.truelove@utoronto.ca>
To: "wli@holomorphy.com" <wli@holomorphy.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH] Round up huge page count to avoid allocating too little memory when 'size' argument is not a multiple of the huge page size.
Date: Sun, 26 Feb 2012 18:46:45 -0500 [thread overview]
Message-ID: <4F4AC465.3020602@utoronto.ca> (raw)
In-Reply-To: <684810209.212445.1330291482985.JavaMail.vpopmail@webmail1.networksolutionsemail.com
Well, PAGE_ALIGN(addr) is already defined as ALIGN(addr, PAGE_SIZE), so
ALIGN can be used with the huge page size easily enough.
In this case however, the code is calculating a number of pages, not an
address, so I feel my patch is appropriate.
FYI, I ran into this issue while allocating huge pages as shared memory
in userspace. shmget would always succeed, but shmat would fail unless
the requested size mapped closely to the huge page size. shmget would
round up to the nearest PAGE_SIZE, but when allocating huge pages this
obviously isn't enough.
On systems with multiple huge page sizes, it isn't obvious what the huge
page size will be for a shmget request. It only becomes obvious in
hugetlbfs, so that is where I made the change.
Regards,
Steven Truelove
On 26/02/2012 4:24 PM, wli@holomorphy.com wrote:
>
> It might be a good idea to introduce a hugepage analogue of
> PAGE_ALIGN() for this purpose.
>
> I'll try to get a more normal email setup at some point.
>
> -- wli
>
>
> On February 23, 2012 at 8:28 AM Steven Truelove
> <steven.truelove@utoronto.ca> wrote:
>
> > Signed-off-by: Steven Truelove <steven.truelove@utoronto.ca>
> > ---
> > fs/hugetlbfs/inode.c | 8 +++++---
> > 1 files changed, 5 insertions(+), 3 deletions(-)
> >
> > diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c
> > index 1e85a7a..fce2527 100644
> > --- a/fs/hugetlbfs/inode.c
> > +++ b/fs/hugetlbfs/inode.c
> > @@ -938,6 +938,8 @@ struct file *hugetlb_file_setup(const char
> *name, size_t size,
> > struct path path;
> > struct dentry *root;
> > struct qstr quick_string;
> > + struct hstate *hstate;
> > + int num_pages;
> >
> > *user = NULL;
> > if (!hugetlbfs_vfsmount)
> > @@ -967,10 +969,10 @@ struct file *hugetlb_file_setup(const char
> *name, size_t size,
> > if (!inode)
> > goto out_dentry;
> >
> > + hstate = hstate_inode(inode);
> > + num_pages = (size + huge_page_size(hstate) - 1) >>
> huge_page_shift(hstate);
> > error = -ENOMEM;
> > - if (hugetlb_reserve_pages(inode, 0,
> > - size >>
> huge_page_shift(hstate_inode(inode)), NULL,
> > - acctflag))
> > + if (hugetlb_reserve_pages(inode, 0, num_pages, NULL,
> acctflag))
> > goto out_inode;
> >
> > d_instantiate(path.dentry, inode);
> > --
> > 1.7.3.4
> >
next prev parent reply other threads:[~2012-02-26 23:46 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-23 13:28 [PATCH] Round up huge page count to avoid allocating too little memory when 'size' argument is not a multiple of the huge page size Steven Truelove
2012-02-26 23:46 ` Steven Truelove [this message]
-- strict thread matches above, loose matches on Subject: below --
2012-02-09 16:16 Steven Truelove
2012-02-27 7:31 ` Andrew Morton
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=4F4AC465.3020602@utoronto.ca \
--to=steven.truelove@utoronto.ca \
--cc=linux-kernel@vger.kernel.org \
--cc=wli@holomorphy.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox