Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1491455
| From | Gerald Schaefer <gerald.schaefer@de.ibm.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v4 3/3] mm/hugetlb: improve locking in dissolve_free_huge_pages() |
| Date | 2016-09-26 19:30 +0200 |
| Message-ID | <slHT3-6G2-9@gated-at.bofh.it> (permalink) |
| References | <slHT3-6G2-1@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
For every pfn aligned to minimum_order, dissolve_free_huge_pages() will
call dissolve_free_huge_page() which takes the hugetlb spinlock, even if
the page is not huge at all or a hugepage that is in-use.
Improve this by doing the PageHuge() and page_count() checks already in
dissolve_free_huge_pages() before calling dissolve_free_huge_page(). In
dissolve_free_huge_page(), when holding the spinlock, those checks need
to be revalidated.
Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com>
---
mm/hugetlb.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 91ae1f5..770d83e 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -1476,14 +1476,20 @@ static int dissolve_free_huge_page(struct page *page)
int dissolve_free_huge_pages(unsigned long start_pfn, unsigned long end_pfn)
{
unsigned long pfn;
+ struct page *page;
int rc = 0;
if (!hugepages_supported())
return rc;
- for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << minimum_order)
- if (rc = dissolve_free_huge_page(pfn_to_page(pfn)))
- break;
+ for (pfn = start_pfn; pfn < end_pfn; pfn += 1 << minimum_order) {
+ page = pfn_to_page(pfn);
+ if (PageHuge(page) && !page_count(page)) {
+ rc = dissolve_free_huge_page(page);
+ if (rc)
+ break;
+ }
+ }
return rc;
}
--
2.8.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v4 0/3] mm/hugetlb: memory offline issues with hugepages Gerald Schaefer <gerald.schaefer@de.ibm.com> - 2016-09-26 19:30 +0200
[PATCH v4 2/3] mm/hugetlb: check for reserved hugepages during memory offline Gerald Schaefer <gerald.schaefer@de.ibm.com> - 2016-09-26 19:30 +0200
Re: [PATCH v4 2/3] mm/hugetlb: check for reserved hugepages during memory offline Michal Hocko <mhocko@kernel.org> - 2016-09-29 14:40 +0200
Re: [PATCH v4 2/3] mm/hugetlb: check for reserved hugepages during memory offline Mike Kravetz <mike.kravetz@oracle.com> - 2016-09-29 19:20 +0200
Re: [PATCH v4 2/3] mm/hugetlb: check for reserved hugepages during memory offline Michal Hocko <mhocko@kernel.org> - 2016-09-30 08:40 +0200
[PATCH v4 3/3] mm/hugetlb: improve locking in dissolve_free_huge_pages() Gerald Schaefer <gerald.schaefer@de.ibm.com> - 2016-09-26 19:30 +0200
Re: [PATCH v4 3/3] mm/hugetlb: improve locking in dissolve_free_huge_pages() Michal Hocko <mhocko@kernel.org> - 2016-09-29 14:40 +0200
[PATCH v4 1/3] mm/hugetlb: fix memory offline with hugepage size > memory block size Gerald Schaefer <gerald.schaefer@de.ibm.com> - 2016-09-26 19:30 +0200
Re: [PATCH v4 1/3] mm/hugetlb: fix memory offline with hugepage size > memory block size Michal Hocko <mhocko@kernel.org> - 2016-09-29 14:20 +0200
Re: [PATCH v4 0/3] mm/hugetlb: memory offline issues with hugepages Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> - 2016-09-29 08:20 +0200
csiph-web