Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-07-08 Thread Philip Li
On Wed, Jul 08, 2020 at 11:20:26AM -0700, Nick Desaulniers wrote:
> On Wed, Jul 8, 2020 at 12:23 AM Xia, Hui  wrote:
> >
> >
> >
> > >-Original Message-
> > >From: Wei Yang 
> > >Sent: 2020年7月1日 19:58
> > >To: lkp 
> > >Cc: Wei Yang ; Williams, Dan J
> > >; a...@linux-foundation.org; 
> > >kbuild-...@lists.01.org;
> > >clang-built-li...@googlegroups.com; linux...@kvack.org; linux-
> > >ker...@vger.kernel.org
> > >Subject: Re: [PATCH] mm/sparse: only sub-section aligned range would be
> > >populated
> > >
> > >On Wed, Jul 01, 2020 at 02:11:10AM +0800, kernel test robot wrote:
> > >>Hi Wei,
> > >>
> > >>Thank you for the patch! Perhaps something to improve:
> > >>
> > >>[auto build test WARNING on mmotm/master]
> > >>
> > >>url:https://github.com/0day-ci/linux/commits/Wei-Yang/mm-sparse-only-
> > >sub-section-aligned-range-would-be-populated/20200630-101713
> > >>base:   git://git.cmpxchg.org/linux-mmotm.git master
> > >>config: x86_64-allnoconfig (attached as .config)
> 
> Another issue was that this was an allnoconfig x86_64 build with
> Clang.  While ARCH=x86_64 defconfigs set:
> CONFIG_64BIT=y
> CONFIG_X86_64=y
> 
> allnoconfig turns those off, making it a 32b x86 build.  We cannot yet
> build an ARCH=i386 build yet with Clang, so that means this target is
> not green to begin with.
> 
> + Arnd
> There might be a way for us to disable maybe CONFIG_X86_32 when
> building with Clang?  or make it so that randconfig can't dig this up?
> 
> +Philip
> I'm not sure if it's easy to disable `allnoconfig` x86 builds with
yes, this is easy, we will disable the build w/ clang in this situation.

> Clang?  Also, I feel like we're asking for a bunch of special cases
> while we work through all the issues.  We would like to revert these
> special cases once we're in better shape.  Are you tracking a list of
> exceptions, so that we can estimate the work to fix on our side, and
> that we know to re-enable test coverage once fixed?
It is not that formally tracked, though it is controlled in the code
to know what is currently disabled. Currently we may not know when
it can be opened, thus we check the ClangBuiltLinux sometimes to see
progress of interested issues.

> 
> > >>compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project
> > >>cf1d04484344be52ada8178e41d18fd15a9b880c)
> > >>reproduce (this is a W=1 build):
> > >>wget https://raw.githubusercontent.com/intel/lkp-
> > >tests/master/sbin/make.cross -O ~/bin/make.cross
> > >>chmod +x ~/bin/make.cross
> > >># install x86_64 cross compiling tool for clang build
> > >># apt-get install binutils-x86-64-linux-gnu
> > >># save the attached .config to linux build tree
> > >>COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross
> > >>ARCH=x86_64
> > >>
> > >>If you fix the issue, kindly add following tag as appropriate
> > >>Reported-by: kernel test robot 
> > >>
> > >
> > >Sorry, I don't follow up with this error report.
> > >
> > >It looks like a build error, while I just removes some check and the build 
> > >pass from
> > >my side. Confused with this error report.
> > It is false positive. Please ignore. Sorry for inconvenience.
> > The report complains about " warning: no previous prototype for function 
> > 'devkmsg_sysctl_set_loglvl'" which is not caused by commit in this report. 
> > We will investigate and fix in 0-day side.
> >
> > >
> > >>All warnings (new ones prefixed by >>):
> > >>
> > >>   include/linux/signal.h:137:2: note: expanded from macro 
> > >> '_SIG_SET_BINOP'
> > >>   case 1: ^
> > >>   include/linux/signal.h:177:1: warning: unannotated fall-through between
> > >switch labels
> > >>   _SIG_SET_OP(signotset, _sig_not)
> > >>   ^
> > >>   include/linux/signal.h:167:2: note: expanded from macro '_SIG_SET_OP'
> > >>   case 2: = ^
> > >>   include/linux/signal.h:177:1: warning: unannotated fall-through between
> > >switch labels
> > >>   include/linux/signal.h:169:2: note: expanded from macro '_SIG_SET_OP'
> > >>   case 1: = ^
> > >>   include/linux/signal.h:190:2: warning: unannotated fall-through between
> > >switch labels
> > >>   case 1: = 0;
> > >>   ^
> > 

Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-07-08 Thread Nick Desaulniers
On Wed, Jul 8, 2020 at 12:23 AM Xia, Hui  wrote:
>
>
>
> >-Original Message-
> >From: Wei Yang 
> >Sent: 2020年7月1日 19:58
> >To: lkp 
> >Cc: Wei Yang ; Williams, Dan J
> >; a...@linux-foundation.org; 
> >kbuild-...@lists.01.org;
> >clang-built-li...@googlegroups.com; linux...@kvack.org; linux-
> >ker...@vger.kernel.org
> >Subject: Re: [PATCH] mm/sparse: only sub-section aligned range would be
> >populated
> >
> >On Wed, Jul 01, 2020 at 02:11:10AM +0800, kernel test robot wrote:
> >>Hi Wei,
> >>
> >>Thank you for the patch! Perhaps something to improve:
> >>
> >>[auto build test WARNING on mmotm/master]
> >>
> >>url:https://github.com/0day-ci/linux/commits/Wei-Yang/mm-sparse-only-
> >sub-section-aligned-range-would-be-populated/20200630-101713
> >>base:   git://git.cmpxchg.org/linux-mmotm.git master
> >>config: x86_64-allnoconfig (attached as .config)

