From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6BE6442046B for ; Tue, 4 Aug 2026 04:27:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.133.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785817638; cv=none; b=lUToT8hEoGV0FqXLhnhRf9Vz8QAvoDrvnUcDuJuw+MKl2Qn/zh6vHwNwUb3qbHeiqpCFJ7Pj+0bCbDLznbKgtRlt/+I76o4GdJR//83W2hN5ofWPIr70CNxwEj9TfwRBEuEHx9fNG4zOUcOtKS+m9YNLjnICIGelz0l4I4g/yM4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785817638; c=relaxed/simple; bh=0KEr+fo7jJPOTUONZ2E2IrL9hPA+w5fyK2+TRLhJAFA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=BgC3A3cvIs1JqOrItquvzFmOfNkF5uI3+Lw0VVHUSLCeW5QWYNONn87eqssxhf/aOp/CmEPleRYMpL4X3n6L2+VarSnOyMMmaV9CF2inAHgSL83D4rz0Yn5aGHcBt+Wf608NME+saXITFVodgUqPEFZuHseVaDsb47CjxyoCIIE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=TghJtegt; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=Qm46aNL/; arc=none smtp.client-ip=170.10.133.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="TghJtegt"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="Qm46aNL/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1785817636; 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=NWLoSmzvlWrra6TV4DFt42DXFKEy+9KqLNEl12wX4Kg=; b=TghJtegtvFHidVTTpSne5c6AvZMKCN40p55IVxlnZvnjJVpA+RdZvZ6iYvkpu6mK6clHMH 0vYgYhT1sxsVWF5QZjruAQLBSiaF7w+XsrufdQTEtvQNwffqGO2GPsWfSg2gULU/UaUHHt 0nLNMmJepJ4J9enkIxkooiAsCtfU+NQ= Received: from mail-lf1-f69.google.com (mail-lf1-f69.google.com [209.85.167.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-244-BjAylndcOS2ysWCl9WD4Ug-1; Tue, 04 Aug 2026 00:27:14 -0400 X-MC-Unique: BjAylndcOS2ysWCl9WD4Ug-1 X-Mimecast-MFC-AGG-ID: BjAylndcOS2ysWCl9WD4Ug_1785817633 Received: by mail-lf1-f69.google.com with SMTP id 2adb3069b0e04-5b29e7e8ab6so267859e87.0 for ; Mon, 03 Aug 2026 21:27:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1785817633; x=1786422433; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to:content-type; bh=NWLoSmzvlWrra6TV4DFt42DXFKEy+9KqLNEl12wX4Kg=; b=Qm46aNL/K84FeDpWTzA/dYtWaXSWnkcyi4XlnM0iap43sKkThtCNI1Q0z+bqnuT16Y t4fnDaS7Kt1bBirTdd4XrkyM0X6+yciCLUkqZzMzbdjphmXqSFDKWZDUWy0gJnTPPSCN 70bxgItLD06AA4cfVHmQJ//M2dET6SVLt/sIUlDoCPF0Qvm1P2+ToXUcVGSk772PcjNT 9qUfzRBB6CHKk2pmjnYoKshGV8jZzVIJXc9TX3Mh3flLA6LdflfIDiCUOvbzovkZ8pU/ ewcpUgReIpNh7lkRC5RjFdeVh0/HshBmL/KkH0Vt0pG4ZMJZdpQ44CwCWiE+mjg+x/Oc YwWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785817633; x=1786422433; h=content-transfer-encoding:content-type:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=NWLoSmzvlWrra6TV4DFt42DXFKEy+9KqLNEl12wX4Kg=; b=SMfPPhiEtXFGW0VjCIIT7GICm4Pr/OO0Y7KjntNre3wUVLNpjOtrMrIUMLrPzmSogs MxMvhcopFcs/20UYexQKIEexNGV54ET5GC9HulboNPPJF1vTmhiEVeceLfEf4RngPNRT xh8VBVaTZPbzOR9pDZGzOuKGfQSlyz9H9GRXTXFOJh8zWE34oYvCCqOzbWzBOLGCqRAv kp/MgwKlAZ4iQNBtTC3qYEnkkhQVejQ9QKpya9F9wEdcpCupMncwm9HWCMpv/eZvcDOd x58L8u8OHPG1e+od4ImovN3BehaVaNnHcpDRIRemD5R0Y8cYr9Tg16Be4ew3uCiclrDZ +W2A== X-Forwarded-Encrypted: i=1; AHgh+Roi0up1k10t17rZsfPN5NLF+1CRGxDBfuM2b7wrj1gHN23D1a/FDZsn+HhGc10ZYvhNa4uw75ykd/jc8BE=@vger.kernel.org X-Gm-Message-State: AOJu0Yw3mGD1LxxdQ77jXeHl6U2L9cDvJbToBtP+xt87wtEz1vBYw2Lm JzH+08fjVYc+333rZWx6tP1W7kW0upVfXybLquC7rHt2Xg2amdBw+z8TVs/luUFCRuiLtoPEiLB EypX2GKL2lPgGIVrGWMkG8+TGAJsxLfiJNu47O8crp07sSMi49PpcaIU9PiV9Unc/ X-Gm-Gg: AR+sD10GNCICk2oUNH5CELkkCIM31u2HANnESWA8IPaotwNsMSTVax4msAbIvNHzuml 9hSPFbnPLqab5WemPFFsabaIn4Wgn+XQ2wnljo4SbCGQVLvfFyqA5cQ1tlZ7XB7GjpiBOGIXSGd 868rGAZrK8oXNYsK0VzeJecTD5iFjSKqQMaQMPHTmEhwvnmlsyogF7eNI9TEY7K72teldTFktTj vsHuNCnJlOifd5e0boq4yghUKJV8BFitMpvOXVaF11UoSzcXLtPWLqtJP0lHcYqYrEOCsxJ6wAb Ny8LbBcEnrbHH5X9JCvB9P3tYpMtckEE06dXmOu4V9EBpBHlxAHcHp9vcHWW2k4mMVRQOMhMxbm e3IJbBh2f/qPSqq/q X-Received: by 2002:a05:6512:6ca:b0:5ae:b7c7:5334 with SMTP id 2adb3069b0e04-5b2ee622c99mr384781e87.17.1785817633349; Mon, 03 Aug 2026 21:27:13 -0700 (PDT) X-Received: by 2002:a05:6512:6ca:b0:5ae:b7c7:5334 with SMTP id 2adb3069b0e04-5b2ee622c99mr384770e87.17.1785817632836; Mon, 03 Aug 2026 21:27:12 -0700 (PDT) Received: from fedora (85-23-51-1.bb.dnainternet.fi. [85.23.51.1]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5b2e23c46c4sm2311351e87.17.2026.08.03.21.27.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 03 Aug 2026 21:27:10 -0700 (PDT) From: mpenttil@redhat.com To: linux-mm@kvack.org Cc: dri-devel@lists.freedesktop.org, intel-xe@lists.freedesktop.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Mika=20Penttil=C3=A4?= , David Hildenbrand , Jason Gunthorpe , Leon Romanovsky , Alistair Popple , Balbir Singh , Zi Yan , Matthew Brost , Andrew Morton , Lorenzo Stoakes , "Liam R. Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko Subject: [PATCH v13 05/11] mm/hmm: implement folio split for migrate needs in HMM pagewalk Date: Tue, 4 Aug 2026 07:26:25 +0300 Message-ID: <20260804042631.2175585-6-mpenttil@redhat.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260804042631.2175585-1-mpenttil@redhat.com> References: <20260804042631.2175585-1-mpenttil@redhat.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Mika Penttilä Implement the helper to split PMD size folios during pagewalk. Splitting is needed if the start and end addresses are not PMD aligned, or setting up pmd migration entry fails. Cc: David Hildenbrand Cc: Jason Gunthorpe Cc: Leon Romanovsky Cc: Alistair Popple Cc: Balbir Singh Cc: Zi Yan Cc: Matthew Brost Suggested-by: Alistair Popple Signed-off-by: Mika Penttilä --- mm/hmm.c | 47 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/mm/hmm.c b/mm/hmm.c index 75e19be6ef76..3621d1df51d3 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -511,10 +511,51 @@ static int hmm_vma_walk_split(pmd_t *pmdp, unsigned long addr, struct mm_walk *walk) { - // TODO : implement split - return 0; -} + struct hmm_vma_walk *hmm_vma_walk = walk->private; + struct hmm_range *range = hmm_vma_walk->range; + struct migrate_vma *migrate = range->migrate; + struct folio *folio, *fault_folio; + spinlock_t *ptl; + int ret = 0; + + HMM_ASSERT_UNLOCKED(hmm_vma_walk); + + fault_folio = (migrate && migrate->fault_page) ? + page_folio(migrate->fault_page) : NULL; + + ptl = pmd_lock(walk->mm, pmdp); + if (unlikely(!pmd_trans_huge(*pmdp))) { + spin_unlock(ptl); + goto out; + } + folio = pmd_folio(*pmdp); + if (is_huge_zero_folio(folio)) { + spin_unlock(ptl); + split_huge_pmd(walk->vma, pmdp, addr); + } else { + folio_get(folio); + spin_unlock(ptl); + + if (folio != fault_folio) { + if (unlikely(!folio_trylock(folio))) { + folio_put(folio); + ret = -EBUSY; + goto out; + } + } else { + folio_put(folio); + } + + ret = split_folio(folio); + if (fault_folio != folio) { + folio_unlock(folio); + folio_put(folio); + } + } +out: + return ret; +} #else static int hmm_vma_handle_migrate_prepare_pmd(const struct mm_walk *walk, pmd_t *pmdp, -- 2.55.0