From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D864E302157 for ; Fri, 14 Nov 2025 09:23:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763112192; cv=none; b=U5B+Qf0TetE+M8DkItRF1W/rQCTBUvIcjSO9KfB7xlZPPXGCUatVlzhg7+dXlDjaL6l3t+23K6NV95RR7+86CjGk2rqOroMnO4ZxSB1/+3VoCJ9eNk/omEG9Omf3T6G/tFXTNCdWbIN9SFpdArP7J5EUh//xpw6nnqENzH5y+vo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763112192; c=relaxed/simple; bh=IZsYdb3J2TG0ZqDwkKnSD/BUdINuFPFPuUpaAFMOshA=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=G307ZiNNPRouGByYOmHlHG3rqnv2KILsyZGWCDo+11d+wUYOY/yx4G8qVKCgHjuGTRIKwIDw8Lompbx/Ebtt0reelqblBzxyIbFuUFMWHrmnq67bOrEvbJ/3OysE8OjuW0sMOxbOJBUMkzJJ6ndwX218jWsgdqAhZUK1M6gMSYI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=U5lG5vZm; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="U5lG5vZm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2788FC113D0; Fri, 14 Nov 2025 09:23:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1763112190; bh=IZsYdb3J2TG0ZqDwkKnSD/BUdINuFPFPuUpaAFMOshA=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=U5lG5vZmHFU/SbhlnwtaE/Ua/9v1Q1x9IrvpCzLqE1tFTPWc7qeQ+xIEFlXGBgeH6 7JFdiPfTuDWiz+ixIzfbZHJV0PKCqYR1FT5u0wd5j/DGwSaSLfFjCQugAfx+sgRNv0 zl5tVidOG5e4HexSNVSr8BkCGwXLUUPOR5dStA3h7nMRpwYbqX/QQBYY3vlPMeYN06 KNNS9XXVy1TbWE4adKaPa6oC3hgRQOoBRjip3v9FIYr9DpmhIjIFJPaP6dGUyez+p7 Yhd9W6x7bEAU7pJqATie25fEJ72RDmfKYUNqIJ021w2MG+HdMg1MT1q04paY9ebJAo 0b/B4YnIY1YLg== Message-ID: Date: Fri, 14 Nov 2025 10:23:02 +0100 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] mm/huge_memory: fix override of entry in remove_migration_pmd To: Balbir Singh , linux-kernel@vger.kernel.org, linux-mm@kvack.org, dri-devel@lists.freedesktop.org Cc: Andrew Morton , Zi Yan , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Oscar Salvador , Lorenzo Stoakes , Baolin Wang , "Liam R. Howlett" , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lyude Paul , Danilo Krummrich , David Airlie , Simona Vetter , Ralph Campbell , =?UTF-8?Q?Mika_Penttil=C3=A4?= , Matthew Brost , Francois Dugast References: <20251114012153.2634497-1-balbirs@nvidia.com> <20251114012153.2634497-2-balbirs@nvidia.com> From: "David Hildenbrand (Red Hat)" Content-Language: en-US In-Reply-To: <20251114012153.2634497-2-balbirs@nvidia.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 14.11.25 02:21, Balbir Singh wrote: > Recent changes exposed a BUG in remove_migration_pmd() where the > migration entry was being overridden when the folio is device private. > > Use scope local entry for creating the device private pmde. Make the > pmde writable if the migration entry is writable by moving the check > is_migration_write() prior to creating the device private entry. > > Cc: Andrew Morton > Cc: David Hildenbrand > Cc: Zi Yan > Cc: Joshua Hahn > Cc: Rakie Kim > Cc: Byungchul Park > Cc: Gregory Price > Cc: Ying Huang > Cc: Alistair Popple > Cc: Oscar Salvador > Cc: Lorenzo Stoakes > Cc: Baolin Wang > Cc: "Liam R. Howlett" > Cc: Nico Pache > Cc: Ryan Roberts > Cc: Dev Jain > Cc: Barry Song > Cc: Lyude Paul > Cc: Danilo Krummrich > Cc: David Airlie > Cc: Simona Vetter > Cc: Ralph Campbell > Cc: Mika Penttilä > Cc: Matthew Brost > Cc: Francois Dugast > > Signed-off-by: Balbir Singh > Reviewed-by: Lorenzo Stoakes > --- > mm/huge_memory.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c > index 9dda8c48daca..df93768a6e15 100644 > --- a/mm/huge_memory.c > +++ b/mm/huge_memory.c > @@ -4698,7 +4698,12 @@ void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new) > folio_get(folio); > pmde = folio_mk_pmd(folio, READ_ONCE(vma->vm_page_prot)); > > + if (is_writable_migration_entry(entry)) > + pmde = pmd_mkwrite(pmde, vma); > + > if (folio_is_device_private(folio)) { > + swp_entry_t entry; > + > if (pmd_write(pmde)) > entry = make_writable_device_private_entry( > page_to_pfn(new)); > @@ -4710,8 +4715,6 @@ void remove_migration_pmd(struct page_vma_mapped_walk *pvmw, struct page *new) > > if (pmd_swp_soft_dirty(*pvmw->pmd)) > pmde = pmd_mksoft_dirty(pmde); > - if (is_writable_migration_entry(entry)) > - pmde = pmd_mkwrite(pmde, vma); > if (pmd_swp_uffd_wp(*pvmw->pmd)) > pmde = pmd_mkuffd_wp(pmde); > if (!is_migration_entry_young(entry)) There are more problems here: you cannot call pmd_mksoft_dirty() etc on something that is not a present pmd! We have pmd_swp_mksoft_dirty() and friends for that. So you'll have to completely split both paths. -- Cheers David