Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1591871 > unrolled thread
| Started by | Xishi Qiu <qiuxishi@huawei.com> |
|---|---|
| First post | 2017-03-03 12:30 +0100 |
| Last post | 2017-03-08 16:00 +0100 |
| Articles | 6 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code Xishi Qiu <qiuxishi@huawei.com> - 2017-03-03 12:30 +0100
Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code Michal Hocko <mhocko@kernel.org> - 2017-03-03 17:00 +0100
Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code Andrew Morton <akpm@linux-foundation.org> - 2017-03-04 00:20 +0100
Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code Michal Hocko <mhocko@kernel.org> - 2017-03-06 15:20 +0100
Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code Andrew Morton <akpm@linux-foundation.org> - 2017-03-06 22:00 +0100
Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code Michal Hocko <mhocko@kernel.org> - 2017-03-08 16:00 +0100
| From | Xishi Qiu <qiuxishi@huawei.com> |
|---|---|
| Date | 2017-03-03 12:30 +0100 |
| Subject | [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code |
| Message-ID | <tgTzj-t8-7@gated-at.bofh.it> |
Introduce two helpers, is_migrate_highatomic() and is_migrate_highatomic_page().
Simplify the code, no functional changes.
Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
---
include/linux/mmzone.h | 5 +++++
mm/page_alloc.c | 14 ++++++--------
2 files changed, 11 insertions(+), 8 deletions(-)
diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
index 8e02b37..8124440 100644
--- a/include/linux/mmzone.h
+++ b/include/linux/mmzone.h
@@ -66,6 +66,11 @@ enum {
/* In mm/page_alloc.c; keep in sync also with show_migration_types() there */
extern char * const migratetype_names[MIGRATE_TYPES];
+#define is_migrate_highatomic(migratetype) \
+ (migratetype == MIGRATE_HIGHATOMIC)
+#define is_migrate_highatomic_page(_page) \
+ (get_pageblock_migratetype(_page) == MIGRATE_HIGHATOMIC)
+
#ifdef CONFIG_CMA
# define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
# define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 9f9623d..40d79a6 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -2040,8 +2040,8 @@ static void reserve_highatomic_pageblock(struct page *page, struct zone *zone,
/* Yoink! */
mt = get_pageblock_migratetype(page);
- if (mt != MIGRATE_HIGHATOMIC &&
- !is_migrate_isolate(mt) && !is_migrate_cma(mt)) {
+ if (!is_migrate_highatomic(mt) && !is_migrate_isolate(mt)
+ && !is_migrate_cma(mt)) {
zone->nr_reserved_highatomic += pageblock_nr_pages;
set_pageblock_migratetype(page, MIGRATE_HIGHATOMIC);
move_freepages_block(zone, page, MIGRATE_HIGHATOMIC);
@@ -2098,8 +2098,7 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
* from highatomic to ac->migratetype. So we should
* adjust the count once.
*/
- if (get_pageblock_migratetype(page) ==
- MIGRATE_HIGHATOMIC) {
+ if (is_migrate_highatomic_page(page)) {
/*
* It should never happen but changes to
* locking could inadvertently allow a per-cpu
@@ -2156,8 +2155,7 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
page = list_first_entry(&area->free_list[fallback_mt],
struct page, lru);
- if (can_steal &&
- get_pageblock_migratetype(page) != MIGRATE_HIGHATOMIC)
+ if (can_steal && !is_migrate_highatomic_page(page))
steal_suitable_fallback(zone, page, start_migratetype);
/* Remove the page from the freelists */
@@ -2494,7 +2492,7 @@ void free_hot_cold_page(struct page *page, bool cold)
/*
* We only track unmovable, reclaimable and movable on pcp lists.
* Free ISOLATE pages back to the allocator because they are being
- * offlined but treat RESERVE as movable pages so we can get those
+ * offlined but treat HIGHATOMIC as movable pages so we can get those
* areas back if necessary. Otherwise, we may have to free
* excessively into the page allocator
*/
@@ -2605,7 +2603,7 @@ int __isolate_free_page(struct page *page, unsigned int order)
for (; page < endpage; page += pageblock_nr_pages) {
int mt = get_pageblock_migratetype(page);
if (!is_migrate_isolate(mt) && !is_migrate_cma(mt)
- && mt != MIGRATE_HIGHATOMIC)
+ && !is_migrate_highatomic(mt))
set_pageblock_migratetype(page,
MIGRATE_MOVABLE);
}
--
1.8.3.1
[toc] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-03-03 17:00 +0100 |
| Message-ID | <tgXMC-3jh-15@gated-at.bofh.it> |
| In reply to | #1591871 |
On Fri 03-03-17 19:10:13, Xishi Qiu wrote:
> Introduce two helpers, is_migrate_highatomic() and is_migrate_highatomic_page().
> Simplify the code, no functional changes.
static inline helpers would be nicer than macros
> Signed-off-by: Xishi Qiu <qiuxishi@huawei.com>
OK this fits with other MIGRATE_$FOO types
Acked-by: Michal Hocko <mhocko@suse.com>
> ---
> include/linux/mmzone.h | 5 +++++
> mm/page_alloc.c | 14 ++++++--------
> 2 files changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h
> index 8e02b37..8124440 100644
> --- a/include/linux/mmzone.h
> +++ b/include/linux/mmzone.h
> @@ -66,6 +66,11 @@ enum {
> /* In mm/page_alloc.c; keep in sync also with show_migration_types() there */
> extern char * const migratetype_names[MIGRATE_TYPES];
>
> +#define is_migrate_highatomic(migratetype) \
> + (migratetype == MIGRATE_HIGHATOMIC)
> +#define is_migrate_highatomic_page(_page) \
> + (get_pageblock_migratetype(_page) == MIGRATE_HIGHATOMIC)
> +
> #ifdef CONFIG_CMA
> # define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
> # define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 9f9623d..40d79a6 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -2040,8 +2040,8 @@ static void reserve_highatomic_pageblock(struct page *page, struct zone *zone,
>
> /* Yoink! */
> mt = get_pageblock_migratetype(page);
> - if (mt != MIGRATE_HIGHATOMIC &&
> - !is_migrate_isolate(mt) && !is_migrate_cma(mt)) {
> + if (!is_migrate_highatomic(mt) && !is_migrate_isolate(mt)
> + && !is_migrate_cma(mt)) {
> zone->nr_reserved_highatomic += pageblock_nr_pages;
> set_pageblock_migratetype(page, MIGRATE_HIGHATOMIC);
> move_freepages_block(zone, page, MIGRATE_HIGHATOMIC);
> @@ -2098,8 +2098,7 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
> * from highatomic to ac->migratetype. So we should
> * adjust the count once.
> */
> - if (get_pageblock_migratetype(page) ==
> - MIGRATE_HIGHATOMIC) {
> + if (is_migrate_highatomic_page(page)) {
> /*
> * It should never happen but changes to
> * locking could inadvertently allow a per-cpu
> @@ -2156,8 +2155,7 @@ static bool unreserve_highatomic_pageblock(const struct alloc_context *ac,
>
> page = list_first_entry(&area->free_list[fallback_mt],
> struct page, lru);
> - if (can_steal &&
> - get_pageblock_migratetype(page) != MIGRATE_HIGHATOMIC)
> + if (can_steal && !is_migrate_highatomic_page(page))
> steal_suitable_fallback(zone, page, start_migratetype);
>
> /* Remove the page from the freelists */
> @@ -2494,7 +2492,7 @@ void free_hot_cold_page(struct page *page, bool cold)
> /*
> * We only track unmovable, reclaimable and movable on pcp lists.
> * Free ISOLATE pages back to the allocator because they are being
> - * offlined but treat RESERVE as movable pages so we can get those
> + * offlined but treat HIGHATOMIC as movable pages so we can get those
> * areas back if necessary. Otherwise, we may have to free
> * excessively into the page allocator
> */
> @@ -2605,7 +2603,7 @@ int __isolate_free_page(struct page *page, unsigned int order)
> for (; page < endpage; page += pageblock_nr_pages) {
> int mt = get_pageblock_migratetype(page);
> if (!is_migrate_isolate(mt) && !is_migrate_cma(mt)
> - && mt != MIGRATE_HIGHATOMIC)
> + && !is_migrate_highatomic(mt))
> set_pageblock_migratetype(page,
> MIGRATE_MOVABLE);
> }
> --
> 1.8.3.1
>
--
Michal Hocko
SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Date | 2017-03-04 00:20 +0100 |
| Subject | Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code |
| Message-ID | <th4Ep-8eD-9@gated-at.bofh.it> |
| In reply to | #1592090 |
On Fri, 3 Mar 2017 14:18:08 +0100 Michal Hocko <mhocko@kernel.org> wrote:
> On Fri 03-03-17 19:10:13, Xishi Qiu wrote:
> > Introduce two helpers, is_migrate_highatomic() and is_migrate_highatomic_page().
> > Simplify the code, no functional changes.
>
> static inline helpers would be nicer than macros
Always.
We made a big dependency mess in mmzone.h. internal.h works.
--- a/include/linux/mmzone.h~mm-use-is_migrate_highatomic-to-simplify-the-code-fix
+++ a/include/linux/mmzone.h
@@ -35,7 +35,7 @@
*/
#define PAGE_ALLOC_COSTLY_ORDER 3
-enum {
+enum migratetype {
MIGRATE_UNMOVABLE,
MIGRATE_MOVABLE,
MIGRATE_RECLAIMABLE,
@@ -66,11 +66,6 @@ enum {
/* In mm/page_alloc.c; keep in sync also with show_migration_types() there */
extern char * const migratetype_names[MIGRATE_TYPES];
-#define is_migrate_highatomic(migratetype) \
- (migratetype == MIGRATE_HIGHATOMIC)
-#define is_migrate_highatomic_page(_page) \
- (get_pageblock_migratetype(_page) == MIGRATE_HIGHATOMIC)
-
#ifdef CONFIG_CMA
# define is_migrate_cma(migratetype) unlikely((migratetype) == MIGRATE_CMA)
# define is_migrate_cma_page(_page) (get_pageblock_migratetype(_page) == MIGRATE_CMA)
diff -puN mm/page_alloc.c~mm-use-is_migrate_highatomic-to-simplify-the-code-fix mm/page_alloc.c
diff -puN mm/internal.h~mm-use-is_migrate_highatomic-to-simplify-the-code-fix mm/internal.h
--- a/mm/internal.h~mm-use-is_migrate_highatomic-to-simplify-the-code-fix
+++ a/mm/internal.h
@@ -503,4 +503,14 @@ extern const struct trace_print_flags pa
extern const struct trace_print_flags vmaflag_names[];
extern const struct trace_print_flags gfpflag_names[];
+static inline bool is_migrate_highatomic(enum migratetype migratetype)
+{
+ return migratetype == MIGRATE_HIGHATOMIC;
+}
+
+static inline bool is_migrate_highatomic_page(struct page *page)
+{
+ return get_pageblock_migratetype(page) == MIGRATE_HIGHATOMIC;
+}
+
#endif /* __MM_INTERNAL_H */
_
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-03-06 15:20 +0100 |
| Message-ID | <ti1Eu-V3-17@gated-at.bofh.it> |
| In reply to | #1592338 |
On Fri 03-03-17 15:06:19, Andrew Morton wrote:
> On Fri, 3 Mar 2017 14:18:08 +0100 Michal Hocko <mhocko@kernel.org> wrote:
>
> > On Fri 03-03-17 19:10:13, Xishi Qiu wrote:
> > > Introduce two helpers, is_migrate_highatomic() and is_migrate_highatomic_page().
> > > Simplify the code, no functional changes.
> >
> > static inline helpers would be nicer than macros
>
> Always.
>
> We made a big dependency mess in mmzone.h. internal.h works.
Just too bad we have three different header files for
is_migrate_isolate{_page} - include/linux/page-isolation.h
is_migrate_cma{_page} - include/linux/mmzone.h
is_migrate_highatomic{_page} - mm/internal.h
I guess we want all of them in internal.h?
--
Michal Hocko
SUSE Labs
[toc] | [prev] | [next] | [standalone]
| From | Andrew Morton <akpm@linux-foundation.org> |
|---|---|
| Date | 2017-03-06 22:00 +0100 |
| Subject | Re: [PATCH 1/2] mm: use is_migrate_highatomic() to simplify the code |
| Message-ID | <ti7TA-5e3-19@gated-at.bofh.it> |
| In reply to | #1593394 |
On Mon, 6 Mar 2017 14:38:33 +0100 Michal Hocko <mhocko@kernel.org> wrote:
> On Fri 03-03-17 15:06:19, Andrew Morton wrote:
> > On Fri, 3 Mar 2017 14:18:08 +0100 Michal Hocko <mhocko@kernel.org> wrote:
> >
> > > On Fri 03-03-17 19:10:13, Xishi Qiu wrote:
> > > > Introduce two helpers, is_migrate_highatomic() and is_migrate_highatomic_page().
> > > > Simplify the code, no functional changes.
> > >
> > > static inline helpers would be nicer than macros
> >
> > Always.
> >
> > We made a big dependency mess in mmzone.h. internal.h works.
>
> Just too bad we have three different header files for
> is_migrate_isolate{_page} - include/linux/page-isolation.h
> is_migrate_cma{_page} - include/linux/mmzone.h
> is_migrate_highatomic{_page} - mm/internal.h
>
> I guess we want all of them in internal.h?
I suppose so. arch/powerpc/mm/mmu_context_iommu.c is using
is_migrate_cma_page which would need some attention.
[toc] | [prev] | [next] | [standalone]
| From | Michal Hocko <mhocko@kernel.org> |
|---|---|
| Date | 2017-03-08 16:00 +0100 |
| Message-ID | <tiLeh-7ZD-3@gated-at.bofh.it> |
| In reply to | #1593728 |
On Mon 06-03-17 12:43:18, Andrew Morton wrote:
> On Mon, 6 Mar 2017 14:38:33 +0100 Michal Hocko <mhocko@kernel.org> wrote:
>
> > On Fri 03-03-17 15:06:19, Andrew Morton wrote:
> > > On Fri, 3 Mar 2017 14:18:08 +0100 Michal Hocko <mhocko@kernel.org> wrote:
> > >
> > > > On Fri 03-03-17 19:10:13, Xishi Qiu wrote:
> > > > > Introduce two helpers, is_migrate_highatomic() and is_migrate_highatomic_page().
> > > > > Simplify the code, no functional changes.
> > > >
> > > > static inline helpers would be nicer than macros
> > >
> > > Always.
> > >
> > > We made a big dependency mess in mmzone.h. internal.h works.
> >
> > Just too bad we have three different header files for
> > is_migrate_isolate{_page} - include/linux/page-isolation.h
> > is_migrate_cma{_page} - include/linux/mmzone.h
> > is_migrate_highatomic{_page} - mm/internal.h
> >
> > I guess we want all of them in internal.h?
>
> I suppose so. arch/powerpc/mm/mmu_context_iommu.c is using
> is_migrate_cma_page which would need some attention.
Ble. I am really wondering whether these helpers actually make the end
result really worth all the troubles and the mess.
--
Michal Hocko
SUSE Labs
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web