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 C00CBC04A6A for ; Tue, 8 Aug 2023 19:21:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DC2526B0075; Tue, 8 Aug 2023 15:21:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D722E8D0002; Tue, 8 Aug 2023 15:21:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C39E78D0001; Tue, 8 Aug 2023 15:21:29 -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 B48826B0075 for ; Tue, 8 Aug 2023 15:21:29 -0400 (EDT) Received: from smtpin20.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 82C61C0D85 for ; Tue, 8 Aug 2023 19:21:29 +0000 (UTC) X-FDA: 81101906298.20.78108F1 Received: from mail-yb1-f179.google.com (mail-yb1-f179.google.com [209.85.219.179]) by imf20.hostedemail.com (Postfix) with ESMTP id B7FCB1C000B for ; Tue, 8 Aug 2023 19:21:27 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=aI86kVcP; spf=pass (imf20.hostedemail.com: domain of avagin@gmail.com designates 209.85.219.179 as permitted sender) smtp.mailfrom=avagin@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691522487; a=rsa-sha256; cv=none; b=3zWN2MZFnfoZmgA+YF8i4xJ2q94+Bmn1JAJ5WUM4vjuwLV5qkUfklbOSVqHrsZpXBtdNPo QUnZsqQqunuMsKqhQpQzBBNO8mJidLh2W+zPyfi5Wj5aJYm3ZBWbiEJMNodN6Bsrk1Q+MC BPYPqZCGZcUzeQRFEPpZY3mC9kpFZSg= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=gmail.com header.s=20221208 header.b=aI86kVcP; spf=pass (imf20.hostedemail.com: domain of avagin@gmail.com designates 209.85.219.179 as permitted sender) smtp.mailfrom=avagin@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691522487; 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=diySgYB/+o5ldcXShApfWPeWlXdCLBpgzXr+03nag2s=; b=TbvnUqrvZ3TaTubHPI1Wmmwhkl1ApATc2CPBVA0A1KHjhhnRHa4DKCC3DtIzCDZbD6TSwq wK0uUN78EZRasUjzEijR1hJqmhxFsaUcjhf5sh8WuyI5EeyWlk4GIbUOQS5hA6RMAUB7yl 3ODfoNzltc3nppztrWCVi2m6HBKnqOg= Received: by mail-yb1-f179.google.com with SMTP id 3f1490d57ef6-d5eeb722a82so143041276.0 for ; Tue, 08 Aug 2023 12:21:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691522487; x=1692127287; 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=diySgYB/+o5ldcXShApfWPeWlXdCLBpgzXr+03nag2s=; b=aI86kVcP5RX4GTYucp3JU2R1gispSFteGcvwqhB5v+uYh7lcaprwx/MvsiOux+7dVV FFTmPer/GsrHdWL9j/bC/KWEeoGTrZpUO47fwt/mV+10/Hu3EKMNvfEBqSbXbB00sYoR hRX5bHwEgspX/uOCtN77niYpyyOiMriJM0k5xj+6ISQ3+EXFKDYoML2VRJ1K4vfPoP85 BSEDZ7jJ2ZRd1COxOLZZ9aTxlVrNmDjU7uJ7dYXmEyYsU5u8s79gWzDLoFdCjAfDOJwq PO6pjyJaiVBjmwDI63B0SRwDiN/KKCjI8gtWXmhsACnd6YuRIplqMyjIm3yJMQzZz+YL e6LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691522487; x=1692127287; 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=diySgYB/+o5ldcXShApfWPeWlXdCLBpgzXr+03nag2s=; b=PGnxhFfElszjMrhUfjQ1k+IyP0xfbdPYCdINskh9L5TbN0GPlwlbAmdmIbXIa9OIXi WhsK4Xb7Yzf3p4tWKahoGWEusQlSUX7ekgI8aSbOOU/HBnYB5ybtTGonjPQsHEkFy+Hv b+cODVy/nHVM2NpqGN7VSiA11MnKENoGcNOLBuA7EFdVjulT4csq6e42EmhmMmtKlqs5 gKXwr9NVe7z8HCzr/7fZsVeoymxr1vsnmvBDp0RwxzcuWuASFLEPIbMPI9ruIxmkHW8Z wc+xxkYfIAxphucLnl1ELgylFrDToOEYnGZzsJ4LthwOH3gbS9z7h5CuD3B4wrZHIXiu leig== X-Gm-Message-State: AOJu0Yy3pG74E2ZsijNBdXbmuHwt8YaA+kj7N0mKUFcMhIYJ+lqAqMh8 cyIqKGmpw0ZoL4aZBLRwc6smMOuu0lEbrpmf68o= X-Google-Smtp-Source: AGHT+IG5d90bapjIOlJBGA8irxOFPeCaIv3uCJP0B3jPOYPbIPyqiMre2cM/diK+xvgImaerO4LitHR/iRqNuHbzkeQ= X-Received: by 2002:a25:aaaa:0:b0:d43:a0d8:8db4 with SMTP id t39-20020a25aaaa000000b00d43a0d88db4mr11596435ybi.11.1691522486684; Tue, 08 Aug 2023 12:21:26 -0700 (PDT) MIME-Version: 1.0 References: <20230808104309.357852-1-usama.anjum@collabora.com> <20230808104309.357852-3-usama.anjum@collabora.com> In-Reply-To: <20230808104309.357852-3-usama.anjum@collabora.com> From: Andrei Vagin Date: Tue, 8 Aug 2023 12:21:10 -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-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: B7FCB1C000B X-Stat-Signature: tkhmnu54j8yuxrejtd7xhjq934i5ijt4 X-Rspam-User: X-HE-Tag: 1691522487-742761 X-HE-Meta: U2FsdGVkX1/b4mupUC5mEXc4led2ROybenAQtiiAqfuGhKmZ4HZvyoHoc+pdZgd/JxZGrBmEXEJBw4FiJCAfRma3c+aKtz9wQs5+/e+RYEq2w/rWD9s6U0TLi6gPTLLJ6tMrT0W2LX403k+wO8EmJHupgmfr/mbF20VkLaRZ7ycCXUdc32DXS8dk/6i8+JRjGTji3GnS6aziD7FvpGZCnRaN4vOIpTB4x17VoI2g+Rise2ZFvfPBTMXHvJ/kdHgtKd7yw/ayfgbTXNOT+UpxlxHtC3t052RrdnExr/Pb5yKm7sTkDMSGnUoOguvrUwucrcBbSEfcJO2cjCidJScYnPZJBOky1ticvWhsCq3Lpr+mo6ArYYsDigQPZ8d1N/ak9uDZSNYVucZpOhhZEbfhmm2LF3YbK72eCzET/Gwy62+qnvmNpeE8ToJzqp9ugsj1uwk5Scz6nqox1IcXT2SegvjQWndeuWqIP4IKFPuPDL+0yzSecDflqErEGXMXWShnqp0KLi14nxrmwQl7rzktw8F7gCqM9FiJKdLGYHmR5sPULbpNT0CgxmRCW2RQNa4YdcghFmhPibImG4p+N2sC9zyYHrn8rH5nVxflIY1vzpFmuxT/cp6z9Yhky5UTHejDDWreCRK6TfIIeFerPcgDS4ldrUx63HADyJWGOuNz/YbGNViWdLJ1pt9yOj1WBxD9OYrmM9WlSNf03vQP2yr2NIw/Q24dZo82aTT5Zx1JxLDE/6WN7ChIHhkiuvLh7WrpiDI4MoDsHLyktervBG242NgFcCNPMoKaSYxXwpOE1INZiz5iX31fo2otUBbZAgyUYAqAIDAHp/IVmhGDjAiSoDkdHp+iIHzXN27RAb4FkQZgRggSOXhQxBvxpVs25H/qy6ji5dC4MiiuB65wG4yAu9lFWs0bTTdVM0/6eNs+AW3gWxV7gc6gXziNPViq1ZbA3Zl3BCTXi1te2Y+BADp 9JXL7job gMlhk5i/SQRnut/YEi2xMisB9sUJosRkGEORhjFVcyPm93A+V1qqFqoAO0rsLvHdykLMbKmP6bW4+FkF03P5qbJw1eO1jB8020U2JcTYBNUrwv8xevmSeMbb7Rhr/MTrrapTeIcpxIUCbOtqLKSnr0IOccvHIYHrZnrPPvKTpWv6Wd7U64/gIj6m7huaj/z0vkJsLJJXiGaHjNdYqRm/k2GmN685RbZzHKPRHYImPL7RyviTmRYUXvGaYZCAzKiroUqnh2coO+JcIzQ2NUnsIImqyBQ2WWJn2qAPQ/j4EAqNMAItQcD6wJU/fc6/zfIqhqhESCZWlyi3EKpD/FFHmpbPT4eGBMfSlLLpePjaseh6sqGMYLdYlIhRWcfTZR5xPExWcOopX9+Ker8ZOdW3krUYDywTeEL2OCWQW665LohxEeaEQUQ3O+tnIW9hI4vOIDRBUHbukVf7sfw8= 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 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. > + 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. > + break; > + } > + } > + > + if (p.cur_buf.start !=3D p.cur_buf.end) { > + if (copy_to_user(p.vec_out, &p.cur_buf, sizeof(p.cur_buf)= )) > + 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_start= ; > + 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