Another issue was that this was an allnoconfig x86_64 build with
Clang.  While ARCH=x86_64 defconfigs set:
CONFIG_64BIT=y
CONFIG_X86_64=y

allnoconfig turns those off, making it a 32b x86 build.  We cannot yet
build an ARCH=i386 build yet with Clang, so that means this target is
not green to begin with.

+ Arnd
There might be a way for us to disable maybe CONFIG_X86_32 when
building with Clang?  or make it so that randconfig can't dig this up?

+Philip
I'm not sure if it's easy to disable `allnoconfig` x86 builds with
Clang?  Also, I feel like we're asking for a bunch of special cases
while we work through all the issues.  We would like to revert these
special cases once we're in better shape.  Are you tracking a list of
exceptions, so that we can estimate the work to fix on our side, and
that we know to re-enable test coverage once fixed?

> >>compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project
> >>cf1d04484344be52ada8178e41d18fd15a9b880c)
> >>reproduce (this is a W=1 build):
> >>wget https://raw.githubusercontent.com/intel/lkp-
> >tests/master/sbin/make.cross -O ~/bin/make.cross
> >>chmod +x ~/bin/make.cross
> >># install x86_64 cross compiling tool for clang build
> >># apt-get install binutils-x86-64-linux-gnu
> >># save the attached .config to linux build tree
> >>COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross
> >>ARCH=x86_64
> >>
> >>If you fix the issue, kindly add following tag as appropriate
> >>Reported-by: kernel test robot 
> >>
> >
> >Sorry, I don't follow up with this error report.
> >
> >It looks like a build error, while I just removes some check and the build 
> >pass from
> >my side. Confused with this error report.
> It is false positive. Please ignore. Sorry for inconvenience.
> The report complains about " warning: no previous prototype for function 
> 'devkmsg_sysctl_set_loglvl'" which is not caused by commit in this report. We 
> will investigate and fix in 0-day side.
>
> >
> >>All warnings (new ones prefixed by >>):
> >>
> >>   include/linux/signal.h:137:2: note: expanded from macro '_SIG_SET_BINOP'
> >>   case 1: ^
> >>   include/linux/signal.h:177:1: warning: unannotated fall-through between
> >switch labels
> >>   _SIG_SET_OP(signotset, _sig_not)
> >>   ^
> >>   include/linux/signal.h:167:2: note: expanded from macro '_SIG_SET_OP'
> >>   case 2: = ^
> >>   include/linux/signal.h:177:1: warning: unannotated fall-through between
> >switch labels
> >>   include/linux/signal.h:169:2: note: expanded from macro '_SIG_SET_OP'
> >>   case 1: = ^
> >>   include/linux/signal.h:190:2: warning: unannotated fall-through between
> >switch labels
> >>   case 1: = 0;
> >>   ^
> >>   include/linux/jhash.h:95:2: note: insert '__attribute__((fallthrough));' 
> >> to silence
> >this warning
> >>   case 6: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs 
> >> /dev /etc
> >/home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
> >/lkp-src
> >/media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys /tmp 
> >/usr
> >/var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ init/ 
> >ipc/ kernel/
> >lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ virt/
> >>   ^
> >>   __attribute__((fallthrough));
> >>   include/linux/jhash.h:95:2: note: insert 'break;' to avoid fall-through
> >>   case 6: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs 
> >&g

Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-07-01 Thread Wei Yang
On Wed, Jul 01, 2020 at 02:11:10AM +0800, kernel test robot wrote:
>Hi Wei,
>
>Thank you for the patch! Perhaps something to improve:
>
>[auto build test WARNING on mmotm/master]
>
>url:
>https://github.com/0day-ci/linux/commits/Wei-Yang/mm-sparse-only-sub-section-aligned-range-would-be-populated/20200630-101713
>base:   git://git.cmpxchg.org/linux-mmotm.git master
>config: x86_64-allnoconfig (attached as .config)
>compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 
>cf1d04484344be52ada8178e41d18fd15a9b880c)
>reproduce (this is a W=1 build):
>wget 
> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
> ~/bin/make.cross
>chmod +x ~/bin/make.cross
># install x86_64 cross compiling tool for clang build
># apt-get install binutils-x86-64-linux-gnu
># save the attached .config to linux build tree
>COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 
>
>If you fix the issue, kindly add following tag as appropriate
>Reported-by: kernel test robot 
>

