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 A5DE7C04A6A for ; Tue, 8 Aug 2023 19:56:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 381EA6B0071; Tue, 8 Aug 2023 15:56:06 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 30BC48D0002; Tue, 8 Aug 2023 15:56:06 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 184F98D0001; Tue, 8 Aug 2023 15:56:06 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 096CC6B0071 for ; Tue, 8 Aug 2023 15:56:06 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id CC67EB241D for ; Tue, 8 Aug 2023 19:56:05 +0000 (UTC) X-FDA: 81101993490.09.3770F86 Received: from mail-yb1-f181.google.com (mail-yb1-f181.google.com [209.85.219.181]) by imf12.hostedemail.com (Postfix) with ESMTP id 1AE8240012 for ; Tue, 8 Aug 2023 19:56:03 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=Tx0pmOfU; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of avagin@gmail.com designates 209.85.219.181 as permitted sender) smtp.mailfrom=avagin@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691524564; a=rsa-sha256; cv=none; b=G5sWdXvSzBsQkUXp1Ft8vwJngirjigWK5nuk5vnSewJQe4l3FT42KRnkJnMaslzIYZKFdh mfrQynWaU7xBCxzrUKHrEC+e+2GK3n75Ygmlf42JnWeUV7hoAiHfnZi4SC2DXc7QD3Olsf FoA12o3dvU3SlK3n3I9ADj0c5DZCUZI= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=Tx0pmOfU; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of avagin@gmail.com designates 209.85.219.181 as permitted sender) smtp.mailfrom=avagin@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691524564; 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=shx8xzzcKiMrKveTUHLTR3Q3hB2SO4sAG3AUT0OsTBQ=; b=KpXhQYvr7FyYw8fwJi+dAUBKNtWMknE59Rdf4TXuKH9nGkbXv4bYs+q9r7qZhKnk0epwOL 0FUbaXW5DAMSenkOjatKeIDuzUGPuRhv/emFt+sx7ccIjzlcnnrpIaa3NZL8cur554wAAM X+ig7M+UWSQSkgy1ogUxgA3ucAa61jM= Received: by mail-yb1-f181.google.com with SMTP id 3f1490d57ef6-d1fb9107036so6487331276.0 for ; Tue, 08 Aug 2023 12:56:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691524563; x=1692129363; 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=shx8xzzcKiMrKveTUHLTR3Q3hB2SO4sAG3AUT0OsTBQ=; b=Tx0pmOfUE84GvT8iHHKudjkY6/uU6+P0q4Vq3Fi92Ai4HjE8vjdNm/CgwD/GBUhAi4 H+c93rt+kOWcWN9wMelSq5gRU6D9fVm2AqUDDcLd/f+dt1P2PhYh/nN8/nXgLFdgE/fm LcBdCB1rYzMM+bXvvExqt10//p1OpzjGy4gNa1eo3p/VkYal498m2r6AdeN98nyK3Kxw hQmirUesK5dKLRbM2V2tfuWcSLgFoVbDFR5021fkQR46p5dkVP7IkZQU3rz5bX8GWT7n dzxkxagsG9uSb+QKU8SFvyBWRbBjK+cXAAch3R03s80Er3YOi38saKC4ekEgdE5sSKo/ g2uQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691524563; x=1692129363; 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=shx8xzzcKiMrKveTUHLTR3Q3hB2SO4sAG3AUT0OsTBQ=; b=bs3ziTAfUmhh/MKyljPuPKSP1XKtWK7cYRUDeGr0PMNTIx7oh0XoP+ueoYcSgxNmRT ci3mw5CSWAPp6H+ffgGmNmnFlW/8QaD8QDat8pv53RQCvTgXKUdcx9piQszXlvSc8TC6 9gnKSA3rpYvtIjt3IW8vNgfBXdnWd+2vS5LLs3huBafwXNut64EasSEWjSDdd5M4088K snvvSMsGG8TPmVQLIHUmRAFT5fu+CPEP6s4g0lZrtD+GQ2GCA8Dlt4uavMo0XXNqcBJS OWCpDtOfHDT0rqFXQ5Sk5SIMF1RCL70QDkNDsks3TZrIFx0lQGkAiM2IYx/IDfIk5FNc CmPw== X-Gm-Message-State: AOJu0Yy2WxeBb6jD0biio/Y6XJcg/T3rjlKiFGL3H2SDROMWyTSNQ7vg COjLlWnFv9vUYm37cpCMj3K6zqy/zgP59zskBws= X-Google-Smtp-Source: AGHT+IFy0BOqHaKaqCVl3Uzsyn4s5OT0PuHJ8AmLJXWxJ5buKDC2Yg9lLoFo7mpr7qLMgMD11tf3/gMK0ON3S2VlRtY= X-Received: by 2002:a25:5f0d:0:b0:c5d:f2af:5a24 with SMTP id t13-20020a255f0d000000b00c5df2af5a24mr595770ybb.14.1691524562978; Tue, 08 Aug 2023 12:56:02 -0700 (PDT) MIME-Version: 1.0 References: <20230808104309.357852-1-usama.anjum@collabora.com> <20230808104309.357852-3-usama.anjum@collabora.com> <624cfa26-5650-ee0d-8e0a-1d844175bcaf@collabora.com> In-Reply-To: <624cfa26-5650-ee0d-8e0a-1d844175bcaf@collabora.com> From: Andrei Vagin Date: Tue, 8 Aug 2023 12:55:51 -0700 Message-ID: Subject: Re: [PATCH v27 2/6] fs/proc/task_mmu: Implement IOCTL to get and optionally clear info about PTEs To: Muhammad Usama Anjum Cc: Peter Xu , David Hildenbrand , Andrew Morton , =?UTF-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= , Danylo Mocherniuk , Paul Gofman , Cyrill Gorcunov , Mike Rapoport , Nadav Amit , Alexander Viro , Shuah Khan , Christian Brauner , Yang Shi , Vlastimil Babka , "Liam R . Howlett" , Yun Zhou , Suren Baghdasaryan , Alex Sierra , Matthew Wilcox , Pasha Tatashin , Axel Rasmussen , "Gustavo A . R . Silva" , Dan Williams , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kselftest@vger.kernel.org, Greg KH , kernel@collabora.com, =?UTF-8?B?TWljaGHFgiBNaXJvc8WCYXc=?= Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 1AE8240012 X-Stat-Signature: 17hcr19yd14sw6ypyoq3wwqr5c4nijnr X-HE-Tag: 1691524563-195934 X-HE-Meta: U2FsdGVkX1/LEU2+Fps3LeKmOwwz7f5EnbTubPL5L5pTWNbSj5KhhtemQmqxp7OdOkL6ogkMGzn2J7+WSmzbnQ62i7pOiEEX2mgdhcqdnPMxSoVC4GRtl2gTbhOaAXYBL5bq0sbHoRrd2IQNVoQL43C7DZpgC06UzmjHfdKPV5cDLhmMFv+Q/rMN8yrIA7Xz6VsmCZPkUdrSRWGpsZxqk57iw/7RqEUjeKFe6rzgWlRxZZahPMix+IjAGiDRL3oLXhRPKshgOJKRxDOx6OfDhgbCSCHVy2+0dG/VDj0dWxj1B5VqUDtaolunPJB2ZOBd3ttlYw2NqSrfXoLkGDuy0EZCvEBSIgEIpWwGwvsNZrALmzv3s5eVkA/TrPN6H2KqIGqrOsWHrghjEcBAnajOhKhQsQ7q3yGb/KTCuaJXnCubnqxaFG3sJvsgcgKS4zvR2vbceROVXKEkYUY4afc+VOQFwix/90IUgZlnhj1VWDKAa8V7j7UamjvltnkYD8wiL/QGBWhjIZvfPwu9tvD7P5R/CoLI1fXILrG/XUZaJ2sV5V+8DR6P8Am57QSPkwX+06w+ItaMNEWtJSHolpLNxwQ6buL728o4KlyZhUOy5vQBAB0XQVecBaH7/AZKQf8PPAxwYI40iZzsCAKwAcPzcySgMF/PUwLiYFjEFZHxRysQKRnoPE5HD/V1+LVylohFfOadMwWcUxuc30rl/xNbPN2wgmjyy1G8DbwrUzRE8fWDddNtdSzAWhcrsBZ6cBMhxSo9j+9sWEmL+qDVlOg2Wuesl0rQ12bjYqtAEV+2GgB/70h4wjNGPHLDNtiAvIYc2asjudi+Uk/EIhPCVjFcpQirftf4A1zZr+QXLqdfIBHxhTRk5E+xE9lDB49Q7J/t8Hlg3bBsUZc5E7OluMFMhCwLN48HNE7UJ2ObSkuWssHj54uAYg1kypX32ebn/Gd9TbAdwegdix0KHmZmKWn YcXkuQQP g44Yh3tDf4L+dT12HuvqPdQIz18lTRBXzfLsvSFzBKXezCM3Arxwr29dsxgm9961svHl2/TsCvX79xwKktrAvKhEQvk7BLFxKKQCA1DpNt4fEJCjcqSrLVE5stxQJcmbZrcPM3wddOMR77j1bvaVNWrOHjKdzYmnhsl1M2a4uaUGSEZ5YTDIzHhgFae3oVBD3zTlsCX/eXD6YicbOmCm5sBoWX2AhttdpzfL2QM07+JG1aOP6SNOm7noFcuHUa0nJvImQqw9oXduONfJY3pFJAiIN5ocSKGxnmLhVp4ja4iJVXqXuJo7NZ4MeAe4hLaiEvC4T9E6gq6+oPITLGy34B/3bdaMSpqF+2hN/KiISy2tLctKZuiIU5WWlFKfYpEVhrznxpOdd5AidgXTbRYa1MpqwLbOBwxOfawIP4Oh+ECHcnlM9y6+Egd2IYyI3wTbC8WSKb2fdw1MtXk4gxE+WTb7dTGGk5S2RJfvDbLv6Pr2Zwta0OibcyvlFlozOuaM/reyk6rybGFrP4WjDr6sJURZXridCkAQ2WwyE 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 Tue, Aug 8, 2023 at 12:35=E2=80=AFPM Muhammad Usama Anjum wrote: > > On 8/9/23 12:21=E2=80=AFAM, Andrei Vagin wrote: > > On Tue, Aug 8, 2023 at 3:43=E2=80=AFAM Muhammad Usama Anjum > > wrote: > > > > .... > > > >> +static int pagemap_scan_output(unsigned long categories, > >> + struct pagemap_scan_private *p, > >> + unsigned long addr, unsigned long *end) > >> +{ > >> + unsigned long n_pages, total_pages; > >> + int ret =3D 0; > >> + > >> + if (!p->vec_buf) > >> + return 0; > >> + > >> + categories &=3D p->arg.return_mask; > >> + > >> + n_pages =3D (*end - addr) / PAGE_SIZE; > >> + if (check_add_overflow(p->found_pages, n_pages, &total_pages) = || //TODO > > > > Need to fix this TODO. > Sorry, I forgot to remove the "//TODO". As far as I've understood, the la= st > discussion ended in keeping the check_add_overflow(). [1] I'll just remov= e > the TODO. > > https://lore.kernel.org/all/CABb0KFEfmRz+Z_-7GygTL12E5Y254dvoUfWe4uSv9-wO= x+Cs8w@mail.gmail.com > > > > > >> + total_pages > p->arg.max_pages) { > >> + size_t n_too_much =3D total_pages - p->arg.max_pages; > >> + *end -=3D n_too_much * PAGE_SIZE; > >> + n_pages -=3D n_too_much; > >> + ret =3D -ENOSPC; > >> + } > >> + > >> + if (!pagemap_scan_push_range(categories, p, addr, *end)) { > >> + *end =3D addr; > >> + n_pages =3D 0; > >> + ret =3D -ENOSPC; > >> + } > >> + > >> + p->found_pages +=3D n_pages; > >> + if (ret) > >> + p->walk_end_addr =3D *end; > >> + > >> + return ret; > >> +} > >> + > > > > ... > > > >> +static long do_pagemap_scan(struct mm_struct *mm, unsigned long uarg) > >> +{ > >> + struct mmu_notifier_range range; > >> + struct pagemap_scan_private p; > >> + unsigned long walk_start; > >> + size_t n_ranges_out =3D 0; > >> + int ret; > >> + > >> + memset(&p, 0, sizeof(p)); > >> + ret =3D pagemap_scan_get_args(&p.arg, uarg); > >> + if (ret) > >> + return ret; > >> + > >> + p.masks_of_interest =3D MASKS_OF_INTEREST(p.arg); > >> + ret =3D pagemap_scan_init_bounce_buffer(&p); > >> + if (ret) > >> + return ret; > >> + > >> + /* Protection change for the range is going to happen. */ > >> + if (p.arg.flags & PM_SCAN_WP_MATCHING) { > >> + mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_= VMA, 0, > >> + mm, p.arg.start, p.arg.end); > >> + mmu_notifier_invalidate_range_start(&range); > >> + } > >> + > >> + walk_start =3D p.arg.start; > >> + for (; walk_start < p.arg.end; walk_start =3D p.arg.walk_end) = { > >> + int n_out; > >> + > >> + if (fatal_signal_pending(current)) { > >> + ret =3D -EINTR; > >> + break; > >> + } > >> + > >> + ret =3D mmap_read_lock_killable(mm); > >> + if (ret) > >> + break; > >> + ret =3D walk_page_range(mm, walk_start, p.arg.end, > >> + &pagemap_scan_ops, &p); > >> + mmap_read_unlock(mm); > >> + > >> + n_out =3D pagemap_scan_flush_buffer(&p); > >> + if (n_out < 0) > >> + ret =3D n_out; > >> + else > >> + n_ranges_out +=3D n_out; > >> + > >> + if (ret !=3D -ENOSPC || p.arg.vec_len - 1 =3D=3D 0 || > >> + p.found_pages =3D=3D p.arg.max_pages) { > >> + p.walk_end_addr =3D p.arg.end; > > > > You should not change p.walk_end_addr If ret is ENOSPC. Pls add a test > > case to check this. > Yeah, I'm not setting walk_end_addr if ret is ENOSPC. > > I'm setting walk_end_addr only when ret =3D 0. I'd added this as a result= of > a test case in my local test application. I can look at adding some tests > in pagemap_ioctl.c kselftest as well. I am not sure that I understand what you mean here. ENOSPC can be returned when the vec array is full and in this case, walk_end_addr should be the address when it stops scanning. > > > > >> + break; > >> + } > >> + } > >> + > >> + if (p.cur_buf.start !=3D p.cur_buf.end) { > >> + if (copy_to_user(p.vec_out, &p.cur_buf, sizeof(p.cur_b= uf))) > >> + ret =3D -EFAULT; > >> + else > >> + ++n_ranges_out; > >> + } > >> + > >> + /* ENOSPC signifies early stop (buffer full) from the walk. */ > >> + if (!ret || ret =3D=3D -ENOSPC) > >> + ret =3D n_ranges_out; > >> + > >> + p.arg.walk_end =3D p.walk_end_addr ? p.walk_end_addr : walk_st= art; > >> + if (pagemap_scan_writeback_args(&p.arg, uarg)) > >> + ret =3D -EFAULT; > >> + > >> + if (p.arg.flags & PM_SCAN_WP_MATCHING) > >> + mmu_notifier_invalidate_range_end(&range); > >> + > >> + kfree(p.vec_buf); > >> + return ret; > >> +} > > > > Thanks, > > Andrei > > -- > BR, > Muhammad Usama Anjum