ipipe: Factor out ipipe_pin_vma
Subsystems (2)
PATCH 1/2 ipipe: Factor out ipipe_pin_vma
Will be used for pinning during mprotect as well.
Signed-off-by Jan Kiszka <[email protected]>
---
This applies on core-3.2, but should be backported to maintained versions as well (just leave out the "__").
include/linux/ipipe.h | 1 + mm/memory.c | 43 +++++++++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 18 deletions(-)
include/linux/ipipe.h +1 -0
@@ -68,6 +68,7 @@ int __ipipe_migrate_head(void);void __ipipe_reenter_root (void );int __ipipe_disable_ondemand_mappings (struct task_struct *p); +int __ipipe_pin_vma (struct mm_struct *mm,struct vm_area_struct *vma);#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
mm/memory.c +25 -18
61 lines not on this page · raw message
Signature · 1 line
1.7.3.4
mm/memory.c int __ipipe_disable_ondemand_mappings(struct task_struct *tsk) · line 4114
Quoted 4 lines · Jan Kiszka
mm/memory.c +0
-3for (vma = mm->mmap; vma; vma = vma->vm_next) { -if (!is_cow_mapping (vma->vm_flags) - || !(vma->vm_flags &VM_WRITE )) -continue ;
I prefer this style.
mm/memory.c int __ipipe_disable_ondemand_mappings(struct task_struct *tsk) · line 4134
Quoted 6 lines
(...)
mm/memory.c +4
-0+if (is_cow_mapping (vma->vm_flags) && + (vma->vm_flags &VM_WRITE )) { + result =__ipipe_pin_vma (mm, vma); +if (result <0 ) goto done_mm;
Than this one, which uselessly cause indentation and scopes nesting.
Signature · 1 line
Gilles.
PATCH v2 1/2 ipipe: Factor out ipipe_pin_vma
Will be used for pinning during mprotect as well.
Signed-off-by Jan Kiszka <[email protected]>
--- include/linux/ipipe.h | 1 + mm/memory.c | 38 +++++++++++++++++++++++--------------- 2 files changed, 24 insertions(+), 15 deletions(-)
Changes in v2:
- Refactored __ipipe_disable_ondemand_mappings according to request
include/linux/ipipe.h +1 -0
@@ -68,6 +68,7 @@ int __ipipe_migrate_head(void);void __ipipe_reenter_root (void );int __ipipe_disable_ondemand_mappings (struct task_struct *p); +int __ipipe_pin_vma (struct mm_struct *mm,struct vm_area_struct *vma);#ifdef CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH
mm/memory.c +23 -15
@@ -4092,13 +4092,31 @@ static inline int ipipe_pin_pud_range(struct mm_struct *mm, pgd_t *pgd,return 0 ; } -int __ipipe_disable_ondemand_mappings (struct task_struct *tsk) +int __ipipe_pin_vma (struct mm_struct *mm,struct vm_area_struct *vma) {unsigned long addr, next, end; +pgd_t *pgd; + + addr = vma->vm_start; + end = vma->vm_end; + + pgd =pgd_offset (mm, addr); +do { + next =pgd_addr_end (addr, end); +if (pgd_none_or_clear_bad (pgd)) +continue ; +if (ipipe_pin_pud_range (mm, pgd, vma, addr, next)) +return -ENOMEM ; + }while (pgd++, addr = next, addr != end); + +return 0 ; +} + +int __ipipe_disable_ondemand_mappings (struct task_struct *tsk) +{struct vm_area_struct *vma;struct mm_struct *mm;int result =0 ; -pgd_t *pgd; mm =get_task_mm (tsk);if (!mm)
@@ -4113,19 +4131,9 @@ int __ipipe_disable_ondemand_mappings(struct task_struct *tsk) || !(vma->vm_flags & VM_WRITE))continue ; - addr = vma->vm_start; - end = vma->vm_end; - - pgd =pgd_offset (mm, addr); -do { - next =pgd_addr_end (addr, end); -if (pgd_none_or_clear_bad (pgd)) -continue ; -if (ipipe_pin_pud_range (mm, pgd, vma, addr, next)) { - result = -ENOMEM ; - goto done_mm; - } - }while (pgd++, addr = next, addr != end); + result =__ipipe_pin_vma (mm, vma); +if (result <0 ) + goto done_mm; }set_bit (MMF_VM_PINNED , &mm->flags);
Signature · 1 line
1.7.3.4