Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 4b1c79a

Browse files
heatdTreehugger Robot
authored andcommitted
BACKPORT: mm: move can_modify_vma to mm/vma.h
Patch series "mm: Optimize mseal checks", v3. Optimize mseal checks by removing the separate can_modify_mm() step, and just doing checks on the individual vmas, when various operations are themselves iterating through the tree. This provides a nice speedup and restores performance parity with pre-mseal[3]. will-it-scale mmap1_process[1] -t 1 results: commit 3450fe2b574b4345e4296ccae395149e1a357fee: min:277605 max:277605 total:277605 min:281784 max:281784 total:281784 min:277238 max:277238 total:277238 min:281761 max:281761 total:281761 min:274279 max:274279 total:274279 min:254854 max:254854 total:254854 measurement min:269143 max:269143 total:269143 min:270454 max:270454 total:270454 min:243523 max:243523 total:243523 min:251148 max:251148 total:251148 min:209669 max:209669 total:209669 min:190426 max:190426 total:190426 min:231219 max:231219 total:231219 min:275364 max:275364 total:275364 min:266540 max:266540 total:266540 min:242572 max:242572 total:242572 min:284469 max:284469 total:284469 min:278882 max:278882 total:278882 min:283269 max:283269 total:283269 min:281204 max:281204 total:281204 After this patch set: min:280580 max:280580 total:280580 min:290514 max:290514 total:290514 min:291006 max:291006 total:291006 min:290352 max:290352 total:290352 min:294582 max:294582 total:294582 min:293075 max:293075 total:293075 measurement min:295613 max:295613 total:295613 min:294070 max:294070 total:294070 min:293193 max:293193 total:293193 min:291631 max:291631 total:291631 min:295278 max:295278 total:295278 min:293782 max:293782 total:293782 min:290361 max:290361 total:290361 min:294517 max:294517 total:294517 min:293750 max:293750 total:293750 min:293572 max:293572 total:293572 min:295239 max:295239 total:295239 min:292932 max:292932 total:292932 min:293319 max:293319 total:293319 min:294954 max:294954 total:294954 This was a Completely Unscientific test but seems to show there were around 5-10% gains on ops per second. Oliver performed their own tests and showed[3] a similar ~5% gain in them. [1]: mmap1_process does mmap and munmap in a loop. I didn't bother testing multithreading cases. [2]: https://lore.kernel.org/all/[email protected]/ [3]: https://lore.kernel.org/all/ZrMMJfe9aXSWxJz6@xsang-OptiPlex-9020/ Link: https://lore.kernel.org/all/[email protected]/ This patch (of 7): Move can_modify_vma to vma.h so it can be inlined properly (with the intent to remove can_modify_mm callsites). Link: https://lkml.kernel.org/r/[email protected] Change-Id: I6e239eeed12a16202dcd0ca2c4ca643dd92aaf81 Signed-off-by: Pedro Falcato <[email protected]> Reviewed-by: Liam R. Howlett <[email protected]> Reviewed-by: Lorenzo Stoakes <[email protected]> Cc: Jeff Xu <[email protected]> Cc: Kees Cook <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Michael Ellerman <[email protected]> Cc: Pedro Falcato <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Vlastimil Babka <[email protected]> Signed-off-by: Andrew Morton <[email protected]> (cherry picked from commit 4d1b341)
1 parent 3117021 commit 4b1c79a

File tree

2 files changed

+24
-17
lines changed

2 files changed

+24
-17
lines changed

mm/internal.h

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,6 +1468,24 @@ bool can_modify_mm(struct mm_struct *mm, unsigned long start,
14681468
unsigned long end);
14691469
bool can_modify_mm_madv(struct mm_struct *mm, unsigned long start,
14701470
unsigned long end, int behavior);
1471+
1472+
static inline bool vma_is_sealed(struct vm_area_struct *vma)
1473+
{
1474+
return (vma->vm_flags & VM_SEALED);
1475+
}
1476+
1477+
/*
1478+
* check if a vma is sealed for modification.
1479+
* return true, if modification is allowed.
1480+
*/
1481+
static inline bool can_modify_vma(struct vm_area_struct *vma)
1482+
{
1483+
if (unlikely(vma_is_sealed(vma)))
1484+
return false;
1485+
1486+
return true;
1487+
}
1488+
14711489
#else
14721490
static inline int can_do_mseal(unsigned long flags)
14731491
{
@@ -1485,5 +1503,11 @@ static inline bool can_modify_mm_madv(struct mm_struct *mm, unsigned long start,
14851503
{
14861504
return true;
14871505
}
1506+
1507+
static inline bool can_modify_vma(struct vm_area_struct *vma)
1508+
{
1509+
return true;
1510+
}
1511+
14881512
#endif
14891513
#endif /* __MM_INTERNAL_H */

mm/mseal.c

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,28 +17,11 @@
1717
#include <linux/sched.h>
1818
#include "internal.h"
1919

20-
static inline bool vma_is_sealed(struct vm_area_struct *vma)
21-
{
22-
return (vma->vm_flags & VM_SEALED);
23-
}
24-
2520
static inline void set_vma_sealed(struct vm_area_struct *vma)
2621
{
2722
vm_flags_set(vma, VM_SEALED);
2823
}
2924

30-
/*
31-
* check if a vma is sealed for modification.
32-
* return true, if modification is allowed.
33-
*/
34-
static bool can_modify_vma(struct vm_area_struct *vma)
35-
{
36-
if (unlikely(vma_is_sealed(vma)))
37-
return false;
38-
39-
return true;
40-
}
41-
4225
static bool is_madv_discard(int behavior)
4326
{
4427
switch (behavior) {

0 commit comments

Comments
 (0)