Received: by 2002:a05:6358:3188:b0:123:57c1:9b43 with SMTP id q8csp5974892rwd; Sun, 18 Jun 2023 23:51:43 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ6/8nDm35d28ZxUmZ2L4sXfB+HWEps1fl2RJ5FMyDTQdJpIQ8uxr5nEWBsQa22o1guCL6bN X-Received: by 2002:a05:6a20:a416:b0:ee:f290:5b5e with SMTP id z22-20020a056a20a41600b000eef2905b5emr4168986pzk.43.1687157503448; Sun, 18 Jun 2023 23:51:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1687157503; cv=none; d=google.com; s=arc-20160816; b=bWsMf0gvtOK+1prHg7jnwz6oPQ+l2qWQ+WVrKh/5sqStCIRBGv1QZLv153+4W5+DcO EDWZrHrr5WJGtS2eFU8xaQ7WilbO1/cPplPcKh92zqB9UBx6POt2+7WpmFpeFC2rphl+ 6gAvW9C6RL1jjDXDfaTuUj/ICoDTVubGZFYalTF2pgPMBkUQpObaiUk4n8c8+UMZoKMg agAeFF6faGOMJKndUwPZUZU0+Qv+fVVJRuvVllHkhwfQEDI5epqt+G7WxBDx3Q9qUP69 kOSGzNXBCsXM+pzvHHkajj8g1FjbDLW2SRZUDf7qmw7VyyydCMg2xaMjroZ5plTn9h1M 7Abg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :content-language:references:to:subject:cc:user-agent:mime-version :date:message-id:dkim-signature; bh=IDfLQ/JDuV6JM5dyE0n/Uvv/IjKL58bSIhEh9pQapy4=; b=IJID65AUzJCY/7iRbvZJXseaPIFq90CIhDO7dvi29ETlQR431LGvNK0sVng6Ll6Ojv cYegHZSszYuVrqRjdEDrU86rWXxCJYm9h7klBppCxiQ8vQhqYgIm/tPKuKaRr9JzH3OR XDWz7OEEECB7sg58unRfYbSt0dWoqQTc3TJVf15zFW8eQdUmWrzacdaNECl7w79YlhCA uWjA8x81yDufG9i/njBMSWtLac50kQOY89BzwkucnzOROIChCC9Xox2hX15/c+Fzbpjk 42fmAh44OeNvkRo3L2sfzXDaFXcYw0bwwsTMORhis0MXNF1pFmSHct5T0ZLufmDzzm1T svMg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b="ZZBnyw/q"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id p12-20020a170902c70c00b001b544ef9d50si4050264plp.546.2023.06.18.23.51.31; Sun, 18 Jun 2023 23:51:43 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@collabora.com header.s=mail header.b="ZZBnyw/q"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229818AbjFSGGz (ORCPT + 99 others); Mon, 19 Jun 2023 02:06:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:35520 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229609AbjFSGGy (ORCPT ); Mon, 19 Jun 2023 02:06:54 -0400 Received: from madras.collabora.co.uk (madras.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e5ab]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CC73B83; Sun, 18 Jun 2023 23:06:50 -0700 (PDT) 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-Spam-Status: No, score=-2.2 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NICE_REPLY_A,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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