From: Boris Brezillon <boris.brezillon@collabora.com>
To: Konstantin Fastov <kfastov@gmail.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>,
Andrew Morton <akpm@linux-foundation.org>,
David Hildenbrand <david@kernel.org>,
dri-devel@lists.freedesktop.org, linux-mm@kvack.org,
linux-kernel@vger.kernel.org, regressions@lists.linux.dev,
stable@vger.kernel.org
Subject: Re: [PATCH] drm/gem-shmem: Install writable PTEs for write faults
Date: Tue, 4 Aug 2026 16:29:24 +0200 [thread overview]
Message-ID: <20260804162924.0268f80a@fedora-21.home> (raw)
In-Reply-To: <20260804140403.16337-1-kfastov@gmail.com>
Hello Konstantin,
On Tue, 4 Aug 2026 17:04:03 +0300
Konstantin Fastov <kfastov@gmail.com> wrote:
> Since the introduction of dirty tracking, drm_gem_shmem_vm_ops has a
> .pfn_mkwrite handler. Its presence makes vma_wants_writenotify() true,
> so vma_set_page_prot() removes the write bit from vm_page_prot of
> shared mappings, and the vmf_insert_pfn() call in the fault handler now
> installs read-only PTEs even when serving a write fault.
>
> For regular CPU accesses this is transparent: the retried access faults
> again on the present read-only PTE, goes through wp_pfn_shared() into
> .pfn_mkwrite() and the PTE is upgraded to writable. But consumers that
> resolve faults through fixup_user_fault() + follow_pfnmap_start()
> perform no such retry. In particular KVM's hva_to_pfn_remapped(),
> after "successfully" handling a write fault, finds a present read-only
> PTE, treats it as KVM_PFN_ERR_RO_FAULT and fails the vcpu run with
> EFAULT. Observed as AsahiLinux/linux#560: muvm/libkrun microVMs
> mapping virtio-gpu blob resources die with EFAULT on first GPU access.
> The traced failing sequence:
>
> follow_pfnmap_start() -> -EINVAL (no PTE yet)
> fixup_user_fault(WRITE)
> drm_gem_shmem_fault()
> vmf_insert_pfn() -> NOPAGE (read-only PTE installed)
> fixup_user_fault() -> 0 (fault "handled")
> follow_pfnmap_start() -> 0, !writable
> hva_to_pfn() -> KVM_PFN_ERR_RO_FAULT
>
> Fix it the same way commit cb2a2a5b37ad ("drm/shmem_helper: Make sure
> PMD entries get the writeable upgrade") did for the PMD path: when the
> fault is a write fault, install a writable entry directly and record
> the write for dirty tracking, instead of relying on a refault that not
> every fault-resolution path performs.
>
> To do that at PTE level, add vmf_insert_pfn_mkwrite(), the VM_PFNMAP
> counterpart of vmf_insert_mixed_mkwrite(): insert_pfn() already
> implements the mkwrite semantics, there was just no wrapper exposing it
> for pfn inserts with the default pgprot.
The same issue is being discussed here [1].
Regards,
Boris
[1]https://lore.kernel.org/dri-devel/20260804120529.1730187-1-pbonzini@redhat.com/
next prev parent reply other threads:[~2026-08-04 14:29 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-04 14:04 [PATCH] drm/gem-shmem: Install writable PTEs for write faults Konstantin Fastov
2026-08-04 14:29 ` Boris Brezillon [this message]
2026-08-04 14:57 ` Konstantin Fastov
2026-08-19 16:59 ` kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260804162924.0268f80a@fedora-21.home \
--to=boris.brezillon@collabora.com \
--cc=airlied@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=david@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=kfastov@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=regressions@lists.linux.dev \
--cc=simona@ffwll.ch \
--cc=stable@vger.kernel.org \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox