All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tauro, Riana" <riana.tauro@intel.com>
To: "Upadhyay, Tejas" <tejas.upadhyay@intel.com>,
	"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>
Cc: "Gupta, Anshuman" <anshuman.gupta@intel.com>,
	"Vivi, Rodrigo" <rodrigo.vivi@intel.com>,
	"aravind.iddamsetty@linux.intel.com"
	<aravind.iddamsetty@linux.intel.com>,
	"Nilawar, Badal" <badal.nilawar@intel.com>,
	"Jadav, Raag" <raag.jadav@intel.com>,
	"Koppuravuri, Ravi Kishore" <ravi.kishore.koppuravuri@intel.com>,
	"Koujalagi,  Mallesh" <mallesh.koujalagi@intel.com>,
	"Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com>
Subject: Re: [PATCH v4 3/6] drm/xe/xe_ras: Add support to query page offline queue and list
Date: Wed, 7 Oct 2026 10:36:02 +0530	[thread overview]
Message-ID: <7cf5bba0-5be2-4e5b-a9a6-10abd73d2330@intel.com> (raw)
In-Reply-To: <DS0PR11MB8718657531C7847104A807AB81952@DS0PR11MB8718.namprd11.prod.outlook.com>


On 06-10-2026 09:25, Upadhyay, Tejas wrote:
>
>> -----Original Message-----
>> From: Intel-xe <intel-xe-bounces@lists.freedesktop.org> On Behalf Of
>> Upadhyay, Tejas
>> Sent: 05 October 2026 16:59
>> To: Tauro, Riana <riana.tauro@intel.com>; intel-xe@lists.freedesktop.org
>> Cc: Gupta, Anshuman <anshuman.gupta@intel.com>; Vivi, Rodrigo
>> <rodrigo.vivi@intel.com>; aravind.iddamsetty@linux.intel.com; Nilawar, Badal
>> <badal.nilawar@intel.com>; Jadav, Raag <raag.jadav@intel.com>;
>> Koppuravuri, Ravi Kishore <ravi.kishore.koppuravuri@intel.com>; Koujalagi,
>> Mallesh <mallesh.koujalagi@intel.com>; Ghimiray, Himal Prasad
>> <himal.prasad.ghimiray@intel.com>
>> Subject: RE: [PATCH v4 3/6] drm/xe/xe_ras: Add support to query page offline
>> queue and list
>>
>>
>>
>>> -----Original Message-----
>>> From: Tauro, Riana <riana.tauro@intel.com>
>>> Sent: 05 October 2026 14:32
>>> To: intel-xe@lists.freedesktop.org
>>> Cc: Tauro, Riana <riana.tauro@intel.com>; Gupta, Anshuman
>>> <anshuman.gupta@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>;
>>> aravind.iddamsetty@linux.intel.com; Nilawar, Badal
>>> <badal.nilawar@intel.com>; Jadav, Raag <raag.jadav@intel.com>;
>>> Koppuravuri, Ravi Kishore <ravi.kishore.koppuravuri@intel.com>;
>>> Koujalagi, Mallesh <mallesh.koujalagi@intel.com>; Upadhyay, Tejas
>>> <tejas.upadhyay@intel.com>; Ghimiray, Himal Prasad
>>> <himal.prasad.ghimiray@intel.com>
>>> Subject: [PATCH v4 3/6] drm/xe/xe_ras: Add support to query page
>>> offline queue and list
>>>
>>> Add support to query page offline list and queue from firmware during
>>> module load. The page offline list command retrieves pages that are
>>> already offlined by the firmware. The page offline queue command
>>> retrieves the pages pending to be offlined by the firmware.
>>>
>>> Cc: Tejas Upadhyay <tejas.upadhyay@intel.com>
>>> Signed-off-by: Riana Tauro <riana.tauro@intel.com>
>>> ---
>>> v2: rebase
>>>      store total pages once per response (Sashiko)
>>>
>>> v3: common function for offline and queue (Himal)
>>>
>>> v4: re-order list and queue (Sashiko, Himal)
>>>      remove type
>>> 	use size_t
>>> 	add description and rename functions (Tejas)
>> LGTM,
>> Reviewed-by: Tejas Upadhyay <tejas.upadhyay@intel.com>
>>
>> Tejas
>>> ---
>>>   drivers/gpu/drm/xe/xe_ras.c                   | 87 +++++++++++++++++++
>>>   drivers/gpu/drm/xe/xe_ras_types.h             | 35 ++++++++
>>>   drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h |  4 +
>>>   3 files changed, 126 insertions(+)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_ras.c b/drivers/gpu/drm/xe/xe_ras.c
>>> index 2ec310c29489..14fc3227483c 100644
>>> --- a/drivers/gpu/drm/xe/xe_ras.c
>>> +++ b/drivers/gpu/drm/xe/xe_ras.c
>>> @@ -343,6 +343,89 @@ static bool ras_counter_is_valid(struct xe_device
>>> *xe, struct xe_ras_error_class
>>>   	return true;
>>>   }
>>>
>>> +/*
>>> + * Fetch and process offline list and queue from firmware via mailbox.
>>> +@notify_fw controls
>>> + * whether firmware is notified of the offline/remove action.
>>> + */
>>> +static void process_offline_pages(struct xe_device *xe, u32 cmd, void
>>> +*req,
>>> size_t req_size,
>>> +				  void *resp, size_t resp_size,
>>> +				  struct xe_ras_offline_common *common,
>>> bool notify_fw) {
>>> +	struct xe_sysctrl_mailbox_command command = {0};
>>> +	struct xe_ras_offline_list_request *list_req;
>>> +	u32 total_pages = 0, count = 0;
>>> +	size_t rlen;
>>> +	int ret, i;
>>> +
>>> +	list_req = req;
>>> +
>>> +	xe_sysctrl_create_command(&command, XE_SYSCTRL_GROUP_GFSP,
>>> cmd, req, req_size, resp,
>>> +				  resp_size);
>>> +
>>> +	do {
>>> +		memset(resp, 0, resp_size);
>>> +
>>> +		if (list_req)
>>> +			list_req->index = count;
>>> +
>>> +		ret = xe_sysctrl_send_command(&xe->sc, &command, &rlen);
>>> +		if (ret) {
>>> +			xe_log_err(xe, SYSCTRL, ret, "failed to get page offline
>>> data, cmd=%#x\n",
>>> +				   cmd);
>>> +			return;
>>> +		}
>>> +
>>> +		if (rlen != resp_size) {
>>> +			xe_log_err(xe, SYSCTRL, -EINVAL,
>>> +				   "unexpected page offline response length
>>> %zu (expected %zu), cmd=%#x\n",
>>> +				   rlen, resp_size, cmd);
>>> +			return;
>>> +		}
>>> +
>>> +		for (i = 0; i < common->pages_returned && i <
>>> XE_RAS_NUM_PAGES; i++)
>>> +			handle_page_offline(xe, common->page_addresses[i],
>>> notify_fw);
>>> +
>>> +		count += common->pages_returned;
>>> +		if (!common->pages_returned)
>>> +			break;
>>> +
>>> +		if (!total_pages)
>>> +			total_pages = common->total_pages;
>>> +
>>> +		if (count > total_pages) {
>>> +			xe_log_err(xe, SYSCTRL, -EINVAL,
>>> +				   "Pages returned exceed total pages %u,
>>> returned %u, cmd=%#x\n",
>>> +				   total_pages, count, cmd);
>>> +			return;
>>> +		}
>>> +	} while (common->additional_data);
>>> +}
>>> +
>>> +/*
>>> + * Retrieve firmware queued pages from warm-retained SRAM during
>> probe.
>>> +Handle and soft-offline
>>> + * each page as required.
>>> + */
>>> +static void get_offline_queue(struct xe_device *xe) {
>>> +	struct xe_ras_offline_common response = {0};
>>> +
>>> +	process_offline_pages(xe, XE_SYSCTRL_CMD_GET_OFFLINE_QUEUE,
>>> NULL, 0, &response,
>>> +			      sizeof(response), &response, true); }
>>> +
>>> +/*
>>> + * Retrieve permanently offlined pages from firmware's non-volatile
>>> +storage during probe,
>>> + * allowing the driver to soft-offline them before kernel allocations begin.
>>> + */
>>> +static void get_offline_list(struct xe_device *xe) {
>>> +	struct xe_ras_offline_list_response response = {0};
>>> +	struct xe_ras_offline_list_request request = {0};
>>> +
>>> +	process_offline_pages(xe, XE_SYSCTRL_CMD_GET_OFFLINE_LIST,
>>> &request, sizeof(request),
>>> +			      &response, sizeof(response), &response.common,
>>> false); }
>>> +
>>>   static struct pci_dev *find_usp_dev(struct pci_dev *pdev)  {
>>>   	struct pci_dev *vsp;
>>> @@ -1067,6 +1150,10 @@ void xe_ras_init(struct xe_device *xe)
>>>   	if (IS_ENABLED(CONFIG_PCIEAER))
>>>   		ras_usp_aer_init(xe);
>>>
>>> +	/* Fetch the offline list before queue to avoid duplication */
> How about suspend/resume, do list persist or again ras_init()?

The soft page offlined buffers would retain across suspend resume . So 
do we need to fetch
again from firmware?

The pages stored in flash will be retained.

Riana

>
> Tejas
>>> +	get_offline_list(xe);
>>> +	get_offline_queue(xe);
>>> +
>>>   	ret = devm_device_add_group(xe->drm.dev, &gpu_health_group);
>>>   	if (ret)
>>>   		xe_err(xe, "Failed to create GPU health sysfs, err=%d\n", ret);
>>> diff --git a/drivers/gpu/drm/xe/xe_ras_types.h
>>> b/drivers/gpu/drm/xe/xe_ras_types.h
>>> index 1495a8636255..40224db38906 100644
>>> --- a/drivers/gpu/drm/xe/xe_ras_types.h
>>> +++ b/drivers/gpu/drm/xe/xe_ras_types.h
>>> @@ -10,6 +10,7 @@
>>>
>>>   #define XE_RAS_NUM_COUNTERS			16
>>>   #define XE_RAS_NUM_ERROR_ARR			3
>>> +#define XE_RAS_NUM_PAGES			25
>>>   /* Error bits in IEH global error status register */
>>>   #define XE_RAS_SOC_IEH_PUNIT			BIT(1)
>>>   /* Device memory error categories */
>>> @@ -330,6 +331,40 @@ struct xe_ras_page_offline_response {
>>>   	u32 reserved;
>>>   } __packed;
>>>
>>> +/**
>>> + * struct xe_ras_offline_common - Common structure for offline list
>>> +and queue  */ struct xe_ras_offline_common {
>>> +	/** @total_pages: Total number of queued pages */
>>> +	u32 total_pages;
>>> +	/** @pages_returned: Number of pages returned in this response */
>>> +	u32 pages_returned;
>>> +	/** @page_addresses: Array of page addresses (4KB aligned) */
>>> +	u64 page_addresses[XE_RAS_NUM_PAGES];
>>> +	/** @additional_data: Indicates if more data is available */
>>> +	u8 additional_data;
>>> +	/** @reserved: Reserved for future use */
>>> +	u8 reserved[3];
>>> +} __packed;
>>> +
>>> +/**
>>> + * struct xe_ras_offline_list_request - Request for get offline list
>>> +command  */ struct xe_ras_offline_list_request {
>>> +	/** @index: Zero-based index into the offline page list */
>>> +	u32 index;
>>> +} __packed;
>>> +
>>> +/**
>>> + * struct xe_ras_offline_list_response - Response from get offline
>>> +list command  */ struct xe_ras_offline_list_response {
>>> +	/** @max_entries: Total no of pages that can be stored in flash */
>>> +	u32 max_entries;
>>> +	/** @common: Common offline page information */
>>> +	struct xe_ras_offline_common common; } __packed;
>>> +
>>>   /**
>>>    * struct xe_ras_get_health_request - Request structure for obtaining
>>> gpu health
>>>    */
>>> diff --git a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
>>> b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
>>> index 60d17ccc002c..e1bb64856f43 100644
>>> --- a/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
>>> +++ b/drivers/gpu/drm/xe/xe_sysctrl_mailbox_types.h
>>> @@ -31,6 +31,8 @@ enum xe_sysctrl_group {
>>>    * @XE_SYSCTRL_CMD_SET_THRESHOLD: Set error threshold
>>>    * @XE_SYSCTRL_CMD_GET_PENDING_EVENT: Retrieve pending event
>>>    * @XE_SYSCTRL_CMD_PAGE_OFFLINE: Instruct firmware to offline/remove
>>> a page
>>> + * @XE_SYSCTRL_CMD_GET_OFFLINE_LIST: Retrieve list of all offlined
>>> + pages from flash
>>> + * @XE_SYSCTRL_CMD_GET_OFFLINE_QUEUE: Retrieve list of offlined
>>> queued
>>> + pages from firmware
>>>    * @XE_SYSCTRL_CMD_GET_HEALTH: Retrieve gpu health
>>>    * @XE_SYSCTRL_CMD_SET_HEALTH: Set gpu health
>>>    */
>>> @@ -42,6 +44,8 @@ enum xe_sysctrl_gfsp_cmd {
>>>   	XE_SYSCTRL_CMD_SET_THRESHOLD		= 0x06,
>>>   	XE_SYSCTRL_CMD_GET_PENDING_EVENT	= 0x07,
>>>   	XE_SYSCTRL_CMD_PAGE_OFFLINE		= 0x08,
>>> +	XE_SYSCTRL_CMD_GET_OFFLINE_LIST		= 0x09,
>>> +	XE_SYSCTRL_CMD_GET_OFFLINE_QUEUE	= 0x0A,
>>>   	XE_SYSCTRL_CMD_GET_HEALTH		= 0x0B,
>>>   	XE_SYSCTRL_CMD_SET_HEALTH		= 0x0C,
>>>   };
>>> --
>>> 2.47.1

  reply	other threads:[~2026-10-07  5:06 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-05  9:01 [PATCH v4 0/6] Add support to handle memory double-bit ecc errors Riana Tauro
2026-10-05  9:01 ` [PATCH v4 1/6] drm/xe: Separate drm-ras netlink data from device and firmware RAS state Riana Tauro
2026-10-05 11:02   ` Upadhyay, Tejas
2026-10-05  9:01 ` [PATCH v4 2/6] drm/xe/xe_ras: Handle page offline requests for device memory ecc errors Riana Tauro
2026-10-05  9:16   ` sashiko-bot
2026-10-05 13:28   ` Upadhyay, Tejas
2026-10-05  9:01 ` [PATCH v4 3/6] drm/xe/xe_ras: Add support to query page offline queue and list Riana Tauro
2026-10-05 11:29   ` Upadhyay, Tejas
2026-10-06  3:55     ` Upadhyay, Tejas
2026-10-07  5:06       ` Tauro, Riana [this message]
2026-10-05  9:02 ` [PATCH v4 4/6] drm/xe/xe_ras: Add function to get maximum pages firmware can store Riana Tauro
2026-10-05 11:32   ` Upadhyay, Tejas
2026-10-05  9:02 ` [PATCH v4 5/6] drm/xe/xe_ttm_vram: Report max_pages reported by firmware to userspace Riana Tauro
2026-10-05  9:02 ` [PATCH v4 6/6] drm/xe/xe_ras: Track offlined pages by firmware to avoid duplicates Riana Tauro
2026-10-05 11:38   ` Upadhyay, Tejas
2026-10-05 10:03 ` ✓ CI.KUnit: success for Add support to handle memory double-bit ecc errors (rev4) Patchwork
2026-10-05 10:56 ` ✓ Xe.CI.BAT: " Patchwork
2026-10-05 15:29 ` ✗ Xe.CI.FULL: failure " Patchwork

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=7cf5bba0-5be2-4e5b-a9a6-10abd73d2330@intel.com \
    --to=riana.tauro@intel.com \
    --cc=anshuman.gupta@intel.com \
    --cc=aravind.iddamsetty@linux.intel.com \
    --cc=badal.nilawar@intel.com \
    --cc=himal.prasad.ghimiray@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=mallesh.koujalagi@intel.com \
    --cc=raag.jadav@intel.com \
    --cc=ravi.kishore.koppuravuri@intel.com \
    --cc=rodrigo.vivi@intel.com \
    --cc=tejas.upadhyay@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.