mm/migrate: fix migrate_pgmap_owner w/o CONFIG_MMU_NOTIFIER
Subsystems (3)
PATCH 1/1 mm/migrate: fix migrate_pgmap_owner w/o CONFIG_MMU_NOTIFIER
On x86_64, when CONFIG_MMU_NOTIFIER is not set/enabled, there is a compiler error:
../mm/migrate.c: In function 'migrate_vma_collect':../mm/migrate.c:2481:7: error: 'struct mmu_notifier_range' has no member named 'migrate_pgmap_owner'
range.migrate_pgmap_owner = migrate->pgmap_owner;
^---
This is based on the latest linux and is for Andrew Morton's mm tree. MMU_NOTIFIER is selected automatically by a number of other config options so I missed this in my own testing. Thanks to Randy Dunlap for finding it.
include/linux/mmu_notifier.h | 13 +++++++++++++ mm/migrate.c | 6 +++--- 2 files changed, 16 insertions(+), 3 deletions(-)
include/linux/mmu_notifier.h +13 -0
@@ -521,6 +521,16 @@ static inline void mmu_notifier_range_init(struct mmu_notifier_range *range, range->flags = flags; } +static inline void mmu_notifier_range_init_migrate ( +struct mmu_notifier_range *range,unsigned int flags, +struct vm_area_struct *vma,struct mm_struct *mm, +unsigned long start,unsigned long end,void *pgmap) +{ +mmu_notifier_range_init (range,MMU_NOTIFY_MIGRATE , flags, vma, mm, + start, end); + range->migrate_pgmap_owner = pgmap; +} +#define ptep_clear_flush_young_notify (__vma, __address, __ptep) \ ({ \ int __young; \
@@ -645,6 +655,9 @@ static inline void _mmu_notifier_range_init(struct mmu_notifier_range *range,#define mmu_notifier_range_init (range,event,flags,vma,mm,start,end) \ _mmu_notifier_range_init(range, start, end) +#define mmu_notifier_range_init_migrate (range, flags, vma, mm, start, end, \ + pgmap) \ + _mmu_notifier_range_init(range, start, end)static inline bool mmu_notifier_range_blockable (const struct mmu_notifier_range *range)
mm/migrate.c +3 -3
@@ -2386,9 +2386,9 @@ static void migrate_vma_collect(struct migrate_vma *migrate)* that the registered device driver can skip invalidating device * private page mappings that won't be migrated. */ -mmu_notifier_range_init (&range,MMU_NOTIFY_MIGRATE ,0 , migrate->vma, - migrate->vma->vm_mm, migrate->start, migrate->end); - range.migrate_pgmap_owner = migrate->pgmap_owner; +mmu_notifier_range_init_migrate (&range,0 , migrate->vma, + migrate->vma->vm_mm, migrate->start, migrate->end, + migrate->pgmap_owner);mmu_notifier_invalidate_range_start (&range); walk_page_range(migrate->vma->vm_mm, migrate->start, migrate->end,
Signature · 1 line
2.20.1
Quoted 6 lines · Ralph Campbell
On
x86_64, whenCONFIG_MMU_NOTIFIERis not set/enabled, there is a compiler error:
../mm/migrate.c: In function 'migrate_vma_collect':../mm/migrate.c:2481:7: error: 'structmmu_notifier_range' has no member named 'migrate_pgmap_owner'
Quoted 6 lines
range.migrate_pgmap_owner = migrate->pgmap_owner; ^Fixes 998427b3ad2c ("mm/notifier: add migration invalidation type")Signed-off-by Ralph Campbell <[email protected]>Reported-by Randy Dunlap <[email protected]>
Thanks.
Quoted 60 lines
---
This is based on the latest linux and is for Andrew Morton's mm tree.
MMU_NOTIFIERis selected automatically by a number of other config options so I missed this in my own testing. Thanks to Randy Dunlap for finding it.include/linux/mmu_notifier.h | 13 +++++++++++++ mm/migrate.c | 6 +++--- 2 files changed, 16 insertions(+), 3 deletions(-)include/linux/mmu_notifier.h +13
-0@@ -521,6 +521,16 @@ static inline void mmu_notifier_range_init(struct mmu_notifier_range *range, range->flags = flags; } +static inline void mmu_notifier_range_init_migrate ( +struct mmu_notifier_range *range,unsigned int flags, +struct vm_area_struct *vma,struct mm_struct *mm, +unsigned long start,unsigned long end,void *pgmap) +{ +mmu_notifier_range_init (range,MMU_NOTIFY_MIGRATE , flags, vma, mm, + start, end); + range->migrate_pgmap_owner = pgmap; +} +#define ptep_clear_flush_young_notify (__vma, __address, __ptep) \ ({ \ int __young; \@@ -645,6 +655,9 @@ static inline void _mmu_notifier_range_init(struct mmu_notifier_range *range,#define mmu_notifier_range_init (range,event,flags,vma,mm,start,end) \ _mmu_notifier_range_init(range, start, end) +#define mmu_notifier_range_init_migrate (range, flags, vma, mm, start, end, \ + pgmap) \ + _mmu_notifier_range_init(range, start, end)static inline bool mmu_notifier_range_blockable (const struct mmu_notifier_range *range)mm/migrate.c +3
-3@@ -2386,9 +2386,9 @@ static void migrate_vma_collect(struct migrate_vma *migrate)* that the registered device driver can skip invalidating device * private page mappings that won't be migrated. */ -mmu_notifier_range_init (&range,MMU_NOTIFY_MIGRATE ,0 , migrate->vma, - migrate->vma->vm_mm, migrate->start, migrate->end); - range.migrate_pgmap_owner = migrate->pgmap_owner; +mmu_notifier_range_init_migrate (&range,0 , migrate->vma, + migrate->vma->vm_mm, migrate->start, migrate->end, + migrate->pgmap_owner);mmu_notifier_invalidate_range_start (&range); walk_page_range(migrate->vma->vm_mm, migrate->start, migrate->end,
Signature · 1 line
~Randy
Jason Gunthorpe
Reviewed-byQuoted 10 lines · Randy Dunlap
Quoted 9 lines · Ralph Campbell
On
x86_64, whenCONFIG_MMU_NOTIFIERis not set/enabled, there is a compiler error:
../mm/migrate.c: In function 'migrate_vma_collect':../mm/migrate.c:2481:7: error: 'structmmu_notifier_range' has no member named 'migrate_pgmap_owner'range.migrate_pgmap_owner = migrate->pgmap_owner; ^
Quoted 5 lines
Quoted 3 lines
Fixes 998427b3ad2c ("mm/notifier: add migration invalidation type")Signed-off-by Ralph Campbell <[email protected]>Reported-by Randy Dunlap <[email protected]>
I thought it spent enough time in linux-next and for 0-day to catch things like this, but I guess I was wrong.
Linus has already merged the hmm pull request.
Andrew Morton: Can you pick this fix up to forward to Linus?
Thanks,
Jason