From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id 0751F6B0009 for ; Mon, 29 Feb 2016 08:27:10 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id p65so45307334wmp.0 for ; Mon, 29 Feb 2016 05:27:09 -0800 (PST) From: Michal Hocko Subject: [PATCH 0/18] change mmap_sem taken for write killable Date: Mon, 29 Feb 2016 14:26:39 +0100 Message-Id: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner Hi, this is a follow up work for oom_reaper [1]. As the async OOM killing depends on oom_sem for read we would really appreciate if a holder for write stood in the way. This patchset is changing many of down_write calls to be killable to help those cases when the writer is blocked and waiting for readers to release the lock and so help __oom_reap_task to process the oom victim. Most of the patches are really trivial because the lock is help from a shallow syscall paths where we can return EINTR trivially. Others seem to be easy as well as the callers are already handling fatal errors and bail and return to userspace which should be sufficient to handle the failure gracefully. I am not familiar with all those code paths so a deeper review is really appreciated. As this work is touching more areas which are not directly connected I have tried to keep the CC list as small as possible and people who I believed would be familiar are CCed only to the specific patches (all should have received the cover though). This patchset is based on linux-next and it depends on down_write_killable for rw_semaphores posted recently [2]. I haven't covered all the mmap_write(mm->mmap_sem) instances here $ git grep "down_write(.*\)" next/master | wc -l 102 $ git grep "down_write(.*\)" | wc -l 66 I have tried to cover those which should be relatively easy to review in this series because this alone should be a nice improvement. Other places can be changed on top. Any feedback is highly appreciated. --- [1] http://lkml.kernel.org/r/1452094975-551-1-git-send-email-mhocko@kernel.org [2] http://lkml.kernel.org/r/1456750705-7141-1-git-send-email-mhocko@kernel.org -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by kanga.kvack.org (Postfix) with ESMTP id 6DB226B0253 for ; Mon, 29 Feb 2016 08:27:11 -0500 (EST) Received: by mail-wm0-f42.google.com with SMTP id n186so49189579wmn.1 for ; Mon, 29 Feb 2016 05:27:11 -0800 (PST) From: Michal Hocko Subject: [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls Date: Mon, 29 Feb 2016 14:26:40 +0100 Message-Id: <1456752417-9626-2-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko This is the first step in making mmap_sem write holders killable. It focuses on the trivial ones which are taking the lock early after entering the syscall and they are not changing state before. Therefore it is very easy to change them to use down_write_killable and immediately return with -EINTR. This will allow the waiter to pass away without blocking the mmap_sem which might be required to make a forward progress. E.g. the oom reaper will need the lock for reading to dismantle the OOM victim address space. The only tricky function in this patch is vm_mmap_pgoff which has many call sites via vm_mmap. To reduce the risk keep vm_mmap with the original non-killable semantic for now. vm_munmap callers do not bother checking the return value so open code it into the munmap syscall path for now for simplicity. Cc: Mel Gorman Cc: "Kirill A. Shutemov" Cc: Konstantin Khlebnikov Cc: Hugh Dickins Cc: Andrea Arcangeli Cc: David Rientjes Cc: Dave Hansen Cc: Johannes Weiner Signed-off-by: Michal Hocko --- mm/internal.h | 5 +++-- mm/madvise.c | 8 +++++--- mm/mlock.c | 16 ++++++++++------ mm/mmap.c | 27 +++++++++++++++++++++++---- mm/mprotect.c | 3 ++- mm/mremap.c | 3 ++- mm/nommu.c | 2 +- mm/util.c | 12 +++++++++--- 8 files changed, 55 insertions(+), 21 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 72bbce3efc36..26576cb3247e 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -444,9 +444,10 @@ extern u64 hwpoison_filter_flags_value; extern u64 hwpoison_filter_memcg; extern u32 hwpoison_filter_enable; -extern unsigned long vm_mmap_pgoff(struct file *, unsigned long, +extern unsigned long __must_check vm_mmap_pgoff(struct file *, unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long); + unsigned long, unsigned long, + bool); extern void set_pageblock_order(void); unsigned long reclaim_clean_pages_from_list(struct zone *zone, diff --git a/mm/madvise.c b/mm/madvise.c index a50ac1885d09..b1809a409a77 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -764,10 +764,12 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) return error; write = madvise_need_mmap_write(behavior); - if (write) - down_write(¤t->mm->mmap_sem); - else + if (write) { + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; + } else { down_read(¤t->mm->mmap_sem); + } blk_start_plug(&plug); diff --git a/mm/mlock.c b/mm/mlock.c index 96f001041928..ef8dc9f395c4 100644 --- a/mm/mlock.c +++ b/mm/mlock.c @@ -617,7 +617,7 @@ static int apply_vma_lock_flags(unsigned long start, size_t len, return error; } -static int do_mlock(unsigned long start, size_t len, vm_flags_t flags) +static __must_check int do_mlock(unsigned long start, size_t len, vm_flags_t flags) { unsigned long locked; unsigned long lock_limit; @@ -635,7 +635,8 @@ static int do_mlock(unsigned long start, size_t len, vm_flags_t flags) lock_limit >>= PAGE_SHIFT; locked = len >> PAGE_SHIFT; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; locked += current->mm->locked_vm; @@ -678,7 +679,8 @@ SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len) len = PAGE_ALIGN(len + (offset_in_page(start))); start &= PAGE_MASK; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; ret = apply_vma_lock_flags(start, len, 0); up_write(¤t->mm->mmap_sem); @@ -748,9 +750,10 @@ SYSCALL_DEFINE1(mlockall, int, flags) lock_limit = rlimit(RLIMIT_MEMLOCK); lock_limit >>= PAGE_SHIFT; - ret = -ENOMEM; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; + ret = -ENOMEM; if (!(flags & MCL_CURRENT) || (current->mm->total_vm <= lock_limit) || capable(CAP_IPC_LOCK)) ret = apply_mlockall_flags(flags); @@ -765,7 +768,8 @@ SYSCALL_DEFINE0(munlockall) { int ret; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; ret = apply_mlockall_flags(0); up_write(¤t->mm->mmap_sem); return ret; diff --git a/mm/mmap.c b/mm/mmap.c index b1e30132eb52..a8ea76c22bb6 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -182,7 +182,8 @@ SYSCALL_DEFINE1(brk, unsigned long, brk) unsigned long min_brk; bool populate; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; #ifdef CONFIG_COMPAT_BRK /* @@ -1336,7 +1337,7 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff); + retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff, true); out_fput: if (file) fput(file); @@ -2498,6 +2499,10 @@ int vm_munmap(unsigned long start, size_t len) int ret; struct mm_struct *mm = current->mm; + /* + * XXX convert to down_write_killable as soon as all users are able + * to handle the error. + */ down_write(&mm->mmap_sem); ret = do_munmap(mm, start, len); up_write(&mm->mmap_sem); @@ -2507,8 +2512,15 @@ EXPORT_SYMBOL(vm_munmap); SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) { + int ret; + struct mm_struct *mm = current->mm; + profile_munmap(addr); - return vm_munmap(addr, len); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + ret = do_munmap(mm, addr, len); + up_write(&mm->mmap_sem); + return ret; } @@ -2541,7 +2553,9 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, if (pgoff + (size >> PAGE_SHIFT) < pgoff) return ret; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + vma = find_vma(mm, start); if (!vma || !(vma->vm_flags & VM_SHARED)) @@ -2706,6 +2720,11 @@ unsigned long vm_brk(unsigned long addr, unsigned long len) unsigned long ret; bool populate; + /* + * XXX not all users are chcecking the return value, convert + * to down_write_killable after they are able to cope with + * error + */ down_write(&mm->mmap_sem); ret = do_brk(addr, len); populate = ((mm->def_flags & VM_LOCKED) != 0); diff --git a/mm/mprotect.c b/mm/mprotect.c index bf44caea638b..ccd0044f74bd 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -378,7 +378,8 @@ SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, reqprot = prot; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; vma = find_vma(current->mm, start); error = -ENOMEM; diff --git a/mm/mremap.c b/mm/mremap.c index 3fa0a467df66..b635ce0ddfb4 100644 --- a/mm/mremap.c +++ b/mm/mremap.c @@ -502,7 +502,8 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, if (!new_len) return ret; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) + return -EINTR; if (flags & MREMAP_FIXED) { ret = mremap_to(addr, old_len, new_addr, new_len, diff --git a/mm/nommu.c b/mm/nommu.c index de8b6b6580c1..50b1d32921c2 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1448,7 +1448,7 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff); + retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff, true); if (file) fput(file); diff --git a/mm/util.c b/mm/util.c index 3bf315fefeb6..98eeec742254 100644 --- a/mm/util.c +++ b/mm/util.c @@ -319,7 +319,7 @@ EXPORT_SYMBOL_GPL(get_user_pages_fast); unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flag, unsigned long pgoff) + unsigned long flag, unsigned long pgoff, bool killable) { unsigned long ret; struct mm_struct *mm = current->mm; @@ -327,7 +327,12 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, ret = security_mmap_file(file, prot, flag); if (!ret) { - down_write(&mm->mmap_sem); + if (killable) { + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + } else { + down_write(&mm->mmap_sem); + } ret = do_mmap_pgoff(file, addr, len, prot, flag, pgoff, &populate); up_write(&mm->mmap_sem); @@ -337,6 +342,7 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, return ret; } +/* XXX are all callers checking an error */ unsigned long vm_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flag, unsigned long offset) @@ -346,7 +352,7 @@ unsigned long vm_mmap(struct file *file, unsigned long addr, if (unlikely(offset_in_page(offset))) return -EINVAL; - return vm_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); + return vm_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT, false); } EXPORT_SYMBOL(vm_mmap); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by kanga.kvack.org (Postfix) with ESMTP id 331536B0253 for ; Mon, 29 Feb 2016 08:27:13 -0500 (EST) Received: by mail-wm0-f45.google.com with SMTP id n186so49190848wmn.1 for ; Mon, 29 Feb 2016 05:27:13 -0800 (PST) From: Michal Hocko Subject: [PATCH 02/18] mm: make vm_mmap killable Date: Mon, 29 Feb 2016 14:26:41 +0100 Message-Id: <1456752417-9626-3-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Al Viro From: Michal Hocko All the callers of vm_mmap seem to check for the failure already and bail out in one way or another on the error which means that we can change it to use killable version of vm_mmap_pgoff and return -EINTR if the current task gets killed while waiting for mmap_sem. This also means that vm_mmap_pgoff can be killable by default and drop the additional parameter. This will help in the OOM conditions when the oom victim might be stuck waiting for the mmap_sem for write which in turn can block oom_reaper which relies on the mmap_sem for read to make a forward progress and reclaim the address space of the victim. Cc: "Kirill A. Shutemov" Cc: Mel Gorman Cc: Oleg Nesterov Cc: Andrea Arcangeli Cc: Al Viro Cc: Johannes Weiner Signed-off-by: Michal Hocko --- include/linux/mm.h | 2 +- mm/internal.h | 3 +-- mm/mmap.c | 2 +- mm/nommu.c | 2 +- mm/util.c | 13 ++++--------- 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 8a84cf07da8c..4ee6a3561540 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2079,7 +2079,7 @@ static inline void mm_populate(unsigned long addr, unsigned long len) {} /* These take the mm semaphore themselves */ extern unsigned long vm_brk(unsigned long, unsigned long); extern int vm_munmap(unsigned long, size_t); -extern unsigned long vm_mmap(struct file *, unsigned long, +extern unsigned long __must_check vm_mmap(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); diff --git a/mm/internal.h b/mm/internal.h index 26576cb3247e..d8d4c32bfce4 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -446,8 +446,7 @@ extern u32 hwpoison_filter_enable; extern unsigned long __must_check vm_mmap_pgoff(struct file *, unsigned long, unsigned long, unsigned long, - unsigned long, unsigned long, - bool); + unsigned long, unsigned long); extern void set_pageblock_order(void); unsigned long reclaim_clean_pages_from_list(struct zone *zone, diff --git a/mm/mmap.c b/mm/mmap.c index a8ea76c22bb6..4e1f852a52ff 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1337,7 +1337,7 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff, true); + retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff); out_fput: if (file) fput(file); diff --git a/mm/nommu.c b/mm/nommu.c index 50b1d32921c2..de8b6b6580c1 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -1448,7 +1448,7 @@ SYSCALL_DEFINE6(mmap_pgoff, unsigned long, addr, unsigned long, len, flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); - retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff, true); + retval = vm_mmap_pgoff(file, addr, len, prot, flags, pgoff); if (file) fput(file); diff --git a/mm/util.c b/mm/util.c index 98eeec742254..0e383fe48145 100644 --- a/mm/util.c +++ b/mm/util.c @@ -319,7 +319,7 @@ EXPORT_SYMBOL_GPL(get_user_pages_fast); unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, - unsigned long flag, unsigned long pgoff, bool killable) + unsigned long flag, unsigned long pgoff) { unsigned long ret; struct mm_struct *mm = current->mm; @@ -327,12 +327,8 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, ret = security_mmap_file(file, prot, flag); if (!ret) { - if (killable) { - if (down_write_killable(&mm->mmap_sem)) - return -EINTR; - } else { - down_write(&mm->mmap_sem); - } + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; ret = do_mmap_pgoff(file, addr, len, prot, flag, pgoff, &populate); up_write(&mm->mmap_sem); @@ -342,7 +338,6 @@ unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, return ret; } -/* XXX are all callers checking an error */ unsigned long vm_mmap(struct file *file, unsigned long addr, unsigned long len, unsigned long prot, unsigned long flag, unsigned long offset) @@ -352,7 +347,7 @@ unsigned long vm_mmap(struct file *file, unsigned long addr, if (unlikely(offset_in_page(offset))) return -EINVAL; - return vm_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT, false); + return vm_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT); } EXPORT_SYMBOL(vm_mmap); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by kanga.kvack.org (Postfix) with ESMTP id BCBBA6B0255 for ; Mon, 29 Feb 2016 08:27:14 -0500 (EST) Received: by mail-wm0-f45.google.com with SMTP id p65so45310592wmp.0 for ; Mon, 29 Feb 2016 05:27:14 -0800 (PST) From: Michal Hocko Subject: [PATCH 03/18] mm: make vm_munmap killable Date: Mon, 29 Feb 2016 14:26:42 +0100 Message-Id: <1456752417-9626-4-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro From: Michal Hocko Almost all current users of vm_munmap are ignoring the return value and so they do not handle potential error. This means that some VMAs might stay behind. This patch doesn't try to solve those potential problems. Quite contrary it adds a new failure mode by using down_write_killable in vm_munmap. This should be safer than other failure modes, though, because the process is guaranteed to die as soon as it leaves the kernel and exit_mmap will clean the whole address space. This will help in the OOM conditions when the oom victim might be stuck waiting for the mmap_sem for write which in turn can block oom_reaper which relies on the mmap_sem for read to make a forward progress and reclaim the address space of the victim. Cc: Oleg Nesterov Cc: "Kirill A. Shutemov" Cc: Konstantin Khlebnikov Cc: Andrea Arcangeli Cc: Alexander Viro Signed-off-by: Michal Hocko --- mm/mmap.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mm/mmap.c b/mm/mmap.c index 4e1f852a52ff..5d33c841e3a2 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2499,11 +2499,9 @@ int vm_munmap(unsigned long start, size_t len) int ret; struct mm_struct *mm = current->mm; - /* - * XXX convert to down_write_killable as soon as all users are able - * to handle the error. - */ - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + ret = do_munmap(mm, start, len); up_write(&mm->mmap_sem); return ret; -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by kanga.kvack.org (Postfix) with ESMTP id 936946B0253 for ; Mon, 29 Feb 2016 08:27:16 -0500 (EST) Received: by mail-wm0-f48.google.com with SMTP id l68so58399577wml.1 for ; Mon, 29 Feb 2016 05:27:16 -0800 (PST) From: Michal Hocko Subject: [PATCH 04/18] mm, aout: handle vm_brk failures Date: Mon, 29 Feb 2016 14:26:43 +0100 Message-Id: <1456752417-9626-5-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Ingo Molnar , Alexander Viro From: Michal Hocko vm_brk is allowed to fail but load_aout_binary simply ignores the error and happily continues. I haven't noticed any problem from that in real life but later patches will make the failure more likely because vm_brk will become killable (resp. mmap_sem for write waiting will become killable) so we should be more careful now. The error handling should be quite straightforward because there are calls to vm_mmap which check the error properly already. The only notable exception is set_brk which is called after beyond_if label. But nothing indicates that we cannot move it above set_binfmt as the two do not depend on each other and fail before we do set_binfmt and alter reference counting. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Alexander Viro Signed-off-by: Michal Hocko --- arch/x86/ia32/ia32_aout.c | 22 +++++++++++++++------- fs/binfmt_aout.c | 9 +++++++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index ae6aad1d24f7..f5e737ff0022 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c @@ -116,13 +116,13 @@ static struct linux_binfmt aout_format = { .min_coredump = PAGE_SIZE }; -static void set_brk(unsigned long start, unsigned long end) +static unsigned long set_brk(unsigned long start, unsigned long end) { start = PAGE_ALIGN(start); end = PAGE_ALIGN(end); if (end <= start) - return; - vm_brk(start, end - start); + return start; + return vm_brk(start, end - start); } #ifdef CONFIG_COREDUMP @@ -349,7 +349,10 @@ static int load_aout_binary(struct linux_binprm *bprm) #endif if (!bprm->file->f_op->mmap || (fd_offset & ~PAGE_MASK) != 0) { - vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data); + error = vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data); + if (IS_ERR_VALUE(error)) + return error; + read_code(bprm->file, N_TXTADDR(ex), fd_offset, ex.a_text+ex.a_data); goto beyond_if; @@ -372,10 +375,13 @@ static int load_aout_binary(struct linux_binprm *bprm) if (error != N_DATADDR(ex)) return error; } + beyond_if: - set_binfmt(&aout_format); + error = set_brk(current->mm->start_brk, current->mm->brk); + if (IS_ERR_VALUE(error)) + return error; - set_brk(current->mm->start_brk, current->mm->brk); + set_binfmt(&aout_format); current->mm->start_stack = (unsigned long)create_aout_tables((char __user *)bprm->p, bprm); @@ -434,7 +440,9 @@ static int load_aout_library(struct file *file) error_time = jiffies; } #endif - vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); + retval = vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); + if (IS_ERR_VALUE(retval)) + goto out; read_code(file, start_addr, N_TXTOFF(ex), ex.a_text + ex.a_data); diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index 4c556680fa74..5fb075f05706 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c @@ -297,7 +297,10 @@ static int load_aout_binary(struct linux_binprm * bprm) } if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) { - vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data); + error = vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data); + if (IS_ERR_VALUE(error)) + return error; + read_code(bprm->file, N_TXTADDR(ex), fd_offset, ex.a_text + ex.a_data); goto beyond_if; @@ -378,7 +381,9 @@ static int load_aout_library(struct file *file) "N_TXTOFF is not page aligned. Please convert library: %pD\n", file); } - vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); + retval = vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); + if (IS_ERR_VALUE(retval)) + goto out; read_code(file, start_addr, N_TXTOFF(ex), ex.a_text + ex.a_data); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) by kanga.kvack.org (Postfix) with ESMTP id BB8E56B0256 for ; Mon, 29 Feb 2016 08:27:18 -0500 (EST) Received: by mail-wm0-f46.google.com with SMTP id l68so36706586wml.0 for ; Mon, 29 Feb 2016 05:27:18 -0800 (PST) From: Michal Hocko Subject: [PATCH 05/18] mm, elf: handle vm_brk error Date: Mon, 29 Feb 2016 14:26:44 +0100 Message-Id: <1456752417-9626-6-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro From: Michal Hocko load_elf_library doesn't handle vm_brk failure although nothing really indicates it cannot do that because the function is allowed to fail due to vm_mmap failures already. This might be not a problem now but later patch will make vm_brk killable (resp. mmap_sem for write waiting will become killable) and so the failure will be more probable. Cc: Alexander Viro Signed-off-by: Michal Hocko --- fs/binfmt_elf.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c index 7d914c67a9d0..2e45ae57ea88 100644 --- a/fs/binfmt_elf.c +++ b/fs/binfmt_elf.c @@ -1176,8 +1176,11 @@ static int load_elf_library(struct file *file) len = ELF_PAGESTART(eppnt->p_filesz + eppnt->p_vaddr + ELF_MIN_ALIGN - 1); bss = eppnt->p_memsz + eppnt->p_vaddr; - if (bss > len) - vm_brk(len, bss - len); + if (bss > len) { + error = vm_brk(len, bss - len); + if (BAD_ADDR(error)) + goto out_free_ph; + } error = 0; out_free_ph: -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id 8DD9F6B0257 for ; Mon, 29 Feb 2016 08:27:20 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id p65so45314562wmp.0 for ; Mon, 29 Feb 2016 05:27:20 -0800 (PST) From: Michal Hocko Subject: [PATCH 06/18] mm: make vm_brk killable Date: Mon, 29 Feb 2016 14:26:45 +0100 Message-Id: <1456752417-9626-7-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko Now that all the callers handle vm_brk failure we can change it wait for mmap_sem killable to help oom_reaper to not get blocked just because vm_brk gets blocked behind mmap_sem readers. Cc: "Kirill A. Shutemov" Cc: Oleg Nesterov Cc: Andrea Arcangeli Signed-off-by: Michal Hocko --- include/linux/mm.h | 2 +- mm/mmap.c | 9 +++------ 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index 4ee6a3561540..dccaea8682f2 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -2077,7 +2077,7 @@ static inline void mm_populate(unsigned long addr, unsigned long len) {} #endif /* These take the mm semaphore themselves */ -extern unsigned long vm_brk(unsigned long, unsigned long); +extern unsigned long __must_check vm_brk(unsigned long, unsigned long); extern int vm_munmap(unsigned long, size_t); extern unsigned long __must_check vm_mmap(struct file *, unsigned long, unsigned long, unsigned long, diff --git a/mm/mmap.c b/mm/mmap.c index 5d33c841e3a2..3f264fb14118 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2718,12 +2718,9 @@ unsigned long vm_brk(unsigned long addr, unsigned long len) unsigned long ret; bool populate; - /* - * XXX not all users are chcecking the return value, convert - * to down_write_killable after they are able to cope with - * error - */ - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + ret = do_brk(addr, len); populate = ((mm->def_flags & VM_LOCKED) != 0); up_write(&mm->mmap_sem); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id 4F04C6B0258 for ; Mon, 29 Feb 2016 08:27:22 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id n186so49196864wmn.1 for ; Mon, 29 Feb 2016 05:27:22 -0800 (PST) From: Michal Hocko Subject: [PATCH 07/18] mm, proc: make clear_refs killable Date: Mon, 29 Feb 2016 14:26:46 +0100 Message-Id: <1456752417-9626-8-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko CLEAR_REFS_MM_HIWATER_RSS and CLEAR_REFS_SOFT_DIRTY are relying on mmap_sem for write. If the waiting task gets killed by the oom killer and it would operate on the current's mm it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. This will also expedite the return to the userspace and do_exit even if the mm is remote. Cc: Petr Cermak Signed-off-by: Michal Hocko --- fs/proc/task_mmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 9df431642042..fc303fa1f5c0 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, }; if (type == CLEAR_REFS_MM_HIWATER_RSS) { + if (down_write_killable(&mm->mmap_sem)) { + put_task_struct(task); + return -EINTR; + } + /* * Writing 5 to /proc/pid/clear_refs resets the peak * resident set size to this mm's current rss value. */ - down_write(&mm->mmap_sem); reset_mm_hiwater_rss(mm); up_write(&mm->mmap_sem); goto out_mm; @@ -1043,7 +1047,10 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, if (!(vma->vm_flags & VM_SOFTDIRTY)) continue; up_read(&mm->mmap_sem); - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + put_task_struct(task); + return -EINTR; + } for (vma = mm->mmap; vma; vma = vma->vm_next) { vma->vm_flags &= ~VM_SOFTDIRTY; vma_set_page_prot(vma); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by kanga.kvack.org (Postfix) with ESMTP id E6FD46B0258 for ; Mon, 29 Feb 2016 08:27:23 -0500 (EST) Received: by mail-wm0-f41.google.com with SMTP id n186so49197973wmn.1 for ; Mon, 29 Feb 2016 05:27:23 -0800 (PST) From: Michal Hocko Subject: [PATCH 08/18] mm, fork: make dup_mmap wait for mmap_sem for write killable Date: Mon, 29 Feb 2016 14:26:47 +0100 Message-Id: <1456752417-9626-9-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko dup_mmap needs to lock current's mm mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Oleg Nesterov Cc: Konstantin Khlebnikov Signed-off-by: Michal Hocko --- kernel/fork.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/kernel/fork.c b/kernel/fork.c index d277e83ed3e0..e064bc8453dc 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -413,7 +413,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) unsigned long charge; uprobe_start_dup_mmap(); - down_write(&oldmm->mmap_sem); + if (down_write_killable(&oldmm->mmap_sem)) { + uprobe_end_dup_mmap(); + return -EINTR; + } flush_cache_dup_mm(oldmm); uprobe_dup_mmap(oldmm, mm); /* -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by kanga.kvack.org (Postfix) with ESMTP id 8FFD46B0259 for ; Mon, 29 Feb 2016 08:27:25 -0500 (EST) Received: by mail-wm0-f54.google.com with SMTP id n186so49199110wmn.1 for ; Mon, 29 Feb 2016 05:27:25 -0800 (PST) From: Michal Hocko Subject: [PATCH 09/18] ipc, shm: make shmem attach/detach wait for mmap_sem killable Date: Mon, 29 Feb 2016 14:26:48 +0100 Message-Id: <1456752417-9626-10-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko shmat and shmdt rely on mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Davidlohr Bueso Cc: Hugh Dickins Signed-off-by: Michal Hocko --- ipc/shm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ipc/shm.c b/ipc/shm.c index 331fc1b0b3c7..b8cfa05940d2 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -1200,7 +1200,11 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, if (err) goto out_fput; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) { + err = -EINVAL; + goto out_fput; + } + if (addr && !(shmflg & SHM_REMAP)) { err = -EINVAL; if (addr + size < addr) @@ -1271,7 +1275,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr) if (addr & ~PAGE_MASK) return retval; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; /* * This function tries to be smart and unmap shm segments that -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by kanga.kvack.org (Postfix) with ESMTP id 679A16B025A for ; Mon, 29 Feb 2016 08:27:27 -0500 (EST) Received: by mail-wm0-f45.google.com with SMTP id n186so49200401wmn.1 for ; Mon, 29 Feb 2016 05:27:27 -0800 (PST) From: Michal Hocko Subject: [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Date: Mon, 29 Feb 2016 14:26:49 +0100 Message-Id: <1456752417-9626-11-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko most architectures are relying on mmap_sem for write in their arch_setup_additional_pages. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: linux-arch@vger.kernel.org Cc: Andy Lutomirski Signed-off-by: Michal Hocko --- arch/arm/kernel/process.c | 3 ++- arch/arm64/kernel/vdso.c | 6 ++++-- arch/hexagon/kernel/vdso.c | 3 ++- arch/mips/kernel/vdso.c | 3 ++- arch/powerpc/kernel/vdso.c | 3 ++- arch/s390/kernel/vdso.c | 3 ++- arch/sh/kernel/vsyscall/vsyscall.c | 4 +++- arch/x86/entry/vdso/vma.c | 3 ++- arch/x86/um/vdso/vma.c | 3 ++- 9 files changed, 21 insertions(+), 10 deletions(-) diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c index 4adfb46e3ee9..94cccae090fa 100644 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@ -420,7 +420,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) npages = 1; /* for sigpage */ npages += vdso_total_pages; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; hint = sigpage_addr(mm, npages); addr = get_unmapped_area(NULL, hint, npages << PAGE_SHIFT, 0, 0); if (IS_ERR_VALUE(addr)) { diff --git a/arch/arm64/kernel/vdso.c b/arch/arm64/kernel/vdso.c index 97bc68f4c689..d7423dfb4a4a 100644 --- a/arch/arm64/kernel/vdso.c +++ b/arch/arm64/kernel/vdso.c @@ -95,7 +95,8 @@ int aarch32_setup_vectors_page(struct linux_binprm *bprm, int uses_interp) }; void *ret; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; current->mm->context.vdso = (void *)addr; /* Map vectors page at the high address. */ @@ -163,7 +164,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, /* Be sure to map the data page */ vdso_mapping_len = vdso_text_len + PAGE_SIZE; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; vdso_base = get_unmapped_area(NULL, 0, vdso_mapping_len, 0, 0); if (IS_ERR_VALUE(vdso_base)) { ret = ERR_PTR(vdso_base); diff --git a/arch/hexagon/kernel/vdso.c b/arch/hexagon/kernel/vdso.c index 0bf5a87e4d0a..3ea968415539 100644 --- a/arch/hexagon/kernel/vdso.c +++ b/arch/hexagon/kernel/vdso.c @@ -65,7 +65,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) unsigned long vdso_base; struct mm_struct *mm = current->mm; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; /* Try to get it loaded right near ld.so/glibc. */ vdso_base = STACK_TOP; diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c index 975e99759bab..54e1663ce639 100644 --- a/arch/mips/kernel/vdso.c +++ b/arch/mips/kernel/vdso.c @@ -104,7 +104,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) struct resource gic_res; int ret; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; /* * Determine total area size. This includes the VDSO data itself, the diff --git a/arch/powerpc/kernel/vdso.c b/arch/powerpc/kernel/vdso.c index def1b8b5e6c1..6767605ea8da 100644 --- a/arch/powerpc/kernel/vdso.c +++ b/arch/powerpc/kernel/vdso.c @@ -195,7 +195,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) * and end up putting it elsewhere. * Add enough to the size so that the result can be aligned. */ - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; vdso_base = get_unmapped_area(NULL, vdso_base, (vdso_pages << PAGE_SHIFT) + ((VDSO_ALIGNMENT - 1) & PAGE_MASK), diff --git a/arch/s390/kernel/vdso.c b/arch/s390/kernel/vdso.c index 94495cac8be3..5904abf6b1ae 100644 --- a/arch/s390/kernel/vdso.c +++ b/arch/s390/kernel/vdso.c @@ -216,7 +216,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) * it at vdso_base which is the "natural" base for it, but we might * fail and end up putting it elsewhere. */ - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; vdso_base = get_unmapped_area(NULL, 0, vdso_pages << PAGE_SHIFT, 0, 0); if (IS_ERR_VALUE(vdso_base)) { rc = vdso_base; diff --git a/arch/sh/kernel/vsyscall/vsyscall.c b/arch/sh/kernel/vsyscall/vsyscall.c index ea2aa1393b87..cc0cc5b4ff18 100644 --- a/arch/sh/kernel/vsyscall/vsyscall.c +++ b/arch/sh/kernel/vsyscall/vsyscall.c @@ -64,7 +64,9 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) unsigned long addr; int ret; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + addr = get_unmapped_area(NULL, 0, PAGE_SIZE, 0, 0); if (IS_ERR_VALUE(addr)) { ret = addr; diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c index 10f704584922..69d861f67c47 100644 --- a/arch/x86/entry/vdso/vma.c +++ b/arch/x86/entry/vdso/vma.c @@ -174,7 +174,8 @@ static int map_vdso(const struct vdso_image *image, bool calculate_addr) addr = 0; } - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; addr = get_unmapped_area(NULL, addr, image->size - image->sym_vvar_start, 0, 0); diff --git a/arch/x86/um/vdso/vma.c b/arch/x86/um/vdso/vma.c index 237c6831e095..6be22f991b59 100644 --- a/arch/x86/um/vdso/vma.c +++ b/arch/x86/um/vdso/vma.c @@ -61,7 +61,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp) if (!vdso_enabled) return 0; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; err = install_special_mapping(mm, um_vdso_addr, PAGE_SIZE, VM_READ|VM_EXEC| -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) by kanga.kvack.org (Postfix) with ESMTP id 27F5A6B025C for ; Mon, 29 Feb 2016 08:27:29 -0500 (EST) Received: by mail-wm0-f46.google.com with SMTP id l68so58407648wml.1 for ; Mon, 29 Feb 2016 05:27:29 -0800 (PST) From: Michal Hocko Subject: [PATCH 11/18] coredump: make coredump_wait wait for mma_sem for write killable Date: Mon, 29 Feb 2016 14:26:50 +0100 Message-Id: <1456752417-9626-12-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko coredump_wait waits for mmap_sem for write currently which can prevent oom_reaper to reclaim the oom victims address space asynchronously because that requires mmap_sem for read. This might happen if the oom victim is multi threaded and some thread(s) is holding mmap_sem for read (e.g. page fault) and it is stuck in the page allocator while other thread(s) reached coredump_wait already. This patch simply uses down_write_killable and bails out with EINTR if the lock got interrupted by the fatal signal. do_coredump will return right away and do_group_exit will take care to zap the whole thread group. Cc: Oleg Nesterov Signed-off-by: Michal Hocko --- fs/coredump.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/fs/coredump.c b/fs/coredump.c index 9ea87e9fdccf..6b8aa1629891 100644 --- a/fs/coredump.c +++ b/fs/coredump.c @@ -410,7 +410,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state) core_state->dumper.task = tsk; core_state->dumper.next = NULL; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + if (!mm->core_state) core_waiters = zap_threads(tsk, mm, core_state, exit_code); up_write(&mm->mmap_sem); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by kanga.kvack.org (Postfix) with ESMTP id A17BE6B025E for ; Mon, 29 Feb 2016 08:27:30 -0500 (EST) Received: by mail-wm0-f49.google.com with SMTP id l68so58408537wml.1 for ; Mon, 29 Feb 2016 05:27:30 -0800 (PST) From: Michal Hocko Subject: [PATCH 12/18] aio: make aio_setup_ring killable Date: Mon, 29 Feb 2016 14:26:51 +0100 Message-Id: <1456752417-9626-13-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro From: Michal Hocko aio_setup_ring waits for mmap_sem in writable mode. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. This will also expedite the return to the userspace and do_exit. Cc: Benjamin LaHaise Cc: Alexander Viro Signed-off-by: Michal Hocko --- fs/aio.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/fs/aio.c b/fs/aio.c index 56bcdf4105f4..1c2e7e2c1b2b 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -520,7 +520,12 @@ static int aio_setup_ring(struct kioctx *ctx) ctx->mmap_size = nr_pages * PAGE_SIZE; pr_debug("attempting mmap of %lu bytes\n", ctx->mmap_size); - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + ctx->mmap_size = 0; + aio_free_ring(ctx); + return -EINTR; + } + ctx->mmap_base = do_mmap_pgoff(ctx->aio_ring_file, 0, ctx->mmap_size, PROT_READ | PROT_WRITE, MAP_SHARED, 0, &unused); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by kanga.kvack.org (Postfix) with ESMTP id 511886B025F for ; Mon, 29 Feb 2016 08:27:32 -0500 (EST) Received: by mail-wm0-f44.google.com with SMTP id l68so36715657wml.0 for ; Mon, 29 Feb 2016 05:27:32 -0800 (PST) From: Michal Hocko Subject: [PATCH 13/18] exec: make exec path waiting for mmap_sem killable Date: Mon, 29 Feb 2016 14:26:52 +0100 Message-Id: <1456752417-9626-14-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro From: Michal Hocko setup_arg_pages requires mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. All the callers are already handling error path and the fatal signal doesn't need any additional treatment. The same applies to __bprm_mm_init. Cc: Alexander Viro Signed-off-by: Michal Hocko --- fs/exec.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fs/exec.c b/fs/exec.c index c4010b8207a1..29f2f22ae067 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -267,7 +267,10 @@ static int __bprm_mm_init(struct linux_binprm *bprm) if (!vma) return -ENOMEM; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + err = -EINTR; + goto err_free; + } vma->vm_mm = mm; /* @@ -294,6 +297,7 @@ static int __bprm_mm_init(struct linux_binprm *bprm) return 0; err: up_write(&mm->mmap_sem); +err_free: bprm->vma = NULL; kmem_cache_free(vm_area_cachep, vma); return err; @@ -700,7 +704,9 @@ int setup_arg_pages(struct linux_binprm *bprm, bprm->loader -= stack_shift; bprm->exec -= stack_shift; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + vm_flags = VM_STACK_FLAGS; /* -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id ED3486B025F for ; Mon, 29 Feb 2016 08:27:33 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id n186so49204989wmn.1 for ; Mon, 29 Feb 2016 05:27:33 -0800 (PST) From: Michal Hocko Subject: [PATCH 14/18] prctl: make PR_SET_THP_DISABLE wait for mmap_sem killable Date: Mon, 29 Feb 2016 14:26:53 +0100 Message-Id: <1456752417-9626-15-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko PR_SET_THP_DISABLE requires mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Alex Thorlton Signed-off-by: Michal Hocko --- kernel/sys.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/sys.c b/kernel/sys.c index cf8ba545c7d3..89d5be418157 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2246,7 +2246,8 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, case PR_SET_THP_DISABLE: if (arg3 || arg4 || arg5) return -EINVAL; - down_write(&me->mm->mmap_sem); + if (down_write_killable(&me->mm->mmap_sem)) + return -EINTR; if (arg2) me->mm->def_flags |= VM_NOHUGEPAGE; else -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id D03146B0260 for ; Mon, 29 Feb 2016 08:27:35 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id p65so45324635wmp.0 for ; Mon, 29 Feb 2016 05:27:35 -0800 (PST) From: Michal Hocko Subject: [PATCH 15/18] uprobes: wait for mmap_sem for write killable Date: Mon, 29 Feb 2016 14:26:54 +0100 Message-Id: <1456752417-9626-16-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko xol_add_vma needs mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Oleg Nesterov Signed-off-by: Michal Hocko --- kernel/events/uprobes.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index 8eef5f55d3f0..a79315d0f711 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) struct vm_area_struct *vma; int ret; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + if (mm->uprobes_state.xol_area) { ret = -EALREADY; goto fail; -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id BC5076B0261 for ; Mon, 29 Feb 2016 08:27:37 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id l68so58412855wml.1 for ; Mon, 29 Feb 2016 05:27:37 -0800 (PST) From: Michal Hocko Subject: [PATCH 16/18] drm/i915: make i915_gem_mmap_ioctl wait for mmap_sem killable Date: Mon, 29 Feb 2016 14:26:55 +0100 Message-Id: <1456752417-9626-17-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko i915_gem_mmap_ioctl relies on mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Daniel Vetter Cc: David Airlie Signed-off-by: Michal Hocko --- drivers/gpu/drm/i915/i915_gem.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index f68f34606f2f..a50136cbd332 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -1754,7 +1754,10 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data, struct mm_struct *mm = current->mm; struct vm_area_struct *vma; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + drm_gem_object_unreference_unlocked(obj); + return -EINTR; + } vma = find_vma(mm, addr); if (vma) vma->vm_page_prot = -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by kanga.kvack.org (Postfix) with ESMTP id 61F5C6B0261 for ; Mon, 29 Feb 2016 08:27:39 -0500 (EST) Received: by mail-wm0-f45.google.com with SMTP id l68so58413832wml.1 for ; Mon, 29 Feb 2016 05:27:39 -0800 (PST) From: Michal Hocko Subject: [PATCH 17/18] drm/radeon: make radeon_mn_get wait for mmap_sem killable Date: Mon, 29 Feb 2016 14:26:56 +0100 Message-Id: <1456752417-9626-18-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko radeon_mn_get which is called during ioct path relies on mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Alex Deucher Cc: "Christian KA?nig" Cc: David Airlie Signed-off-by: Michal Hocko --- drivers/gpu/drm/radeon/radeon_mn.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c index eef006c48584..896f2cf51e4e 100644 --- a/drivers/gpu/drm/radeon/radeon_mn.c +++ b/drivers/gpu/drm/radeon/radeon_mn.c @@ -186,7 +186,9 @@ static struct radeon_mn *radeon_mn_get(struct radeon_device *rdev) struct radeon_mn *rmn; int r; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return ERR_PTR(-EINTR); + mutex_lock(&rdev->mn_lock); hash_for_each_possible(rdev->mn_hash, rmn, node, (unsigned long)mm) -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id E47E26B0264 for ; Mon, 29 Feb 2016 08:27:40 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id l68so36721125wml.0 for ; Mon, 29 Feb 2016 05:27:40 -0800 (PST) From: Michal Hocko Subject: [PATCH 18/18] drm/amdgpu: make amdgpu_mn_get wait for mmap_sem killable Date: Mon, 29 Feb 2016 14:26:57 +0100 Message-Id: <1456752417-9626-19-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?q?Christian=20K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko From: Michal Hocko amdgpu_mn_get which is called during ioct path relies on mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: David Airlie Cc: Alex Deucher Signed-off-by: Michal Hocko --- drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c index d7ec9bd6755f..6f44f1c23be3 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c @@ -181,7 +181,10 @@ static struct amdgpu_mn *amdgpu_mn_get(struct amdgpu_device *adev) int r; mutex_lock(&adev->mn_lock); - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + mutex_unlock(&adev->mn_lock); + return -EINTR; + } hash_for_each_possible(adev->mn_hash, rmn, node, (unsigned long)mm) if (rmn->mm == mm) -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by kanga.kvack.org (Postfix) with ESMTP id C3A3E6B0272 for ; Mon, 29 Feb 2016 08:31:55 -0500 (EST) Received: by mail-wm0-f42.google.com with SMTP id l68so36888829wml.0 for ; Mon, 29 Feb 2016 05:31:55 -0800 (PST) Date: Mon, 29 Feb 2016 14:31:53 +0100 From: Michal Hocko Subject: Re: [PATCH 0/18] change mmap_sem taken for write killable Message-ID: <20160229133153.GA16930@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon 29-02-16 14:26:39, Michal Hocko wrote: [...] > As this work is touching more areas which are not directly connected I > have tried to keep the CC list as small as possible and people who I > believed would be familiar are CCed only to the specific patches (all > should have received the cover though). Damnt it. I thought that git-send-email will not use the same CC list for all patches and use it only for the cover if the particular patches have their CC list. I am sorry for the excessive spamming! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f175.google.com (mail-pf0-f175.google.com [209.85.192.175]) by kanga.kvack.org (Postfix) with ESMTP id 15637828E2 for ; Mon, 29 Feb 2016 08:36:11 -0500 (EST) Received: by mail-pf0-f175.google.com with SMTP id 124so31001470pfg.0 for ; Mon, 29 Feb 2016 05:36:11 -0800 (PST) Received: from na01-bl2-obe.outbound.protection.outlook.com (mail-bl2on0083.outbound.protection.outlook.com. [65.55.169.83]) by mx.google.com with ESMTPS id bs10si4196017pad.73.2016.02.29.05.36.10 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 29 Feb 2016 05:36:10 -0800 (PST) Subject: Re: [PATCH 17/18] drm/radeon: make radeon_mn_get wait for mmap_sem killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-18-git-send-email-mhocko@kernel.org> From: =?UTF-8?Q?Christian_K=c3=b6nig?= Message-ID: <56D4493B.7010004@amd.com> Date: Mon, 29 Feb 2016 14:35:55 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-18-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: "dri-devel@lists.freedesktop.org" , linux-mm@kvack.org, linux-arch@vger.kernel.org [Dropping CCing the individual people, but adding the dri-devel mailing list as well instead]. Am 29.02.2016 um 14:26 schrieb Michal Hocko: > From: Michal Hocko > > radeon_mn_get which is called during ioct path relies on mmap_sem for > write. If the waiting task gets killed by the oom killer it would block > oom_reaper from asynchronous address space reclaim and reduce the > chances of timely OOM resolving. Wait for the lock in the killable mode > and return with EINTR if the task got killed while waiting. > > Cc: Alex Deucher > Cc: "Christian KA?nig" > Cc: David Airlie > Signed-off-by: Michal Hocko This one and patch #18 in this series are Reviewed-by: Christian KA?nig . Nice to see some improvements on this side, Christian. > --- > drivers/gpu/drm/radeon/radeon_mn.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c > index eef006c48584..896f2cf51e4e 100644 > --- a/drivers/gpu/drm/radeon/radeon_mn.c > +++ b/drivers/gpu/drm/radeon/radeon_mn.c > @@ -186,7 +186,9 @@ static struct radeon_mn *radeon_mn_get(struct radeon_device *rdev) > struct radeon_mn *rmn; > int r; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return ERR_PTR(-EINTR); > + > mutex_lock(&rdev->mn_lock); > > hash_for_each_possible(rdev->mn_hash, rmn, node, (unsigned long)mm) -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f173.google.com (mail-pf0-f173.google.com [209.85.192.173]) by kanga.kvack.org (Postfix) with ESMTP id CBF5A828EE for ; Mon, 29 Feb 2016 08:45:13 -0500 (EST) Received: by mail-pf0-f173.google.com with SMTP id w128so47693351pfb.2 for ; Mon, 29 Feb 2016 05:45:13 -0800 (PST) Date: Mon, 29 Feb 2016 21:44:33 +0800 From: kbuild test robot Subject: Re: [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls Message-ID: <201602292141.BH2wrdp9%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="EVF5PPMfhYS0aIcm" Content-Disposition: inline In-Reply-To: <1456752417-9626-2-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --EVF5PPMfhYS0aIcm Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test WARNING on next-20160229] [also build test WARNING on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: i386-randconfig-x003-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): In file included from include/asm-generic/bug.h:4:0, from arch/x86/include/asm/bug.h:35, from include/linux/bug.h:4, from include/linux/mmdebug.h:4, from include/linux/mm.h:8, from mm/util.c:1: mm/util.c: In function 'vm_mmap_pgoff': mm/util.c:331:8: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> mm/util.c:331:4: note: in expansion of macro 'if' if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- In file included from include/uapi/linux/stddef.h:1:0, from include/linux/stddef.h:4, from include/uapi/linux/posix_types.h:4, from include/uapi/linux/types.h:13, from include/linux/types.h:5, from include/uapi/linux/capability.h:16, from include/linux/capability.h:15, from mm/mlock.c:8: mm/mlock.c: In function 'do_mlock': mm/mlock.c:638:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> mm/mlock.c:638:2: note: in expansion of macro 'if' if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from mm/mmap.c:11: mm/mmap.c: In function 'SYSC_brk': mm/mmap.c:185:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> mm/mmap.c:185:2: note: in expansion of macro 'if' if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- In file included from include/asm-generic/bug.h:4:0, from arch/x86/include/asm/bug.h:35, from include/linux/bug.h:4, from include/linux/mmdebug.h:4, from include/linux/mm.h:8, from mm/mprotect.c:11: mm/mprotect.c: In function 'SYSC_mprotect': mm/mprotect.c:381:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> mm/mprotect.c:381:2: note: in expansion of macro 'if' if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- In file included from include/asm-generic/bug.h:4:0, from arch/x86/include/asm/bug.h:35, from include/linux/bug.h:4, from include/linux/mmdebug.h:4, from include/linux/mm.h:8, from mm/mremap.c:10: mm/mremap.c: In function 'SYSC_mremap': mm/mremap.c:505:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> mm/mremap.c:505:2: note: in expansion of macro 'if' if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- In file included from include/asm-generic/bug.h:4:0, from arch/x86/include/asm/bug.h:35, from include/linux/bug.h:4, from include/linux/mmdebug.h:4, from include/linux/mm.h:8, from include/linux/mman.h:4, from mm/madvise.c:8: mm/madvise.c: In function 'SYSC_madvise': mm/madvise.c:768:7: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> mm/madvise.c:768:3: note: in expansion of macro 'if' if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors vim +/if +331 mm/util.c 315 { 316 return get_user_pages_unlocked(start, nr_pages, write, 0, pages); 317 } 318 EXPORT_SYMBOL_GPL(get_user_pages_fast); 319 320 unsigned long vm_mmap_pgoff(struct file *file, unsigned long addr, 321 unsigned long len, unsigned long prot, 322 unsigned long flag, unsigned long pgoff, bool killable) 323 { 324 unsigned long ret; 325 struct mm_struct *mm = current->mm; 326 unsigned long populate; 327 328 ret = security_mmap_file(file, prot, flag); 329 if (!ret) { 330 if (killable) { > 331 if (down_write_killable(&mm->mmap_sem)) 332 return -EINTR; 333 } else { 334 down_write(&mm->mmap_sem); 335 } 336 ret = do_mmap_pgoff(file, addr, len, prot, flag, pgoff, 337 &populate); 338 up_write(&mm->mmap_sem); 339 if (populate) --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --EVF5PPMfhYS0aIcm Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 FvXYJ+Zerj2j0Hk9Kac3IP8PLl3NXZ5KAQA= --EVF5PPMfhYS0aIcm-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f179.google.com (mail-pf0-f179.google.com [209.85.192.179]) by kanga.kvack.org (Postfix) with ESMTP id 512A2828EE for ; Mon, 29 Feb 2016 08:45:23 -0500 (EST) Received: by mail-pf0-f179.google.com with SMTP id 4so14486197pfd.1 for ; Mon, 29 Feb 2016 05:45:23 -0800 (PST) Date: Mon, 29 Feb 2016 21:44:27 +0800 From: kbuild test robot Subject: Re: [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls Message-ID: <201602292152.f1UkUXsw%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="9amGYk9869ThD9tj" Content-Disposition: inline In-Reply-To: <1456752417-9626-2-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --9amGYk9869ThD9tj Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on next-20160229] [also build test ERROR on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: i386-randconfig-x004-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): mm/util.c: In function 'vm_mmap_pgoff': >> mm/util.c:331:8: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- mm/mlock.c: In function 'do_mlock': >> mm/mlock.c:638:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- mm/mmap.c: In function 'SYSC_brk': >> mm/mmap.c:185:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- mm/mprotect.c: In function 'SYSC_mprotect': >> mm/mprotect.c:381:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors -- mm/mremap.c: In function 'SYSC_mremap': >> mm/mremap.c:505:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) ^ cc1: some warnings being treated as errors vim +/down_write_killable +331 mm/util.c 325 struct mm_struct *mm = current->mm; 326 unsigned long populate; 327 328 ret = security_mmap_file(file, prot, flag); 329 if (!ret) { 330 if (killable) { > 331 if (down_write_killable(&mm->mmap_sem)) 332 return -EINTR; 333 } else { 334 down_write(&mm->mmap_sem); --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --9amGYk9869ThD9tj Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --9amGYk9869ThD9tj-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f46.google.com (mail-pa0-f46.google.com [209.85.220.46]) by kanga.kvack.org (Postfix) with ESMTP id B3D63828F2 for ; Mon, 29 Feb 2016 08:46:33 -0500 (EST) Received: by mail-pa0-f46.google.com with SMTP id yy13so92371100pab.3 for ; Mon, 29 Feb 2016 05:46:33 -0800 (PST) Date: Mon, 29 Feb 2016 21:45:29 +0800 From: kbuild test robot Subject: Re: [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Message-ID: <201602292105.AxEWbFGJ%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="wRRV7LY7NUeQGEoC" Content-Disposition: inline In-Reply-To: <1456752417-9626-11-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --wRRV7LY7NUeQGEoC Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on next-20160229] [also build test ERROR on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: i386-randconfig-x004-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): arch/x86/entry/vdso/vma.c: In function 'map_vdso': >> arch/x86/entry/vdso/vma.c:177:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors vim +/down_write_killable +177 arch/x86/entry/vdso/vma.c 171 addr = vdso_addr(current->mm->start_stack, 172 image->size - image->sym_vvar_start); 173 } else { 174 addr = 0; 175 } 176 > 177 if (down_write_killable(&mm->mmap_sem)) 178 return -EINTR; 179 180 addr = get_unmapped_area(NULL, addr, --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --wRRV7LY7NUeQGEoC Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 H4sICMJK1FYAAy5jb25maWcAjFxPd9u2st/3U+ikb3HvIo3tOG563vECIkEJFUHQAChb3vC4 ttL61LF7Lbk3/fZvBiBFABwqLxuHmMH/wcxvZgD9+MOPM/a2f/l6t3+8v3t6+mf2+/Z5+3q3 3z7Mvjw+bf93lqtZpeyM58L+BMzl4/Pbtw+PHz9fzM5/+vTTyfvX+4vZavv6vH2aZS/PXx5/ f4Pajy/PP/wI3JmqCrFoL87nws4ed7Pnl/1st93/0JXffL5oP55d/hN8Dx+iMlY3mRWqanOe qZzrgVhzXbR8zStrgNHysm2qTGk+cKjG1o1tC6Uls5fvtk9fPp69x3G/6zmYzpbQcuE/L9/d vd7/8eHb54sP924eOzfL9mH7xX8f6pUqW+W8bk1T10rboUtjWbaymmV8TJOyGT5cz1KyutVV 3sLamFaK6vLzMTq7uTy9oBkyJWtmv9tOxBY1V3Get7lkLbLCLGywjo5mFo5c8mphlwNtwSuu RdYKw5A+Jsybxbhwec3FYmnT5WCbdsnWvK2ztsizgaqvDZftTbZcsDxvWblQWtilHLebsVLM NQweNrVkm6T9JTNtVjetBtoNRWPZkrelqGDzxG2wAG5QhtumRqlzbTDNWbJCPYnLOXwVQhvb ZsumWk3w1WzBaTY/IjHnumJO+GtljJiXPGExjak5bOsE+ZpVtl020EstYQOXTJMcbvFY6Tht OR/14cTYtKq2QsKy5HDaYI1EtZjizDlsupseK+GkRIcbDntrZJ3O1ctDmxUlW5jLd++/oCZ6 v7v7e/vwfnv/bRYXPHx7R/fc1FrNuRlaL8RNy5kuN/DdSh6IjB+kVjmzwUbWC8tgIUHM17w0 lx8H7qI/+sKALvnw9Pjbh68vD29P292H/2kqJjmKFWeGf/gpURZCX7XXSgf7O29EmcNq8pbf +P6M1xROYy6c+n1CLfn2F5QclKGwLa/WMGUchRT28uNZT8w0iIA73gLE4N27QfF2Za3lhtK/ sD+sXHNtQMywHlHcssaq5DCsQDRB4y5uRU1T5kA5o0nlbagnQsrN7VSNif7L23MgHOYajIqY ajKytBYOK6yV0m9uj1FhiMfJ58SIQKpYU8IZVcaiCF2++9fzy/P238H2mWtWkw2bjVmLOiNa BW0AUi+vGt4E5z0sxcqZLcNF8AIEJ0TpTcssmLEl0XSxZFUe6pnGcNC4wWluACQke+WOqCNg t6ASEna6FHSTzZZpodWc9+cEztVs9/bb7p/dfvt1OCcHiwTHzqkDwlgBySzV9ZiC6hQ0G3LQ 1bJlKPFYkivJwOISZaDCQbHC7DfhSgd0p4OIZUYWQC0Z6Fq7BEOTR8rW1EwbHg8xQ0RiVAN1 /MLlKlXPIUus9ELKGixojga0ZGiXNllJrJ9TXevRvh2sMLbnkdlRYjvXiuUZdHScDQBNy/Jf G5JPKlT7uQcsTi7s49ft644SDSuyVasqDnsfNFWpdnmLelKqKtwoKARTLVQuqFPmawl/Gg51 XCnBvQTzBgbCuKXTph8qwIAP9m7352wPY57dPT/Mdvu7/W52d3//8va8f3z+PRm8gx5ZpprK epmIxMrty0Am9cbc5HgsMg7HHVgpm2CZWSEEDHYPizymcpXCjh3pJm3KTU9nzcwQ2wCHuAVa 2Ap8gjGE9aYGZBJmN0CsQvBiQzD4shx2NOm2dfic6hw0DG/nSlFjcDYbkHN1FgAaseo8h3Aj Vr3GhVUmLS42VoACEoW9PP05LMftBVwe0g8mvpIirXuAJ07PNuAteTABMDb3J4jCe3PUD8DQ VIj1AfG1RdmYQNVmC62aOth9h1SdVIUOGBiLLFAy83LV1UxBFkXx3+01AHk+Z26ggy3yNDcN UoY7hlrkhljgjlrAdt+68ab1OqBLN12DSbPmWLc5X4uMH+OARtLzMBo7eK/HO0lMw8Cw5Nmq VuDyokKx4PGSbIgnwFLAOafhgxMBRHauvymIUSCarzXPQL/Se4HO1IY6LyUqjLWDrToPfXr4 ZhIa9hYnAJ067wHl0Hru8RrddT4CbQMlxJKOUSXtJpBsWN/s4OqgEXauIKWTegjVn68KkLKo VB66H/5civw0CGr4iqBvMl47565XR2GdOjP1Srd1ySyGL4JTVhfDh1eY4bxcX8RoJcBMAZId HQcDx0Ci9u4sOT1L3KnU0ndzGJWv4MtspBmXtJ5vwMWH8rlRZQN6F6YC54bC7T3rHLwrJ29W rENkq+EsrNJv1JehxxXp6GR5aUOJvRUNuSwFDDiIIPBaRasjFhUri0DondUPCxyycQVDf3Vx bCOW3ns9sDNBOxwsXwvD+5bow4+C4DyPIie6qjPRXjVCr0zYH3Q/Z1oDoiWbdEGPnFPteYEe onVJCA8G065lHylwuKELJtbb1y8vr1/vnu+3M/739hmAEQOIlCE0AoQ3AAqy8S4KMe7iMOa1 9JV60zahKctmfkwddyE1vZqozebUdkKj0VEs1RRbFyvSVrDoBMEOWy4dlG/BUxeFyFywiBwG YJFClAkmPOAi0D/OoITnlt9wQNdRPNVtpPJNhWHWrsQhFCfpA+3XRtbgSsx5eDwAWgJyX/EN aBZeFhiZiHSYD+KQ83BDcLFkUChwzNCGZYhlp+SOF7AuAje5qeIaCTRCGUGMB8AZMDJ43ZGT q0Hv2EZXAPAtrHQ4RdeNgIVCNAVDT93fVRqT8qXQHkkA20NX8KXgvrQFZTEidTf43Y51qdQq IWIsF76tWDSqIdw0A/uGzk3ngBI4EpDBBkAGuoPOhrhIfdKL5gvQ8FXu4+LdwresToealdT4 gM8fvIS2vIbjxpkHQQlNihvY4YFs3BhSi/z9DQ2zC+OldVSi4V7b6G7CeSPT+JhbP+pYdGFo v5WtYQUsi6wx6J220ImxX3EHztPl9PV8FG+ClqtmImIs6qz1IYY+LkjMwPAMNV8LB9+OFg8g lJs/ngaeAUQNcD9BCqFXTITdqSjwNWaEzWhK9p3WYMUUqQL9GR570BMnqsIQDO+C68T6+63E wDtYnUAApMqbEs4w6hpQfIhlRvtvPAUOjZLjJMQ4LZQ0ENM+x9ui6k13nsHtC2qCq1iB9oO1 umY6DwgKXF5AM12e4eOIwFxurjfbi0yt3/92t9s+zP70Fvyv15cvj08+jHHYF2Tr4qLEVhyW wbH1piVCmW4yvaLyimzJcT8CxG8B8gJGC9WoA3QGYcDlaYBr/J5QmLnbLRc3KEGFhv7rPPau y3nOipDqnZ+5WZCFUcx08JQsX4A/HEULeyJsm7I2teARWyZzl7tyZzdCaW7167vX/SOmZWf2 n7+2IXpCbOE8EcCOrMp4qO0BAVQDxyShzRrJKjZN59yom2myyMw0keXFEWqtrsEJ4hGyS3m0 MJm4oaRN3ESzO7SgTDEQaKAtQf6/x2OZFjRPL2Qso5ZXmlwZemQYwMuFWTnzQfYqwce+aU0z P9YxeF0wNuNycmQ/DTQC6oB/p7Myl99ZBLM4vgTgh+ipbTBN9Z3WV0zLiW3oXZNCTDS+MeuL z99pPzhVYy6fh1Azc//HFnOBoVMilI+xVEpFIY2+PAc1jC2TvfZMWXF1JG/UNZ2UdnUv3z2/ vPx1CK7UoMVkbQ94JzxRpjoN0G7l8rugKmuAwk1FhBEP+VZmFQJALYNUik/Wu8pw8tR1FcID bGyKdoDhLkeVOzaXmRhYpilpZX1NVx2VD2FCryVfX+63u93L62wPWtKF5L9s7/Zvr6HGvEVz Gd12iFLaeKQKzgBech+GS0iYWenp6PwkdFk7DR7KDBbPwQ5LOlC3AHNcCLMkiViX31iw33j3 gIh4BHz+Hk1Zm2RITA5Vu/hnENFDXSnnIhFyVzaZ4uquAghQQdGRdFIPQgUrpDGp7kB8bM16 FLABtL0WBnDdouFhbgiWj61FHBjry4548geWg3jR68kpJbNay8MwBt20ll0YoqDbKl0VX/H4 mI6kdlLWJPBfKZfSSMJH8vzzBW08Ph0hWJNN0qS8oWkXUw0CprSikUJQdvFAjOSqL6ZDdj2V DuzK1cQ4Vj9PlH+myzPdGEXrbeniDXzClshrUWECOZsYSEf+SEfaJS/ZRLsLrnK+uDk9Qm3L ie3JNmB9RbwJA3UtWPaxpePvjjixdhg5mqiFRmNSU3Ww/oh+0hhj7+5q+TzYp5ClPJ2mddcE AR2jKxSrOLQdNbgbPr9iGhmTQfLjgs6PvjhPi9U6UeeAxmQjXRivANBYbuJBOQWR2VKayHvt crTotfKSk3labBFMsZ9W4M11xW5jo8uVPQXUOcEOZ4c1ekxwDq/klpFtNTKLypc1t2kU0JVx CQ665eCaBSuZh6EVcy1UdAFNKCmbdsnLOmytctfnAufWGw0j7diSSFpfDWCIDC/05LUqQd0y vYk3xhGPVHNKOhYCF4nBgFYiRUL1hdEp0FwrzIlg/mmu1YpXTodjiGLCKKGgZdRcXO8cPPVN u5bh5druK2ri9CK5pTuk3BWcpzl9QUp8Xk10rDkOuxA3UToZICMIN5xioigV5oEQCe1QjJEI pxaKKCbqFsTo5HDWjQgaqRRey0gMY1d0TmOEjnpxTlngtTR1CcjlY5Rr6kvP6BZ78ilt0xcw w6Iw3F6efMtO/L9wSjVLY3j1cgPAPM91a32kPKEXcAphCi2vGHGj1EHPabJTRf01MQnrH2yV KFHOyh6y4VWihl8eRnu0bj8oyaomSXMcRuRpVDbOV45ba52Z8PUCbD4059MQafiYyySyExV3 jbL0/iq4yBnTOVG9m65Adzv1P13THTYDGS6Ua57y1Z2E1NYNwem+86h7v1c9G2J1240iTlNl U0EIsdAsDkAckaLe+8FlXoShtDnoPVIHeQQLODTMNKBqHwffVya6o+s9WhfU9LfAcn15fvLL RaCYiHAsZStLzioHDAIT5jy4wNNnk+7KgRZGorAQOmbm8nCJ57ZWKhDr23kT5Xhvjc9CEj30 8Ux3W7nPJ0353bAwXOs4B+BuVkQ+GKZvHAWTQKup0CGYU9xRc3ASqRPmfLH1KGDvNBBKr7cw k6bJYSrwYBXeUda6qScE0dsMwGdrjLheX16cR7hx2YGICSm2OrydBF+tYbAm4pZPlvdHp5O0 QVslbE7CMMmAy9Uzn8aKOFW0gChNW2NAxcldJAiOwQf5J5bB+O2PltHjVwCedJRr6B9DXsYm KWafsaE86dv29OQk0ky37dmnE9oC3rYfTyZJ0M4J2cPl6WC3PDRbarzRGJx8zDjHCkggaAI9 rdH6ncbGT3PEVLYzUsPFnj5x4sL9E2vrnmG4BgzRocuvQYdnUX9LZeuycbg3CN2D8ka/W4bk aCW9+x9SKe3i7xCsc6NiheRDj9ALZfbAhIpi05a5DS7i+CDWy3+3r7Ovd893v2+/bp/3LozF slrMXv7CDMAuTMd0yR0KfUTAqJaT2hFIqg6UFXxHGV34PqRr3M3nKOZzfeVj+EGuvjthdFdJ U4CPwuRAmFvGrx78OkkxozyOT5q5xyc+wYZV6vDxkSvpLlv4cbrnUWb8wMtxujVaxBetIoLz P+lsgesbcG1hfE/TXJqvW7UGGyByfnj+M83Os956UTkQ5GDpjOfMAojbpKWNtXEaCArXMAiV lBUs5crjODIWOZdYc9j/6DpGvwze/RXRg4OYmJSLWqa7Hx/b8VL7PthiAbqdgXWbXkO75Foy OgniZ9MYq+CQmJwSXD9AdxnSy+Jh/ygBGo81E3hJaOoJJRyLxOf2Q1LgvopqVN6vilCxS+pl fZ5uxjJOCQ5zldwuVT4a7HyhaS+yk928wacNS0DMLsGkqpKGDo4d/kfNejitrOajqy99eXd3 I24RCaRqEXj1EwQhQsLGGdb+uv6seN3+5237fP/PbHd/9xTd0O/FOQ6SOAFfqDXxwuBARo1C Z596jh4KY0N4ywTftNJgm66C6sSwNSe7DzlRO7l7w///8ShAjTCaibvaVA2gIchzFzmPTSGZ 7cTChpOj6IcpTdD78U/u2zDYUBK+pJIwe3h9/DvKAQKbn3sSDvJArk7e2bqDnGV9rZjQK8zj FPgbgT7XJC5Ppa7bFXUzOOb4ORnNQOhN60TTdKi8zx15IeeVATi9Fpa6L+6CvzcOjUiVx8MA gMJzMMA+SKlFpb5Hb0fAMOYT5PO2mMeExsTN9tznVmSs8rrIkptj5Z5t0YFvHwesFrqZcn2Q uoRDEnfLBwE/pCl3f9y9bh8COEfOILpmEpPcG2hMMINn7byzULLFw9M2VmuxEe5L3PEowSnn eoIoeRXbXYRbCL/NwJeppi5Jt9Mfk65vN7r5266f9OxfYBNn2/39T/8O7rJkkYyi1Vwo9Dvp MLAjS+k/j7DkQtMheE9mVYCTsAh7jEt8C3FZ33HCeUDIQWFWzc9OSu7vZUckjhg0CqxgIYt+ KQEKAALqbMQDK/wrj59zOQqcQXqy+JScpyssDZ08crOZchkyBAIuGNL74PEzYwd4vAvbW3Yb v3lEjuiRGhYIl36JhlBr0tojhZkwHoxF/aVM70eBgP3xstvP7l+e968vT0/gVY10fPfLB92t 1iH6YuhgucnQsaQAYimCC1IVt58+nZyGLS64IuE76NdqHs4CQ5Hht8wEixcFS0DbMDj/gnxC BS14merW4f393evD7LfXx4ffw4sQG8wZhU27gladEW16EjhuKnhq5gutGLcBTl5rm4nrMV21 cU6in2F+8fPZL0M34vPZyS9n6Rph+ucQBR6iGB02xs2n+taw0fnE4wunYzemiO7yuyXk37b3 b/u735627kdVZu5hw343+zDjX9+e7hI1PhdVIS3eBA1iDb7MZFrUoyfWqrEjTrJQChPNFvO0 eEt5EmH7Gz5CRdHIWmaOEslrLy3Vdv/fl9c/ERAR4QbAYStOqVK8bza0h1+gNFnkCUEn+GyA TkJVnIbQUI6/voDxL8k0lanCZmsLdrBk4EgXm2hWrm693Dj/CqRF1snDW+Dxl6BpF8ZSmtTY 8CopOIGjK8Q4ptxEZ2tdsqr9fHJ2Sl8Jy/wWRN+tSyOG96/KaPfhk8YqgowxMsvKKKuAN1NZ DdYbCfSJOPtE33xhNfXgpV4qP41hJJxznPQn6gcUcIqmi606Ibt6275tQfI+dDfyIv+s426z +VW0xa5waeepqLniwpCvvzsy2BY1bsu9tiP60KEf3ReCtqA6NvHNvxHd8is6FnFgmBdHBr4g x5IbPCLUcOAvp29tHOpq6pbWYUmuuqUa1cuWakU5gT39qrgiq2EC8Ui14sqzUHW/s7TL5bGV qwWn2gStoOl3SIeKpYvreGX4dLfbPX55vO9/KCvgzUqTdgBFGM8W9G2GnsNmAjxZ+ppPz1Nc T4wQic3H6IdRuqIjb5U7hiN6FVm0WdfUjLCcckkPYy3Dn+joSw8vyccrVNPDDNubUNOVu6CC D+OPjIeFAB4LGabeVCmykUQgBV9HTHaGDFJgDm+iQ2SomKUadj9UcLRlI0iLfiCv5jwXZNvr 5I5ZQvbPj0crK8j8weG4iSJQknkW6bu8widaRuGvDRFtzMGAMvcyIaw0lLYVpZ4Duox/XySg JE/L1gZ/cST0J9bShSfXgJYJKsyuFNVqBFJkXZKvEcPLKDq8DqML90sc4XWIm5BuXNa/+1kA FuPtrtghGB2D0jGHxzeJ2tf4axNm08ZPmOdXZcyGZ6f71akY5s32290+eeGzZFKzKYyckQIm dM76lsVrzvDp0P7l/uUp9LR0yaIf2okQj9AYYI2gA7TpXhdELsLQxSh64ip0vwKHl7RL83+M XVlz27iy/it6TKpOzmhfbtU8UCAlIeYWgpLovLA8tjJRHcdO2fKZzPn1Fw2AJBpsyPOQRd2N hVgbje4PAQL7kVzlvF0UvWJ651xdzNO3FzDUfPr5/HIZPJz+e74/WSdIJSN40ee0WZflrZzN rd0nfH76U54eXt9+Qo52m4dZusVXQIq7oXLv5q9ggEBH9MeRp+ssVTB2XQuYAxcmigSQkRjD VHmaxYRDLBpKp9HywFP8Gi1Oa4ivjkJasMZ2PkUIaXuP5DUBx3RWnYuHtjY9vp0uz8+X71ea UKbaMb4uhW+8a4F9QCLbaGZYxlYARpPjhPVo8T7Ch/tGFrJ3qYcd44iWFIfYaSog1W7VO/YR YsYte9OGr+sCguLsbI4ckO8E3eRHngS0RlJsbjgJdQDLzSrHy88qV05ErrK9yvvXZSzgpPq2 QScf+VOu3Ftekh5lwE2xKdGQIDiA3noN39PRwEb9AQSxC2PWrad3L4PN+fQICAc/frw9GeVw 8EGKfjQjEM9emYXuIU+BScTh6Op+htQOPAk2Ye4KS1LNx+QZSHLzdDad4o9SJEhCkZPIaQLl yGkizFG5LeNK6Z1ML19Rjkfy34CmmurhVilV/zmlUSJXh0CVg4ynwmKyORbpzKmUJuImi4/l Pk3x8SUERDbYnXqrfKiXpxDvLApI8nxvyIOsb4zZa/wL7WFNWhUOZZJv0HRvaHUCbs6kcSNI wwBCipHRsdBlyfVeq1UKUItIvjkqy6RttWjT8NQEDne8qJL7eythoQm1+eiA/NaLvK0RKSA3 +DiGSGjamhODGgRWD8pu5jj9hAWndVrDjg4FXkjFrbCimsicW9i7fG/isChd05YCq7oDg1hE W2TN07/x+DM0YbvTtLSkT0wSe21ucrTN9WAjVxi0IUCYbVD/RimLXBwkFdidtEphePp29/ao TfHnP9+e314HP04/nl/+HkgF627wev7f6f+sOysoDLzAkvWt3O47v76WAXBDYEXegotyt3k0 bAGOdiotrcTacl1WlP6NcuT4/h/xAsrkpnxMwSEtgfj2ZXcL1u0HjWQm1wsMtgAOLh0uTndC Kal5F9pxGbZPVbYBa2xZohg7SQQva4PH2RG1+yrJMnAhiAYOvQiLpaOZu7yOjkaT/I20f/k7 Ce0hKAluBup+yMnEHD0RDRxz+ujRlpOYBsjAzl8+ghSmaM2h2LKLtyyxV7iT9J1aJ6avca5K bT3xeg0/qJbLxYqywTQSo/HS2t/zNEc/zFKWyO6So7+7L+qf3aQw9s0zwAZIHzVYB+k+juEH rU4boQ3tbiLrzUP60qhJCdeYQkidoeT5ZFzR2qkCVMi/wP2YkKfuqxmGAVvNaZfYRmSfeKyn jQCT+4p2ELoqFmdZ3t/9i3U4eDi/wu3Sw+CP0/3d2+tpoCb/RgyeXwbqbkQneTzdX04P6ADT tPqabtGGn4nrfFHRPiANvwjoFmBhkSV1flOy8ECXAAhXMCfrqKRDnPXR4N0hs7v+AYW4MhZU Cx2SvuqVnF/v+4sx+LpkhQC08El8GI5t/7lwNp5VdZjbSFEWEe/DNgNtxlL5SG7NctaZItZJ HQjy7n4XpOjCDlAZeMasyV3yTeIgfinSoqrQPTRnYjUZi+lwRJQjd/I4ExDZDj5ToJ90ue2k RhDbjqJ5KFbL4TiwsWi4iMer4XCCSlS0MXVr3jR0KUVms6H1fYax3o0WSw99gVy1G46q1mpI j4VdwuaTGX1pForRfEldfZcc1ojFbITM68a8uAalkgxoWCf5cGkdFvRv9+xiqL5DSa5CwvbU ZdterCHmsgQTrQhWU7uZYAOXvVdHLJ/Umobayjeb8yD1AIWwMWwo/YvxSC5UiWXRagaSosu5 P7aGaEec2bUx5H4QCuZLDWu+XMx62a0mrJoT1KqaWmS2XoyGzfzovkpRvWFDHVfOSyHPCxC7 0u6T5enX3euAP71eXt5+KHxD49d1ebl7elU2w8fz0wnW9vvzT/ivDQdd2/qYveCYEaKKCB4v p5e7wSbfBoNv55cff8n8Bw/Pfz09Pt89DPQLBvZuEMBNdgBnuJwyjJgIFPu03ZLqJKKoZWWR LZN6a+19upweB1IxVGqtPqu2tlHGNwT5IDfBPrXLaAc+Oz4mA08Wohiv/PPPFhNEXO4up0HS BVZ8YJlIProHb6hfm103StnOYxGv4l60CmKaRwQCzxQHkSiibq40rpntYq5/aC3t8XQn9YTX 02kQPt+rAagMTr+dH07w59+XXxfwUxl8Pz3+/O389O158Pw0AO1KmUFtM3UY1ZU80amoTlQW eE3w1MbJA6Lc0AlVULEEQqYHyjZ0f9fOJUhH9TSQVQCjzsutIhfFNzaUv50OY7XaDIDJW2cA 6VYUmQdE1Eoga0mdEy0JrCirVgSERblb24DDKvJD63jtVJJ9c//9/FNm2yyov/3x9ue38y9s OFQN1gda6GvKV/FxG801CedTamu2vgidGyy6sglsNr9b/nbWN7z2dwU7T2yf1RRQ7td7UWdF SF8nNsrsZrPOsCXdcEy79BkACj0fj/qM4iuEpnm/D51CG14Qsbk8ehCMmI9m1YQabEESLqYV ZSRoJUrOq5xKqzrpWtKy4Js4IirExGw2HpJ5Ss7kWscrgZk3KQ2C0irreTmZUyfTRuCzsv6m VPaCjcaeGMV2aHMSD67tu3I5WozJKV8ux6PJ9aTjUUWea8VyMR3R/lBtvUI2HsqRAbgGVwpp xdLo2O8zcTjaEFctmfNEg1X2W4zLHrn6WSJmq2E0n/ezLYtEaud9+oEHyzGrqFFesuWcDYfE ZNKTplkQBBO8uXvrrQXArFGsQBFw2AZKG9wMpPAvg9zV6bJAM7f51AlDFdPGrzh5OSuwqrCp qUYQ+yCVt//8a3C5+3n614CFn6Rq+bG/ngk7+GRXaFrZp2UCI0y16WlzcZsVqZw2TPuZHfVR 7SGu10xMecymJbWLKoE4227xazVAFQx8LsRtylBDlY2a++r0qoAoLdOPuAIbphm+8rn6mxgD UrMQXnrM1/IfMkFAUOG9JgP5hmsnivx69eLsqJ4Ws8+7QFfoLgps3ylunVZjLWPNlWjcUHoD YXKs5Yyr1FQgh4TKdZd7vdMlV+axqsiNpmH3GyvA99KaFjCoRq+VAs4WV/IH9speNQwBNjGh Xs8zCHTd82eNBGAHlOadmkT8PoP47e5oY4T0Sy7NjRFtcTKi+uSm4xOI6mIxeEqhu2joqqTu vsCPQz1M4LYRZ6up87FA6N9r63XoIJve33PJYZ9Qd4962cvBtpS5FQDMVznyXHLBEHyOXhdk 4WP0Asw2UGuu3IWk3kQwsENORw54vM6oEdCK6MM8kaUee853S2XhesPk5fiqwH4jdozacc18 kef2/nSXmqZc7zxKtDnq5ge11HkyFikOPmiJJG4g3sSqyWg1cudc5JyNWqI8Q2y3UahxMP3t oERhJ4zUa6EQFumtgpKF54pKeLRxNHeX6r1CuNTxTL48tmHp7j6A1euScnd8QiQ1d8eyJAYO koXepHMqSEQnwSNU077yvI7yfERrqJ2MgNtgVlIHDd2R+pUQp3dvk9mELeUUp0yF5nPdmScp 7v1oS8cg84r8RQ1LuLzpN8aXONAbindksclq9stdD6DSq8XUIacit8HfFO0YLkaryiE6zpa6 WxJ6f8iT5ZA0Liuu6weE9tUu2gkV7g6xcFcXoQ150FB3slOPfXKUELJBvHcLykSoR2aA7mFb 3j525ytQQ7UxKBNeZOMpdQIe86Iz12E66pCmNJS7MZ0AWyvc5AokhGh44OVqmGk7QhsP9zr4 63z5LuWfPsmD/ODp7nL+72lwhgdavt3dW/ZKlUWww4f2lngNmFbxWXSw0cWB9CUr7CALlZds fDaSJ2uHrLSTpnSbIXg8nrqNAB9C7EykBSjx3Cn1/HT6t4a0WaUMii346vre9drsBQlCHUXR YDRZTQcfNueX01H++dg/MkmlJwJ3va4VGkqdOV3TMsQ6pxaqlp9mwt6mAybHciZ2xv0FOx4E DBCckmwvonXp8TM3bi1Wltz27TJt01HURVj3M/qyD2IM+aT8l+1X+/oRN2Xkuc+QVXZd4u2E cB7KPMgrkg1O1T6e8rhWCB2F/A9prUrLtWmRrvLlPq0PqhXUi612WPYhsvdScynqhFOlcULe NUl9D/lT6N9yB8ExqA15OKOxZg2/CI7X2CygohMaZpashr9+9api6DiIqCmPJzVt+u0Sj4fO DaJeycBbtLtu6XlgH9RZDzWNJhXolKtorojuIXhRVp5+W31WX9mfXy8v5z/eLqeHgZAr6P33 QfBy//18Od0D1jjpq60jAqWOv1xG88pzV92TMm+Oky+rRYBpg77N+NCg7A7yC7KinjASq8yS CMIgdx9i0CQF4gUrxjsZbCN7ZkflaIItabZsXEb0SNY3WKWI8ArQpLNhROWP5Wg0qtHEyWHE TFC0sIqXThOm4w/I6hS+MMFGANo6Q8thUMbUyhogb3D4FeGftntAXNFfuZebO1YOFKVO18sl GX6u52UYpTiYSa5/1NWxVZR+xDdDavR6SkVrrlkC1nXbUT2tbEjh1La7l3ybpRMsi82qQKhF wbMDpbIoxC7jkmWn8UdOdR8EDXH9q1lw4PuEbHu58ccCTyNDqkt61WzZVKt1zMOGLk9q85Y+ HKFWZFUNj3da26W7IXQZhZE/vrARcY2klBCANEbU4d6W+Ypf0ta/6zQXgPMqFwLwd6zxaLGT V4GtX49xcx+qrXdLbnLY7D/zUuzfE9v54ugM34Erjkb2TVCEL4bUT/t+dIv0EPmz3h3p7Vny Dijyjldbal4COXLlIn+2iutE5PHp8N3W48vxjLTgfU56sZAmSRIU8oDmV4caMSkTpJl/d2vk OCs8niaOVAYji9JgoyBOfdtLGsgNhLSl2UIRPCiWeT85PfDQ46FpSWU3VDGArMbw2NfQCXJS bHmK8ALkIr2zdOTbCNzUN9y3V33pGa0IGalFu/F0X1iwGHru1aykAOtSRu+uEoWc3I5JjhCy kRiL+XA6JJeDAoIzC8/niiARex/4rSUWRRSwgi3Bnf1fsNV4OKEsFSiVbbviYmUvCfL3yL47 E/Y5RUCICwvhkivFVLXpoZo0oub+5d2PTbywBo1EqeaOVW6ZqPMbstdpWv+Z4vAI9N5duibz /MtyOEczTzPinI2WHsVWSySR8HjIaj4MBM901wIiY+AL5VZJlLxH2qcVNlaYj6Wje6yW2zso 33l+m0Qe5EgYmRGlVzOI1U3tky/f+wb4bZrlUt+5Xq0y2u0x0I6mvJMKpwCgOXGUaielHpV+ 9fjw/jJ45F9TEhjGkqlUkG9PMwfy2DYRb8LQ7s9oY9+wqJ9OwIq42TgRh2KNN+98d6vh1LTX L+cDSbkSFxrIFTQtZeVAjDyZlsvhpHLZ3cHERO61erjaPTExlEooA+dpHOP3BXYuT8ZxVbri jEt1t1fPRpXiZSTgaRScBo5YspU4E550sMDgykrtX+9iTUM2dHN+6EnDHWGPuFy4RM7yeC8w zWxBveBHBR0exL46l1JDq6xxACHL8hA6HI2Ym5VWPzwZhflyspwunc4C4nzhdGujn2DyRr1i iyVD8HDn5Tqw7Q6Kus3toawFZYsk+4qmXkmgpkURYUADxZe9t0+5XABpM5lujhuxXK1mCQnJ Fdvqfp7jH/CqIaBg2+UCWc5VeDSGyi/vPz4LtCTPI4cCaDwmjtnOPPNl2zgqoJoArS5Lei6L mNxyRLxrHR7AJ/XT6/nhNNiLdesiAmlOp4fTg3K0BE4DqxA83P28nF6oUP+jY5DUftRPClzs eIY4sg99DK6Pg8vzAHw9L98bKWLVOpLgDOasVONwRS5C0oR7QEpjevDjhgNP6ghEiqLIWe8T +dPPt4vXHYinuY13pn4qKACXttnAqxwxCjvTHLDIImOrJus3Q25QzKTmJAE8XWk4qo7719PL I8Ctt1cgr04Va2X+Jopp6HUuAnvqOlwhZ1qU1tXvo+F4el3m9vfFfIlFPme3RNHRgSSuO8Ai 3fa9OGOU4Ca6dZwqG0odhLlxIyQ5y6WXs6I45c2aKuWLXKtxTIfFGo/mlN2rlYhvdKb9tLBc XksJfDV2IqpSJQvm09GczFnyltPR8lrmeogR+cbJcjKeeBgTiiHn/GIyW5E1SUjH6I6dF6Px iEyZRsfS9zZrI5PlUQq3NlfLMOc0ouKizI7B0Y7I7Fj71NdtUl/PaUNGVy85c+nHAluRCsba dRGw89cRdZ7qRIJ8NKoqsp5ya6VMM92MtrbqTD1TJ8YESSrl6JGtlr6+DSkyGAHkvznaczu2 3O+CHBQ86iq0lWK3OY7ftfLnG3j964bOXj1Jo16Kupo/PHlYRraDolXDCGxv9vHSyj7bs92N /WpRx9vAW2wmU6Jmh0T931stIY+0+IkqTdc4iFAurSEpIdnXs9XC8z6lkmC3AemtornQHm4A GOZ44DIcIZHgt5gU9yCkxh0E/bw9C6Bpj2ag0PXq2KDd+Ma53JYEfg6modSBVNizLcWYoHnf 0UPqTNuyWbbGNyMtZ7sZ01arTqIg9TzEr7EW2/H28EBaQj7h0Aqpl9MQzlzLEjyMjgDwVxDM MgkZWSpXgOTXijwGRcGxJ0jLA3fx2Hf93dUMsPWzYv0PpCDY8R0xeN6WvA3vPvbIQ/mDaIav uyjd7eneDderq10XJBGz7WxdcftinW2LYFNRg1DM5PGQYICitfcMhSoPKO8cq0viGzkMpC6D A2/VVFHI9vQllhGANUhrgFekAAi4p2Hv7l4eVIQg/y0buI7ZEcI6JTARHAn1s+bL4XTsEuXf 7s2cZrByOWaLEW1j1iJSGfftyEaAwb5GHccUO+ZrvYE6yRyfBcQzd8po4zWFiXGiowKc7GT7 1NeqEeRrlN3eaT0YjxhQoqHUqZB6MUGPpwQxSvaj4c2I4GySpRpf+vz3/e7l7h4OnL1Ydnno tT/vQI89AGxeLeu8vPU8da2fYfLy9bbq81/rDofZ14y+lqm3Ah0jlbukAUCmjJWKLRC8mTwE Oa+BSsqNA92gwxdOL+e7x767iPkKhYKCVhPDWI5nQ3esGLIsS+pSLCjhAXQdJ3ytoVSSPCXN DpYE0w5KZEV6gTB2zqSVG+Us6EzTQmGgWW9U2twC3i9PolaELJx6iZAU3AiPVd3+SNoVCVWq HC+XZDyCXRbszTf0N8OW5XpyW+zEF4uhZQCahnB/1Khwz0+fIA9JUSNOWY36oVA6I3nAm6AL aESvenTohJiXEVHvhtUMIH/jYG88i2iNPTf3zyRGhWEKxlLbCovIVzIVbDTnYkEHlmgROfTW UREGZHqzyH8ug60HxA8LYszFPg+aXT3X2ZsJttA62IcFPAM0Gs3G1huJfUnfVOabal7NqWUF sB+uf0oFhtFKblTN17hZYIH3R0NQULMANsN/khQWD91ko14eBemGaphyIajj3PMNHfOfjOY0 qgJ4gpBvOctirBh7hd7POInS+utoYqFPtCFB2DBdqDMAaZpGRrrdgRkfW7Q7a69Pf3XgjTyp saVhjBMqeh5A6IlCDPMl1e651JPbio2j0gypVgB0TQQlZVHQgoJvnOyOAMkd2sc/XU8A8s42 lvTuaJ7+tItvifpxPJ4l5FVrJ9Z48xA5BAmlsnf8baSxD4ikvstPWwJ6jbSQFwH6pGKymtPm A7A/cMdHsxu4WXqLPftNwL2CELv3K39w7aFgru3tHrzpAUV7im5IO+p0iAcBhRBrmMnReZQu Z8vFZP7LZ3MAxGJ8fSX19m4eNLkGlaZHB/H7eGZFJu1yz9lJTomtfqZYjRVSpmTyD/k0khw2 DD/8LYt2jzhyLY1v13vR6wYw2fTvM7A1Rb8fOe5eKKRmkWQrmyI8Jm5NmTEzT8yibgEqvMEY Ue6TwNUXiPq+++3xcv75ePolxwjUln0//ySrLFfxtTaIy7zjOErtl01Mpk0HoqoAPWfBajal fSSxzK/rMjxlZUHi1xgJ54oTyGH0flKDEYpfqiLsaaohYnh5rOwTc9YhncumbM/cgGjTNamZ nwOZs6T7X6FC36DQIyYzT+0Vdz5xa9QDnFDkJFzM6Pg3wwbHaU9BfGmH9isKCjLXlMRpG4Bk mGKSeU6PJNZiurLRsVQ3AIzBauZ+jCTPSaQKw1zNK5zPwQ4hM4RcOUNpUCWIkvJ0gWBJf51V E/zv18vpx+APwO7USQcffshuffx7cPrxx+kBLoF/M1KfpNYPICgf8dxicEuPVz89cgXfpira FCvjDrPvpuUK2PFRDm8d3MojM4+xQLQdD51ujJLo/xm7tua2cWT9V/S0NVO7U+Gd4MM+UKRk cUxKjEBdkheV1tZMVOtYKduZzZxff9AASOLSoPOQitVfE3c0GkCje2/0GDbf7xdNi7q44DKO XxYZw6PIHTVoj7lFsOuyvQ+P5mhpjOcKQBUar32//oOtj89sB8Z4PohJeZZX9Lbb/kB1EKql 3vvVrOHkzFH7Lof7JH4pzrPevH0RYlfmqwwhY3yIi6iT7TpaRJ074cb8vC1qYx0eiNIfmlMU iIfKzvdqIwvIvndYjMWxL7weWY+27rCCgDU57cZImeAXrzm/Qj+NrxaVG2wtWbHdwjUogI/C NYWwwHVkb9noUBk3m+nL9SedPD640OrWTzqDfjDDW0pqU5VwlOMoDzDotm6MqAsRoNRN6p3q utWpfOukWmv1RKRPNmzgVWvUsAoCWB9zzeHRSMNqxfbyhAltD93yQTButorW1RJ8+q7Mb49g t+zsQ3t6K+DnT+uPTXu6+yiqNwyg3qGtHEmqftzyIaHtzHgB60USHNWjGM1r9orqPzS1TRzF 00pZ8AfXcpz8dAVngWMhIAFQ5fpv25baylnbatY77Kc9i8Zj1q4FDnvDwGgyezSHE+sVeLhx b0QjV6C6FCEIbcR2oTxicsAOhfgTfNuf324vts7UtayIt4f/IgVktfJjQk69rj6e87YkTCLP aaypfwmjDtugC91xKOb12ejBkU+zzYPv2F/KEb303z4CyoE0yEm3liqRU07DNAj0PDhdf8bc k2llRo+xWHoFYCJTtn/abj/tK9UnVY8ZD2WGVLebY6d78RrKtFtvK7pwGQnwC6gDnMKI0/K8 5oNEk1YoYfS8L4mbpSEPOZfuhU+mBA535cMlo0vM/eoA88S4ax+kEhy0zOQ5lVvreOMOTDi7 /3r+9o0pijw3RAPlX4KXOC7zXRmKZc6sb1OqcUVFSx1yPZ64Wt6pN/uCb4s0a6VuBDil/rQ+ 8k62MmKtVjhMizje0Qh/zMjR/ZHEsZGXkP5WRp9tfa9lkuM32dpwGzrZ4r4XncBKNiKYVjCw QNzYk58YZZII+9gq1zL18YsJ0ZQdSY20qNW6jBL6vl3lA/WTIiJWvWGrwut6+fHt/PyoCS4x TkyDPZVqOqSWGHpNpYxyDxv7qhcHlar78BfGd3AoEJr8koryL0mcmvz06Mee3VJdWxUB8e23 482y/ImmCszK5dvqMxNXBvX3fP351KkOPjlZbJMM4raIu5iE9nxxWryJigy3HxM8LU3iADVJ HHGSYK3EgMzHFDaO74q5H/GOHlx9TredOGEwaj7vyNHsNulqWHckIwYMW3Y22EotB8HK+mJb FmHg4y+QRBNv4NFFjURaAz3RqpElmP0Ee+OrTAWzxk0RhkR34yNKX9GN7vVvKMXtBZ/FRuMU bRBSD+vpg1KIgw+XCX23+b/97yqPqixVmHGKrRe3Wd1oQ2TEShpEBPefrjL5B1yFH3nMBVct H306/6W7vGXfid0sPMPHVqyBgQoTAJMM5faIUScVgkcnpTNykMaMOtrUk0scRQhCZxHQh4g6 x8TH4alAXRioXGni4cVK9QGqQ+8Viyy8CEl2/jFI9RdYcOkDwVFadRutUm2neS08bHJGfe0V mbwsIDAoG1XY7pXNS5IFsUhnzBji4Zg0mYjVVipdbyoNwVpKYwiwT+kc9WktUWhG3QerDljh BPr88swLcTss2GrewSzNM7ZgTpWZM2Cpszb1Uw93G62z6BGJZc5s/Y69JMSmUc/Ce81TDrt7 oG5JGqQ2XddVlWT8KE4RfhDXaZKFWPlY20Z+jC8jGk+GtYDKEcRI1gCk6lWyAsQk87Ai0WYe RulkifgS7k0WSaoHKdand/nubnGquyLIoqmRvO1iL0Q6Zttlkaqwi5nNXXqixHGPO053BXVc IJos8GenWXKoHLw2sTMP+S2+b1b4JjYyNttwuz3Bn+/RGMMH7aU4/3na64qRIMpDW+OltLA4 Ei7ckK3OECBlXnW7u90Wcylk8WjzY0DLNPQxRUhhiHzV2aBKJxi98T3VObsOxC4gwUsHEGYt rHGEvuPjLEAF28jRpUcfDz3DoNB/7+PI/XGE3slpHEmANQYDUiRKjgCw5qNFmmANfk/A7Q5C 9z0cWOaNH6+GldSuFryroA2mm4yFmRtmb5LeHVu0k0qaTEYTgkg+Af4lPMKmrvNlyVTF92z/ gl21DJVmG3svXmI58D1/sMTPZUemOExj9LKk52Abf/2sr0fu6tgnDgO8gSPwdGvaAWJ6DXrT MOLI+BKHGfnaRlbVKvFDpO+qeZMv0CIwpEXdCw0MLDNDFI49E2MDBW6v8NGpn7H01N+LCKkl G8JbPwjQyVlX60Xu8Eo08PClE48PoPGgS7TCwXQPdPACFPiYeYDGESB140AUO1NF31bqHGiR QL/CDQlUjsRLEBnEET9zAAlx5ZfhapDCkiRh9j5PhBskKhxYQDIOZMig4la6aYYOH7ZZD9n6 Nl2mxXoZ+POmcLp7GqV6ob9FHDqqSTCdeoSxNYJRQ5SKdBmjIjVnVGRNrxuCT6WGhNNzpCHv TKKGpJPVzNBqZti8aDK08kxpDBH9hQMRsmwKAJ1fwiLO9SRm5ImC6XG97gpx+lHRboP6rO4Z i47NHqRaAKRYtzKA7WuR5gEg85CG4CewmSYS2sa4/rdreWhgFZkoOl11PtqIDAimpAzDC1RA SZOiyXKVzcJPw6khtWgKP/KQJmVA4Huoksyg5BDgjrD7wjW0iNIGGU89go1Zgc1DTAgxrSFO INYCj0XqwAPXh2GC5dYkmPRmQsgPSElwdZ76no9+RFMS4F+kJMU2AKwVCaaoVus88JDFA+i4 dOyKdGrP0q2aAhP4XdP6XoAmCMiUwGUMkYeUHehYnfZVDkG/pSpj5cfghCRT6tu+8wMfnQf7 jgTh9AJ0IGFKfDSIgsKhxyxQgcAFIPOG09GZLhCQE44rcoWxTkmsx8bWwWSNGhmNPGwqrFAt XmCLlbaJx4wHzeEKZr7uvVB37/no/pALdv1ZuiQ5tYEeV2N997TDtuLvTCEumG430nNIY/7T 3QYiFS3a06FyRDDEvljm1VZEg58omPoBPI8UT4jfK4w8IKnrTZEb65z13U8XRaul3VwAg9HX Sbf8UuHpCrxTcMnNpjbW0cImRQLIZ+Viv9wuPk6NEXDZyp1jYeaBzRH7VFy78UIXdd5gN7yC hW6KU9kxwbqhSyt+qs7irgPjCyNPLYgE+ITpq7FdYEUsVhMJfwTXY2CcdQKpyZo/V81L7fcn PcUwtR3I680h/7TZacYMA2iZgXCJcDi/PXx5vP1pu9cZBcBm2Q3JoEMazuuTEOWRHOLaf6yQ YQ/Ql5Hb1UAQi8J4qy+5x20GlpZ8LzZRjM9VtYX7HbtppTUkgpQHhLhdx13iEwQRdiEIAHuv 8HhEkLz4uINoBodS6zkeHQl8hQCAGSHVVQMW9/I7hZoyBcZMjZ/6kIUjLdrGPit1pzpzpvPi tKy6tgjQ1l7sthusdOMMmKfQEE60yR2R4w45xHPFC1oloect6FyvdAXu5g0SqwtCGfxktrq5 H5y1+MHS/IKkOmXVIv0n7CRMRvbztOaP1opNaYSlgxCROj/fRPmhTlzv9R5JvKGW4+ycF2y5 d7czw9MgcuNMrseuQQF+FKUNj5Utw8J0nooGQj4GdVCrTK+xmCkxOknTpSMZhmYSVT8Cr8Of p+p8WrRsI4HLJENGQ6BoPHNwBOmFRK8HPKbMg35+9QYlv/3n/Hp5HMUpRHpWzS6Lqi2wWcRS cTx3Z2O83VBazeshajK9PV8fXmf0+nR9uD3P5ueH/357Oj9rQbQp6umG1SS3kpu/3M6PD7ev s9dvl4frH9eHWd7McyVAZNEolkI8CR5bgse6HdPCcIxMVZ/SnCyeziH8ErgDn7dFo8dZVXGX 3aNgMi2Mx9dkf3x/fgDPhLYP1b6Tl6WlLnAaDyuL5glwXnQki2LUhxLANExVs6KephnLNtwo oDUj33LevAtI6rkfPHCmrmGDGgLq4kEzRp5VXagurgHgPqI8fQvKPzi2gXd0+XdaDn7IrPaS r0KMD1EeioZ/4u3BDQKsQgE1DszvMJap7DmLu0u5boMdtg5gqDehbXgA1KbwQ7B4mCpsz+Nu 5VWVsL03bxNlqengaQ+tCu0kB6gsIfydE6QlhN/HXb69Vx9KSY66LXRzWSBQ3Wpt1J+hQM5q Cba6pdQK8eXiw0UiMHFTxaLZlJoXWQaYxopAI4SHc8OIsdlBnMwWWEe+ti2GpKZpQhKMqltn DHQSYYcuEiaZZ+cABkAIMcM4M2IQuyS0GHsleiQvPvPHra1Z4u2iwy7aAerNYFQVRlDgdE07 W+3pDqsIaZ1pbGp49sIi0iB29KgvGYKqG3Zw2mCqqhLviWc0klTmdSJdFEiJaBWlyREDmlh3 mDUQ3asUZ7n/RNjAwo0SRRoUn1r5/Bh79lqgfgomuYPu0DXXh5fb5eny8PYi9Qhuslv1zmLR vR+wOASSwGhr9IQwJDGbooMwjmEYs100ZXstt7So2zBzThGwnyLETLvN68YRXxVshnzPYQ0l bI7wIy0OpdaSI+gEiw0/wpkhcRTDJZtKEKph4zzQM7SsChwgiTGqtLPDEOMtncSY0HSct3aH OvLCCRWEMUCojKlxeaj9IA2RSVQ3YWxOYtxtDkeKMCYZ3rUcx1+hAGQ8z+AajmkZrxAt75IK NLWgFzRK68DhcRMaomG7bpduAaBvjKRDY8t9TrPmBKNGjnApEg59S9PAWKbqByzggWo6lSzD W2C7uIODP/S0sVmUbP847tJH1f3r5fF6nj3cXhA33OKrIm/Ab5G1xReocOl56vYuBvCr04G/ JifHNoe3NA6QlsjpgvyuUJCxlUShNxOxGPdVueBPx8YUBWkf1YFJy8u9GfFWAMKxf1OtIWhN vr7TPaoLHtja0fsFOJPFjmMFU7dbq4bHnDjfLU9aGO6BWrKtGDULw4DAEAAjvVk0G9Wd8IhA WtBSFZrevuEH2K4P8UKUe+WJHvthlKqD7bl8hq7zgZ8XEWJwS/9NlMNQhpWf1jnsW3hj24eu DR/D1qZza2ocjNDoStm2EOdJiy2+3nEcnCSh/m74SONdbEwsMafO33j8R2taiV6nm3qTGLaD cjwcEoKWRsCfN1skZoCW54fz8/np9ues27tyr/bd3s4ZqKe8ptiGWw76ef+pRl4tjtUOHCc1 WpwbDdxsq405oE/NcW4Xo+xCX99COqv44cvf/3m5Puo1NZIrjv5UexbHICQEs6Qa8Fi7ddbI vLlsTNeqRup063KOeZ0X9/NK9b2voNr8UuhMd7yzs5x3JMJeBckhmOepr5q2aGS0Zj2mu4bT MVbEiebmXPrLKXUSX/+8vp2foD9h0yojZ2g6NAiEfJ/id6cAzndlH3ZZLeQIvfNdpQsmSc73 BjkoAnks1JpuDzB84oU+sLf1rttguguXfw2rbWzm0HaYPYlAVK0PYhdRM9Iyl7gA6LTVpm31 +2qggktMXD3lpSvn26q8w9RTgGlTseobea/ZTrgFR7P6eI7q4SWyEnRaH+35cnEqispcl4TB BNdVRgQOU9w01QfNOEojOMJuAvavLwI+mhkffzeEMGn9alVH7B+FtLo8zpqm+ECZBtT7oNE3 jA09Acg+x1x7CdVpWDb/1undIo/T+GiSYdOtehAV/nMkbVz6Bl70idsIJ1YGbCmv+F92erxI 6LtJmSCTDqmXrOyqLBOimiNLsrqb0RCxKepbu7v8OL+yrfnr28v3r9zjBeDkx2zZSL1h9gvt ZvzS4dfe+8TYRX0Y9tkvQ2z2X1XZpPQ3REYuO0NWSKIZ12ZcfyL1VEZqAXtMS1KlCiqbo8RB Pu33un5yfn64Pj2dX/4efVi9fX9m//+Ldcvz6w3+uAYP/5r98XJ7frs8P77+qo7MfksxZyOT e1GjTM0t8Ksrrlts5bZPhjh6uD3yvB4v/V8y1xmE3LlxP0lfLk/f2H/gPmvwmpJ/f7zelK++ vdweLq/Dh1+vP/Sg37Ix8512xCnJZZ5GoaXyM3JGIkwzW0D8lxg7vVEY1FfiUsuhbRh5Frmg YehhigKNw2hCIWFwHQY5Ur56HwZeXhVBiN1aCaZdmbNV2qo021lq9qAjNcwsUdsGKW1aa8yC a0qmcyxPAuP9tS3p0FuWDpznifA/wFn318fLTWU2qse2YqlPMGk0aDu+VVZGjK05wYhJYrff PfV8h+Wt7MiaJPs0SaZ4+HxDlRMVR+Z7G/vREelUANC3mQOeep49iA8B8Szdrjtk2ktKhWo1 0r49huIJhNI7MMfO2hREOjX1U6t+XF+OjNQuzxNpqKapCplYg5SPixSZrwJwzyTAwyjEPwwz 90jL7wlBunBFSTD6RSjOXy8vZynWFHesRl6bfZDE2Au1HmbrpSU6gIrVeE+TxHFCJkdwl+09 9JGGbOKtF3ptEQ61WD6dX78opVd67/qVCd+/LrCgDjJaFzVtycoe+tY2QgBkWJ+5UP8gUn24 sWSZRIf75D5Ve4olaRyskKOA6+vD5Qku8W/galNfP8zOSkN7KjRxIN5tyNgAYkn6DsYIrDyv t4fTg+hWsWj2DaIAfX9bZqGj3lk1Ry+N1N5TQNZDjYebiutMmksNHevEi0Yc89VzbR3be/oj XAWFYRo5Xi6oXLHjLY3KI1/T4AmkaYC+CFN5Mm1K6FAaudLe/h5H63caFkShdkzM1Zz+iE4M xe+vb7ev1/+7wC5VqEy2YsS/ALeULeq6W2Vi6gYJMjxPAarS1AB9huoXZTqeEfR9jMbFdXJ3 Ihx+L5GGVp7nTKPpAg915m8yJY5m4Fg4kXyQ4B5uDTYf9ayhMkHgQccAOB2LwFNfLOhYrLm4 0LHIiTXHmn0YU2fdOJ6isdVUtiKKKPHcTZQfAz/BlkJ7QPmOKi4LTwuQZGGBK3eOoreQdubO RBaRK2K9nhXTM9B7PbU1CNnShCVnXSrIouzyzPMcVaVV4KuuHFSs6jI/dMzWLREOdl3dHHr+ dvne6Gz80meNyfV3VRq9XmZw7rbs92r9wsQveV7fmNp2fnmc/fJ6fmPL4/Xt8uu4rdM3sLSb eyRT1GhJTMSzbO3kh3Z7L/NwB94ST5gq/AOpFD+AIqSkoXgyhRX2gYfB/eeM7bKZQvAGQVOc xS63x3uzeL14LIISs9rhJaxgVvT5M8pv9GcaiSmzkXabOBDVMJ68jl2oj2ggfq5ZY4bYrfeI mj0Qr3xtZ9m3f6D6b+v7ysP7KsgwPVPpKTv5zE4JliTP8W6zb3YPv9TvPxcviBXifkH9Y2a0 XT+lSj18+wiJbjC/4ukfrVLvchjCzlKLtFyFFmiKdbjZaGxEHe3cKVs5XAfWbBJYFWzmJMlV /4Jjy6a+Ol672S8/Mz9oyxQBe1AAFb/ylxUEx03uNmGoNbj5SA2dR9nbY6lXqk6ilPjY3GVi DtMZ+PnxscMGOZttsStnmFZhbAyWsppD2zdzM6UewK/iJQc4tcJsQhW4tfLL7MEs6krMMuTL DF81AVwUiEBelUFWuxoApnOYWGO4DNi6tEWokb8wyNuuDkho5SrIzmxBxNp1o74XnJa27z0Y 04WU/fpo1r4HgUGcM0q0aOBj7WxKaCEY02Er2lGW/fr28vZllrMN3fXh/Pzh/vZyOT/PunGi fSj44lR2e+eUY2M08NSDdiButrF8lmkQffUckh/1Fk0YmyK5viu7MDQTlVTrhkjS0WeiAodI 2shC4xmrT74jcRBgtFOpXyQryD7CI7oNuejHEMJlKS1/XqRlZgez2UVwSRp4w80Lz0Jf5f/x fr66cCrADDqwx668vVRSmd2en/6Wu8QPbV3rVWAEbF1j9fC8FF3yOKQcUCyK3jF1f0Yz++P2 IjQZS0MKs+On342hs56vVHtYSWvNpuU0S9ZXlElvD7f2HnCHr4sRd4k42Babk7UNzKFPyV1t VgCI9iKcd3Omcjo84UkBkSSxW5+tjkHsxXsnzrcVgedcMUGgh0aNVpvtjoa5MbdosemCwdi0 u92eXmdvcOb61+Xp9m32fPmfUxHeNc0nJlj7b+9ezt++gHmqZQmS3ymLE/sBb90MQqdda3NS g8c/lBh6tQeYFY4LiOt9VToCagFMK/zqlWOHzfbeDRtxuhRksVxWxUK1RBGG8nedejN3l0P0 I4vArZTu2h39t68EogKQHqoOfKZvMBvJUn2Hyn6cmgqiOegB1oBeskbcHSdiOQHTfUNl9CI9 UaAv5//P2JU0uY0j67/imFP3oSNEUpSoF9EHiItEiyBZBKjFF4bHU+2u6LLLUXbHjP/9Q4Ib Ekyo+uBF+SX2LQnkMkMo52yvMrxrGwxcRcWSTn1uJvBkyXHcCsClnCKZgJbicH0PXmrpq1ZI o2MMJedtiJ0RjFB8VGISKXYPDCIvvM2aSgoxJOGKa0f61db1TcxIz0BpPD+y82pYkjq7RE1q NeB2kp7axTntItZgAWPxWtKWmQNbb3ldF+y2OFFYXEOskz+ePv/9+hFMrHDfQmLFgptYVu05 Ze1MHAiDGmNIkke7+98DIqsOfOHqMDe4pDxC8glQdqarj5HS1U1a5DwvWXODUHkLhc6Jcegt a7UcGCYIpLbScBzkSXOwMztYk/d8sAICA41fDpnjA0jBB85C1zejgtuEtNGHgRFy0YaDv7J6 K84btfl3D2pZYuDhWmDCvoqPizbr8JD95DToNesDBg0Syfdvzx9/vqs/fn18thamZhyuqIks VB9y0ZaHrkh2q/WK4igUeFiH28Du1h5WfzNRQRjK8/nqrbJVsC7ps3FRptikEWNkoeDfoe6K B2/lNZ64rha7CmITq3UgvSIlH1R0z2rdJbu/ZiuO/evTfz4/Wl0HO08ty2CNY7X2pcN20tUi 2hASYvb68cvju3///ccfELnIjtCYoc/QcQvWGzJRe7XXxzwBb3RzNylaWck8uyFSgi2IFGVf VRK+oSa9bkf+GSivFEWTxhLlCEBc1TdVPbYAcq7W3r7IpVUoYI06her8mhbgnafb3yT1OqL4 xE3QJQNAlgyAq+SsatL8UHZpqeQNaqcfS0SK0tBzaZY2TZp0pvKIPmTjdm+Vr8SAPkCJWTJn YF1H6g/DMCz3VUijEgzHOK6NzAvdOtnbvy9n1J9jAMLF6yN0v95tUIY19636Korq96zqILRP VZa0Sg/kdtunjY++tkwqMecY6ZQcAHXEq2HBnZBzIe1hVD3s0c88CmxhOrtAG5uRNMvx8lmb X+cw1Ac8zlWdllZMOxh9L9HWpjgvLd9ajeiJDiOwGbdsDmaAnjNNfrYLApLTmGTEXdHXRtws zUycb0nHuIBEWKl9ICkBm3rcUGiRRqtwG9mbBWvU8q/AtIKM0KTXlh2bYCIqCRsiluYt7d3V 4LsJmT+0tHbrzOboogFF9mDQc1qgtIdDE93jPuCO4e3B5aRg8uaZT5ITyZGRAu1lKW+da5ED drB7GIhT5o69NMCLIxi2A4NkCWgTadGZA5nFMf6ABCh37KtIHux/qw0NzhKIXx1nwt5YFH4d Auvme7UbSTp2GKzCtFKHTO4YxNOtqay8gySjPk+g1KpKqgrvNmep5Abce1JJKKm1O7Lm9Dve yHEatXp4LxhYawqoSk5hvEvPpBMlxBO3QpoqqCqPMTi2RekKe5r05IOj7SPq2UMKNr6OjWWv BPKrXIcre38BUbglWwNrNFVrtKw4rjTcCvrWdj3QtLb+wZqvI2bPzn2jPpnFMU2t8Wmr7uTt VleSatd/pNMXZXqiO/RIdI9tTYWeaWV2RZwsv7SAGBdMiMGwCSPFOlut/LUvTcUoDXDhR8Eh w3fMGpHnIFw90JdiwKBW084nVXpGNDDf0IAok8pfc7uk8+HgrwOf0eptwHEnipnujE26Cfhq 0QL9feNIo75Hgs0uO6w2i2RcqKl6ykivj8BwvEaBqScwj4w1AFO2M8cQzoTI2Rhfy7zXyN88 OymG+sIp8uQXZIHMfhOIymq37nerWvNot/a6S5EmdBaCqc81WnozyunduLzNFUUOH7sW15YO WjLVevbJQOSgun8TrN6qs+aiXt0NljoKQ7LXJ/v8BbK0gTeaZrnFMWYV8klilHNW3botarqh +2TjrSj9LyWOC8mkbXRKf74cE46uO4vqQF2ViqotTd+h8LOrhFiYc2EEbpjUqspJV/gow1Lb wJt3p0CqY74gdGlhJUw46+MFL/mPlyStMalhF64kdkwEGUN9O4iuyjK4bcXoexaflpTebmQw WJ47oASvGkp0LWNHTCTg4Opbu4FucnJAS9/CdY/RXdsdm7E/UTK3zS5uQX9AdVWh9lqHbbyu hRLbusydzzlt9pWAeZCX8uSoqiU+T6QxNYbOU/RpPAU6cdi3md3eYbRhSJyVrOoigBjMbzGt 32QSe3ZJ73KkvPVWJ8/mMadG3a5XXteiiDkAsHi37cAqOrbaPpmw4ZGGFydHGayoqtpOwGXN aHmhRwX5itTP9yZnRdd6mxC5Z55aYxcFc4uz0r+6ctRtHQKP9WHT3eB0R76yVwiat/pa5pj8 ppXaDf1vWCsJswwxRyq+OB+p6VU6+NUmoq3zlWj4If19s7amB+n7CxAwRbvkdo4j1QoQDoOL ZEQ9P6/ZBVNyYV8QTHnaj3QGvk/31d5RDXAagVQnECqZiBlfDHXMY/LVT3dIZc1lUPnWw7s3 r8RGZIwmd2fD1zrjw2a+RGRVV+qEuxGF2k82eqJpB3KLSs7h49V3x2w6+hIPVnDw0p+9Pj5+ //Tx+fFdXLeT2mf88uXLy1eD9eUbvB59J5L8H56iQu+zEHW6IbpMx4tnuQMQLqBO8oyGUjI3 8FPM2qQPrY1ntkZJV96ACiWqZkViWvZacF7bzeqJVpDoqazeKZuQd6C3ksI1kSmHY4YjE5fU 1AMhYe2ik+wMzaU/Qyc+97ExJ7jJGOK0hRAq3U7zRorQG2tDMsYgM4qLZt36/5h1Hf4jVvUl sotWuxW4wLrHL063gp1SN1yoUv1o80YmRVeyNooKP1QjydeqRf88ga6q+gRkY5L+Sff5+b9P X78+vhqrk/Bd0QtH5TrvT+I7AhTw6BV2d9ivMqsPcB/s2o91I+Ctvj8/xur2pS+tmcw9lJAV NJaw1tuioAcjclp7KJTITA9Dmr7xAmr6A0IbHE0MYWB6FJzoRRxufDLPWARhQeozzhxrvwiJ hg0AvibCoE8XCRD9toF4tmSMCYNjE9IFb1cOuqMV2zuNUJjl6MxEr9fI+exg8AVrMizfwJAg n5wjNRVRgEKGjOe15BtqnilJKR6/PBfrtay65hSsAmJyjJuMA4E1TbVeCQneJnJE1jB4tju3 rzCbz+UwzOALVKHul54Fo1s4HNhCz//fsuUDYDtvs+H7uTeFWnPEQCl6sN4yAoA9miKHGzIf faA56MTK6I8zmo7V5RGyfaOZ4iALbA42IZbHjJl+4CwRtRuhl6PIm6zTzg1cu7BD+FKnmb9B cZ4wgD1R2iBdl/6ApHpNSBbQZp0GQ0h2uFAHvWD3Ti31PeCH9L6qIId/SZNj65FypszYLtre 26UMhwvEN8AMuhaNyfLWQp94A480pVzyEdNMioD5/jalKnPhUeg5LHwNFp+2/DFZSPs7gwFd T5p0rJtnIq54RSYLGbXLYFg7SrWvEiY6MajaTYaDf7tx1D5ard/cnge2+/sKuH9c0bXabYi1 DPQtIU9pOnGOatHVJ/ZJWTOI7cnsMvS7FLw3LO5s6yY3n9ym69rfF3e4smFxClFKXNfB8Ble 21mdrbvVIav8atM4+j7vSeNdEa4xMxjVj+59BcoB6Ea2Z8StAA/b+pqVHl+dhIwi0EM3HkTY Ih+ocCu3iWwzeUBYqg4D0lDNuM/o76DyZKn1fbRiSOfJHH1eNml5kNSnoGJrmHHt0/bZGJkM VybTJQXEQPj4rOuw+HgAfraGaCc4DxY3+It/InYZpTyi4RqpL2pSC5djmLZPi1NeYhroazc3 m5arXxaxbqokP6U3Ydctvun7H3LgAVeddqjKxhVOC1hS0Np2NQ5cKlXcLjX9oOriSHFIOfYd qIlZs8hEZSGrlvzu1/AttVNcWCErKjaULuLWaMVyXHAOcYAwSV7y8sjKZXVKkavJR+phA0MR j6HUTGJaVufKolWHfJhaqISR3iXvXUWMHOpHjW6tJ4QcKUCblu+LtGaJr3jspIfdetU5gsAD fjmmoBDpnAZa4YRXrbD6Un0jNRXEk7LbyqtSrWjnJOFtIXM9+ji/qpHpyZr6rISAW0XVoG3D ILurXaeSFbfyauWoFlgRJySx14Al6KQamsmg/jiX2MSjdk5XVQeWOLdmWF0w8CRc5rGw94Rc fQtimmD5ogMHjWaLWKcpaO7avBLmgdpGU6swlUNdtIvtp+G0yKgXZJOmJRPkjbjOkqsTRp1w dr4m3TVn9TrOz9T7rYaqWqSpNcLyqJY3t2lNK6T9zGZSrcXUb0N0IBaN5Tmv5GLnuuYlp2MG APohbSporZvhlqhDyLkz9REdu2Nrzd2B3utQDb9+N6xn8PE8lQh3cEdS4bsV+646xnkHKsBK 7Oq1mY1DWeELhR8g6jhwRyXRHGO0ilssluhaAA2qZJzaE73+8+f3p0/qVC8+/nw0XRyZOXb1 kVaeK6ta41cl7dHPf4DqCHZnV/hgzcEcTlzbizEC6kd3OaK4Fhx7neexK6aR9sjZO+WEwFNG JAcj7R5CNaLce9Lw4m36sJ6xvRLhYkpXRjv5xE+xkAo8jI5zxqzW8eX7DzAMAsPPZzAloGoo Erv9PakDn6FxrASXytTQmPHaTqYEu+o4dOCCG79+GLkUMuN2j/dQlak5yQSpio+55M6j8s7g 32CFocteJHZ5Ms/U2iOD9vDYirahc++bGlv9Eu+3nlXaWXunX/RJqyqWb5qqWNlVAaFUHQ/2 czGubiWO+Z65IvYoDi7NSaekR/yFMlImXYfB4+eXl9ef4sfTp7+I4FxjkrYU4FxXSbSt+enG hZJ/F9NdTJRFCe7JObd1LFOPD6fdqw8s77WYU3ZBdCXa2YRmXOyZPHf2jJbpRQsBMwV+9ep4 FK3L1N/Tw42iU1ueZmdMev6OVCIEeB/zTYAvN2Z6SHno1rDW8FtZNZvU/nBWoGhGPoRotI7Z Lgz8RaqB7g6qo7nuozrEDKVfMaBhSAQhnzDT0HwmBgTRvOAYiFG4WibHOnMjMdrYHRkX6Rmc FeeFBehOMTXyJuomsKnLUGoDOfb8tViRfuX77EwVzH4yJH60sts4PiKvkfFg3ygZhDu7o4hQ d5ouYwYReFy1kUUc7ryr3Toq9NYIQOiUO5NCzdKQcvyk0Uoum0PE0dL0k0z8zW45dUUZ+Nix v7VKta7Dv5+fvv71i/erll+aw17jKs3fX8FwmbilePfLLK3+uljnexDaSf1iXaUxVtNUE/n6 9PkztWHIJj8cXL7F+8OZMEQY8BSetZiSKnMIIteYgqeGFkIgUC2eIj2w+NaHMTb7VoMuqyAN ck7lx3iyxV6XNDndXsnb6gEM/WWSPPKjbUhdNIzwDnk176mB5Q5ooPoO890eTgPPJy1SNXwN IruUELlxnqq7sYlN5G+WnPhJaKB5VL23AVmtRsZYRQsI4/E1ZQHEY6xEiRt1rgKqEKm+JHA+ A3HUS//X649Pq3/hXGl5WSHvnkaDWTMAi9RqEdk0yWw6KHXaFdeA5fwA16E5a7F4UQ34poKq EGf0mK4PVkjNx5GD7ffhh9S0X5qRa2SqpE10K+LoSE+EF5jhBzG9O17QeWii2DUsRhyhdQ2m zZasTOAHBP1441G4IVprH6MjHcJu78xZbABDuMVFzQfjgbsjOoRbvNO0OUojlVjHjbyT2opT OJFFGAdUh+WiUFsDkaIHsCscjIX0sTgyXYHlTk3rWB2DPtlOBdnvbxSH5SkVYZs3U0dkYr72 JPmsNzLsHwL/RKUcQ/DdGxw7suQICCXq7lZsCWQ88LAjsikvtUodr5gGS+jQ0jBz8e+NUsqD FT1IzVkhu5gSxWeWyHLVOjU45It9DZ4E39jXYHR29LssYnFEjjN3pnuNBoY1MUya7tjqdvQo 7bakmd/c/+sQOwWckY331vjCoibjHuFdjFzDeqe830/9Cr23kHhcb3eTW9H6+eMPJYt+sUbR ShPzSpBdiBRgDLrlUMdEwnuVgzMiCruM8by4OXLYRPe3a81CaUYYDFs/Ch3Zb9dv57+lg3Jp jr4F2iakSQ92t/WoFjooeKwCeUz6a1MvcaJbgamn5SpP3lYy6pxcR5IaN6AHZLcAguMALFkE 3/jkR/68C6/RN+S0JOowNj+VRzrsVeQCHW3f7pT14VY+8Hqc5C9ff4vr9q2NCqIi38lSlGdi tKaoy9Ordu+Xn15PCWdDzL45p5k23YtNVTOwMy3fKo6lrxYwBOptA1Axoy0y+PAqy7TAlbDu SoFSGbpZWiFeEc3q9RcAuaKSVjE1PGhy44SEkEiYklzgtx0McaAu2fobs6nh8fMTBEwy3MaJ Wxl38moVwtlwVz2ytdckF+DUymwNRFhZUTtzi6NFtaDPllMPi4DUMCsOaZk3D3aiBOJ29ZAj MTOV5IAg0iauTIlfFwE24JNKAyqiTCUlzOhUTWveJAKJZ2rJziRVr25/q+FykbOSHbDhHEye zh1QrHf5NI7O+en1B8RhWa62wTWU66J5gPdgQOSIS6oZFuGqNJVzPFQGefRHRAXNHMJzfHp9 +f7yx493x5/fHl9/O7/7/Pfj9x/UM9jxVqeNw0pMMrXuqPuJa7QxIq5Nu4BxsZI23cXxagrg MaHmHCvytDfDuZiqxEy0oitYLc1YXAkYYSC2kdIx3HGaLnilZEFansna97kU7VAEUa+RQbJ9 YTogkLESkVZDLeYerXsnGtQzZt2BZVWBbJmAiHOoJ4dezirBxdmpZom10yGyjixJxe7FXHoz zlgMt2B5St+UESn+Ad/w0GHrAzi4tVHzP+A7VvKU3rq6Kmi/t/0LsACl9Jpa3Xo6LYdB520N BBe5PY3HKlW1Wh7NPC2N6a3yGd6X6NYMb0972TXZKS+oiTLyHJnpKGuk4tUB5cXcNLcaLJpA hencezSxj7maHhBw/dFIqkKTkzprGfIrx9UZGR+wdyKtPtYdeEtt6X2lGkHUVKtJxE4HWfVZ rZV80fSax5YBWtuoGQ5my1XQ7Vspl45J67bMLbO1+NhUPJ12OmEj1XJbmgA1PZAcABpEXRqP PkeXQIFKHoiqvtLQu4qLE7gXVcfJqTUKPYLRrMLAWrVmqFT9HATYeJoNFovx88unv3qnZv99 ef1rFjvmFL0TVjM4Nsb0VZAbjPB3nwHrOyJiMA0WkYeBaS+AIW/tQkyVYQOJkzjdrujKAma5 3DBR7We4i6k92Cza57XA34kGWl7fSN4/UlFJ6ytbnO7H0fuc+Pb0VY+jpUPSD654+fv1E+Gi TmUrGn2fbipeK2p6lgR1XyQTdV7O2pC2xrrE8w587D0ZqG3pDQYuW/8+h+Qt/bAweEsAuwX6 mZ/lxb6ifY7mqoNbyiVjf8/++OXlxyMEvKSEPiFT7TlQ7ZTwYbxM/e3L98/2iAjF+Iv4+f3H 45d3lVp9fz59+/Xdd3gV++PpE/Vwr/bQa96JhtGO1bSuOHUu1Voey5r0Yfq46H++O7yoMr6+ WEGee7A7VOdRybwqVdtYSUZyMbiV1Ah7IitNu3XEAGqk2NbfhMEDrahZnNr1JDpjblR/oNET 4grnBD0VUl411ANfbvppyUFWb7PM1JGbaV28x+STdt/Ye6gwyMODY5qQefX/NR9pjDQLVtAP UYJMDctgYPFNFnGhk851GM//3iL206fH58fXly+POJ7unjMvMjbOPY+9cDV5giOo2C4JIUjV x1DP69EgwTXVRt0aYNdcODDQ1LuHqyJt/HQVyc78Gb8/eSszhA3nbLsOwwXBNiEayS6zIYVH azIYikJ2YehZ9wED1SpiR18lch3RzKzkNd74Zq2FPEUBMmtQhD0Lp8gF7OvH55fP2qn9EDXh 08tXtcDwFGDJ1seRWoGyoy/vNUQd4ApYb+1ctu5cto67dAXR4fQUsDN1VuD3zvQ8znYwEw/q WyE2Z2G0xneB/aubSk55/lLSi2e9OQAp2NCV5XEd+ORbJyBr/ILF07L74DmLLlm7RfeKDzGo tNbqozZHTZrpZ4YdwMoc8l5FHm0GNcKk2XUPen4kVqFRCU0W0cZ8pzxnG2/V9WX38+zLt2d1 mFk7N0uiAEcM7NE/H79oBdch8CdKIgum9rzjsHHQ5zd7gFVF37p8iHbXpcz09J/xNjMHdVMt BWNLmWGj6vderEVlweSmCxHkhy9PIwC3EPVYrl2m3sPE/zf2ZMuN3Lr+iipPOVU3ifaRHuaB vUk96s29yJZfujy2jq1KLPlKcp2Z+/UXIHvhAmpO1aQcAeDSXEAQxJJ1pUSjOpPrCBS754b/ qQ3SOIUha7iGNalJVTD5MOcZNKOYDdUsAQCZWMLAIWphRdkSliBqSvpdIWIp7/7ZTH5FgN/z 8TTXfeYRTL5ZA+LLbKaRfplT72UcoTb1ZTnSON2EDFEYz8cT2SQAeMlspHOX2WJMJsx0s+kX 2U8QActxl5QQl/LL5/v7zz5Nbr9HcKqFSGdEjmoiWu//93N/fP45KH4er2/7y+H/0C7L84om gY50l1jtj/vz0/V0/ss7YMKd759NkgTp+5fak7l4k3t7uuz/iKCO/csgOp0+Br9D5Zjzp238 IjWuVhgA1x4aNbbr9PXn+XR5Pn3sBxeCiXhhMZoPyZd0gdOetVsgvU4QN5aNj5j3kBdT1W3Q iVcjy0aQ+Mdql6cgBtHCKO5NQUCKOxxll4Y4WhaG+rVQrnQLLcEV90//XN8kLtxCz9dB/nTd D+LT8XDVxzbwp9Oh5eTmOPpZF5b5ZDiievH5fng5XH9KE9me5+tSdmFee5iMTXYGguuj7F8a flGkJfzdJ1YPYQlf0Qrxff90+TyLfNqf8H3EypmSZmENTpaVN/GDmtI3TLbo9zofghxi80WW aWhHZJxRbE21QpOh/fVCGEEeXt+u5gC2amB55X6DtThRdRUsmqAvO/XJmVcsJ0NNlwew5ZwM 6rkeKW7ebozGo6peJEYTKUofEkMnJhrpfD6jGOMqG7MM5pYNh4rjUlhEILWSFiXyXUQeEAme aWHOvxVsNB7RCgq4/IOQZPGWb45XYUJOkkRlPrPEIU6zcjK04DLo0HhoRYPwP5lYrDZKt5hM R9TbJsfIxllt/0sYTcVqDQDTmRwPpCpmo8VYutRt3SRqkjCLl6in1+P+Kq6cxPLcLJZfpA3L NsPlUompKq6WMVspnqzwe2KzTpHmE4v5ZRr76OFG8tw4diezsZrJvOGmWFhwUoNhhcfnfw5H 20fJwmLiRmHSdYBcdOL5rM7TsnXsFbnIGovmwR8Dkan3n9Nxr5/vTUzQViClmQ1/YYQO5FVW UpTyZ3Nbjl68VQ7cj9MVOObBUB+gTCIWhTjxz/sLslfqWHbibGwRCJVtaPP1BmlmNJpZ+WqD plkqIGHNyLJUMZsrabb5b+P+L6DW6z+gJ7QhYrOOjK9p99Js2mdk5uz7eDi+EnukmCwnvY3T +fTj8K4elj1TCT18kgpLv96SYbUelrN+a5b79w8U6ixzFUcPy+GcZhhxNpS16SWsG9nqhf+W uUJSOsqPOguTVZbK7roILdM00uj8PNBocpYU+oPmNvZrzZWxZZiy+wf80G2kESSU2evI9VyT Hm1FglIDRllRmJDGpKNn1h3cHi8dabjHy0JamWF+565DOWsg5sgKeVSsOsm/jjrCDMMWK6E1 nZTlXl1CVxTXjyaia5ilbinHbIDF6WPsU3S+jiL5ThvIHiLwow7YxlderhAIvGIbMjVhBLoI 5rgIfR9OVOqrkaR/CBMLe70bFJ/fL1xH3q/+NkIooJWhXe/waaQeL5K4XhchpUxRaKrCkYP3 u3G9SRPGwUbdqLim7adiWQkMP2Qjnmx/RuPDp+PzfvAuxGYzKkguxz4p11XiYUTkqFfRHl/O p8OLtPsTL0/VUCINqHZCLI0vlrSEETrJ1gtjavwT2DByzM5S/SEujCqoSKscjimAFGmkxjXq sWuf5aXjM+qpVryylkq8iBZm8cPs0KtSiqDQQQtLZXFBPxn1rZFPJx1acenEaI5qakBYptqs Io2yAzACZLzKueke/2Vevg/nd/6GRzx3+B4dY6FLVAaTF5Prk5u65I6aRtH1HEYfp14ckg7w ANf5JAe5LOEhNtH0KEkTzOkEXCGKHBFOXZLC3SKsQycooc+J5WPuazdYiWZIglWariK/+2hj BKHxwe/+D5BJLgdMEd2NaJdT7l/mTGGPt0z2xkaIXyhOXA1N/4Tfz4yKagNVYxIvNA0ihhJL 5FWCYlqtRFcSY7dpJ1NFIJ9vkV8XVF33OcuawP/NeoIhEMxTvj+7MFtAjOFDhLOb8jUP5dgW 6x1wEw3XY6Z1oFc0xQc9zP/Ga7UXA+5ahA/QGekMalGF71Zwbuw0jJ+4+S5Tg960RRSc2h+b b903x1NU8vjbnp6rqGOHD6J8ZIZwmgJGHYQODMQuFRm/I+D21GESpGRx+PfASksm02+cgKj8 wegPQu4quFVYqOWJUAqRSQoRoYX1XwXFuJZ5BCZ8oiF1OpZPzg6MaS2UTguMSBYQs2ITpdSs yFTqRztlbhuhJIz07gXjdtRkAHZKq7YhvDExnILPPN06Dp8cxsa2E1CyVXoUAg/EAAChLCzj +zwDDrTT8X1/5L1B9kfPX+npgFAA+Eu9UjUTCKJWvt76GvhPtONFb15xCQ2YbC/As0g0ZMDk E+0jBMK2NwW2zH2FRd8FcVlvKZ2RwIy17rmlNP6sKtOgmKprgjM2ZTm4VUHx+nTr5xHbCWJx oD89v+2Vsz0oODcxX8S8P0BU/svbepyV95xcOlTT5Xw+tDHsygs0lLi8p8VfASv/Skqt3m4y S+Vr4wJKaJ+7FUTUKmJldwZiWNQMc81NJ1/6C5vBljjIbkDK0fm9+Y5w2X++nAb/pr6hyVki LysAbNR3dw5Dx/FSYXgcjN3GWF5hmVKaEU4DUk/k5bI13MbPE7lVTWKCS7L65RzQ73r6Xt0y GUlVVK1gAzly1Q2I91vStfI/xoCD1AAiCz1/MUhqnIWgT7Ifq6wYLtor3+Cm8vuMhdOyQGOr PmdEer9aIAg5RWFYmveKIXsXACXCZ1G9cHxjKDjIxk4cvdNGcTiMyJbcnMXKQrirWLGmIIJd t/JEf4NS0CKBIq3fbQk9jFeY1RjKL6KfwXVSHouO0glRdKh3ceWE1x1VuzjNdh7hwnmr/uhx SpaLHsn8VF2Dj0Qvphh3Z+twm89HnyDwYwduUXJstH6Mc7aK/aQU0yAqmEjM7sG2rOMwgZ2r iDextmbWmQa4Sx6mxjoC4Ny+qPOmVooRGReS5h7iils5/WQgSLK4oFZ9g81ZrDCyrdblyt5f /yG1I+Hsx9w0Mo+hRDP5PQZ+dAmAfjtcTovFbPnHSAqQgATtYVNPLcpXhYgOWaySyM8QCmYh v2dpmLEVY69NefpXceSTmkYyulGcundpJBNbv1SjDg1HvadpJPMbxWlvS4VoOaGTMqhEs18O 0HJim5MlNx2xdPELpeZGEpC6cAHWC0uto7F1eQBqpKJY4YahCmrrH9HgMQ2e0OApDZ7R4DkN /kKDl5Z+T/RB7TC/GtKR1q9NGi7qXK+OQytLVehHCfxSDs7Ygl0fzjFXr01g4CJS5dSp05Hk KStDNXpuh9th0k9S49ySrJgfyU4pHRzuKhsTHEJfmZw8sUMkVVhSfeDfHJJh/VqSsso3YbHW S1dlYMZy2uzPx/0/g7en578Px9desOYRw/E1IojYqpA8yXipj/PheP178HR8Gby87y+vbe4r WTDHJIHcTl+6YXBpDy+tILps/ahj9lNJUEvTsi3tweDQgS7b1Ie0N7F7ev+A28If18P7fgDX sOe/L7yvzwJ+lrrb18hVCqiaoTRYCer4+D0VCDERJivVPKsNRVwVpVULBOJHLCr5OhqOp92Z W+ZhBgwCH6hUOTz3mcerBSRRX5XAZdTDUk4aqfHScZTT+4R87ZWUJ63sAu2gtTnvuKQW4IQF SKRhmuCFoU2yJVk7qDgxQmkSURoCHiL1noH4JQYiS7laQL5vy3BFkS26nOJDw73PNtwuHn3h CVENAzmjHMMdl01gd2kVM/Z1+GOkfi/e7bjxuxR0ceDtv3++voodoo6y/1BiXG2L+4GoEgl5 KkGLYceKfzS6fVouQn01sCYo91lBkDrfYEIKfQYbMMxWFDQe5FrNLUUAXOpXtQvfm8JeCUp9 N76iJcvdii+8/4JUXEngeK1wYfyyg81ebJlLN79FVDmd3rFd+iLpJJ/42I8jWFzml7UYa8tQ KQb3LJRLeZP3NDbr28aY+dTQBplUuXMbn604e75FZOZt1yiEh0ytZ4fQ157YcPiQQQb47oeR jwXqw4IovTeYCY3kxTl/wKFu2VDXhQ5on4C1CFQgFF+4WQdoePr5IRj/+un4qppLpO6myqBw CSuG1PwIVL1Gh9aSFQpbFAykQ/EdkVaw0sZD9SDLGHA0iTBDj1VKAWGjrbcsqnw5G+r9HfBQ YLUeqR4XhYAjp6nsPayAmzpHKrL9BjnxKoy5Z1WaCKz+lsGhfI/RqgleSGwXP/HMo1Jbdtir je9nNsbY+gFq7QnDGrRe7hj34PdL4zJ5+Z/B++d1/2MP/7O/Pv/555//kp7NeLN5CSd56T/4 Bi8toCtqmN5mF9Hk9/cCA7wnvc+Y/JYtCHjIan42aKrJbafbJ8YeMUoybF4NDoPJbBpa69Zp g1xGvp9RvYMeYNro7vQotFZh+4DA6ddqbBJVfpQUDDj1HEmwWcHAbyyHhqJGB35GKuIFHfzX 55vWxyMsbjK60KBQF8BKHyT+JBKSR6Kb+x5cOUIWmcsTzj+LWMEnH9HEpgMuUXCkJCa1Q65O RC9FArGMo94ngQS5O8xOFHWsYDyS8e2kSSD/jgr2Ixb+XSOu5YagplGKqO2Yhtnzt1Tn2vGt /TznhpXfhNQpqb+h6ySVxAHjX1GkASyrW00q9ym/RG98ko58LMEDg+h5wMKoiJgj140wIesZ MqNMEaORQI7Z6dXp5kj0VBKzSD9ZIk2AjMmCVrrb3RhoYyO4CiXujo5V0qVFaI//PITti8+K IM1lO8H/iY1jIaQuQYU4ABquYgbmxZwIHCU/rKC8EVSJ+Lzb2FXOsvV/RRNkGhMUUlFzVQ20 DUQg6/uwXGvx1ERDAh1zCZgvUyX/EJLg+xbfvEjJeYNeidsUFLVorDrnhidaF0Wrrnre5Xgg 6A7O3NmY0yuP1fCnxJ1dwIe55iBKVfG1fg+Esj2MUV9rEqhX1BCakx8YR40265QxWH5XpEFg NCJklw7a19gsPDEBpL2vGOEiAeF5nZpD3yI6KVsdBidnCYwenAv8kShJE/UhoIGzJEFDcnQ/ 5wUs8Xw68ii6TSikNHOYegk34m8xnNkgFf04De05/g3nfQlP96Md35LBGZYZR1hHh+GxjH7I A813Re0At1rHLKeXtILuj1CJwNYPZc/4SRXjXYm/fsg1tStVfK8R9l9IBp9Hrrkq95erJhtE G6+kVEHYGS631IVmH+30nBEEOKsA4KAxhSE6CNlwPu2EP1vTa//Bq2J56yIUuXiC6qUo08Qj jt4Avkwp92mO5krAwCjlhKVmAaniczhu1qXFJg9lq9DzeY6f0WQ55fEB8eor7bYqjODWk7pF rsjkPLbg7QhY2DxltKhSVHa1Jtxzrcu7YOjQab18i9vzylNECfx961SunIIlUDMMQPjIWUI/ Dhyn/bxFiiHcVknsy0eLdPyj2XEdFoLPq7rT5rAXNJQB2mJeN+I8vylXStAtn+XRrtEYWwpn JS5OLRpDj5COsSCss1VZq9DmTph6DI2OSAXaPbWKvbSCVSiUUEYJtOuIqmJNznUTpKa0+I/w Ce/YnXnqYZBGXGN1ucv8eviwGMK13oKDqRjROLFOpbAjCpafQhO5yw0Wm6NO1R6vzn6HuLEv OhpslbyaNSKr3EX4Lv2qwd8WUM9CnzRuRpic9VYxGYjUuPbDJAp/oaqFXUBGnWlujHFIKmNx STayNqnbFnHKkCmrhurF/vnzjI5BxjNMk1GzLQ9cGM4IFNUAgbxZtZFpCpAPINxkx/e0Glu7 XQwKWnCXEr6XTQITElDVNEYDBKZRnshPDwIBo5HuSDuSloJlMOdxmhO1tihJA6dpx0zStUhY pON3zIwqu8rp7CLteqW6KK0kjchj1GVQJ/v629PHx9P5/XT+rRPDce66oKbu+efH9TR4Pp33 g9N58Lb/54OHD1CIgU+vmBw+QgGPTbjPPBJokoLY6IbZWhatdYxZSB10CWiS5soNpIORhN0j gdF1a0+Yrfd5wQxYH4CWhJu1Nxa3JHXra1BrariGahWMxou4igxEUkU0UI3SJ+AZ/0uaunE8 bs+7yq98o0b+x1wEsQXOqnINbMWE47VCiIztimWf1zf0P31+uu5fBv7xGVcwuuP853B9G7DL 5fR84Cjv6foki8ttz1xKrGiHzY2JYXDXDP6Nh1ka7Swh+xvKwr8Lt8ZX+FAaDonOx83hsTTe Ty9ygOu2LcccBbc0l4FLTLovG9c3sCi/N2AZ1ciDaoHfQIHDo4uJcS1ZP13ebF+ghLlud6cA 6tU/QE/o01fg8WXMaNs7vMJlyGw3dydjqhGBEH5d9qnjVLbSMGQR7KabpcvR0AsDcyc23MrY W8Ri0mlijzKe6ZAzolq4oq2ZH+Ffe9E89kbjhcm0ACxHN+nB49mcaAsQkzEl37W7Yc1GRm0A FLUZ4NnIZIHlKh8tTfB9JojF/j58vKmRLdsTx9wiAKtnC7N5hCehWCMmMqmckKgrd6cG0IEb TRAS51OL6INKGSuNxX4UkRmEOwq0KNGCUkm4GQk1v9YjRibgfw3wZs0eidO8wJjSY3OtNPBm jG2M9BYD9YnG/DzT4hermLoo/DG2eWszlf6NkQVJk5y1Bm6ftJZAa7wzPcIoCAc53Fc3BQEq y4kaaUPoBrmYmptBs6juoWsiKunT8eX0Pkg+37/vz204J6p/LClCuANR8pOXOzyCXUVj1hT/ FxhKbuMY6oRDhAH8FpaYaR3d1LOdgeX6f0pSbRF0FzpsYRPnOgpqPDpkI/fqM7G+J5clK3Zx 7OMVCU9Zfks1VxCGKvo3l3UuPL/i5fB6FKEauCmbphEUptV1iQm9xfUsp9+MudJgs5XzgzcQ M+iAjAn0l4YGXudpVSra+Q7LlZtyOQTCaLlcIRSiYUUlq2IQ3eQ8kAvwLBhZQDQQFyEBRc15 Dtf/B+Fv5voyb0OCbaC30T4oeGFe7qJUmNzx0NvK26Dy3SK3RI9sTGzCR6a+7SljzQurJw3/ xlhZPWIgKpCNvZCSwaNVpTwwOWHC8l2vKW0Cinw/P51/Ds6nz+vhKEtrTljmPia+UNO3d+rD Hk+piPnnyQEk2sGDO3/iZrs6yNNYu8DIJJGfWLBw669hLcmuAC0KnchRpyoUvyY+47m2FS/q FmUF97BOPxngKcv9X7IoVJmBC9cH4EAKaDRXKUw5ENopq1otNRlrP0klUIOJQtd3dgvL6SaR 0OIiJ2D5vXHeIMIhFxfgJAPwKHQo6dq19mg+hctITAYSw9VMpXoRCD4J6IDEOiKyjZwlXhpL o0Y0BWclrypX8jsgVPg4qXD0W0ILpuZUlqH9Wd2Ox2NK1IxQqmY4iUnqKUn98Ihg/TeqA+XR aqA8Rokl8EdDEtKJjBosy2OjKYCV6yp2DAQanJg9c9xvBkx9+u4/s149hhmJkP27JDCMqblr uSkE+j33qNxHU7I0StUsnxIU1ZYLCwoalFD8wNiyqPUp7s7rInVDYHycQ+ZMEj+QawCH8WMd hKp4Nd4DfwCRMzkJZ/EiXCVMPQj5CaaU9e5khhulyvMO/r61G5JI9Sft2F33rsdXS8A9U/Ej pZ5Ej5jzRtn8ae5ZtqbnWR7SeaqWvtY4C5WohvAj8KRVU7nFuHk17IFBitK+8bKP0MUPmRNz EPpxw5Bo9joFmk5FJNvrBqXAiWFhQowXz7zEn2sA+f9p6OtnA84BAA== --wRRV7LY7NUeQGEoC-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f53.google.com (mail-pa0-f53.google.com [209.85.220.53]) by kanga.kvack.org (Postfix) with ESMTP id 0D034828F2 for ; Mon, 29 Feb 2016 08:46:45 -0500 (EST) Received: by mail-pa0-f53.google.com with SMTP id fl4so92504028pad.0 for ; Mon, 29 Feb 2016 05:46:45 -0800 (PST) Date: Mon, 29 Feb 2016 21:48:39 +0800 From: kbuild test robot Subject: Re: [PATCH 08/18] mm, fork: make dup_mmap wait for mmap_sem for write killable Message-ID: <201602292150.WEqPRm1s%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="jI8keyz6grp/JLjh" Content-Disposition: inline In-Reply-To: <1456752417-9626-9-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --jI8keyz6grp/JLjh Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on next-20160229] [also build test ERROR on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: i386-randconfig-x004-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): kernel/fork.c: In function 'dup_mmap': >> kernel/fork.c:416:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&oldmm->mmap_sem)) { ^ cc1: some warnings being treated as errors vim +/down_write_killable +416 kernel/fork.c 410 struct vm_area_struct *mpnt, *tmp, *prev, **pprev; 411 struct rb_node **rb_link, *rb_parent; 412 int retval; 413 unsigned long charge; 414 415 uprobe_start_dup_mmap(); > 416 if (down_write_killable(&oldmm->mmap_sem)) { 417 uprobe_end_dup_mmap(); 418 return -EINTR; 419 } --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --jI8keyz6grp/JLjh Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --jI8keyz6grp/JLjh-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f169.google.com (mail-pf0-f169.google.com [209.85.192.169]) by kanga.kvack.org (Postfix) with ESMTP id 080F9828F2 for ; Mon, 29 Feb 2016 08:48:04 -0500 (EST) Received: by mail-pf0-f169.google.com with SMTP id 124so31143625pfg.0 for ; Mon, 29 Feb 2016 05:48:04 -0800 (PST) Date: Mon, 29 Feb 2016 21:47:03 +0800 From: kbuild test robot Subject: Re: [PATCH 07/18] mm, proc: make clear_refs killable Message-ID: <201602292137.IfGwWHll%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="zYM0uCDKw75PZbzx" Content-Disposition: inline In-Reply-To: <1456752417-9626-8-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --zYM0uCDKw75PZbzx Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test WARNING on next-20160229] [also build test WARNING on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: i386-randconfig-x003-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All warnings (new ones prefixed by >>): In file included from include/asm-generic/bug.h:4:0, from arch/x86/include/asm/bug.h:35, from include/linux/bug.h:4, from include/linux/mmdebug.h:4, from include/linux/mm.h:8, from fs/proc/task_mmu.c:1: fs/proc/task_mmu.c: In function 'clear_refs_write': fs/proc/task_mmu.c:1030:8: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) { ^ include/linux/compiler.h:151:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ >> fs/proc/task_mmu.c:1030:4: note: in expansion of macro 'if' if (down_write_killable(&mm->mmap_sem)) { ^ cc1: some warnings being treated as errors vim +/if +1030 fs/proc/task_mmu.c 1014 task = get_proc_task(file_inode(file)); 1015 if (!task) 1016 return -ESRCH; 1017 mm = get_task_mm(task); 1018 if (mm) { 1019 struct clear_refs_private cp = { 1020 .type = type, 1021 }; 1022 struct mm_walk clear_refs_walk = { 1023 .pmd_entry = clear_refs_pte_range, 1024 .test_walk = clear_refs_test_walk, 1025 .mm = mm, 1026 .private = &cp, 1027 }; 1028 1029 if (type == CLEAR_REFS_MM_HIWATER_RSS) { > 1030 if (down_write_killable(&mm->mmap_sem)) { 1031 put_task_struct(task); 1032 return -EINTR; 1033 } 1034 1035 /* 1036 * Writing 5 to /proc/pid/clear_refs resets the peak 1037 * resident set size to this mm's current rss value. 1038 */ --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --zYM0uCDKw75PZbzx Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 FvXYJ+Zerj2j0Hk9Kac3IP8PLl3NXZ5KAQA= --zYM0uCDKw75PZbzx-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f46.google.com (mail-pa0-f46.google.com [209.85.220.46]) by kanga.kvack.org (Postfix) with ESMTP id 67A0E828F2 for ; Mon, 29 Feb 2016 08:51:14 -0500 (EST) Received: by mail-pa0-f46.google.com with SMTP id fy10so92391550pac.1 for ; Mon, 29 Feb 2016 05:51:14 -0800 (PST) Date: Mon, 29 Feb 2016 21:53:57 +0800 From: kbuild test robot Subject: Re: [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Message-ID: <201602292112.ghI4B2ZZ%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="W/nzBZO5zC0uMSeA" Content-Disposition: inline In-Reply-To: <1456752417-9626-11-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --W/nzBZO5zC0uMSeA Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on next-20160229] [also build test ERROR on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: mips-allyesconfig (attached as .config) reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=mips All errors (new ones prefixed by >>): arch/mips/kernel/vdso.c: In function 'arch_setup_additional_pages': >> arch/mips/kernel/vdso.c:107:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors vim +/down_write_killable +107 arch/mips/kernel/vdso.c 101 struct mm_struct *mm = current->mm; 102 unsigned long gic_size, vvar_size, size, base, data_addr, vdso_addr; 103 struct vm_area_struct *vma; 104 struct resource gic_res; 105 int ret; 106 > 107 if (down_write_killable(&mm->mmap_sem)) 108 return -EINTR; 109 110 /* --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --W/nzBZO5zC0uMSeA Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --W/nzBZO5zC0uMSeA-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f54.google.com (mail-pa0-f54.google.com [209.85.220.54]) by kanga.kvack.org (Postfix) with ESMTP id 3C2AB828F6 for ; Mon, 29 Feb 2016 08:52:51 -0500 (EST) Received: by mail-pa0-f54.google.com with SMTP id bj10so23206712pad.2 for ; Mon, 29 Feb 2016 05:52:51 -0800 (PST) Date: Mon, 29 Feb 2016 21:50:53 +0800 From: kbuild test robot Subject: Re: [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Message-ID: <201602292154.V74rAKTO%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="qDbXVdCdHGoSgWSk" Content-Disposition: inline In-Reply-To: <1456752417-9626-11-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko --qDbXVdCdHGoSgWSk Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on next-20160229] [also build test ERROR on v4.5-rc6] [cannot apply to drm/drm-next drm-intel/for-linux-next v4.5-rc6 v4.5-rc5 v4.5-rc4] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/change-mmap_sem-taken-for-write-killable/20160229-213258 config: s390-allyesconfig (attached as .config) reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=s390 All errors (new ones prefixed by >>): arch/s390/kernel/vdso.c: In function 'arch_setup_additional_pages': >> arch/s390/kernel/vdso.c:219:2: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ cc1: some warnings being treated as errors vim +/down_write_killable +219 arch/s390/kernel/vdso.c 213 214 /* 215 * pick a base address for the vDSO in process space. We try to put 216 * it at vdso_base which is the "natural" base for it, but we might 217 * fail and end up putting it elsewhere. 218 */ > 219 if (down_write_killable(&mm->mmap_sem)) 220 return -EINTR; 221 vdso_base = get_unmapped_area(NULL, 0, vdso_pages << PAGE_SHIFT, 0, 0); 222 if (IS_ERR_VALUE(vdso_base)) { --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --qDbXVdCdHGoSgWSk Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 m9XZhgIA --qDbXVdCdHGoSgWSk-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id 4D4D9828DF for ; Mon, 29 Feb 2016 09:04:20 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id n186so50827112wmn.1 for ; Mon, 29 Feb 2016 06:04:20 -0800 (PST) Received: from mail-wm0-x235.google.com (mail-wm0-x235.google.com. [2a00:1450:400c:c09::235]) by mx.google.com with ESMTPS id 3si20529927wmk.45.2016.02.29.06.04.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 06:04:19 -0800 (PST) Received: by mail-wm0-x235.google.com with SMTP id l68so63987917wml.0 for ; Mon, 29 Feb 2016 06:04:18 -0800 (PST) Date: Mon, 29 Feb 2016 17:04:16 +0300 From: "Kirill A. Shutemov" Subject: Re: [PATCH 0/18] change mmap_sem taken for write killable Message-ID: <20160229140416.GA12506@node.shutemov.name> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon, Feb 29, 2016 at 02:26:39PM +0100, Michal Hocko wrote: > Hi, > this is a follow up work for oom_reaper [1]. As the async OOM killing > depends on oom_sem for read we would really appreciate if a holder for > write stood in the way. This patchset is changing many of down_write > calls to be killable to help those cases when the writer is blocked and > waiting for readers to release the lock and so help __oom_reap_task to > process the oom victim. > > Most of the patches are really trivial because the lock is help from a > shallow syscall paths where we can return EINTR trivially. Others seem > to be easy as well as the callers are already handling fatal errors and > bail and return to userspace which should be sufficient to handle the > failure gracefully. I am not familiar with all those code paths so a > deeper review is really appreciated. What about effect on userspace? IIUC, we would have now EINTR returned from bunch of syscall, which haven't had this errno on the table before. Should we care? > As this work is touching more areas which are not directly connected I > have tried to keep the CC list as small as possible and people who I > believed would be familiar are CCed only to the specific patches (all > should have received the cover though). > > This patchset is based on linux-next and it depends on down_write_killable > for rw_semaphores posted recently [2]. > > I haven't covered all the mmap_write(mm->mmap_sem) instances here > > $ git grep "down_write(.*\)" next/master | wc -l > 102 > $ git grep "down_write(.*\)" | wc -l > 66 > > I have tried to cover those which should be relatively easy to review in > this series because this alone should be a nice improvement. Other places > can be changed on top. > > Any feedback is highly appreciated. > > --- > [1] http://lkml.kernel.org/r/1452094975-551-1-git-send-email-mhocko@kernel.org > [2] http://lkml.kernel.org/r/1456750705-7141-1-git-send-email-mhocko@kernel.org > > -- > To unsubscribe, send a message with 'unsubscribe linux-mm' in > the body to majordomo@kvack.org. For more info on Linux MM, > see: http://www.linux-mm.org/ . > Don't email: email@kvack.org -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by kanga.kvack.org (Postfix) with ESMTP id B3B8B828E1 for ; Mon, 29 Feb 2016 09:16:25 -0500 (EST) Received: by mail-wm0-f44.google.com with SMTP id n186so51391225wmn.1 for ; Mon, 29 Feb 2016 06:16:25 -0800 (PST) Date: Mon, 29 Feb 2016 15:16:22 +0100 From: Michal Hocko Subject: Re: [PATCH 0/18] change mmap_sem taken for write killable Message-ID: <20160229141622.GC16930@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <20160229140416.GA12506@node.shutemov.name> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229140416.GA12506@node.shutemov.name> Sender: owner-linux-mm@kvack.org List-ID: To: "Kirill A. Shutemov" Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon 29-02-16 17:04:16, Kirill A. Shutemov wrote: [...] > > Most of the patches are really trivial because the lock is help from a > > shallow syscall paths where we can return EINTR trivially. Others seem > > to be easy as well as the callers are already handling fatal errors and > > bail and return to userspace which should be sufficient to handle the > > failure gracefully. I am not familiar with all those code paths so a > > deeper review is really appreciated. > > What about effect on userspace? IIUC, we would have now EINTR returned > from bunch of syscall, which haven't had this errno on the table before. > Should we care? Those function will return EINTR only when the current was _killed_ when we do not return to the userspace. So there shouldn't be any visible effect. -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f52.google.com (mail-wm0-f52.google.com [74.125.82.52]) by kanga.kvack.org (Postfix) with ESMTP id B315A6B0270 for ; Mon, 29 Feb 2016 10:03:31 -0500 (EST) Received: by mail-wm0-f52.google.com with SMTP id p65so72572806wmp.1 for ; Mon, 29 Feb 2016 07:03:31 -0800 (PST) Received: from mail-wm0-x229.google.com (mail-wm0-x229.google.com. [2a00:1450:400c:c09::229]) by mx.google.com with ESMTPS id hh4si32577222wjc.172.2016.02.29.07.03.29 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 07:03:29 -0800 (PST) Received: by mail-wm0-x229.google.com with SMTP id l68so40821620wml.0 for ; Mon, 29 Feb 2016 07:03:29 -0800 (PST) Date: Mon, 29 Feb 2016 18:03:27 +0300 From: "Kirill A. Shutemov" Subject: Re: [PATCH 0/18] change mmap_sem taken for write killable Message-ID: <20160229150327.GA13188@node.shutemov.name> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <20160229140416.GA12506@node.shutemov.name> <20160229141622.GC16930@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229141622.GC16930@dhcp22.suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon, Feb 29, 2016 at 03:16:22PM +0100, Michal Hocko wrote: > On Mon 29-02-16 17:04:16, Kirill A. Shutemov wrote: > [...] > > > Most of the patches are really trivial because the lock is help from a > > > shallow syscall paths where we can return EINTR trivially. Others seem > > > to be easy as well as the callers are already handling fatal errors and > > > bail and return to userspace which should be sufficient to handle the > > > failure gracefully. I am not familiar with all those code paths so a > > > deeper review is really appreciated. > > > > What about effect on userspace? IIUC, we would have now EINTR returned > > from bunch of syscall, which haven't had this errno on the table before. > > Should we care? > > Those function will return EINTR only when the current was _killed_ when > we do not return to the userspace. So there shouldn't be any visible > effect. Ah. I confused killable with interruptible. -- Kirill A. Shutemov -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi0-f44.google.com (mail-oi0-f44.google.com [209.85.218.44]) by kanga.kvack.org (Postfix) with ESMTP id A281A6B0005 for ; Mon, 29 Feb 2016 10:41:59 -0500 (EST) Received: by mail-oi0-f44.google.com with SMTP id m82so107197515oif.1 for ; Mon, 29 Feb 2016 07:41:59 -0800 (PST) Received: from mail-ob0-x22c.google.com (mail-ob0-x22c.google.com. [2607:f8b0:4003:c01::22c]) by mx.google.com with ESMTPS id cp8si21963821oec.98.2016.02.29.07.41.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 07:41:58 -0800 (PST) Received: by mail-ob0-x22c.google.com with SMTP id xx9so24768719obc.2 for ; Mon, 29 Feb 2016 07:41:58 -0800 (PST) MIME-Version: 1.0 In-Reply-To: <1456752417-9626-11-git-send-email-mhocko@kernel.org> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-11-git-send-email-mhocko@kernel.org> From: Andy Lutomirski Date: Mon, 29 Feb 2016 07:41:39 -0800 Message-ID: Subject: Re: [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable Content-Type: text/plain; charset=UTF-8 Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , "linux-mm@kvack.org" , Alex Deucher , Alex Thorlton , Andrea Arcangeli , Benjamin LaHaise , =?UTF-8?Q?Christian_K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch , Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On Mon, Feb 29, 2016 at 5:26 AM, Michal Hocko wrote: > From: Michal Hocko > > most architectures are relying on mmap_sem for write in their > arch_setup_additional_pages. If the waiting task gets killed by the oom > killer it would block oom_reaper from asynchronous address space reclaim > and reduce the chances of timely OOM resolving. Wait for the lock in > the killable mode and return with EINTR if the task got killed while > waiting. Acked-by: Andy Lutomirski # for the x86 vdso -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f181.google.com (mail-qk0-f181.google.com [209.85.220.181]) by kanga.kvack.org (Postfix) with ESMTP id E39346B0005 for ; Mon, 29 Feb 2016 10:57:22 -0500 (EST) Received: by mail-qk0-f181.google.com with SMTP id s5so57823417qkd.0 for ; Mon, 29 Feb 2016 07:57:22 -0800 (PST) Date: Mon, 29 Feb 2016 16:57:13 +0100 From: Oleg Nesterov Subject: Re: [PATCH 15/18] uprobes: wait for mmap_sem for write killable Message-ID: <20160229155712.GA1964@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-16-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-16-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29, Michal Hocko wrote: > > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) > struct vm_area_struct *vma; > int ret; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return -EINTR; > + Yes, but then dup_xol_work() should probably check fatal_signal_pending() to suppress uprobe_warn(), the warning looks like a kernel problem. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f178.google.com (mail-qk0-f178.google.com [209.85.220.178]) by kanga.kvack.org (Postfix) with ESMTP id 23EF96B0253 for ; Mon, 29 Feb 2016 10:58:06 -0500 (EST) Received: by mail-qk0-f178.google.com with SMTP id o6so57999121qkc.2 for ; Mon, 29 Feb 2016 07:58:06 -0800 (PST) Date: Mon, 29 Feb 2016 16:57:58 +0100 From: Oleg Nesterov Subject: Re: [PATCH 11/18] coredump: make coredump_wait wait for mma_sem for write killable Message-ID: <20160229155757.GB1964@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-12-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-12-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29, Michal Hocko wrote: > > --- a/fs/coredump.c > +++ b/fs/coredump.c > @@ -410,7 +410,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state) > core_state->dumper.task = tsk; > core_state->dumper.next = NULL; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return -EINTR; > + ACK, thanks. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f176.google.com (mail-qk0-f176.google.com [209.85.220.176]) by kanga.kvack.org (Postfix) with ESMTP id 64D1A6B0257 for ; Mon, 29 Feb 2016 11:17:38 -0500 (EST) Received: by mail-qk0-f176.google.com with SMTP id x1so58126675qkc.1 for ; Mon, 29 Feb 2016 08:17:38 -0800 (PST) From: Jeff Moyer Subject: Re: [PATCH 12/18] aio: make aio_setup_ring killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-13-git-send-email-mhocko@kernel.org> Date: Mon, 29 Feb 2016 11:17:31 -0500 In-Reply-To: <1456752417-9626-13-git-send-email-mhocko@kernel.org> (Michal Hocko's message of "Mon, 29 Feb 2016 14:26:51 +0100") Message-ID: MIME-Version: 1.0 Content-Type: text/plain Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?utf-8?Q?K=C3=B6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro Michal Hocko writes: > From: Michal Hocko > > aio_setup_ring waits for mmap_sem in writable mode. If the waiting > task gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely > OOM resolving. Wait for the lock in the killable mode and return with > EINTR if the task got killed while waiting. This will also expedite > the return to the userspace and do_exit. > > Cc: Benjamin LaHaise > Cc: Alexander Viro > Signed-off-by: Michal Hocko > --- > fs/aio.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/fs/aio.c b/fs/aio.c > index 56bcdf4105f4..1c2e7e2c1b2b 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -520,7 +520,12 @@ static int aio_setup_ring(struct kioctx *ctx) > ctx->mmap_size = nr_pages * PAGE_SIZE; > pr_debug("attempting mmap of %lu bytes\n", ctx->mmap_size); > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) { > + ctx->mmap_size = 0; > + aio_free_ring(ctx); > + return -EINTR; > + } > + > ctx->mmap_base = do_mmap_pgoff(ctx->aio_ring_file, 0, ctx->mmap_size, > PROT_READ | PROT_WRITE, > MAP_SHARED, 0, &unused); Reviewed-by: Jeff Moyer -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id 851FB6B0253 for ; Mon, 29 Feb 2016 11:28:43 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id p65so76319713wmp.1 for ; Mon, 29 Feb 2016 08:28:43 -0800 (PST) Date: Mon, 29 Feb 2016 17:28:40 +0100 From: Michal Hocko Subject: Re: [PATCH 15/18] uprobes: wait for mmap_sem for write killable Message-ID: <20160229162840.GH16930@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-16-git-send-email-mhocko@kernel.org> <20160229155712.GA1964@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229155712.GA1964@redhat.com> Sender: owner-linux-mm@kvack.org List-ID: To: Oleg Nesterov Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon 29-02-16 16:57:13, Oleg Nesterov wrote: > On 02/29, Michal Hocko wrote: > > > > --- a/kernel/events/uprobes.c > > +++ b/kernel/events/uprobes.c > > @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) > > struct vm_area_struct *vma; > > int ret; > > > > - down_write(&mm->mmap_sem); > > + if (down_write_killable(&mm->mmap_sem)) > > + return -EINTR; > > + > > Yes, but then dup_xol_work() should probably check fatal_signal_pending() to > suppress uprobe_warn(), the warning looks like a kernel problem. Ahh, I see. I didn't understand what is the purpose of the warning. Does the following work for you? --- diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index a79315d0f711..fb4a6bcc88ce 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c @@ -1470,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) if (current->flags & PF_EXITING) return; - if (!__create_xol_area(current->utask->dup_xol_addr)) + if (!__create_xol_area(current->utask->dup_xol_addr) && + !fatal_signal_pending(current) uprobe_warn(current, "dup xol area"); } -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f43.google.com (mail-qg0-f43.google.com [209.85.192.43]) by kanga.kvack.org (Postfix) with ESMTP id A81526B0253 for ; Mon, 29 Feb 2016 12:12:20 -0500 (EST) Received: by mail-qg0-f43.google.com with SMTP id b67so120485195qgb.1 for ; Mon, 29 Feb 2016 09:12:20 -0800 (PST) Date: Mon, 29 Feb 2016 18:12:11 +0100 From: Oleg Nesterov Subject: Re: [PATCH 15/18] uprobes: wait for mmap_sem for write killable Message-ID: <20160229171211.GA3615@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-16-git-send-email-mhocko@kernel.org> <20160229155712.GA1964@redhat.com> <20160229162840.GH16930@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229162840.GH16930@dhcp22.suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner On 02/29, Michal Hocko wrote: > > Ahh, I see. I didn't understand what is the purpose of the warning. Does > the following work for you? > --- > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index a79315d0f711..fb4a6bcc88ce 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -1470,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) > if (current->flags & PF_EXITING) > return; > > - if (!__create_xol_area(current->utask->dup_xol_addr)) > + if (!__create_xol_area(current->utask->dup_xol_addr) && > + !fatal_signal_pending(current) > uprobe_warn(current, "dup xol area"); > } Yes, I think this is fine. Probably deserves a cleanup, but we can do it later. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f180.google.com (mail-qk0-f180.google.com [209.85.220.180]) by kanga.kvack.org (Postfix) with ESMTP id 811886B0256 for ; Mon, 29 Feb 2016 12:23:43 -0500 (EST) Received: by mail-qk0-f180.google.com with SMTP id o6so59107668qkc.2 for ; Mon, 29 Feb 2016 09:23:43 -0800 (PST) Date: Mon, 29 Feb 2016 18:23:34 +0100 From: Oleg Nesterov Subject: Re: [PATCH 13/18] exec: make exec path waiting for mmap_sem killable Message-ID: <20160229172333.GB3615@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-14-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-14-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro On 02/29, Michal Hocko wrote: > > @@ -267,7 +267,10 @@ static int __bprm_mm_init(struct linux_binprm *bprm) > if (!vma) > return -ENOMEM; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) { > + err = -EINTR; > + goto err_free; > + } > vma->vm_mm = mm; I won't argue, but this looks unnecessary. Nobody else can see this new mm, down_write() can't block. In fact I think we can just remove down_write/up_write here. Except perhaps there is lockdep_assert_held() somewhere in these paths. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f41.google.com (mail-qg0-f41.google.com [209.85.192.41]) by kanga.kvack.org (Postfix) with ESMTP id 5EDC56B0259 for ; Mon, 29 Feb 2016 12:38:55 -0500 (EST) Received: by mail-qg0-f41.google.com with SMTP id d32so65296369qgd.0 for ; Mon, 29 Feb 2016 09:38:55 -0800 (PST) Date: Mon, 29 Feb 2016 18:38:45 +0100 From: Oleg Nesterov Subject: Re: [PATCH 07/18] mm, proc: make clear_refs killable Message-ID: <20160229173845.GC3615@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-8-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-8-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29, Michal Hocko wrote: > > --- a/fs/proc/task_mmu.c > +++ b/fs/proc/task_mmu.c > @@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, > }; > > if (type == CLEAR_REFS_MM_HIWATER_RSS) { > + if (down_write_killable(&mm->mmap_sem)) { > + put_task_struct(task); > + return -EINTR; > + } > + > /* > * Writing 5 to /proc/pid/clear_refs resets the peak > * resident set size to this mm's current rss value. > */ > - down_write(&mm->mmap_sem); > reset_mm_hiwater_rss(mm); > up_write(&mm->mmap_sem); > goto out_mm; > @@ -1043,7 +1047,10 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, > if (!(vma->vm_flags & VM_SOFTDIRTY)) > continue; > up_read(&mm->mmap_sem); > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) { > + put_task_struct(task); > + return -EINTR; > + } Both lack mmput() afaics. Don't you need "goto out_mm" rather then "return" ? In this case you do not need put_task_struct(). Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id 0487D6B0259 for ; Mon, 29 Feb 2016 12:42:38 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id n186so61001298wmn.1 for ; Mon, 29 Feb 2016 09:42:37 -0800 (PST) Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com. [74.125.82.47]) by mx.google.com with ESMTPS id r76si21368406wmg.70.2016.02.29.09.42.33 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 09:42:33 -0800 (PST) Received: by mail-wm0-f47.google.com with SMTP id n186so60996792wmn.1 for ; Mon, 29 Feb 2016 09:42:33 -0800 (PST) From: Michal Hocko Subject: [PATCH] uprobes: wait for mmap_sem for write killable Date: Mon, 29 Feb 2016 18:42:23 +0100 Message-Id: <1456767743-18665-1-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-16-git-send-email-mhocko@kernel.org> References: <1456752417-9626-16-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , Oleg Nesterov , linux-mm@kvack.org, Michal Hocko From: Michal Hocko xol_add_vma needs mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Do not warn in dup_xol_work if __create_xol_area failed due to fatal signal pending because this is usually considered a kernel issue. Cc: Oleg Nesterov Signed-off-by: Michal Hocko --- kernel/events/uprobes.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c index 8eef5f55d3f0..fb4a6bcc88ce 100644 --- a/kernel/events/uprobes.c +++ b/kernel/events/uprobes.c @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) struct vm_area_struct *vma; int ret; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; + if (mm->uprobes_state.xol_area) { ret = -EALREADY; goto fail; @@ -1468,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) if (current->flags & PF_EXITING) return; - if (!__create_xol_area(current->utask->dup_xol_addr)) + if (!__create_xol_area(current->utask->dup_xol_addr) && + !fatal_signal_pending(current) uprobe_warn(current, "dup xol area"); } -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by kanga.kvack.org (Postfix) with ESMTP id CE2BA6B025F for ; Mon, 29 Feb 2016 12:47:41 -0500 (EST) Received: by mail-wm0-f42.google.com with SMTP id n186so123993wmn.1 for ; Mon, 29 Feb 2016 09:47:41 -0800 (PST) Date: Mon, 29 Feb 2016 18:47:39 +0100 From: Michal Hocko Subject: Re: [PATCH 13/18] exec: make exec path waiting for mmap_sem killable Message-ID: <20160229174739.GL16930@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-14-git-send-email-mhocko@kernel.org> <20160229172333.GB3615@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229172333.GB3615@redhat.com> Sender: owner-linux-mm@kvack.org List-ID: To: Oleg Nesterov Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Alexander Viro On Mon 29-02-16 18:23:34, Oleg Nesterov wrote: > On 02/29, Michal Hocko wrote: > > > > @@ -267,7 +267,10 @@ static int __bprm_mm_init(struct linux_binprm *bprm) > > if (!vma) > > return -ENOMEM; > > > > - down_write(&mm->mmap_sem); > > + if (down_write_killable(&mm->mmap_sem)) { > > + err = -EINTR; > > + goto err_free; > > + } > > vma->vm_mm = mm; > > I won't argue, but this looks unnecessary. Nobody else can see this new mm, > down_write() can't block. > > In fact I think we can just remove down_write/up_write here. Except perhaps > there is lockdep_assert_held() somewhere in these paths. This is what I had initially but then I've noticed that mm_alloc() does mm_init(current)->init_new_context(current) so the outside can see this mm AFAICS. Now I guess this shouldn't matter in the real life but the code doesn't seem much harder to follow, the callers are already handling all error paths so I guess it would be better to simply move on this. Or am I misunderstanding the code or missing something? -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by kanga.kvack.org (Postfix) with ESMTP id C57176B0253 for ; Mon, 29 Feb 2016 12:53:41 -0500 (EST) Received: by mail-wm0-f41.google.com with SMTP id l68so446238wml.0 for ; Mon, 29 Feb 2016 09:53:41 -0800 (PST) Date: Mon, 29 Feb 2016 18:53:39 +0100 From: Michal Hocko Subject: Re: [PATCH 07/18] mm, proc: make clear_refs killable Message-ID: <20160229175338.GM16930@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-8-git-send-email-mhocko@kernel.org> <20160229173845.GC3615@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229173845.GC3615@redhat.com> Sender: owner-linux-mm@kvack.org List-ID: To: Oleg Nesterov Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon 29-02-16 18:38:45, Oleg Nesterov wrote: > On 02/29, Michal Hocko wrote: > > > > --- a/fs/proc/task_mmu.c > > +++ b/fs/proc/task_mmu.c > > @@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, > > }; > > > > if (type == CLEAR_REFS_MM_HIWATER_RSS) { > > + if (down_write_killable(&mm->mmap_sem)) { > > + put_task_struct(task); > > + return -EINTR; > > + } > > + > > /* > > * Writing 5 to /proc/pid/clear_refs resets the peak > > * resident set size to this mm's current rss value. > > */ > > - down_write(&mm->mmap_sem); > > reset_mm_hiwater_rss(mm); > > up_write(&mm->mmap_sem); > > goto out_mm; > > @@ -1043,7 +1047,10 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, > > if (!(vma->vm_flags & VM_SOFTDIRTY)) > > continue; > > up_read(&mm->mmap_sem); > > - down_write(&mm->mmap_sem); > > + if (down_write_killable(&mm->mmap_sem)) { > > + put_task_struct(task); > > + return -EINTR; > > + } > > Both lack mmput() afaics. Don't you need "goto out_mm" rather then "return" ? Of course I need! Thanks for catching that. > In this case you do not need put_task_struct(). Why not? Both are after get_proc_task which takes a reference to the task... I will send an updated patch. Thanks! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f48.google.com (mail-pa0-f48.google.com [209.85.220.48]) by kanga.kvack.org (Postfix) with ESMTP id BF2A66B0253 for ; Mon, 29 Feb 2016 12:53:51 -0500 (EST) Received: by mail-pa0-f48.google.com with SMTP id fy10so95520304pac.1 for ; Mon, 29 Feb 2016 09:53:51 -0800 (PST) Received: from mga04.intel.com (mga04.intel.com. [192.55.52.120]) by mx.google.com with ESMTP id g6si44330141pfg.160.2016.02.29.09.53.50 for ; Mon, 29 Feb 2016 09:53:50 -0800 (PST) Date: Tue, 1 Mar 2016 01:52:41 +0800 From: kbuild test robot Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable Message-ID: <201603010150.ildJXKW1%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="SUOF0GtieIMvvwua" Content-Disposition: inline In-Reply-To: <1456767743-18665-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , Oleg Nesterov , linux-mm@kvack.org, Michal Hocko --SUOF0GtieIMvvwua Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on tip/perf/core] [also build test ERROR on v4.5-rc6 next-20160229] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/uprobes-wait-for-mmap_sem-for-write-killable/20160301-014513 config: i386-randconfig-x003-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): In file included from include/linux/linkage.h:4:0, from include/linux/kernel.h:6, from kernel/events/uprobes.c:25: kernel/events/uprobes.c: In function 'xol_add_vma': kernel/events/uprobes.c:1133:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ include/linux/compiler.h:147:30: note: in definition of macro '__trace_if' if (__builtin_constant_p(!!(cond)) ? !!(cond) : \ ^ kernel/events/uprobes.c:1133:2: note: in expansion of macro 'if' if (down_write_killable(&mm->mmap_sem)) ^ kernel/events/uprobes.c: In function 'dup_xol_work': >> kernel/events/uprobes.c:2029:0: error: unterminated argument list invoking macro "if" __initcall(init_uprobes); ^ >> kernel/events/uprobes.c:1473:2: error: expected '(' at end of input if (!__create_xol_area(current->utask->dup_xol_addr) && ^ >> kernel/events/uprobes.c:1473:2: error: expected declaration or statement at end of input kernel/events/uprobes.c: At top level: kernel/events/uprobes.c:961:12: warning: 'unapply_uprobe' defined but not used [-Wunused-function] static int unapply_uprobe(struct uprobe *uprobe, struct mm_struct *mm) ^ kernel/events/uprobes.c:1293:22: warning: 'xol_get_insn_slot' defined but not used [-Wunused-function] static unsigned long xol_get_insn_slot(struct uprobe *uprobe) ^ kernel/events/uprobes.c:1427:28: warning: 'get_utask' defined but not used [-Wunused-function] static struct uprobe_task *get_utask(void) ^ kernel/events/uprobes.c:1434:12: warning: 'dup_utask' defined but not used [-Wunused-function] static int dup_utask(struct task_struct *t, struct uprobe_task *o_utask) ^ kernel/events/uprobes.c:1462:13: warning: 'uprobe_warn' defined but not used [-Wunused-function] static void uprobe_warn(struct task_struct *t, const char *msg) ^ kernel/events/uprobes.c:1468:13: warning: 'dup_xol_work' defined but not used [-Wunused-function] static void dup_xol_work(struct callback_head *work) ^ cc1: some warnings being treated as errors vim +/if +2029 kernel/events/uprobes.c 0326f5a9 kernel/events/uprobes.c Srikar Dronamraju 2012-03-13 2023 32cdba1e kernel/events/uprobes.c Oleg Nesterov 2012-11-14 2024 if (percpu_init_rwsem(&dup_mmap_sem)) 32cdba1e kernel/events/uprobes.c Oleg Nesterov 2012-11-14 2025 return -ENOMEM; 32cdba1e kernel/events/uprobes.c Oleg Nesterov 2012-11-14 2026 0326f5a9 kernel/events/uprobes.c Srikar Dronamraju 2012-03-13 2027 return register_die_notifier(&uprobe_exception_nb); 2b144498 kernel/uprobes.c Srikar Dronamraju 2012-02-09 2028 } 736e89d9 kernel/events/uprobes.c Oleg Nesterov 2013-10-31 @2029 __initcall(init_uprobes); :::::: The code at line 2029 was first introduced by commit :::::: 736e89d9f782a7dd9a38ecda13b2db916fa72f33 uprobes: Kill module_init() and module_exit() :::::: TO: Oleg Nesterov :::::: CC: Oleg Nesterov --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --SUOF0GtieIMvvwua Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 --SUOF0GtieIMvvwua-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f42.google.com (mail-qg0-f42.google.com [209.85.192.42]) by kanga.kvack.org (Postfix) with ESMTP id C8BB3828E1 for ; Mon, 29 Feb 2016 12:54:26 -0500 (EST) Received: by mail-qg0-f42.google.com with SMTP id y9so122946037qgd.3 for ; Mon, 29 Feb 2016 09:54:26 -0800 (PST) Date: Mon, 29 Feb 2016 18:54:18 +0100 From: Oleg Nesterov Subject: Re: [PATCH 08/18] mm, fork: make dup_mmap wait for mmap_sem for write killable Message-ID: <20160229175418.GD3615@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-9-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456752417-9626-9-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29, Michal Hocko wrote: > > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -413,7 +413,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) > unsigned long charge; > > uprobe_start_dup_mmap(); > - down_write(&oldmm->mmap_sem); > + if (down_write_killable(&oldmm->mmap_sem)) { > + uprobe_end_dup_mmap(); > + return -EINTR; > + } This is really cosmetic and subjective, I won't insist if you prefer it this way. But perhaps it makes sense to add another "fail" label above uprobe_end_dup_mmap() we already have... IMO it is always better to avoid duplicating when it comes to "unlock". Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f51.google.com (mail-pa0-f51.google.com [209.85.220.51]) by kanga.kvack.org (Postfix) with ESMTP id 76834828E1 for ; Mon, 29 Feb 2016 12:55:11 -0500 (EST) Received: by mail-pa0-f51.google.com with SMTP id fl4so95707250pad.0 for ; Mon, 29 Feb 2016 09:55:11 -0800 (PST) Received: from mga01.intel.com (mga01.intel.com. [192.55.52.88]) by mx.google.com with ESMTP id s13si6245338par.239.2016.02.29.09.55.10 for ; Mon, 29 Feb 2016 09:55:10 -0800 (PST) Date: Tue, 1 Mar 2016 01:53:45 +0800 From: kbuild test robot Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable Message-ID: <201603010156.6yX8Uedc%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="y0ulUmNC+osPPQO6" Content-Disposition: inline In-Reply-To: <1456767743-18665-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , Oleg Nesterov , linux-mm@kvack.org, Michal Hocko --y0ulUmNC+osPPQO6 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on tip/perf/core] [also build test ERROR on v4.5-rc6 next-20160229] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/uprobes-wait-for-mmap_sem-for-write-killable/20160301-014513 config: x86_64-randconfig-x019-201609 (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): kernel/events/uprobes.c: In function 'xol_add_vma': kernel/events/uprobes.c:1133:6: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) ^ kernel/events/uprobes.c: In function 'dup_xol_work': >> kernel/events/uprobes.c:1475:3: error: expected ')' before 'uprobe_warn' uprobe_warn(current, "dup xol area"); ^ >> kernel/events/uprobes.c:1476:1: error: expected expression before '}' token } ^ cc1: some warnings being treated as errors vim +1475 kernel/events/uprobes.c aa59c53f Oleg Nesterov 2013-10-13 1469 { aa59c53f Oleg Nesterov 2013-10-13 1470 if (current->flags & PF_EXITING) aa59c53f Oleg Nesterov 2013-10-13 1471 return; aa59c53f Oleg Nesterov 2013-10-13 1472 6b584cb3 Michal Hocko 2016-02-29 1473 if (!__create_xol_area(current->utask->dup_xol_addr) && 6b584cb3 Michal Hocko 2016-02-29 1474 !fatal_signal_pending(current) aa59c53f Oleg Nesterov 2013-10-13 @1475 uprobe_warn(current, "dup xol area"); aa59c53f Oleg Nesterov 2013-10-13 @1476 } aa59c53f Oleg Nesterov 2013-10-13 1477 e78aebfd Anton Arapov 2013-04-03 1478 /* b68e0749 Oleg Nesterov 2013-10-13 1479 * Called in context of a new clone/fork from copy_process. :::::: The code at line 1475 was first introduced by commit :::::: aa59c53fd4599c91ccf9629af0c2777b89929076 uprobes: Change uprobe_copy_process() to dup xol_area :::::: TO: Oleg Nesterov :::::: CC: Oleg Nesterov --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --y0ulUmNC+osPPQO6 Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 JIOPglgBAA== --y0ulUmNC+osPPQO6-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f179.google.com (mail-qk0-f179.google.com [209.85.220.179]) by kanga.kvack.org (Postfix) with ESMTP id 316F6828E1 for ; Mon, 29 Feb 2016 12:58:25 -0500 (EST) Received: by mail-qk0-f179.google.com with SMTP id s5so59367566qkd.0 for ; Mon, 29 Feb 2016 09:58:25 -0800 (PST) Date: Mon, 29 Feb 2016 18:58:17 +0100 From: Oleg Nesterov Subject: Re: [PATCH 07/18] mm, proc: make clear_refs killable Message-ID: <20160229175816.GE3615@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-8-git-send-email-mhocko@kernel.org> <20160229173845.GC3615@redhat.com> <20160229175338.GM16930@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229175338.GM16930@dhcp22.suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner On 02/29, Michal Hocko wrote: > > On Mon 29-02-16 18:38:45, Oleg Nesterov wrote: > > > In this case you do not need put_task_struct(). > > Why not? Both are after get_proc_task which takes a reference to the > task... Yes, but we already have put_task_struct(task) in the "out_mm" path, so "goto out_mm" should work just fine? Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by kanga.kvack.org (Postfix) with ESMTP id 9FC8D828DF for ; Mon, 29 Feb 2016 13:01:35 -0500 (EST) Received: by mail-wm0-f48.google.com with SMTP id l68so684974wml.1 for ; Mon, 29 Feb 2016 10:01:35 -0800 (PST) Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com. [74.125.82.41]) by mx.google.com with ESMTPS id r8si33312598wjq.3.2016.02.29.10.01.34 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 10:01:34 -0800 (PST) Received: by mail-wm0-f41.google.com with SMTP id l68so2377068wml.0 for ; Mon, 29 Feb 2016 10:01:34 -0800 (PST) From: Michal Hocko Subject: [PATCH] mm, proc: make clear_refs killable Date: Mon, 29 Feb 2016 18:56:27 +0100 Message-Id: <1456768587-24893-1-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-8-git-send-email-mhocko@kernel.org> References: <1456752417-9626-8-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Michal Hocko , Oleg Nesterov , Petr Cermak From: Michal Hocko CLEAR_REFS_MM_HIWATER_RSS and CLEAR_REFS_SOFT_DIRTY are relying on mmap_sem for write. If the waiting task gets killed by the oom killer and it would operate on the current's mm it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. This will also expedite the return to the userspace and do_exit even if the mm is remote. Cc: Oleg Nesterov Cc: Petr Cermak Signed-off-by: Michal Hocko --- fs/proc/task_mmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 9df431642042..bb117356a04e 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, }; if (type == CLEAR_REFS_MM_HIWATER_RSS) { + if (down_write_killable(&mm->mmap_sem)) { + count = -EINTR; + goto out_mm; + } + /* * Writing 5 to /proc/pid/clear_refs resets the peak * resident set size to this mm's current rss value. */ - down_write(&mm->mmap_sem); reset_mm_hiwater_rss(mm); up_write(&mm->mmap_sem); goto out_mm; @@ -1043,7 +1047,10 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, if (!(vma->vm_flags & VM_SOFTDIRTY)) continue; up_read(&mm->mmap_sem); - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) { + count = -EINTR; + goto out_mm; + } for (vma = mm->mmap; vma; vma = vma->vm_next) { vma->vm_flags &= ~VM_SOFTDIRTY; vma_set_page_prot(vma); -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by kanga.kvack.org (Postfix) with ESMTP id CE859828E6 for ; Mon, 29 Feb 2016 13:02:02 -0500 (EST) Received: by mail-wm0-f42.google.com with SMTP id n186so728322wmn.1 for ; Mon, 29 Feb 2016 10:02:02 -0800 (PST) Date: Mon, 29 Feb 2016 19:02:00 +0100 From: Michal Hocko Subject: Re: [PATCH 07/18] mm, proc: make clear_refs killable Message-ID: <20160229180200.GO16930@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-8-git-send-email-mhocko@kernel.org> <20160229173845.GC3615@redhat.com> <20160229175338.GM16930@dhcp22.suse.cz> <20160229175816.GE3615@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229175816.GE3615@redhat.com> Sender: owner-linux-mm@kvack.org List-ID: To: Oleg Nesterov Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Mon 29-02-16 18:58:17, Oleg Nesterov wrote: > On 02/29, Michal Hocko wrote: > > > > On Mon 29-02-16 18:38:45, Oleg Nesterov wrote: > > > > > In this case you do not need put_task_struct(). > > > > Why not? Both are after get_proc_task which takes a reference to the > > task... > > Yes, but we already have put_task_struct(task) in the "out_mm" path, so > "goto out_mm" should work just fine? OK, got what you mean now. That's what I did and is on the way. I just thought you mean that put_task_struct is implicit for other reason. -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by kanga.kvack.org (Postfix) with ESMTP id 93EB26B0005 for ; Mon, 29 Feb 2016 13:07:19 -0500 (EST) Received: by mail-wm0-f53.google.com with SMTP id l68so1028344wml.0 for ; Mon, 29 Feb 2016 10:07:19 -0800 (PST) Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com. [74.125.82.50]) by mx.google.com with ESMTPS id 17si33296870wjv.159.2016.02.29.10.07.18 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 10:07:18 -0800 (PST) Received: by mail-wm0-f50.google.com with SMTP id n186so950763wmn.1 for ; Mon, 29 Feb 2016 10:07:18 -0800 (PST) From: Michal Hocko Subject: [PATCH] mm, fork: make dup_mmap wait for mmap_sem for write killable Date: Mon, 29 Feb 2016 19:07:12 +0100 Message-Id: <1456769232-27592-1-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-9-git-send-email-mhocko@kernel.org> References: <1456752417-9626-9-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: Andrew Morton , linux-mm@kvack.org, Michal Hocko , Ingo Molnar , Peter Zijlstra , Oleg Nesterov , Konstantin Khlebnikov From: Michal Hocko dup_mmap needs to lock current's mm mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Oleg Nesterov Cc: Konstantin Khlebnikov Signed-off-by: Michal Hocko --- kernel/fork.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/fork.c b/kernel/fork.c index d277e83ed3e0..139968026b76 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -413,7 +413,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) unsigned long charge; uprobe_start_dup_mmap(); - down_write(&oldmm->mmap_sem); + if (down_write_killable(&oldmm->mmap_sem)) { + retval = -EINTR; + goto fail_uprobe_end; + } flush_cache_dup_mm(oldmm); uprobe_dup_mmap(oldmm, mm); /* @@ -525,6 +528,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) up_write(&mm->mmap_sem); flush_tlb_mm(oldmm); up_write(&oldmm->mmap_sem); +fail_uprobe_end: uprobe_end_dup_mmap(); return retval; fail_nomem_anon_vma_fork: -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f52.google.com (mail-qg0-f52.google.com [209.85.192.52]) by kanga.kvack.org (Postfix) with ESMTP id 163906B0254 for ; Mon, 29 Feb 2016 13:10:30 -0500 (EST) Received: by mail-qg0-f52.google.com with SMTP id y9so123372264qgd.3 for ; Mon, 29 Feb 2016 10:10:30 -0800 (PST) Date: Mon, 29 Feb 2016 19:10:19 +0100 From: Oleg Nesterov Subject: Re: [PATCH 13/18] exec: make exec path waiting for mmap_sem killable Message-ID: <20160229181018.GF3615@redhat.com> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-14-git-send-email-mhocko@kernel.org> <20160229172333.GB3615@redhat.com> <20160229174739.GL16930@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229174739.GL16930@dhcp22.suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Alexander Viro On 02/29, Michal Hocko wrote: > > On Mon 29-02-16 18:23:34, Oleg Nesterov wrote: > > On 02/29, Michal Hocko wrote: > > > > > > @@ -267,7 +267,10 @@ static int __bprm_mm_init(struct linux_binprm *bprm) > > > if (!vma) > > > return -ENOMEM; > > > > > > - down_write(&mm->mmap_sem); > > > + if (down_write_killable(&mm->mmap_sem)) { > > > + err = -EINTR; > > > + goto err_free; > > > + } > > > vma->vm_mm = mm; > > > > I won't argue, but this looks unnecessary. Nobody else can see this new mm, > > down_write() can't block. > > > > In fact I think we can just remove down_write/up_write here. Except perhaps > > there is lockdep_assert_held() somewhere in these paths. > > This is what I had initially but then I've noticed that mm_alloc() does > mm_init(current)->init_new_context(current) yes, and init_new_context() is arch dependant... > code doesn't seem much harder to follow, the callers are already > handling all error paths so I guess it would be better to simply move on > this. Yes, agreed, please forget. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f44.google.com (mail-qg0-f44.google.com [209.85.192.44]) by kanga.kvack.org (Postfix) with ESMTP id 79E596B0257 for ; Mon, 29 Feb 2016 13:11:09 -0500 (EST) Received: by mail-qg0-f44.google.com with SMTP id y89so121982971qge.2 for ; Mon, 29 Feb 2016 10:11:09 -0800 (PST) Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id i64si26804523qhc.61.2016.02.29.10.11.08 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 10:11:08 -0800 (PST) Date: Mon, 29 Feb 2016 19:11:06 +0100 From: Oleg Nesterov Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable Message-ID: <20160229181105.GG3615@redhat.com> References: <1456752417-9626-16-git-send-email-mhocko@kernel.org> <1456767743-18665-1-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456767743-18665-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Michal Hocko On 02/29, Michal Hocko wrote: > > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) > struct vm_area_struct *vma; > int ret; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return -EINTR; > + > if (mm->uprobes_state.xol_area) { > ret = -EALREADY; > goto fail; > @@ -1468,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) > if (current->flags & PF_EXITING) > return; > > - if (!__create_xol_area(current->utask->dup_xol_addr)) > + if (!__create_xol_area(current->utask->dup_xol_addr) && > + !fatal_signal_pending(current) > uprobe_warn(current, "dup xol area"); > } Looks good, thanks. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qk0-f169.google.com (mail-qk0-f169.google.com [209.85.220.169]) by kanga.kvack.org (Postfix) with ESMTP id 567A56B0254 for ; Mon, 29 Feb 2016 13:16:28 -0500 (EST) Received: by mail-qk0-f169.google.com with SMTP id o6so59779140qkc.2 for ; Mon, 29 Feb 2016 10:16:28 -0800 (PST) Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id u92si26916811qge.31.2016.02.29.10.16.27 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 10:16:27 -0800 (PST) Date: Mon, 29 Feb 2016 19:16:24 +0100 From: Oleg Nesterov Subject: Re: [PATCH] mm, proc: make clear_refs killable Message-ID: <20160229181623.GH3615@redhat.com> References: <1456752417-9626-8-git-send-email-mhocko@kernel.org> <1456768587-24893-1-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1456768587-24893-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Michal Hocko , Petr Cermak On 02/29, Michal Hocko wrote: > > --- a/fs/proc/task_mmu.c > +++ b/fs/proc/task_mmu.c > @@ -1027,11 +1027,15 @@ static ssize_t clear_refs_write(struct file *file, const char __user *buf, > }; > > if (type == CLEAR_REFS_MM_HIWATER_RSS) { > + if (down_write_killable(&mm->mmap_sem)) { > + count = -EINTR; > + goto out_mm; > + } > + We do not even need to change count, userspace won't see it anyway. But I agree it look more clean this way. I believe the patch is fine. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by kanga.kvack.org (Postfix) with ESMTP id AAB1F6B0253 for ; Mon, 29 Feb 2016 13:22:58 -0500 (EST) Received: by mail-wm0-f49.google.com with SMTP id l68so1479007wml.1 for ; Mon, 29 Feb 2016 10:22:58 -0800 (PST) Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com. [74.125.82.48]) by mx.google.com with ESMTPS id h82si21525843wmf.37.2016.02.29.10.22.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 10:22:57 -0800 (PST) Received: by mail-wm0-f48.google.com with SMTP id l68so3191599wml.0 for ; Mon, 29 Feb 2016 10:22:57 -0800 (PST) Date: Mon, 29 Feb 2016 19:22:56 +0100 From: Michal Hocko Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable Message-ID: <20160229182256.GQ16930@dhcp22.suse.cz> References: <1456752417-9626-16-git-send-email-mhocko@kernel.org> <1456767743-18665-1-git-send-email-mhocko@kernel.org> <20160229181105.GG3615@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229181105.GG3615@redhat.com> Sender: owner-linux-mm@kvack.org List-ID: To: Oleg Nesterov Cc: LKML , Andrew Morton , linux-mm@kvack.org On Mon 29-02-16 19:11:06, Oleg Nesterov wrote: > On 02/29, Michal Hocko wrote: > > > > --- a/kernel/events/uprobes.c > > +++ b/kernel/events/uprobes.c > > @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) > > struct vm_area_struct *vma; > > int ret; > > > > - down_write(&mm->mmap_sem); > > + if (down_write_killable(&mm->mmap_sem)) > > + return -EINTR; > > + > > if (mm->uprobes_state.xol_area) { > > ret = -EALREADY; > > goto fail; > > @@ -1468,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) > > if (current->flags & PF_EXITING) > > return; > > > > - if (!__create_xol_area(current->utask->dup_xol_addr)) > > + if (!__create_xol_area(current->utask->dup_xol_addr) && > > + !fatal_signal_pending(current) > > uprobe_warn(current, "dup xol area"); > > } > > Looks good, thanks. Can I consider this your Acked-by? -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qg0-f41.google.com (mail-qg0-f41.google.com [209.85.192.41]) by kanga.kvack.org (Postfix) with ESMTP id D1FDF6B0009 for ; Mon, 29 Feb 2016 13:38:59 -0500 (EST) Received: by mail-qg0-f41.google.com with SMTP id y9so124100052qgd.3 for ; Mon, 29 Feb 2016 10:38:59 -0800 (PST) Received: from mx1.redhat.com (mx1.redhat.com. [209.132.183.28]) by mx.google.com with ESMTPS id k93si26985882qgf.62.2016.02.29.10.38.59 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 29 Feb 2016 10:38:59 -0800 (PST) Date: Mon, 29 Feb 2016 19:38:56 +0100 From: Oleg Nesterov Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable Message-ID: <20160229183856.GA3869@redhat.com> References: <1456752417-9626-16-git-send-email-mhocko@kernel.org> <1456767743-18665-1-git-send-email-mhocko@kernel.org> <20160229181105.GG3615@redhat.com> <20160229182256.GQ16930@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160229182256.GQ16930@dhcp22.suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org On 02/29, Michal Hocko wrote: > > On Mon 29-02-16 19:11:06, Oleg Nesterov wrote: > > On 02/29, Michal Hocko wrote: > > > > > > --- a/kernel/events/uprobes.c > > > +++ b/kernel/events/uprobes.c > > > @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) > > > struct vm_area_struct *vma; > > > int ret; > > > > > > - down_write(&mm->mmap_sem); > > > + if (down_write_killable(&mm->mmap_sem)) > > > + return -EINTR; > > > + > > > if (mm->uprobes_state.xol_area) { > > > ret = -EALREADY; > > > goto fail; > > > @@ -1468,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) > > > if (current->flags & PF_EXITING) > > > return; > > > > > > - if (!__create_xol_area(current->utask->dup_xol_addr)) > > > + if (!__create_xol_area(current->utask->dup_xol_addr) && > > > + !fatal_signal_pending(current) > > > uprobe_warn(current, "dup xol area"); > > > } > > > > Looks good, thanks. > > Can I consider this your Acked-by? Yes, feel free to add. I forgot to add it. Oleg. -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f179.google.com (mail-pf0-f179.google.com [209.85.192.179]) by kanga.kvack.org (Postfix) with ESMTP id D909F6B0005 for ; Mon, 29 Feb 2016 15:14:04 -0500 (EST) Received: by mail-pf0-f179.google.com with SMTP id 4so19699757pfd.1 for ; Mon, 29 Feb 2016 12:14:04 -0800 (PST) Received: from mga03.intel.com (mga03.intel.com. [134.134.136.65]) by mx.google.com with ESMTP id rz3si44925130pab.115.2016.02.29.12.14.03 for ; Mon, 29 Feb 2016 12:14:04 -0800 (PST) Date: Tue, 1 Mar 2016 04:13:04 +0800 From: kbuild test robot Subject: Re: [PATCH] mm, fork: make dup_mmap wait for mmap_sem for write killable Message-ID: <201603010420.vbavqtz5%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="/04w6evG8XlLl3ft" Content-Disposition: inline In-Reply-To: <1456769232-27592-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Michal Hocko , Ingo Molnar , Peter Zijlstra , Oleg Nesterov , Konstantin Khlebnikov --/04w6evG8XlLl3ft Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on v4.5-rc6] [also build test ERROR on next-20160229] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/mm-fork-make-dup_mmap-wait-for-mmap_sem-for-write-killable/20160301-021107 config: x86_64-lkp (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): kernel/fork.c: In function 'dup_mmap': >> kernel/fork.c:405:2: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&oldmm->mmap_sem)) { ^ cc1: some warnings being treated as errors vim +/down_write_killable +405 kernel/fork.c 399 struct vm_area_struct *mpnt, *tmp, *prev, **pprev; 400 struct rb_node **rb_link, *rb_parent; 401 int retval; 402 unsigned long charge; 403 404 uprobe_start_dup_mmap(); > 405 if (down_write_killable(&oldmm->mmap_sem)) { 406 retval = -EINTR; 407 goto fail_uprobe_end; 408 } --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --/04w6evG8XlLl3ft Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 5nVGv7BC/h9F+ux/fGkBAA== --/04w6evG8XlLl3ft-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pa0-f42.google.com (mail-pa0-f42.google.com [209.85.220.42]) by kanga.kvack.org (Postfix) with ESMTP id 235496B0257 for ; Mon, 29 Feb 2016 15:27:00 -0500 (EST) Received: by mail-pa0-f42.google.com with SMTP id fl4so97772092pad.0 for ; Mon, 29 Feb 2016 12:27:00 -0800 (PST) Received: from mga11.intel.com (mga11.intel.com. [192.55.52.93]) by mx.google.com with ESMTP id zv5si44978907pac.220.2016.02.29.12.26.59 for ; Mon, 29 Feb 2016 12:26:59 -0800 (PST) Date: Tue, 1 Mar 2016 04:25:11 +0800 From: kbuild test robot Subject: Re: [PATCH] mm, proc: make clear_refs killable Message-ID: <201603010429.Etlkooix%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="7AUc2qLy4jB3hD7Z" Content-Disposition: inline In-Reply-To: <1456768587-24893-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , Andrew Morton , linux-mm@kvack.org, Michal Hocko , Oleg Nesterov , Petr Cermak --7AUc2qLy4jB3hD7Z Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on v4.5-rc6] [also build test ERROR on next-20160229] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/mm-proc-make-clear_refs-killable/20160301-020426 config: x86_64-lkp (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): fs/proc/task_mmu.c: In function 'clear_refs_write': >> fs/proc/task_mmu.c:1016:4: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(&mm->mmap_sem)) { ^ cc1: some warnings being treated as errors vim +/down_write_killable +1016 fs/proc/task_mmu.c 1010 .test_walk = clear_refs_test_walk, 1011 .mm = mm, 1012 .private = &cp, 1013 }; 1014 1015 if (type == CLEAR_REFS_MM_HIWATER_RSS) { > 1016 if (down_write_killable(&mm->mmap_sem)) { 1017 count = -EINTR; 1018 goto out_mm; 1019 } --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --7AUc2qLy4jB3hD7Z Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 5nVGv7BC/h9F+ux/fGkBAA== --7AUc2qLy4jB3hD7Z-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by kanga.kvack.org (Postfix) with ESMTP id 5ECAD6B007E for ; Tue, 8 Mar 2016 14:16:15 -0500 (EST) Received: by mail-wm0-f48.google.com with SMTP id p65so163244513wmp.1 for ; Tue, 08 Mar 2016 11:16:15 -0800 (PST) Date: Tue, 8 Mar 2016 11:15:50 -0800 From: Davidlohr Bueso Subject: Re: [PATCH 09/18] ipc, shm: make shmem attach/detach wait for mmap_sem killable Message-ID: <20160308191550.GA4404@linux-uzut.site> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-10-git-send-email-mhocko@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <1456752417-9626-10-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian K?nig , Daniel Vetter , Dave Hansen , David Airlie , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On Mon, 29 Feb 2016, Michal Hocko wrote: >From: Michal Hocko > >shmat and shmdt rely on mmap_sem for write. If the waiting task >gets killed by the oom killer it would block oom_reaper from >asynchronous address space reclaim and reduce the chances of timely >OOM resolving. Wait for the lock in the killable mode and return with >EINTR if the task got killed while waiting. > >Cc: Davidlohr Bueso >Cc: Hugh Dickins >Signed-off-by: Michal Hocko I have no objection to this perse, just one comment below. Acked-by: Davidlohr Bueso >--- > ipc/shm.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > >diff --git a/ipc/shm.c b/ipc/shm.c >index 331fc1b0b3c7..b8cfa05940d2 100644 >--- a/ipc/shm.c >+++ b/ipc/shm.c >@@ -1200,7 +1200,11 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, > if (err) > goto out_fput; > >- down_write(¤t->mm->mmap_sem); >+ if (down_write_killable(¤t->mm->mmap_sem)) { >+ err = -EINVAL; >+ goto out_fput; >+ } This should be EINTR, no? Thanks, Davidlohr >+ > if (addr && !(shmflg & SHM_REMAP)) { > err = -EINVAL; > if (addr + size < addr) >@@ -1271,7 +1275,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr) > if (addr & ~PAGE_MASK) > return retval; > >- down_write(&mm->mmap_sem); >+ if (down_write_killable(&mm->mmap_sem)) >+ return -EINTR; > > /* > * This function tries to be smart and unmap shm segments that >-- >2.7.0 > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id BA37B6B0005 for ; Wed, 9 Mar 2016 05:16:54 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id l68so63937438wml.1 for ; Wed, 09 Mar 2016 02:16:54 -0800 (PST) Date: Wed, 9 Mar 2016 11:16:52 +0100 From: Michal Hocko Subject: Re: [PATCH 09/18] ipc, shm: make shmem attach/detach wait for mmap_sem killable Message-ID: <20160309101651.GE27018@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-10-git-send-email-mhocko@kernel.org> <20160308191550.GA4404@linux-uzut.site> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160308191550.GA4404@linux-uzut.site> Sender: owner-linux-mm@kvack.org List-ID: To: Davidlohr Bueso Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian K?nig , Daniel Vetter , Dave Hansen , David Airlie , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Tue 08-03-16 11:15:50, Davidlohr Bueso wrote: > On Mon, 29 Feb 2016, Michal Hocko wrote: > > >From: Michal Hocko > > > >shmat and shmdt rely on mmap_sem for write. If the waiting task > >gets killed by the oom killer it would block oom_reaper from > >asynchronous address space reclaim and reduce the chances of timely > >OOM resolving. Wait for the lock in the killable mode and return with > >EINTR if the task got killed while waiting. > > > >Cc: Davidlohr Bueso > >Cc: Hugh Dickins > >Signed-off-by: Michal Hocko > > I have no objection to this perse, just one comment below. > > Acked-by: Davidlohr Bueso Thanks! [...] > >- down_write(¤t->mm->mmap_sem); > >+ if (down_write_killable(¤t->mm->mmap_sem)) { > >+ err = -EINVAL; > >+ goto out_fput; > >+ } > > This should be EINTR, no? Of course. Thanks for catching that. -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id DD8BC6B0005 for ; Wed, 9 Mar 2016 05:19:50 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id p65so64041231wmp.0 for ; Wed, 09 Mar 2016 02:19:50 -0800 (PST) Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com. [74.125.82.45]) by mx.google.com with ESMTPS id h83si9805900wmi.37.2016.03.09.02.19.49 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 09 Mar 2016 02:19:49 -0800 (PST) Received: by mail-wm0-f45.google.com with SMTP id p65so185538830wmp.1 for ; Wed, 09 Mar 2016 02:19:49 -0800 (PST) From: Michal Hocko Subject: [PATCH] ipc, shm: make shmem attach/detach wait for mmap_sem killable Date: Wed, 9 Mar 2016 11:19:38 +0100 Message-Id: <1457518778-32235-1-git-send-email-mhocko@kernel.org> In-Reply-To: <1456752417-9626-10-git-send-email-mhocko@kernel.org> References: <1456752417-9626-10-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: LKML Cc: linux-mm@kvack.org, Davidlohr Bueso , Michal Hocko , Hugh Dickins From: Michal Hocko shmat and shmdt rely on mmap_sem for write. If the waiting task gets killed by the oom killer it would block oom_reaper from asynchronous address space reclaim and reduce the chances of timely OOM resolving. Wait for the lock in the killable mode and return with EINTR if the task got killed while waiting. Cc: Hugh Dickins Signed-off-by: Michal Hocko Acked-by: Davidlohr Bueso --- ipc/shm.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/ipc/shm.c b/ipc/shm.c index 331fc1b0b3c7..13282510bc0d 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -1200,7 +1200,11 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, if (err) goto out_fput; - down_write(¤t->mm->mmap_sem); + if (down_write_killable(¤t->mm->mmap_sem)) { + err = -EINTR; + goto out_fput; + } + if (addr && !(shmflg & SHM_REMAP)) { err = -EINVAL; if (addr + size < addr) @@ -1271,7 +1275,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr) if (addr & ~PAGE_MASK) return retval; - down_write(&mm->mmap_sem); + if (down_write_killable(&mm->mmap_sem)) + return -EINTR; /* * This function tries to be smart and unmap shm segments that -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f179.google.com (mail-pf0-f179.google.com [209.85.192.179]) by kanga.kvack.org (Postfix) with ESMTP id 0228B6B0005 for ; Wed, 9 Mar 2016 05:47:40 -0500 (EST) Received: by mail-pf0-f179.google.com with SMTP id u190so8071981pfb.3 for ; Wed, 09 Mar 2016 02:47:39 -0800 (PST) Received: from mga09.intel.com (mga09.intel.com. [134.134.136.24]) by mx.google.com with ESMTP id 86si11751091pfr.63.2016.03.09.02.47.38 for ; Wed, 09 Mar 2016 02:47:39 -0800 (PST) Date: Wed, 9 Mar 2016 18:46:39 +0800 From: kbuild test robot Subject: Re: [PATCH] ipc, shm: make shmem attach/detach wait for mmap_sem killable Message-ID: <201603091857.R9DA5diH%fengguang.wu@intel.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="fUYQa+Pmc3FrFX/N" Content-Disposition: inline In-Reply-To: <1457518778-32235-1-git-send-email-mhocko@kernel.org> Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: kbuild-all@01.org, LKML , linux-mm@kvack.org, Davidlohr Bueso , Michal Hocko , Hugh Dickins --fUYQa+Pmc3FrFX/N Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Michal, [auto build test ERROR on v4.5-rc7] [also build test ERROR on next-20160309] [if your patch is applied to the wrong git tree, please drop us a note to help improving the system] url: https://github.com/0day-ci/linux/commits/Michal-Hocko/ipc-shm-make-shmem-attach-detach-wait-for-mmap_sem-killable/20160309-182238 config: xtensa-allyesconfig (attached as .config) reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=xtensa All errors (new ones prefixed by >>): ipc/shm.c: In function 'do_shmat': >> ipc/shm.c:1203:2: error: implicit declaration of function 'down_write_killable' [-Werror=implicit-function-declaration] if (down_write_killable(¤t->mm->mmap_sem)) { ^ cc1: some warnings being treated as errors vim +/down_write_killable +1203 ipc/shm.c 1197 sfd->vm_ops = NULL; 1198 1199 err = security_mmap_file(file, prot, flags); 1200 if (err) 1201 goto out_fput; 1202 > 1203 if (down_write_killable(¤t->mm->mmap_sem)) { 1204 err = -EINTR; 1205 goto out_fput; 1206 } --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation --fUYQa+Pmc3FrFX/N Content-Type: application/octet-stream Content-Disposition: attachment; filename=".config.gz" Content-Transfer-Encoding: base64 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 fjs/Sq+twjyVTYMrPvYON0vZr9S66OG+u9qFphZqZ+byMBFSSu5yR0UG2Slwc3E5cL6c3wtR de813ynll6j6p9RLTQHXM7Boa1r28Re6aUxsGTTdYOxAH8TIrRIobikyG8/ZEfJsMh/zNLfI mE19j6encyPNzqhhGuf5z/1pbdpJzNgWFqQXVGJi2iikKaKYF/R87k+opQOM85nHx/1sSWsB w3y6oDtRCKz83hcRdrH798fHf7SezT+6ckMaH9jukvwySk81DjdNiprQzX5CGXqtQxYmwQAu 56e7f3ojj//FE/coEp+qLOP7AnKtc/v2/PIpenh9e3n44x1NWphNiPI8oG5Of7t9Pf+WwYPn +1H2/Pxj9Cvk+J/Rn/0bX8kbaS7JdHKZv37elGRp2Sex+/sdNDchn3fRUy2mM6bsbLy5lTYV HIkNqTab67p0aTYKdyoukjSs10iyQ61Jm83Ev1hcbc+339++2S2GCvrYI3zvjw/3D2//2JzR tqFbo9sIJ1savxVW/DSGebpg+gqm/f41KfSfN/Ss9Xi+fX1/OT+en95G708Pb9bHnI6tLzel 33eXn2jo+rQ4tHm1n49hyrdUdnycO8GhqDEeBuyIgugLfM0JbYogA7FAHUcEVSRWzKmjRNjO 3nrrMXuUMJ/4Hj17Q4BKG0hPqEIE6fmc6oybyg8qaONgPKYLDbRq8qgQopo2vd9L8KqmmyBf ROD5VLOsq3rMnPF1E4XlQ7Cpmde9skIzewJUkLM/5hjorZMJPbNoQjGZ0mMACVDTiu790mCL al4ATGf0SHAvZt7SJwPwEBbZlJgmfmzTFexgWUmnkN14taJ9QS9w8mBDfawGG+gwY2dTI2fc lHmMsXgn3NvpZMbsKvWIxycGhIEkDcsKSaayQo/Fu+8PT0M1pjpNEYIq5igq4VFHj21dNl1M 8p814NrWeovQpTVJV8v1vmrcZOVG4kJi88WP5zeQLg/WWhYnY9U31Cz1cn5FUWQ3wTqvmDko GyjMvRtMrp43Y+kJB8SMHQmrtLGQVBhfRwI2WVgf1Hg9RZ3KnqKwnJvZdMxtJ5/QqNDu+WKy mlycobw8//3w6JwnsjQKaoyKHLfUNbA4rWaXUdacH3+gBuFs7zw7rcZzNuDzakwPoRr44FRk yDQd1UWzZom2SotNVVIbK0SbksZ/kXxxnRg8aBjFAxoc8liHKlZ3yPN4tH55uP/q2H1D1hBW oOGJ+vtAtBHo+Jrl8ez0Z33IU+SHleCMcg/t9yEvN2xCpEpLuo6ke/6QMH2rIaSOELYZ+jG3 +MOsEguPnkQjqk8POJjmGw5I168TjuGeMLoh4Kj0r0p9nSLIwyBLRPtPYNv+slZ4RsQhWI9a AA8Dk9ZXuBNNZHydtxuMih2c2qL+7F06HSgi45Z5OkgrDB7IYnKoJW0jL9jSY84u9lgZNtTk CkZo3Mh7bHXJjdoS6toUEm0S7GJmt4AgCMEDt+EC8FjjcIxx5z/nlIvtgxrX2+uReP/jVW7x X/qUdsnAI35gJNYomCxmuHsaZnsZTZ5xYNgSvdGSpzI0SBSXnJxVobfUdmos1AgSq1PQ+ssi l4FjBkjwIOnY0pG4brzBskSVWZLu6FrmZj+nTqK5WQni3RGaLkN/XHF511QG/ACy05ES4Tt5 /s/wzfyZnR8tUaMuIXigQGGbmzW50KdOumGeoB5Jt9Pxwq49BnzVRtoEDa83xR5dI6c0HzwT YY5+crpHnqtbhH0nPL+goy1p7//4DIuC5xfbxUVNN/2b7b6IcPcou+xgWwaoymyU9F9tR7pO 8VkYieFHtHbir1MyBxQHZs4qk/JOSBmWDamo3IS7SvjI64+74oQFj1K5qM0xIx9B5SokzOU/ QqLc16HTjS1616EhPjqEOzjp0Y2TVzhRGAKufBtXvsx9EVpx4n2OPx++voMqgHdirLNS5CEC C1Jtvqml+6mOpvJ6QKN9KbX40ZfPQgBpoD0FDTVh62CM1XFqgzCzSSIO9zXzHAyUiZn5ZDiX yWAuUzOX6XAu0w9yiQt5242Fk+seGaQZ3l6+rCOfp0wOyCxfh0G4pRfhYnQ2CxTmn7UDgTXc OXDpGS4tktKZkfmNKMnRNpRst88Xo2xf3Jl8GXzYbCZkxBUO+v8n+Z6M92D6al/Sc5ST+9UI UxXzZL90kwjemzXQonkJGq5HGRERZWiyd0hb+lT49nB/Mt3qydzBg5W2slQujfNA7Ni1AEqk 5Vg3ZlfpEFfD9DTZjaQo2fDv03PUe1jdBgUQpb2G9QKjPRUYCO4nuUgzs+ES3yivBLApXGxm x+1gR906kt3nJEXV2PUK13CWNHnqEFDTBKx3cGJpp2jBFQ57VYoGJqpnkZkaJkYMKnA9QE9E UTZpQmoSmUCqAGONkgQmX4doH+q4MsOg3Ck7+zAGl0yibbGMJyg3DRLWGjJok2Y7BnXBCq9g o5cosKljkstVkjftwTMB33gqbOjt1H1TJoLLepz8GRAybaA8xHUWXCsOfc3z7ht19pcIQxJr wBynHbwFgVVu6iC3SZaYV3C5/hKHDV7ppbctkGSE3rtglgexC4W+X1Uo+g0Uo0/RIZJTuDWD p6JczedjLrzLLKUB025SI0p7lLRmusj6NoxK8SkJmk9F435lYgzrXMATDDmYLJjuPJ+FZRRX eMt9Olm46GmJSy6M+PbLw+vzcjlb/eb19+GLxpA0EjDaU2L1sdeWX8/v98+jP111kVMsW9gj sOMHoBLDKBW0u0oQ69HmJUhUGkZEkkB7zaKankzt4rqgrzK2FJq8spIuSaQInQztl0Db/QZG 9VoWyWmxjH+MxpMe5mTHu4bpjFr+B5HBqgHVrB2WGEyxFLpuSDs3YPJkazwP6Qpm1gHMOfnF 5kwZO+Yxs5iWsmNOaB2icxpbuNwvMI2SLlT07geyiYlrRRWwKAlqC7ZnxR53qmGdtuHQxZAE Syq5kwlzgQ6gbFXuhh3zKCy7KU2o5o5ZNbhfy0jxfefTb0UrybYoC1cHpCwVxtpVxXZmgV4R net8ypQEB1jNQZFdsffWqfGNOwT9NqFpYqTayMHAGqFHeXMpOMC2IVaufTFBy+ORGrtBCIKd SYCrfSC2LkRpD93cdTHzZOQorWHqcRl8dmxRjLWE9iw2mTsjzTEcItHJiboGOjT+4NVGd+5x 3pA9nN1MnWjpQE83DnCKcdcOa3nx5SZ2MMT5OubB0C+tWQebPAa9R+sGmMGkn8zMNQu6aT45 kbaALnGIQfuMUhpCsMxNQVcZwFVxmtrQ3A0Z4q22slcIRi1C08nrPlzcxUG5wZA37giYVkZl s3V5M5dsIGuMSHUVxiONzbS9/aLxKhcbC0wMdR2mqgMf2eZIVwNWSmiOGu0Wn0pzYpCIwcZq oG/luSfNwtRNIE11XpmemGku2iU25WlxpBuDiqP1LIQeXxSdjAD1mPkGkBTzMyEGeqyTF29R 0pwezXK00mIGh4880GzTSBuof/7lr/PL0/n7788vX3+xnspTUHP5Ak3TukkNXTNRo9kaXSQV ZgNbGn6hVuraAzEsr4wHTGUxoRE0MQXfzPomkfnhIteXi8xPF8k2tHgGqyjpWg0ucF3B2mdT S78+0o/HBcVvaSatLgQlJRMVIZgWemJf1MxDhUy3G3qKqjEUC9oJukXjXRYQqDFm0u7q9czi Nj6JRtFvRctjUIVxteXrQQUYXUCjLtUpTNnjqb1lc8F8AzzGAV4VbLcBDa8qSfsqDDLjNeYU KDFZJAOzCmgtEHvMLFI09G6Rr01egJhVTpg6h09YcSEWynUITgENGj7zHQFFhSVbk9l7HYoo mrq0Uex7hfWaErQ7GxU51C8qLbzILCg+NTW/4xkFfB1jrmvs1g5czbLirSKTLhZXn1MEW1fn 5c9EtwR2Lnwz0a+c2ym1dGCUxTCFWuUwypJaWRkUf5AynNtQCVjQUIPiDVIGS0CtmAzKdJAy WGpquW9QVgOU1WTomdVgi64mQ/VZTYfes1wY9UlFib2jXQ484PmD7weS0dSBCNPUnb/nhn03 PHHDA2WfueG5G1644dVAuQeK4g2UxTMKsyvTZVs7sD3HMA4GqL5U0+/gMIZVUujCiybe16WD UpegDjnzuq7TLHPltgliN17H8c6GUygVu7bXE4o9O7mldXMWqdnXOxZjHAn7JqFun+hZCyT4 0eZOaoajb7d3fz08fe1sp3+8PDy9/TW6fbof3T+eX7+Onn/gqSfbr0sLfdX2krt2m4nL7iw+ xFkvR3s3PNK7pn42ilkoD3RgnKdGqMXw+fHHw/fzb28Pj+fR3bfz3V+vslR3Cn+xC6aDyeCW OWRVwcI8aOhaU9PzvWjM8z5Yfebqyc/e2O/LDPNmWuFFa1jy0FVGHQeRzAtIF3RfgM4bIeu6 pNOKHPXlsWC3yK0Tpy3kibfjjJIpRqH0UNwtzAMWIsekqOqXRcaMYCQOi2tVz6qUpw7CrL/G rVKWeGCvNC8z0m4eoNURLMOogREB+y1l1fifx397PHPckZXK639d4qiPovMf71+/ql5JGxFU i7gQTCFXuSAVw5qERqtDjUTJ1SX1gDoyEAMwva/spCfsqIXTpIXoYM7coQyn1eFedoMhutrx 6T1qD3Dpbt4NwL69RbbvIruy1QbChv6tO12DdmJ77ipXkQ65jcC/wFDHelK9doDVJsmCjfVa 7S4tLVKr+bfphjto0wXdKvs2dXSCfWeEFznefyiJsb19+kptP0FH3lfwaAPNRc8MUEKho7pc evrTbBWI3/BneNpDkO3jz6R7Y/7tFm2vmkCwj66GRE+SXQYX9p4/tl90YRssi8FiFuV4dYnI QMYHcuLmdFmJAdjMSBG70vZlVR4kzBWkBLnphMSMvqb4VF+LMeqyS/7hK3dxXLGR3PllUNkp 22C8+NNLj9Gvr9pzyOt/jx7f385/n+HH+e3u999/JyG71StgoZvvm/gU2+MAXst3a3RHdbMf j4oCI6s8VgG1R1IMmFdrSqu6PDiOquVOQlxxQFbZlSnjVHDQlDiziiy2aZ1JRlClvcATxqtg gICiERu+JeR+IBqVGgNYfkVjs1CLeSWdBmCYULOYhSTTJUxtEQyFdcHCEvHyZD51iOKwjiPQ AdPgct4Kktc56civAkTzQ6GkruMqRgWDzrSiwmNTSbYmU3dTIuvPUdB0pOC+OCwW7HJoQM+F 54dsWhmbfMz8Mxn+fG4hfO2CeiL7kM2VJ86D0NuyrJdGvscy450QofjKjlqoBuyVVnFqQ7lR ZLlTi6oHHm5QFV33rzaua3nxxNosrHI304WjTKAbfZQfeV3coA+3f+Ea3LhMgjQTWbDmiNKS DFkkCXmwgwaJr/asT0oS2u/oRjeeycOBRxIUiIOldGjDJsdFsuCeOvf/CoOwCK+bkm7Ql5Xq AoRPertL9oXK0KSqtHIjyvuOeqvhH6mWTliNw2d5mVXyMyEeYrwX6D4quqX1ZpKV/BJHY+fW yq8zdHdVAfOyNpnN85vBRgCJDmpNYuFqjh5oMlEEldiW5vRwIXSrBqNe6zoooDl0qAZ5Zv2Z 2qdrPCgKvKeFh1/ygVi4zc87dhAJLkY6Q1k1wSNLHFzEMo1mvI71PWVHhn1b6gLUZrM71hId oQlA4lWG2L90ok4UXgvcXBZG+8r5pV1D19/mQe3umv9GdpdAvTsu9nmLNxUS5q6x62SqQTp/ NGoSfX+Si/Xm/PrGptFsF1HDcFkrnMNBh6bddN0PcWwyczZco3mb6eMKZ9iDdAzd0S7hQtRi iYNKHZpPHR9FxSjFuKNzsz2wvNv4FO3zykBxg6DAtXtWMUVDEndAbegdVYnKLZDEAGs8zzAc ba33aYbneKGojfC1qLAZM5lq093/NXZlvW3kMPivGHnfJnaOZh/6oDlsq50rczR2XgZp4m6C bQ7Yzq7z75fUXKTE6QYIEPgjRzO6KFIiqXioqkHQfxHkT7a2cC+bW8hc5/E1ywHaFGBt1bS1 ViXIH0wGCaUMbgp4+Ys46yqvoFtY5ifMVL1IYpYzqlX2I691kSVCPgABgWoidRMtTmf+VNd2 crFic/e2xbA/Z4fIfPE7GSEFjEKcbkDAjqROTA57maPDcWChrZerg/fHi0EcFiZiCoYKXand s4gOmUvFOLlobUq9muexQOYWSGQSLeLlLxrTbQX5l4vz89ML5yloU51UK6G8ljJYnx/hsQ1J hzPQBR/9LgduK9I13uFQ3317I8PhMdYl6CiYILf9qJNR5iyNtL8OPJO2Vjf5vX5TtsTeVfxP 96mYJTrjOCxhMBwrsbaGDp1u60E9B8i4dJ2OEsxnob9yhrtyZb5md+SKzFUAmj36zbPNUYsT JGtJ/POjFPczha9QGQyJOP0d6QMDp2flJ8E9fa3sq7stj/weMieqCk0PiQjLQhyHOHetCT6w EMGQM0WNlIItSAj8rnFVx2D9ou2T+aDSBytoZ0rFSZtXjSdzL22RUIYxpoyWfP2QjJtCLYf9 ZKEX//d0t03VF3H0+HT7x/PgR0KZsBfqYmkSp7MX2Qyz8wtRf5N4z6dyqKHDe51ZrCOMX452 D7dTVoEm6rSZurxPcJNfJMDQAzWB7laYvhgdBdi/6TeZgLOkXp3T+6sQRqSR3EfHm/3d8d+b 993xAUHog0/3m+2R9EFmJJtNN80Uypj9qNElAoytqqKBhkgwJ/etgDGOEwWnCx+L8PjHbv55 Yh/b9YWwzPSd6/Lg94jjwGFtJNHHeDsB8jHuQPnC+LLZYHxtfj0+vx36Gq9QmKHpSP0djKZp JaA3WBzGfra20RWVlQ2UXdlIo7jiZgLLEY83y3V6kb99f92/TO5etpvJy3bysPn1StM5tdfQ qWihWA50Cs9cnJ1XENBlBSvL19mSJSu2KO5DlqPPALqsOTO6e0xk7I9HbFqGHrYyKlR+9LPV WFVzegVTi8UqUQuBt8Xd0nlYEufuVCk7vKzlWsyns8u4ihxCUkUy6L4e1c2rKqxCh2L+ueMh HsFVVS5DeotKd01iY7Q1MdJv+wdMjXJ3u9/cT8LnOxzFGIf77+P+YaJ2u5e7R0MKbve3zmj2 /dhtAgHzlwr+Zicg79fTU5oTqmUowivtzKw6hIdA2vapCTyTeezp5Z4GQHWv8NyK+qXbj77Q ayENhmyxiMaB9ONUeMlKKBAWo+vc7Ma0qdZ3D2OfDeLXnYASuJJe/r3h7JLdbHZ79w25fzoT 2gZhCS2nJ4Geu90qiorRDo2DMwET+DT0cRjhf3cyx3j5iwhTR6sBBu1Hgtl9Od2AW9JbaAZQ KqLRldxptMjZlZHd9M0a5mZReHx94GnzOxHuDhqVVJ4W4Nx3mxIWveu5FjqkIzhur10HqziM Iu1KSV+h38bYQ0Xpdh2ibmMFQs3m5r87S5bqRljeChUVSuiyTogIwiMUSgnzjO1+9MLPrTtY +GJjtvjQLL3rDCaKYukO+9rPW3uA4zwmpBMxNPajxS7P3BHFIkcGbDkkar99vn95miRvTz82 2y4zo/R5Kil07WfSUh7knslBW8kUUSQ1FEkuGIokfpHggF/NnXNoLadUPyPLcS0pTR1B/oSe WowpCz2H1B49UVTBjF3ET987irts4N73Us+T+vOf56vfU8VPQY4mFZMkNpB65btDzuy4x4sy 9K324TZ3Xa6zUCRmlRe1PEXlcTZCA9XV0ruMxeKHOR6loZNYbY5tafjoN7/43Du1ydRmjzek G3iN+ZWFTdyHiT7E8kmOOR9TSv40ysxu8hNzxjz+9dykGDM+bmzfPE4DsPqNrY7vObqDh3fH +ASw1WBmfXrdPPWmRhMLM26HuvSC3HLt6UTl62F3uk219mN7u32fbF/e9o/PVDlozA1qhni6 zEPc+WJ7DebQzfifDXQpesk0Es0I1R1yJWFZV6Wmxx99oidf43UT7N69lkSTahZlnDm3jYEa AbqhLpn49acXnMPVNKDosqr5U1xLgZ/C6UKLw5AMvfUlbSFGOROt0ZZF5dfWbo3F4clXqeQ+ 8d0FMe/qWz7NiW42+9qGpB/aEExfojWkeiaxP5MgjcWWgPWjj43laBPdyHFcllCM8TXLoM5K BquVUDKiUsmwPoncsGrJuFjK6gZh+3e9oimdW8zkl8pcXq2os3wLKrqXP2Dlsoo9h4BeJ265 nv/VwWyfxq5C9eJGZyLBA8JMpEQ3dBeTEGhsKONPR3BS/W4CG5cExdzz8hD9xNIoZQogRbHU y3ESnd0e9aH1zJBO8HAO95zZOR4YTyGOeQmrv/EDwR73YhGeU29hj6frYEeZdLUrUl83Ia0q z+lRHKyZKP6oO2QD4eF/zcQi4jyIy2RtETa+gysqg6PU47+E+ZxEPMSq78H2qJXUBdsAP6U/ hTXDf27idbCGZLrlVW0HlEU3dUn9V/w0D6hNhodZQ3PmV2j6kcrEmeZhz27lgT4PqHeODmAQ LXRR0mwB8zQpBR+LlOUxN0yXh0sHoYPQQBcHdv0mQp8PNEzCQJgPLxIKVNAKiYBjOHR9dhBe duLUJBG+CtDp7EBvfzDw9OQwZatXgT5vEV93hhWj6/ACR5zSCeX6DwFOqSH4vwIA --fUYQa+Pmc3FrFX/N-- -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f54.google.com (mail-wm0-f54.google.com [74.125.82.54]) by kanga.kvack.org (Postfix) with ESMTP id 22C896B0005 for ; Thu, 10 Mar 2016 10:47:23 -0500 (EST) Received: by mail-wm0-f54.google.com with SMTP id l68so34267982wml.0 for ; Thu, 10 Mar 2016 07:47:23 -0800 (PST) Subject: Re: [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-2-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E19704.6030708@suse.cz> Date: Thu, 10 Mar 2016 16:47:16 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-2-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > This is the first step in making mmap_sem write holders killable. It s/holders/waiters/? > focuses on the trivial ones which are taking the lock early after > entering the syscall and they are not changing state before. > > Therefore it is very easy to change them to use down_write_killable > and immediately return with -EINTR. This will allow the waiter to > pass away without blocking the mmap_sem which might be required to > make a forward progress. E.g. the oom reaper will need the lock for > reading to dismantle the OOM victim address space. > > The only tricky function in this patch is vm_mmap_pgoff which has many > call sites via vm_mmap. To reduce the risk keep vm_mmap with the > original non-killable semantic for now. > > vm_munmap callers do not bother checking the return value so open code > it into the munmap syscall path for now for simplicity. > > Cc: Mel Gorman > Cc: "Kirill A. Shutemov" > Cc: Konstantin Khlebnikov > Cc: Hugh Dickins > Cc: Andrea Arcangeli > Cc: David Rientjes > Cc: Dave Hansen > Cc: Johannes Weiner > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id 701FC6B0253 for ; Thu, 10 Mar 2016 10:56:58 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id p65so34628204wmp.0 for ; Thu, 10 Mar 2016 07:56:58 -0800 (PST) Date: Thu, 10 Mar 2016 16:56:55 +0100 From: Michal Hocko Subject: Re: [PATCH 01/18] mm: Make mmap_sem for write waits killable for mm syscalls Message-ID: <20160310155655.GB22452@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-2-git-send-email-mhocko@kernel.org> <56E19704.6030708@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E19704.6030708@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Thu 10-03-16 16:47:16, Vlastimil Babka wrote: > On 02/29/2016 02:26 PM, Michal Hocko wrote: > >From: Michal Hocko > > > >This is the first step in making mmap_sem write holders killable. It > > s/holders/waiters/? right. Fixed > >focuses on the trivial ones which are taking the lock early after > >entering the syscall and they are not changing state before. > > > >Therefore it is very easy to change them to use down_write_killable > >and immediately return with -EINTR. This will allow the waiter to > >pass away without blocking the mmap_sem which might be required to > >make a forward progress. E.g. the oom reaper will need the lock for > >reading to dismantle the OOM victim address space. > > > >The only tricky function in this patch is vm_mmap_pgoff which has many > >call sites via vm_mmap. To reduce the risk keep vm_mmap with the > >original non-killable semantic for now. > > > >vm_munmap callers do not bother checking the return value so open code > >it into the munmap syscall path for now for simplicity. > > > >Cc: Mel Gorman > >Cc: "Kirill A. Shutemov" > >Cc: Konstantin Khlebnikov > >Cc: Hugh Dickins > >Cc: Andrea Arcangeli > >Cc: David Rientjes > >Cc: Dave Hansen > >Cc: Johannes Weiner > >Signed-off-by: Michal Hocko > > Acked-by: Vlastimil Babka Thanks! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by kanga.kvack.org (Postfix) with ESMTP id 7EFC36B0005 for ; Fri, 11 Mar 2016 04:59:35 -0500 (EST) Received: by mail-wm0-f41.google.com with SMTP id p65so10949692wmp.1 for ; Fri, 11 Mar 2016 01:59:35 -0800 (PST) Subject: Re: [PATCH 02/18] mm: make vm_mmap killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-3-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E29702.5030100@suse.cz> Date: Fri, 11 Mar 2016 10:59:30 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-3-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Al Viro On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > All the callers of vm_mmap seem to check for the failure already > and bail out in one way or another on the error which means that Hmm I'm not that sure about this one: 17 1071 fs/binfmt_elf.c <> Assigns result of vm_mmap() to "error" variable which is never checked. Shouldn't __must_check trigger here? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id 492476B0005 for ; Fri, 11 Mar 2016 05:06:46 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id l68so11332917wml.0 for ; Fri, 11 Mar 2016 02:06:46 -0800 (PST) Subject: Re: [PATCH 03/18] mm: make vm_munmap killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-4-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E298B1.6010802@suse.cz> Date: Fri, 11 Mar 2016 11:06:41 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-4-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > Almost all current users of vm_munmap are ignoring the return value > and so they do not handle potential error. This means that some VMAs 1 7834 arch/x86/kvm/x86.c <<__x86_set_memory_region>> r = vm_munmap(old.userspace_addr, old.npages * PAGE_SIZE); WARN_ON(r < 0); This warning will potentially add noise to OOM output? -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) by kanga.kvack.org (Postfix) with ESMTP id 6CB096B0005 for ; Fri, 11 Mar 2016 05:32:47 -0500 (EST) Received: by mail-wm0-f46.google.com with SMTP id p65so12148545wmp.1 for ; Fri, 11 Mar 2016 02:32:47 -0800 (PST) Subject: Re: [PATCH 04/18] mm, aout: handle vm_brk failures References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-5-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E29ECA.5050809@suse.cz> Date: Fri, 11 Mar 2016 11:32:42 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-5-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Ingo Molnar , Alexander Viro On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > vm_brk is allowed to fail but load_aout_binary simply ignores the error > and happily continues. I haven't noticed any problem from that in real > life but later patches will make the failure more likely because > vm_brk will become killable (resp. mmap_sem for write waiting will become > killable) so we should be more careful now. > > The error handling should be quite straightforward because there are > calls to vm_mmap which check the error properly already. The only > notable exception is set_brk which is called after beyond_if label. > But nothing indicates that we cannot move it above set_binfmt as the two > do not depend on each other and fail before we do set_binfmt and alter > reference counting. > > Cc: Thomas Gleixner > Cc: Ingo Molnar > Cc: "H. Peter Anvin" > Cc: Alexander Viro > Signed-off-by: Michal Hocko Acked--by: Vlastimil Babka [...] > @@ -378,7 +381,9 @@ static int load_aout_library(struct file *file) > "N_TXTOFF is not page aligned. Please convert library: %pD\n", > file); > } > - vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); > + retval = vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); > + if (IS_ERR_VALUE(retval)) > + goto out; > You could have removed the extra whitespace on the line above, which my vim so prominently highlights :) > read_code(file, start_addr, N_TXTOFF(ex), > ex.a_text + ex.a_data); > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f52.google.com (mail-wm0-f52.google.com [74.125.82.52]) by kanga.kvack.org (Postfix) with ESMTP id D182D6B0253 for ; Fri, 11 Mar 2016 05:35:36 -0500 (EST) Received: by mail-wm0-f52.google.com with SMTP id l68so11807582wml.1 for ; Fri, 11 Mar 2016 02:35:36 -0800 (PST) Subject: Re: [PATCH 05/18] mm, elf: handle vm_brk error References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-6-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E29F75.4010004@suse.cz> Date: Fri, 11 Mar 2016 11:35:33 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-6-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > load_elf_library doesn't handle vm_brk failure although nothing really > indicates it cannot do that because the function is allowed to fail > due to vm_mmap failures already. This might be not a problem now > but later patch will make vm_brk killable (resp. mmap_sem for write > waiting will become killable) and so the failure will be more probable. > > Cc: Alexander Viro > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f52.google.com (mail-wm0-f52.google.com [74.125.82.52]) by kanga.kvack.org (Postfix) with ESMTP id B7BFA6B0005 for ; Fri, 11 Mar 2016 05:44:26 -0500 (EST) Received: by mail-wm0-f52.google.com with SMTP id p65so12540668wmp.1 for ; Fri, 11 Mar 2016 02:44:26 -0800 (PST) Subject: Re: [PATCH 06/18] mm: make vm_brk killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-7-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2A186.5000404@suse.cz> Date: Fri, 11 Mar 2016 11:44:22 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-7-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > Now that all the callers handle vm_brk failure we can change it > wait for mmap_sem killable to help oom_reaper to not get blocked > just because vm_brk gets blocked behind mmap_sem readers. > > Cc: "Kirill A. Shutemov" > Cc: Oleg Nesterov > Cc: Andrea Arcangeli > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by kanga.kvack.org (Postfix) with ESMTP id E9B666B0005 for ; Fri, 11 Mar 2016 05:59:37 -0500 (EST) Received: by mail-wm0-f42.google.com with SMTP id l68so13329530wml.0 for ; Fri, 11 Mar 2016 02:59:37 -0800 (PST) Received: from mx2.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id w81si2032480wma.101.2016.03.11.02.59.36 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 11 Mar 2016 02:59:36 -0800 (PST) Subject: Re: [PATCH] mm, proc: make clear_refs killable References: <1456752417-9626-8-git-send-email-mhocko@kernel.org> <1456768587-24893-1-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2A517.9040703@suse.cz> Date: Fri, 11 Mar 2016 11:59:35 +0100 MIME-Version: 1.0 In-Reply-To: <1456768587-24893-1-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Michal Hocko , Oleg Nesterov , Petr Cermak On 02/29/2016 06:56 PM, Michal Hocko wrote: > From: Michal Hocko > > CLEAR_REFS_MM_HIWATER_RSS and CLEAR_REFS_SOFT_DIRTY are relying on > mmap_sem for write. If the waiting task gets killed by the oom killer > and it would operate on the current's mm it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely OOM > resolving. Wait for the lock in the killable mode and return with EINTR > if the task got killed while waiting. This will also expedite the return > to the userspace and do_exit even if the mm is remote. > > Cc: Oleg Nesterov > Cc: Petr Cermak > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id 33B106B0005 for ; Fri, 11 Mar 2016 06:12:15 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id n186so13818994wmn.1 for ; Fri, 11 Mar 2016 03:12:15 -0800 (PST) Received: from mx2.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id dm2si10404561wjb.153.2016.03.11.03.12.13 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 11 Mar 2016 03:12:14 -0800 (PST) Subject: Re: [PATCH] mm, fork: make dup_mmap wait for mmap_sem for write killable References: <1456752417-9626-9-git-send-email-mhocko@kernel.org> <1456769232-27592-1-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2A80C.6040401@suse.cz> Date: Fri, 11 Mar 2016 12:12:12 +0100 MIME-Version: 1.0 In-Reply-To: <1456769232-27592-1-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Michal Hocko , Ingo Molnar , Peter Zijlstra , Oleg Nesterov , Konstantin Khlebnikov On 02/29/2016 07:07 PM, Michal Hocko wrote: > From: Michal Hocko > > dup_mmap needs to lock current's mm mmap_sem for write. If the waiting > task gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely OOM > resolving. Wait for the lock in the killable mode and return with EINTR > if the task got killed while waiting. > > Cc: Ingo Molnar > Cc: Peter Zijlstra > Cc: Oleg Nesterov > Cc: Konstantin Khlebnikov > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka > --- > kernel/fork.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/kernel/fork.c b/kernel/fork.c > index d277e83ed3e0..139968026b76 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -413,7 +413,10 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) > unsigned long charge; > > uprobe_start_dup_mmap(); > - down_write(&oldmm->mmap_sem); > + if (down_write_killable(&oldmm->mmap_sem)) { > + retval = -EINTR; > + goto fail_uprobe_end; > + } > flush_cache_dup_mm(oldmm); > uprobe_dup_mmap(oldmm, mm); > /* > @@ -525,6 +528,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) > up_write(&mm->mmap_sem); > flush_tlb_mm(oldmm); > up_write(&oldmm->mmap_sem); > +fail_uprobe_end: > uprobe_end_dup_mmap(); > return retval; > fail_nomem_anon_vma_fork: > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by kanga.kvack.org (Postfix) with ESMTP id 540D16B0254 for ; Fri, 11 Mar 2016 06:18:40 -0500 (EST) Received: by mail-wm0-f49.google.com with SMTP id p65so13712841wmp.1 for ; Fri, 11 Mar 2016 03:18:40 -0800 (PST) Received: from mx2.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id gz10si10455106wjc.107.2016.03.11.03.18.39 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 11 Mar 2016 03:18:39 -0800 (PST) Subject: Re: [PATCH] ipc, shm: make shmem attach/detach wait for mmap_sem killable References: <1456752417-9626-10-git-send-email-mhocko@kernel.org> <1457518778-32235-1-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2A98E.5070302@suse.cz> Date: Fri, 11 Mar 2016 12:18:38 +0100 MIME-Version: 1.0 In-Reply-To: <1457518778-32235-1-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: linux-mm@kvack.org, Davidlohr Bueso , Michal Hocko , Hugh Dickins On 03/09/2016 11:19 AM, Michal Hocko wrote: > From: Michal Hocko > > shmat and shmdt rely on mmap_sem for write. If the waiting task > gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely > OOM resolving. Wait for the lock in the killable mode and return with > EINTR if the task got killed while waiting. > > Cc: Hugh Dickins > Signed-off-by: Michal Hocko > Acked-by: Davidlohr Bueso Acked-by: Vlastimil Babka > --- > ipc/shm.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/ipc/shm.c b/ipc/shm.c > index 331fc1b0b3c7..13282510bc0d 100644 > --- a/ipc/shm.c > +++ b/ipc/shm.c > @@ -1200,7 +1200,11 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr, > if (err) > goto out_fput; > > - down_write(¤t->mm->mmap_sem); > + if (down_write_killable(¤t->mm->mmap_sem)) { > + err = -EINTR; > + goto out_fput; > + } > + > if (addr && !(shmflg & SHM_REMAP)) { > err = -EINVAL; > if (addr + size < addr) > @@ -1271,7 +1275,8 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr) > if (addr & ~PAGE_MASK) > return retval; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return -EINTR; > > /* > * This function tries to be smart and unmap shm segments that > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by kanga.kvack.org (Postfix) with ESMTP id 5CFDD6B0005 for ; Fri, 11 Mar 2016 06:28:20 -0500 (EST) Received: by mail-wm0-f41.google.com with SMTP id l68so13595317wml.1 for ; Fri, 11 Mar 2016 03:28:20 -0800 (PST) Subject: Re: [PATCH 10/18] vdso: make arch_setup_additional_pages wait for mmap_sem for write killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-11-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2ABCE.5070205@suse.cz> Date: Fri, 11 Mar 2016 12:28:14 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-11-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > most architectures are relying on mmap_sem for write in their > arch_setup_additional_pages. If the waiting task gets killed by the oom > killer it would block oom_reaper from asynchronous address space reclaim > and reduce the chances of timely OOM resolving. Wait for the lock in > the killable mode and return with EINTR if the task got killed while > waiting. > > Cc: linux-arch@vger.kernel.org > Cc: Andy Lutomirski > Signed-off-by: Michal Hocko I don't have much arch-specific insight, but looks OK. Acked-by: Vlastimil Babka -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id CA5C06B0005 for ; Fri, 11 Mar 2016 06:32:58 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id l68so14554938wml.0 for ; Fri, 11 Mar 2016 03:32:58 -0800 (PST) Subject: Re: [PATCH 11/18] coredump: make coredump_wait wait for mma_sem for write killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-12-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2ACE7.50008@suse.cz> Date: Fri, 11 Mar 2016 12:32:55 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-12-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > coredump_wait waits for mmap_sem for write currently which can > prevent oom_reaper to reclaim the oom victims address space > asynchronously because that requires mmap_sem for read. This might > happen if the oom victim is multi threaded and some thread(s) is > holding mmap_sem for read (e.g. page fault) and it is stuck in > the page allocator while other thread(s) reached coredump_wait > already. > > This patch simply uses down_write_killable and bails out with EINTR > if the lock got interrupted by the fatal signal. do_coredump will > return right away and do_group_exit will take care to zap the whole > thread group. > > Cc: Oleg Nesterov > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka > --- > fs/coredump.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/coredump.c b/fs/coredump.c > index 9ea87e9fdccf..6b8aa1629891 100644 > --- a/fs/coredump.c > +++ b/fs/coredump.c > @@ -410,7 +410,9 @@ static int coredump_wait(int exit_code, struct core_state *core_state) > core_state->dumper.task = tsk; > core_state->dumper.next = NULL; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return -EINTR; > + > if (!mm->core_state) > core_waiters = zap_threads(tsk, mm, core_state, exit_code); > up_write(&mm->mmap_sem); > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43]) by kanga.kvack.org (Postfix) with ESMTP id 61DAE6B0005 for ; Fri, 11 Mar 2016 06:54:22 -0500 (EST) Received: by mail-wm0-f43.google.com with SMTP id l68so15001073wml.0 for ; Fri, 11 Mar 2016 03:54:22 -0800 (PST) Subject: Re: [PATCH 11/18] coredump: make coredump_wait wait for mma_sem for write killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-12-git-send-email-mhocko@kernel.org> <56E2ACE7.50008@suse.cz> From: Vlastimil Babka Message-ID: <56E2B1E9.90201@suse.cz> Date: Fri, 11 Mar 2016 12:54:17 +0100 MIME-Version: 1.0 In-Reply-To: <56E2ACE7.50008@suse.cz> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 03/11/2016 12:32 PM, Vlastimil Babka wrote: > On 02/29/2016 02:26 PM, Michal Hocko wrote: >> From: Michal Hocko >> >> coredump_wait waits for mmap_sem for write currently which can >> prevent oom_reaper to reclaim the oom victims address space >> asynchronously because that requires mmap_sem for read. This might >> happen if the oom victim is multi threaded and some thread(s) is >> holding mmap_sem for read (e.g. page fault) and it is stuck in >> the page allocator while other thread(s) reached coredump_wait >> already. >> >> This patch simply uses down_write_killable and bails out with EINTR >> if the lock got interrupted by the fatal signal. do_coredump will >> return right away and do_group_exit will take care to zap the whole >> thread group. >> >> Cc: Oleg Nesterov >> Signed-off-by: Michal Hocko > > Acked-by: Vlastimil Babka Forgot to point out typo in Subject which makes it hard to grep for mmap_sem -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id B64F7828DF for ; Fri, 11 Mar 2016 06:57:45 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id l68so15424474wml.0 for ; Fri, 11 Mar 2016 03:57:45 -0800 (PST) Subject: Re: [PATCH 12/18] aio: make aio_setup_ring killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-13-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2B2B6.4040307@suse.cz> Date: Fri, 11 Mar 2016 12:57:42 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-13-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > aio_setup_ring waits for mmap_sem in writable mode. If the waiting > task gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely > OOM resolving. Wait for the lock in the killable mode and return with > EINTR if the task got killed while waiting. This will also expedite > the return to the userspace and do_exit. > > Cc: Benjamin LaHaise > Cc: Alexander Viro > Signed-off-by: Michal Hocko The error handling could be changed to labels, but: Acked-by: Vlastimil Babka > --- > fs/aio.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/fs/aio.c b/fs/aio.c > index 56bcdf4105f4..1c2e7e2c1b2b 100644 > --- a/fs/aio.c > +++ b/fs/aio.c > @@ -520,7 +520,12 @@ static int aio_setup_ring(struct kioctx *ctx) > ctx->mmap_size = nr_pages * PAGE_SIZE; > pr_debug("attempting mmap of %lu bytes\n", ctx->mmap_size); > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) { > + ctx->mmap_size = 0; > + aio_free_ring(ctx); > + return -EINTR; > + } > + > ctx->mmap_base = do_mmap_pgoff(ctx->aio_ring_file, 0, ctx->mmap_size, > PROT_READ | PROT_WRITE, > MAP_SHARED, 0, &unused); > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f53.google.com (mail-wm0-f53.google.com [74.125.82.53]) by kanga.kvack.org (Postfix) with ESMTP id 192F26B0005 for ; Fri, 11 Mar 2016 07:12:38 -0500 (EST) Received: by mail-wm0-f53.google.com with SMTP id n186so15968013wmn.1 for ; Fri, 11 Mar 2016 04:12:38 -0800 (PST) Date: Fri, 11 Mar 2016 13:12:35 +0100 From: Michal Hocko Subject: Re: [PATCH 02/18] mm: make vm_mmap killable Message-ID: <20160311121235.GI27701@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-3-git-send-email-mhocko@kernel.org> <56E29702.5030100@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E29702.5030100@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Al Viro On Fri 11-03-16 10:59:30, Vlastimil Babka wrote: > On 02/29/2016 02:26 PM, Michal Hocko wrote: > >From: Michal Hocko > > > >All the callers of vm_mmap seem to check for the failure already > >and bail out in one way or another on the error which means that > > Hmm I'm not that sure about this one: > 17 1071 fs/binfmt_elf.c <> > > Assigns result of vm_mmap() to "error" variable which is never checked. Yes it is not checked but not used either. If the current got killed then it wouldn't return to the userspace so my understanding is that not checking this value is not a problem. At least that is my understanding. > Shouldn't __must_check trigger here? well, __must_check is a misleading name. It doesn't actually enforce the value is checked. It just has to be used and an assignment is sufficient. I was discussing this without our gcc guy and he promissed to look and try to come up with a different attribute which would actually work like __must_check. -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f43.google.com (mail-wm0-f43.google.com [74.125.82.43]) by kanga.kvack.org (Postfix) with ESMTP id CE9686B0253 for ; Fri, 11 Mar 2016 07:32:11 -0500 (EST) Received: by mail-wm0-f43.google.com with SMTP id p65so16135206wmp.1 for ; Fri, 11 Mar 2016 04:32:11 -0800 (PST) Date: Fri, 11 Mar 2016 13:32:09 +0100 From: Michal Hocko Subject: Re: [PATCH 03/18] mm: make vm_munmap killable Message-ID: <20160311123209.GJ27701@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-4-git-send-email-mhocko@kernel.org> <56E298B1.6010802@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E298B1.6010802@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Alexander Viro On Fri 11-03-16 11:06:41, Vlastimil Babka wrote: > On 02/29/2016 02:26 PM, Michal Hocko wrote: > >From: Michal Hocko > > > >Almost all current users of vm_munmap are ignoring the return value > >and so they do not handle potential error. This means that some VMAs > > 1 7834 arch/x86/kvm/x86.c <<__x86_set_memory_region>> > > r = vm_munmap(old.userspace_addr, old.npages * PAGE_SIZE); > WARN_ON(r < 0); > > This warning will potentially add noise to OOM output? Would it be harmfull though? I mean the warning is just goofy. I can make it not warn on (r < 0 && r != -EINTR) but is it worth bothering? Thanks! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by kanga.kvack.org (Postfix) with ESMTP id 4DCE96B0254 for ; Fri, 11 Mar 2016 07:42:04 -0500 (EST) Received: by mail-wm0-f49.google.com with SMTP id p65so16047487wmp.0 for ; Fri, 11 Mar 2016 04:42:04 -0800 (PST) Date: Fri, 11 Mar 2016 13:42:01 +0100 From: Michal Hocko Subject: Re: [PATCH 04/18] mm, aout: handle vm_brk failures Message-ID: <20160311124201.GK27701@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-5-git-send-email-mhocko@kernel.org> <56E29ECA.5050809@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E29ECA.5050809@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Ingo Molnar , Alexander Viro On Fri 11-03-16 11:32:42, Vlastimil Babka wrote: > On 02/29/2016 02:26 PM, Michal Hocko wrote: > >From: Michal Hocko > > > >vm_brk is allowed to fail but load_aout_binary simply ignores the error > >and happily continues. I haven't noticed any problem from that in real > >life but later patches will make the failure more likely because > >vm_brk will become killable (resp. mmap_sem for write waiting will become > >killable) so we should be more careful now. > > > >The error handling should be quite straightforward because there are > >calls to vm_mmap which check the error properly already. The only > >notable exception is set_brk which is called after beyond_if label. > >But nothing indicates that we cannot move it above set_binfmt as the two > >do not depend on each other and fail before we do set_binfmt and alter > >reference counting. > > > >Cc: Thomas Gleixner > >Cc: Ingo Molnar > >Cc: "H. Peter Anvin" > >Cc: Alexander Viro > >Signed-off-by: Michal Hocko > > Acked--by: Vlastimil Babka thanks! > > [...] > > >@@ -378,7 +381,9 @@ static int load_aout_library(struct file *file) > > "N_TXTOFF is not page aligned. Please convert library: %pD\n", > > file); > > } > >- vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); > >+ retval = vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss); > >+ if (IS_ERR_VALUE(retval)) > >+ goto out; > > > > You could have removed the extra whitespace on the line above, which my vim > so prominently highlights :) Fixed > > > read_code(file, start_addr, N_TXTOFF(ex), > > ex.a_text + ex.a_data); > > -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id B4DF16B0255 for ; Fri, 11 Mar 2016 07:43:46 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id l68so16637476wml.0 for ; Fri, 11 Mar 2016 04:43:46 -0800 (PST) Subject: Re: [PATCH 02/18] mm: make vm_mmap killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-3-git-send-email-mhocko@kernel.org> <56E29702.5030100@suse.cz> <20160311121235.GI27701@dhcp22.suse.cz> From: Vlastimil Babka Message-ID: <56E2BD7D.10701@suse.cz> Date: Fri, 11 Mar 2016 13:43:41 +0100 MIME-Version: 1.0 In-Reply-To: <20160311121235.GI27701@dhcp22.suse.cz> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Al Viro On 03/11/2016 01:12 PM, Michal Hocko wrote: > On Fri 11-03-16 10:59:30, Vlastimil Babka wrote: >> On 02/29/2016 02:26 PM, Michal Hocko wrote: >> >From: Michal Hocko >> > >> >All the callers of vm_mmap seem to check for the failure already >> >and bail out in one way or another on the error which means that >> >> Hmm I'm not that sure about this one: >> 17 1071 fs/binfmt_elf.c <> >> >> Assigns result of vm_mmap() to "error" variable which is never checked. > > Yes it is not checked but not used either. If the current got killed > then it wouldn't return to the userspace so my understanding is that not > checking this value is not a problem. At least that is my understanding. Hmm, that's true. So, Acked-by: Vlastimil Babka >> Shouldn't __must_check trigger here? > > well, __must_check is a misleading name. It doesn't actually enforce the > value is checked. It just has to be used and an assignment is > sufficient. I was discussing this without our gcc guy and he promissed > to look and try to come up with a different attribute which would > actually work like __must_check. OK! -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f48.google.com (mail-wm0-f48.google.com [74.125.82.48]) by kanga.kvack.org (Postfix) with ESMTP id 47F3E6B0005 for ; Fri, 11 Mar 2016 07:46:16 -0500 (EST) Received: by mail-wm0-f48.google.com with SMTP id l68so16166769wml.1 for ; Fri, 11 Mar 2016 04:46:16 -0800 (PST) Date: Fri, 11 Mar 2016 13:46:13 +0100 From: Michal Hocko Subject: Re: [PATCH 11/18] coredump: make coredump_wait wait for mma_sem for write killable Message-ID: <20160311124613.GL27701@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-12-git-send-email-mhocko@kernel.org> <56E2ACE7.50008@suse.cz> <56E2B1E9.90201@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E2B1E9.90201@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner On Fri 11-03-16 12:54:17, Vlastimil Babka wrote: > On 03/11/2016 12:32 PM, Vlastimil Babka wrote: > >On 02/29/2016 02:26 PM, Michal Hocko wrote: > >>From: Michal Hocko > >> > >>coredump_wait waits for mmap_sem for write currently which can > >>prevent oom_reaper to reclaim the oom victims address space > >>asynchronously because that requires mmap_sem for read. This might > >>happen if the oom victim is multi threaded and some thread(s) is > >>holding mmap_sem for read (e.g. page fault) and it is stuck in > >>the page allocator while other thread(s) reached coredump_wait > >>already. > >> > >>This patch simply uses down_write_killable and bails out with EINTR > >>if the lock got interrupted by the fatal signal. do_coredump will > >>return right away and do_group_exit will take care to zap the whole > >>thread group. > >> > >>Cc: Oleg Nesterov > >>Signed-off-by: Michal Hocko > > > >Acked-by: Vlastimil Babka > > Forgot to point out typo in Subject which makes it hard to grep for mmap_sem Fixed and thanks! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id C58466B0005 for ; Fri, 11 Mar 2016 07:51:17 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id l68so16887717wml.0 for ; Fri, 11 Mar 2016 04:51:17 -0800 (PST) Subject: Re: [PATCH 13/18] exec: make exec path waiting for mmap_sem killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-14-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2BF41.1000808@suse.cz> Date: Fri, 11 Mar 2016 13:51:13 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-14-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko , Alexander Viro On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > setup_arg_pages requires mmap_sem for write. If the waiting task > gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely > OOM resolving. Wait for the lock in the killable mode and return with > EINTR if the task got killed while waiting. All the callers are already > handling error path and the fatal signal doesn't need any additional > treatment. > > The same applies to __bprm_mm_init. > > Cc: Alexander Viro > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f50.google.com (mail-wm0-f50.google.com [74.125.82.50]) by kanga.kvack.org (Postfix) with ESMTP id 5DAA16B0005 for ; Fri, 11 Mar 2016 07:54:13 -0500 (EST) Received: by mail-wm0-f50.google.com with SMTP id n186so17439075wmn.1 for ; Fri, 11 Mar 2016 04:54:13 -0800 (PST) Subject: Re: [PATCH 14/18] prctl: make PR_SET_THP_DISABLE wait for mmap_sem killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-15-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2BFF2.1080208@suse.cz> Date: Fri, 11 Mar 2016 13:54:10 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-15-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > PR_SET_THP_DISABLE requires mmap_sem for write. If the waiting > task gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely OOM > resolving. Wait for the lock in the killable mode and return with EINTR > if the task got killed while waiting. > > Cc: Alex Thorlton > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka > --- > kernel/sys.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/kernel/sys.c b/kernel/sys.c > index cf8ba545c7d3..89d5be418157 100644 > --- a/kernel/sys.c > +++ b/kernel/sys.c > @@ -2246,7 +2246,8 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, > case PR_SET_THP_DISABLE: > if (arg3 || arg4 || arg5) > return -EINVAL; > - down_write(&me->mm->mmap_sem); > + if (down_write_killable(&me->mm->mmap_sem)) > + return -EINTR; > if (arg2) > me->mm->def_flags |= VM_NOHUGEPAGE; > else > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by kanga.kvack.org (Postfix) with ESMTP id 733136B0254 for ; Fri, 11 Mar 2016 07:55:36 -0500 (EST) Received: by mail-wm0-f47.google.com with SMTP id l68so17028228wml.0 for ; Fri, 11 Mar 2016 04:55:36 -0800 (PST) Date: Fri, 11 Mar 2016 13:55:33 +0100 From: Michal Hocko Subject: Re: [PATCH 02/18] mm: make vm_mmap killable Message-ID: <20160311125533.GN27701@dhcp22.suse.cz> References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-3-git-send-email-mhocko@kernel.org> <56E29702.5030100@suse.cz> <20160311121235.GI27701@dhcp22.suse.cz> <56E2BD7D.10701@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E2BD7D.10701@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , Christian =?iso-8859-1?Q?K=F6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Al Viro On Fri 11-03-16 13:43:41, Vlastimil Babka wrote: > On 03/11/2016 01:12 PM, Michal Hocko wrote: > >On Fri 11-03-16 10:59:30, Vlastimil Babka wrote: > >>On 02/29/2016 02:26 PM, Michal Hocko wrote: > >>>From: Michal Hocko > >>> > >>>All the callers of vm_mmap seem to check for the failure already > >>>and bail out in one way or another on the error which means that > >> > >>Hmm I'm not that sure about this one: > >> 17 1071 fs/binfmt_elf.c <> > >> > >>Assigns result of vm_mmap() to "error" variable which is never checked. > > > >Yes it is not checked but not used either. If the current got killed > >then it wouldn't return to the userspace so my understanding is that not > >checking this value is not a problem. At least that is my understanding. > > Hmm, that's true. So, I have updated the changelog and added the following note: " Please note that load_elf_binary is ignoring vm_mmap error for current->personality & MMAP_PAGE_ZERO case but that shouldn't be a problem because the address is not used anywhere and we never return to the userspace if we got killed. " > Acked-by: Vlastimil Babka Thanks! -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f45.google.com (mail-wm0-f45.google.com [74.125.82.45]) by kanga.kvack.org (Postfix) with ESMTP id 2C8D06B0005 for ; Fri, 11 Mar 2016 09:58:47 -0500 (EST) Received: by mail-wm0-f45.google.com with SMTP id p65so20999073wmp.0 for ; Fri, 11 Mar 2016 06:58:47 -0800 (PST) Received: from mx2.suse.de (mx2.suse.de. [195.135.220.15]) by mx.google.com with ESMTPS id c1si3115767wmh.112.2016.03.11.06.58.45 for (version=TLS1 cipher=AES128-SHA bits=128/128); Fri, 11 Mar 2016 06:58:45 -0800 (PST) Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable References: <1456752417-9626-16-git-send-email-mhocko@kernel.org> <1456767743-18665-1-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2DD23.5070703@suse.cz> Date: Fri, 11 Mar 2016 15:58:43 +0100 MIME-Version: 1.0 In-Reply-To: <1456767743-18665-1-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , Oleg Nesterov , linux-mm@kvack.org, Michal Hocko On 02/29/2016 06:42 PM, Michal Hocko wrote: > From: Michal Hocko > > xol_add_vma needs mmap_sem for write. If the waiting task gets killed by > the oom killer it would block oom_reaper from asynchronous address space > reclaim and reduce the chances of timely OOM resolving. Wait for the > lock in the killable mode and return with EINTR if the task got killed > while waiting. > > Do not warn in dup_xol_work if __create_xol_area failed due to fatal > signal pending because this is usually considered a kernel issue. > > Cc: Oleg Nesterov > Signed-off-by: Michal Hocko > --- > kernel/events/uprobes.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/kernel/events/uprobes.c b/kernel/events/uprobes.c > index 8eef5f55d3f0..fb4a6bcc88ce 100644 > --- a/kernel/events/uprobes.c > +++ b/kernel/events/uprobes.c > @@ -1130,7 +1130,9 @@ static int xol_add_vma(struct mm_struct *mm, struct xol_area *area) > struct vm_area_struct *vma; > int ret; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return -EINTR; > + > if (mm->uprobes_state.xol_area) { > ret = -EALREADY; > goto fail; > @@ -1468,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) > if (current->flags & PF_EXITING) > return; > > - if (!__create_xol_area(current->utask->dup_xol_addr)) > + if (!__create_xol_area(current->utask->dup_xol_addr) && > + !fatal_signal_pending(current) ^ missing ")" Other than that, Acked-by: Vlastimil Babka > uprobe_warn(current, "dup xol area"); > } > > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f49.google.com (mail-wm0-f49.google.com [74.125.82.49]) by kanga.kvack.org (Postfix) with ESMTP id 6C2B26B0005 for ; Fri, 11 Mar 2016 10:23:16 -0500 (EST) Received: by mail-wm0-f49.google.com with SMTP id n186so23339049wmn.1 for ; Fri, 11 Mar 2016 07:23:16 -0800 (PST) Subject: Re: [PATCH 16/18] drm/i915: make i915_gem_mmap_ioctl wait for mmap_sem killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-17-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2E2DC.9010806@suse.cz> Date: Fri, 11 Mar 2016 16:23:08 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-17-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > i915_gem_mmap_ioctl relies on mmap_sem for write. If the waiting > task gets killed by the oom killer it would block oom_reaper from > asynchronous address space reclaim and reduce the chances of timely OOM > resolving. Wait for the lock in the killable mode and return with EINTR > if the task got killed while waiting. > > Cc: Daniel Vetter > Cc: David Airlie > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka > --- > drivers/gpu/drm/i915/i915_gem.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index f68f34606f2f..a50136cbd332 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -1754,7 +1754,10 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data, > struct mm_struct *mm = current->mm; > struct vm_area_struct *vma; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) { > + drm_gem_object_unreference_unlocked(obj); > + return -EINTR; > + } > vma = find_vma(mm, addr); > if (vma) > vma->vm_page_prot = > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f42.google.com (mail-wm0-f42.google.com [74.125.82.42]) by kanga.kvack.org (Postfix) with ESMTP id F046B6B0005 for ; Fri, 11 Mar 2016 10:27:22 -0500 (EST) Received: by mail-wm0-f42.google.com with SMTP id p65so22096312wmp.0 for ; Fri, 11 Mar 2016 07:27:22 -0800 (PST) Subject: Re: [PATCH 17/18] drm/radeon: make radeon_mn_get wait for mmap_sem killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-18-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2E3D7.2060404@suse.cz> Date: Fri, 11 Mar 2016 16:27:19 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-18-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > radeon_mn_get which is called during ioct path relies on mmap_sem for > write. If the waiting task gets killed by the oom killer it would block > oom_reaper from asynchronous address space reclaim and reduce the > chances of timely OOM resolving. Wait for the lock in the killable mode > and return with EINTR if the task got killed while waiting. > > Cc: Alex Deucher > Cc: "Christian KA?nig" > Cc: David Airlie > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka > --- > drivers/gpu/drm/radeon/radeon_mn.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/radeon/radeon_mn.c b/drivers/gpu/drm/radeon/radeon_mn.c > index eef006c48584..896f2cf51e4e 100644 > --- a/drivers/gpu/drm/radeon/radeon_mn.c > +++ b/drivers/gpu/drm/radeon/radeon_mn.c > @@ -186,7 +186,9 @@ static struct radeon_mn *radeon_mn_get(struct radeon_device *rdev) > struct radeon_mn *rmn; > int r; > > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) > + return ERR_PTR(-EINTR); > + > mutex_lock(&rdev->mn_lock); > > hash_for_each_possible(rdev->mn_hash, rmn, node, (unsigned long)mm) > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by kanga.kvack.org (Postfix) with ESMTP id 7B8AA6B0253 for ; Fri, 11 Mar 2016 10:29:27 -0500 (EST) Received: by mail-wm0-f51.google.com with SMTP id p65so22172629wmp.0 for ; Fri, 11 Mar 2016 07:29:27 -0800 (PST) Subject: Re: [PATCH 18/18] drm/amdgpu: make amdgpu_mn_get wait for mmap_sem killable References: <1456752417-9626-1-git-send-email-mhocko@kernel.org> <1456752417-9626-19-git-send-email-mhocko@kernel.org> From: Vlastimil Babka Message-ID: <56E2E453.1090305@suse.cz> Date: Fri, 11 Mar 2016 16:29:23 +0100 MIME-Version: 1.0 In-Reply-To: <1456752417-9626-19-git-send-email-mhocko@kernel.org> Content-Type: text/plain; charset=iso-8859-2; format=flowed Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: Michal Hocko , LKML Cc: Andrew Morton , linux-mm@kvack.org, Alex Deucher , Alex Thorlton , Andrea Arcangeli , Andy Lutomirski , Benjamin LaHaise , =?UTF-8?Q?Christian_K=c3=b6nig?= , Daniel Vetter , Dave Hansen , David Airlie , Davidlohr Bueso , David Rientjes , "H . Peter Anvin" , Hugh Dickins , Ingo Molnar , Johannes Weiner , "Kirill A . Shutemov" , Konstantin Khlebnikov , linux-arch@vger.kernel.org, Mel Gorman , Oleg Nesterov , Peter Zijlstra , Petr Cermak , Thomas Gleixner , Michal Hocko On 02/29/2016 02:26 PM, Michal Hocko wrote: > From: Michal Hocko > > amdgpu_mn_get which is called during ioct path relies on mmap_sem for > write. If the waiting task gets killed by the oom killer it would block > oom_reaper from asynchronous address space reclaim and reduce the > chances of timely OOM resolving. Wait for the lock in the killable mode > and return with EINTR if the task got killed while waiting. > > Cc: David Airlie > Cc: Alex Deucher > Signed-off-by: Michal Hocko Acked-by: Vlastimil Babka > --- > drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > index d7ec9bd6755f..6f44f1c23be3 100644 > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mn.c > @@ -181,7 +181,10 @@ static struct amdgpu_mn *amdgpu_mn_get(struct amdgpu_device *adev) > int r; > > mutex_lock(&adev->mn_lock); > - down_write(&mm->mmap_sem); > + if (down_write_killable(&mm->mmap_sem)) { > + mutex_unlock(&adev->mn_lock); > + return -EINTR; > + } > > hash_for_each_possible(adev->mn_hash, rmn, node, (unsigned long)mm) > if (rmn->mm == mm) > -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f44.google.com (mail-wm0-f44.google.com [74.125.82.44]) by kanga.kvack.org (Postfix) with ESMTP id 29BB86B0005 for ; Fri, 11 Mar 2016 10:32:11 -0500 (EST) Received: by mail-wm0-f44.google.com with SMTP id n186so23688318wmn.1 for ; Fri, 11 Mar 2016 07:32:11 -0800 (PST) Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com. [74.125.82.46]) by mx.google.com with ESMTPS id gf10si11617280wjb.142.2016.03.11.07.32.09 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Mar 2016 07:32:10 -0800 (PST) Received: by mail-wm0-f46.google.com with SMTP id p65so22272133wmp.0 for ; Fri, 11 Mar 2016 07:32:09 -0800 (PST) Date: Fri, 11 Mar 2016 16:32:08 +0100 From: Michal Hocko Subject: Re: [PATCH] uprobes: wait for mmap_sem for write killable Message-ID: <20160311153208.GV27701@dhcp22.suse.cz> References: <1456752417-9626-16-git-send-email-mhocko@kernel.org> <1456767743-18665-1-git-send-email-mhocko@kernel.org> <56E2DD23.5070703@suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <56E2DD23.5070703@suse.cz> Sender: owner-linux-mm@kvack.org List-ID: To: Vlastimil Babka Cc: LKML , Andrew Morton , Oleg Nesterov , linux-mm@kvack.org On Fri 11-03-16 15:58:43, Vlastimil Babka wrote: > On 02/29/2016 06:42 PM, Michal Hocko wrote: [...] > >@@ -1468,7 +1470,8 @@ static void dup_xol_work(struct callback_head *work) > > if (current->flags & PF_EXITING) > > return; > > > >- if (!__create_xol_area(current->utask->dup_xol_addr)) > >+ if (!__create_xol_area(current->utask->dup_xol_addr) && > >+ !fatal_signal_pending(current) > ^ missing ")" > Fixed > Other than that, > Acked-by: Vlastimil Babka Thanks! > > > uprobe_warn(current, "dup xol area"); > > } > > > > -- Michal Hocko SUSE Labs -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org