Re: [Adeos-main] [PATCH 1/2] ipipe: Factor out ipipe_pin_vma

2012-03-31 Thread Gilles Chanteperdrix
On 03/29/2012 06:38 PM, Jan Kiszka wrote:
>   for (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.

> (...)
> + 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.

-- 
Gilles.

___
Adeos-main mailing list
Adeos-main@gna.org
https://mail.gna.org/listinfo/adeos-main


[Adeos-main] [PATCH 1/2] ipipe: Factor out ipipe_pin_vma

2012-03-29 Thread Jan Kiszka
Will be used for pinning during mprotect as well.

Signed-off-by: Jan Kiszka 
---

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(-)

diff --git a/include/linux/ipipe.h b/include/linux/ipipe.h
index 9f07346..29051c7 100644
--- a/include/linux/ipipe.h
+++ b/include/linux/ipipe.h
@@ -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
 
diff --git a/mm/memory.c b/mm/memory.c
index ef04820..d251268 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -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)
@@ -4109,23 +4127,12 @@ int __ipipe_disable_ondemand_mappings(struct 
task_struct *tsk)
goto done_mm;
 
for (vma = mm->mmap; vma; vma = vma->vm_next) {
-   if (!is_cow_mapping(vma->vm_flags)
-   || !(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;
+   if (is_cow_mapping(vma->vm_flags) &&
+   (vma->vm_flags & VM_WRITE)) {
+   result = __ipipe_pin_vma(mm, vma);
+   if (result < 0)
goto done_mm;
-   }
-   } while (pgd++, addr = next, addr != end);
+   }
}
set_bit(MMF_VM_PINNED, &mm->flags);
 
-- 
1.7.3.4

___
Adeos-main mailing list
Adeos-main@gna.org
https://mail.gna.org/listinfo/adeos-main