From: "Yadav, Arvind" <arvind.yadav@intel.com>
To: Matthew Brost <matthew.brost@intel.com>
Cc: <intel-xe@lists.freedesktop.org>,
<himal.prasad.ghimiray@intel.com>,
<thomas.hellstrom@linux.intel.com>, <pallavi.mishra@intel.com>
Subject: Re: [RFC v2 5/9] drm/xe/bo: Handle CPU faults on purged buffer objects
Date: Wed, 3 Dec 2025 12:55:52 +0530 [thread overview]
Message-ID: <605b6378-abff-4c24-b8f0-85d7ea51ea30@intel.com> (raw)
In-Reply-To: <aS80edjt8NMTWNYo@lstrano-desk.jf.intel.com>
On 03-12-2025 00:18, Matthew Brost wrote:
> On Tue, Dec 02, 2025 at 10:42:39AM -0800, Matthew Brost wrote:
>> On Mon, Dec 01, 2025 at 11:20:15AM +0530, Arvind Yadav wrote:
>>> Modify the CPU page fault handler, `xe_bo_cpu_fault()`, to correctly
>>> handle access to buffer objects that have been purged.
>>>
>>> When a buffer object is in the `XE_MADV_PURGED` state, its backing
>>> store has been reclaimed by the kernel. If the CPU attempts to access
>>> this memory, it is an error that should be reported to the application.
>>>
>>> v2:
>>> - Added xe_bo_is_purged(bo) instead of atomic_read.
>>> - Avoids leaks and keeps drm_dev_exit() while returning.
>>>
>>> Cc: Matthew Brost <matthew.brost@intel.com>
>> Reviewed-by: Matthew Brost <matthew.brost@intel.com>
>>
> Ah, actually I think I made a mistake here.
>
>>> Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
>>> Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>> Signed-off-by: Arvind Yadav <arvind.yadav@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_bo.c | 10 ++++++++++
>>> 1 file changed, 10 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
>>> index f0b3f7a13114..7f5bcf114ed4 100644
>>> --- a/drivers/gpu/drm/xe/xe_bo.c
>>> +++ b/drivers/gpu/drm/xe/xe_bo.c
>>> @@ -1992,6 +1992,16 @@ static vm_fault_t xe_bo_cpu_fault(struct vm_fault *vmf)
>>> if (!drm_dev_enter(&xe->drm, &idx))
>>> return ttm_bo_vm_dummy_page(vmf, vmf->vma->vm_page_prot);
>>>
>>> + /*
>>> + * BO content is gone. Signal the user process.
>>> + * Once purged, BO remains permanently invalid (i915 semantics).
>>> + * Application must destroy and recreate the BO.
>>> + */
>>> + if (xe_bo_is_purged(bo)) {
> Doesn't this need to done under the BO's dma-resv lock to avoid a race?
> Consider the case where after this check, TTM evicts this BO changing
> the state purged. Now we grab the BO's dma-resv lock and try to get
> pages on purged BO. Seems like an issue.
Thanks for catching these issues!.
>
> Also with that, xe_bo_is_purged likely should have lockdep annotation
> asserting the BOs dma-resv lock is held.
I initially added xe_bo_assert_held() to xe_bo_is_purged(), but it
causes crashes because many callers don't hold the lock.
For example, in xe_pagefault.c (this early check), no lock is held. I’ll
recheck the call and update accordingly.
~Arvind
>
> Matt
>
>>> + ret = VM_FAULT_SIGBUS;
>>> + goto out;
>>> + }
>>> +
>>> ret = xe_bo_cpu_fault_fastpath(vmf, xe, bo, needs_rpm);
>>> if (ret != VM_FAULT_RETRY)
>>> goto out;
>>> --
>>> 2.43.0
>>>
next prev parent reply other threads:[~2025-12-03 7:26 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-01 5:50 [RFC v2 0/9] drm/xe/madvise: Add support for purgeable buffer objects Arvind Yadav
2025-12-01 5:50 ` [RFC v2 1/9] drm/xe/uapi: Add UAPI " Arvind Yadav
2025-12-01 23:00 ` Matthew Brost
2025-12-02 2:55 ` Yadav, Arvind
2025-12-01 5:50 ` [RFC v2 2/9] drm/xe/bo: Add purgeable bo state tracking and field madv to xe_bo Arvind Yadav
2025-12-01 23:02 ` Matthew Brost
2025-12-02 2:56 ` Yadav, Arvind
2025-12-02 18:52 ` Matthew Brost
2025-12-01 5:50 ` [RFC v2 3/9] drm/xe/bo: Prevent purging of shared buffer objects Arvind Yadav
2025-12-01 23:10 ` Matthew Brost
2025-12-02 3:42 ` Yadav, Arvind
2025-12-02 9:42 ` Thomas Hellström
2025-12-02 15:17 ` Matthew Brost
2025-12-02 18:22 ` Yadav, Arvind
2025-12-02 18:35 ` Matthew Brost
2025-12-01 5:50 ` [RFC v2 4/9] drm/xe/madvise: Implement purgeable buffer object support Arvind Yadav
2025-12-02 1:46 ` Matthew Brost
2025-12-02 4:01 ` Yadav, Arvind
2025-12-02 21:39 ` Matthew Brost
2025-12-03 14:01 ` Yadav, Arvind
2025-12-01 5:50 ` [RFC v2 5/9] drm/xe/bo: Handle CPU faults on purged buffer objects Arvind Yadav
2025-12-02 18:42 ` Matthew Brost
2025-12-02 18:48 ` Matthew Brost
2025-12-03 7:25 ` Yadav, Arvind [this message]
2025-12-03 16:24 ` Matthew Brost
2025-12-01 5:50 ` [RFC v2 6/9] drm/xe/bo: Prevent mmap of " Arvind Yadav
2025-12-02 18:54 ` Matthew Brost
2025-12-01 5:50 ` [RFC v2 7/9] drm/xe/vm: Prevent binding " Arvind Yadav
2025-12-02 18:57 ` Matthew Brost
2025-12-03 11:24 ` Yadav, Arvind
2025-12-01 5:50 ` [RFC v2 8/9] drm/xe/uapi: Add UAPI for purgeable bo state to madvise query response Arvind Yadav
2025-12-02 19:01 ` Matthew Brost
2025-12-03 3:54 ` Yadav, Arvind
2025-12-01 5:50 ` [RFC v2 9/9] drm/xe: Add support for querying purgeable BO states Arvind Yadav
2025-12-02 18:36 ` [RFC v2 0/9] drm/xe/madvise: Add support for purgeable buffer objects Souza, Jose
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=605b6378-abff-4c24-b8f0-85d7ea51ea30@intel.com \
--to=arvind.yadav@intel.com \
--cc=himal.prasad.ghimiray@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=matthew.brost@intel.com \
--cc=pallavi.mishra@intel.com \
--cc=thomas.hellstrom@linux.intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.