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 D3C68C369CB for ; Wed, 23 Apr 2025 17:54:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5C69D6B0008; Wed, 23 Apr 2025 13:54:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 59D096B000A; Wed, 23 Apr 2025 13:54:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 464876B000C; Wed, 23 Apr 2025 13:54:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 28A526B0008 for ; Wed, 23 Apr 2025 13:54:15 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 77AAC5FC95 for ; Wed, 23 Apr 2025 17:54:16 +0000 (UTC) X-FDA: 83366057712.21.64B1CCF Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf27.hostedemail.com (Postfix) with ESMTP id 1C77D40009 for ; Wed, 23 Apr 2025 17:54:13 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=EGHl88VD; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of mpenttil@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=mpenttil@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1745430854; a=rsa-sha256; cv=none; b=b9ECFgNyb0VfiVJe0n6Q3JUjYiPtUuMK3PMF8x0Cpm1zQYLfg4ZYDCgzcKBrYZ/dTenVZQ 86wESvJ9Inup3TgZAxju17EQAF7QN45bMHI7pEZaAkq/+z2ZcIa07kNTJ1Q3tKgl03cT81 q2yZKPc0SqYYX+GAEtlaCFHe3Lr74Cg= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=EGHl88VD; dmarc=pass (policy=quarantine) header.from=redhat.com; spf=pass (imf27.hostedemail.com: domain of mpenttil@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=mpenttil@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1745430854; 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=QESgbLfbNX2Y3UvNxy+rKh4qRh0SduwfR4pzjcuKRTw=; b=2BHmgvwyfS24aMf/UgtPpnaSjbFxY72RJhApOdLMoRbGiVbK+fn1dT7+Hv5Vt+cP2tPtoF CrMm4WsFSL5Hi+OgWzz6DVxiFDOUAA6/eLjSfCyBOW4Z6F1m1/DEIrl9J5muaGXgcV0GUq 77K/fe3J3q9RCtc41Wv2dm5/3t30vXQ= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1745430853; h=from:from: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; bh=QESgbLfbNX2Y3UvNxy+rKh4qRh0SduwfR4pzjcuKRTw=; b=EGHl88VDPvlKIBrUJ/wSUZT9010fGgszkp8Ya7MG2RauXeQF81kmDwT630ROtxC/oCfnnc V4nuTYesedxusckVink4VErCCOlEnch7LWopwp9QUKP3Pba1p6ptoGIHeWtJsoidLxaeRj WA8pZQD/+Hh8WZJ4Wn2ykfRuGWhgQ9I= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-363-f0E6aLR3MWCBwroSK4GdWA-1; Wed, 23 Apr 2025 13:54:10 -0400 X-MC-Unique: f0E6aLR3MWCBwroSK4GdWA-1 X-Mimecast-MFC-AGG-ID: f0E6aLR3MWCBwroSK4GdWA_1745430849 Received: by mail-lf1-f72.google.com with SMTP id 2adb3069b0e04-549999af7bfso38572e87.0 for ; Wed, 23 Apr 2025 10:54:10 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1745430849; x=1746035649; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QESgbLfbNX2Y3UvNxy+rKh4qRh0SduwfR4pzjcuKRTw=; b=CZ/84wXQ/LY0FjtMLeOyYZPnesDj99RD/17utygY1YFsWNxCGBBy6J+m4NrgWpNd9+ RIaf9VC9x1AAk0Wt0kJBlj2ycieM2YSaUlHeDLRwBT237LQF2/TFG2ZMLBeh2Si95OS6 lXu569vtYfbufFJf4ZHHYoLsXDEcjMLh3HOetEwu00F2ZfyvxJtfl7SRJzxFDpobYbp/ vPekOhbwhZYUfCRS0fdeANOoOsTJzMzN0y65jJLj8DpY25lM9/AvewtKrKd05EYr/vMH EaoOI41ewaUjk/8P7/iOgcTi69G4BEG2PzeCWJgn6cERZ3xvp84/B6MFArkQePUXNzf4 3hkQ== X-Forwarded-Encrypted: i=1; AJvYcCUsutDKtu9Xab+JOaB+CGUifhhixsHbAvP3IgMynJehGUERYQkSs8nUkM+GFAGu4epaLb8iHqYQpQ==@kvack.org X-Gm-Message-State: AOJu0YwWeRiHa3up4D2DDW7gT6mcRww/y0DF4Ka3jr/Vt/S2buUKR2jd 9GmoeazO71Datk3V7szFsNBB0q/YBJ543S/yTxpuk/OEoDrApSFmNNXFcZoUaHEjertI8WJFbxC U/IcNPHmKakQcUznqkOXZjrLqvwaseVVoCEgjSNXIUQTwWzE= X-Gm-Gg: ASbGncuY4Qtt6TSznqdphCsteIfw1BstqvAZxi8exmIqRku/IeOcSTcBPnAGg6znBlG QfnClmyPbrLTHemfzKjQcuXO4WMUXrjG9h7YPsAmtInh3SAhw54FakrGQDb+icKixDoammtNrU1 AmORtserFUyJ3EzNsLNbgcpAC1cqT0D4IX1gwUVuFuq0eAFp6bUTv8gALqGzVGPCUnVs35e9sWc nsyNmVbI5MGKnqXhpOOwhMLS87m4ZHem5vPJzIvVbc8GNFmw1H341uPf5VuRgDkXAw2AVWclKNT 1zpsRtdr/mLlSpJnwO9LqrQleKnIrB7EqU65hA== X-Received: by 2002:a05:6512:1318:b0:545:2b24:c714 with SMTP id 2adb3069b0e04-54d6e62c9c2mr6285145e87.18.1745430848661; Wed, 23 Apr 2025 10:54:08 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFzJrFtBxv3ILf8kxudvvXLLQMA4k/wXdgyXDUK6/Kq+MOMB6h4q33zBlb3xTdNXEt/3B1MQg== X-Received: by 2002:a05:6512:1318:b0:545:2b24:c714 with SMTP id 2adb3069b0e04-54d6e62c9c2mr6285107e87.18.1745430848074; Wed, 23 Apr 2025 10:54:08 -0700 (PDT) Received: from [192.168.1.86] (85-23-48-6.bb.dnainternet.fi. [85.23.48.6]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-54d6e540ec1sm1595753e87.85.2025.04.23.10.54.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 23 Apr 2025 10:54:07 -0700 (PDT) Message-ID: <7185c055-fc9e-4510-a9bf-6245673f2f92@redhat.com> Date: Wed, 23 Apr 2025 20:54:05 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v9 10/24] mm/hmm: let users to tag specific PFN with DMA mapped bit To: Leon Romanovsky , Marek Szyprowski , Jens Axboe , Christoph Hellwig , Keith Busch Cc: Leon Romanovsky , Jake Edge , Jonathan Corbet , Jason Gunthorpe , Zhu Yanjun , Robin Murphy , Joerg Roedel , Will Deacon , Sagi Grimberg , Bjorn Helgaas , Logan Gunthorpe , Yishai Hadas , Shameer Kolothum , Kevin Tian , Alex Williamson , =?UTF-8?B?SsOpcsO0bWUgR2xpc3Nl?= , Andrew Morton , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, linux-rdma@vger.kernel.org, iommu@lists.linux.dev, linux-nvme@lists.infradead.org, linux-pci@vger.kernel.org, kvm@vger.kernel.org, linux-mm@kvack.org, Niklas Schnelle , Chuck Lever , Luis Chamberlain , Matthew Wilcox , Dan Williams , Kanchan Joshi , Chaitanya Kulkarni References: <0a7c1e06269eee12ff8912fe0da4b7692081fcde.1745394536.git.leon@kernel.org> From: =?UTF-8?Q?Mika_Penttil=C3=A4?= In-Reply-To: <0a7c1e06269eee12ff8912fe0da4b7692081fcde.1745394536.git.leon@kernel.org> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: upGoshf6X2keuuFsuSpRCu6aGUCqgIkFn6OIaf9Jydk_1745430849 X-Mimecast-Originator: redhat.com Content-Language: en-US Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 1C77D40009 X-Stat-Signature: ynhzqk7ei6ugwze8u4tbpkyin5aeiurt X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1745430853-712801 X-HE-Meta: U2FsdGVkX1+NZO4egXHiKHrEQ1uDnIUGBT7pmV/mFUsLGZZB+hvBR0j1FK0s92qqjBiWnG2sBkjcobqv7QU8uTa9zPLEo9uJv/y2W0UAbZV+7dlJ2noT+y39sRAbzZ+sO/E/fYsAHrv3dAo1aNl8/1BbUcK0qbx+sNi47cXf3Ck0WTZ5pfn+WohGI/hHaNwFHuPgV178/kQG7XDfXMA8A9D6Y3RKCadtiww/+wuCLD8p0KJiiMbc+jfrkHnsITqdHA6/PB8shFvT6BvIHjJgorJGTCMB05Iwpd/8HdvDgiBQbzZnlSmSlAWKL255O4eqBTv/KWoQXBC4I5JfbIsmHa+iN2jhHUKBKIh5TsDNT/ira/upc5KCwEPvmOrfdJ2f0u6pja8TAKmqOYxJV2yw6adxT6VVtsKXO7mBrCWehrnuT9QtuyVMxHgzhcOv1djU17rLV/ez83bbflWRTkBKN5YqtHJSRsPShh6QVEbEhAKvhNyCHWyohw4oXN9YmfszVjclpLOh7m0Yyde4Y95VXAUpbjMCKQs5F5AjmEqugXQK6Zi8V7w9Yj6eXYJyAYK+2xXFqeHjnsd31n1R8Idmlczsxd8394l7zuzZgLjphDt+htQQbbt50Ijb2IGeFPZVCD2/YSa9co1o34/rn4+XGtf32m7L/eLEinFVG0BiN+ukxArxDJeUmlvFQdbamYxsL+C1Bmr4IMy4yiKNZXZ8ZoA6InLTesjTlw6jP2ADv2FfUPs+ofMMoOG8RzyO1WD4ovh6xrqErbOAhqWOValaTjVfI4zpVk6JlX7sFmlAeJ5QkqtAz0h8z0t0hEVcgf8qxfGxEuQ4X09tCDVa6o0Qz0ZawMGF9fJAKqv8LXPm7wgg2wDGiVcP5YM0D0UK8AK1f/ssT79eURq2QpRz2wQmDSIXkmgdOUyHAKft4+oa8HERebQs54elUMZGsW4O13yOuYs+TH9dTsmkWYd3bbi zf+bYNkZ 18w4V90VL+LKb+Hd0Ool8bitTyuTtp+GCgS34mXJDlAjs9oQ= 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: List-Subscribe: List-Unsubscribe: Hi, On 4/23/25 11:13, Leon Romanovsky wrote: > From: Leon Romanovsky > > Introduce new sticky flag (HMM_PFN_DMA_MAPPED), which isn't overwritten > by HMM range fault. Such flag allows users to tag specific PFNs with > information if this specific PFN was already DMA mapped. > > Tested-by: Jens Axboe > Reviewed-by: Christoph Hellwig > Signed-off-by: Leon Romanovsky > --- > include/linux/hmm.h | 17 +++++++++++++++ > mm/hmm.c | 51 ++++++++++++++++++++++++++++----------------- > 2 files changed, 49 insertions(+), 19 deletions(-) > > diff --git a/include/linux/hmm.h b/include/linux/hmm.h > index 126a36571667..a1ddbedc19c0 100644 > --- a/include/linux/hmm.h > +++ b/include/linux/hmm.h > @@ -23,6 +23,8 @@ struct mmu_interval_notifier; > * HMM_PFN_WRITE - if the page memory can be written to (requires HMM_PFN_VALID) > * HMM_PFN_ERROR - accessing the pfn is impossible and the device should > * fail. ie poisoned memory, special pages, no vma, etc > + * HMM_PFN_DMA_MAPPED - Flag preserved on input-to-output transformation > + * to mark that page is already DMA mapped > * > * On input: > * 0 - Return the current state of the page, do not fault it. > @@ -36,6 +38,13 @@ enum hmm_pfn_flags { > HMM_PFN_VALID = 1UL << (BITS_PER_LONG - 1), > HMM_PFN_WRITE = 1UL << (BITS_PER_LONG - 2), > HMM_PFN_ERROR = 1UL << (BITS_PER_LONG - 3), > + > + /* > + * Sticky flags, carried from input to output, > + * don't forget to update HMM_PFN_INOUT_FLAGS > + */ > + HMM_PFN_DMA_MAPPED = 1UL << (BITS_PER_LONG - 7), > + How is this playing together with the mapped order usage? > HMM_PFN_ORDER_SHIFT = (BITS_PER_LONG - 8), > > /* Input flags */ > @@ -57,6 +66,14 @@ static inline struct page *hmm_pfn_to_page(unsigned long hmm_pfn) > return pfn_to_page(hmm_pfn & ~HMM_PFN_FLAGS); > } > > +/* > + * hmm_pfn_to_phys() - return physical address pointed to by a device entry > + */ > +static inline phys_addr_t hmm_pfn_to_phys(unsigned long hmm_pfn) > +{ > + return __pfn_to_phys(hmm_pfn & ~HMM_PFN_FLAGS); > +} > + > /* > * hmm_pfn_to_map_order() - return the CPU mapping size order > * > diff --git a/mm/hmm.c b/mm/hmm.c > index 082f7b7c0b9e..51fe8b011cc7 100644 > --- a/mm/hmm.c > +++ b/mm/hmm.c > @@ -39,13 +39,20 @@ enum { > HMM_NEED_ALL_BITS = HMM_NEED_FAULT | HMM_NEED_WRITE_FAULT, > }; > > +enum { > + /* These flags are carried from input-to-output */ > + HMM_PFN_INOUT_FLAGS = HMM_PFN_DMA_MAPPED, > +}; > + > static int hmm_pfns_fill(unsigned long addr, unsigned long end, > struct hmm_range *range, unsigned long cpu_flags) > { > unsigned long i = (addr - range->start) >> PAGE_SHIFT; > > - for (; addr < end; addr += PAGE_SIZE, i++) > - range->hmm_pfns[i] = cpu_flags; > + for (; addr < end; addr += PAGE_SIZE, i++) { > + range->hmm_pfns[i] &= HMM_PFN_INOUT_FLAGS; > + range->hmm_pfns[i] |= cpu_flags; > + } > return 0; > } > > @@ -202,8 +209,10 @@ static int hmm_vma_handle_pmd(struct mm_walk *walk, unsigned long addr, > return hmm_vma_fault(addr, end, required_fault, walk); > > pfn = pmd_pfn(pmd) + ((addr & ~PMD_MASK) >> PAGE_SHIFT); > - for (i = 0; addr < end; addr += PAGE_SIZE, i++, pfn++) > - hmm_pfns[i] = pfn | cpu_flags; > + for (i = 0; addr < end; addr += PAGE_SIZE, i++, pfn++) { > + hmm_pfns[i] &= HMM_PFN_INOUT_FLAGS; > + hmm_pfns[i] |= pfn | cpu_flags; > + } > return 0; > } > #else /* CONFIG_TRANSPARENT_HUGEPAGE */ > @@ -230,14 +239,14 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr, > unsigned long cpu_flags; > pte_t pte = ptep_get(ptep); > uint64_t pfn_req_flags = *hmm_pfn; > + uint64_t new_pfn_flags = 0; > > if (pte_none_mostly(pte)) { > required_fault = > hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, 0); > if (required_fault) > goto fault; > - *hmm_pfn = 0; > - return 0; > + goto out; > } > > if (!pte_present(pte)) { > @@ -253,16 +262,14 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr, > cpu_flags = HMM_PFN_VALID; > if (is_writable_device_private_entry(entry)) > cpu_flags |= HMM_PFN_WRITE; > - *hmm_pfn = swp_offset_pfn(entry) | cpu_flags; > - return 0; > + new_pfn_flags = swp_offset_pfn(entry) | cpu_flags; > + goto out; > } > > required_fault = > hmm_pte_need_fault(hmm_vma_walk, pfn_req_flags, 0); > - if (!required_fault) { > - *hmm_pfn = 0; > - return 0; > - } > + if (!required_fault) > + goto out; > > if (!non_swap_entry(entry)) > goto fault; > @@ -304,11 +311,13 @@ static int hmm_vma_handle_pte(struct mm_walk *walk, unsigned long addr, > pte_unmap(ptep); > return -EFAULT; > } > - *hmm_pfn = HMM_PFN_ERROR; > - return 0; > + new_pfn_flags = HMM_PFN_ERROR; > + goto out; > } > > - *hmm_pfn = pte_pfn(pte) | cpu_flags; > + new_pfn_flags = pte_pfn(pte) | cpu_flags; > +out: > + *hmm_pfn = (*hmm_pfn & HMM_PFN_INOUT_FLAGS) | new_pfn_flags; > return 0; > > fault: > @@ -448,8 +457,10 @@ static int hmm_vma_walk_pud(pud_t *pudp, unsigned long start, unsigned long end, > } > > pfn = pud_pfn(pud) + ((addr & ~PUD_MASK) >> PAGE_SHIFT); > - for (i = 0; i < npages; ++i, ++pfn) > - hmm_pfns[i] = pfn | cpu_flags; > + for (i = 0; i < npages; ++i, ++pfn) { > + hmm_pfns[i] &= HMM_PFN_INOUT_FLAGS; > + hmm_pfns[i] |= pfn | cpu_flags; > + } > goto out_unlock; > } > > @@ -507,8 +518,10 @@ static int hmm_vma_walk_hugetlb_entry(pte_t *pte, unsigned long hmask, > } > > pfn = pte_pfn(entry) + ((start & ~hmask) >> PAGE_SHIFT); > - for (; addr < end; addr += PAGE_SIZE, i++, pfn++) > - range->hmm_pfns[i] = pfn | cpu_flags; > + for (; addr < end; addr += PAGE_SIZE, i++, pfn++) { > + range->hmm_pfns[i] &= HMM_PFN_INOUT_FLAGS; > + range->hmm_pfns[i] |= pfn | cpu_flags; > + } > > spin_unlock(ptl); > return 0;