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 B5543C77B7A for ; Thu, 18 May 2023 23:20:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 38D35900004; Thu, 18 May 2023 19:20:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 33C72900003; Thu, 18 May 2023 19:20:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 203B0900004; Thu, 18 May 2023 19:20:29 -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 0FDC9900003 for ; Thu, 18 May 2023 19:20:29 -0400 (EDT) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id D6D73160894 for ; Thu, 18 May 2023 23:20:28 +0000 (UTC) X-FDA: 80804946936.18.5783FAA Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) by imf10.hostedemail.com (Postfix) with ESMTP id F080FC001A for ; Thu, 18 May 2023 23:20:26 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=Qo8Fd9UV; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf10.hostedemail.com: domain of yuzhao@google.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=yuzhao@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684452027; 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=hJYCzmsxGe3XadmHdoY3BjZEttTV9cjxHheRcEXc8pI=; b=R/O0rIbcHSnjk9GKO1WyaSfLrmoEvwrZtM9usbuFbaGM8mt7cPi2qZxTTD/zCA9aMXY+YX kWY9P1ANCyCwIqxNtMUWfe+o8vEiF9C6+4pqfFZEwDyiF+jpg3peo/5jP+Cb3PEFXbShA6 cvcqk0ESY9avYG/8lL1LzAcyigDeC+0= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=Qo8Fd9UV; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf10.hostedemail.com: domain of yuzhao@google.com designates 209.85.128.43 as permitted sender) smtp.mailfrom=yuzhao@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684452027; a=rsa-sha256; cv=none; b=Qs37KBm7xYasLXNoHDqK0KZkemB+RUujgJ7flIoEZn8TMCksbsr8/MwWVFS2xgvB7YrvtE D6276D+myICD7AcbStP7snNqyfubHK6Acz55kOmeVFjVszCG/8WuI81E/rWgwM1K3xdKeK MCUscbMpY3KUOrtMEW7AWQzpofZiuD8= Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-3f42397f41fso13115e9.1 for ; Thu, 18 May 2023 16:20:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1684452025; x=1687044025; 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=hJYCzmsxGe3XadmHdoY3BjZEttTV9cjxHheRcEXc8pI=; b=Qo8Fd9UVjLA5wDOWZyMhv7XSWo/l9odl2UB/pRyuLKCGJ9QaQm8mrzXc92qF1Tj/vi lhU3yjKbyG9kdDg4amhJdGPsTRzBgIIUywxFqaDU6TpJq4mNJNh3b5rqgfYS+1Ic+KWR m6cUcThAN4sf3TkjRa6x33ba0j2k/yZC7BtQb4yTFRXVEKT1vejd8ONjeONZiT1/cQan DxnM1buLmZ/uez72mjo1RmUwv7BXwJIj7L1oPTLDISXobLn9KdE8m0KG8KW2r8Yalx86 gip9/aMpN1eYBAMHDbTOgFnaJRAGKI9dS4/t7vmEPDdgSp6Sd7T51AWYcE1Yc6qjA5Lx QWvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684452025; x=1687044025; 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=hJYCzmsxGe3XadmHdoY3BjZEttTV9cjxHheRcEXc8pI=; b=lh4SsT9wWFo+3vvsCWnmCwapd7kFNTJQTc7hjjTqqJSwpal0ZBNRI9uBjA/mvxhBNw sEyLDW30NQOV+Rw/rR4sFU/VHH4DLMOxgFzLUvKZPFcU10jbK8gcCV4ndK4nM3oVziBb btnFiuDrk1hydEbRLa0OtaqfMLmAtEUBIu43Jbu+GAQjWrz+EacqIWN6+p0unDXNubxk hvYQmyYlJHTRhKC5O+wWdGj3ySm0B8oSO+2AZ7/P/Oc4G8Y9lkX4+jI/lATiBjoDm5OZ e6EV+QVGBoyOssXfNqg/aArbt4+hTGFoizgj3Sl/HgYQYFcmLcvqBEoT2PUr5c+rxgE4 vwzQ== X-Gm-Message-State: AC+VfDwSods8n8AI3/FBVBVpDe615JBoIrW0SbGS0YySKqWbpJsYgH/q vYBz0gwgm0Lve4YlWpSLR8RgMu1kyvD4aJgb+VGrIg== X-Google-Smtp-Source: ACHHUZ7M54BsEHMo9QjezJJD7FpRp2hq0zHfe/ZaWXANjZPO4pzpy4ews+hVsaI9pbSnPGvmL6U5TqRjLytqp01+g/Q= X-Received: by 2002:a05:600c:3ba3:b0:3f1:73b8:b5fe with SMTP id n35-20020a05600c3ba300b003f173b8b5femr31383wms.3.1684452025268; Thu, 18 May 2023 16:20:25 -0700 (PDT) MIME-Version: 1.0 References: <20230518110727.2106156-1-ryan.roberts@arm.com> <20230518110727.2106156-3-ryan.roberts@arm.com> In-Reply-To: <20230518110727.2106156-3-ryan.roberts@arm.com> From: Yu Zhao Date: Thu, 18 May 2023 17:19:48 -0600 Message-ID: Subject: Re: [PATCH v2 2/5] mm: damon must atomically clear young on ptes and pmds To: Ryan Roberts Cc: Andrew Morton , SeongJae Park , Christoph Hellwig , "Matthew Wilcox (Oracle)" , "Kirill A. Shutemov" , Lorenzo Stoakes , Uladzislau Rezki , Zi Yan , linux-kernel@vger.kernel.org, linux-mm@kvack.org, damon@lists.linux.dev Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: F080FC001A X-Rspam-User: X-Rspamd-Server: rspam04 X-Stat-Signature: 56bk97kwiotnbsiik5hmunbzamaab8xj X-HE-Tag: 1684452026-376557 X-HE-Meta: U2FsdGVkX19+JzMp6fVYpTi23AsAlsXGil2C9nNx0UaH3R6ryCjAzCVA8ghZW6C278vwHB7Bx0tng7bA2Bw/5vLYkGKb5KAdVgPRyujN1CIMLtQqkXowRSRwPjxnK6HCUTw1Qv1KA+3gUlKAB6jzEwhYQnqufCITBrlqyqyB8XLW57dveGOjYPdZlxoWsSaFUGGEU32NjGbOvfwTSvtf18He5JjbErV/30jBHd7yhFsxu9RXYJ9ayibWdz963cXTMuowD3MBZUOoVixgB7zWlPoptiaA/jSXBfALdbu8tMZG6V8tpP0b/XfGLDEUBq/aeFDD3WCinZo8XRtpl/Ex77LDW/LPoaQDQ1+7mhNxs7u/4L6iSP4nY1ct2Ca/yOsDlADqMlUD15gNRJbqQXZMyI87/U29meh62Mg8M7EIveUBAuqh6399eU56eTguBZfzZAwfRYd2b4lrj6wETkgc1HX+rZhw37HpW41g39oiR4aZvTjZ8CAVtcYyZvDHGKKfk+7+NYNgni+RyPMCqc6CCJif5umZQjmpsQl4jpRMHkjgNihhRc7+BK45rNuFhfN8zOB4b49kYrxFbKti3h1ZbQGcOipsHWI+wvTnarTkhrnh5mtZ8HJ7lx6wHEUrT35/fBeQgKWyaAefZmHY6YWOl31rRlCNDJxCZu7ObIMSptiyqHdSk4s8YbphybkHX7eFFS/WScHT6HPreoX0DrAkWbD3JRCATt4bW5MvZ9CpJT0lNTYitjksfjr96RIPe29VFvDI1B2tOVUEZWh6+zN34H1sT14NhHboNd0q5PUzviOaK18c0EtPQ0bCassMB98ExHq1DBACnyitAm/solaf/MkOZ7Kdgy0KgOYrIOdy9C/MuhLXuEc8GBV84Fqqq5IvaYQtHSkJ493dJIgNiYoOS44z7eIcsDEIzEBKuTxjeY5ywCDPXlzTHLwixhf3UwP+Ua+WpbaW6VXMgcPTMxp zMI/EdLC y20r3JlC1M3Y3aAaCI04gGhBgpFIIElh4qK3CbitxLEI/fdVPY9RW7Mb+icPfoqgThcB6evAQyk9RkB5TI9m0ROBXHOCb+Ca+xE6ltmzzK2aNR9BHyXFbN9vI+tRhkCjCKoegHcXy7LrLT5vFYfQKLCnwiRmwLV4HT96uD635G8bxWuGtxmILSUHCxAiXoQ2ZaA4r/FW0ul1662xYBpTpYEqBEIAhVaQFwX8bj/L6JxrujIMBXFhK4c7kD43dA30MMCSSbbdT7jy77gW/CXg59H1heX1xZ2Dbr2jJE2tdNCmfW+0BezcZDC2Qhg== 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 Thu, May 18, 2023 at 5:07=E2=80=AFAM Ryan Roberts = wrote: > > It is racy to non-atomically read a pte, then clear the young bit, then > write it back as this could discard dirty information. Further, it is > bad practice to directly set a pte entry within a table. Instead > clearing young must go through the arch-provided helper, > ptep_test_and_clear_young() to ensure it is modified atomically and to > give the arch code visibility and allow it to check (and potentially > modify) the operation. > > Fixes: 46c3a0accdc4 ("mm/damon/vaddr: separate commonly usable functions"= ) This should be a separate patch, since it's independent from what the series tries to do. And that patch should cc stable, since it fixes user data corruption. > Signed-off-by: Ryan Roberts > Reviewed-by: Zi Yan > --- > mm/damon/ops-common.c | 16 ++++++---------- > mm/damon/ops-common.h | 4 ++-- > mm/damon/paddr.c | 4 ++-- > mm/damon/vaddr.c | 4 ++-- > 4 files changed, 12 insertions(+), 16 deletions(-) > > diff --git a/mm/damon/ops-common.c b/mm/damon/ops-common.c > index cc63cf953636..acc264b97903 100644 > --- a/mm/damon/ops-common.c > +++ b/mm/damon/ops-common.c > @@ -37,7 +37,7 @@ struct folio *damon_get_folio(unsigned long pfn) > return folio; > } > > -void damon_ptep_mkold(pte_t *pte, struct mm_struct *mm, unsigned long ad= dr) > +void damon_ptep_mkold(pte_t *pte, struct vm_area_struct *vma, unsigned l= ong addr) > { > bool referenced =3D false; > struct folio *folio =3D damon_get_folio(pte_pfn(*pte)); > @@ -45,13 +45,11 @@ void damon_ptep_mkold(pte_t *pte, struct mm_struct *m= m, unsigned long addr) > if (!folio) > return; > > - if (pte_young(*pte)) { > + if (ptep_test_and_clear_young(vma, addr, pte)) > referenced =3D true; > - *pte =3D pte_mkold(*pte); > - } > > #ifdef CONFIG_MMU_NOTIFIER > - if (mmu_notifier_clear_young(mm, addr, addr + PAGE_SIZE)) > + if (mmu_notifier_clear_young(vma->vm_mm, addr, addr + PAGE_SIZE)) > referenced =3D true; > #endif /* CONFIG_MMU_NOTIFIER */ Use ptep_clear_young_notify(). Similar below.