Message ID | 20221007010706.2916472-3-naoya.horiguchi@linux.dev (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | mm, hwpoison: improve handling workload related to hugetlb and memory_hotplug | expand |
On Fri, Oct 07, 2022 at 10:07:04AM +0900, Naoya Horiguchi wrote: > From: Naoya Horiguchi <naoya.horiguchi@nec.com> > > These interfaces will be used by drivers/base/memory.c by later patch, so as a > preparatory work move them to more common header file visible to the file. > > Signed-off-by: Naoya Horiguchi <naoya.horiguchi@nec.com> > Reviewed-by: Miaohe Lin <linmiaohe@huawei.com> > --- > ChangeLog v3 -> v6: > - remove static in definition of num_poisoned_pages_inc() to fix build error. > > ChangeLog v2 -> v3: > - added declaration of num_poisoned_pages_inc() in #ifdef CONFIG_MEMORY_FAILURE > --- > arch/parisc/kernel/pdt.c | 3 +-- > include/linux/mm.h | 5 +++++ > include/linux/swapops.h | 24 ++---------------------- > mm/memory-failure.c | 10 ++++++++++ > 4 files changed, 18 insertions(+), 24 deletions(-) > > diff --git a/arch/parisc/kernel/pdt.c b/arch/parisc/kernel/pdt.c > index e391b175f5ec..fdc880e2575a 100644 > --- a/arch/parisc/kernel/pdt.c > +++ b/arch/parisc/kernel/pdt.c > @@ -18,8 +18,7 @@ > #include <linux/kthread.h> > #include <linux/initrd.h> > #include <linux/pgtable.h> > -#include <linux/swap.h> > -#include <linux/swapops.h> > +#include <linux/mm.h> I am probably missing something. num_poisoned_pages_* functions are in swapops.h, but why are you removing swap.h as well? Also, reading the changelog it sounded like both functions would be in mm.h, but actually only the _inc part is. The rest looks good to me.
On Thu, Oct 13, 2022 at 04:31:53PM +0200, Oscar Salvador wrote: > On Fri, Oct 07, 2022 at 10:07:04AM +0900, Naoya Horiguchi wrote: > > From: Naoya Horiguchi <naoya.horiguchi@nec.com> > > > > These interfaces will be used by drivers/base/memory.c by later patch, so as a > > preparatory work move them to more common header file visible to the file. > > > > Signed-off-by: Naoya Horiguchi <naoya.horiguchi@nec.com> > > Reviewed-by: Miaohe Lin <linmiaohe@huawei.com> > > --- > > ChangeLog v3 -> v6: > > - remove static in definition of num_poisoned_pages_inc() to fix build error. > > > > ChangeLog v2 -> v3: > > - added declaration of num_poisoned_pages_inc() in #ifdef CONFIG_MEMORY_FAILURE > > --- > > arch/parisc/kernel/pdt.c | 3 +-- > > include/linux/mm.h | 5 +++++ > > include/linux/swapops.h | 24 ++---------------------- > > mm/memory-failure.c | 10 ++++++++++ > > 4 files changed, 18 insertions(+), 24 deletions(-) > > > > diff --git a/arch/parisc/kernel/pdt.c b/arch/parisc/kernel/pdt.c > > index e391b175f5ec..fdc880e2575a 100644 > > --- a/arch/parisc/kernel/pdt.c > > +++ b/arch/parisc/kernel/pdt.c > > @@ -18,8 +18,7 @@ > > #include <linux/kthread.h> > > #include <linux/initrd.h> > > #include <linux/pgtable.h> > > -#include <linux/swap.h> > > -#include <linux/swapops.h> > > +#include <linux/mm.h> > > I am probably missing something. > num_poisoned_pages_* functions are in swapops.h, but why are you removing swap.h as well? This file included swap.h and swapops.h together to use num_poisoned_pages_inc() by commit 0e5a7ff6e36a ("parisc: Report bad pages as HardwareCorrupted"), so I thought these may be updated together. > > Also, reading the changelog it sounded like both functions would be in mm.h, > but actually only the _inc part is. > > ChangeLog v2 -> v3: > > - added declaration of num_poisoned_pages_inc() in #ifdef CONFIG_MEMORY_FAILURE Yeah, important part of this log is "in #ifdef CONFIG_MEMORY_FAILURE", but this might not be clear from my writing. Sorry about that, I'll care about making change log clearer from now. This change log will not included when merged to mainline, so this hopefully will not confuse anyone. > > The rest looks good to me. Thank you. - Naoya Horiguchi
diff --git a/arch/parisc/kernel/pdt.c b/arch/parisc/kernel/pdt.c index e391b175f5ec..fdc880e2575a 100644 --- a/arch/parisc/kernel/pdt.c +++ b/arch/parisc/kernel/pdt.c @@ -18,8 +18,7 @@ #include <linux/kthread.h> #include <linux/initrd.h> #include <linux/pgtable.h> -#include <linux/swap.h> -#include <linux/swapops.h> +#include <linux/mm.h> #include <asm/pdc.h> #include <asm/pdcpat.h> diff --git a/include/linux/mm.h b/include/linux/mm.h index 3264bf993ad8..782ab29bb1fb 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3279,12 +3279,17 @@ extern int soft_offline_page(unsigned long pfn, int flags); #ifdef CONFIG_MEMORY_FAILURE extern int __get_huge_page_for_hwpoison(unsigned long pfn, int flags, bool *migratable_cleared); +extern void num_poisoned_pages_inc(void); #else static inline int __get_huge_page_for_hwpoison(unsigned long pfn, int flags, bool *migratable_cleared) { return 0; } + +static inline void num_poisoned_pages_inc(void) +{ +} #endif #ifndef arch_memory_failure diff --git a/include/linux/swapops.h b/include/linux/swapops.h index a91dd08e107b..3e58a812399a 100644 --- a/include/linux/swapops.h +++ b/include/linux/swapops.h @@ -581,8 +581,6 @@ static inline int is_pmd_migration_entry(pmd_t pmd) #ifdef CONFIG_MEMORY_FAILURE -extern atomic_long_t num_poisoned_pages __read_mostly; - /* * Support for hardware poisoned pages */ @@ -610,17 +608,7 @@ static inline struct page *hwpoison_entry_to_page(swp_entry_t entry) return p; } -static inline void num_poisoned_pages_inc(void) -{ - atomic_long_inc(&num_poisoned_pages); -} - -static inline void num_poisoned_pages_sub(long i) -{ - atomic_long_sub(i, &num_poisoned_pages); -} - -#else /* CONFIG_MEMORY_FAILURE */ +#else static inline swp_entry_t make_hwpoison_entry(struct page *page) { @@ -636,15 +624,7 @@ static inline struct page *hwpoison_entry_to_page(swp_entry_t entry) { return NULL; } - -static inline void num_poisoned_pages_inc(void) -{ -} - -static inline void num_poisoned_pages_sub(long i) -{ -} -#endif /* CONFIG_MEMORY_FAILURE */ +#endif static inline int non_swap_entry(swp_entry_t entry) { diff --git a/mm/memory-failure.c b/mm/memory-failure.c index d4fef56c0438..323e0a21833f 100644 --- a/mm/memory-failure.c +++ b/mm/memory-failure.c @@ -74,6 +74,16 @@ atomic_long_t num_poisoned_pages __read_mostly = ATOMIC_LONG_INIT(0); static bool hw_memory_failure __read_mostly = false; +inline void num_poisoned_pages_inc(void) +{ + atomic_long_inc(&num_poisoned_pages); +} + +static inline void num_poisoned_pages_sub(long i) +{ + atomic_long_sub(i, &num_poisoned_pages); +} + /* * Return values: * 1: the page is dissolved (if needed) and taken off from buddy,