Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Himal Prasad Ghimiray" <himal.prasad.ghimiray@intel.com>
Cc: intel-xe@lists.freedesktop.org
Subject: Re: [RFC v2 04/21] drm/xe: Implement xe_access_counter_handler
Date: Wed, 09 Sep 2026 12:58:08 +0000	[thread overview]
Message-ID: <20260909125808.7901A1F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260909124457.1610890-27-himal.prasad.ghimiray@intel.com>

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [High] Missing guard for USM disabled state or uninitialized queue in `xe_access_counter_handler` causes division by zero, uninitialized spinlock usage, and NULL pointer dereference.
- [High] Use-after-free of `pagefault_wq` when queuing access counter work during device teardown or unbind.
- [Medium] Unconditional `drm_warn` when the access counter queue is full causes kernel log flooding.
--

commit 4068a8bc69a082a892fb80bc8c9a526e108c2eb2
Author: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>

drm/xe: Implement xe_access_counter_handler

This commit implements the access counter handler to process G2H
notifications from the GuC. It pushes access counter events into a queue
and schedules a worker on the pagefault workqueue to process them.

> diff --git a/drivers/gpu/drm/xe/xe_access_counter.c b/drivers/gpu/drm/xe/xe_access_counter.c
> index ae939576b72da..6920e52cf1543 100644
> --- a/drivers/gpu/drm/xe/xe_access_counter.c
> +++ b/drivers/gpu/drm/xe/xe_access_counter.c

[ ... ]

> @@ -90,6 +96,22 @@ int xe_access_counter_init(struct xe_device *xe)
>   */
>  int xe_access_counter_handler(struct xe_device *xe, struct xe_access_counter *ac)
>  {
> -	/* Stub implementation - to be filled in */
> -	return 0;
> +	struct xe_usm_queue *ac_queue = &xe->usm.ac_queue;
> +	int idx;
> +	unsigned long flags;
> +	bool full;
> +
> +	spin_lock_irqsave(&ac_queue->lock, flags);

[Severity: High]
What happens in xe_access_counter_handler() if the USM subsystem is disabled?

If xe->info.has_usm is false, xe_access_counter_init() will exit early without
allocating ac_queue->data, setting ac_queue->size, or initializing the
spinlock.

If the hardware or GuC firmware sends a G2H notification anyway (due to an
unexpected state or buggy firmware), will this unconditionally acquire an
uninitialized lock?

Furthermore, xe_usm_queue_full() will evaluate to false due to underflow,
causing xe_usm_queue_push() to perform a modulo by zero on q->size and a
memcpy() to a NULL ac_queue->data pointer. Is an early return guard needed
here to verify USM is fully initialized?

> +	idx = xe_access_counter_work_index(xe);
> +	full = xe_usm_queue_full(ac_queue);
> +	if (!full) {
> +		xe_usm_queue_push(ac_queue, ac);
> +		queue_work(xe->usm.pagefault_wq, &xe->usm.ac_workers[idx].work);

[Severity: High]
During device unbind or driver removal, can xe->usm.pagefault_wq be used
after it is freed?

Because devres executes cleanup actions in reverse order of registration,
xe_pagefault_fini() destroys pagefault_wq before the GuC is stopped and
IRQs are uninstalled (which were registered earlier in probe).

If an access counter notification arrives during this teardown window,
could we queue work to a destroyed workqueue?

> +	} else {
> +		drm_warn(&xe->drm,
> +			 "AccessCounter Queue full, shouldn't be possible\n");

[Severity: Medium]
Could this unconditional warning flood the kernel log?

If the consumer worker is delayed, or if the hardware generates access
counter notifications at a high rate, the queue will fill up.

Once full, this handler will unconditionally print the warning for every
subsequent event, which bypasses rate-limiting. Would drm_warn_ratelimited()
be safer to use here?

> +	}
> +	spin_unlock_irqrestore(&ac_queue->lock, flags);
> +
> +	return full ? -ENOSPC : 0;
>  }

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260909124457.1610890-23-himal.prasad.ghimiray@intel.com?part=4

  reply	other threads:[~2026-09-09 12:58 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-09 12:44 [RFC v2 00/21] drm/xe: Access counter support for migration hints Himal Prasad Ghimiray
2026-09-09 12:44 ` [RFC v2 01/21] drm/xe: Add xe_usm_queue generic USM circular buffer Himal Prasad Ghimiray
2026-09-09 12:51   ` sashiko-bot
2026-09-09 12:44 ` [RFC v2 02/21] drm/xe: Stub out new access_counter layer Himal Prasad Ghimiray
2026-09-09 12:44 ` [RFC v2 03/21] drm/xe: Implement xe_access_counter_init Himal Prasad Ghimiray
2026-09-09 12:55   ` sashiko-bot
2026-09-09 12:44 ` [RFC v2 04/21] drm/xe: Implement xe_access_counter_handler Himal Prasad Ghimiray
2026-09-09 12:58   ` sashiko-bot [this message]
2026-09-09 12:44 ` [RFC v2 05/21] drm/xe: Extract xe_vma_lock_and_validate helper Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 06/21] drm/xe: Move ASID to FAULT VM lookup to xe_device Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 07/21] drm/xe/pf: Use xe_device_asid_to_vm in xe_pagefault_save_to_vm Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 08/21] drm/xe: Implement xe_access_counter_queue_work Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 09/21] drm/xe: Implement xe_access_counter_service Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 10/21] drm/xe/trace: Add xe_vma_acc trace event for access counter notifications Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 11/21] drm/xe/svm: Handle svm vma for acc_ctr trigger Himal Prasad Ghimiray
2026-09-09 12:52   ` sashiko-bot
2026-09-09 12:45 ` [RFC v2 12/21] drm/xe: Service all VMAs in an access counter granularity window Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 13/21] drm/xe: Add xe_guc_access_counter layer Himal Prasad Ghimiray
2026-09-09 12:54   ` sashiko-bot
2026-09-09 12:45 ` [RFC v2 14/21] drm/xe/uapi: Add access counter parameter extension for exec queue Himal Prasad Ghimiray
2026-09-09 12:52   ` sashiko-bot
2026-09-09 12:45 ` [RFC v2 15/21] drm/xe/lrc: Pass exec_queue to xe_lrc_create for access counter params Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 16/21] drm/xe/vm: Add xe_vma_supports_access_ctr() helper Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 17/21] drm/xe/pt: Set NC PTE bit for VMAs ineligible for access counting Himal Prasad Ghimiray
2026-09-09 12:56   ` sashiko-bot
2026-09-09 12:45 ` [RFC v2 18/21] drm/xe/svm: Define access counter migration policy Himal Prasad Ghimiray
2026-09-09 13:01   ` sashiko-bot
2026-09-09 12:45 ` [RFC v2 19/21] drm/xe/svm: Add MIGRATE_ON_ACCESS_COUNTER bind flag Himal Prasad Ghimiray
2026-09-09 12:57   ` sashiko-bot
2026-09-09 12:45 ` [RFC v2 20/21] drm/xe/svm: Move EVICTED PAGES debug log to callers Himal Prasad Ghimiray
2026-09-09 12:45 ` [RFC v2 21/21] drm/xe/svm: Distinguish access-counter-triggered range setup in logs Himal Prasad Ghimiray
2026-09-09 12:58   ` sashiko-bot

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=20260909125808.7901A1F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=himal.prasad.ghimiray@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /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