Re: [PATCH v3 18/23] drm/xe: Report 'Survivability Mode' errors using SIGID

"Mallesh, Koujalagi" <[email protected]>
Newsgroups org.freedesktop.lists.intel-xe
Message-ID <[email protected]>
On 07-08-2026 05:44 pm, Michal Wajdeczko wrote:
>
> On 8/7/2026 1:18 PM, Mallesh, Koujalagi wrote:
>> On 30-07-2026 08:51 pm, Michal Wajdeczko wrote:
>>> Report various 'Survivability Mode' errors using xe_log() helpers.
>>>
>>> Signed-off-by: Michal Wajdeczko<[email protected]>
>>> Cc: Rodrigo Vivi<[email protected]>
>>> Cc: Riana Tauro<[email protected]>
>>> Cc: Aravind Iddamsetty<[email protected]>
>>> Cc: Mallesh Koujalagi<[email protected]>
>>> ---
>>>   drivers/gpu/drm/xe/xe_survivability_mode.c | 24 +++++++++++++---------
>>>   1 file changed, 14 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_survivability_mode.c b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> index 4c506027fa94..788b7e8137a9 100644
>>> --- a/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> +++ b/drivers/gpu/drm/xe/xe_survivability_mode.c
>>> @@ -14,9 +14,11 @@
>>>   #include "xe_device.h"
>>>   #include "xe_heci_gsc.h"
>>>   #include "xe_i2c.h"
>>> +#include "xe_log.h"
>>>   #include "xe_mmio.h"
>>>   #include "xe_nvm.h"
>>>   #include "xe_pcode_api.h"
>>> +#include "xe_printk.h"
>>>   #include "xe_vsec.h"
>>>   
>>>   /**
>>> @@ -179,11 +181,11 @@ static void log_survivability_info(struct pci_dev *pdev)
>>>   	u32 *info = survivability->info;
>>>   	int id;
>>>   
>>> -	dev_info(&pdev->dev, "Survivability Boot Status : Critical Failure (%d)\n",
>>> -		 survivability->boot_status);
>>> +	xe_log_info(xe, SURVIVABILITY, "Boot Status : Critical Failure (%d)\n",
>>> +		    survivability->boot_status);
> btw, is it OK that we use INFO level for "critical failure" ?

Good catch! We log the message when the device has a critical boot 
failure and the survivability is too old to handle if (version < 2)

so the driver is about to abort with -ENXIO. Using xe_log_info for that 
situation is wrong one. Using

xe_log_err_fatal(xe, SURVIVABILITY, -ENXIO, ...); we can fix it.

>
>>>   	for (id = 0; id < MAX_SCRATCH_REG; id++) {
>>>   		if (info[id])
>>> -			dev_info(&pdev->dev, "%s: 0x%x\n", reg_map[id], info[id]);
>>> +			xe_log_info(xe, SURVIVABILITY, "%s: 0x%x\n", reg_map[id], info[id]);
>>>   	}
>>>   }
>>>   
>>> @@ -316,7 +318,6 @@ static int create_survivability_sysfs(struct pci_dev *pdev)
>>>   
>>>   static int enable_boot_survivability_mode(struct pci_dev *pdev)
>>>   {
>>> -	struct device *dev = &pdev->dev;
>>>   	struct xe_device *xe = pdev_to_xe_device(pdev);
>>>   	struct xe_survivability *survivability = &xe->survivability;
>>>   	int ret = 0;
>>> @@ -342,12 +343,12 @@ static int enable_boot_survivability_mode(struct pci_dev *pdev)
>>>   	if (ret)
>>>   		goto err;
>>>   
>>> -	dev_err(dev, "In Survivability Mode\n");
>>> -
>>> +	xe_log_emit(pdev, check_boot_failure(xe) ? CPER_SEV_FATAL : CPER_SEV_INFORMATIONAL,
>>> +		    XE_SIGID_SURVIVABILITY, 0, 0, 0, 0, "In Survivability Boot Mode\n");
>> Please make it cleaner and simpler.
> sure
>
> it was one of the earliest examples of the new xe_log API,
> and that's why it was using the base xe_log function
>> if(check_boot_failure(xe))
>>
>>      xe_log_err_fatal(xe, SURVIVABILITY, .. );
>>
>> else
>>
>>       xe_log_info(xe, SURVIVABILITY, .. );
>>
>>
>> OR
>>
>> xe_log_emit(xe_any_to_pdev(xe),
> we do have pdev already, no need to cast back to xe
Agreed!
>
>>              check_boot_failure(xe) ? CPER_SEV_FATAL : CPER_SEV_INFORMATIONAL,
>>              XE_SIGID_SURVIVABILITY, XE_LOG_COMPONENT_SURVIVABILITY,
>>              xe_log_location(xe),
>>              &survivability->boot_status, sizeof(survivability->boot_status),
> cool, but isn't this already printed in log_survivability_info() ?
it's not print both, either it print log_survivability_info() (based on 
condition and return) or enable_boot_survivability_mode.
>
>>              "In Survivability Boot Mode\n");
> btw, as we use SURVIVABILITY component, the dmesg will already
> have "SURVIVABILITY: " decoration, so maybe this msg should be:
>
> 	"Boot mode enabled!\n"
>
> with dmesg:
>
> 	<3> [drm] ERROR SIGID=103 FATAL (04) SURVIVABILITY: Boot mode enabled!
> or
> 	<6> [drm] SIGID=103 SURVIVABILITY: Boot mode enabled!
Agreed!
>
>>>   	return 0;
>>>   
>>>   err:
>>> -	dev_err(dev, "Failed to enable Survivability Mode\n");
>>> +	xe_log_err_fatal(xe, SURVIVABILITY, ret, "Failed to enable Survivability Mode\n");
> and here:
>
> 	"Failed to enter Boot mode!\n"
>
> with dmesg:
>
> 	<3> [drm] ERROR SIGID=103 FATAL (-ENOMEM) SURVIVABILITY: Failed to enter Boot mode!
>
Make sense.
>>>   	survivability->mode = false;
>>>   	return ret;
>>>   }
>>> @@ -412,7 +413,7 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>>>   	struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
>>>   
>>>   	if (!IS_DGFX(xe) || IS_SRIOV_VF(xe) || xe->info.platform < XE_BATTLEMAGE) {
>>> -		dev_err(&pdev->dev, "Runtime Survivability Mode not supported\n");
>>> +		xe_log_info(xe, SURVIVABILITY, "Runtime Mode not supported!\n");
>> We can add xe_log_err(xe, SURVIVABILITY, -EOPNOTSUPP, ...);
> hmm, actually I was wondering if this dev_err() was correct
> maybe it should be just xe_dbg() as we are not doing anything
> related to SURVIVABILITY ?

That function is called in runtime survivability, so debugger will get 
the context easily and figure it out

what cause it.

>
>>>   		return;
>>>   	}
>>>   
>>> @@ -422,11 +423,14 @@ void xe_survivability_mode_runtime_enable(struct xe_device *xe)
>>>   		dev_err(&pdev->dev, "Failed to create survivability sysfs\n");
>> need to use xe_log_err(xe, SURVIVABILITY. -EIO, ... );
>>>   
>>>   	survivability->type = XE_SURVIVABILITY_TYPE_RUNTIME;
>>> -	dev_err(&pdev->dev, "Runtime Survivability mode enabled\n");
>>> +	xe_log_err_fatal(xe, SURVIVABILITY, 0, "Runtime Mode enabled!\n");
>> hmm, Logging error as fatal, however passing err=0 (Success). is it right? or simply we can log as xe_log_err or xe_log_info ? any thoughts.
Already I checked with Arch team, better to provide as xe_log_info 
rather than fatal. Just indicate to user it's Runtime survivability mode 
in such case.
> passing 0 instead of errno to xe_log_err() helpers will just omit
> printing anything in ( ), no %pe nor %phN
>
> whether this should be info/fatal/recoverable it's not me to answer
> your initial documentation [1] was saying that all XE_SIG_SURVIVABILITY
> should have CPER_SEV_FATAL
>
> [1]https://patchwork.freedesktop.org/patch/732271/?series=168333&rev=1
>
>>>   
>>>   	xe_device_set_wedged_method(xe, DRM_WEDGE_RECOVERY_VENDOR);
>>>   	xe_device_declare_wedged(xe);
>>> -	dev_err(&pdev->dev, "Firmware flash required, Please refer to the userspace documentation for more details!\n");
>>> +
>>> +	xe_log_err_fatal(xe, SURVIVABILITY, 0, "Firmware flash required!\n");
>> ditto
> ditto ;)
ditto ;)
>>> +	xe_info(xe, "Please refer to the userspace documentation for more details how to flash the firmware on %s!\n",
>>> +		xe->info.platform_name);
>>>   }
>>>   
>>>   /**
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.