From patchwork Sun Aug 20 10:43:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mateusz Guzik X-Patchwork-Id: 13358746 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1EA8BEE4993 for ; Sun, 20 Aug 2023 10:43:42 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 168368E0001; Sun, 20 Aug 2023 06:43:42 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 117A88D0002; Sun, 20 Aug 2023 06:43:42 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F219B8E0001; Sun, 20 Aug 2023 06:43:41 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id E42158D0002 for ; Sun, 20 Aug 2023 06:43:41 -0400 (EDT) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 9A572140731 for ; Sun, 20 Aug 2023 10:43:41 +0000 (UTC) X-FDA: 81144147042.17.299A199 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) by imf22.hostedemail.com (Postfix) with ESMTP id E407EC0005 for ; Sun, 20 Aug 2023 10:43:39 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=QbTJ5h+v; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf22.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.208.54 as permitted sender) smtp.mailfrom=mjguzik@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692528220; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:references:dkim-signature; bh=mLa1opvhFmdS+3Ar+DtCPBJjkZRGUovvLN46nFS2xDQ=; b=NF5kDNrlrMvfNdy25qk6m1mfbPeiQtqYUWXbvfM+28jkwLgdKqCw+pG7CZCPXaHlSqdWCL E0we7UfzVeiYSaSUrsW3sLemtjTl70tgqwmP5uKi9MvecebBQ9PvSNXoqFAo6iH4G8EiET A/Ght5k3S/yLawaxtLvTjm+W49AOsqY= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=QbTJ5h+v; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf22.hostedemail.com: domain of mjguzik@gmail.com designates 209.85.208.54 as permitted sender) smtp.mailfrom=mjguzik@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692528220; a=rsa-sha256; cv=none; b=QUXJjmMGNoDrT9N77ZPlyTbQUXaSKQTArM11/aBLFm9YmO54bHwVyD6pTSDr9TQIj8A+Fu PLzi5tAD0AL+dBMMdzvSmNphQkZMRoErV4qlnwNjiHPYhyF1aWpdmhffIaK139dDSQWVRU lsNIQlVazfBe3ZkwUuWy3jN07asaFEA= Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-5257e2b5d12so2824565a12.2 for ; Sun, 20 Aug 2023 03:43:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692528218; x=1693133018; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=mLa1opvhFmdS+3Ar+DtCPBJjkZRGUovvLN46nFS2xDQ=; b=QbTJ5h+vvDFrFUsYrN2LUn/QLXRindM9ppsLruB6QB9BgFezRCE5oqtthSFWXZ17UA xCCRDsHUYbPwsOOUTfq+outeFlE6lDnyYKFMZCb3OXFXq/qaGEU1rU1JIlkasABGDjAP b2geQ+BnlOtN3uEwcpAMVlbdcVsNic2r46r8+XnUy7Ol4YMncoc5V7qb3fCxczvbNLi1 jbM75ICW4LhQCUwrpHR7cv4AymI9vPtLOj0niENTp8Ksmni2iPynU5cSqo56T11Q1ut3 hGrgXACWrC5XSQkZjCyqPO4O3iNI6Sj1nSNTZvp7VztoAj/dBUA2c+5NJfIGzZrwEa/p euYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692528218; x=1693133018; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mLa1opvhFmdS+3Ar+DtCPBJjkZRGUovvLN46nFS2xDQ=; b=Fawq4NXCJmyT1ll+PApYQwJTT3LT5Cu+39pupvp8dSzHp3N0be8Wk/MNat8HxkxZjE kiB//KPjLcuwUaENHIQ1QXC2iRCYfNVk1dKsOaRzzV8QjRBg9/sytKaoDmW7B4X6zZzi kTeEvqP4vfX5+AUATRLecNfz4NZqjYG9Ud+MEJWeBwWG0h628DHOlprgcrH8jJ3ZhNmY kdQ2GbBtoMly+YblUzD4cqADTHukt2tlN8QdM+i96QGUCDp3DBt9P4sMKuEzn0CcK88N 8DWStRWffLivyV7XTUo36+SmCSMK4k/IxGRk0cA0fBgDnM14B4QSidKcBFdVlY8V9LCw /YEg== X-Gm-Message-State: AOJu0YynUCkcNrzsrJp7QTUneP//osbGl8EBNV/AFXg4eZqTl4nNlYUN Z5/XHViXCE1RMCtDir/s4cU= X-Google-Smtp-Source: AGHT+IE6vsmzVQpniQf7+4/guhXFWuG1MtLhMr92CviWvcDc/PobjZm3ZldWxDgXtmbFKyJnXQIySg== X-Received: by 2002:aa7:d9d8:0:b0:525:734a:bf30 with SMTP id v24-20020aa7d9d8000000b00525734abf30mr3330858eds.36.1692528218131; Sun, 20 Aug 2023 03:43:38 -0700 (PDT) Received: from f.. (cst-prg-27-89.cust.vodafone.cz. [46.135.27.89]) by smtp.gmail.com with ESMTPSA id d19-20020a056402517300b005272523b162sm4007146ede.69.2023.08.20.03.43.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 20 Aug 2023 03:43:37 -0700 (PDT) From: Mateusz Guzik To: torvalds@linux-foundation.org Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Mateusz Guzik Subject: [PATCH] mm: remove unintentional voluntary preemption in get_mmap_lock_carefully Date: Sun, 20 Aug 2023 12:43:03 +0200 Message-Id: <20230820104303.2083444-1-mjguzik@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Rspamd-Queue-Id: E407EC0005 X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: fkxdbmpg7wusx3c4jkhd3wdyokhichyb X-HE-Tag: 1692528219-892317 X-HE-Meta: U2FsdGVkX1/C3BMJ0T+NI/0my9NGP+HJGaHd3fI8A+qQcDynDdgyFvq+qIKEv2h3ADFdW0c9N6AM8eT1rVln7WXSkqFWrSWg3vWnMqBZh2lBeGLXXFO01zSdSB6eI9DBLJv+HmDOSGrWaZR7RsXVdRyobe38nGK6ft6pRtXGYkMvNbr8bbcIjUfAweF2EW1fDcyQngX7Rdi4/m6xWpYLNeOCRygUIg+3rnkWs3ekC+Oui3etS87MqViGPXZzKdqfFGDrVAyVUEOTRcU0V9D+Frx5U1fU4LGHC2VUjbRjuJXPZ30XbM1ae0bRNzZ8cPrhRRwUiLZ8g71hmQebQclWZAo8EUEvT0+zmW+R1zRLujc04ee1TGtqOPyEXfQnhpZH9lJa+28WyxQuX304OuKUuWmuK+FqCUgRDdWQ139XAS0BN/kpJWBh/q2isSQuQnv3hZu8BtBxvk5PZ+joa0CdbjHKFQBfUom+NffQ1yeC7YiQ7UmyyDaZVlKbl8SvqwoPKLOt8IfI324hIHWRS43qtTXhYaLCFE3o+hjUzmKHlarUcIVVQisKiHA7u+qsQ0eC8TWXzq09mWG7vbZUZtUVotcSev+7MAs9hDsk1DTwJNsAOilD1r/URaFrhDEIAFkJTNJu+m28KUigrNbUQdvCWtuXkTkairHwa4ipqjU8b0gCaKRWcaNN68MNsAFNE+dY8vENMKKWHVw34pmwTKqEiTkZXfOBzaiOXLLq9i0H4XjQ1Lk4EVMYk2kFsin/8ydIqlVwMKNYVw7d24J0+1MlOHrv+Qjl92qtAXcSNS3maeeXybz8ih2eDukRhfIoFdfT/yheXE+sTcytn9JCD+V/t0aF2jZkdKt2heuSGJxHl7VRpdePWQrAO0JyLTKLelQYlwjZNZaVQgW1KNIUOCIpdvvjPrmdhSigQKxx/jokUlas/nofl1hM3d2TcDOmyAW2ZhiudbJoN0R+0Wp79cU +1pSHiAc jGi10m4LHgMi+oRvS1P47JjV8gRHx799qUWZ8jwq4mmh+wOjqIN4Q/GtBXqG+rTyHqwT0P6Rt0COCc/t5lqQiqJlOWWVdS5yOvKtIz48smqSsgyLlY2Dq2vevD0pzV1BvohzfyOZyuKEBCbUpOYAlbwjtJ0sGJaPPJLOEL1SSHo1xhvMih05D9ujMN0VY48SStflEzFc5WPe3ouF1AU6LxraFyQ9Px66vP//wv36Wi7KPHLCqP+Tl1b8NjfwwE7Z2A2Wygsd8STcx5PzprPGUpijkQ86PcS4Hvv1Vb+2BjL04lB4ipIKWPOK5Rab3QMKFrUR0sgkf54Kd7PIgVK1HUobLGrN9L3kMJOQJp584w4H1rcJcRmmpPzpnKKYIuEnFhFVzi9NLh+o6jsKLO0SOfzjXFTxXhioWp4mzOfDF03YlBS/7TB/1Q88G7T+s1UfzDGynYbbf5ijspdU= 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: Should the trylock succeed (and thus blocking was avoided), the routine wants to ensure blocking was still legal to do. However, the method used ends up calling __cond_resched injecting a voluntary preemption point with the freshly acquired lock. One can hack around it using __might_sleep instead of mere might_sleep, but since threads keep going off CPU here, I figured it is better to accomodate it. Drop the trylock, do the read lock which does the job prior to lock acquire. Found by checking off-CPU time during kernel build (like so: "offcputime-bpfcc -Ku"), sample backtrace: finish_task_switch.isra.0 __schedule __cond_resched lock_mm_and_find_vma do_user_addr_fault exc_page_fault asm_exc_page_fault - sh (4502) 10 Signed-off-by: Mateusz Guzik Signed-off-by: Mateusz Guzik Signed-off-by: Mateusz Guzik --- mm/memory.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mm/memory.c b/mm/memory.c index 1ec1ef3418bf..f31d5243272b 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -5257,12 +5257,6 @@ EXPORT_SYMBOL_GPL(handle_mm_fault); static inline bool get_mmap_lock_carefully(struct mm_struct *mm, struct pt_regs *regs) { - /* Even if this succeeds, make it clear we *might* have slept */ - if (likely(mmap_read_trylock(mm))) { - might_sleep(); - return true; - } - if (regs && !user_mode(regs)) { unsigned long ip = instruction_pointer(regs); if (!search_exception_tables(ip))