From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C11FDC11D05 for ; Thu, 20 Feb 2020 16:22:54 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 5F46F206F4 for ; Thu, 20 Feb 2020 16:22:54 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="hUqDtNYA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5F46F206F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id D928D6B000A; Thu, 20 Feb 2020 11:22:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D42816B000C; Thu, 20 Feb 2020 11:22:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C0A9E6B000D; Thu, 20 Feb 2020 11:22:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0202.hostedemail.com [216.40.44.202]) by kanga.kvack.org (Postfix) with ESMTP id A64BB6B000A for ; Thu, 20 Feb 2020 11:22:53 -0500 (EST) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 5120F1803545A for ; Thu, 20 Feb 2020 16:22:53 +0000 (UTC) X-FDA: 76511024226.16.song67_54ae1bc1f5c35 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin16.hostedemail.com (Postfix) with ESMTP id B28C5100E9C0E for ; Thu, 20 Feb 2020 16:03:02 +0000 (UTC) X-HE-Tag: song67_54ae1bc1f5c35 X-Filterd-Recvd-Size: 6774 Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) by imf16.hostedemail.com (Postfix) with ESMTP for ; Thu, 20 Feb 2020 16:03:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582214581; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=yA277DmVYSsZZHtwW3tetiA15zmmdpKkx6obyx07MsU=; b=hUqDtNYAKjo26Oj+MpXvuG0zgIs5dwLZ9b1qoy4guJzFJz7/+aX2jY+dSVeF8EKvM4OB5w +Wgx4Mlbx7n2g5omMvWP27Qk3vFDsLKAdhjeX8YTpmCRVVEyR2RARgvibZjHpdvxH3pZtO RKDj/fW3a3/HPdId43WoveWhCMeugNE= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-326-RrPM9I3GNmeXWqGWJi3rRg-1; Thu, 20 Feb 2020 11:02:59 -0500 Received: by mail-qv1-f70.google.com with SMTP id k2so2846296qvu.22 for ; Thu, 20 Feb 2020 08:02:59 -0800 (PST) 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=q5FY/Zzd2u2AdqZ3/YqXWZ85ciAIFYLeZe5XKvNHEBI=; b=C6CPG7vVMHRyGT+lB83pi4LKjyqb+DMGWrMij1Fna79/ki16tReHU+rJpWv3aMTJ9D SIx+oIma42zziHWZ3LSW9s7GH+8JLe2FwCQL+IJv+/oCvBgJFnO/+I+Fdc8udlDjsIZQ /FQ3J1d//ov5VMPhmkaa26H1LC6N60BdgZPruV/RScx3cWSE4ExIEsijOiwedx4h0MEA PrCrwMeZRdtZwZkSA8jzwdMFZDQ0fy8rfy++tKjyqnJJcvHf80PyqLwjdgHLMyU7XXJD HeuTkAMZ1a9AWr1E9BQJabtjcb5Lb5O5JxNpYXw810MbEnxZWePlvUdY9JWlgye7suC7 xBPw== X-Gm-Message-State: APjAAAXiORmjXt/un0ajCxJe2rt8+JGQ+Cp9swxaXJYPW1uY4ht6Y6j8 Ay+cV1a8JUQcQ570TtBqbsZqEtUb0gQaNK7MQQPtxLwt31rYGUzXlxirFICsRIjNkH0NfAGMM/b D30nlx6+7Xhk= X-Received: by 2002:ac8:76d7:: with SMTP id q23mr26733658qtr.198.1582214579292; Thu, 20 Feb 2020 08:02:59 -0800 (PST) X-Google-Smtp-Source: APXvYqwoNuezOvlo55PbKbVDuaGVM6RJ8MihIsmeXUiSVkGz8jhyvlUwzF/7iq9KMKbFy8anvbkKyw== X-Received: by 2002:ac8:76d7:: with SMTP id q23mr26733627qtr.198.1582214579032; Thu, 20 Feb 2020 08:02:59 -0800 (PST) Received: from xz-x1.redhat.com ([104.156.64.75]) by smtp.gmail.com with ESMTPSA id 139sm1821617qkg.79.2020.02.20.08.02.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Feb 2020 08:02:58 -0800 (PST) From: Peter Xu To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Peter Xu , Martin Cracauer , Mike Rapoport , Hugh Dickins , Jerome Glisse , "Kirill A . Shutemov" , Matthew Wilcox , Pavel Emelyanov , Brian Geffon , Maya Gokhale , Denis Plotnikov , Andrea Arcangeli , Johannes Weiner , "Dr . David Alan Gilbert" , Linus Torvalds , Mike Kravetz , Marty McFadden , David Hildenbrand , Bobby Powers , Mel Gorman Subject: [PATCH RESEND v6 15/16] mm/gup: Allow to react to fatal signals Date: Thu, 20 Feb 2020 11:02:56 -0500 Message-Id: <20200220160256.9887-1-peterx@redhat.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200220155353.8676-1-peterx@redhat.com> References: MIME-Version: 1.0 X-MC-Unique: RrPM9I3GNmeXWqGWJi3rRg-1 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: 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 ec2b76f44a01..3f0cb14334ac 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -648,7 +648,7 @@ static int faultin_page(struct task_struct *tsk, struct= vm_area_struct *vma, =09if (*flags & FOLL_REMOTE) =09=09fault_flags |=3D FAULT_FLAG_REMOTE; =09if (locked) -=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY; +=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; =09if (*flags & FOLL_NOWAIT) =09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT; =09if (*flags & FOLL_TRIED) { @@ -991,7 +991,7 @@ int fixup_user_fault(struct task_struct *tsk, struct mm= _struct *mm, =09address =3D untagged_addr(address); =20 =09if (unlocked) -=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY; +=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; =20 retry: =09vma =3D find_extend_vma(mm, address); @@ -1113,7 +1113,13 @@ static __always_inline long __get_user_pages_locked(= struct task_struct *tsk, =09=09=09break; =20 =09=09*locked =3D 1; -=09=09down_read(&mm->mmap_sem); +=09=09ret =3D down_read_killable(&mm->mmap_sem); +=09=09if (ret) { +=09=09=09BUG_ON(ret > 0); +=09=09=09if (!pages_done) +=09=09=09=09pages_done =3D ret; +=09=09=09break; +=09=09} =20 =09=09ret =3D __get_user_pages(tsk, mm, start, 1, flags | FOLL_TRIED, =09=09=09=09 pages, NULL, locked); diff --git a/mm/hugetlb.c b/mm/hugetlb.c index ac9a28d51674..c342b091a7a4 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4338,7 +4338,8 @@ long follow_hugetlb_page(struct mm_struct *mm, struct= vm_area_struct *vma, =09=09=09if (flags & FOLL_WRITE) =09=09=09=09fault_flags |=3D FAULT_FLAG_WRITE; =09=09=09if (locked) -=09=09=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY; +=09=09=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY | +=09=09=09=09=09FAULT_FLAG_KILLABLE; =09=09=09if (flags & FOLL_NOWAIT) =09=09=09=09fault_flags |=3D FAULT_FLAG_ALLOW_RETRY | =09=09=09=09=09FAULT_FLAG_RETRY_NOWAIT; --=20 2.24.1