mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
hugetlbfs: per mount huge page sizes
Add the ability to configure the hugetlb hstate used on a per mount basis. - Add a new pagesize= option to the hugetlbfs mount that allows setting the page size - This option causes the mount code to find the hstate corresponding to the specified size, and sets up a pointer to the hstate in the mount's superblock. - Change the hstate accessors to use this information rather than the global_hstate they were using (requires a slight change in mm/memory.c so we don't NULL deref in the error-unmap path -- see comments). [np: take hstate out of hugetlbfs inode and vma->vm_private_data] Acked-by: Adam Litke <agl@us.ibm.com> Acked-by: Nishanth Aravamudan <nacc@us.ibm.com> Signed-off-by: Andi Kleen <ak@suse.de> Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e5ff215941
commit
a137e1cc6d
4 changed files with 64 additions and 29 deletions
|
@ -100,6 +100,7 @@ struct hugetlbfs_config {
|
|||
umode_t mode;
|
||||
long nr_blocks;
|
||||
long nr_inodes;
|
||||
struct hstate *hstate;
|
||||
};
|
||||
|
||||
struct hugetlbfs_sb_info {
|
||||
|
@ -108,6 +109,7 @@ struct hugetlbfs_sb_info {
|
|||
long max_inodes; /* inodes allowed */
|
||||
long free_inodes; /* inodes free */
|
||||
spinlock_t stat_lock;
|
||||
struct hstate *hstate;
|
||||
};
|
||||
|
||||
|
||||
|
@ -191,19 +193,21 @@ extern unsigned int default_hstate_idx;
|
|||
|
||||
#define default_hstate (hstates[default_hstate_idx])
|
||||
|
||||
static inline struct hstate *hstate_vma(struct vm_area_struct *vma)
|
||||
static inline struct hstate *hstate_inode(struct inode *i)
|
||||
{
|
||||
return &default_hstate;
|
||||
struct hugetlbfs_sb_info *hsb;
|
||||
hsb = HUGETLBFS_SB(i->i_sb);
|
||||
return hsb->hstate;
|
||||
}
|
||||
|
||||
static inline struct hstate *hstate_file(struct file *f)
|
||||
{
|
||||
return &default_hstate;
|
||||
return hstate_inode(f->f_dentry->d_inode);
|
||||
}
|
||||
|
||||
static inline struct hstate *hstate_inode(struct inode *i)
|
||||
static inline struct hstate *hstate_vma(struct vm_area_struct *vma)
|
||||
{
|
||||
return &default_hstate;
|
||||
return hstate_file(vma->vm_file);
|
||||
}
|
||||
|
||||
static inline unsigned long huge_page_size(struct hstate *h)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue