Re: [PATCH V2 1/4] hugetlbfs: add minimum size tracking fields to subpool structure

From: Andrew Morton
Date: Wed Mar 18 2015 - 17:26:08 EST


On Mon, 16 Mar 2015 16:53:26 -0700 Mike Kravetz <mike.kravetz@xxxxxxxxxx> wrote:

> Add a field to the subpool structure to indicate the minimimum
> number of huge pages to always be used by this subpool. This
> minimum count includes allocated pages as well as reserved pages.
> If the minimum number of pages for the subpool have not been
> allocated, pages are reserved up to this minimum. An additional
> field (rsv_hpages) is used to track the number of pages reserved
> to meet this minimum size. The hstate pointer in the subpool
> is convenient to have when reserving and unreserving the pages.
>
> ...
>
> --- a/include/linux/hugetlb.h
> +++ b/include/linux/hugetlb.h
> @@ -23,6 +23,8 @@ struct hugepage_subpool {
> spinlock_t lock;
> long count;
> long max_hpages, used_hpages;
> + struct hstate *hstate;
> + long min_hpages, rsv_hpages;
> };

Let's leave room for the descriptive comments which aren't there.

--- a/include/linux/hugetlb.h~hugetlbfs-add-minimum-size-tracking-fields-to-subpool-structure-fix
+++ a/include/linux/hugetlb.h
@@ -22,9 +22,11 @@ struct mmu_gather;
struct hugepage_subpool {
spinlock_t lock;
long count;
- long max_hpages, used_hpages;
+ long max_hpagesl
+ long used_hpages;
struct hstate *hstate;
- long min_hpages, rsv_hpages;
+ long min_hpages;
+ long rsv_hpages;
};

> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -85,6 +85,9 @@ struct hugepage_subpool *hugepage_new_subpool(long nr_blocks)
> spool->count = 1;
> spool->max_hpages = nr_blocks;
> spool->used_hpages = 0;
> + spool->hstate = NULL;
> + spool->min_hpages = 0;
> + spool->rsv_hpages = 0;

Four strikes and you're out!

--- a/mm/hugetlb.c~hugetlbfs-add-minimum-size-tracking-fields-to-subpool-structure-fix
+++ a/mm/hugetlb.c
@@ -77,17 +77,13 @@ struct hugepage_subpool *hugepage_new_su
{
struct hugepage_subpool *spool;

- spool = kmalloc(sizeof(*spool), GFP_KERNEL);
+ spool = kzalloc(sizeof(*spool), GFP_KERNEL);
if (!spool)
return NULL;

spin_lock_init(&spool->lock);
spool->count = 1;
spool->max_hpages = nr_blocks;
- spool->used_hpages = 0;
- spool->hstate = NULL;
- spool->min_hpages = 0;
- spool->rsv_hpages = 0;

return spool;
}
_

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/