Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp1108556ybf; Fri, 28 Feb 2020 14:21:28 -0800 (PST) X-Google-Smtp-Source: APXvYqzeMVlQ5gmYAMEaeV3mar/UJwwr11cN+IIw5lrttqFm95svHI7m+/otISe0DV1MFJl4e+OW X-Received: by 2002:a9d:760d:: with SMTP id k13mr4753440otl.42.1582928488406; Fri, 28 Feb 2020 14:21:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582928488; cv=none; d=google.com; s=arc-20160816; b=Xn/KIQV05LCF82lIUU4F4TbvGZa4UNPTYcryV6aoiK/GMHyr6o8OKQt/KPG3NsHVW8 iT/6/mXG2HFsEDWt7aKli5QH1r0ktqXhLbVE1hGF3UBzFhk8ezykBcL6Qcb9+IDOxPxL Icb9kR9NKxZYUEQ7L2IuZ7xFJ6jLUo2cYR4jxcxIp7k7KC1214iQ6HZtIcsPVEU5ERG8 HJ9awsUQqAiWnucM3E5luPiuyo05JVbe73JmKMpR0bKOTdmstdILQAyLrKae7Hmuz/3j T4o0naqLr+ngxcSp8+81z9cxdMqs8yKqiyuAVsoFyHzQTdAhzzNeGG3WQW5AwbGxaaeR zxrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=RLZDPkr+sbLOsLAqSk5t24KKVvpcoUu7pZBHwyGVF/w=; b=GTETgSJhhUWPSbuuIxz+SFORTgQ4lV9rjFoUYbMK1/Cob1Ox47L2AEt6tmXlbNWYrx wOJHQaKSmR7sQ65DOHf4PCB183R2UoH1or3mSketH/nx2sg5huJxqLQffO0ehDw1a7tN K79FpV8P4Z5MHw7z4Isc7jE0SGLmyUIUowpUKU2RpLiLj5t6w9J91pdVmThAxkl7ovFh QJHmNWROadFfqofv+TETejE2uJaCbmi8YvnjqscHnqBiWu+7OrlZFtHE0d1r5pVQ6LcS y08DOdXBEP3L9yPI8cLo0xCSldvktJQVEpSUzPF3iyLOfDSzQblfAeQ5WjPgj8PQB+qq aFyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=iGHi9zGl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 2si2519962ois.221.2020.02.28.14.21.17; Fri, 28 Feb 2020 14:21:28 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=iGHi9zGl; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726740AbgB1WUm (ORCPT + 99 others); Fri, 28 Feb 2020 17:20:42 -0500 Received: from mail-vs1-f67.google.com ([209.85.217.67]:43754 "EHLO mail-vs1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726151AbgB1WUm (ORCPT ); Fri, 28 Feb 2020 17:20:42 -0500 Received: by mail-vs1-f67.google.com with SMTP id 7so2962047vsr.10 for ; Fri, 28 Feb 2020 14:20:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=RLZDPkr+sbLOsLAqSk5t24KKVvpcoUu7pZBHwyGVF/w=; b=iGHi9zGlTxXPUGyfJ6aUjX/jWRV86OTlh52H3HYRIcBPHLkMLGGLkwHZ2G2RGrhjo+ lc0LQFLKpfqzcLXa4Zq8VPTs0yfXEEM9ERN9sbCUxvBGj66WYsuk6KiWPfIPSNZmLp30 IEH632S07sXyUQ79F3J5ezao+yF/Fpe7qru2HjbwueLbUIf4YiXSkL8NdnKY60uecYp0 sJqGmPztqjek/tGyz+px0ir2Dfc4PCHkQsPr3Jxwbh701LYSw7ALikrNIcKSGoUHwcyx NXpQTdUZH0k3K3iD6/qJiQlPWTSMk22J8iaPaZl7KbxUT28WcnjG8YvZYCsAuaRXyrMd +PKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=RLZDPkr+sbLOsLAqSk5t24KKVvpcoUu7pZBHwyGVF/w=; b=PXK+crkpTQqSIrjgYDCjVF2PVDYXJXiqQD0MfR3yVHyrC54pVWX2ImFjWaH/XZmBSn SDjUChzqcUbgF17pjOhJpBgIYkeiLaM679Yem1rHhqHH/8a8rVWt8HamhwPqEa2CPLgw bqUXHUeWzE6njufkjrDl0dvKtiDF4tsgbIEzf1Oyu1fix9tVOS8i46KCWLuJz8x8/Qti U8VpP0DMYYIBl/9UXp9TaP4CCTsFIPrzYMzrJBzojxlYC2uJPufHLpENK2OYpS27achs 0xJ3xTJU/dctEPL9ewRSIq372hLHChqRmee9cpgD28MXeQ9VBZ631+hd52G13VFjdLNA //YQ== X-Gm-Message-State: ANhLgQ3wkS7oSwEX48ZGK+w115Bp4HYdzl+viJnXLihRoy2e/+EKggOq R2TQemUPUAk2YZ0dIZvshT7PEqn4Yl506Mk2c1ZOnA== X-Received: by 2002:a67:ed0a:: with SMTP id l10mr3731827vsp.239.1582928438632; Fri, 28 Feb 2020 14:20:38 -0800 (PST) MIME-Version: 1.0 References: <20200219014433.88424-1-minchan@kernel.org> <20200219014433.88424-4-minchan@kernel.org> In-Reply-To: <20200219014433.88424-4-minchan@kernel.org> From: Suren Baghdasaryan Date: Fri, 28 Feb 2020 14:20:27 -0800 Message-ID: Subject: Re: [PATCH v6 3/7] mm: check fatal signal pending of target process To: Minchan Kim Cc: Andrew Morton , LKML , linux-mm , linux-api@vger.kernel.org, oleksandr@redhat.com, Tim Murray , Daniel Colascione , Sandeep Patil , Sonny Rao , Brian Geffon , Michal Hocko , Johannes Weiner , Shakeel Butt , John Dias , Joel Fernandes , sj38.park@gmail.com, alexander.h.duyck@linux.intel.com, Jann Horn Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 18, 2020 at 5:44 PM Minchan Kim wrote: > > Bail out to prevent unnecessary CPU overhead if target process has > pending fatal signal during (MADV_COLD|MADV_PAGEOUT) operation. > > Signed-off-by: Minchan Kim > --- > mm/madvise.c | 29 +++++++++++++++++++++-------- > 1 file changed, 21 insertions(+), 8 deletions(-) > > diff --git a/mm/madvise.c b/mm/madvise.c > index f29155b8185d..def1507c2030 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -36,6 +36,7 @@ > struct madvise_walk_private { > struct mmu_gather *tlb; > bool pageout; > + struct task_struct *target_task; > }; > > /* > @@ -316,6 +317,10 @@ static int madvise_cold_or_pageout_pte_range(pmd_t *pmd, > if (fatal_signal_pending(current)) > return -EINTR; > > + if (private->target_task && > + fatal_signal_pending(private->target_task)) > + return -EINTR; > + > #ifdef CONFIG_TRANSPARENT_HUGEPAGE > if (pmd_trans_huge(*pmd)) { > pmd_t orig_pmd; > @@ -471,12 +476,14 @@ static const struct mm_walk_ops cold_walk_ops = { > }; > > static void madvise_cold_page_range(struct mmu_gather *tlb, > + struct task_struct *task, > struct vm_area_struct *vma, > unsigned long addr, unsigned long end) > { > struct madvise_walk_private walk_private = { > .pageout = false, > .tlb = tlb, > + .target_task = task, > }; > > tlb_start_vma(tlb, vma); > @@ -484,7 +491,8 @@ static void madvise_cold_page_range(struct mmu_gather *tlb, > tlb_end_vma(tlb, vma); > } > > -static long madvise_cold(struct vm_area_struct *vma, > +static long madvise_cold(struct task_struct *task, > + struct vm_area_struct *vma, > struct vm_area_struct **prev, > unsigned long start_addr, unsigned long end_addr) > { > @@ -497,19 +505,21 @@ static long madvise_cold(struct vm_area_struct *vma, > > lru_add_drain(); > tlb_gather_mmu(&tlb, mm, start_addr, end_addr); > - madvise_cold_page_range(&tlb, vma, start_addr, end_addr); > + madvise_cold_page_range(&tlb, task, vma, start_addr, end_addr); > tlb_finish_mmu(&tlb, start_addr, end_addr); > > return 0; > } > > static void madvise_pageout_page_range(struct mmu_gather *tlb, > + struct task_struct *task, > struct vm_area_struct *vma, > unsigned long addr, unsigned long end) > { > struct madvise_walk_private walk_private = { > .pageout = true, > .tlb = tlb, > + .target_task = task, > }; > > tlb_start_vma(tlb, vma); > @@ -533,7 +543,8 @@ static inline bool can_do_pageout(struct vm_area_struct *vma) > inode_permission(file_inode(vma->vm_file), MAY_WRITE) == 0; > } > > -static long madvise_pageout(struct vm_area_struct *vma, > +static long madvise_pageout(struct task_struct *task, > + struct vm_area_struct *vma, > struct vm_area_struct **prev, > unsigned long start_addr, unsigned long end_addr) > { > @@ -549,7 +560,7 @@ static long madvise_pageout(struct vm_area_struct *vma, > > lru_add_drain(); > tlb_gather_mmu(&tlb, mm, start_addr, end_addr); > - madvise_pageout_page_range(&tlb, vma, start_addr, end_addr); > + madvise_pageout_page_range(&tlb, task, vma, start_addr, end_addr); > tlb_finish_mmu(&tlb, start_addr, end_addr); > > return 0; > @@ -929,7 +940,8 @@ static int madvise_inject_error(int behavior, > #endif > > static long > -madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev, > +madvise_vma(struct task_struct *task, struct vm_area_struct *vma, > + struct vm_area_struct **prev, > unsigned long start, unsigned long end, int behavior) > { > switch (behavior) { > @@ -938,9 +950,9 @@ madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev, > case MADV_WILLNEED: > return madvise_willneed(vma, prev, start, end); > case MADV_COLD: > - return madvise_cold(vma, prev, start, end); > + return madvise_cold(task, vma, prev, start, end); > case MADV_PAGEOUT: > - return madvise_pageout(vma, prev, start, end); > + return madvise_pageout(task, vma, prev, start, end); > case MADV_FREE: > case MADV_DONTNEED: > return madvise_dontneed_free(vma, prev, start, end, behavior); > @@ -1140,7 +1152,8 @@ int do_madvise(struct task_struct *target_task, struct mm_struct *mm, > tmp = end; > > /* Here vma->vm_start <= start < tmp <= (end|vma->vm_end). */ > - error = madvise_vma(vma, &prev, start, tmp, behavior); > + error = madvise_vma(target_task, vma, &prev, > + start, tmp, behavior); > if (error) > goto out; > start = tmp; > -- > 2.25.0.265.gbab2e86ba0-goog > Reviewed-by: Suren Baghdasaryan