CPU page table update can happens for many reasons, not only as a result of a syscall (munmap(), mprotect(), mremap(), madvise(), ...) but also as a result of kernel activities (memory compression, reclaim, migration, ...). Users of mmu notifier API track changes to the CPU page table and take specific action for them. While current API only provide range of virtual address affected by the change, not why the changes is happening This patch is just passing down the new informations by adding it to the mmu_notifier_range structure.
Showing the changes to include/linux (1 of 1 file). Show all
Unified · Split
| @@ -58,10 +58,12 @@ struct mmu_notifier_mm { · 57 unmodified lines | |||
| 58 | #define MMU_NOTIFIER_RANGE_BLOCKABLE (1 << 0) | 58 | #define MMU_NOTIFIER_RANGE_BLOCKABLE (1 << 0) |
| 59 | 59 | ||
| 60 | struct mmu_notifier_range { | 60 | struct mmu_notifier_range { |
| 61 | struct vm_area_struct *vma; | ||
| 61 | struct mm_struct *mm; | 62 | struct mm_struct *mm; |
| 62 | unsigned long start; | 63 | unsigned long start; |
| 63 | unsigned long end; | 64 | unsigned long end; |
| 64 | unsigned flags; | 65 | unsigned flags; |
| 66 | enum mmu_notifier_event event; | ||
| 65 | }; | 67 | }; |
| 66 | 68 | ||
| 67 | struct mmu_notifier_ops { | 69 | struct mmu_notifier_ops { |
| @@ -363,10 +365,12 @@ static inline void mmu_notifier_range_init(struct mmu_notifier_range *range, · 295 unmodified lines | |||
| 363 | unsigned long start, | 365 | unsigned long start, |
| 364 | unsigned long end) | 366 | unsigned long end) |
| 365 | { | 367 | { |
| 368 | range->vma = vma; | ||
| 369 | range->event = event; | ||
| 366 | range->mm = mm; | 370 | range->mm = mm; |
| 367 | range->start = start; | 371 | range->start = start; |
| 368 | range->end = end; | 372 | range->end = end; |
| 369 | range->flags = 0; | 373 | range->flags = flags; |
| 370 | } | 374 | } |
| 371 | 375 | ||
| 372 | #define ptep_clear_flush_young_notify(__vma, __address, __ptep) \ | 376 | #define ptep_clear_flush_young_notify(__vma, __address, __ptep) \ |