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 A617BEB64D9 for ; Mon, 19 Jun 2023 06:06:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1A4FD8D0002; Mon, 19 Jun 2023 02:06:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 156568D0001; Mon, 19 Jun 2023 02:06:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 01CD28D0002; Mon, 19 Jun 2023 02:06:52 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id E3FF88D0001 for ; Mon, 19 Jun 2023 02:06:52 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id DDA0EAF8E9 for ; Mon, 19 Jun 2023 06:06:51 +0000 (UTC) X-FDA: 80918463822.06.79F209E Received: from madras.collabora.co.uk (madras.collabora.co.uk [46.235.227.172]) by imf16.hostedemail.com (Postfix) with ESMTP id EC529180018 for ; Mon, 19 Jun 2023 06:06:49 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=collabora.com header.s=mail header.b="ZZBnyw/q"; spf=pass (imf16.hostedemail.com: domain of usama.anjum@collabora.com designates 46.235.227.172 as permitted sender) smtp.mailfrom=usama.anjum@collabora.com; dmarc=pass (policy=quarantine) header.from=collabora.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687154810; 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=IDfLQ/JDuV6JM5dyE0n/Uvv/IjKL58bSIhEh9pQapy4=; b=GzJo/PvB83UMu5Ri4GCDO+vjmwW8JEQtVSDlgqMq+lqNo7hJPL9bD4NDWO8l0tZojTOZRE kW6QOtYZV70T5NX3lOSR0ndxw2gqwIbXO95lqlyy80v/BrSX/Zgq8pASkoWT8BZYPrQ+hC ldVuzl6ES1LMAVja4hw1RXRNGvdOCAo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687154810; a=rsa-sha256; cv=none; b=k85cDtZJN2AScmiO07i4hiK0NTa1l4/h/QsZDKfWmhRROrD9G0vs+TVV6OoqD0zZNb16YZ zuNiE/8VZ8pF//rl5HUNJqLnH6HDaANXOn9mMHfEoaC/FyMyy4dZcNbXJMsB7b+m8Ugv/i 0Yz0SvSzXA/kGytJi8pmYhs1e7aSQ0g= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=collabora.com header.s=mail header.b="ZZBnyw/q"; spf=pass (imf16.hostedemail.com: domain of usama.anjum@collabora.com designates 46.235.227.172 as permitted sender) smtp.mailfrom=usama.anjum@collabora.com; dmarc=pass (policy=quarantine) header.from=collabora.com Received: from [192.168.10.54] (unknown [119.155.63.248]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: usama.anjum) by madras.collabora.co.uk (Postfix) with ESMTPSA id C077B6606EAC; Mon, 19 Jun 2023 07:06:40 +0100 (BST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1687154808; bh=LaJGH3yqvxiz7d1XRjjTwc0675jX+65TTloxqyBYO7U=; h=Date:Cc:Subject:To:References:From:In-Reply-To:From; b=ZZBnyw/q0oyg8M5onwbOGeUldCra5i4t8Y6TXg1FATA0XytwqnkyLKYhtlljOmxHV x9VXbAAAsUjR4O9YFEcumZ97jQ4PyYDmvE95A76O9+QBEKLGOgsN/pYLlXJ5WWhYcJ K7TQEkKyAOm9qxrb5qpg5S/67YsjIYCrXycQbpYWezJ7Su/m/1R52fjGdWc5F7WQkr zpwqMpA27VIRaiVqH+AMuDMjzgP+UQcYo0ow+xTKjvXSau3C2wi38EHDVTMRrVFqx0 B486VTYWSShgUMcfp21eXciYZyGJRkwDloqCPcGDQ5tNSyKozpZCDzEk5nEqWBcdah E4an2PlXpZDHg== Message-ID: <212e331f-35b0-5ae7-6371-26caa577d637@collabora.com> Date: Mon, 19 Jun 2023 11:06:36 +0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Cc: Muhammad Usama Anjum , Peter Xu , David Hildenbrand , Andrew Morton , =?UTF-8?B?TWljaGHFgiBNaXJvc8WC?= =?UTF-8?Q?aw?= , 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 Subject: Re: [PATCH v19 2/5] fs/proc/task_mmu: Implement IOCTL to get and optionally clear info about PTEs To: Andrei Vagin References: <20230615141144.665148-1-usama.anjum@collabora.com> <20230615141144.665148-3-usama.anjum@collabora.com> Content-Language: en-US From: Muhammad Usama Anjum In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: EC529180018 X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: k1jmot3635aob9pim4z3m7ud5sw5pkps X-HE-Tag: 1687154809-692776 X-HE-Meta: U2FsdGVkX187neZSKnfaaYPe4q6HgC3xv+gcqOq2FY5D1MrVRuZPUWZm4BNgU/yoE2YZ2miWhfB1Zs29Wa3M4srPmo9PuB+AO6U0Kip0sOcSWViCnWIuwi+mZSU211Z9PPkt/aUj9sRKsM8GC4sawpIrFvGAaC8QsScHHS1+wKuNiNdjdrldQ+gJI3qV//S9QhDnkvTkN1BptSVU0bn33chNAkKT1U5xbsjafZ6aQBYRTmneQjA924N/fiqAwVoGboXUtCiP1dHbj9UgWbN/IRzbIjKLXLTfXpR1jtnKlWlWIO8TyrN98hO1RP9qWuQYeWrx9a9vMV0sRMFIlaj4QMt0bR3iZY+pqVLtvKVsb2oCf2jdti0PpJVq24pUTYXhElThpvlQ0rd6QidZLEIjaBkNJNkFxSNVj2G//hGF0ZdjuVGgaUyMA1QFscZEVMCQC9TSHL4qaxpi5xEiCWiyPPRm0GjJ4fA57dRLPucp5j7wqhhDvZPRj2yTAud3Lb451SkhH2vC2IwvW67wmSnDmuHjPaC924oSh85Vdc3RU1QZA5r+D0uxCXNj/KZX4I92CmsnPSM95EnuAfmrPG03tbh7oM0GREqhkYN1m6dscKz2+NWvzOS8LvuzKBooBcDviY48lGouCBsS7+QiPf/0mGcig+amNN3gMxRPytSKoo6TuhLeXi8r5D1wL+tS4BJoQv4jaflpjCNLT0R8shmNAUtLQhq56DFaqMN8DfjvSv3xwrzYqubjgCNEiNob/xSDnzDIMU/0aJnaGxJ0OoE1m7BqqdhAZUUJ1qNEtK146G99oCnfOZtPEiDH65Q4LMVrPMCFmfalLNfxAFLBApuigUAkkYL5yzGMC/9wItXIF9XYlhN8/7URDGlkZ5n4icdYYOu4RkJ2mAIa1+Nl8e9cA02TFMuGFzQHLmvGB6g1nLn9hRW+k13NKyBgvOFDaU7b7ylj/tauhfdf2nfc34M kLQ7xsME kkN2HK5/QUMWsIUyIH/M8o/VAp4d88/hKoBn5mLaHG8K0XPzGu1HllkUnfuBrBYpfc6eH8SpZyEB3K2nE6zCiOF1eu1ROWICX6vKjQdQiJ3Se6v+VQRSGaykN6TytbJ/kdxLT/HV06hb3kG+0x/IaLmZpOOEO/hEsGUBM1GCYXMx2q+TNYN+D9QpJc4Swb80XvNgGwqs73xnAVrPoSdHLLkN90mEN63S+tWO/xQXbsqCE92ZtCHyqiaPzMtaoBZJ748S+kUaf7NkeV9BAQbLcYEsbwAhVbcFw/P4+Glh5YBxIY22NmXX0LyxLedP2LCf5720OBth/6kh4hQU= 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 6/17/23 11:39 AM, Andrei Vagin wrote: > On Thu, Jun 15, 2023 at 07:11:41PM +0500, Muhammad Usama Anjum wrote: >> +static int pagemap_scan_pmd_entry(pmd_t *pmd, unsigned long start, >> + unsigned long end, struct mm_walk *walk) >> +{ >> + bool is_written, flush = false, is_interesting = true; >> + struct pagemap_scan_private *p = walk->private; >> + struct vm_area_struct *vma = walk->vma; >> + unsigned long bitmap, addr = end; >> + pte_t *pte, *orig_pte, ptent; >> + spinlock_t *ptl; >> + int ret = 0; >> + >> + arch_enter_lazy_mmu_mode(); >> + >> +#ifdef CONFIG_TRANSPARENT_HUGEPAGE >> + ptl = pmd_trans_huge_lock(pmd, vma); >> + if (ptl) { >> + unsigned long n_pages = (end - start)/PAGE_SIZE; >> + >> + if (p->max_pages && n_pages > p->max_pages - p->found_pages) >> + n_pages = p->max_pages - p->found_pages; >> + >> + is_written = !is_pmd_uffd_wp(*pmd); >> + >> + /* >> + * Break huge page into small pages if the WP operation need to >> + * be performed is on a portion of the huge page. >> + */ >> + if (is_written && IS_PM_SCAN_WP(p->flags) && >> + n_pages < HPAGE_SIZE/PAGE_SIZE) { >> + spin_unlock(ptl); >> + >> + split_huge_pmd(vma, pmd, start); >> + goto process_smaller_pages; >> + } >> + >> + bitmap = PM_SCAN_FLAGS(is_written, (bool)vma->vm_file, >> + pmd_present(*pmd), is_swap_pmd(*pmd)); >> + >> + if (IS_PM_SCAN_GET(p->flags)) { >> + is_interesting = pagemap_scan_is_interesting_page(bitmap, p); >> + if (is_interesting) >> + ret = pagemap_scan_output(bitmap, p, start, n_pages); >> + } >> + >> + if (IS_PM_SCAN_WP(p->flags) && is_written && is_interesting && >> + ret >= 0) { >> + make_uffd_wp_pmd(vma, start, pmd); >> + flush_tlb_range(vma, start, end); >> + } >> + >> + spin_unlock(ptl); >> + >> + arch_leave_lazy_mmu_mode(); >> + return ret; >> + } >> + >> +process_smaller_pages: >> +#endif >> + >> + orig_pte = pte = pte_offset_map_lock(vma->vm_mm, pmd, start, &ptl); >> + if (!pte) { > > Do we need to unlock ptl here? > > spin_unlock(ptl); No, please look at these recently merged patches: https://lore.kernel.org/all/c1c9a74a-bc5b-15ea-e5d2-8ec34bc921d@google.com > >> + walk->action = ACTION_AGAIN; >> + return 0; >> + } >> + >> + for (addr = start; addr < end && !ret; pte++, addr += PAGE_SIZE) { >> + ptent = ptep_get(pte); >> + is_written = !is_pte_uffd_wp(ptent); >> + >> + bitmap = PM_SCAN_FLAGS(is_written, (bool)vma->vm_file, >> + pte_present(ptent), is_swap_pte(ptent)); > > The vma->vm_file check isn't correct in this case. You can look when > pte_to_pagemap_entry sets PM_FILE. This flag is used to detect what > pages have a file backing store and what pages are anonymous. I'll update. > > I was trying to integrate this new interace into CRIU and I found > one more thing that is required. We need to detect zero pages. Should we name it ZERO_PFN_PRESENT_PAGE to be exact or what? > > It should look something like this: > > #define PM_SCAN_FLAGS(wt, file, present, swap, zero) \ > ((wt) | ((file) << 1) | ((present) << 2) | ((swap) << 3) | ((zero) << 4)) > > > bitmap = PM_SCAN_FLAGS(is_written, page && !PageAnon(page), > pte_present(ptent), is_swap_pte(ptent), > pte_present(ptent) && is_zero_pfn(pte_pfn(ptent))); Okay. Can you please confirm my assumptions: - A THP cannot be file backed. (PM_FILE isn't being set for THP case) - A hole is also not file backed. A hole isn't present in memory. So its pfn would be zero. But as it isn't present, it shouldn't report zero page. Right? For hole:: PM_SCAN_FLAGS(false, false, false, false, false) > > Thanks, > Andrei -- BR, Muhammad Usama Anjum