Sorry, I don't follow up with this error report.

It looks like a build error, while I just removes some check and the build
pass from my side. Confused with this error report.

>All warnings (new ones prefixed by >>):
>
>   include/linux/signal.h:137:2: note: expanded from macro '_SIG_SET_BINOP'
>   case 1: ^
>   include/linux/signal.h:177:1: warning: unannotated fall-through between 
> switch labels
>   _SIG_SET_OP(signotset, _sig_not)
>   ^
>   include/linux/signal.h:167:2: note: expanded from macro '_SIG_SET_OP'
>   case 2: = ^
>   include/linux/signal.h:177:1: warning: unannotated fall-through between 
> switch labels
>   include/linux/signal.h:169:2: note: expanded from macro '_SIG_SET_OP'
>   case 1: = ^
>   include/linux/signal.h:190:2: warning: unannotated fall-through between 
> switch labels
>   case 1: = 0;
>   ^
>   include/linux/jhash.h:95:2: note: insert '__attribute__((fallthrough));' to 
> silence this warning
>   case 6: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
> /etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
> /lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
> /tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
> init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ 
> usr/ virt/
>   ^
>   __attribute__((fallthrough));
>   include/linux/jhash.h:95:2: note: insert 'break;' to avoid fall-through
>   case 6: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
> /etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
> /lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
> /tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
> init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ 
> usr/ virt/
>   ^
>   break;
>   include/linux/jhash.h:96:2: warning: unannotated fall-through between 
> switch labels
>   case 5: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
> /etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
> /lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
> /tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
> init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ 
> usr/ virt/
>   ^
>   15include/linux/signal.h:190:2: note: insert 
> '__attribute__((fallthrough));' to silence this warning
>   case 1: = 0;
>   ^
>   __attribute__((fallthrough));
>   include/linux/signal.h:190:2: note: insert 'break;' to avoid fall-through
>   case 1: = 0;
>   ^
>   break;
>   include/linux/signal.h:203:2: warninginclude/linux/jhash.h:96:2: note: 
> insert '__attribute__((fallthrough));' to silence this warning
>   case 5: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
> /etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
> /lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
> /tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
> init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ 
> usr/ virt/
>   ^
>   __attribute__((fallthrough));
>   include/linux/jhash.h:96:2: note: insert 'break;' to avoid fall-through
>   case 5: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
> /etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
> /lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
> /tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
> init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ 
> usr/ virt/
>   ^
>   break;
>   include/linux/jhash.h:97:2: warning: unannotated fall-through between 
> switch labels
>   case 4: a += /Dockerfile /Gemfile /Gemfile.lock /bin 

Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-07-01 Thread David Hildenbrand
On 01.07.20 04:32, Wei Yang wrote:
> On Tue, Jun 30, 2020 at 02:52:35PM +0200, David Hildenbrand wrote:
>> On 30.06.20 04:14, Wei Yang wrote:
>>> There are two code path which invoke __populate_section_memmap()
>>>
>>>   * sparse_init_nid()
>>>   * sparse_add_section()
>>>
>>> For both case, we are sure the memory range is sub-section aligned.
>>>
>>>   * we pass PAGES_PER_SECTION to sparse_init_nid()
>>>   * we check range by check_pfn_span() before calling
>>> sparse_add_section()
>>>
>>> Also, the counterpart of __populate_section_memmap(), we don't do such
>>> calculation and check since the range is checked by check_pfn_span() in
>>> __remove_pages().
>>>
>>> Clear the calculation and check to keep it simple and comply with its
>>> counterpart.
>>>
>>> Signed-off-by: Wei Yang 
>>> ---
>>>  mm/sparse-vmemmap.c | 16 ++--
>>>  1 file changed, 2 insertions(+), 14 deletions(-)
>>>
>>> diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
>>> index 0db7738d76e9..24b01ebae111 100644
>>> --- a/mm/sparse-vmemmap.c
>>> +++ b/mm/sparse-vmemmap.c
>>> @@ -247,20 +247,8 @@ int __meminit vmemmap_populate_basepages(unsigned long 
>>> start,
>>>  struct page * __meminit __populate_section_memmap(unsigned long pfn,
>>> unsigned long nr_pages, int nid, struct vmem_altmap *altmap)
>>>  {
>>> -   unsigned long start;
>>> -   unsigned long end;
>>> -
>>> -   /*
>>> -* The minimum granularity of memmap extensions is
>>> -* PAGES_PER_SUBSECTION as allocations are tracked in the
>>> -* 'subsection_map' bitmap of the section.
>>> -*/
>>> -   end = ALIGN(pfn + nr_pages, PAGES_PER_SUBSECTION);
>>> -   pfn &= PAGE_SUBSECTION_MASK;
>>> -   nr_pages = end - pfn;
>>> -
>>> -   start = (unsigned long) pfn_to_page(pfn);
>>> -   end = start + nr_pages * sizeof(struct page);
>>> +   unsigned long start = (unsigned long) pfn_to_page(pfn);
>>> +   unsigned long end = start + nr_pages * sizeof(struct page);
>>>  
>>> if (vmemmap_populate(start, end, nid, altmap))
>>> return NULL;
>>>
>>
>> Can we add a WARN_ON_ONCE to catch mis-use in the future?
>>
>> if (WARN_ON_ONCE(!IS_ALIGNED(pfn, PAGES_PER_SUBSECTION) ||
>> !IS_ALIGNED(nr_pages, PAGES_PER_SUBSECTION))
>>  return NULL;
> 
> How about to add this into both population and depopulation?

We don't have a similar wrapper for vmemmap_free().

-- 
Thanks,

David / dhildenb



Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-06-30 Thread Wei Yang
On Tue, Jun 30, 2020 at 02:52:35PM +0200, David Hildenbrand wrote:
>On 30.06.20 04:14, Wei Yang wrote:
>> There are two code path which invoke __populate_section_memmap()
>> 
>>   * sparse_init_nid()
>>   * sparse_add_section()
>> 
>> For both case, we are sure the memory range is sub-section aligned.
>> 
>>   * we pass PAGES_PER_SECTION to sparse_init_nid()
>>   * we check range by check_pfn_span() before calling
>> sparse_add_section()
>> 
>> Also, the counterpart of __populate_section_memmap(), we don't do such
>> calculation and check since the range is checked by check_pfn_span() in
>> __remove_pages().
>> 
>> Clear the calculation and check to keep it simple and comply with its
>> counterpart.
>> 
>> Signed-off-by: Wei Yang 
>> ---
>>  mm/sparse-vmemmap.c | 16 ++--
>>  1 file changed, 2 insertions(+), 14 deletions(-)
>> 
>> diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
>> index 0db7738d76e9..24b01ebae111 100644
>> --- a/mm/sparse-vmemmap.c
>> +++ b/mm/sparse-vmemmap.c
>> @@ -247,20 +247,8 @@ int __meminit vmemmap_populate_basepages(unsigned long 
>> start,
>>  struct page * __meminit __populate_section_memmap(unsigned long pfn,
>>  unsigned long nr_pages, int nid, struct vmem_altmap *altmap)
>>  {
>> -unsigned long start;
>> -unsigned long end;
>> -
>> -/*
>> - * The minimum granularity of memmap extensions is
>> - * PAGES_PER_SUBSECTION as allocations are tracked in the
>> - * 'subsection_map' bitmap of the section.
>> - */
>> -end = ALIGN(pfn + nr_pages, PAGES_PER_SUBSECTION);
>> -pfn &= PAGE_SUBSECTION_MASK;
>> -nr_pages = end - pfn;
>> -
>> -start = (unsigned long) pfn_to_page(pfn);
>> -end = start + nr_pages * sizeof(struct page);
>> +unsigned long start = (unsigned long) pfn_to_page(pfn);
>> +unsigned long end = start + nr_pages * sizeof(struct page);
>>  
>>  if (vmemmap_populate(start, end, nid, altmap))
>>  return NULL;
>> 
>
>Can we add a WARN_ON_ONCE to catch mis-use in the future?
>
>if (WARN_ON_ONCE(!IS_ALIGNED(pfn, PAGES_PER_SUBSECTION) ||
> !IS_ALIGNED(nr_pages, PAGES_PER_SUBSECTION))
>   return NULL;

How about to add this into both population and depopulation?

>
>-- 
>Thanks,
>
>David / dhildenb

-- 
Wei Yang
Help you, Help me


Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-06-30 Thread kernel test robot
Hi Wei,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on mmotm/master]

url:
https://github.com/0day-ci/linux/commits/Wei-Yang/mm-sparse-only-sub-section-aligned-range-would-be-populated/20200630-101713
base:   git://git.cmpxchg.org/linux-mmotm.git master
config: x86_64-allnoconfig (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 
cf1d04484344be52ada8178e41d18fd15a9b880c)
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# install x86_64 cross compiling tool for clang build
# apt-get install binutils-x86-64-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All warnings (new ones prefixed by >>):

   include/linux/signal.h:137:2: note: expanded from macro '_SIG_SET_BINOP'
   case 1: ^
   include/linux/signal.h:177:1: warning: unannotated fall-through between 
switch labels
   _SIG_SET_OP(signotset, _sig_not)
   ^
   include/linux/signal.h:167:2: note: expanded from macro '_SIG_SET_OP'
   case 2: = ^
   include/linux/signal.h:177:1: warning: unannotated fall-through between 
switch labels
   include/linux/signal.h:169:2: note: expanded from macro '_SIG_SET_OP'
   case 1: = ^
   include/linux/signal.h:190:2: warning: unannotated fall-through between 
switch labels
   case 1: = 0;
   ^
   include/linux/jhash.h:95:2: note: insert '__attribute__((fallthrough));' to 
silence this warning
   case 6: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
/etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
/lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
/tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ 
virt/
   ^
   __attribute__((fallthrough));
   include/linux/jhash.h:95:2: note: insert 'break;' to avoid fall-through
   case 6: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
/etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
/lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
/tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ 
virt/
   ^
   break;
   include/linux/jhash.h:96:2: warning: unannotated fall-through between switch 
labels
   case 5: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
/etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
/lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
/tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ 
virt/
   ^
   15include/linux/signal.h:190:2: note: insert '__attribute__((fallthrough));' 
to silence this warning
   case 1: = 0;
   ^
   __attribute__((fallthrough));
   include/linux/signal.h:190:2: note: insert 'break;' to avoid fall-through
   case 1: = 0;
   ^
   break;
   include/linux/signal.h:203:2: warninginclude/linux/jhash.h:96:2: note: 
insert '__attribute__((fallthrough));' to silence this warning
   case 5: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
/etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
/lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
/tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ 
virt/
   ^
   __attribute__((fallthrough));
   include/linux/jhash.h:96:2: note: insert 'break;' to avoid fall-through
   case 5: b += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
/etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
/lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
/tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ 
virt/
   ^
   break;
   include/linux/jhash.h:97:2: warning: unannotated fall-through between switch 
labels
   case 4: a += /Dockerfile /Gemfile /Gemfile.lock /bin /boot /c /cephfs /dev 
/etc /home /htmldocs /include /kbuild /lib /lib32 /lib64 /libx32 /lkp-cloud 
/lkp-src /media /mnt /opt /patch /pkg /proc /root /run /sbin /share /srv /sys 
/tmp /usr /var fall through arch/ block/ certs/ crypto/ drivers/ fs/ include/ 
init/ ipc/ kernel/ lib/ mm/ net/ scripts/ security/ sound/ source/ tools/ usr/ 
virt/
   ^
   : unannotated fall-through 

Re: [PATCH] mm/sparse: only sub-section aligned range would be populated

2020-06-30 Thread David Hildenbrand
On 30.06.20 04:14, Wei Yang wrote:
> There are two code path which invoke __populate_section_memmap()
> 
>   * sparse_init_nid()
>   * sparse_add_section()
> 
> For both case, we are sure the memory range is sub-section aligned.
> 
>   * we pass PAGES_PER_SECTION to sparse_init_nid()
>   * we check range by check_pfn_span() before calling
> sparse_add_section()
> 
> Also, the counterpart of __populate_section_memmap(), we don't do such
> calculation and check since the range is checked by check_pfn_span() in
> __remove_pages().
> 
> Clear the calculation and check to keep it simple and comply with its
> counterpart.
> 
> Signed-off-by: Wei Yang 
> ---
>  mm/sparse-vmemmap.c | 16 ++--
>  1 file changed, 2 insertions(+), 14 deletions(-)
> 
> diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
> index 0db7738d76e9..24b01ebae111 100644
> --- a/mm/sparse-vmemmap.c
> +++ b/mm/sparse-vmemmap.c
> @@ -247,20 +247,8 @@ int __meminit vmemmap_populate_basepages(unsigned long 
> start,
>  struct page * __meminit __populate_section_memmap(unsigned long pfn,
>   unsigned long nr_pages, int nid, struct vmem_altmap *altmap)
>  {
> - unsigned long start;
> - unsigned long end;
> -
> - /*
> -  * The minimum granularity of memmap extensions is
> -  * PAGES_PER_SUBSECTION as allocations are tracked in the
> -  * 'subsection_map' bitmap of the section.
> -  */
> - end = ALIGN(pfn + nr_pages, PAGES_PER_SUBSECTION);
> - pfn &= PAGE_SUBSECTION_MASK;
> - nr_pages = end - pfn;
> -
> - start = (unsigned long) pfn_to_page(pfn);
> - end = start + nr_pages * sizeof(struct page);
> + unsigned long start = (unsigned long) pfn_to_page(pfn);
> + unsigned long end = start + nr_pages * sizeof(struct page);
>  
>   if (vmemmap_populate(start, end, nid, altmap))
>   return NULL;
> 

Can we add a WARN_ON_ONCE to catch mis-use in the future?

if (WARN_ON_ONCE(!IS_ALIGNED(pfn, PAGES_PER_SUBSECTION) ||
 !IS_ALIGNED(nr_pages, PAGES_PER_SUBSECTION))
return NULL;

-- 
Thanks,

David / dhildenb



[PATCH] mm/sparse: only sub-section aligned range would be populated

2020-06-29 Thread Wei Yang
There are two code path which invoke __populate_section_memmap()

  * sparse_init_nid()
  * sparse_add_section()

For both case, we are sure the memory range is sub-section aligned.

  * we pass PAGES_PER_SECTION to sparse_init_nid()
  * we check range by check_pfn_span() before calling
sparse_add_section()

Also, the counterpart of __populate_section_memmap(), we don't do such
calculation and check since the range is checked by check_pfn_span() in
__remove_pages().

Clear the calculation and check to keep it simple and comply with its
counterpart.

Signed-off-by: Wei Yang 
---
 mm/sparse-vmemmap.c | 16 ++--
 1 file changed, 2 insertions(+), 14 deletions(-)

diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c
index 0db7738d76e9..24b01ebae111 100644
--- a/mm/sparse-vmemmap.c
+++ b/mm/sparse-vmemmap.c
@@ -247,20 +247,8 @@ int __meminit vmemmap_populate_basepages(unsigned long 
start,
 struct page * __meminit __populate_section_memmap(unsigned long pfn,
unsigned long nr_pages, int nid, struct vmem_altmap *altmap)
 {
-   unsigned long start;
-   unsigned long end;
-
-   /*
-* The minimum granularity of memmap extensions is
-* PAGES_PER_SUBSECTION as allocations are tracked in the
-* 'subsection_map' bitmap of the section.
-*/
-   end = ALIGN(pfn + nr_pages, PAGES_PER_SUBSECTION);
-   pfn &= PAGE_SUBSECTION_MASK;
-   nr_pages = end - pfn;
-
-   start = (unsigned long) pfn_to_page(pfn);
-   end = start + nr_pages * sizeof(struct page);
+   unsigned long start = (unsigned long) pfn_to_page(pfn);
+   unsigned long end = start + nr_pages * sizeof(struct page);
 
if (vmemmap_populate(start, end, nid, altmap))
return NULL;
-- 
2.20.1 (Apple Git-117)