Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp806101ybn; Tue, 24 Sep 2019 09:47:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqxG82u+3BFg/3h+jX4uWnBxwOfeLVLYW4A6icWuILMbgnZRWSUoET1rRgFESk3khYycV1LO X-Received: by 2002:a5d:4611:: with SMTP id t17mr3196310wrq.135.1569343640472; Tue, 24 Sep 2019 09:47:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569343640; cv=none; d=google.com; s=arc-20160816; b=BxSfoegNS/OmOXqw/aKC0WwV2M9FxdTenaEkEO2kmDSagfH/UBx9I4IZO/sdEGYkN0 t6H1OCg5Gka/hDr4+xPWqCwn4Z4sxnWoThsbxoAZDBx1eiL0mJQD1CLBbFIjOy+bgsHB s2ZNFTxLNcLu8Njiebzs5SP6rsITojFLipaYZWd6sNuUG1RCaK/jfBIrDFhsqSmPKpyy rulseTbpltfpzyjFWcIoejavRJh0cLZZEDU89wwyFSSxWEpOoIc9oZOEx3BxCFznQwls IGcrEdkGeVU1kOcZ3fGe/ZCEzQO3bwAOISG69GCENt1yesq9Oi7yxJf4viMi9lb9eSxJ 6obA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Zt8EwZyFUvlwT1VYMNYV6I/TnTem7aMxIFLElv6YJ/M=; b=BslB/q7fe2S9EBvYr3vvSMvqlqM00+cxVjHEO8ODemZicAT4U9EicCscDkIt0lY1AV 36kXrlqKEwG9cqoDn5tdwULrJLY7RnJZhy/U/DNOO3y+CEVoOq3y0JZjhb91dmDtxT7/ +8I65XypHVU0py660RkmOtqDdcJKo5FATBAc6Q4OShHoEoR5u2Pz/RR387arx8syzeGJ zYA+hbuVexRJQW6V/tU0VM1QsOqK6rtjmB/qzEkNbvw0Uc8W8/U3YSS90Gu/dih0DM8a sgJx43zwC5xjl5vIM66VeBNJNx+lcspPWXaSMZbkXga8VdR+HsZyQVKUKLAU6rcq/Ccx OJvg== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n17si1370972edo.143.2019.09.24.09.46.57; Tue, 24 Sep 2019 09:47:20 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2406477AbfIWE0s (ORCPT + 99 others); Mon, 23 Sep 2019 00:26:48 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56058 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2405826AbfIWE0r (ORCPT ); Mon, 23 Sep 2019 00:26:47 -0400 Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 547ED85360 for ; Mon, 23 Sep 2019 04:26:47 +0000 (UTC) Received: by mail-pl1-f200.google.com with SMTP id m8so7958959plt.14 for ; Sun, 22 Sep 2019 21:26:47 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Zt8EwZyFUvlwT1VYMNYV6I/TnTem7aMxIFLElv6YJ/M=; b=J5o/rzUvmsO0Nrs0VlAUuLI5J9KkSp2U0jq6ATTitpRDlU5UktJ1KM/ruJLW5RAddd GMX0c3QlarVHjEy/DCo2m9OyoRNTeAFZR/IdLsdLTGscmxYFFGju+wfD/1S9KDaXwYua rpwa7cx3rqfNslUCjJHZJDI5ZoQj5CZPKq5HMEKXQQn6Dyuq3RUAwWmaJJuy+iG7VfPy cuPzoDn9/LfzmJcJpm2GkpH9N6kOw6cdUbQBfz3kYK0l1sjG4xuqE1BTCPVczT1Ktoyw gXW2q01GWNh1WUDqpfnV6qK9bhrNnzu6NKARVF7230lnK/djGHeo8+I/PzrHPHePPCew ORQw== X-Gm-Message-State: APjAAAXvxoUnJAftV/4DVnGmxL77jYrNxBGcCqKDwOOYZH/j3KOwIjCm Cha7cVZSD34K4bkHaf4omH2LciLswyy0O//2h4kGmEMNxUR0KtHvkoH2IKwJsxjVTzCEsOLBczB 8T6zSKXbYIRUW9/Rn+1TcMqLI X-Received: by 2002:a17:90a:154f:: with SMTP id y15mr18843066pja.73.1569212805394; Sun, 22 Sep 2019 21:26:45 -0700 (PDT) X-Received: by 2002:a17:90a:154f:: with SMTP id y15mr18843054pja.73.1569212805196; Sun, 22 Sep 2019 21:26:45 -0700 (PDT) Received: from xz-x1.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id x20sm11781867pfp.120.2019.09.22.21.26.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 22 Sep 2019 21:26:44 -0700 (PDT) From: Peter Xu To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: David Hildenbrand , Hugh Dickins , Maya Gokhale , Jerome Glisse , Pavel Emelyanov , Johannes Weiner , peterx@redhat.com, Martin Cracauer , Marty McFadden , Shaohua Li , Andrea Arcangeli , Mike Kravetz , Denis Plotnikov , Mike Rapoport , Linus Torvalds , Mel Gorman , "Kirill A . Shutemov" , "Dr . David Alan Gilbert" Subject: [PATCH v4 09/10] mm/gup: Allow to react to fatal signals Date: Mon, 23 Sep 2019 12:25:22 +0800 Message-Id: <20190923042523.10027-10-peterx@redhat.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190923042523.10027-1-peterx@redhat.com> References: <20190923042523.10027-1-peterx@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The existing gup code does not react to the fatal signals in many code paths. For example, in one retry path of gup we're still using down_read() rather than down_read_killable(). Also, when doing page faults we don't pass in FAULT_FLAG_KILLABLE as well, which means that within the faulting process we'll wait in non-killable way as well. These were spotted by Linus during the code review of some other patches. Let's allow the gup code to react to fatal signals to improve the responsiveness of threads when during gup and being killed. Signed-off-by: Peter Xu --- mm/gup.c | 12 +++++++++--- mm/hugetlb.c | 3 ++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/mm/gup.c b/mm/gup.c index d2811bb15a25..4c638473db83 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -640,7 +640,7 @@ static int faultin_page(struct task_struct *tsk, struct vm_area_struct *vma, if (*flags & FOLL_REMOTE) fault_flags |= FAULT_FLAG_REMOTE; if (locked) - fault_flags |= FAULT_FLAG_ALLOW_RETRY; + fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; if (*flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; if (*flags & FOLL_TRIED) { @@ -973,7 +973,7 @@ int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm, vm_fault_t ret, major = 0; if (unlocked) - fault_flags |= FAULT_FLAG_ALLOW_RETRY; + fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; retry: vma = find_extend_vma(mm, address); @@ -1086,7 +1086,13 @@ static __always_inline long __get_user_pages_locked(struct task_struct *tsk, break; *locked = 1; - down_read(&mm->mmap_sem); + ret = down_read_killable(&mm->mmap_sem); + if (ret) { + BUG_ON(ret > 0); + if (!pages_done) + pages_done = ret; + break; + } ret = __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED, pages, NULL, locked); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index d0c98cff5b0f..84034154d50e 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4342,7 +4342,8 @@ long follow_hugetlb_page(struct mm_struct *mm, struct vm_area_struct *vma, if (flags & FOLL_WRITE) fault_flags |= FAULT_FLAG_WRITE; if (locked) - fault_flags |= FAULT_FLAG_ALLOW_RETRY; + fault_flags |= FAULT_FLAG_ALLOW_RETRY | + FAULT_FLAG_KILLABLE; if (flags & FOLL_NOWAIT) fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; -- 2.21.0