Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp3740641ybl; Tue, 20 Aug 2019 01:20:43 -0700 (PDT) X-Google-Smtp-Source: APXvYqzwivwF5vtA7qF8fcXT5pRcLVwCAaC4WqrJEzFlSsXbW3C1R+r5j245wuljivatvVrVi/Yt X-Received: by 2002:a17:902:d686:: with SMTP id v6mr14512773ply.134.1566289243066; Tue, 20 Aug 2019 01:20:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566289243; cv=none; d=google.com; s=arc-20160816; b=NcA/pLVe0AR6rrMgp0ddOeKFQj7Enf0B6UK1O3NkfZKP+/0ZwoB6BsabsGCFBQ8ecl UjcHZl8uALO6QCDdUJAuq9V92KIApPyqh/ojbqXSaXwJ93sJGNXbR2lsJyZRiLOL/rpb i0o+K99suj2SlZwT8WklUR+5fWz6HJhJm2L869VjAG1lhB44FV2n7D02GFnKmMP0bbw2 SfxKmmi5yGIPOYRTzmGyQbEf5Sbo+k4Usfx6LDVH/sYoY1hOgIucX0854Il18evkTMiB EJBVZys/Erlal8BpQ4Lb6lBvutqKzQdGjDJyUysY0IUuFKcunQny8u+wb9p0gq3kRYyH KyLw== 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 :dkim-signature; bh=qZjzrRlZLlBFvOCMrk8fj5ec19AHD7NWtYEFTJfXwxg=; b=NeJ29Z1UoScVXwiEvpGgQX+2bElwny49fWH4DuifMHjES+uQ5WtVlh02P3CeAqQpil Nn8e2uxUCyut9wPW30MAN9j2c1iW4SqQ4avRJYEqc6lFMwhSsDfmiOTAsGJxPbQosRfU ZuDtgmNqgQ3BUnf1WJOIoVY+5Q36sPSOo8i6MSsIysdFAGGDcLV2N10Q47KtaVuKj6op ihMckl1fT2Q/YVBijEvxaJyafTSzRPvCQOfyT732pjSzcx5xY+zrX6mPqfTTFdl9AK8R MdN63D9AZPhvp8CDiZIywWR0pCSMDjMu9i+mf1jIzBOxO+wZ6zjVGESaLkpuh7hCUbf0 Leyg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ffwll.ch header.s=google header.b=k0TQLN1N; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v4si11801716plz.234.2019.08.20.01.20.27; Tue, 20 Aug 2019 01:20:43 -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; dkim=pass header.i=@ffwll.ch header.s=google header.b=k0TQLN1N; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729499AbfHTITQ (ORCPT + 99 others); Tue, 20 Aug 2019 04:19:16 -0400 Received: from mail-ed1-f66.google.com ([209.85.208.66]:35570 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729378AbfHTITP (ORCPT ); Tue, 20 Aug 2019 04:19:15 -0400 Received: by mail-ed1-f66.google.com with SMTP id t50so2377463edd.2 for ; Tue, 20 Aug 2019 01:19:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qZjzrRlZLlBFvOCMrk8fj5ec19AHD7NWtYEFTJfXwxg=; b=k0TQLN1Nox1/M2ISzbAc4zHTlgcsKT0BXPGsZZPpOBqREaDXPeFdyc1XMaGAKvIGx9 QxjK/4tpciokI/Wa88F954/rhr+3602xdbDv1jh7RSBhbC+T9zEzICLRcmUaOI2umUXJ dsXauR/20FNGp0zT6Wb3KfuJRD0AlIWDKNULA= 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=qZjzrRlZLlBFvOCMrk8fj5ec19AHD7NWtYEFTJfXwxg=; b=mkzhQxdTCyEntjyNncKF93Po5mRWED85VQUFcRKeAe+CAxUWMLW1/yZWbRKp83Eh9a c429sOccJdOEQnPCLfaWeuIuVUOomDWqWuAXfaS1qogefBCGUYkNg6eDQ1cPJPVffn7i 7W4Q6EYUaQROX7TF5vMO56WW+K9yj7vNnOyY8QON5HF9DU9YVykQpFqh6BsTyqohpVoq zx5Iu+TECZLPKHMIsh0xRoVldygvaYm0u2Mm2vXzl21J9MKLjB8mvZ5JKD48ZWYTxPgD oKkdTSZETkOckrT5KOvxeYyIMoo2udzUALivq8uvwlYK9vpgPIAIJCLwsk0F8lJO449q PAQA== X-Gm-Message-State: APjAAAUJm9T/53j0NtW+ATcnZNCkFfvYtg3OVoRxdi7HeV2dUVfpFWOv PA/EXOH7UDxHnbNl3RQFBaj2K5FAQN781w== X-Received: by 2002:a17:906:f2d0:: with SMTP id gz16mr24236150ejb.21.1566289153507; Tue, 20 Aug 2019 01:19:13 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id fj15sm2469623ejb.78.2019.08.20.01.19.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 20 Aug 2019 01:19:12 -0700 (PDT) From: Daniel Vetter To: LKML Cc: Linux MM , DRI Development , Intel Graphics Development , Daniel Vetter , Jason Gunthorpe , Andrew Morton , Michal Hocko , David Rientjes , =?UTF-8?q?Christian=20K=C3=B6nig?= , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Daniel Vetter Subject: [PATCH 4/4] mm, notifier: Catch sleeping/blocking for !blockable Date: Tue, 20 Aug 2019 10:19:02 +0200 Message-Id: <20190820081902.24815-5-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.23.0.rc1 In-Reply-To: <20190820081902.24815-1-daniel.vetter@ffwll.ch> References: <20190820081902.24815-1-daniel.vetter@ffwll.ch> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We need to make sure implementations don't cheat and don't have a possible schedule/blocking point deeply burried where review can't catch it. I'm not sure whether this is the best way to make sure all the might_sleep() callsites trigger, and it's a bit ugly in the code flow. But it gets the job done. Inspired by an i915 patch series which did exactly that, because the rules haven't been entirely clear to us. v2: Use the shiny new non_block_start/end annotations instead of abusing preempt_disable/enable. v3: Rebase on top of Glisse's arg rework. v4: Rebase on top of more Glisse rework. Cc: Jason Gunthorpe Cc: Andrew Morton Cc: Michal Hocko Cc: David Rientjes Cc: "Christian König" Cc: Daniel Vetter Cc: "Jérôme Glisse" Cc: linux-mm@kvack.org Reviewed-by: Christian König Reviewed-by: Jérôme Glisse Signed-off-by: Daniel Vetter --- mm/mmu_notifier.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c index 538d3bb87f9b..856636d06ee0 100644 --- a/mm/mmu_notifier.c +++ b/mm/mmu_notifier.c @@ -181,7 +181,13 @@ int __mmu_notifier_invalidate_range_start(struct mmu_notifier_range *range) id = srcu_read_lock(&srcu); hlist_for_each_entry_rcu(mn, &range->mm->mmu_notifier_mm->list, hlist) { if (mn->ops->invalidate_range_start) { - int _ret = mn->ops->invalidate_range_start(mn, range); + int _ret; + + if (!mmu_notifier_range_blockable(range)) + non_block_start(); + _ret = mn->ops->invalidate_range_start(mn, range); + if (!mmu_notifier_range_blockable(range)) + non_block_end(); if (_ret) { pr_info("%pS callback failed with %d in %sblockable context.\n", mn->ops->invalidate_range_start, _ret, -- 2.23.0.rc1