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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6350EC88CB2 for ; Mon, 12 Jun 2023 16:08:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E28968E0005; Mon, 12 Jun 2023 12:08:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id DB2768E0002; Mon, 12 Jun 2023 12:08:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C7B7F8E0005; Mon, 12 Jun 2023 12:08:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id B33B08E0002 for ; Mon, 12 Jun 2023 12:08:04 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id F18DE1402CA for ; Mon, 12 Jun 2023 16:08:03 +0000 (UTC) X-FDA: 80894577246.10.3F4B3E4 Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176]) by imf13.hostedemail.com (Postfix) with ESMTP id ADC8A20046 for ; Mon, 12 Jun 2023 16:07:51 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=ldreut73; spf=pass (imf13.hostedemail.com: domain of surenb@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1686586071; 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-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=WQi6jtfU5Lynaf+sn5nkLvTDsBxdvtzSQejpmjCr2Yk=; b=7hdVmqoFb34YLTyPU3fNBhUG+iKMUzAEiT/9MPOQlW66o46h2oGfblti6TPFnVnq6ZrAvq Ex2JRFcHyhw3y4e8RymLXbC4NaBGHKalfVbWiWeymv5GVXI1vf3yX+ssIfcBZNzQLTGXrA 5yJNriKb+0ZpKqZQNxyb9qIBgLzedGI= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=ldreut73; spf=pass (imf13.hostedemail.com: domain of surenb@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=surenb@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1686586071; a=rsa-sha256; cv=none; b=CDJT9cRtbivCjXP+8scYf7tKDoGSYHl5toz4ZQYTWkUDBi6s4HbAjY9WekxTV7LRkgPjmZ Hc8D0w1jDDsZfAJKb3s5QJ64GWbjWujaiwi2awxjgvuD5yFQneDPrcF7zafeceD2bzhl2d LfISVbMaPRA1rTMdXluoynqlGwtnTC4= Received: by mail-yb1-f176.google.com with SMTP id 3f1490d57ef6-bc43a73ab22so3380432276.0 for ; Mon, 12 Jun 2023 09:07:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1686586070; x=1689178070; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=WQi6jtfU5Lynaf+sn5nkLvTDsBxdvtzSQejpmjCr2Yk=; b=ldreut73mQ7n/9Rvm35cqn0sTfKZnyPz57sJzkjPKlUTacxjPpUB5qkwnYpLz04nWi etFQJKZhaKM8I3MOmegKu7fthVQ/JMQuXCm6jC38J9kuoI/EMC3pMvYK+vY9AR2Ql5Xa 2dlFgBYdbZf7n2dEgfiM9BGZ2Tpj4YP/zi0kGVstPMQMpehVlj50D1EdTzepJ62GTwup FW7M5iNYbJHM0V6JmYakSx4GA32k7dqw2SItmTaCXruIDP1rVcX9geye6IGVemMdhv2O 6NNRFtmxfN2FO6ThSPmu98Sg0XT9rAhG+dD5vcE3CDKtgx9wopSLfGr6RrhBAUJAG4uw wXSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1686586070; x=1689178070; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WQi6jtfU5Lynaf+sn5nkLvTDsBxdvtzSQejpmjCr2Yk=; b=EXC2QyE+rKWm0DRYa3LJn4npfojivURdS5i5gGXRsrvGCZDi216+P5wltGOxTLSy+G unGAu2uaEP/0yHSQPLkW8B0jMRe5Z+a+GfY/Ta5CTmx9wCWZLR2vlAAYew/w1sEASW8w RjtggbiYwFwl8FnQZt0DyHiAlRRgC7nGQ+EIrIY2e21qHOVZvLNg/U3R01m8GAlwYPBH 1bq9fwp3f5BlaWOXjspHc3VSCOSlFEahLlLSFhPudQilUgWUtUzMQsT3uztebg2TLb5a iQmcucwp6VI+l2vRmPfIzRxS3BljlNZlG/r/nQtWklKe6Y5XHf+Ce7aUZKJTZumUuTSZ QsVg== X-Gm-Message-State: AC+VfDwryZLKdVG1gkM884KfraHbiq+xzNmFpgSKcXqmMPm3OnYzSVqg 7WtZ9/HWNrPUtwlyAos+5dCRyZjQSqPw2RN4O6nCPg== X-Google-Smtp-Source: ACHHUZ474Hgkm1DqxTKXCEkmV8DS7fOJrZgwzR9YLV3SLZ9qbXmX0kgeF+jqhDiNpwtfbLybFp7wetScHd2KnZPaMEw= X-Received: by 2002:a5b:a06:0:b0:bb1:76ca:d1f9 with SMTP id k6-20020a5b0a06000000b00bb176cad1f9mr11770295ybq.20.1686586070336; Mon, 12 Jun 2023 09:07:50 -0700 (PDT) MIME-Version: 1.0 References: <20230609005158.2421285-1-surenb@google.com> <20230609005158.2421285-5-surenb@google.com> In-Reply-To: From: Suren Baghdasaryan Date: Mon, 12 Jun 2023 09:07:38 -0700 Message-ID: Subject: Re: [PATCH v2 4/6] mm: drop VMA lock before waiting for migration To: Peter Xu Cc: akpm@linux-foundation.org, willy@infradead.org, hannes@cmpxchg.org, mhocko@suse.com, josef@toxicpanda.com, jack@suse.cz, ldufour@linux.ibm.com, laurent.dufour@fr.ibm.com, michel@lespinasse.org, liam.howlett@oracle.com, jglisse@google.com, vbabka@suse.cz, minchan@google.com, dave@stgolabs.net, punit.agrawal@bytedance.com, lstoakes@gmail.com, hdanton@sina.com, apopple@nvidia.com, ying.huang@intel.com, david@redhat.com, yuzhao@google.com, dhowells@redhat.com, hughd@google.com, viro@zeniv.linux.org.uk, brauner@kernel.org, pasha.tatashin@soleen.com, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: ADC8A20046 X-Rspam-User: X-Stat-Signature: xph96pd7q91fxqe4hqtrd8qmhkj9qsrn X-Rspamd-Server: rspam01 X-HE-Tag: 1686586071-131777 X-HE-Meta: U2FsdGVkX1+pvgCfo7bxW4MgGirzuZDRjx0CeGQykvpz2pKy80mcGd1HP8zvwPCVoBYULt5NzlOBqtcZAB1F4MK8NXob+wf63Z+t6DGwHwr3ooM5hvNdHpeNyAhGHw9LzxtfYjg5qXMLuJ5qlC1VooGwxRx6q7hOzpiIwocobz99ppXmsJsFYMGqaCAgY8HBZnPYdeb71AKaTS5jcvZSDTDy/YhVUPM4uUACck1iShRjm18Lgzuin1Bn4M5E90OSVltyfGYVuYIurrgh+gw0s3n98+5G9u+CQ5jU/Z2ZmHSNnidmjHPg2hToDNXw7h3JvhxrXM4gc3Ctvd7cAzCPOOhmeTi1WfG+eVKwMCrxROY96p0KqHjJ3PdovqTgNH5mqVm6y/3JW8/Fj6KSM4QK8HzGvbXJ9zR3wSUCbkI0d8Iz4EoEYkoIIq6c+Hw5yakThCaISBANVaH1m+t80ITnYlm+msNbOuR/7mmunGmgYHipenCY4qbs53EhFXbAYKIoONbJ5HJ3nnu2doS9EEXCJ64Dhm+K5nfWh/e2kDUHvg6+XtuzE66O/EesHVPckstbCtEah4LzLGKR5RIOCXXKmLU5uVtIvXsJzdujR5UAljIh1GEnzSde8KbvCgEhVz+LaXzwqJ8lHvrgWhedYkR3LL0Mv+tMCqg/7In6JBrfolhsBWpY2FwXkMxg7/MlXxZUaXE59OmPkgm9vA2sllyfxlhor/O/ZuKzaghw7AGtrolPuH1UroAYQxNYF2/iLgC+M9QGUH+G6B9ABj0UlJHPGVzjzX28kJE5PAWiNNOlSI18zJzjgZ0a9oryjWZjrl6bQ5pXopnRvth+ET8lEI9eXC788UObobnE2Ss4w+U7jlKQ2eUT07u+Gs8vxmQlDey79BXI0QJZyvGbCqYz5Dy8U/s0+8ZVI8XwzcUXENEmzEA8KpM3dh2kcqWTkNTtUXrFi8eB8YAiEf0fVwp0c2m 3UtPjH+N Nm3NOMkUOaVkTQEEThF3GzUhV9c4x8coO+1q2WLOn349ph2iFUK2F0TO/GBqjUMe7rA8KlML9fdl2v+fBrhnmRLikYRcppGttg0yT9rY/d4n6XqL9mSMhMoawtPzUFPHsGsSXS/dPbF5bLEBk66gRcrYxytKRbwTI+fIlkXQ+1VIxpQ/jOg1nzd09KBNFvL/2RHAV2lex87qOmfkQ8TrBFEbBwKOHgo0/fD8GqEAYqja3Z+iV3JXYX+6q9QsWdFsESGLyb3QE8Uk2Gvy4ZK/p4pcy+nm5MSsP7gisiqGuRAqinWYy+SiCy/acN/XZvWFbVXbn 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: On Mon, Jun 12, 2023 at 6:36=E2=80=AFAM Peter Xu wrote: > > On Fri, Jun 09, 2023 at 06:29:43PM -0700, Suren Baghdasaryan wrote: > > On Fri, Jun 9, 2023 at 3:30=E2=80=AFPM Suren Baghdasaryan wrote: > > > > > > On Fri, Jun 9, 2023 at 1:42=E2=80=AFPM Peter Xu w= rote: > > > > > > > > On Thu, Jun 08, 2023 at 05:51:56PM -0700, Suren Baghdasaryan wrote: > > > > > migration_entry_wait does not need VMA lock, therefore it can be = dropped > > > > > before waiting. Introduce VM_FAULT_VMA_UNLOCKED to indicate that = VMA > > > > > lock was dropped while in handle_mm_fault(). > > > > > Note that once VMA lock is dropped, the VMA reference can't be us= ed as > > > > > there are no guarantees it was not freed. > > > > > > > > Then vma lock behaves differently from mmap read lock, am I right? = Can we > > > > still make them match on behaviors, or there's reason not to do so? > > > > > > I think we could match their behavior by also dropping mmap_lock here > > > when fault is handled under mmap_lock (!(fault->flags & > > > FAULT_FLAG_VMA_LOCK)). > > > I missed the fact that VM_FAULT_COMPLETED can be used to skip droppin= g > > > mmap_lock in do_page_fault(), so indeed, I might be able to use > > > VM_FAULT_COMPLETED to skip vma_end_read(vma) for per-vma locks as wel= l > > > instead of introducing FAULT_FLAG_VMA_LOCK. I think that was your ide= a > > > of reusing existing flags? > > Sorry, I meant VM_FAULT_VMA_UNLOCKED, not FAULT_FLAG_VMA_LOCK in the > > above reply. > > > > I took a closer look into using VM_FAULT_COMPLETED instead of > > VM_FAULT_VMA_UNLOCKED but when we fall back from per-vma lock to > > mmap_lock we need to retry with an indication that the per-vma lock > > was dropped. Returning (VM_FAULT_RETRY | VM_FAULT_COMPLETE) to > > indicate such state seems strange to me ("retry" and "complete" seem > > Not relevant to this migration patch, but for the whole idea I was thinki= ng > whether it should just work if we simply: > > fault =3D handle_mm_fault(vma, address, flags | FAULT_FLAG_VMA_LO= CK, regs); > - vma_end_read(vma); > + if (!(fault & (VM_FAULT_RETRY | VM_FAULT_COMPLETED))) > + vma_end_read(vma); > > ? Today when we can't handle a page fault under per-vma locks we return VM_FAULT_RETRY, in which case per-vma lock is dropped and the fault is retried under mmap_lock. The condition you suggest above would not drop per-vma lock for VM_FAULT_RETRY case and would break the current fallback mechanism. However your suggestion gave me an idea. I could indicate that per-vma lock got dropped using vmf structure (like Matthew suggested before) and once handle_pte_fault(vmf) returns I could check if it returned VM_FAULT_RETRY but per-vma lock is still held. If that happens I can call vma_end_read() before returning from __handle_mm_fault(). That way any time handle_mm_fault() returns VM_FAULT_RETRY per-vma lock will be already released, so your condition in do_page_fault() will work correctly. That would eliminate the need for a new VM_FAULT_VMA_UNLOCKED flag. WDYT? > > GUP may need more caution on NOWAIT, but vma lock is only in fault paths = so > IIUC it's fine? > > -- > Peter Xu > > -- > To unsubscribe from this group and stop receiving emails from it, send an= email to kernel-team+unsubscribe@android.com. >