2019-08-30 13:58:11

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build failure after merge of the akpm-current tree

Hi all,

After merging the akpm-current tree, today's linux-next build (arm
multi_v7_defconfig) failed like this:

mm/madvise.c: In function 'madvise_cold_page_range':
mm/madvise.c:459:4: error: 'struct mm_walk' has no member named 'pmd_entry'
459 | .pmd_entry = madvise_cold_or_pageout_pte_range,
| ^~~~~~~~~
mm/madvise.c:459:16: error: initialization of 'const struct mm_walk_ops *' from incompatible pointer type 'int (*)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *)' {aka 'int (*)(unsigned int *, long unsigned int, long unsigned int, struct mm_walk *)'} [-Werror=incompatible-pointer-types]
459 | .pmd_entry = madvise_cold_or_pageout_pte_range,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/madvise.c:459:16: note: (near initialization for 'cold_walk.ops')
mm/madvise.c:465:18: warning: passing argument 1 of 'walk_page_range' makes pointer from integer without a cast [-Wint-conversion]
465 | walk_page_range(addr, end, &cold_walk);
| ^~~~
| |
| long unsigned int
In file included from mm/madvise.c:24:
include/linux/pagewalk.h:60:39: note: expected 'struct mm_struct *' but argument is of type 'long unsigned int'
60 | int walk_page_range(struct mm_struct *mm, unsigned long start,
| ~~~~~~~~~~~~~~~~~~^~
mm/madvise.c:465:29: warning: passing argument 3 of 'walk_page_range' makes integer from pointer without a cast [-Wint-conversion]
465 | walk_page_range(addr, end, &cold_walk);
| ^~~~~~~~~~
| |
| struct mm_walk *
In file included from mm/madvise.c:24:
include/linux/pagewalk.h:61:17: note: expected 'long unsigned int' but argument is of type 'struct mm_walk *'
61 | unsigned long end, const struct mm_walk_ops *ops,
| ~~~~~~~~~~~~~~^~~
mm/madvise.c:465:2: error: too few arguments to function 'walk_page_range'
465 | walk_page_range(addr, end, &cold_walk);
| ^~~~~~~~~~~~~~~
In file included from mm/madvise.c:24:
include/linux/pagewalk.h:60:5: note: declared here
60 | int walk_page_range(struct mm_struct *mm, unsigned long start,
| ^~~~~~~~~~~~~~~
mm/madvise.c: In function 'madvise_pageout_page_range':
mm/madvise.c:498:4: error: 'struct mm_walk' has no member named 'pmd_entry'
498 | .pmd_entry = madvise_cold_or_pageout_pte_range,
| ^~~~~~~~~
mm/madvise.c:498:16: error: initialization of 'const struct mm_walk_ops *' from incompatible pointer type 'int (*)(pmd_t *, long unsigned int, long unsigned int, struct mm_walk *)' {aka 'int (*)(unsigned int *, long unsigned int, long unsigned int, struct mm_walk *)'} [-Werror=incompatible-pointer-types]
498 | .pmd_entry = madvise_cold_or_pageout_pte_range,
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mm/madvise.c:498:16: note: (near initialization for 'pageout_walk.ops')
mm/madvise.c:504:18: warning: passing argument 1 of 'walk_page_range' makes pointer from integer without a cast [-Wint-conversion]
504 | walk_page_range(addr, end, &pageout_walk);
| ^~~~
| |
| long unsigned int
In file included from mm/madvise.c:24:
include/linux/pagewalk.h:60:39: note: expected 'struct mm_struct *' but argument is of type 'long unsigned int'
60 | int walk_page_range(struct mm_struct *mm, unsigned long start,
| ~~~~~~~~~~~~~~~~~~^~
mm/madvise.c:504:29: warning: passing argument 3 of 'walk_page_range' makes integer from pointer without a cast [-Wint-conversion]
504 | walk_page_range(addr, end, &pageout_walk);
| ^~~~~~~~~~~~~
| |
| struct mm_walk *
In file included from mm/madvise.c:24:
include/linux/pagewalk.h:61:17: note: expected 'long unsigned int' but argument is of type 'struct mm_walk *'
61 | unsigned long end, const struct mm_walk_ops *ops,
| ~~~~~~~~~~~~~~^~~
mm/madvise.c:504:2: error: too few arguments to function 'walk_page_range'
504 | walk_page_range(addr, end, &pageout_walk);
| ^~~~~~~~~~~~~~~
In file included from mm/madvise.c:24:
include/linux/pagewalk.h:60:5: note: declared here
60 | int walk_page_range(struct mm_struct *mm, unsigned long start,
| ^~~~~~~~~~~~~~~

Caused by commit

1c8999b3963d ("mm: introduce MADV_COLD")
(and following commits)

interacting with commit

923bfc561e75 ("pagewalk: separate function pointers from iterator data")

from the hmm tree.

I have applied the following patch for today:

From: Stephen Rothwell <[email protected]>
Date: Fri, 30 Aug 2019 23:39:37 +1000
Subject: [PATCH] mm: merge fix for "pagewalk: separate function pointers from iterator data"

Signed-off-by: Stephen Rothwell <[email protected]>
---
mm/madvise.c | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)

diff --git a/mm/madvise.c b/mm/madvise.c
index 7ec7c8f6d5ab..20598df8360a 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -446,6 +446,10 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
return 0;
}

+static const struct mm_walk_ops cold_walk_ops = {
+ .pmd_entry = madvise_cold_or_pageout_pte_range,
+};
+
static void madvise_cold_page_range(struct mmu_gather *tlb,
struct vm_area_struct *vma,
unsigned long addr, unsigned long end)
@@ -455,14 +459,8 @@ static void madvise_cold_page_range(struct mmu_gather *tlb,
.pageout = false,
};

- struct mm_walk cold_walk = {
- .pmd_entry = madvise_cold_or_pageout_pte_range,
- .mm = vma->vm_mm,
- .private = &walk_private,
- };
-
tlb_start_vma(tlb, vma);
- walk_page_range(addr, end, &cold_walk);
+ walk_page_range(vma->vm_mm, addr, end, &cold_walk_ops, &walk_private);
tlb_end_vma(tlb, vma);
}

@@ -485,6 +483,10 @@ static long madvise_cold(struct vm_area_struct *vma,
return 0;
}

+static const struct mm_walk_ops pageout_walk_ops = {
+ .pmd_entry = madvise_cold_or_pageout_pte_range,
+};
+
static void madvise_pageout_page_range(struct mmu_gather *tlb,
struct vm_area_struct *vma,
unsigned long addr, unsigned long end)
@@ -494,14 +496,8 @@ static void madvise_pageout_page_range(struct mmu_gather *tlb,
.tlb = tlb,
};

- struct mm_walk pageout_walk = {
- .pmd_entry = madvise_cold_or_pageout_pte_range,
- .mm = vma->vm_mm,
- .private = &walk_private,
- };
-
tlb_start_vma(tlb, vma);
- walk_page_range(addr, end, &pageout_walk);
+ walk_page_range(vma->vm_mm, addr, end, &pageout_walk_ops, &walk_private);
tlb_end_vma(tlb, vma);
}

--
2.23.0.rc1

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2019-08-30 14:30:21

by Jason Gunthorpe

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the akpm-current tree

On Fri, Aug 30, 2019 at 11:55:30PM +1000, Stephen Rothwell wrote:

> Caused by commit
>
> 1c8999b3963d ("mm: introduce MADV_COLD")
> (and following commits)
>
> interacting with commit
>
> 923bfc561e75 ("pagewalk: separate function pointers from iterator data")
>
> from the hmm tree.

Yes, this is expected thanks

> diff --git a/mm/madvise.c b/mm/madvise.c
> index 7ec7c8f6d5ab..20598df8360a 100644
> --- a/mm/madvise.c
> +++ b/mm/madvise.c
> @@ -446,6 +446,10 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd,
> return 0;
> }
>
> +static const struct mm_walk_ops cold_walk_ops = {
> + .pmd_entry = madvise_cold_or_pageout_pte_range,
> +};
> +

> +static const struct mm_walk_ops pageout_walk_ops = {
> + .pmd_entry = madvise_cold_or_pageout_pte_range,
> +};

These two can be shared

Looks OK otherwise

Jason