lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20180510083604.GI32366@dhcp22.suse.cz>
Date:   Thu, 10 May 2018 10:36:04 +0200
From:   Michal Hocko <mhocko@...nel.org>
To:     Mathieu Malaterre <malat@...ian.org>
Cc:     Andrew Morton <akpm@...ux-foundation.org>,
        Vlastimil Babka <vbabka@...e.cz>,
        Dan Williams <dan.j.williams@...el.com>,
        Joonsoo Kim <iamjoonsoo.kim@....com>,
        Pavel Tatashin <pasha.tatashin@...cle.com>,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
        Reza Arbab <arbab@...ux.vnet.ibm.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        Mel Gorman <mgorman@...hsingularity.net>,
        Tetsuo Handa <penguin-kernel@...ove.SAKURA.ne.jp>,
        linux-mm@...ck.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] mm: move function ‘is_pageblock_removable_nolock’ to
 mm/memory_hotplug.c

On Wed 09-05-18 20:59:57, Mathieu Malaterre wrote:
> Function ‘is_pageblock_removable_nolock’ is not used outside of
> mm/memory_hotplug.c. Move it next to unique caller:
> ‘is_mem_section_removable’ and make it static.
> Remove prototype in <linux/memory_hotplug.h>. Silence gcc warning (W=1):
> 
>   mm/page_alloc.c:7704:6: warning: no previous prototype for ‘is_pageblock_removable_nolock’ [-Wmissing-prototypes]
> 
> Suggested-by: Michal Hocko <mhocko@...nel.org>
> Signed-off-by: Mathieu Malaterre <malat@...ian.org>

Acked-by: Michal Hocko <mhocko@...e.com>

Thanks!

> ---
> v2: this function can be made static, make it so
> 
>  include/linux/memory_hotplug.h |  1 -
>  mm/memory_hotplug.c            | 23 +++++++++++++++++++++++
>  mm/page_alloc.c                | 23 -----------------------
>  3 files changed, 23 insertions(+), 24 deletions(-)
> 
> diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
> index e0e49b5b1ee1..9566d551a41b 100644
> --- a/include/linux/memory_hotplug.h
> +++ b/include/linux/memory_hotplug.h
> @@ -107,7 +107,6 @@ static inline bool movable_node_is_enabled(void)
>  }
>  
>  #ifdef CONFIG_MEMORY_HOTREMOVE
> -extern bool is_pageblock_removable_nolock(struct page *page);
>  extern int arch_remove_memory(u64 start, u64 size,
>  		struct vmem_altmap *altmap);
>  extern int __remove_pages(struct zone *zone, unsigned long start_pfn,
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index f74826cdceea..9342e120518a 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1237,6 +1237,29 @@ static struct page *next_active_pageblock(struct page *page)
>  	return page + pageblock_nr_pages;
>  }
>  
> +static bool is_pageblock_removable_nolock(struct page *page)
> +{
> +	struct zone *zone;
> +	unsigned long pfn;
> +
> +	/*
> +	 * We have to be careful here because we are iterating over memory
> +	 * sections which are not zone aware so we might end up outside of
> +	 * the zone but still within the section.
> +	 * We have to take care about the node as well. If the node is offline
> +	 * its NODE_DATA will be NULL - see page_zone.
> +	 */
> +	if (!node_online(page_to_nid(page)))
> +		return false;
> +
> +	zone = page_zone(page);
> +	pfn = page_to_pfn(page);
> +	if (!zone_spans_pfn(zone, pfn))
> +		return false;
> +
> +	return !has_unmovable_pages(zone, page, 0, MIGRATE_MOVABLE, true);
> +}
> +
>  /* Checks if this range of memory is likely to be hot-removable. */
>  bool is_mem_section_removable(unsigned long start_pfn, unsigned long nr_pages)
>  {
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 905db9d7962f..52731601ca5a 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -7701,29 +7701,6 @@ bool has_unmovable_pages(struct zone *zone, struct page *page, int count,
>  	return false;
>  }
>  
> -bool is_pageblock_removable_nolock(struct page *page)
> -{
> -	struct zone *zone;
> -	unsigned long pfn;
> -
> -	/*
> -	 * We have to be careful here because we are iterating over memory
> -	 * sections which are not zone aware so we might end up outside of
> -	 * the zone but still within the section.
> -	 * We have to take care about the node as well. If the node is offline
> -	 * its NODE_DATA will be NULL - see page_zone.
> -	 */
> -	if (!node_online(page_to_nid(page)))
> -		return false;
> -
> -	zone = page_zone(page);
> -	pfn = page_to_pfn(page);
> -	if (!zone_spans_pfn(zone, pfn))
> -		return false;
> -
> -	return !has_unmovable_pages(zone, page, 0, MIGRATE_MOVABLE, true);
> -}
> -
>  #if (defined(CONFIG_MEMORY_ISOLATION) && defined(CONFIG_COMPACTION)) || defined(CONFIG_CMA)
>  
>  static unsigned long pfn_max_align_down(unsigned long pfn)
> -- 
> 2.11.0
> 

-- 
Michal Hocko
SUSE Labs

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