Received: by 2002:a05:7412:b10a:b0:f3:1519:9f41 with SMTP id az10csp2910054rdb; Mon, 4 Dec 2023 10:45:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IG/dLgtxRTQokUNDXyuEYIK1PDdVH1E6zFjgPnBobalEy+9Iblmmip4etZrChBBZaaPvpxE X-Received: by 2002:a05:6a20:918f:b0:18f:97c:8a34 with SMTP id v15-20020a056a20918f00b0018f097c8a34mr6135466pzd.95.1701715528513; Mon, 04 Dec 2023 10:45:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701715528; cv=none; d=google.com; s=arc-20160816; b=WVqqaHF6AaIhcPOTt+jZSoNGAzcjjXinhS+xv6YF91wS6Nq4KwQydpPb1Z/lmo9WZA 9xrR+pjs8vRHkxy8+RStb0j2LJxCaXwQO97SsUyjwPxDHR5tMTgMPZX9gRJOmej8T/xN kPBB0/dWK4LRDPXxnHltRXMISWCntCRVpA9R+WXlEacEjJSy1xgO4NTOODVpdukOK+Am zQ9+dYcpokAs8oyZnnli2l3eK7tn5KkqxtHAMZZ2Omu5dwenp5BxE6S9O21cZEXpm1ro NvCQ8lxVup8Y0Ldrelp57A+wWw93bJ/OXpjd3EsIpPZJ4QLFfxlsUHBmOh0Fbyd687vw duGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=mcZOoagNfuYTwGb5c2DFpOJBXe5yhQOWEede9pD77Ig=; fh=BonCDYkT2j1VY/AgyhOKqEQ33f4iRxSkOH4YtEHP3pE=; b=yJRmjzqY5ZoaYmTsTxU9cbjrOyAfuAncLWR9lMhP7QcVa+RPOsg6JIhVCLHHPPuZyO CfMZ/rAwPon3AaIP00qTSaShTqcZgKEZLxarZuwWmMSk6AYQx0i/Dx1mvcMxIsjXSGh8 wRbRuC+EA154mhuW/WPRmSWh/sb17bmLiulHz6YE0aKGwGPLlxlYEMw33QswNolPrZ5M OprYxWn0lbjm57nHgw+eh4ZHJT+NDaLeuQbNrCz/jGyFOO25RL8I0KyDXS4hu5ZdfaYz uvwa63lzN0TCh05c+Plx/vz7eDU1KkaY46kun3VKdt3z55wPi48HZSXqSCYx1Ek6AWMX 0eLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=WIk10nMV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lipwig.vger.email (lipwig.vger.email. [2620:137:e000::3:3]) by mx.google.com with ESMTPS id m18-20020a63ed52000000b005c68d9545b9si2045862pgk.619.2023.12.04.10.45.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Dec 2023 10:45:28 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) client-ip=2620:137:e000::3:3; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=WIk10nMV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:3 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 85852809268E; Mon, 4 Dec 2023 10:45:24 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230479AbjLDSpI (ORCPT + 99 others); Mon, 4 Dec 2023 13:45:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46032 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229501AbjLDSpH (ORCPT ); Mon, 4 Dec 2023 13:45:07 -0500 Received: from mail-yb1-xb2d.google.com (mail-yb1-xb2d.google.com [IPv6:2607:f8b0:4864:20::b2d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12E33AF for ; Mon, 4 Dec 2023 10:45:13 -0800 (PST) Received: by mail-yb1-xb2d.google.com with SMTP id 3f1490d57ef6-dae0ab8ac3eso3188763276.0 for ; Mon, 04 Dec 2023 10:45:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1701715512; x=1702320312; darn=vger.kernel.org; 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=mcZOoagNfuYTwGb5c2DFpOJBXe5yhQOWEede9pD77Ig=; b=WIk10nMV2BCmk09kq1RcejScfm1H4GbA1WaN6N2hjPGAt9vabcP3+Bw4rn13G2CbPz Aei3See4eTMNPB9ZAdQMKVoWY/YDIQvKXtzA800IzF+4iFNQgd27Py95diJiW0vjMhwq 0MTLMhhqsvoK/ti37T1uPROmisleD5FFumFRbX2W1+ZO0zd0miTXyMBTm91odgTA30fb IaiX7ECQ495Sazr2JLn8snsW8e7n/xHNQ6nG7EmSHpB7Mu/w/eULT7+jUGkeGC0oAlGk wz/D4U951GyPLJi2YXVHbD0CiwumaW5VGeHtLzxiW+gkqdDYxGtR8yOi6gwDLuJtQin4 WDrQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701715512; x=1702320312; 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=mcZOoagNfuYTwGb5c2DFpOJBXe5yhQOWEede9pD77Ig=; b=XSSs/ZPlqwbOfpbkCzZe5YB3GPUjdRPr2tI/gn1lxIZw7YNylSeYqkwPTdA1dZXNmK EWNw2rx3u8GhKNOdOQP80xw4/grfznBvapfdUqOCEgbzzRqvNs/YRdANwz8rKGttbxta C2AI03/Fx5rVUwkDxo3kXWgKHEl2qhRNGQ9C2YxsNhOZeak1i+b5tCn+aOuIZpqrfXMx HsHJVyQT+pDNWhIgHOhGWeK2dodVHajfXpfP60hu/LyilY6YK7BPQDGooYn7RfqtUdkJ +KSznE057HUGKZj+JFWWBsOFlSnoTA3ar4jh2KpHtDcW0QxT8hzhSCwfY8upulkgo9Ld ePLQ== X-Gm-Message-State: AOJu0YxQkpmlmuWjHJBDPdC3S/MwN45hmJqhLenFEJEPi0RK5VoqCW4f O5VPiOhmvR3qT3e9vbFz2chfU7Z+i6aPE5VHHgZAqw== X-Received: by 2002:a5b:b07:0:b0:db7:dacf:6fdf with SMTP id z7-20020a5b0b07000000b00db7dacf6fdfmr3544806ybp.103.1701715511977; Mon, 04 Dec 2023 10:45:11 -0800 (PST) MIME-Version: 1.0 References: <20231121171643.3719880-1-surenb@google.com> <20231121171643.3719880-6-surenb@google.com> <744be4e0-48e0-4c77-825c-711386dd205f@arm.com> In-Reply-To: From: Suren Baghdasaryan Date: Mon, 4 Dec 2023 10:44:59 -0800 Message-ID: Subject: Re: [PATCH v5 5/5] selftests/mm: add UFFDIO_MOVE ioctl test To: David Hildenbrand Cc: Ryan Roberts , akpm@linux-foundation.org, viro@zeniv.linux.org.uk, brauner@kernel.org, shuah@kernel.org, aarcange@redhat.com, lokeshgidra@google.com, peterx@redhat.com, hughd@google.com, mhocko@suse.com, axelrasmussen@google.com, rppt@kernel.org, willy@infradead.org, Liam.Howlett@oracle.com, jannh@google.com, zhangpeng362@huawei.com, bgeffon@google.com, kaleshsingh@google.com, ngeoffray@google.com, jdduke@google.com, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 04 Dec 2023 10:45:24 -0800 (PST) On Mon, Dec 4, 2023 at 10:27=E2=80=AFAM David Hildenbrand wrote: > > On 04.12.23 17:35, Suren Baghdasaryan wrote: > > On Mon, Dec 4, 2023 at 1:27=E2=80=AFAM Ryan Roberts wrote: > >> > >> On 04/12/2023 04:09, Suren Baghdasaryan wrote: > >>> On Sat, Dec 2, 2023 at 2:11=E2=80=AFAM David Hildenbrand wrote: > >>>> > >>>> On 02.12.23 09:04, Ryan Roberts wrote: > >>>>> On 01/12/2023 20:47, David Hildenbrand wrote: > >>>>>> On 01.12.23 10:29, Ryan Roberts wrote: > >>>>>>> On 21/11/2023 17:16, Suren Baghdasaryan wrote: > >>>>>>>> Add tests for new UFFDIO_MOVE ioctl which uses uffd to move sour= ce > >>>>>>>> into destination buffer while checking the contents of both afte= r > >>>>>>>> the move. After the operation the content of the destination buf= fer > >>>>>>>> should match the original source buffer's content while the sour= ce > >>>>>>>> buffer should be zeroed. Separate tests are designed for PMD ali= gned and > >>>>>>>> unaligned cases because they utilize different code paths in the= kernel. > >>>>>>>> > >>>>>>>> Signed-off-by: Suren Baghdasaryan > >>>>>>>> --- > >>>>>>>> tools/testing/selftests/mm/uffd-common.c | 24 +++ > >>>>>>>> tools/testing/selftests/mm/uffd-common.h | 1 + > >>>>>>>> tools/testing/selftests/mm/uffd-unit-tests.c | 189 +++++++++= ++++++++++ > >>>>>>>> 3 files changed, 214 insertions(+) > >>>>>>>> > >>>>>>>> diff --git a/tools/testing/selftests/mm/uffd-common.c > >>>>>>>> b/tools/testing/selftests/mm/uffd-common.c > >>>>>>>> index fb3bbc77fd00..b0ac0ec2356d 100644 > >>>>>>>> --- a/tools/testing/selftests/mm/uffd-common.c > >>>>>>>> +++ b/tools/testing/selftests/mm/uffd-common.c > >>>>>>>> @@ -631,6 +631,30 @@ int copy_page(int ufd, unsigned long offset= , bool wp) > >>>>>>>> return __copy_page(ufd, offset, false, wp); > >>>>>>>> } > >>>>>>>> +int move_page(int ufd, unsigned long offset, unsigned long = len) > >>>>>>>> +{ > >>>>>>>> + struct uffdio_move uffdio_move; > >>>>>>>> + > >>>>>>>> + if (offset + len > nr_pages * page_size) > >>>>>>>> + err("unexpected offset %lu and length %lu\n", offset, l= en); > >>>>>>>> + uffdio_move.dst =3D (unsigned long) area_dst + offset; > >>>>>>>> + uffdio_move.src =3D (unsigned long) area_src + offset; > >>>>>>>> + uffdio_move.len =3D len; > >>>>>>>> + uffdio_move.mode =3D UFFDIO_MOVE_MODE_ALLOW_SRC_HOLES; > >>>>>>>> + uffdio_move.move =3D 0; > >>>>>>>> + if (ioctl(ufd, UFFDIO_MOVE, &uffdio_move)) { > >>>>>>>> + /* real retval in uffdio_move.move */ > >>>>>>>> + if (uffdio_move.move !=3D -EEXIST) > >>>>>>>> + err("UFFDIO_MOVE error: %"PRId64, > >>>>>>>> + (int64_t)uffdio_move.move); > >>>>>>> > >>>>>>> Hi Suren, > >>>>>>> > >>>>>>> FYI this error is triggering in mm-unstable (715b67adf4c8): > >>>>>>> > >>>>>>> Testing move-pmd on anon... ERROR: UFFDIO_MOVE error: -16 (errno= =3D16, > >>>>>>> @uffd-common.c:648) > >>>>>>> > >>>>>>> I'm running in a VM on Apple M2 (arm64). I haven't debugged any f= urther, but > >>>>>>> happy to go deeper if you can direct. > >>>>>> > >>>>>> Does it trigger reliably? Which pagesize is that kernel using? > >>>>> > >>>>> Yep, although very occasionally it fails with EAGAIN. 4K kernel; se= e other email > >>>>> for full config. > >>>>> > >>>>>> > >>>>>> I can spot that uffd_move_pmd_test()/uffd_move_pmd_handle_fault() = uses > >>>>>> default_huge_page_size(), which reads the default hugetlb size. > >>>>> > >>>>> My kernel command line is explicitly seting the default huge page s= ize to 2M. > >>>>> > >>>> > >>>> Okay, so that likely won't affect it. > >>>> > >>>> I can only guess that it has to do with the alignment of the virtual > >>>> area we are testing with, and that we do seem to get more odd patter= ns > >>>> on arm64. > >>>> > >>>> uffd_move_test_common() is a bit more elaborate, but if we aligned t= he > >>>> src+start area up, surely "step_count" cannot be left unmodified? > >>>> > >>>> So assuming we get either an unaligned source or an unaligned dst fr= om > >>>> mmap(), I am not convinced that we won't be moving areas that are no= t > >>>> necessarily fully backed by PMDs and maybe don't even fall into the = VMA > >>>> of interest? > >>>> > >>>> Not sure if that could trigger the THP splitting issue, though. > >>>> > >>>> But I just quickly scanned that test setup, could be I am missing > >>>> something. It might make sense to just print the mmap'ed range and t= he > >>>> actual ranges we are trying to move. Maybe something "obvious" can b= e > >>>> observed. > >>> > >>> I was able to reproduce the issue on an Android device and after > >>> implementing David's suggestions to split the large folio and after > >>> replacing default_huge_page_size() with read_pmd_pagesize(), the > >>> move-pmd test started working for me. Ryan, could you please apply > >>> attached patches (over mm-unstable) and try the test again? > >> > >> Yep, all fixed with those patches! > > > > Great! Thanks for testing and confirming. I'll post an updated > > patchset later today and will ask Andrew to replace the current one > > with it. > > I'll also look into the reasons we need to split PMD on ARM64 in this > > test. It's good that this happened and we were able to test the PMD > > split path but I'm curious about the reason. It's possible my address > > alignment calculations are somehow incorrect. > > I only skimmed the diff briefly, but likely you also want to try > splitting in move_pages_pte(), if you encounter an already-pte-mapped THP= . Huh, good point. I might be able to move the folio splitting code into pte-mapped case and do a retry after splitting. That should minimize the additional code required. Will do and post a new set shortly. Thanks! > > -- > Cheers, > > David / dhildenb >