* [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 21:31 ` Michal Wajdeczko
2024-09-12 19:15 ` [PATCH v2 02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask Himal Prasad Ghimiray
` (29 subsequent siblings)
30 siblings, 1 reply; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Badal Nilawar, Rodrigo Vivi,
Lucas De Marchi, Nirmoy Das
If an acknowledgment timeout occurs for a domain awake request, do not
increment the reference count for the domain. This ensures that
subsequent _get calls do not incorrectly assume the domain is awake. The
return value is a mask of domains whose reference counts were
incremented, and these domains need to be released using
xe_force_wake_put.
The caller needs to compare the return value with the input domains to
determine the success or failure of the operation and decide whether to
continue or return accordingly.
While at it, add simple kernel-doc for xe_force_wake_get()
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_force_wake.c | 35 +++++++++++++++++++++++++-----
1 file changed, 29 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
index a64c14757c84..fa42d652d23f 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.c
+++ b/drivers/gpu/drm/xe/xe_force_wake.c
@@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
(ffs(tmp__) - 1))) && \
domain__->reg_ctl.addr)
+/**
+ * xe_force_wake_get : Increase the domain refcount; if it was 0 initially, wake the domain
+ * @fw: struct xe_force_wake
+ * @domains: forcewake domains to get refcount on
+ *
+ * Increment refcount for the force-wake domain. If the domain is
+ * asleep, awaken it and wait for acknowledgment within the specified
+ * timeout. If a timeout occurs, decrement the refcount.
+ * The caller should compare the return value with the @domains to
+ * determine the success or failure of the operation.
+ *
+ * Return: mask of refcount increased domains. If the return value is
+ * equal to the input parameter @domains, the operation is considered
+ * successful. Otherwise, the operation is considered a failure, and
+ * the caller should handle the failure case, potentially returning
+ * -ETIMEDOUT.
+ */
int xe_force_wake_get(struct xe_force_wake *fw,
enum xe_force_wake_domains domains)
{
struct xe_gt *gt = fw->gt;
struct xe_force_wake_domain *domain;
- enum xe_force_wake_domains tmp, woken = 0;
+ enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
unsigned long flags;
- int ret = 0;
+ int ret = domains;
spin_lock_irqsave(&fw->lock, flags);
for_each_fw_domain_masked(domain, domains, fw, tmp) {
if (!domain->ref++) {
- woken |= BIT(domain->id);
+ awake_rqst |= BIT(domain->id);
domain_wake(gt, domain);
}
}
- for_each_fw_domain_masked(domain, woken, fw, tmp) {
- ret |= domain_wake_wait(gt, domain);
+ for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
+ if (domain_wake_wait(gt, domain) == 0) {
+ awake_ack |= BIT(domain->id);
+ } else {
+ ret &= ~BIT(domain->id);
+ --domain->ref;
+ }
}
- fw->awake_domains |= woken;
+
+ fw->awake_domains |= awake_ack;
spin_unlock_irqrestore(&fw->lock, flags);
return ret;
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-12 19:15 ` [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get() Himal Prasad Ghimiray
@ 2024-09-12 21:31 ` Michal Wajdeczko
2024-09-13 3:59 ` Ghimiray, Himal Prasad
0 siblings, 1 reply; 58+ messages in thread
From: Michal Wajdeczko @ 2024-09-12 21:31 UTC (permalink / raw)
To: Himal Prasad Ghimiray, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
> If an acknowledgment timeout occurs for a domain awake request, do not
> increment the reference count for the domain. This ensures that
> subsequent _get calls do not incorrectly assume the domain is awake. The
> return value is a mask of domains whose reference counts were
> incremented, and these domains need to be released using
> xe_force_wake_put.
>
> The caller needs to compare the return value with the input domains to
> determine the success or failure of the operation and decide whether to
> continue or return accordingly.
>
> While at it, add simple kernel-doc for xe_force_wake_get()
>
> Cc: Badal Nilawar <badal.nilawar@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Nirmoy Das <nirmoy.das@intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> ---
> drivers/gpu/drm/xe/xe_force_wake.c | 35 +++++++++++++++++++++++++-----
> 1 file changed, 29 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
> index a64c14757c84..fa42d652d23f 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.c
> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
> (ffs(tmp__) - 1))) && \
> domain__->reg_ctl.addr)
>
> +/**
> + * xe_force_wake_get : Increase the domain refcount; if it was 0 initially, wake the domain
while likely this is still recognized by the kernel-doc tool, this is
not correct notation for the function() documentation
[1] https://docs.kernel.org/doc-guide/kernel-doc.html#function-documentation
> + * @fw: struct xe_force_wake
> + * @domains: forcewake domains to get refcount on
> + *
> + * Increment refcount for the force-wake domain. If the domain is
> + * asleep, awaken it and wait for acknowledgment within the specified
> + * timeout. If a timeout occurs, decrement the refcount.
not sure if doc shall be 1:1 of low level implementation details
> + * The caller should compare the return value with the @domains to
> + * determine the success or failure of the operation.
> + *
> + * Return: mask of refcount increased domains.
if we return a 'mask' then maybe it should be of 'unsigned int' type?
> If the return value is
> + * equal to the input parameter @domains, the operation is considered
> + * successful. Otherwise, the operation is considered a failure, and
> + * the caller should handle the failure case, potentially returning
> + * -ETIMEDOUT.
it looks that all problems with the nice API is due to the
XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
maybe there should be different pair of functions:
// for single domain where ret=0 is success, ret<0 is error
int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
and
// for all domain where ret=0 is success, ret<0 is error
int int xe_force_wake_get_all(fw);
void xe_force_wake_put_all(fw);
and
// input: mask of domains, return: mask of domain
unsigned int xe_force_wake_get_mask(fw, mask);
void xe_force_wake_put_mask(fw, mask);
this last one can be just main implementation (static or public if we
really want to continue with random set of enabled domains)
> + */
> int xe_force_wake_get(struct xe_force_wake *fw,
> enum xe_force_wake_domains domains)
> {
> struct xe_gt *gt = fw->gt;
> struct xe_force_wake_domain *domain;
> - enum xe_force_wake_domains tmp, woken = 0;
> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
it looks that you're abusing even more all enum variables by treating
them as plain integers
> unsigned long flags;
> - int ret = 0;
> + int ret = domains;
>
> spin_lock_irqsave(&fw->lock, flags);
> for_each_fw_domain_masked(domain, domains, fw, tmp) {
> if (!domain->ref++) {
> - woken |= BIT(domain->id);
> + awake_rqst |= BIT(domain->id);
> domain_wake(gt, domain);
> }
> }
> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
> - ret |= domain_wake_wait(gt, domain);
> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
> + if (domain_wake_wait(gt, domain) == 0) {
> + awake_ack |= BIT(domain->id);
> + } else {
> + ret &= ~BIT(domain->id);
> + --domain->ref;
> + }
> }
> - fw->awake_domains |= woken;
> +
> + fw->awake_domains |= awake_ack;
> spin_unlock_irqrestore(&fw->lock, flags);
>
> return ret;
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-12 21:31 ` Michal Wajdeczko
@ 2024-09-13 3:59 ` Ghimiray, Himal Prasad
2024-09-13 11:26 ` Michal Wajdeczko
0 siblings, 1 reply; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-13 3:59 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 03:01, Michal Wajdeczko wrote:
>
>
> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>> If an acknowledgment timeout occurs for a domain awake request, do not
>> increment the reference count for the domain. This ensures that
>> subsequent _get calls do not incorrectly assume the domain is awake. The
>> return value is a mask of domains whose reference counts were
>> incremented, and these domains need to be released using
>> xe_force_wake_put.
>>
>> The caller needs to compare the return value with the input domains to
>> determine the success or failure of the operation and decide whether to
>> continue or return accordingly.
>>
>> While at it, add simple kernel-doc for xe_force_wake_get()
>>
>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_force_wake.c | 35 +++++++++++++++++++++++++-----
>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
>> index a64c14757c84..fa42d652d23f 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>> (ffs(tmp__) - 1))) && \
>> domain__->reg_ctl.addr)
>>
>> +/**
>> + * xe_force_wake_get : Increase the domain refcount; if it was 0 initially, wake the domain
>
> while likely this is still recognized by the kernel-doc tool, this is
> not correct notation for the function() documentation
I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
will fix it.
>
> [1] https://docs.kernel.org/doc-guide/kernel-doc.html#function-documentation
>
>> + * @fw: struct xe_force_wake
>> + * @domains: forcewake domains to get refcount on
>> + *
>> + * Increment refcount for the force-wake domain. If the domain is
>> + * asleep, awaken it and wait for acknowledgment within the specified
>> + * timeout. If a timeout occurs, decrement the refcount.
>
> not sure if doc shall be 1:1 of low level implementation details
Does this sound okay ?
This function takes references for the input @domains and wakes them if
they are asleep.
>
>> + * The caller should compare the return value with the @domains to
>> + * determine the success or failure of the operation.
>> + *
>> + * Return: mask of refcount increased domains.
>
> if we return a 'mask' then maybe it should be of 'unsigned int' type?
Agreed. Will fix in next version.
>
>> If the return value is
>> + * equal to the input parameter @domains, the operation is considered
>> + * successful. Otherwise, the operation is considered a failure, and
>> + * the caller should handle the failure case, potentially returning
>> + * -ETIMEDOUT.
>
> it looks that all problems with the nice API is due to the
> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>
> maybe there should be different pair of functions:
I am not convinced with different pair of functions:
In current implementation:
int mask = xe_force_wake_get(fw, domains)
if (mask != domains) {
Non critical path continue with warning;
or
critical path:
xe_force_wake_put(fw, mask);
return -ETIMEDOUT;
}
do_ops;
xe_force_wake_put(fw, mask);
return err;
Above flow remains intact irrespective of individual domains or
FORCEWAKE_ALL.
In case of individual domains if (mask != domains) can be replaced with
(!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
since mask is 0;
>
> // for single domain where ret=0 is success, ret<0 is error
This leads to caller only calling xe_force_wake_put incase of get
success. so in case of caller continuing with failure, he will need to
ensure the put is not called.
for example:
int ret;
ret = xe_force_wake_get(fw, DOMAIN_GT);
XE_WARN_ON(ret)
if(!ret)
xe_force_wake_put(fw, DOMAIN_GT);
> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>
> and
>
> // for all domain where ret=0 is success, ret<0 is error
> int int xe_force_wake_get_all(fw);
> void xe_force_wake_put_all(fw);
In case of xe_force_wake_get_all(fw) failure, how the caller will know
which domains got awake and which failed ?
ret = xe_force_wake_get_all(fw);
if(!ret)
No way to put awake domains to sleep
>
> and
>
> // input: mask of domains, return: mask of domain
> unsigned int xe_force_wake_get_mask(fw, mask);
> void xe_force_wake_put_mask(fw, mask);
>
> this last one can be just main implementation (static or public if we
> really want to continue with random set of enabled domains)
>
>> + */
>> int xe_force_wake_get(struct xe_force_wake *fw,
>> enum xe_force_wake_domains domains)
>> {
>> struct xe_gt *gt = fw->gt;
>> struct xe_force_wake_domain *domain;
>> - enum xe_force_wake_domains tmp, woken = 0;
>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>
> it looks that you're abusing even more all enum variables by treating
> them as plain integers
Miss at my end. Will address them in next version.
>
>> unsigned long flags;
>> - int ret = 0;
>> + int ret = domains;
>>
>> spin_lock_irqsave(&fw->lock, flags);
>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>> if (!domain->ref++) {
>> - woken |= BIT(domain->id);
>> + awake_rqst |= BIT(domain->id);
>> domain_wake(gt, domain);
>> }
>> }
>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>> - ret |= domain_wake_wait(gt, domain);
>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>> + if (domain_wake_wait(gt, domain) == 0) {
>> + awake_ack |= BIT(domain->id);
>> + } else {
>> + ret &= ~BIT(domain->id);
>> + --domain->ref;
>> + }
>> }
>> - fw->awake_domains |= woken;
>> +
>> + fw->awake_domains |= awake_ack;
>> spin_unlock_irqrestore(&fw->lock, flags);
>>
>> return ret;
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-13 3:59 ` Ghimiray, Himal Prasad
@ 2024-09-13 11:26 ` Michal Wajdeczko
2024-09-13 13:17 ` Ghimiray, Himal Prasad
0 siblings, 1 reply; 58+ messages in thread
From: Michal Wajdeczko @ 2024-09-13 11:26 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
>
>
> On 13-09-2024 03:01, Michal Wajdeczko wrote:
>>
>>
>> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>>> If an acknowledgment timeout occurs for a domain awake request, do not
>>> increment the reference count for the domain. This ensures that
>>> subsequent _get calls do not incorrectly assume the domain is awake. The
>>> return value is a mask of domains whose reference counts were
>>> incremented, and these domains need to be released using
>>> xe_force_wake_put.
>>>
>>> The caller needs to compare the return value with the input domains to
>>> determine the success or failure of the operation and decide whether to
>>> continue or return accordingly.
>>>
>>> While at it, add simple kernel-doc for xe_force_wake_get()
>>>
>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_force_wake.c | 35 +++++++++++++++++++++++++-----
>>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>>> b/drivers/gpu/drm/xe/xe_force_wake.c
>>> index a64c14757c84..fa42d652d23f 100644
>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>>> (ffs(tmp__) - 1))) && \
>>> domain__->reg_ctl.addr)
>>> +/**
>>> + * xe_force_wake_get : Increase the domain refcount; if it was 0
>>> initially, wake the domain
>>
>> while likely this is still recognized by the kernel-doc tool, this is
>> not correct notation for the function() documentation
>
>
> I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
> will fix it.
>
>
>>
>> [1]
>> https://docs.kernel.org/doc-guide/kernel-doc.html#function-documentation
>>
>>> + * @fw: struct xe_force_wake
>>> + * @domains: forcewake domains to get refcount on
>>> + *
>>> + * Increment refcount for the force-wake domain. If the domain is
>>> + * asleep, awaken it and wait for acknowledgment within the specified
>>> + * timeout. If a timeout occurs, decrement the refcount.
>>
>> not sure if doc shall be 1:1 of low level implementation details
>
> Does this sound okay ?
> This function takes references for the input @domains and wakes them if
> they are asleep.
>
>>
>>> + * The caller should compare the return value with the @domains to
>>> + * determine the success or failure of the operation.
>>> + *
>>> + * Return: mask of refcount increased domains.
>>
>> if we return a 'mask' then maybe it should be of 'unsigned int' type?
>
> Agreed. Will fix in next version.
>
>>
>>> If the return value is
>>> + * equal to the input parameter @domains, the operation is considered
>>> + * successful. Otherwise, the operation is considered a failure, and
>>> + * the caller should handle the failure case, potentially returning
>>> + * -ETIMEDOUT.
>>
>> it looks that all problems with the nice API is due to the
>> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>>
>> maybe there should be different pair of functions:
>
> I am not convinced with different pair of functions:
>
> In current implementation:
>
> int mask = xe_force_wake_get(fw, domains)
> if (mask != domains) {
> Non critical path continue with warning;
> or
> critical path:
> xe_force_wake_put(fw, mask);
> return -ETIMEDOUT;
> }
>
> do_ops;
> xe_force_wake_put(fw, mask);
> return err;
>
> Above flow remains intact irrespective of individual domains or
> FORCEWAKE_ALL.
>
> In case of individual domains if (mask != domains) can be replaced with
> (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
> since mask is 0;
so maybe we should have (by reinventing i915?):
// opaque, but zero means failure/no domains are awake
typedef unsigned long xe_wakeref_t;
// caller should test for ref != 0
// but shall call put if ref != 0
xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
// safe to call with ref == 0
void xe_force_wake_put(fw, xe_wakeref_t ref)
// helpers for critical work that must be sure about domain
// compares opaque ref with explicit domain != ALL
// can be used by the code that obtained the ref
bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
// compares fw with explicit domain != ALL
// can be used by the code that does not have direct access to the ref
bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
// helpers for checking correctness
void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
then usage would be:
xe_wakeref_t ref;
ref = xe_force_wake_get(fw, d);
if (ref) {
// ...
xe_force_wake_put(fw, ref);
}
or:
xe_wakeref_t ref;
ref = xe_force_wake_get(fw, ALL);
if (xe_wakeref_has_domain(ref, d1))
// ... critical work1
if (xe_wakeref_has_domain(ref, d2))
// ... critical work2
xe_force_wake_put(fw, ref);
so above will be very similar to what you have but by having explicit
types IMO it will help connect all functions into proper use-case flow
>
>
>>
>> // for single domain where ret=0 is success, ret<0 is error
>
> This leads to caller only calling xe_force_wake_put incase of get
> success. so in case of caller continuing with failure, he will need to
> ensure the put is not called.
>
> for example:
> int ret;
>
> ret = xe_force_wake_get(fw, DOMAIN_GT);
> XE_WARN_ON(ret)
> if(!ret)
> xe_force_wake_put(fw, DOMAIN_GT);
>
>> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
>> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>>
>> and
>>
>> // for all domain where ret=0 is success, ret<0 is error
>> int int xe_force_wake_get_all(fw);
>> void xe_force_wake_put_all(fw);
>
> In case of xe_force_wake_get_all(fw) failure, how the caller will know
> which domains got awake and which failed ?
>
> ret = xe_force_wake_get_all(fw);
> if(!ret)
> No way to put awake domains to sleep
in case of failure, it would be the responsibility of the
xe_force_wake_get_all() to put all partial awakes immediately, since it
failed to awake all requested domains (same as in single domain case)
but let's drop this idea
>
>>
>> and
>>
>> // input: mask of domains, return: mask of domain
>> unsigned int xe_force_wake_get_mask(fw, mask);
>> void xe_force_wake_put_mask(fw, mask);
>>
>> this last one can be just main implementation (static or public if we
>> really want to continue with random set of enabled domains)
>>
>>> + */
>>> int xe_force_wake_get(struct xe_force_wake *fw,
>>> enum xe_force_wake_domains domains)
>>> {
>>> struct xe_gt *gt = fw->gt;
>>> struct xe_force_wake_domain *domain;
>>> - enum xe_force_wake_domains tmp, woken = 0;
>>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>>
>> it looks that you're abusing even more all enum variables by treating
>> them as plain integers
>
> Miss at my end. Will address them in next version.
>
>>
>>> unsigned long flags;
>>> - int ret = 0;
>>> + int ret = domains;
>>> spin_lock_irqsave(&fw->lock, flags);
>>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>>> if (!domain->ref++) {
>>> - woken |= BIT(domain->id);
>>> + awake_rqst |= BIT(domain->id);
>>> domain_wake(gt, domain);
>>> }
>>> }
>>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>>> - ret |= domain_wake_wait(gt, domain);
>>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>>> + if (domain_wake_wait(gt, domain) == 0) {
>>> + awake_ack |= BIT(domain->id);
>>> + } else {
>>> + ret &= ~BIT(domain->id);
>>> + --domain->ref;
>>> + }
>>> }
>>> - fw->awake_domains |= woken;
>>> +
>>> + fw->awake_domains |= awake_ack;
>>> spin_unlock_irqrestore(&fw->lock, flags);
>>> return ret;
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-13 11:26 ` Michal Wajdeczko
@ 2024-09-13 13:17 ` Ghimiray, Himal Prasad
2024-09-17 5:48 ` Nilawar, Badal
0 siblings, 1 reply; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-13 13:17 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 16:56, Michal Wajdeczko wrote:
>
>
> On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
>>
>>
>> On 13-09-2024 03:01, Michal Wajdeczko wrote:
>>>
>>>
>>> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>>>> If an acknowledgment timeout occurs for a domain awake request, do not
>>>> increment the reference count for the domain. This ensures that
>>>> subsequent _get calls do not incorrectly assume the domain is awake. The
>>>> return value is a mask of domains whose reference counts were
>>>> incremented, and these domains need to be released using
>>>> xe_force_wake_put.
>>>>
>>>> The caller needs to compare the return value with the input domains to
>>>> determine the success or failure of the operation and decide whether to
>>>> continue or return accordingly.
>>>>
>>>> While at it, add simple kernel-doc for xe_force_wake_get()
>>>>
>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>> ---
>>>> drivers/gpu/drm/xe/xe_force_wake.c | 35 +++++++++++++++++++++++++-----
>>>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>>>> b/drivers/gpu/drm/xe/xe_force_wake.c
>>>> index a64c14757c84..fa42d652d23f 100644
>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>>>> (ffs(tmp__) - 1))) && \
>>>> domain__->reg_ctl.addr)
>>>> +/**
>>>> + * xe_force_wake_get : Increase the domain refcount; if it was 0
>>>> initially, wake the domain
>>>
>>> while likely this is still recognized by the kernel-doc tool, this is
>>> not correct notation for the function() documentation
>>
>>
>> I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
>> will fix it.
>>
>>
>>>
>>> [1]
>>> https://docs.kernel.org/doc-guide/kernel-doc.html#function-documentation
>>>
>>>> + * @fw: struct xe_force_wake
>>>> + * @domains: forcewake domains to get refcount on
>>>> + *
>>>> + * Increment refcount for the force-wake domain. If the domain is
>>>> + * asleep, awaken it and wait for acknowledgment within the specified
>>>> + * timeout. If a timeout occurs, decrement the refcount.
>>>
>>> not sure if doc shall be 1:1 of low level implementation details
>>
>> Does this sound okay ?
>> This function takes references for the input @domains and wakes them if
>> they are asleep.
>>
>>>
>>>> + * The caller should compare the return value with the @domains to
>>>> + * determine the success or failure of the operation.
>>>> + *
>>>> + * Return: mask of refcount increased domains.
>>>
>>> if we return a 'mask' then maybe it should be of 'unsigned int' type?
>>
>> Agreed. Will fix in next version.
>>
>>>
>>>> If the return value is
>>>> + * equal to the input parameter @domains, the operation is considered
>>>> + * successful. Otherwise, the operation is considered a failure, and
>>>> + * the caller should handle the failure case, potentially returning
>>>> + * -ETIMEDOUT.
>>>
>>> it looks that all problems with the nice API is due to the
>>> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>>>
>>> maybe there should be different pair of functions:
>>
>> I am not convinced with different pair of functions:
>>
>> In current implementation:
>>
>> int mask = xe_force_wake_get(fw, domains)
>> if (mask != domains) {
>> Non critical path continue with warning;
>> or
>> critical path:
>> xe_force_wake_put(fw, mask);
>> return -ETIMEDOUT;
>> }
>>
>> do_ops;
>> xe_force_wake_put(fw, mask);
>> return err;
>>
>> Above flow remains intact irrespective of individual domains or
>> FORCEWAKE_ALL.
>>
>> In case of individual domains if (mask != domains) can be replaced with
>> (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
>> since mask is 0;
>
> so maybe we should have (by reinventing i915?):
>
> // opaque, but zero means failure/no domains are awake
> typedef unsigned long xe_wakeref_t;
>
>
> // caller should test for ref != 0
> // but shall call put if ref != 0
> xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
>
> // safe to call with ref == 0
> void xe_force_wake_put(fw, xe_wakeref_t ref)
>
>
> // helpers for critical work that must be sure about domain
>
> // compares opaque ref with explicit domain != ALL
> // can be used by the code that obtained the ref
> bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
>
> // compares fw with explicit domain != ALL
> // can be used by the code that does not have direct access to the ref
> bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
>
>
> // helpers for checking correctness
> void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
>
>
> then usage would be:
>
> xe_wakeref_t ref;
>
> ref = xe_force_wake_get(fw, d);
> if (ref) {
> // ...
> xe_force_wake_put(fw, ref);
> }
>
> or:
>
> xe_wakeref_t ref;
>
> ref = xe_force_wake_get(fw, ALL);
> if (xe_wakeref_has_domain(ref, d1))
> // ... critical work1
> if (xe_wakeref_has_domain(ref, d2))
> // ... critical work2
> xe_force_wake_put(fw, ref);
>
>
> so above will be very similar to what you have but by having explicit
> types IMO it will help connect all functions into proper use-case flow
Agreed implementation/usage will be same, will use explicit type for
clarity.
IMO typedef unsigned int xe_wakeref_t is sufficient instead of
typedef unsigned long xe_wakeref_t;
>
>>
>>
>>>
>>> // for single domain where ret=0 is success, ret<0 is error
>>
>> This leads to caller only calling xe_force_wake_put incase of get
>> success. so in case of caller continuing with failure, he will need to
>> ensure the put is not called.
>>
>> for example:
>> int ret;
>>
>> ret = xe_force_wake_get(fw, DOMAIN_GT);
>> XE_WARN_ON(ret)
>> if(!ret)
>> xe_force_wake_put(fw, DOMAIN_GT);
>>
>>> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
>>> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>>>
>>> and
>>>
>>> // for all domain where ret=0 is success, ret<0 is error
>>> int int xe_force_wake_get_all(fw);
>>> void xe_force_wake_put_all(fw);
>>
>> In case of xe_force_wake_get_all(fw) failure, how the caller will know
>> which domains got awake and which failed ?
>>
>> ret = xe_force_wake_get_all(fw);
>> if(!ret)
>> No way to put awake domains to sleep
>
> in case of failure, it would be the responsibility of the
> xe_force_wake_get_all() to put all partial awakes immediately, since it
> failed to awake all requested domains (same as in single domain case)
>
> but let's drop this idea
>
>>
>>>
>>> and
>>>
>>> // input: mask of domains, return: mask of domain
>>> unsigned int xe_force_wake_get_mask(fw, mask);
>>> void xe_force_wake_put_mask(fw, mask);
>>>
>>> this last one can be just main implementation (static or public if we
>>> really want to continue with random set of enabled domains)
>>>
>>>> + */
>>>> int xe_force_wake_get(struct xe_force_wake *fw,
>>>> enum xe_force_wake_domains domains)
>>>> {
>>>> struct xe_gt *gt = fw->gt;
>>>> struct xe_force_wake_domain *domain;
>>>> - enum xe_force_wake_domains tmp, woken = 0;
>>>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>>>
>>> it looks that you're abusing even more all enum variables by treating
>>> them as plain integers
>>
>> Miss at my end. Will address them in next version.
>>
>>>
>>>> unsigned long flags;
>>>> - int ret = 0;
>>>> + int ret = domains;
>>>> spin_lock_irqsave(&fw->lock, flags);
>>>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>>>> if (!domain->ref++) {
>>>> - woken |= BIT(domain->id);
>>>> + awake_rqst |= BIT(domain->id);
>>>> domain_wake(gt, domain);
>>>> }
>>>> }
>>>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>>>> - ret |= domain_wake_wait(gt, domain);
>>>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>>>> + if (domain_wake_wait(gt, domain) == 0) {
>>>> + awake_ack |= BIT(domain->id);
>>>> + } else {
>>>> + ret &= ~BIT(domain->id);
>>>> + --domain->ref;
>>>> + }
>>>> }
>>>> - fw->awake_domains |= woken;
>>>> +
>>>> + fw->awake_domains |= awake_ack;
>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>> return ret;
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-13 13:17 ` Ghimiray, Himal Prasad
@ 2024-09-17 5:48 ` Nilawar, Badal
2024-09-17 18:50 ` Matthew Brost
0 siblings, 1 reply; 58+ messages in thread
From: Nilawar, Badal @ 2024-09-17 5:48 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, Michal Wajdeczko, intel-xe
Cc: Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>
>
> On 13-09-2024 16:56, Michal Wajdeczko wrote:
>>
>>
>> On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
>>>
>>>
>>> On 13-09-2024 03:01, Michal Wajdeczko wrote:
>>>>
>>>>
>>>> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>>>>> If an acknowledgment timeout occurs for a domain awake request, do not
>>>>> increment the reference count for the domain. This ensures that
>>>>> subsequent _get calls do not incorrectly assume the domain is
>>>>> awake. The
>>>>> return value is a mask of domains whose reference counts were
>>>>> incremented, and these domains need to be released using
>>>>> xe_force_wake_put.
>>>>>
>>>>> The caller needs to compare the return value with the input domains to
>>>>> determine the success or failure of the operation and decide
>>>>> whether to
>>>>> continue or return accordingly.
>>>>>
>>>>> While at it, add simple kernel-doc for xe_force_wake_get()
>>>>>
>>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>>> ---
>>>>> drivers/gpu/drm/xe/xe_force_wake.c | 35 ++++++++++++++++++++++++
>>>>> +-----
>>>>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>> b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>> index a64c14757c84..fa42d652d23f 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>>>>> (ffs(tmp__) - 1))) && \
>>>>> domain__->reg_ctl.addr)
>>>>> +/**
>>>>> + * xe_force_wake_get : Increase the domain refcount; if it was 0
>>>>> initially, wake the domain
>>>>
>>>> while likely this is still recognized by the kernel-doc tool, this is
>>>> not correct notation for the function() documentation
>>>
>>>
>>> I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
>>> will fix it.
>>>
>>>
>>>>
>>>> [1]
>>>> https://docs.kernel.org/doc-guide/kernel-doc.html#function-
>>>> documentation
>>>>
>>>>> + * @fw: struct xe_force_wake
>>>>> + * @domains: forcewake domains to get refcount on
>>>>> + *
>>>>> + * Increment refcount for the force-wake domain. If the domain is
>>>>> + * asleep, awaken it and wait for acknowledgment within the specified
>>>>> + * timeout. If a timeout occurs, decrement the refcount.
>>>>
>>>> not sure if doc shall be 1:1 of low level implementation details
>>>
>>> Does this sound okay ?
>>> This function takes references for the input @domains and wakes them if
>>> they are asleep.
>>>
>>>>
>>>>> + * The caller should compare the return value with the @domains to
>>>>> + * determine the success or failure of the operation.
>>>>> + *
>>>>> + * Return: mask of refcount increased domains.
>>>>
>>>> if we return a 'mask' then maybe it should be of 'unsigned int' type?
>>>
>>> Agreed. Will fix in next version.
>>>
>>>>
>>>>> If the return value is
>>>>> + * equal to the input parameter @domains, the operation is considered
>>>>> + * successful. Otherwise, the operation is considered a failure, and
>>>>> + * the caller should handle the failure case, potentially returning
>>>>> + * -ETIMEDOUT.
>>>>
>>>> it looks that all problems with the nice API is due to the
>>>> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>>>>
>>>> maybe there should be different pair of functions:
>>>
>>> I am not convinced with different pair of functions:
>>>
>>> In current implementation:
>>>
>>> int mask = xe_force_wake_get(fw, domains)
>>> if (mask != domains) {
>>> Non critical path continue with warning;
>>> or
>>> critical path:
>>> xe_force_wake_put(fw, mask);
>>> return -ETIMEDOUT;
>>> }
>>>
>>> do_ops;
>>> xe_force_wake_put(fw, mask);
>>> return err;
>>>
>>> Above flow remains intact irrespective of individual domains or
>>> FORCEWAKE_ALL.
>>>
>>> In case of individual domains if (mask != domains) can be replaced with
>>> (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
>>> since mask is 0;
>>
>> so maybe we should have (by reinventing i915?):
>>
>> // opaque, but zero means failure/no domains are awake
>> typedef unsigned long xe_wakeref_t;
>>
>>
>> // caller should test for ref != 0
>> // but shall call put if ref != 0
>> xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
>>
>> // safe to call with ref == 0
>> void xe_force_wake_put(fw, xe_wakeref_t ref)
>>
>>
>> // helpers for critical work that must be sure about domain
>>
>> // compares opaque ref with explicit domain != ALL
>> // can be used by the code that obtained the ref
>> bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
>>
>> // compares fw with explicit domain != ALL
>> // can be used by the code that does not have direct access to the ref
>> bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
>>
>>
>> // helpers for checking correctness
>> void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
>>
>>
>> then usage would be:
>>
>> xe_wakeref_t ref;
>>
>> ref = xe_force_wake_get(fw, d);
>> if (ref) {
>> // ...
>> xe_force_wake_put(fw, ref);
>> }
>>
>> or:
>>
>> xe_wakeref_t ref;
>>
>> ref = xe_force_wake_get(fw, ALL);
>> if (xe_wakeref_has_domain(ref, d1))
>> // ... critical work1
>> if (xe_wakeref_has_domain(ref, d2))
>> // ... critical work2
>> xe_force_wake_put(fw, ref);
>>
>>
>> so above will be very similar to what you have but by having explicit
>> types IMO it will help connect all functions into proper use-case flow
>
>
> Agreed implementation/usage will be same, will use explicit type for
> clarity.
> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
> typedef unsigned long xe_wakeref_t;
I agree with this.
Regards,
Badal
>
>
>>
>>>
>>>
>>>>
>>>> // for single domain where ret=0 is success, ret<0 is error
>>>
>>> This leads to caller only calling xe_force_wake_put incase of get
>>> success. so in case of caller continuing with failure, he will need to
>>> ensure the put is not called.
>>>
>>> for example:
>>> int ret;
>>>
>>> ret = xe_force_wake_get(fw, DOMAIN_GT);
>>> XE_WARN_ON(ret)
>>> if(!ret)
>>> xe_force_wake_put(fw, DOMAIN_GT);
>>>
>>>> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
>>>> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>>>>
>>>> and
>>>>
>>>> // for all domain where ret=0 is success, ret<0 is error
>>>> int int xe_force_wake_get_all(fw);
>>>> void xe_force_wake_put_all(fw);
>>>
>>> In case of xe_force_wake_get_all(fw) failure, how the caller will know
>>> which domains got awake and which failed ?
>>>
>>> ret = xe_force_wake_get_all(fw);
>>> if(!ret)
>>> No way to put awake domains to sleep
>>
>> in case of failure, it would be the responsibility of the
>> xe_force_wake_get_all() to put all partial awakes immediately, since it
>> failed to awake all requested domains (same as in single domain case)
>>
>> but let's drop this idea
>>
>>>
>>>>
>>>> and
>>>>
>>>> // input: mask of domains, return: mask of domain
>>>> unsigned int xe_force_wake_get_mask(fw, mask);
>>>> void xe_force_wake_put_mask(fw, mask);
>>>>
>>>> this last one can be just main implementation (static or public if we
>>>> really want to continue with random set of enabled domains)
>>>>
>>>>> + */
>>>>> int xe_force_wake_get(struct xe_force_wake *fw,
>>>>> enum xe_force_wake_domains domains)
>>>>> {
>>>>> struct xe_gt *gt = fw->gt;
>>>>> struct xe_force_wake_domain *domain;
>>>>> - enum xe_force_wake_domains tmp, woken = 0;
>>>>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>>>>
>>>> it looks that you're abusing even more all enum variables by treating
>>>> them as plain integers
>>>
>>> Miss at my end. Will address them in next version.
>>>
>>>>
>>>>> unsigned long flags;
>>>>> - int ret = 0;
>>>>> + int ret = domains;
>>>>> spin_lock_irqsave(&fw->lock, flags);
>>>>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>>>>> if (!domain->ref++) {
>>>>> - woken |= BIT(domain->id);
>>>>> + awake_rqst |= BIT(domain->id);
>>>>> domain_wake(gt, domain);
>>>>> }
>>>>> }
>>>>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>>>>> - ret |= domain_wake_wait(gt, domain);
>>>>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>>>>> + if (domain_wake_wait(gt, domain) == 0) {
>>>>> + awake_ack |= BIT(domain->id);
>>>>> + } else {
>>>>> + ret &= ~BIT(domain->id);
>>>>> + --domain->ref;
>>>>> + }
>>>>> }
>>>>> - fw->awake_domains |= woken;
>>>>> +
>>>>> + fw->awake_domains |= awake_ack;
>>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>>> return ret;
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-17 5:48 ` Nilawar, Badal
@ 2024-09-17 18:50 ` Matthew Brost
2024-09-18 6:32 ` Ghimiray, Himal Prasad
0 siblings, 1 reply; 58+ messages in thread
From: Matthew Brost @ 2024-09-17 18:50 UTC (permalink / raw)
To: Nilawar, Badal
Cc: Ghimiray, Himal Prasad, Michal Wajdeczko, intel-xe, Rodrigo Vivi,
Lucas De Marchi, Nirmoy Das
On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>
>
> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
> >
> >
> > On 13-09-2024 16:56, Michal Wajdeczko wrote:
> > >
> > >
> > > On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
> > > >
> > > >
> > > > On 13-09-2024 03:01, Michal Wajdeczko wrote:
> > > > >
> > > > >
> > > > > On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
> > > > > > If an acknowledgment timeout occurs for a domain awake request, do not
> > > > > > increment the reference count for the domain. This ensures that
> > > > > > subsequent _get calls do not incorrectly assume the
> > > > > > domain is awake. The
> > > > > > return value is a mask of domains whose reference counts were
> > > > > > incremented, and these domains need to be released using
> > > > > > xe_force_wake_put.
> > > > > >
> > > > > > The caller needs to compare the return value with the input domains to
> > > > > > determine the success or failure of the operation and
> > > > > > decide whether to
> > > > > > continue or return accordingly.
> > > > > >
> > > > > > While at it, add simple kernel-doc for xe_force_wake_get()
> > > > > >
> > > > > > Cc: Badal Nilawar <badal.nilawar@intel.com>
> > > > > > Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> > > > > > Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> > > > > > Cc: Nirmoy Das <nirmoy.das@intel.com>
> > > > > > Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> > > > > > ---
> > > > > > drivers/gpu/drm/xe/xe_force_wake.c | 35
> > > > > > ++++++++++++++++++++++++ +-----
> > > > > > 1 file changed, 29 insertions(+), 6 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
> > > > > > b/drivers/gpu/drm/xe/xe_force_wake.c
> > > > > > index a64c14757c84..fa42d652d23f 100644
> > > > > > --- a/drivers/gpu/drm/xe/xe_force_wake.c
> > > > > > +++ b/drivers/gpu/drm/xe/xe_force_wake.c
> > > > > > @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
> > > > > > (ffs(tmp__) - 1))) && \
> > > > > > domain__->reg_ctl.addr)
> > > > > > +/**
> > > > > > + * xe_force_wake_get : Increase the domain refcount; if it was 0
> > > > > > initially, wake the domain
> > > > >
> > > > > while likely this is still recognized by the kernel-doc tool, this is
> > > > > not correct notation for the function() documentation
> > > >
> > > >
> > > > I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
> > > > will fix it.
> > > >
> > > >
> > > > >
> > > > > [1]
> > > > > https://docs.kernel.org/doc-guide/kernel-doc.html#function-
> > > > > documentation
> > > > >
> > > > > > + * @fw: struct xe_force_wake
> > > > > > + * @domains: forcewake domains to get refcount on
> > > > > > + *
> > > > > > + * Increment refcount for the force-wake domain. If the domain is
> > > > > > + * asleep, awaken it and wait for acknowledgment within the specified
> > > > > > + * timeout. If a timeout occurs, decrement the refcount.
> > > > >
> > > > > not sure if doc shall be 1:1 of low level implementation details
> > > >
> > > > Does this sound okay ?
> > > > This function takes references for the input @domains and wakes them if
> > > > they are asleep.
> > > >
> > > > >
> > > > > > + * The caller should compare the return value with the @domains to
> > > > > > + * determine the success or failure of the operation.
> > > > > > + *
> > > > > > + * Return: mask of refcount increased domains.
> > > > >
> > > > > if we return a 'mask' then maybe it should be of 'unsigned int' type?
> > > >
> > > > Agreed. Will fix in next version.
> > > >
> > > > >
> > > > > > If the return value is
> > > > > > + * equal to the input parameter @domains, the operation is considered
> > > > > > + * successful. Otherwise, the operation is considered a failure, and
> > > > > > + * the caller should handle the failure case, potentially returning
> > > > > > + * -ETIMEDOUT.
> > > > >
> > > > > it looks that all problems with the nice API is due to the
> > > > > XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
> > > > >
> > > > > maybe there should be different pair of functions:
> > > >
> > > > I am not convinced with different pair of functions:
> > > >
> > > > In current implementation:
> > > >
> > > > int mask = xe_force_wake_get(fw, domains)
> > > > if (mask != domains) {
> > > > Non critical path continue with warning;
> > > > or
> > > > critical path:
> > > > xe_force_wake_put(fw, mask);
> > > > return -ETIMEDOUT;
> > > > }
> > > >
> > > > do_ops;
> > > > xe_force_wake_put(fw, mask);
> > > > return err;
> > > >
> > > > Above flow remains intact irrespective of individual domains or
> > > > FORCEWAKE_ALL.
> > > >
> > > > In case of individual domains if (mask != domains) can be replaced with
> > > > (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
> > > > since mask is 0;
> > >
> > > so maybe we should have (by reinventing i915?):
> > >
> > > // opaque, but zero means failure/no domains are awake
> > > typedef unsigned long xe_wakeref_t;
> > >
> > >
> > > // caller should test for ref != 0
> > > // but shall call put if ref != 0
> > > xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
> > >
> > > // safe to call with ref == 0
> > > void xe_force_wake_put(fw, xe_wakeref_t ref)
> > >
> > >
> > > // helpers for critical work that must be sure about domain
> > >
> > > // compares opaque ref with explicit domain != ALL
> > > // can be used by the code that obtained the ref
> > > bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
> > >
> > > // compares fw with explicit domain != ALL
> > > // can be used by the code that does not have direct access to the ref
> > > bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
> > >
> > >
> > > // helpers for checking correctness
> > > void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
> > >
> > >
> > > then usage would be:
> > >
> > > xe_wakeref_t ref;
> > >
> > > ref = xe_force_wake_get(fw, d);
> > > if (ref) {
> > > // ...
> > > xe_force_wake_put(fw, ref);
> > > }
> > >
> > > or:
> > >
> > > xe_wakeref_t ref;
> > >
> > > ref = xe_force_wake_get(fw, ALL);
> > > if (xe_wakeref_has_domain(ref, d1))
> > > // ... critical work1
> > > if (xe_wakeref_has_domain(ref, d2))
> > > // ... critical work2
> > > xe_force_wake_put(fw, ref);
> > >
> > >
> > > so above will be very similar to what you have but by having explicit
> > > types IMO it will help connect all functions into proper use-case flow
> >
> >
> > Agreed implementation/usage will be same, will use explicit type for
> > clarity.
> > IMO typedef unsigned int xe_wakeref_t is sufficient instead of
> > typedef unsigned long xe_wakeref_t;
>
> I agree with this.
>
What? Really? I thought it was pretty clear rule in kernel programing
not use typedefs [1]. Reading through conditions acceptable and I don't
use anything applies to this series, maybe a) applies but not really
convinced. The example in a) is a pte_t which can likely change based on
platform target whereas here we only have one target and see no reason
this needs to be opaque.
Matt
[1] https://www.kernel.org/doc/html/v4.14/process/coding-style.html#typedefs
> Regards,
> Badal
> >
> >
> > >
> > > >
> > > >
> > > > >
> > > > > // for single domain where ret=0 is success, ret<0 is error
> > > >
> > > > This leads to caller only calling xe_force_wake_put incase of get
> > > > success. so in case of caller continuing with failure, he will need to
> > > > ensure the put is not called.
> > > >
> > > > for example:
> > > > int ret;
> > > >
> > > > ret = xe_force_wake_get(fw, DOMAIN_GT);
> > > > XE_WARN_ON(ret)
> > > > if(!ret)
> > > > xe_force_wake_put(fw, DOMAIN_GT);
> > > >
> > > > > int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
> > > > > void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
> > > > >
> > > > > and
> > > > >
> > > > > // for all domain where ret=0 is success, ret<0 is error
> > > > > int int xe_force_wake_get_all(fw);
> > > > > void xe_force_wake_put_all(fw);
> > > >
> > > > In case of xe_force_wake_get_all(fw) failure, how the caller will know
> > > > which domains got awake and which failed ?
> > > >
> > > > ret = xe_force_wake_get_all(fw);
> > > > if(!ret)
> > > > No way to put awake domains to sleep
> > >
> > > in case of failure, it would be the responsibility of the
> > > xe_force_wake_get_all() to put all partial awakes immediately, since it
> > > failed to awake all requested domains (same as in single domain case)
> > >
> > > but let's drop this idea
> > >
> > > >
> > > > >
> > > > > and
> > > > >
> > > > > // input: mask of domains, return: mask of domain
> > > > > unsigned int xe_force_wake_get_mask(fw, mask);
> > > > > void xe_force_wake_put_mask(fw, mask);
> > > > >
> > > > > this last one can be just main implementation (static or public if we
> > > > > really want to continue with random set of enabled domains)
> > > > >
> > > > > > + */
> > > > > > int xe_force_wake_get(struct xe_force_wake *fw,
> > > > > > enum xe_force_wake_domains domains)
> > > > > > {
> > > > > > struct xe_gt *gt = fw->gt;
> > > > > > struct xe_force_wake_domain *domain;
> > > > > > - enum xe_force_wake_domains tmp, woken = 0;
> > > > > > + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
> > > > >
> > > > > it looks that you're abusing even more all enum variables by treating
> > > > > them as plain integers
> > > >
> > > > Miss at my end. Will address them in next version.
> > > >
> > > > >
> > > > > > unsigned long flags;
> > > > > > - int ret = 0;
> > > > > > + int ret = domains;
> > > > > > spin_lock_irqsave(&fw->lock, flags);
> > > > > > for_each_fw_domain_masked(domain, domains, fw, tmp) {
> > > > > > if (!domain->ref++) {
> > > > > > - woken |= BIT(domain->id);
> > > > > > + awake_rqst |= BIT(domain->id);
> > > > > > domain_wake(gt, domain);
> > > > > > }
> > > > > > }
> > > > > > - for_each_fw_domain_masked(domain, woken, fw, tmp) {
> > > > > > - ret |= domain_wake_wait(gt, domain);
> > > > > > + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
> > > > > > + if (domain_wake_wait(gt, domain) == 0) {
> > > > > > + awake_ack |= BIT(domain->id);
> > > > > > + } else {
> > > > > > + ret &= ~BIT(domain->id);
> > > > > > + --domain->ref;
> > > > > > + }
> > > > > > }
> > > > > > - fw->awake_domains |= woken;
> > > > > > +
> > > > > > + fw->awake_domains |= awake_ack;
> > > > > > spin_unlock_irqrestore(&fw->lock, flags);
> > > > > > return ret;
>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-17 18:50 ` Matthew Brost
@ 2024-09-18 6:32 ` Ghimiray, Himal Prasad
2024-09-18 7:19 ` Jani Nikula
0 siblings, 1 reply; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-18 6:32 UTC (permalink / raw)
To: Matthew Brost, Nilawar, Badal
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On 18-09-2024 00:20, Matthew Brost wrote:
> On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>>
>>
>> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>>>
>>>
>>> On 13-09-2024 16:56, Michal Wajdeczko wrote:
>>>>
>>>>
>>>> On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
>>>>>
>>>>>
>>>>> On 13-09-2024 03:01, Michal Wajdeczko wrote:
>>>>>>
>>>>>>
>>>>>> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>>>>>>> If an acknowledgment timeout occurs for a domain awake request, do not
>>>>>>> increment the reference count for the domain. This ensures that
>>>>>>> subsequent _get calls do not incorrectly assume the
>>>>>>> domain is awake. The
>>>>>>> return value is a mask of domains whose reference counts were
>>>>>>> incremented, and these domains need to be released using
>>>>>>> xe_force_wake_put.
>>>>>>>
>>>>>>> The caller needs to compare the return value with the input domains to
>>>>>>> determine the success or failure of the operation and
>>>>>>> decide whether to
>>>>>>> continue or return accordingly.
>>>>>>>
>>>>>>> While at it, add simple kernel-doc for xe_force_wake_get()
>>>>>>>
>>>>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>>>>> ---
>>>>>>> drivers/gpu/drm/xe/xe_force_wake.c | 35
>>>>>>> ++++++++++++++++++++++++ +-----
>>>>>>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>>>>>>
>>>>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>> b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>> index a64c14757c84..fa42d652d23f 100644
>>>>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>>>>>>> (ffs(tmp__) - 1))) && \
>>>>>>> domain__->reg_ctl.addr)
>>>>>>> +/**
>>>>>>> + * xe_force_wake_get : Increase the domain refcount; if it was 0
>>>>>>> initially, wake the domain
>>>>>>
>>>>>> while likely this is still recognized by the kernel-doc tool, this is
>>>>>> not correct notation for the function() documentation
>>>>>
>>>>>
>>>>> I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
>>>>> will fix it.
>>>>>
>>>>>
>>>>>>
>>>>>> [1]
>>>>>> https://docs.kernel.org/doc-guide/kernel-doc.html#function-
>>>>>> documentation
>>>>>>
>>>>>>> + * @fw: struct xe_force_wake
>>>>>>> + * @domains: forcewake domains to get refcount on
>>>>>>> + *
>>>>>>> + * Increment refcount for the force-wake domain. If the domain is
>>>>>>> + * asleep, awaken it and wait for acknowledgment within the specified
>>>>>>> + * timeout. If a timeout occurs, decrement the refcount.
>>>>>>
>>>>>> not sure if doc shall be 1:1 of low level implementation details
>>>>>
>>>>> Does this sound okay ?
>>>>> This function takes references for the input @domains and wakes them if
>>>>> they are asleep.
>>>>>
>>>>>>
>>>>>>> + * The caller should compare the return value with the @domains to
>>>>>>> + * determine the success or failure of the operation.
>>>>>>> + *
>>>>>>> + * Return: mask of refcount increased domains.
>>>>>>
>>>>>> if we return a 'mask' then maybe it should be of 'unsigned int' type?
>>>>>
>>>>> Agreed. Will fix in next version.
>>>>>
>>>>>>
>>>>>>> If the return value is
>>>>>>> + * equal to the input parameter @domains, the operation is considered
>>>>>>> + * successful. Otherwise, the operation is considered a failure, and
>>>>>>> + * the caller should handle the failure case, potentially returning
>>>>>>> + * -ETIMEDOUT.
>>>>>>
>>>>>> it looks that all problems with the nice API is due to the
>>>>>> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>>>>>>
>>>>>> maybe there should be different pair of functions:
>>>>>
>>>>> I am not convinced with different pair of functions:
>>>>>
>>>>> In current implementation:
>>>>>
>>>>> int mask = xe_force_wake_get(fw, domains)
>>>>> if (mask != domains) {
>>>>> Non critical path continue with warning;
>>>>> or
>>>>> critical path:
>>>>> xe_force_wake_put(fw, mask);
>>>>> return -ETIMEDOUT;
>>>>> }
>>>>>
>>>>> do_ops;
>>>>> xe_force_wake_put(fw, mask);
>>>>> return err;
>>>>>
>>>>> Above flow remains intact irrespective of individual domains or
>>>>> FORCEWAKE_ALL.
>>>>>
>>>>> In case of individual domains if (mask != domains) can be replaced with
>>>>> (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
>>>>> since mask is 0;
>>>>
>>>> so maybe we should have (by reinventing i915?):
>>>>
>>>> // opaque, but zero means failure/no domains are awake
>>>> typedef unsigned long xe_wakeref_t;
>>>>
>>>>
>>>> // caller should test for ref != 0
>>>> // but shall call put if ref != 0
>>>> xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
>>>>
>>>> // safe to call with ref == 0
>>>> void xe_force_wake_put(fw, xe_wakeref_t ref)
>>>>
>>>>
>>>> // helpers for critical work that must be sure about domain
>>>>
>>>> // compares opaque ref with explicit domain != ALL
>>>> // can be used by the code that obtained the ref
>>>> bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
>>>>
>>>> // compares fw with explicit domain != ALL
>>>> // can be used by the code that does not have direct access to the ref
>>>> bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
>>>>
>>>>
>>>> // helpers for checking correctness
>>>> void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
>>>>
>>>>
>>>> then usage would be:
>>>>
>>>> xe_wakeref_t ref;
>>>>
>>>> ref = xe_force_wake_get(fw, d);
>>>> if (ref) {
>>>> // ...
>>>> xe_force_wake_put(fw, ref);
>>>> }
>>>>
>>>> or:
>>>>
>>>> xe_wakeref_t ref;
>>>>
>>>> ref = xe_force_wake_get(fw, ALL);
>>>> if (xe_wakeref_has_domain(ref, d1))
>>>> // ... critical work1
>>>> if (xe_wakeref_has_domain(ref, d2))
>>>> // ... critical work2
>>>> xe_force_wake_put(fw, ref);
>>>>
>>>>
>>>> so above will be very similar to what you have but by having explicit
>>>> types IMO it will help connect all functions into proper use-case flow
>>>
>>>
>>> Agreed implementation/usage will be same, will use explicit type for
>>> clarity.
>>> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
>>> typedef unsigned long xe_wakeref_t;
>>
>> I agree with this.
>>
>
> What? Really? I thought it was pretty clear rule in kernel programing
> not use typedefs [1]. Reading through conditions acceptable and I don't
> use anything applies to this series, maybe a) applies but not really
> convinced. The example in a) is a pte_t which can likely change based on
> platform target whereas here we only have one target and see no reason
> this needs to be opaque.
>
> Matt
>
> [1] https://www.kernel.org/doc/html/v4.14/process/coding-style.html#typedefs
While running checkpatch on my changes, patchwork had also issued a
WARNING: NEW_TYPEDEFS: do not add new typedefs. I reviewed the usage in
the Linux kernel tree and found it used in many places, which led me to
assume it was safe. I now realize that I should have been more careful
in understanding the context of its usage and referred to the kernel
coding guidelines. This was an oversight on my part.
Since this doesn’t impact the CI or runtime, I will avoid reverting to
unsigned int immediately and will hold off until I receive the other
review comments. I will incorporate the changes to revert it in
subsequent versions while also addressing the other review comments.
Thank you for bringing this to the attention.
BR
Himal
>
>> Regards,
>> Badal
>>>
>>>
>>>>
>>>>>
>>>>>
>>>>>>
>>>>>> // for single domain where ret=0 is success, ret<0 is error
>>>>>
>>>>> This leads to caller only calling xe_force_wake_put incase of get
>>>>> success. so in case of caller continuing with failure, he will need to
>>>>> ensure the put is not called.
>>>>>
>>>>> for example:
>>>>> int ret;
>>>>>
>>>>> ret = xe_force_wake_get(fw, DOMAIN_GT);
>>>>> XE_WARN_ON(ret)
>>>>> if(!ret)
>>>>> xe_force_wake_put(fw, DOMAIN_GT);
>>>>>
>>>>>> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
>>>>>> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>>>>>>
>>>>>> and
>>>>>>
>>>>>> // for all domain where ret=0 is success, ret<0 is error
>>>>>> int int xe_force_wake_get_all(fw);
>>>>>> void xe_force_wake_put_all(fw);
>>>>>
>>>>> In case of xe_force_wake_get_all(fw) failure, how the caller will know
>>>>> which domains got awake and which failed ?
>>>>>
>>>>> ret = xe_force_wake_get_all(fw);
>>>>> if(!ret)
>>>>> No way to put awake domains to sleep
>>>>
>>>> in case of failure, it would be the responsibility of the
>>>> xe_force_wake_get_all() to put all partial awakes immediately, since it
>>>> failed to awake all requested domains (same as in single domain case)
>>>>
>>>> but let's drop this idea
>>>>
>>>>>
>>>>>>
>>>>>> and
>>>>>>
>>>>>> // input: mask of domains, return: mask of domain
>>>>>> unsigned int xe_force_wake_get_mask(fw, mask);
>>>>>> void xe_force_wake_put_mask(fw, mask);
>>>>>>
>>>>>> this last one can be just main implementation (static or public if we
>>>>>> really want to continue with random set of enabled domains)
>>>>>>
>>>>>>> + */
>>>>>>> int xe_force_wake_get(struct xe_force_wake *fw,
>>>>>>> enum xe_force_wake_domains domains)
>>>>>>> {
>>>>>>> struct xe_gt *gt = fw->gt;
>>>>>>> struct xe_force_wake_domain *domain;
>>>>>>> - enum xe_force_wake_domains tmp, woken = 0;
>>>>>>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>>>>>>
>>>>>> it looks that you're abusing even more all enum variables by treating
>>>>>> them as plain integers
>>>>>
>>>>> Miss at my end. Will address them in next version.
>>>>>
>>>>>>
>>>>>>> unsigned long flags;
>>>>>>> - int ret = 0;
>>>>>>> + int ret = domains;
>>>>>>> spin_lock_irqsave(&fw->lock, flags);
>>>>>>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>>>>>>> if (!domain->ref++) {
>>>>>>> - woken |= BIT(domain->id);
>>>>>>> + awake_rqst |= BIT(domain->id);
>>>>>>> domain_wake(gt, domain);
>>>>>>> }
>>>>>>> }
>>>>>>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>>>>>>> - ret |= domain_wake_wait(gt, domain);
>>>>>>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>>>>>>> + if (domain_wake_wait(gt, domain) == 0) {
>>>>>>> + awake_ack |= BIT(domain->id);
>>>>>>> + } else {
>>>>>>> + ret &= ~BIT(domain->id);
>>>>>>> + --domain->ref;
>>>>>>> + }
>>>>>>> }
>>>>>>> - fw->awake_domains |= woken;
>>>>>>> +
>>>>>>> + fw->awake_domains |= awake_ack;
>>>>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>>>>> return ret;
>>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-18 6:32 ` Ghimiray, Himal Prasad
@ 2024-09-18 7:19 ` Jani Nikula
2024-09-18 14:50 ` Jani Nikula
2024-09-19 11:07 ` Nilawar, Badal
0 siblings, 2 replies; 58+ messages in thread
From: Jani Nikula @ 2024-09-18 7:19 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, Matthew Brost, Nilawar, Badal
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On Wed, 18 Sep 2024, "Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com> wrote:
> On 18-09-2024 00:20, Matthew Brost wrote:
>> On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>>>
>>>
>>> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>>>>
>>>>
>>>> On 13-09-2024 16:56, Michal Wajdeczko wrote:
>>>>>
>>>>>
>>>>> On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
>>>>>>
>>>>>>
>>>>>> On 13-09-2024 03:01, Michal Wajdeczko wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>>>>>>>> If an acknowledgment timeout occurs for a domain awake request, do not
>>>>>>>> increment the reference count for the domain. This ensures that
>>>>>>>> subsequent _get calls do not incorrectly assume the
>>>>>>>> domain is awake. The
>>>>>>>> return value is a mask of domains whose reference counts were
>>>>>>>> incremented, and these domains need to be released using
>>>>>>>> xe_force_wake_put.
>>>>>>>>
>>>>>>>> The caller needs to compare the return value with the input domains to
>>>>>>>> determine the success or failure of the operation and
>>>>>>>> decide whether to
>>>>>>>> continue or return accordingly.
>>>>>>>>
>>>>>>>> While at it, add simple kernel-doc for xe_force_wake_get()
>>>>>>>>
>>>>>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>>>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>>>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>>>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>>>>>> ---
>>>>>>>> drivers/gpu/drm/xe/xe_force_wake.c | 35
>>>>>>>> ++++++++++++++++++++++++ +-----
>>>>>>>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>>>>>>>
>>>>>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>> b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>> index a64c14757c84..fa42d652d23f 100644
>>>>>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>>>>>>>> (ffs(tmp__) - 1))) && \
>>>>>>>> domain__->reg_ctl.addr)
>>>>>>>> +/**
>>>>>>>> + * xe_force_wake_get : Increase the domain refcount; if it was 0
>>>>>>>> initially, wake the domain
>>>>>>>
>>>>>>> while likely this is still recognized by the kernel-doc tool, this is
>>>>>>> not correct notation for the function() documentation
>>>>>>
>>>>>>
>>>>>> I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
>>>>>> will fix it.
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> [1]
>>>>>>> https://docs.kernel.org/doc-guide/kernel-doc.html#function-
>>>>>>> documentation
>>>>>>>
>>>>>>>> + * @fw: struct xe_force_wake
>>>>>>>> + * @domains: forcewake domains to get refcount on
>>>>>>>> + *
>>>>>>>> + * Increment refcount for the force-wake domain. If the domain is
>>>>>>>> + * asleep, awaken it and wait for acknowledgment within the specified
>>>>>>>> + * timeout. If a timeout occurs, decrement the refcount.
>>>>>>>
>>>>>>> not sure if doc shall be 1:1 of low level implementation details
>>>>>>
>>>>>> Does this sound okay ?
>>>>>> This function takes references for the input @domains and wakes them if
>>>>>> they are asleep.
>>>>>>
>>>>>>>
>>>>>>>> + * The caller should compare the return value with the @domains to
>>>>>>>> + * determine the success or failure of the operation.
>>>>>>>> + *
>>>>>>>> + * Return: mask of refcount increased domains.
>>>>>>>
>>>>>>> if we return a 'mask' then maybe it should be of 'unsigned int' type?
>>>>>>
>>>>>> Agreed. Will fix in next version.
>>>>>>
>>>>>>>
>>>>>>>> If the return value is
>>>>>>>> + * equal to the input parameter @domains, the operation is considered
>>>>>>>> + * successful. Otherwise, the operation is considered a failure, and
>>>>>>>> + * the caller should handle the failure case, potentially returning
>>>>>>>> + * -ETIMEDOUT.
>>>>>>>
>>>>>>> it looks that all problems with the nice API is due to the
>>>>>>> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>>>>>>>
>>>>>>> maybe there should be different pair of functions:
>>>>>>
>>>>>> I am not convinced with different pair of functions:
>>>>>>
>>>>>> In current implementation:
>>>>>>
>>>>>> int mask = xe_force_wake_get(fw, domains)
>>>>>> if (mask != domains) {
>>>>>> Non critical path continue with warning;
>>>>>> or
>>>>>> critical path:
>>>>>> xe_force_wake_put(fw, mask);
>>>>>> return -ETIMEDOUT;
>>>>>> }
>>>>>>
>>>>>> do_ops;
>>>>>> xe_force_wake_put(fw, mask);
>>>>>> return err;
>>>>>>
>>>>>> Above flow remains intact irrespective of individual domains or
>>>>>> FORCEWAKE_ALL.
>>>>>>
>>>>>> In case of individual domains if (mask != domains) can be replaced with
>>>>>> (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
>>>>>> since mask is 0;
>>>>>
>>>>> so maybe we should have (by reinventing i915?):
>>>>>
>>>>> // opaque, but zero means failure/no domains are awake
>>>>> typedef unsigned long xe_wakeref_t;
>>>>>
>>>>>
>>>>> // caller should test for ref != 0
>>>>> // but shall call put if ref != 0
>>>>> xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
>>>>>
>>>>> // safe to call with ref == 0
>>>>> void xe_force_wake_put(fw, xe_wakeref_t ref)
>>>>>
>>>>>
>>>>> // helpers for critical work that must be sure about domain
>>>>>
>>>>> // compares opaque ref with explicit domain != ALL
>>>>> // can be used by the code that obtained the ref
>>>>> bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
>>>>>
>>>>> // compares fw with explicit domain != ALL
>>>>> // can be used by the code that does not have direct access to the ref
>>>>> bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
>>>>>
>>>>>
>>>>> // helpers for checking correctness
>>>>> void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
>>>>>
>>>>>
>>>>> then usage would be:
>>>>>
>>>>> xe_wakeref_t ref;
>>>>>
>>>>> ref = xe_force_wake_get(fw, d);
>>>>> if (ref) {
>>>>> // ...
>>>>> xe_force_wake_put(fw, ref);
>>>>> }
>>>>>
>>>>> or:
>>>>>
>>>>> xe_wakeref_t ref;
>>>>>
>>>>> ref = xe_force_wake_get(fw, ALL);
>>>>> if (xe_wakeref_has_domain(ref, d1))
>>>>> // ... critical work1
>>>>> if (xe_wakeref_has_domain(ref, d2))
>>>>> // ... critical work2
>>>>> xe_force_wake_put(fw, ref);
>>>>>
>>>>>
>>>>> so above will be very similar to what you have but by having explicit
>>>>> types IMO it will help connect all functions into proper use-case flow
>>>>
>>>>
>>>> Agreed implementation/usage will be same, will use explicit type for
>>>> clarity.
>>>> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
>>>> typedef unsigned long xe_wakeref_t;
>>>
>>> I agree with this.
>>>
>>
>> What? Really? I thought it was pretty clear rule in kernel programing
>> not use typedefs [1]. Reading through conditions acceptable and I don't
>> use anything applies to this series, maybe a) applies but not really
>> convinced. The example in a) is a pte_t which can likely change based on
>> platform target whereas here we only have one target and see no reason
>> this needs to be opaque.
>>
>> Matt
>>
>> [1] https://www.kernel.org/doc/html/v4.14/process/coding-style.html#typedefs
>
>
> While running checkpatch on my changes, patchwork had also issued a
> WARNING: NEW_TYPEDEFS: do not add new typedefs. I reviewed the usage in
> the Linux kernel tree and found it used in many places, which led me to
> assume it was safe. I now realize that I should have been more careful
> in understanding the context of its usage and referred to the kernel
> coding guidelines. This was an oversight on my part.
>
> Since this doesn’t impact the CI or runtime, I will avoid reverting to
> unsigned int immediately and will hold off until I receive the other
> review comments. I will incorporate the changes to revert it in
> subsequent versions while also addressing the other review comments.
> Thank you for bringing this to the attention.
If you end up replicating intel_wakeref_t from i915, and go as deep as
the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
disguised as an unsigned long. It's a struct ref_tracker * when you have
certain configs enabled.
You could just use struct ref_tracker * everywhere. It's an opaque type
to start with.
BR,
Jani.
>
> BR
> Himal
>
>>
>>> Regards,
>>> Badal
>>>>
>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> // for single domain where ret=0 is success, ret<0 is error
>>>>>>
>>>>>> This leads to caller only calling xe_force_wake_put incase of get
>>>>>> success. so in case of caller continuing with failure, he will need to
>>>>>> ensure the put is not called.
>>>>>>
>>>>>> for example:
>>>>>> int ret;
>>>>>>
>>>>>> ret = xe_force_wake_get(fw, DOMAIN_GT);
>>>>>> XE_WARN_ON(ret)
>>>>>> if(!ret)
>>>>>> xe_force_wake_put(fw, DOMAIN_GT);
>>>>>>
>>>>>>> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
>>>>>>> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>>>>>>>
>>>>>>> and
>>>>>>>
>>>>>>> // for all domain where ret=0 is success, ret<0 is error
>>>>>>> int int xe_force_wake_get_all(fw);
>>>>>>> void xe_force_wake_put_all(fw);
>>>>>>
>>>>>> In case of xe_force_wake_get_all(fw) failure, how the caller will know
>>>>>> which domains got awake and which failed ?
>>>>>>
>>>>>> ret = xe_force_wake_get_all(fw);
>>>>>> if(!ret)
>>>>>> No way to put awake domains to sleep
>>>>>
>>>>> in case of failure, it would be the responsibility of the
>>>>> xe_force_wake_get_all() to put all partial awakes immediately, since it
>>>>> failed to awake all requested domains (same as in single domain case)
>>>>>
>>>>> but let's drop this idea
>>>>>
>>>>>>
>>>>>>>
>>>>>>> and
>>>>>>>
>>>>>>> // input: mask of domains, return: mask of domain
>>>>>>> unsigned int xe_force_wake_get_mask(fw, mask);
>>>>>>> void xe_force_wake_put_mask(fw, mask);
>>>>>>>
>>>>>>> this last one can be just main implementation (static or public if we
>>>>>>> really want to continue with random set of enabled domains)
>>>>>>>
>>>>>>>> + */
>>>>>>>> int xe_force_wake_get(struct xe_force_wake *fw,
>>>>>>>> enum xe_force_wake_domains domains)
>>>>>>>> {
>>>>>>>> struct xe_gt *gt = fw->gt;
>>>>>>>> struct xe_force_wake_domain *domain;
>>>>>>>> - enum xe_force_wake_domains tmp, woken = 0;
>>>>>>>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>>>>>>>
>>>>>>> it looks that you're abusing even more all enum variables by treating
>>>>>>> them as plain integers
>>>>>>
>>>>>> Miss at my end. Will address them in next version.
>>>>>>
>>>>>>>
>>>>>>>> unsigned long flags;
>>>>>>>> - int ret = 0;
>>>>>>>> + int ret = domains;
>>>>>>>> spin_lock_irqsave(&fw->lock, flags);
>>>>>>>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>>>>>>>> if (!domain->ref++) {
>>>>>>>> - woken |= BIT(domain->id);
>>>>>>>> + awake_rqst |= BIT(domain->id);
>>>>>>>> domain_wake(gt, domain);
>>>>>>>> }
>>>>>>>> }
>>>>>>>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>>>>>>>> - ret |= domain_wake_wait(gt, domain);
>>>>>>>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>>>>>>>> + if (domain_wake_wait(gt, domain) == 0) {
>>>>>>>> + awake_ack |= BIT(domain->id);
>>>>>>>> + } else {
>>>>>>>> + ret &= ~BIT(domain->id);
>>>>>>>> + --domain->ref;
>>>>>>>> + }
>>>>>>>> }
>>>>>>>> - fw->awake_domains |= woken;
>>>>>>>> +
>>>>>>>> + fw->awake_domains |= awake_ack;
>>>>>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>>>>>> return ret;
>>>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-18 7:19 ` Jani Nikula
@ 2024-09-18 14:50 ` Jani Nikula
2024-09-19 11:07 ` Nilawar, Badal
1 sibling, 0 replies; 58+ messages in thread
From: Jani Nikula @ 2024-09-18 14:50 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, Matthew Brost, Nilawar, Badal
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On Wed, 18 Sep 2024, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> If you end up replicating intel_wakeref_t from i915, and go as deep as
> the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
> disguised as an unsigned long. It's a struct ref_tracker * when you have
> certain configs enabled.
>
> You could just use struct ref_tracker * everywhere. It's an opaque type
> to start with.
Inspired by this discussion, I converted i915
-typedef unsigned long intel_wakeref_t;
+typedef struct ref_tracker *intel_wakeref_t;
and it promptly found a number of issues [1]. Maybe the typedef around
an integral type isn't the hottest idea. Though I'm not suggesting to
use a typedef for the pointer either, it's just that i915 has
intel_wakeref_t littered absolutely everywhere.
BR,
Jani.
[1] https://lore.kernel.org/r/cover.1726658138.git.jani.nikula@intel.com
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-18 7:19 ` Jani Nikula
2024-09-18 14:50 ` Jani Nikula
@ 2024-09-19 11:07 ` Nilawar, Badal
2024-09-19 11:36 ` Jani Nikula
1 sibling, 1 reply; 58+ messages in thread
From: Nilawar, Badal @ 2024-09-19 11:07 UTC (permalink / raw)
To: Jani Nikula, Ghimiray, Himal Prasad, Matthew Brost
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On 18-09-2024 12:49, Jani Nikula wrote:
> On Wed, 18 Sep 2024, "Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com> wrote:
>> On 18-09-2024 00:20, Matthew Brost wrote:
>>> On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>>>>
>>>>
>>>> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>>>>>
>>>>>
>>>>> On 13-09-2024 16:56, Michal Wajdeczko wrote:
>>>>>>
>>>>>>
>>>>>> On 13.09.2024 05:59, Ghimiray, Himal Prasad wrote:
>>>>>>>
>>>>>>>
>>>>>>> On 13-09-2024 03:01, Michal Wajdeczko wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>>>>>>>>> If an acknowledgment timeout occurs for a domain awake request, do not
>>>>>>>>> increment the reference count for the domain. This ensures that
>>>>>>>>> subsequent _get calls do not incorrectly assume the
>>>>>>>>> domain is awake. The
>>>>>>>>> return value is a mask of domains whose reference counts were
>>>>>>>>> incremented, and these domains need to be released using
>>>>>>>>> xe_force_wake_put.
>>>>>>>>>
>>>>>>>>> The caller needs to compare the return value with the input domains to
>>>>>>>>> determine the success or failure of the operation and
>>>>>>>>> decide whether to
>>>>>>>>> continue or return accordingly.
>>>>>>>>>
>>>>>>>>> While at it, add simple kernel-doc for xe_force_wake_get()
>>>>>>>>>
>>>>>>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>>>>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>>>>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>>>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>>>>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>>>>>>> ---
>>>>>>>>> drivers/gpu/drm/xe/xe_force_wake.c | 35
>>>>>>>>> ++++++++++++++++++++++++ +-----
>>>>>>>>> 1 file changed, 29 insertions(+), 6 deletions(-)
>>>>>>>>>
>>>>>>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>>> b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>>> index a64c14757c84..fa42d652d23f 100644
>>>>>>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>>>>>> @@ -150,26 +150,49 @@ static int domain_sleep_wait(struct xe_gt *gt,
>>>>>>>>> (ffs(tmp__) - 1))) && \
>>>>>>>>> domain__->reg_ctl.addr)
>>>>>>>>> +/**
>>>>>>>>> + * xe_force_wake_get : Increase the domain refcount; if it was 0
>>>>>>>>> initially, wake the domain
>>>>>>>>
>>>>>>>> while likely this is still recognized by the kernel-doc tool, this is
>>>>>>>> not correct notation for the function() documentation
>>>>>>>
>>>>>>>
>>>>>>> I assume you are suggesting %s/xe_force_wake_get/xe_force_wake_get()
>>>>>>> will fix it.
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> [1]
>>>>>>>> https://docs.kernel.org/doc-guide/kernel-doc.html#function-
>>>>>>>> documentation
>>>>>>>>
>>>>>>>>> + * @fw: struct xe_force_wake
>>>>>>>>> + * @domains: forcewake domains to get refcount on
>>>>>>>>> + *
>>>>>>>>> + * Increment refcount for the force-wake domain. If the domain is
>>>>>>>>> + * asleep, awaken it and wait for acknowledgment within the specified
>>>>>>>>> + * timeout. If a timeout occurs, decrement the refcount.
>>>>>>>>
>>>>>>>> not sure if doc shall be 1:1 of low level implementation details
>>>>>>>
>>>>>>> Does this sound okay ?
>>>>>>> This function takes references for the input @domains and wakes them if
>>>>>>> they are asleep.
>>>>>>>
>>>>>>>>
>>>>>>>>> + * The caller should compare the return value with the @domains to
>>>>>>>>> + * determine the success or failure of the operation.
>>>>>>>>> + *
>>>>>>>>> + * Return: mask of refcount increased domains.
>>>>>>>>
>>>>>>>> if we return a 'mask' then maybe it should be of 'unsigned int' type?
>>>>>>>
>>>>>>> Agreed. Will fix in next version.
>>>>>>>
>>>>>>>>
>>>>>>>>> If the return value is
>>>>>>>>> + * equal to the input parameter @domains, the operation is considered
>>>>>>>>> + * successful. Otherwise, the operation is considered a failure, and
>>>>>>>>> + * the caller should handle the failure case, potentially returning
>>>>>>>>> + * -ETIMEDOUT.
>>>>>>>>
>>>>>>>> it looks that all problems with the nice API is due to the
>>>>>>>> XE_FORCEWAKE_ALL that is not a single domain ID and requires extra care
>>>>>>>>
>>>>>>>> maybe there should be different pair of functions:
>>>>>>>
>>>>>>> I am not convinced with different pair of functions:
>>>>>>>
>>>>>>> In current implementation:
>>>>>>>
>>>>>>> int mask = xe_force_wake_get(fw, domains)
>>>>>>> if (mask != domains) {
>>>>>>> Non critical path continue with warning;
>>>>>>> or
>>>>>>> critical path:
>>>>>>> xe_force_wake_put(fw, mask);
>>>>>>> return -ETIMEDOUT;
>>>>>>> }
>>>>>>>
>>>>>>> do_ops;
>>>>>>> xe_force_wake_put(fw, mask);
>>>>>>> return err;
>>>>>>>
>>>>>>> Above flow remains intact irrespective of individual domains or
>>>>>>> FORCEWAKE_ALL.
>>>>>>>
>>>>>>> In case of individual domains if (mask != domains) can be replaced with
>>>>>>> (!mask) and user can avoid xe_force_wake_put(fw, mask) in failure path
>>>>>>> since mask is 0;
>>>>>>
>>>>>> so maybe we should have (by reinventing i915?):
>>>>>>
>>>>>> // opaque, but zero means failure/no domains are awake
>>>>>> typedef unsigned long xe_wakeref_t;
>>>>>>
>>>>>>
>>>>>> // caller should test for ref != 0
>>>>>> // but shall call put if ref != 0
>>>>>> xe_wakeref_t xe_force_wake_get(fw, enum xe_force_wake_domains d)
>>>>>>
>>>>>> // safe to call with ref == 0
>>>>>> void xe_force_wake_put(fw, xe_wakeref_t ref)
>>>>>>
>>>>>>
>>>>>> // helpers for critical work that must be sure about domain
>>>>>>
>>>>>> // compares opaque ref with explicit domain != ALL
>>>>>> // can be used by the code that obtained the ref
>>>>>> bool xe_wakeref_has_domain(xe_wakeref_t, enum xe_force_wake_domains d)
>>>>>>
>>>>>> // compares fw with explicit domain != ALL
>>>>>> // can be used by the code that does not have direct access to the ref
>>>>>> bool xe_force_wake_is_awake(fw, enum xe_force_wake_domains d)
>>>>>>
>>>>>>
>>>>>> // helpers for checking correctness
>>>>>> void xe_force_wake_assert_held(fw, enum xe_force_wake_domains d)
>>>>>>
>>>>>>
>>>>>> then usage would be:
>>>>>>
>>>>>> xe_wakeref_t ref;
>>>>>>
>>>>>> ref = xe_force_wake_get(fw, d);
>>>>>> if (ref) {
>>>>>> // ...
>>>>>> xe_force_wake_put(fw, ref);
>>>>>> }
>>>>>>
>>>>>> or:
>>>>>>
>>>>>> xe_wakeref_t ref;
>>>>>>
>>>>>> ref = xe_force_wake_get(fw, ALL);
>>>>>> if (xe_wakeref_has_domain(ref, d1))
>>>>>> // ... critical work1
>>>>>> if (xe_wakeref_has_domain(ref, d2))
>>>>>> // ... critical work2
>>>>>> xe_force_wake_put(fw, ref);
>>>>>>
>>>>>>
>>>>>> so above will be very similar to what you have but by having explicit
>>>>>> types IMO it will help connect all functions into proper use-case flow
>>>>>
>>>>>
>>>>> Agreed implementation/usage will be same, will use explicit type for
>>>>> clarity.
>>>>> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
>>>>> typedef unsigned long xe_wakeref_t;
>>>>
>>>> I agree with this.
>>>>
>>>
>>> What? Really? I thought it was pretty clear rule in kernel programing
>>> not use typedefs [1]. Reading through conditions acceptable and I don't
>>> use anything applies to this series, maybe a) applies but not really
>>> convinced. The example in a) is a pte_t which can likely change based on
>>> platform target whereas here we only have one target and see no reason
>>> this needs to be opaque.
>>>
>>> Matt
>>>
>>> [1] https://www.kernel.org/doc/html/v4.14/process/coding-style.html#typedefs
>>
>>
>> While running checkpatch on my changes, patchwork had also issued a
>> WARNING: NEW_TYPEDEFS: do not add new typedefs. I reviewed the usage in
>> the Linux kernel tree and found it used in many places, which led me to
>> assume it was safe. I now realize that I should have been more careful
>> in understanding the context of its usage and referred to the kernel
>> coding guidelines. This was an oversight on my part.
>>
>> Since this doesn’t impact the CI or runtime, I will avoid reverting to
>> unsigned int immediately and will hold off until I receive the other
>> review comments. I will incorporate the changes to revert it in
>> subsequent versions while also addressing the other review comments.
>> Thank you for bringing this to the attention.
>
> If you end up replicating intel_wakeref_t from i915, and go as deep as
> the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
> disguised as an unsigned long. It's a struct ref_tracker * when you have
> certain configs enabled.
>
> You could just use struct ref_tracker * everywhere. It's an opaque type
> to start with.
The original idea of using typedef for the fw return mask was for the
sake of clarity. However, Matt B pointed that the use of typedef in this
instance is not in accordance with the Linux kernel coding standards.
Additionally, I agree with Matt B that there is no need for the fw
return mask to be opaque; therefore, it is preferable to maintain the
use of unsigned int.
Regards,
Badal
>
> BR,
> Jani.
>
>
>>
>> BR
>> Himal
>>
>>>
>>>> Regards,
>>>> Badal
>>>>>
>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> // for single domain where ret=0 is success, ret<0 is error
>>>>>>>
>>>>>>> This leads to caller only calling xe_force_wake_put incase of get
>>>>>>> success. so in case of caller continuing with failure, he will need to
>>>>>>> ensure the put is not called.
>>>>>>>
>>>>>>> for example:
>>>>>>> int ret;
>>>>>>>
>>>>>>> ret = xe_force_wake_get(fw, DOMAIN_GT);
>>>>>>> XE_WARN_ON(ret)
>>>>>>> if(!ret)
>>>>>>> xe_force_wake_put(fw, DOMAIN_GT);
>>>>>>>
>>>>>>>> int xe_force_wake_get(fw, enum xe_force_wake_domain_id id);
>>>>>>>> void xe_force_wake_put(fw, enum xe_force_wake_domain_id id);
>>>>>>>>
>>>>>>>> and
>>>>>>>>
>>>>>>>> // for all domain where ret=0 is success, ret<0 is error
>>>>>>>> int int xe_force_wake_get_all(fw);
>>>>>>>> void xe_force_wake_put_all(fw);
>>>>>>>
>>>>>>> In case of xe_force_wake_get_all(fw) failure, how the caller will know
>>>>>>> which domains got awake and which failed ?
>>>>>>>
>>>>>>> ret = xe_force_wake_get_all(fw);
>>>>>>> if(!ret)
>>>>>>> No way to put awake domains to sleep
>>>>>>
>>>>>> in case of failure, it would be the responsibility of the
>>>>>> xe_force_wake_get_all() to put all partial awakes immediately, since it
>>>>>> failed to awake all requested domains (same as in single domain case)
>>>>>>
>>>>>> but let's drop this idea
>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> and
>>>>>>>>
>>>>>>>> // input: mask of domains, return: mask of domain
>>>>>>>> unsigned int xe_force_wake_get_mask(fw, mask);
>>>>>>>> void xe_force_wake_put_mask(fw, mask);
>>>>>>>>
>>>>>>>> this last one can be just main implementation (static or public if we
>>>>>>>> really want to continue with random set of enabled domains)
>>>>>>>>
>>>>>>>>> + */
>>>>>>>>> int xe_force_wake_get(struct xe_force_wake *fw,
>>>>>>>>> enum xe_force_wake_domains domains)
>>>>>>>>> {
>>>>>>>>> struct xe_gt *gt = fw->gt;
>>>>>>>>> struct xe_force_wake_domain *domain;
>>>>>>>>> - enum xe_force_wake_domains tmp, woken = 0;
>>>>>>>>> + enum xe_force_wake_domains tmp, awake_rqst = 0, awake_ack = 0;
>>>>>>>>
>>>>>>>> it looks that you're abusing even more all enum variables by treating
>>>>>>>> them as plain integers
>>>>>>>
>>>>>>> Miss at my end. Will address them in next version.
>>>>>>>
>>>>>>>>
>>>>>>>>> unsigned long flags;
>>>>>>>>> - int ret = 0;
>>>>>>>>> + int ret = domains;
>>>>>>>>> spin_lock_irqsave(&fw->lock, flags);
>>>>>>>>> for_each_fw_domain_masked(domain, domains, fw, tmp) {
>>>>>>>>> if (!domain->ref++) {
>>>>>>>>> - woken |= BIT(domain->id);
>>>>>>>>> + awake_rqst |= BIT(domain->id);
>>>>>>>>> domain_wake(gt, domain);
>>>>>>>>> }
>>>>>>>>> }
>>>>>>>>> - for_each_fw_domain_masked(domain, woken, fw, tmp) {
>>>>>>>>> - ret |= domain_wake_wait(gt, domain);
>>>>>>>>> + for_each_fw_domain_masked(domain, awake_rqst, fw, tmp) {
>>>>>>>>> + if (domain_wake_wait(gt, domain) == 0) {
>>>>>>>>> + awake_ack |= BIT(domain->id);
>>>>>>>>> + } else {
>>>>>>>>> + ret &= ~BIT(domain->id);
>>>>>>>>> + --domain->ref;
>>>>>>>>> + }
>>>>>>>>> }
>>>>>>>>> - fw->awake_domains |= woken;
>>>>>>>>> +
>>>>>>>>> + fw->awake_domains |= awake_ack;
>>>>>>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>>>>>>> return ret;
>>>>
>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-19 11:07 ` Nilawar, Badal
@ 2024-09-19 11:36 ` Jani Nikula
2024-09-19 12:32 ` Nilawar, Badal
0 siblings, 1 reply; 58+ messages in thread
From: Jani Nikula @ 2024-09-19 11:36 UTC (permalink / raw)
To: Nilawar, Badal, Ghimiray, Himal Prasad, Matthew Brost
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On Thu, 19 Sep 2024, "Nilawar, Badal" <badal.nilawar@intel.com> wrote:
> On 18-09-2024 12:49, Jani Nikula wrote:
>> On Wed, 18 Sep 2024, "Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com> wrote:
>>> On 18-09-2024 00:20, Matthew Brost wrote:
>>>> On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>>>>> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>>>>>> Agreed implementation/usage will be same, will use explicit type for
>>>>>> clarity.
>>>>>> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
>>>>>> typedef unsigned long xe_wakeref_t;
>>>>>
>>>>> I agree with this.
>>>>>
>>>>
>>>> What? Really? I thought it was pretty clear rule in kernel programing
>>>> not use typedefs [1]. Reading through conditions acceptable and I don't
>>>> use anything applies to this series, maybe a) applies but not really
>>>> convinced. The example in a) is a pte_t which can likely change based on
>>>> platform target whereas here we only have one target and see no reason
>>>> this needs to be opaque.
>>>>
>>>> Matt
>>>>
>>>> [1] https://www.kernel.org/doc/html/v4.14/process/coding-style.html#typedefs
>>>
>>>
>>> While running checkpatch on my changes, patchwork had also issued a
>>> WARNING: NEW_TYPEDEFS: do not add new typedefs. I reviewed the usage in
>>> the Linux kernel tree and found it used in many places, which led me to
>>> assume it was safe. I now realize that I should have been more careful
>>> in understanding the context of its usage and referred to the kernel
>>> coding guidelines. This was an oversight on my part.
>>>
>>> Since this doesn’t impact the CI or runtime, I will avoid reverting to
>>> unsigned int immediately and will hold off until I receive the other
>>> review comments. I will incorporate the changes to revert it in
>>> subsequent versions while also addressing the other review comments.
>>> Thank you for bringing this to the attention.
>>
>> If you end up replicating intel_wakeref_t from i915, and go as deep as
>> the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
>> disguised as an unsigned long. It's a struct ref_tracker * when you have
>> certain configs enabled.
>>
>> You could just use struct ref_tracker * everywhere. It's an opaque type
>> to start with.
>
> The original idea of using typedef for the fw return mask was for the
> sake of clarity. However, Matt B pointed that the use of typedef in this
> instance is not in accordance with the Linux kernel coding standards.
> Additionally, I agree with Matt B that there is no need for the fw
> return mask to be opaque; therefore, it is preferable to maintain the
> use of unsigned int.
I'm not sure it's a hot idea to explicitly state that the return value
is a domain mask. The callers shouldn't need to care, should they?
For example:
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
Under what conditions do you expect this to happen? Shouldn't
xe_force_wake_get() flag cases where it couldn't deliver what you asked?
BR,
Jani.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-19 11:36 ` Jani Nikula
@ 2024-09-19 12:32 ` Nilawar, Badal
2024-09-23 12:36 ` Ghimiray, Himal Prasad
0 siblings, 1 reply; 58+ messages in thread
From: Nilawar, Badal @ 2024-09-19 12:32 UTC (permalink / raw)
To: Jani Nikula, Ghimiray, Himal Prasad, Matthew Brost
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On 19-09-2024 17:06, Jani Nikula wrote:
> On Thu, 19 Sep 2024, "Nilawar, Badal" <badal.nilawar@intel.com> wrote:
>> On 18-09-2024 12:49, Jani Nikula wrote:
>>> On Wed, 18 Sep 2024, "Ghimiray, Himal Prasad" <himal.prasad.ghimiray@intel.com> wrote:
>>>> On 18-09-2024 00:20, Matthew Brost wrote:
>>>>> On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>>>>>> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>>>>>>> Agreed implementation/usage will be same, will use explicit type for
>>>>>>> clarity.
>>>>>>> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
>>>>>>> typedef unsigned long xe_wakeref_t;
>>>>>>
>>>>>> I agree with this.
>>>>>>
>>>>>
>>>>> What? Really? I thought it was pretty clear rule in kernel programing
>>>>> not use typedefs [1]. Reading through conditions acceptable and I don't
>>>>> use anything applies to this series, maybe a) applies but not really
>>>>> convinced. The example in a) is a pte_t which can likely change based on
>>>>> platform target whereas here we only have one target and see no reason
>>>>> this needs to be opaque.
>>>>>
>>>>> Matt
>>>>>
>>>>> [1] https://www.kernel.org/doc/html/v4.14/process/coding-style.html#typedefs
>>>>
>>>>
>>>> While running checkpatch on my changes, patchwork had also issued a
>>>> WARNING: NEW_TYPEDEFS: do not add new typedefs. I reviewed the usage in
>>>> the Linux kernel tree and found it used in many places, which led me to
>>>> assume it was safe. I now realize that I should have been more careful
>>>> in understanding the context of its usage and referred to the kernel
>>>> coding guidelines. This was an oversight on my part.
>>>>
>>>> Since this doesn’t impact the CI or runtime, I will avoid reverting to
>>>> unsigned int immediately and will hold off until I receive the other
>>>> review comments. I will incorporate the changes to revert it in
>>>> subsequent versions while also addressing the other review comments.
>>>> Thank you for bringing this to the attention.
>>>
>>> If you end up replicating intel_wakeref_t from i915, and go as deep as
>>> the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
>>> disguised as an unsigned long. It's a struct ref_tracker * when you have
>>> certain configs enabled.
>>>
>>> You could just use struct ref_tracker * everywhere. It's an opaque type
>>> to start with.
>>
>> The original idea of using typedef for the fw return mask was for the
>> sake of clarity. However, Matt B pointed that the use of typedef in this
>> instance is not in accordance with the Linux kernel coding standards.
>> Additionally, I agree with Matt B that there is no need for the fw
>> return mask to be opaque; therefore, it is preferable to maintain the
>> use of unsigned int.
>
> I'm not sure it's a hot idea to explicitly state that the return value
> is a domain mask. The callers shouldn't need to care, should they?
>
> For example:
>
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> + if (fw_ref != XE_FORCEWAKE_ALL) {
>
> Under what conditions do you expect this to happen? Shouldn't
If any of the requested domain is not refcounted (not awake) above
condition will happen.
> xe_force_wake_get() flag cases where it couldn't deliver what you asked?
Internally xe_force_wake_get prints drm_notice when requested domain set
ack times out. In the driver currently caller is sometime returning
there is domain ack failure.
usage: where XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL) is used, which looks
redundant to me it can be moved inside xe_force_wake_get.
case a)
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL)
//Here caller doesn't bother about all the domains are awake and continues
func_b()
xe_force_wake_put((gt_to_fw(gt), fw_ref); // Puts only domains awake by
xe_force_wake_get.
case b)
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if(fw_ref != XE_FORCEWAKE_ALL) {
xe_force_wake_put((gt_to_fw(gt), fw_ref); // Puts only domains awake
by xe_force_wake_get.
return -ETIMEDOUT;
}
func_b()
xe_force_wake_put((gt_to_fw(gt), fw_ref);
As of now driver have both usages and this patch series caters both.
Regards,
Badal
>
> BR,
> Jani.
>
>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-19 12:32 ` Nilawar, Badal
@ 2024-09-23 12:36 ` Ghimiray, Himal Prasad
2024-09-23 16:15 ` Rodrigo Vivi
0 siblings, 1 reply; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-23 12:36 UTC (permalink / raw)
To: Nilawar, Badal, Jani Nikula, Matthew Brost
Cc: Michal Wajdeczko, intel-xe, Rodrigo Vivi, Lucas De Marchi,
Nirmoy Das
On 19-09-2024 18:02, Nilawar, Badal wrote:
>
>
> On 19-09-2024 17:06, Jani Nikula wrote:
>> On Thu, 19 Sep 2024, "Nilawar, Badal" <badal.nilawar@intel.com> wrote:
>>> On 18-09-2024 12:49, Jani Nikula wrote:
>>>> On Wed, 18 Sep 2024, "Ghimiray, Himal Prasad"
>>>> <himal.prasad.ghimiray@intel.com> wrote:
>>>>> On 18-09-2024 00:20, Matthew Brost wrote:
>>>>>> On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
>>>>>>> On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
>>>>>>>> Agreed implementation/usage will be same, will use explicit type
>>>>>>>> for
>>>>>>>> clarity.
>>>>>>>> IMO typedef unsigned int xe_wakeref_t is sufficient instead of
>>>>>>>> typedef unsigned long xe_wakeref_t;
>>>>>>>
>>>>>>> I agree with this.
>>>>>>>
>>>>>>
>>>>>> What? Really? I thought it was pretty clear rule in kernel programing
>>>>>> not use typedefs [1]. Reading through conditions acceptable and I
>>>>>> don't
>>>>>> use anything applies to this series, maybe a) applies but not really
>>>>>> convinced. The example in a) is a pte_t which can likely change
>>>>>> based on
>>>>>> platform target whereas here we only have one target and see no
>>>>>> reason
>>>>>> this needs to be opaque.
>>>>>>
>>>>>> Matt
>>>>>>
>>>>>> [1] https://www.kernel.org/doc/html/v4.14/process/coding-
>>>>>> style.html#typedefs
>>>>>
>>>>>
>>>>> While running checkpatch on my changes, patchwork had also issued a
>>>>> WARNING: NEW_TYPEDEFS: do not add new typedefs. I reviewed the
>>>>> usage in
>>>>> the Linux kernel tree and found it used in many places, which led
>>>>> me to
>>>>> assume it was safe. I now realize that I should have been more careful
>>>>> in understanding the context of its usage and referred to the kernel
>>>>> coding guidelines. This was an oversight on my part.
>>>>>
>>>>> Since this doesn’t impact the CI or runtime, I will avoid reverting to
>>>>> unsigned int immediately and will hold off until I receive the other
>>>>> review comments. I will incorporate the changes to revert it in
>>>>> subsequent versions while also addressing the other review comments.
>>>>> Thank you for bringing this to the attention.
>>>>
>>>> If you end up replicating intel_wakeref_t from i915, and go as deep as
>>>> the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
>>>> disguised as an unsigned long. It's a struct ref_tracker * when you
>>>> have
>>>> certain configs enabled.
>>>>
>>>> You could just use struct ref_tracker * everywhere. It's an opaque type
>>>> to start with.
>>>
>>> The original idea of using typedef for the fw return mask was for the
>>> sake of clarity. However, Matt B pointed that the use of typedef in this
>>> instance is not in accordance with the Linux kernel coding standards.
>>> Additionally, I agree with Matt B that there is no need for the fw
>>> return mask to be opaque; therefore, it is preferable to maintain the
>>> use of unsigned int.
>>
>> I'm not sure it's a hot idea to explicitly state that the return value
>> is a domain mask. The callers shouldn't need to care, should they?
>>
>> For example:
>>
>> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> + if (fw_ref != XE_FORCEWAKE_ALL) {
>>
>> Under what conditions do you expect this to happen? Shouldn't
>
> If any of the requested domain is not refcounted (not awake) above
> condition will happen.
>
>> xe_force_wake_get() flag cases where it couldn't deliver what you asked?
>
> Internally xe_force_wake_get prints drm_notice when requested domain set
> ack times out. In the driver currently caller is sometime returning
> there is domain ack failure.
>
> usage: where XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL) is used, which looks
> redundant to me it can be moved inside xe_force_wake_get.
Agreed, the driver should warn, in case of domain ack timeout failure,
irrespective of whether user wants to continue or not. Will move the
check inside the forcewake_get itself. Similar to what _put will do in
[v4,02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask
>
> case a)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL)
>
> //Here caller doesn't bother about all the domains are awake
> and continues
> func_b()
>
> xe_force_wake_put((gt_to_fw(gt), fw_ref); // Puts only domains
> awake by xe_force_wake_get.
>
> case b)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if(fw_ref != XE_FORCEWAKE_ALL) {
> xe_force_wake_put((gt_to_fw(gt), fw_ref); // Puts only domains
> awake by xe_force_wake_get.
> return -ETIMEDOUT;
> }
>
> func_b()
>
> xe_force_wake_put((gt_to_fw(gt), fw_ref);
>
>
> As of now driver have both usages and this patch series caters both.
>
> Regards,
> Badal
>
>>
>> BR,
>> Jani.
>>
>>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get()
2024-09-23 12:36 ` Ghimiray, Himal Prasad
@ 2024-09-23 16:15 ` Rodrigo Vivi
0 siblings, 0 replies; 58+ messages in thread
From: Rodrigo Vivi @ 2024-09-23 16:15 UTC (permalink / raw)
To: Ghimiray, Himal Prasad
Cc: Nilawar, Badal, Jani Nikula, Matthew Brost, Michal Wajdeczko,
intel-xe, Lucas De Marchi, Nirmoy Das
On Mon, Sep 23, 2024 at 06:06:51PM +0530, Ghimiray, Himal Prasad wrote:
>
>
> On 19-09-2024 18:02, Nilawar, Badal wrote:
> >
> >
> > On 19-09-2024 17:06, Jani Nikula wrote:
> > > On Thu, 19 Sep 2024, "Nilawar, Badal" <badal.nilawar@intel.com> wrote:
> > > > On 18-09-2024 12:49, Jani Nikula wrote:
> > > > > On Wed, 18 Sep 2024, "Ghimiray, Himal Prasad"
> > > > > <himal.prasad.ghimiray@intel.com> wrote:
> > > > > > On 18-09-2024 00:20, Matthew Brost wrote:
> > > > > > > On Tue, Sep 17, 2024 at 11:18:47AM +0530, Nilawar, Badal wrote:
> > > > > > > > On 13-09-2024 18:47, Ghimiray, Himal Prasad wrote:
> > > > > > > > > Agreed implementation/usage will be same,
> > > > > > > > > will use explicit type for
> > > > > > > > > clarity.
> > > > > > > > > IMO typedef unsigned int xe_wakeref_t is sufficient instead of
> > > > > > > > > typedef unsigned long xe_wakeref_t;
> > > > > > > >
> > > > > > > > I agree with this.
> > > > > > > >
> > > > > > >
> > > > > > > What? Really? I thought it was pretty clear rule in kernel programing
> > > > > > > not use typedefs [1]. Reading through conditions
> > > > > > > acceptable and I don't
> > > > > > > use anything applies to this series, maybe a) applies but not really
> > > > > > > convinced. The example in a) is a pte_t which can
> > > > > > > likely change based on
> > > > > > > platform target whereas here we only have one target
> > > > > > > and see no reason
> > > > > > > this needs to be opaque.
> > > > > > >
> > > > > > > Matt
> > > > > > >
> > > > > > > [1]
> > > > > > > https://www.kernel.org/doc/html/v4.14/process/coding-
> > > > > > > style.html#typedefs
> > > > > >
> > > > > >
> > > > > > While running checkpatch on my changes, patchwork had also issued a
> > > > > > WARNING: NEW_TYPEDEFS: do not add new typedefs. I
> > > > > > reviewed the usage in
> > > > > > the Linux kernel tree and found it used in many places,
> > > > > > which led me to
> > > > > > assume it was safe. I now realize that I should have been more careful
> > > > > > in understanding the context of its usage and referred to the kernel
> > > > > > coding guidelines. This was an oversight on my part.
> > > > > >
> > > > > > Since this doesn’t impact the CI or runtime, I will avoid reverting to
> > > > > > unsigned int immediately and will hold off until I receive the other
> > > > > > review comments. I will incorporate the changes to revert it in
> > > > > > subsequent versions while also addressing the other review comments.
> > > > > > Thank you for bringing this to the attention.
> > > > >
> > > > > If you end up replicating intel_wakeref_t from i915, and go as deep as
> > > > > the rabbit hole goes, you'll realize intel_wakeref_t is a pointer
> > > > > disguised as an unsigned long. It's a struct ref_tracker *
> > > > > when you have
> > > > > certain configs enabled.
> > > > >
> > > > > You could just use struct ref_tracker * everywhere. It's an opaque type
> > > > > to start with.
> > > >
> > > > The original idea of using typedef for the fw return mask was for the
> > > > sake of clarity. However, Matt B pointed that the use of typedef in this
> > > > instance is not in accordance with the Linux kernel coding standards.
> > > > Additionally, I agree with Matt B that there is no need for the fw
> > > > return mask to be opaque; therefore, it is preferable to maintain the
> > > > use of unsigned int.
yeap, please let's keep it simply as unsigned int for the flags of the
domains which needs to be returned.
> > >
> > > I'm not sure it's a hot idea to explicitly state that the return value
> > > is a domain mask. The callers shouldn't need to care, should they?
The caller doesn't need to know. But the relative put should only put
back what it was taken. Hence the flags.
But no need for any wakeref tracking or magic... it should be simple.
> > >
> > > For example:
> > >
> > > + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> > > + if (fw_ref != XE_FORCEWAKE_ALL) {
> > >
> > > Under what conditions do you expect this to happen? Shouldn't
> >
> > If any of the requested domain is not refcounted (not awake) above
> > condition will happen.
> >
> > > xe_force_wake_get() flag cases where it couldn't deliver what you asked?
> >
> > Internally xe_force_wake_get prints drm_notice when requested domain set
> > ack times out. In the driver currently caller is sometime returning
> > there is domain ack failure.
> >
> > usage: where XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL) is used, which looks
> > redundant to me it can be moved inside xe_force_wake_get.
>
> Agreed, the driver should warn, in case of domain ack timeout failure,
> irrespective of whether user wants to continue or not. Will move the check
> inside the forcewake_get itself.
I agree wit this as well. Always warn on non attended request and simplify
the callers.
> Similar to what _put will do in
> [v4,02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask
>
>
> >
> > case a)
> > fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> > XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL)
> >
> > //Here caller doesn't bother about all the domains are awake
> > and continues
> > func_b()
> >
> > xe_force_wake_put((gt_to_fw(gt), fw_ref); // Puts only domains
> > awake by xe_force_wake_get.
> >
> > case b)
> > fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> > if(fw_ref != XE_FORCEWAKE_ALL) {
> > xe_force_wake_put((gt_to_fw(gt), fw_ref); // Puts only domains
> > awake by xe_force_wake_get.
> > return -ETIMEDOUT;
> > }
> >
> > func_b()
> >
> > xe_force_wake_put((gt_to_fw(gt), fw_ref);
> >
> >
> > As of now driver have both usages and this patch series caters both.
> >
> > Regards,
> > Badal
> >
> > >
> > > BR,
> > > Jani.
> > >
> > >
>
^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get() Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 21:34 ` Michal Wajdeczko
2024-09-12 19:15 ` [PATCH v2 03/23] drm/xe/device: Update handling of xe_force_wake_get return Himal Prasad Ghimiray
` (28 subsequent siblings)
30 siblings, 1 reply; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Badal Nilawar, Rodrigo Vivi,
Lucas De Marchi, Nirmoy Das
Instead of calling xe_force_wake_put on all domains that were input to
xe_force_wake_get, call _put only on the domains whose reference counts
were successfully incremented by the _get call. Since the return value
of _get can be a mask that does not match any specific value in the enum
xe_force_wake_domains, change the input parameter of _put to int.
Add kernel-doc for the xe_force_wake_put()
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_force_wake.c | 24 ++++++++++++++++++++++--
drivers/gpu/drm/xe/xe_force_wake.h | 2 +-
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
index fa42d652d23f..e91bbcbddb8b 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.c
+++ b/drivers/gpu/drm/xe/xe_force_wake.c
@@ -198,8 +198,21 @@ int xe_force_wake_get(struct xe_force_wake *fw,
return ret;
}
+/**
+ * xe_force_wake_put - Decrement the refcount and put domain to sleep if refcount becomes 0
+ * @fw: Pointer to the force wake structure
+ * @domains_mask: forcewake domain mask to put reference
+ *
+ * This function reduces the reference counts for specified domain mask. If
+ * refcount for any of the specified domain reaches 0, it puts the domain to sleep
+ * and waits for acknowledgment for domain to sleep within specified timeout.
+ * Ensure this function is always called with return of xe_force_wake_get() as
+ * @domains_mask.
+ *
+ * Returns 0 in case of success or non-zero in case of timeout of ack
+ */
int xe_force_wake_put(struct xe_force_wake *fw,
- enum xe_force_wake_domains domains)
+ int domains_mask)
{
struct xe_gt *gt = fw->gt;
struct xe_force_wake_domain *domain;
@@ -207,8 +220,15 @@ int xe_force_wake_put(struct xe_force_wake *fw,
unsigned long flags;
int ret = 0;
+ /*
+ * Avoid unnecessary lock and unlock when the function is called
+ * in error path of individual domains.
+ */
+ if (!domains_mask)
+ return 0;
+
spin_lock_irqsave(&fw->lock, flags);
- for_each_fw_domain_masked(domain, domains, fw, tmp) {
+ for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
if (!--domain->ref) {
sleep |= BIT(domain->id);
domain_sleep(gt, domain);
diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
index a2577672f4e3..e2bb6b03e495 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.h
+++ b/drivers/gpu/drm/xe/xe_force_wake.h
@@ -18,7 +18,7 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
int xe_force_wake_get(struct xe_force_wake *fw,
enum xe_force_wake_domains domains);
int xe_force_wake_put(struct xe_force_wake *fw,
- enum xe_force_wake_domains domains);
+ int domains_mask);
static inline int
xe_force_wake_ref(struct xe_force_wake *fw,
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* Re: [PATCH v2 02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask
2024-09-12 19:15 ` [PATCH v2 02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask Himal Prasad Ghimiray
@ 2024-09-12 21:34 ` Michal Wajdeczko
2024-09-13 4:05 ` Ghimiray, Himal Prasad
0 siblings, 1 reply; 58+ messages in thread
From: Michal Wajdeczko @ 2024-09-12 21:34 UTC (permalink / raw)
To: Himal Prasad Ghimiray, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
> Instead of calling xe_force_wake_put on all domains that were input to
> xe_force_wake_get, call _put only on the domains whose reference counts
> were successfully incremented by the _get call. Since the return value
> of _get can be a mask that does not match any specific value in the enum
> xe_force_wake_domains, change the input parameter of _put to int.
>
> Add kernel-doc for the xe_force_wake_put()
>
> Cc: Badal Nilawar <badal.nilawar@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Nirmoy Das <nirmoy.das@intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> ---
> drivers/gpu/drm/xe/xe_force_wake.c | 24 ++++++++++++++++++++++--
> drivers/gpu/drm/xe/xe_force_wake.h | 2 +-
> 2 files changed, 23 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
> index fa42d652d23f..e91bbcbddb8b 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.c
> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
> @@ -198,8 +198,21 @@ int xe_force_wake_get(struct xe_force_wake *fw,
> return ret;
> }
>
> +/**
> + * xe_force_wake_put - Decrement the refcount and put domain to sleep if refcount becomes 0
> + * @fw: Pointer to the force wake structure
> + * @domains_mask: forcewake domain mask to put reference
> + *
> + * This function reduces the reference counts for specified domain mask. If
> + * refcount for any of the specified domain reaches 0, it puts the domain to sleep
> + * and waits for acknowledgment for domain to sleep within specified timeout.
> + * Ensure this function is always called with return of xe_force_wake_get() as
> + * @domains_mask.
> + *
> + * Returns 0 in case of success or non-zero in case of timeout of ack
what's the expectation for the caller when this function returns an
error? if just WARN() then maybe this can be done inside this function
and we can make it void ?
> + */
> int xe_force_wake_put(struct xe_force_wake *fw,
> - enum xe_force_wake_domains domains)
> + int domains_mask)
> {
> struct xe_gt *gt = fw->gt;
> struct xe_force_wake_domain *domain;
> @@ -207,8 +220,15 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> unsigned long flags;
> int ret = 0;
>
> + /*
> + * Avoid unnecessary lock and unlock when the function is called
> + * in error path of individual domains.
> + */
> + if (!domains_mask)
> + return 0;
> +
> spin_lock_irqsave(&fw->lock, flags);
> - for_each_fw_domain_masked(domain, domains, fw, tmp) {
> + for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
> if (!--domain->ref) {
> sleep |= BIT(domain->id);
> domain_sleep(gt, domain);
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
> index a2577672f4e3..e2bb6b03e495 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.h
> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
> @@ -18,7 +18,7 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
> int xe_force_wake_get(struct xe_force_wake *fw,
> enum xe_force_wake_domains domains);
> int xe_force_wake_put(struct xe_force_wake *fw,
> - enum xe_force_wake_domains domains);
> + int domains_mask);
>
> static inline int
> xe_force_wake_ref(struct xe_force_wake *fw,
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask
2024-09-12 21:34 ` Michal Wajdeczko
@ 2024-09-13 4:05 ` Ghimiray, Himal Prasad
0 siblings, 0 replies; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-13 4:05 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 03:04, Michal Wajdeczko wrote:
>
>
> On 12.09.2024 21:15, Himal Prasad Ghimiray wrote:
>> Instead of calling xe_force_wake_put on all domains that were input to
>> xe_force_wake_get, call _put only on the domains whose reference counts
>> were successfully incremented by the _get call. Since the return value
>> of _get can be a mask that does not match any specific value in the enum
>> xe_force_wake_domains, change the input parameter of _put to int.
>>
>> Add kernel-doc for the xe_force_wake_put()
>>
>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_force_wake.c | 24 ++++++++++++++++++++++--
>> drivers/gpu/drm/xe/xe_force_wake.h | 2 +-
>> 2 files changed, 23 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
>> index fa42d652d23f..e91bbcbddb8b 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>> @@ -198,8 +198,21 @@ int xe_force_wake_get(struct xe_force_wake *fw,
>> return ret;
>> }
>>
>> +/**
>> + * xe_force_wake_put - Decrement the refcount and put domain to sleep if refcount becomes 0
>> + * @fw: Pointer to the force wake structure
>> + * @domains_mask: forcewake domain mask to put reference
>> + *
>> + * This function reduces the reference counts for specified domain mask. If
>> + * refcount for any of the specified domain reaches 0, it puts the domain to sleep
>> + * and waits for acknowledgment for domain to sleep within specified timeout.
>> + * Ensure this function is always called with return of xe_force_wake_get() as
>> + * @domains_mask.
>> + *
>> + * Returns 0 in case of success or non-zero in case of timeout of ack
>
> what's the expectation for the caller when this function returns an
> error? if just WARN() then maybe this can be done inside this function
> and we can make it void ?
Completely agreed here. Currently the failure is returned as error
leading to abort/further escalation in few cases. IMO, xe_force_wake_put
failure shouldn't be leading to abort/furtherescalation therefore have
raised a patch for the same and is part of this series:
[PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
>
>> + */
>> int xe_force_wake_put(struct xe_force_wake *fw,
>> - enum xe_force_wake_domains domains)
>> + int domains_mask)
>> {
>> struct xe_gt *gt = fw->gt;
>> struct xe_force_wake_domain *domain;
>> @@ -207,8 +220,15 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> unsigned long flags;
>> int ret = 0;
>>
>> + /*
>> + * Avoid unnecessary lock and unlock when the function is called
>> + * in error path of individual domains.
>> + */
>> + if (!domains_mask)
>> + return 0;
>> +
>> spin_lock_irqsave(&fw->lock, flags);
>> - for_each_fw_domain_masked(domain, domains, fw, tmp) {
>> + for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>> if (!--domain->ref) {
>> sleep |= BIT(domain->id);
>> domain_sleep(gt, domain);
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
>> index a2577672f4e3..e2bb6b03e495 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>> @@ -18,7 +18,7 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>> int xe_force_wake_get(struct xe_force_wake *fw,
>> enum xe_force_wake_domains domains);
>> int xe_force_wake_put(struct xe_force_wake *fw,
>> - enum xe_force_wake_domains domains);
>> + int domains_mask);
>>
>> static inline int
>> xe_force_wake_ref(struct xe_force_wake *fw,
^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 03/23] drm/xe/device: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 01/23] drm/xe: Error handling in xe_force_wake_get() Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 02/23] drm/xe: Modify xe_force_wake_put to handle _get returned mask Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 04/23] drm/xe/hdcp: " Himal Prasad Ghimiray
` (27 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Badal Nilawar, Rodrigo Vivi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, the return value will be 0 for single domains (excluding
XE_FORCEWAKE_ALL) in the event of a failure. Modify the return handling
of xe_force_wake_get() accordingly and pass the return value as input to
xe_force_wake_put().
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 4d3c794f134c..5edb1cf51ea5 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -601,7 +601,7 @@ static int probe_has_flat_ccs(struct xe_device *xe)
{
struct xe_gt *gt;
u32 reg;
- int err;
+ int fw_ref;
/* Always enabled/disabled, no runtime check to do */
if (GRAPHICS_VER(xe) < 20 || !xe->info.has_flat_ccs)
@@ -609,9 +609,9 @@ static int probe_has_flat_ccs(struct xe_device *xe)
gt = xe_root_mmio_gt(xe);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
- return err;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
+ return -ETIMEDOUT;
reg = xe_gt_mcr_unicast_read_any(gt, XE2_FLAT_CCS_BASE_RANGE_LOWER);
xe->info.has_flat_ccs = (reg & XE2_FLAT_CCS_ENABLE);
@@ -620,7 +620,7 @@ static int probe_has_flat_ccs(struct xe_device *xe)
drm_dbg(&xe->drm,
"Flat CCS has been disabled in bios, May lead to performance impact");
- return xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ return xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
int xe_device_probe(struct xe_device *xe)
@@ -867,6 +867,7 @@ void xe_device_td_flush(struct xe_device *xe)
{
struct xe_gt *gt;
u8 id;
+ int fw_ref;
if (!IS_DGFX(xe) || GRAPHICS_VER(xe) < 20)
return;
@@ -880,7 +881,8 @@ void xe_device_td_flush(struct xe_device *xe)
if (xe_gt_is_media_type(gt))
continue;
- if (xe_force_wake_get(gt_to_fw(gt), XE_FW_GT))
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
return;
xe_mmio_write32(>->mmio, XE2_TDF_CTRL, TRANSIENT_FLUSH_REQUEST);
@@ -895,22 +897,22 @@ void xe_device_td_flush(struct xe_device *xe)
150, NULL, false))
xe_gt_err_once(gt, "TD flush timeout\n");
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
}
void xe_device_l2_flush(struct xe_device *xe)
{
struct xe_gt *gt;
- int err;
+ int fw_ref;
gt = xe_root_mmio_gt(xe);
if (!XE_WA(gt, 16023588340))
return;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
return;
spin_lock(>->global_invl_lock);
@@ -920,7 +922,7 @@ void xe_device_l2_flush(struct xe_device *xe)
xe_gt_err_once(gt, "Global invalidation timeout\n");
spin_unlock(>->global_invl_lock);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
u32 xe_device_ccs_bytes(struct xe_device *xe, u64 size)
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 04/23] drm/xe/hdcp: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (2 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 03/23] drm/xe/device: Update handling of xe_force_wake_get return Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-13 4:23 ` Kandpal, Suraj
2024-09-12 19:15 ` [PATCH v2 05/23] drm/xe/gsc: " Himal Prasad Ghimiray
` (26 subsequent siblings)
30 siblings, 1 reply; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Suraj Kandpal, Daniele Ceraolo Spurio,
Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented
domain mask, the return value will be 0 for single domains (excluding
XE_FORCEWAKE_ALL) in the event of a failure. Modify the return
handling of xe_force_wake_get() accordingly and pass the return value as
input to xe_force_wake_put().
Cc: Suraj Kandpal <suraj.kandpal@intel.com>
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/display/xe_hdcp_gsc.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
index 6619a40aed15..1db8a5c62f60 100644
--- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
+++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
@@ -41,6 +41,7 @@ bool intel_hdcp_gsc_check_status(struct xe_device *xe)
struct xe_gt *gt = tile->media_gt;
struct xe_gsc *gsc = >->uc.gsc;
bool ret = true;
+ int fw_ref;
if (!gsc && !xe_uc_fw_is_enabled(&gsc->fw)) {
drm_dbg_kms(&xe->drm,
@@ -49,7 +50,8 @@ bool intel_hdcp_gsc_check_status(struct xe_device *xe)
}
xe_pm_runtime_get(xe);
- if (xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC)) {
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
+ if (!fw_ref) {
drm_dbg_kms(&xe->drm,
"failed to get forcewake to check proxy status\n");
ret = false;
@@ -59,7 +61,7 @@ bool intel_hdcp_gsc_check_status(struct xe_device *xe)
if (!xe_gsc_proxy_init_done(gsc))
ret = false;
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GSC);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
out:
xe_pm_runtime_put(xe);
return ret;
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* RE: [PATCH v2 04/23] drm/xe/hdcp: Update handling of xe_force_wake_get return
2024-09-12 19:15 ` [PATCH v2 04/23] drm/xe/hdcp: " Himal Prasad Ghimiray
@ 2024-09-13 4:23 ` Kandpal, Suraj
0 siblings, 0 replies; 58+ messages in thread
From: Kandpal, Suraj @ 2024-09-13 4:23 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, intel-xe@lists.freedesktop.org
Cc: Ceraolo Spurio, Daniele, Vivi, Rodrigo, De Marchi, Lucas
> -----Original Message-----
> From: Ghimiray, Himal Prasad <himal.prasad.ghimiray@intel.com>
> Sent: Friday, September 13, 2024 12:46 AM
> To: intel-xe@lists.freedesktop.org
> Cc: Ghimiray, Himal Prasad <himal.prasad.ghimiray@intel.com>; Kandpal,
> Suraj <suraj.kandpal@intel.com>; Ceraolo Spurio, Daniele
> <daniele.ceraolospurio@intel.com>; Vivi, Rodrigo <rodrigo.vivi@intel.com>;
> De Marchi, Lucas <lucas.demarchi@intel.com>
> Subject: [PATCH v2 04/23] drm/xe/hdcp: Update handling of
> xe_force_wake_get return
>
> With xe_force_wake_get() now returning the refcount-incremented domain
> mask, the return value will be 0 for single domains (excluding
> XE_FORCEWAKE_ALL) in the event of a failure. Modify the return handling
> of xe_force_wake_get() accordingly and pass the return value as input to
> xe_force_wake_put().
LGTM,
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com>
>
> Cc: Suraj Kandpal <suraj.kandpal@intel.com>
> Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> ---
> drivers/gpu/drm/xe/display/xe_hdcp_gsc.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> index 6619a40aed15..1db8a5c62f60 100644
> --- a/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> +++ b/drivers/gpu/drm/xe/display/xe_hdcp_gsc.c
> @@ -41,6 +41,7 @@ bool intel_hdcp_gsc_check_status(struct xe_device *xe)
> struct xe_gt *gt = tile->media_gt;
> struct xe_gsc *gsc = >->uc.gsc;
> bool ret = true;
> + int fw_ref;
>
> if (!gsc && !xe_uc_fw_is_enabled(&gsc->fw)) {
> drm_dbg_kms(&xe->drm,
> @@ -49,7 +50,8 @@ bool intel_hdcp_gsc_check_status(struct xe_device *xe)
> }
>
> xe_pm_runtime_get(xe);
> - if (xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC)) {
> + fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
> + if (!fw_ref) {
> drm_dbg_kms(&xe->drm,
> "failed to get forcewake to check proxy status\n");
> ret = false;
> @@ -59,7 +61,7 @@ bool intel_hdcp_gsc_check_status(struct xe_device *xe)
> if (!xe_gsc_proxy_init_done(gsc))
> ret = false;
>
> - xe_force_wake_put(gt_to_fw(gt), XE_FW_GSC);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> out:
> xe_pm_runtime_put(xe);
> return ret;
> --
> 2.34.1
^ permalink raw reply [flat|nested] 58+ messages in thread
* [PATCH v2 05/23] drm/xe/gsc: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (3 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 04/23] drm/xe/hdcp: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 06/23] drm/xe/gt: " Himal Prasad Ghimiray
` (25 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Daniele Ceraolo Spurio, Rodrigo Vivi,
Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
A non-zero return value in the case of XE_FORCEWAKE_ALL does not
necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_gsc.c | 21 ++++++++++++---------
drivers/gpu/drm/xe/xe_gsc_proxy.c | 9 ++++-----
2 files changed, 16 insertions(+), 14 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gsc.c b/drivers/gpu/drm/xe/xe_gsc.c
index 9cb326af5931..d91a3e885516 100644
--- a/drivers/gpu/drm/xe/xe_gsc.c
+++ b/drivers/gpu/drm/xe/xe_gsc.c
@@ -260,10 +260,11 @@ static int gsc_upload_and_init(struct xe_gsc *gsc)
{
struct xe_gt *gt = gsc_to_gt(gsc);
struct xe_tile *tile = gt_to_tile(gt);
+ int fw_ref;
int ret;
if (XE_WA(tile->primary_gt, 14018094691)) {
- ret = xe_force_wake_get(gt_to_fw(tile->primary_gt), XE_FORCEWAKE_ALL);
+ fw_ref = xe_force_wake_get(gt_to_fw(tile->primary_gt), XE_FORCEWAKE_ALL);
/*
* If the forcewake fails we want to keep going, because the worst
@@ -271,7 +272,7 @@ static int gsc_upload_and_init(struct xe_gsc *gsc)
* which is not fatal. We still throw a warning so the issue is
* seen if it happens.
*/
- xe_gt_WARN_ON(tile->primary_gt, ret);
+ xe_gt_WARN_ON(tile->primary_gt, fw_ref != XE_FORCEWAKE_ALL);
xe_gt_mcr_multicast_write(tile->primary_gt,
EU_SYSTOLIC_LIC_THROTTLE_CTL_WITH_LOCK,
@@ -281,7 +282,7 @@ static int gsc_upload_and_init(struct xe_gsc *gsc)
ret = gsc_upload(gsc);
if (XE_WA(tile->primary_gt, 14018094691))
- xe_force_wake_put(gt_to_fw(tile->primary_gt), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(tile->primary_gt), fw_ref);
if (ret)
return ret;
@@ -352,6 +353,7 @@ static void gsc_work(struct work_struct *work)
struct xe_gt *gt = gsc_to_gt(gsc);
struct xe_device *xe = gt_to_xe(gt);
u32 actions;
+ int fw_ref;
int ret;
spin_lock_irq(&gsc->lock);
@@ -360,7 +362,8 @@ static void gsc_work(struct work_struct *work)
spin_unlock_irq(&gsc->lock);
xe_pm_runtime_get(xe);
- xe_gt_WARN_ON(gt, xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
+ xe_gt_WARN_ON(gt, !fw_ref);
if (actions & GSC_ACTION_ER_COMPLETE) {
ret = gsc_er_complete(gt);
@@ -380,7 +383,7 @@ static void gsc_work(struct work_struct *work)
xe_gsc_proxy_request_handler(gsc);
out:
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GSC);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_pm_runtime_put(xe);
}
@@ -600,7 +603,7 @@ void xe_gsc_print_info(struct xe_gsc *gsc, struct drm_printer *p)
{
struct xe_gt *gt = gsc_to_gt(gsc);
struct xe_mmio *mmio = >->mmio;
- int err;
+ int fw_ref;
xe_uc_fw_print(&gsc->fw, p);
@@ -609,8 +612,8 @@ void xe_gsc_print_info(struct xe_gsc *gsc, struct drm_printer *p)
if (!xe_uc_fw_is_enabled(&gsc->fw))
return;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
+ if (!fw_ref)
return;
drm_printf(p, "\nHECI1 FWSTS: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
@@ -621,5 +624,5 @@ void xe_gsc_print_info(struct xe_gsc *gsc, struct drm_printer *p)
xe_mmio_read32(mmio, HECI_FWSTS5(MTL_GSC_HECI1_BASE)),
xe_mmio_read32(mmio, HECI_FWSTS6(MTL_GSC_HECI1_BASE)));
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GSC);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
diff --git a/drivers/gpu/drm/xe/xe_gsc_proxy.c b/drivers/gpu/drm/xe/xe_gsc_proxy.c
index 6d89c22ae811..2e4a6c332412 100644
--- a/drivers/gpu/drm/xe/xe_gsc_proxy.c
+++ b/drivers/gpu/drm/xe/xe_gsc_proxy.c
@@ -450,22 +450,21 @@ void xe_gsc_proxy_remove(struct xe_gsc *gsc)
{
struct xe_gt *gt = gsc_to_gt(gsc);
struct xe_device *xe = gt_to_xe(gt);
- int err = 0;
+ int fw_ref = 0;
if (!gsc->proxy.component_added)
return;
/* disable HECI2 IRQs */
xe_pm_runtime_get(xe);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GSC);
+ if (!fw_ref)
xe_gt_err(gt, "failed to get forcewake to disable GSC interrupts\n");
/* try do disable irq even if forcewake failed */
gsc_proxy_irq_toggle(gsc, false);
- if (!err)
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GSC);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_pm_runtime_put(xe);
xe_gsc_wait_for_worker_completion(gsc);
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 06/23] drm/xe/gt: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (4 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 05/23] drm/xe/gsc: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 07/23] drm/xe/xe_gt_idle: " Himal Prasad Ghimiray
` (24 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Matthew Brost, Rodrigo Vivi,
Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
A non-zero return value in the case of XE_FORCEWAKE_ALL does not
necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_gt.c | 109 ++++++++++++++++++++-----------------
1 file changed, 60 insertions(+), 49 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index 935d1dfd9459..b0126daee359 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -100,13 +100,13 @@ void xe_gt_sanitize(struct xe_gt *gt)
static void xe_gt_enable_host_l2_vram(struct xe_gt *gt)
{
u32 reg;
- int err;
+ int fw_ref;
if (!XE_WA(gt, 16023588340))
return;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (WARN_ON(err))
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (WARN_ON(!fw_ref))
return;
if (!xe_gt_is_media_type(gt)) {
@@ -117,13 +117,13 @@ static void xe_gt_enable_host_l2_vram(struct xe_gt *gt)
}
xe_gt_mcr_multicast_write(gt, XEHPC_L3CLOS_MASK(3), 0x3);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
static void xe_gt_disable_host_l2_vram(struct xe_gt *gt)
{
+ int fw_ref;
u32 reg;
- int err;
if (!XE_WA(gt, 16023588340))
return;
@@ -131,15 +131,15 @@ static void xe_gt_disable_host_l2_vram(struct xe_gt *gt)
if (xe_gt_is_media_type(gt))
return;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (WARN_ON(err))
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (WARN_ON(!fw_ref))
return;
reg = xe_gt_mcr_unicast_read_any(gt, XE2_GAMREQSTRM_CTRL);
reg &= ~CG_DIS_CNTLBUS;
xe_gt_mcr_multicast_write(gt, XE2_GAMREQSTRM_CTRL, reg);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
/**
@@ -405,11 +405,13 @@ static void dump_pat_on_error(struct xe_gt *gt)
static int gt_fw_domain_init(struct xe_gt *gt)
{
- int err, i;
+ int fw_ref, err, i;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref) {
+ err = -ETIMEDOUT;
goto err_hw_fence_irq;
+ }
if (!xe_gt_is_media_type(gt)) {
err = xe_ggtt_init(gt_to_tile(gt)->mem.ggtt);
@@ -444,14 +446,14 @@ static int gt_fw_domain_init(struct xe_gt *gt)
*/
gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
- err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
XE_WARN_ON(err);
return 0;
err_force_wake:
dump_pat_on_error(gt);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_hw_fence_irq:
for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
xe_hw_fence_irq_finish(>->fence_irq[i]);
@@ -461,11 +463,13 @@ static int gt_fw_domain_init(struct xe_gt *gt)
static int all_fw_domain_init(struct xe_gt *gt)
{
- int err, i;
+ int fw_ref, err, i;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err)
- goto err_hw_fence_irq;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ err = -ETIMEDOUT;
+ goto err_force_wake;
+ }
xe_gt_mcr_set_implicit_defaults(gt);
xe_reg_sr_apply_mmio(>->reg_sr, gt);
@@ -529,14 +533,13 @@ static int all_fw_domain_init(struct xe_gt *gt)
if (IS_SRIOV_PF(gt_to_xe(gt)))
xe_gt_sriov_pf_init_hw(gt);
- err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
XE_WARN_ON(err);
return 0;
err_force_wake:
- xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
-err_hw_fence_irq:
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
for (i = 0; i < XE_ENGINE_CLASS_MAX; ++i)
xe_hw_fence_irq_finish(>->fence_irq[i]);
@@ -549,11 +552,11 @@ static int all_fw_domain_init(struct xe_gt *gt)
*/
int xe_gt_init_hwconfig(struct xe_gt *gt)
{
- int err;
+ int fw_ref, err;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
- goto out;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
+ return -ETIMEDOUT;
xe_gt_mcr_init_early(gt);
xe_pat_init(gt);
@@ -571,8 +574,7 @@ int xe_gt_init_hwconfig(struct xe_gt *gt)
xe_gt_enable_host_l2_vram(gt);
out_fw:
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
-out:
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return err;
}
@@ -743,7 +745,7 @@ static int do_gt_restart(struct xe_gt *gt)
static int gt_reset(struct xe_gt *gt)
{
- int err;
+ int fw_ref, err;
if (xe_device_wedged(gt_to_xe(gt)))
return -ECANCELED;
@@ -763,9 +765,11 @@ static int gt_reset(struct xe_gt *gt)
xe_gt_sanitize(gt);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err)
- goto err_msg;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ err = -ETIMEDOUT;
+ goto err_out;
+ }
xe_uc_gucrc_disable(>->uc);
xe_uc_stop_prepare(>->uc);
@@ -783,7 +787,7 @@ static int gt_reset(struct xe_gt *gt)
if (err)
goto err_out;
- err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
XE_WARN_ON(err);
xe_pm_runtime_put(gt_to_xe(gt));
@@ -792,8 +796,7 @@ static int gt_reset(struct xe_gt *gt)
return 0;
err_out:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
-err_msg:
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
XE_WARN_ON(xe_uc_start(>->uc));
err_fail:
xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
@@ -825,22 +828,25 @@ void xe_gt_reset_async(struct xe_gt *gt)
void xe_gt_suspend_prepare(struct xe_gt *gt)
{
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ int fw_ref;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL);
xe_uc_stop_prepare(>->uc);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
}
int xe_gt_suspend(struct xe_gt *gt)
{
- int err;
+ int fw_ref, err;
xe_gt_dbg(gt, "suspending\n");
xe_gt_sanitize(gt);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL)
goto err_msg;
err = xe_uc_suspend(>->uc);
@@ -851,14 +857,15 @@ int xe_gt_suspend(struct xe_gt *gt)
xe_gt_disable_host_l2_vram(gt);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
xe_gt_dbg(gt, "suspended\n");
return 0;
-err_force_wake:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
err_msg:
+ err = -ETIMEDOUT;
+err_force_wake:
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
return err;
@@ -866,9 +873,12 @@ int xe_gt_suspend(struct xe_gt *gt)
void xe_gt_shutdown(struct xe_gt *gt)
{
- xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ int fw_ref;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL);
do_gt_reset(gt);
- xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
/**
@@ -891,11 +901,11 @@ int xe_gt_sanitize_freq(struct xe_gt *gt)
int xe_gt_resume(struct xe_gt *gt)
{
- int err;
+ int fw_ref, err;
xe_gt_dbg(gt, "resuming\n");
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL)
goto err_msg;
err = do_gt_restart(gt);
@@ -904,14 +914,15 @@ int xe_gt_resume(struct xe_gt *gt)
xe_gt_idle_enable_pg(gt);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
xe_gt_dbg(gt, "resumed\n");
return 0;
-err_force_wake:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
err_msg:
+ err = -ETIMEDOUT;
+err_force_wake:
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
return err;
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 07/23] drm/xe/xe_gt_idle: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (5 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 06/23] drm/xe/gt: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 08/23] drm/xe/devcoredump: " Himal Prasad Ghimiray
` (23 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_gt_idle.c | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
index 531924b6c0a1..9af81b07ab7a 100644
--- a/drivers/gpu/drm/xe/xe_gt_idle.c
+++ b/drivers/gpu/drm/xe/xe_gt_idle.c
@@ -106,7 +106,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
struct xe_gt_idle *gtidle = >->gtidle;
struct xe_mmio *mmio = >->mmio;
u32 vcs_mask, vecs_mask;
- int i, j;
+ int fw_ref, i, j;
if (IS_SRIOV_VF(xe))
return;
@@ -132,7 +132,8 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
VDN_MFXVDENC_POWERGATE_ENABLE(j));
}
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FW_GT));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ XE_WARN_ON(!fw_ref);
if (xe->info.skip_guc_pc) {
/*
* GuC sets the hysteresis value when GuC PC is enabled
@@ -143,12 +144,13 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
}
xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FW_GT));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
}
void xe_gt_idle_disable_pg(struct xe_gt *gt)
{
struct xe_gt_idle *gtidle = >->gtidle;
+ int fw_ref;
if (IS_SRIOV_VF(gt_to_xe(gt)))
return;
@@ -156,9 +158,10 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
xe_device_assert_mem_access(gt_to_xe(gt));
gtidle->powergate_enable = 0;
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FW_GT));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ XE_WARN_ON(!fw_ref);
xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FW_GT));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
}
/**
@@ -177,7 +180,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
enum xe_gt_idle_state state;
u32 pg_enabled, pg_status = 0;
u32 vcs_mask, vecs_mask;
- int err, n;
+ int fw_ref, n;
/*
* Media Slices
*
@@ -213,14 +216,14 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
/* Do not wake the GT to read powergating status */
if (state != GT_IDLE_C6) {
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
- return err;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
+ return -ETIMEDOUT;
pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FW_GT));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
}
if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
@@ -303,13 +306,15 @@ static void gt_idle_fini(void *arg)
{
struct kobject *kobj = arg;
struct xe_gt *gt = kobj_to_gt(kobj->parent);
+ int fw_ref;
xe_gt_idle_disable_pg(gt);
if (gt_to_xe(gt)->info.skip_guc_pc) {
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FW_GT));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ XE_WARN_ON(!fw_ref);
xe_gt_idle_disable_c6(gt);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
sysfs_remove_files(kobj, gt_idle_attrs);
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 08/23] drm/xe/devcoredump: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (6 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 07/23] drm/xe/xe_gt_idle: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 09/23] drm/xe/tests/mocs: Update xe_force_wake_get() return handling Himal Prasad Ghimiray
` (22 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a non-zero return value in the case of XE_FORCEWAKE_ALL does not
necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_devcoredump.c | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_devcoredump.c b/drivers/gpu/drm/xe/xe_devcoredump.c
index bdb76e834e4c..6174cea6ef72 100644
--- a/drivers/gpu/drm/xe/xe_devcoredump.c
+++ b/drivers/gpu/drm/xe/xe_devcoredump.c
@@ -141,13 +141,15 @@ static void xe_devcoredump_deferred_snap_work(struct work_struct *work)
{
struct xe_devcoredump_snapshot *ss = container_of(work, typeof(*ss), work);
struct xe_devcoredump *coredump = container_of(ss, typeof(*coredump), snapshot);
+ int fw_ref;
/* keep going if fw fails as we still want to save the memory and SW data */
- if (xe_force_wake_get(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL))
+ fw_ref = xe_force_wake_get(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL)
xe_gt_info(ss->gt, "failed to get forcewake for coredump capture\n");
xe_vm_snapshot_capture_delayed(ss->vm);
xe_guc_exec_queue_snapshot_capture_delayed(ss->ge);
- xe_force_wake_put(gt_to_fw(ss->gt), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(ss->gt), fw_ref);
/* Calculate devcoredump size */
ss->read.size = __xe_devcoredump_read(NULL, INT_MAX, coredump);
@@ -220,7 +222,7 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,
u32 width_mask = (0x1 << q->width) - 1;
const char *process_name = "no process";
- int i;
+ int i, fw_ref;
bool cookie;
ss->snapshot_time = ktime_get_real();
@@ -244,7 +246,8 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,
}
/* keep going if fw fails as we still want to save the memory and SW data */
- if (xe_force_wake_get(gt_to_fw(q->gt), XE_FORCEWAKE_ALL))
+ fw_ref = xe_force_wake_get(gt_to_fw(q->gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL)
xe_gt_info(ss->gt, "failed to get forcewake for coredump capture\n");
coredump->snapshot.ct = xe_guc_ct_snapshot_capture(&guc->ct, true);
@@ -263,7 +266,7 @@ static void devcoredump_snapshot(struct xe_devcoredump *coredump,
queue_work(system_unbound_wq, &ss->work);
- xe_force_wake_put(gt_to_fw(q->gt), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(q->gt), fw_ref);
dma_fence_end_signalling(cookie);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 09/23] drm/xe/tests/mocs: Update xe_force_wake_get() return handling
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (7 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 08/23] drm/xe/devcoredump: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 10/23] drm/xe/mocs: Update handling of xe_force_wake_get return Himal Prasad Ghimiray
` (21 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains.
Change assert condition to incorporate this change in return and
pass the return value to xe_force_wake_put()
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/tests/xe_mocs.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/tests/xe_mocs.c b/drivers/gpu/drm/xe/tests/xe_mocs.c
index ea932c051cc7..2a4c97d67760 100644
--- a/drivers/gpu/drm/xe/tests/xe_mocs.c
+++ b/drivers/gpu/drm/xe/tests/xe_mocs.c
@@ -45,10 +45,10 @@ static void read_l3cc_table(struct xe_gt *gt,
u32 l3cc, l3cc_expected;
unsigned int i;
u32 reg_val;
- u32 ret;
+ int fw_ref;
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- KUNIT_ASSERT_EQ_MSG(test, ret, 0, "Forcewake Failed.\n");
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ KUNIT_ASSERT_NE_MSG(test, fw_ref, 0, "Forcewake Failed.\n");
for (i = 0; i < info->num_mocs_regs; i++) {
if (!(i & 1)) {
@@ -72,7 +72,7 @@ static void read_l3cc_table(struct xe_gt *gt,
KUNIT_EXPECT_EQ_MSG(test, l3cc_expected, l3cc,
"l3cc idx=%u has incorrect val.\n", i);
}
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
static void read_mocs_table(struct xe_gt *gt,
@@ -82,13 +82,13 @@ static void read_mocs_table(struct xe_gt *gt,
u32 mocs, mocs_expected;
unsigned int i;
u32 reg_val;
- u32 ret;
+ int fw_ref;
KUNIT_EXPECT_TRUE_MSG(test, info->unused_entries_index,
"Unused entries index should have been defined\n");
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- KUNIT_ASSERT_EQ_MSG(test, ret, 0, "Forcewake Failed.\n");
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ KUNIT_ASSERT_NE_MSG(test, fw_ref, 0, "Forcewake Failed.\n");
for (i = 0; i < info->num_mocs_regs; i++) {
if (regs_are_mcr(gt))
@@ -106,7 +106,7 @@ static void read_mocs_table(struct xe_gt *gt,
"mocs reg 0x%x has incorrect val.\n", i);
}
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
static int mocs_kernel_test_run_device(struct xe_device *xe)
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 10/23] drm/xe/mocs: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (8 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 09/23] drm/xe/tests/mocs: Update xe_force_wake_get() return handling Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 11/23] drm/xe/xe_drm_client: " Himal Prasad Ghimiray
` (20 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_mocs.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_mocs.c b/drivers/gpu/drm/xe/xe_mocs.c
index 8df41cd12d51..4f1e0fba0e31 100644
--- a/drivers/gpu/drm/xe/xe_mocs.c
+++ b/drivers/gpu/drm/xe/xe_mocs.c
@@ -775,23 +775,23 @@ void xe_mocs_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_mocs_info table;
unsigned int flags;
- u32 ret;
+ int fw_ref;
struct xe_device *xe = gt_to_xe(gt);
flags = get_mocs_settings(xe, &table);
xe_pm_runtime_get_noresume(xe);
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (ret)
+ if (!fw_ref)
goto err_fw;
table.ops->dump(&table, flags, gt, p);
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, !ret);
+ xe_assert(xe, fw_ref);
xe_pm_runtime_put(xe);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 11/23] drm/xe/xe_drm_client: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (9 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 10/23] drm/xe/mocs: Update handling of xe_force_wake_get return Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 12/23] drm/xe/xe_gt_debugfs: " Himal Prasad Ghimiray
` (19 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
Since xe_force_wake_get() now returns a domain mask with an incremented
reference count, a return value of 0 indicates a failure, while a
non-zero return value that matches the input domain parameter signifies
success.
Update the return handling of xe_force_wake_get() to reflect this, and
ensure that the return value is passed to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_drm_client.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
index c4add8b38bbd..01f643f6aaba 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.c
+++ b/drivers/gpu/drm/xe/xe_drm_client.c
@@ -278,6 +278,7 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
struct xe_hw_engine *hwe;
struct xe_exec_queue *q;
u64 gpu_timestamp;
+ int fw_ref;
xe_pm_runtime_get(xe);
@@ -296,13 +297,16 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
continue;
fw = xe_hw_engine_to_fw_domain(hwe);
- if (xe_force_wake_get(gt_to_fw(gt), fw)) {
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
+ if (fw_ref != fw) {
hwe = NULL;
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
break;
}
gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
break;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 12/23] drm/xe/xe_gt_debugfs: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (10 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 11/23] drm/xe/xe_drm_client: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 13/23] drm/xe/guc: " Himal Prasad Ghimiray
` (18 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented
domain mask, a non-zero return value in the case of XE_FORCEWAKE_ALL does
not necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and
pass the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_gt_debugfs.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
index cbc43973ff7e..86146de1d31c 100644
--- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
@@ -90,19 +90,20 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
struct xe_device *xe = gt_to_xe(gt);
struct xe_hw_engine *hwe;
enum xe_hw_engine_id id;
- int err;
+ int fw_ref, err;
xe_pm_runtime_get(xe);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err) {
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
xe_pm_runtime_put(xe);
- return err;
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ return -ETIMEDOUT;
}
for_each_hw_engine(hwe, gt, id)
xe_hw_engine_print(hwe, p);
- err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_pm_runtime_put(xe);
if (err)
return err;
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 13/23] drm/xe/guc: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (11 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 12/23] drm/xe/xe_gt_debugfs: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 14/23] drm/xe/huc: " Himal Prasad Ghimiray
` (17 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Matthew Brost, Rodrigo Vivi,
Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
A non-zero return value in the case of XE_FORCEWAKE_ALL does not
necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_guc.c | 14 +++++----
drivers/gpu/drm/xe/xe_guc_pc.c | 54 ++++++++++++++++++++--------------
2 files changed, 40 insertions(+), 28 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_guc.c b/drivers/gpu/drm/xe/xe_guc.c
index 1eb5bb7e8771..005531dcffa9 100644
--- a/drivers/gpu/drm/xe/xe_guc.c
+++ b/drivers/gpu/drm/xe/xe_guc.c
@@ -246,10 +246,12 @@ static void guc_fini_hw(void *arg)
{
struct xe_guc *guc = arg;
struct xe_gt *gt = guc_to_gt(guc);
+ int fw_ref;
- xe_gt_WARN_ON(gt, xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ xe_gt_WARN_ON(gt, fw_ref != XE_FORCEWAKE_ALL);
xe_uc_fini_hw(&guc_to_gt(guc)->uc);
- xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
/**
@@ -1150,13 +1152,13 @@ void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
{
struct xe_gt *gt = guc_to_gt(guc);
u32 status;
- int err;
+ int fw_ref;
int i;
xe_uc_fw_print(&guc->fw, p);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
return;
status = xe_mmio_read32(>->mmio, GUC_STATUS);
@@ -1177,7 +1179,7 @@ void xe_guc_print_info(struct xe_guc *guc, struct drm_printer *p)
i, xe_mmio_read32(>->mmio, SOFT_SCRATCH(i)));
}
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_guc_ct_print(&guc->ct, p, false);
xe_guc_submit_print(guc, p);
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
index 2b654f820ae2..c7a00565216d 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.c
+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
@@ -415,22 +415,24 @@ u32 xe_guc_pc_get_act_freq(struct xe_guc_pc *pc)
int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
{
struct xe_gt *gt = pc_to_gt(pc);
- int ret;
+ int fw_ref;
/*
* GuC SLPC plays with cur freq request when GuCRC is enabled
* Block RC6 for a more reliable read.
*/
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (ret)
- return ret;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ return -ETIMEDOUT;
+ }
*freq = xe_mmio_read32(>->mmio, RPNSWREQ);
*freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
*freq = decode_freq(*freq);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
return 0;
}
@@ -480,7 +482,7 @@ u32 xe_guc_pc_get_rpn_freq(struct xe_guc_pc *pc)
int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
{
struct xe_gt *gt = pc_to_gt(pc);
- int ret;
+ int ret, fw_ref;
mutex_lock(&pc->freq_lock);
if (!pc->freq_ready) {
@@ -493,9 +495,11 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
* GuC SLPC plays with min freq request when GuCRC is enabled
* Block RC6 for a more reliable read.
*/
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (ret)
- goto out;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ ret = -ETIMEDOUT;
+ goto fw;
+ }
ret = pc_action_query_task_state(pc);
if (ret)
@@ -504,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
*freq = pc_get_min_freq(pc);
fw:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
out:
mutex_unlock(&pc->freq_lock);
return ret;
@@ -855,7 +859,7 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
{
struct xe_device *xe = pc_to_xe(pc);
struct xe_gt *gt = pc_to_gt(pc);
- int ret = 0;
+ int ret = 0, fw_ref;
if (xe->info.skip_guc_pc)
return 0;
@@ -864,13 +868,15 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
if (ret)
return ret;
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (ret)
- return ret;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ return -ETIMEDOUT;
+ }
xe_gt_idle_disable_c6(gt);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
return 0;
}
@@ -956,13 +962,15 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
struct xe_device *xe = pc_to_xe(pc);
struct xe_gt *gt = pc_to_gt(pc);
u32 size = PAGE_ALIGN(sizeof(struct slpc_shared_data));
- int ret;
+ int fw_ref, ret;
xe_gt_assert(gt, xe_device_uc_enabled(xe));
- ret = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (ret)
- return ret;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ return -ETIMEDOUT;
+ }
if (xe->info.skip_guc_pc) {
if (xe->info.platform != XE_PVC)
@@ -1005,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
out:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
return ret;
}
@@ -1037,18 +1045,20 @@ static void xe_guc_pc_fini_hw(void *arg)
{
struct xe_guc_pc *pc = arg;
struct xe_device *xe = pc_to_xe(pc);
+ int fw_ref;
if (xe_device_wedged(xe))
return;
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(pc_to_gt(pc)), XE_FORCEWAKE_ALL));
+ fw_ref = xe_force_wake_get(gt_to_fw(pc_to_gt(pc)), XE_FORCEWAKE_ALL);
+ XE_WARN_ON(fw_ref != XE_FORCEWAKE_ALL);
xe_guc_pc_gucrc_disable(pc);
XE_WARN_ON(xe_guc_pc_stop(pc));
/* Bind requested freq to mert_freq_cap before unload */
pc_set_cur_freq(pc, min(pc_max_freq_cap(pc), pc->rpe_freq));
- xe_force_wake_put(gt_to_fw(pc_to_gt(pc)), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(pc_to_gt(pc)), fw_ref);
}
/**
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 14/23] drm/xe/huc: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (12 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 13/23] drm/xe/guc: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 15/23] drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init() Himal Prasad Ghimiray
` (16 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Daniele Ceraolo Spurio, Rodrigo Vivi,
Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_huc.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_huc.c b/drivers/gpu/drm/xe/xe_huc.c
index 77c5830309cf..8908267ce5f3 100644
--- a/drivers/gpu/drm/xe/xe_huc.c
+++ b/drivers/gpu/drm/xe/xe_huc.c
@@ -296,19 +296,19 @@ void xe_huc_sanitize(struct xe_huc *huc)
void xe_huc_print_info(struct xe_huc *huc, struct drm_printer *p)
{
struct xe_gt *gt = huc_to_gt(huc);
- int err;
+ int fw_ref;
xe_uc_fw_print(&huc->fw, p);
if (!xe_uc_fw_is_enabled(&huc->fw))
return;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
return;
drm_printf(p, "\nHuC status: 0x%08x\n",
xe_mmio_read32(>->mmio, HUC_KERNEL_LOAD_INFO));
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 15/23] drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init()
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (13 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 14/23] drm/xe/huc: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 16/23] drm/xe/pat: Update handling of xe_force_wake_get return Himal Prasad Ghimiray
` (15 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Ashutosh Dixit, Rodrigo Vivi,
Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a non-zero return value in the case of XE_FORCEWAKE_ALL does not
necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Ashutosh Dixit <ashutosh.dixit@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_oa.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 354ee9045efc..80e5c4ef86ef 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -1357,7 +1357,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
{
struct xe_oa_unit *u = param->hwe->oa_unit;
struct xe_gt *gt = param->hwe->gt;
- int ret;
+ int ret, fw_ref;
stream->exec_q = param->exec_q;
stream->poll_period_ns = DEFAULT_POLL_PERIOD_NS;
@@ -1417,7 +1417,11 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
/* Take runtime pm ref and forcewake to disable RC6 */
xe_pm_runtime_get(stream->oa->xe);
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ ret = -ETIMEDOUT;
+ goto err_fw_put;
+ }
ret = xe_oa_alloc_oa_buffer(stream);
if (ret)
@@ -1459,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
err_free_oa_buf:
xe_oa_free_oa_buffer(stream);
err_fw_put:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
xe_pm_runtime_put(stream->oa->xe);
if (stream->override_gucrc)
xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 16/23] drm/xe/pat: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (14 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 15/23] drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init() Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 17/23] drm/xe/gt_tlb_invalidation_ggtt: " Himal Prasad Ghimiray
` (14 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_pat.c | 50 ++++++++++++++++++-------------------
1 file changed, 25 insertions(+), 25 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
index 6bd6adfdfc74..96d5ec1fbbd9 100644
--- a/drivers/gpu/drm/xe/xe_pat.c
+++ b/drivers/gpu/drm/xe/xe_pat.c
@@ -182,10 +182,10 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err;
+ int i, err, fw_ref;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
goto err_fw;
drm_printf(p, "PAT table:\n");
@@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
XELP_MEM_TYPE_STR_MAP[mem_type], pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, !err);
+ xe_assert(xe, (fw_ref && !err));
}
static const struct xe_pat_ops xelp_pat_ops = {
@@ -211,10 +211,10 @@ static const struct xe_pat_ops xelp_pat_ops = {
static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err;
+ int i, err, fw_ref;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
goto err_fw;
drm_printf(p, "PAT table:\n");
@@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
XELP_MEM_TYPE_STR_MAP[mem_type], pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, !err);
+ xe_assert(xe, (fw_ref && !err));
}
static const struct xe_pat_ops xehp_pat_ops = {
@@ -242,10 +242,10 @@ static const struct xe_pat_ops xehp_pat_ops = {
static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err;
+ int i, err, fw_ref;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
goto err_fw;
drm_printf(p, "PAT table:\n");
@@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, !err);
+ xe_assert(xe, (fw_ref && !err));
}
static const struct xe_pat_ops xehpc_pat_ops = {
@@ -271,10 +271,10 @@ static const struct xe_pat_ops xehpc_pat_ops = {
static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err;
+ int i, err, fw_ref;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
goto err_fw;
drm_printf(p, "PAT table:\n");
@@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, !err);
+ xe_assert(xe, (fw_ref && !err));
}
/*
@@ -330,11 +330,11 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err;
+ int i, err, fw_ref;
u32 pat;
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
goto err_fw;
drm_printf(p, "PAT table:\n");
@@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
REG_FIELD_GET(XE2_COH_MODE, pat),
pat);
- err = xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, !err);
+ xe_assert(xe, (fw_ref && !err));
}
static const struct xe_pat_ops xe2_pat_ops = {
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 17/23] drm/xe/gt_tlb_invalidation_ggtt: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (15 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 16/23] drm/xe/pat: Update handling of xe_force_wake_get return Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 18/23] drm/xe/xe_reg_sr: " Himal Prasad Ghimiray
` (13 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Matthew Brost, Rodrigo Vivi,
Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
Modify the return handling of xe_force_wake_get() accordingly and pass
the return value to xe_force_wake_put().
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
index 98616de0c5bb..089ee0b4c8f9 100644
--- a/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
+++ b/drivers/gpu/drm/xe/xe_gt_tlb_invalidation.c
@@ -259,6 +259,7 @@ static int xe_gt_tlb_invalidation_guc(struct xe_gt *gt,
int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
{
struct xe_device *xe = gt_to_xe(gt);
+ int fw_ref;
if (xe_guc_ct_enabled(>->uc.guc.ct) &&
gt->uc.guc.submission_state.enabled) {
@@ -279,7 +280,8 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
if (IS_SRIOV_VF(xe))
return 0;
- xe_gt_WARN_ON(gt, xe_force_wake_get(gt_to_fw(gt), XE_FW_GT));
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ xe_gt_WARN_ON(gt, !fw_ref);
if (xe->info.platform == XE_PVC || GRAPHICS_VER(xe) >= 20) {
xe_mmio_write32(mmio, PVC_GUC_TLB_INV_DESC1,
PVC_GUC_TLB_INV_DESC1_INVALIDATE);
@@ -289,7 +291,7 @@ int xe_gt_tlb_invalidation_ggtt(struct xe_gt *gt)
xe_mmio_write32(mmio, GUC_TLB_INV_CR,
GUC_TLB_INV_CR_INVALIDATE);
}
- xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
return 0;
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 18/23] drm/xe/xe_reg_sr: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (16 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 17/23] drm/xe/gt_tlb_invalidation_ggtt: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:15 ` [PATCH v2 19/23] drm/xe/query: " Himal Prasad Ghimiray
` (12 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented
domain mask, a non-zero return value in the case of XE_FORCEWAKE_ALL does
not necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and
pass the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_reg_sr.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
index 191cb4121acd..6ab6a48b1d29 100644
--- a/drivers/gpu/drm/xe/xe_reg_sr.c
+++ b/drivers/gpu/drm/xe/xe_reg_sr.c
@@ -188,26 +188,28 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
{
struct xe_reg_sr_entry *entry;
unsigned long reg;
- int err;
+ int fw_ref, err;
if (xa_empty(&sr->xa))
return;
xe_gt_dbg(gt, "Applying %s save-restore MMIOs\n", sr->name);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL)
goto err_force_wake;
xa_for_each(&sr->xa, reg, entry)
apply_one_mmio(gt, entry);
- err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
XE_WARN_ON(err);
return;
err_force_wake:
+ err = -ETIMEDOUT;
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
xe_gt_err(gt, "Failed to apply, err=%d\n", err);
}
@@ -221,15 +223,15 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
u32 mmio_base = hwe->mmio_base;
unsigned long reg;
unsigned int slot = 0;
- int err;
+ int fw_ref, err;
if (xa_empty(&sr->xa))
return;
drm_dbg(&xe->drm, "Whitelisting %s registers\n", sr->name);
- err = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
- if (err)
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL)
goto err_force_wake;
p = drm_dbg_printer(&xe->drm, DRM_UT_DRIVER, NULL);
@@ -254,12 +256,14 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
}
- err = xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
XE_WARN_ON(err);
return;
err_force_wake:
+ err = -ETIMEDOUT;
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 19/23] drm/xe/query: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (17 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 18/23] drm/xe/xe_reg_sr: " Himal Prasad Ghimiray
@ 2024-09-12 19:15 ` Himal Prasad Ghimiray
2024-09-12 19:16 ` [PATCH v2 20/23] drm/xe/vram: " Himal Prasad Ghimiray
` (11 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:15 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented
domain mask, a non-zero return value in the case of XE_FORCEWAKE_ALL
does not necessarily indicate success. Compare the return value with
XE_FORCEWAKE_ALL to determine the status of the call.
Modify the return handling of xe_force_wake_get() accordingly and
pass the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_query.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 5246a4a2740e..7c866b736f00 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -118,6 +118,7 @@ query_engine_cycles(struct xe_device *xe,
__ktime_func_t cpu_clock;
struct xe_hw_engine *hwe;
struct xe_gt *gt;
+ int fw_ref;
if (query->size == 0) {
query->size = size;
@@ -150,8 +151,11 @@ query_engine_cycles(struct xe_device *xe,
if (!hwe)
return -EINVAL;
- if (xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL))
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
return -EIO;
+ }
__read_timestamps(gt,
RING_TIMESTAMP(hwe->mmio_base),
@@ -161,7 +165,7 @@ query_engine_cycles(struct xe_device *xe,
&resp.cpu_delta,
cpu_clock);
- xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
resp.width = 36;
/* Only write to the output fields of user query */
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 20/23] drm/xe/vram: Update handling of xe_force_wake_get return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (18 preceding siblings ...)
2024-09-12 19:15 ` [PATCH v2 19/23] drm/xe/query: " Himal Prasad Ghimiray
@ 2024-09-12 19:16 ` Himal Prasad Ghimiray
2024-09-12 19:16 ` [PATCH v2 21/23] drm/xe: forcewake debugfs open fails on xe_forcewake_get failure Himal Prasad Ghimiray
` (10 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:16 UTC (permalink / raw)
To: intel-xe; +Cc: Himal Prasad Ghimiray, Rodrigo Vivi, Lucas De Marchi
With xe_force_wake_get() now returning the refcount-incremented domain
mask, a return value of 0 indicates failure for single domains
(excluding XE_FORCEWAKE_ALL).
Modify the return handling of xe_force_wake_get() accordingly and
pass the return value to xe_force_wake_put().
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_vram.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
index 7e765b1499b1..3b5256d76d9a 100644
--- a/drivers/gpu/drm/xe/xe_vram.c
+++ b/drivers/gpu/drm/xe/xe_vram.c
@@ -220,7 +220,7 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
struct xe_device *xe = tile_to_xe(tile);
struct xe_gt *gt = tile->primary_gt;
u64 offset;
- int err;
+ int fw_ref;
u32 reg;
if (IS_SRIOV_VF(xe)) {
@@ -239,9 +239,9 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
return 0;
}
- err = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
- if (err)
- return err;
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
+ if (!fw_ref)
+ return -ETIMEDOUT;
/* actual size */
if (unlikely(xe->info.platform == XE_DG1)) {
@@ -263,7 +263,7 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
/* remove the tile offset so we have just the available size */
*vram_size = offset - *tile_offset;
- return xe_force_wake_put(gt_to_fw(gt), XE_FW_GT);
+ return xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
static void vram_fini(void *arg)
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 21/23] drm/xe: forcewake debugfs open fails on xe_forcewake_get failure
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (19 preceding siblings ...)
2024-09-12 19:16 ` [PATCH v2 20/23] drm/xe/vram: " Himal Prasad Ghimiray
@ 2024-09-12 19:16 ` Himal Prasad Ghimiray
2024-09-12 19:16 ` [PATCH v2 22/23] drm/xe: Ensure __must_check for xe_force_wake_get() return Himal Prasad Ghimiray
` (9 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:16 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Badal Nilawar, Rodrigo Vivi,
Lucas De Marchi
A failure in xe_force_wake_get() no longer increments the domain's
refcount. Therefore, if xe_force_wake_get() fails during forcewake
debugfs open, return an error. This ensures there are no valid file
descriptors to close via forcewake debugfs, preventing refcount
mismanagement.
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_debugfs.c | 29 +++++++++++++++++++++++++----
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_debugfs.c b/drivers/gpu/drm/xe/xe_debugfs.c
index a64bae36e0e3..acee79a1305f 100644
--- a/drivers/gpu/drm/xe/xe_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_debugfs.c
@@ -92,13 +92,34 @@ static int forcewake_open(struct inode *inode, struct file *file)
{
struct xe_device *xe = inode->i_private;
struct xe_gt *gt;
- u8 id;
+ u8 id, last_gt;
+ int fw_ref;
xe_pm_runtime_get(xe);
- for_each_gt(gt, xe, id)
- XE_WARN_ON(xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ for_each_gt(gt, xe, id) {
+ last_gt = id;
+
+ fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ if (fw_ref != XE_FORCEWAKE_ALL) {
+ xe_gt_WARN_ON(gt, true);
+ goto err_fw_get;
+ }
+ }
return 0;
+
+err_fw_get:
+ for_each_gt(gt, xe, id) {
+ if (id < last_gt)
+ xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
+ else if (id == last_gt)
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ else
+ break;
+ }
+
+ xe_pm_runtime_put(xe);
+ return -ETIMEDOUT;
}
static int forcewake_release(struct inode *inode, struct file *file)
@@ -108,7 +129,7 @@ static int forcewake_release(struct inode *inode, struct file *file)
u8 id;
for_each_gt(gt, xe, id)
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
xe_pm_runtime_put(xe);
return 0;
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 22/23] drm/xe: Ensure __must_check for xe_force_wake_get() return
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (20 preceding siblings ...)
2024-09-12 19:16 ` [PATCH v2 21/23] drm/xe: forcewake debugfs open fails on xe_forcewake_get failure Himal Prasad Ghimiray
@ 2024-09-12 19:16 ` Himal Prasad Ghimiray
2024-09-12 19:16 ` [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put Himal Prasad Ghimiray
` (8 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:16 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Badal Nilawar, Rodrigo Vivi,
Lucas De Marchi, Nirmoy Das
Add __must_check attribute for xe_force_wake_get().
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_force_wake.c | 4 ++--
drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
index e91bbcbddb8b..73d37e79da9c 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.c
+++ b/drivers/gpu/drm/xe/xe_force_wake.c
@@ -167,8 +167,8 @@ static int domain_sleep_wait(struct xe_gt *gt,
* the caller should handle the failure case, potentially returning
* -ETIMEDOUT.
*/
-int xe_force_wake_get(struct xe_force_wake *fw,
- enum xe_force_wake_domains domains)
+int __must_check xe_force_wake_get(struct xe_force_wake *fw,
+ enum xe_force_wake_domains domains)
{
struct xe_gt *gt = fw->gt;
struct xe_force_wake_domain *domain;
diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
index e2bb6b03e495..e17fe316dc3c 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.h
+++ b/drivers/gpu/drm/xe/xe_force_wake.h
@@ -15,8 +15,8 @@ void xe_force_wake_init_gt(struct xe_gt *gt,
struct xe_force_wake *fw);
void xe_force_wake_init_engines(struct xe_gt *gt,
struct xe_force_wake *fw);
-int xe_force_wake_get(struct xe_force_wake *fw,
- enum xe_force_wake_domains domains);
+int __must_check xe_force_wake_get(struct xe_force_wake *fw,
+ enum xe_force_wake_domains domains);
int xe_force_wake_put(struct xe_force_wake *fw,
int domains_mask);
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (21 preceding siblings ...)
2024-09-12 19:16 ` [PATCH v2 22/23] drm/xe: Ensure __must_check for xe_force_wake_get() return Himal Prasad Ghimiray
@ 2024-09-12 19:16 ` Himal Prasad Ghimiray
2024-09-13 4:09 ` Ghimiray, Himal Prasad
` (2 more replies)
2024-09-12 19:24 ` ✓ CI.Patch_applied: success for Fix xe_force_wake_get() failure handling (rev2) Patchwork
` (7 subsequent siblings)
30 siblings, 3 replies; 58+ messages in thread
From: Himal Prasad Ghimiray @ 2024-09-12 19:16 UTC (permalink / raw)
To: intel-xe
Cc: Himal Prasad Ghimiray, Badal Nilawar, Rodrigo Vivi,
Lucas De Marchi, Nirmoy Das
In case of xe_force_wake_put failure caller just calls XE_WARN_ON
and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
void.
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
---
drivers/gpu/drm/xe/xe_device.c | 3 ++-
drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
drivers/gpu/drm/xe/xe_oa.c | 4 ++--
drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
drivers/gpu/drm/xe/xe_query.c | 2 +-
drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
drivers/gpu/drm/xe/xe_vram.c | 3 ++-
13 files changed, 59 insertions(+), 65 deletions(-)
diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
index 5edb1cf51ea5..cce754801e8d 100644
--- a/drivers/gpu/drm/xe/xe_device.c
+++ b/drivers/gpu/drm/xe/xe_device.c
@@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
drm_dbg(&xe->drm,
"Flat CCS has been disabled in bios, May lead to performance impact");
- return xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ return 0;
}
int xe_device_probe(struct xe_device *xe)
diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
index 01f643f6aaba..e5defce08281 100644
--- a/drivers/gpu/drm/xe/xe_drm_client.c
+++ b/drivers/gpu/drm/xe/xe_drm_client.c
@@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
if (fw_ref != fw) {
hwe = NULL;
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
break;
}
gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
break;
}
diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
index 73d37e79da9c..01b8bfdd748f 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.c
+++ b/drivers/gpu/drm/xe/xe_force_wake.c
@@ -11,6 +11,7 @@
#include "regs/xe_reg_defs.h"
#include "xe_gt.h"
#include "xe_gt_printk.h"
+#include "xe_macros.h"
#include "xe_mmio.h"
#include "xe_sriov.h"
@@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct xe_force_wake *fw,
* and waits for acknowledgment for domain to sleep within specified timeout.
* Ensure this function is always called with return of xe_force_wake_get() as
* @domains_mask.
- *
- * Returns 0 in case of success or non-zero in case of timeout of ack
+ * Warns in case of timeout of ack from domain.
*/
-int xe_force_wake_put(struct xe_force_wake *fw,
- int domains_mask)
+void xe_force_wake_put(struct xe_force_wake *fw,
+ int domains_mask)
{
struct xe_gt *gt = fw->gt;
struct xe_force_wake_domain *domain;
@@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
* in error path of individual domains.
*/
if (!domains_mask)
- return 0;
+ return;
spin_lock_irqsave(&fw->lock, flags);
for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
@@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
fw->awake_domains &= ~sleep;
spin_unlock_irqrestore(&fw->lock, flags);
- return ret;
+ if (ret)
+ XE_WARN_ON("Timedout for domain sleep acknowledgment");
+
}
diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
index e17fe316dc3c..c2c729371b2a 100644
--- a/drivers/gpu/drm/xe/xe_force_wake.h
+++ b/drivers/gpu/drm/xe/xe_force_wake.h
@@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
struct xe_force_wake *fw);
int __must_check xe_force_wake_get(struct xe_force_wake *fw,
enum xe_force_wake_domains domains);
-int xe_force_wake_put(struct xe_force_wake *fw,
- int domains_mask);
+void xe_force_wake_put(struct xe_force_wake *fw,
+ int domains_mask);
static inline int
xe_force_wake_ref(struct xe_force_wake *fw,
diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
index b0126daee359..5f5760b60eac 100644
--- a/drivers/gpu/drm/xe/xe_gt.c
+++ b/drivers/gpu/drm/xe/xe_gt.c
@@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
*/
gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
- XE_WARN_ON(err);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return 0;
@@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
if (IS_SRIOV_PF(gt_to_xe(gt)))
xe_gt_sriov_pf_init_hw(gt);
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
- XE_WARN_ON(err);
-
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return 0;
err_force_wake:
@@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
if (err)
goto err_out;
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
- XE_WARN_ON(err);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_pm_runtime_put(gt_to_xe(gt));
xe_gt_info(gt, "reset done\n");
@@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
return 0;
err_out:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
XE_WARN_ON(xe_uc_start(>->uc));
err_fail:
xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
@@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
xe_uc_stop_prepare(>->uc);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
int xe_gt_suspend(struct xe_gt *gt)
@@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
xe_gt_disable_host_l2_vram(gt);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_gt_dbg(gt, "suspended\n");
return 0;
@@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
err_msg:
err = -ETIMEDOUT;
err_force_wake:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
return err;
@@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
xe_gt_idle_enable_pg(gt);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_gt_dbg(gt, "resumed\n");
return 0;
@@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
err_msg:
err = -ETIMEDOUT;
err_force_wake:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
return err;
diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
index 86146de1d31c..2ecf3c87c6b0 100644
--- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
+++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
@@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
struct xe_device *xe = gt_to_xe(gt);
struct xe_hw_engine *hwe;
enum xe_hw_engine_id id;
- int fw_ref, err;
+ int fw_ref;
xe_pm_runtime_get(xe);
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
@@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
for_each_hw_engine(hwe, gt, id)
xe_hw_engine_print(hwe, p);
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_pm_runtime_put(xe);
- if (err)
- return err;
return 0;
}
diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
index 9af81b07ab7a..1a7ee5681da6 100644
--- a/drivers/gpu/drm/xe/xe_gt_idle.c
+++ b/drivers/gpu/drm/xe/xe_gt_idle.c
@@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
}
xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
void xe_gt_idle_disable_pg(struct xe_gt *gt)
@@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
XE_WARN_ON(!fw_ref);
xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
/**
@@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
}
if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
index c7a00565216d..27ad412936f7 100644
--- a/drivers/gpu/drm/xe/xe_guc_pc.c
+++ b/drivers/gpu/drm/xe/xe_guc_pc.c
@@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
*/
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (fw_ref != XE_FORCEWAKE_ALL) {
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return -ETIMEDOUT;
}
@@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
*freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
*freq = decode_freq(*freq);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return 0;
}
@@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
*freq = pc_get_min_freq(pc);
fw:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
out:
mutex_unlock(&pc->freq_lock);
return ret;
@@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (fw_ref != XE_FORCEWAKE_ALL) {
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return -ETIMEDOUT;
}
xe_gt_idle_disable_c6(gt);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return 0;
}
@@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (fw_ref != XE_FORCEWAKE_ALL) {
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return -ETIMEDOUT;
}
@@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
out:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return ret;
}
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 80e5c4ef86ef..8d7d9e7ade51 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
xe_oa_free_oa_buffer(stream);
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
+ xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
xe_pm_runtime_put(stream->oa->xe);
/* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
@@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
err_free_oa_buf:
xe_oa_free_oa_buffer(stream);
err_fw_put:
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_pm_runtime_put(stream->oa->xe);
if (stream->override_gucrc)
xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
index 96d5ec1fbbd9..4372dd727e9f 100644
--- a/drivers/gpu/drm/xe/xe_pat.c
+++ b/drivers/gpu/drm/xe/xe_pat.c
@@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err, fw_ref;
+ int i, fw_ref;
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
if (!fw_ref)
@@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
XELP_MEM_TYPE_STR_MAP[mem_type], pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, (fw_ref && !err));
+ xe_assert(xe, !fw_ref);
}
static const struct xe_pat_ops xelp_pat_ops = {
@@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err, fw_ref;
+ int i, fw_ref;
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
if (!fw_ref)
@@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
XELP_MEM_TYPE_STR_MAP[mem_type], pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, (fw_ref && !err));
+ xe_assert(xe, !fw_ref);
}
static const struct xe_pat_ops xehp_pat_ops = {
@@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err, fw_ref;
+ int i, fw_ref;
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
if (!fw_ref)
@@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, (fw_ref && !err));
+ xe_assert(xe, !fw_ref);
}
static const struct xe_pat_ops xehpc_pat_ops = {
@@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err, fw_ref;
+ int i, fw_ref;
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
if (!fw_ref)
@@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
}
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, (fw_ref && !err));
+ xe_assert(xe, !fw_ref);
}
/*
@@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
{
struct xe_device *xe = gt_to_xe(gt);
- int i, err, fw_ref;
+ int i, fw_ref;
u32 pat;
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
@@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
REG_FIELD_GET(XE2_COH_MODE, pat),
pat);
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
- xe_assert(xe, (fw_ref && !err));
+ xe_assert(xe, !fw_ref);
}
static const struct xe_pat_ops xe2_pat_ops = {
diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
index 7c866b736f00..df7bdf3822cc 100644
--- a/drivers/gpu/drm/xe/xe_query.c
+++ b/drivers/gpu/drm/xe/xe_query.c
@@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
if (fw_ref != XE_FORCEWAKE_ALL) {
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return -EIO;
}
diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
index 6ab6a48b1d29..874523f22f56 100644
--- a/drivers/gpu/drm/xe/xe_reg_sr.c
+++ b/drivers/gpu/drm/xe/xe_reg_sr.c
@@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
xa_for_each(&sr->xa, reg, entry)
apply_one_mmio(gt, entry);
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
- XE_WARN_ON(err);
-
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return;
err_force_wake:
err = -ETIMEDOUT;
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
xe_gt_err(gt, "Failed to apply, err=%d\n", err);
}
@@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
}
- err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
- XE_WARN_ON(err);
-
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
return;
err_force_wake:
err = -ETIMEDOUT;
- XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
}
diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
index 3b5256d76d9a..1384c97a75c2 100644
--- a/drivers/gpu/drm/xe/xe_vram.c
+++ b/drivers/gpu/drm/xe/xe_vram.c
@@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
/* remove the tile offset so we have just the available size */
*vram_size = offset - *tile_offset;
- return xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ xe_force_wake_put(gt_to_fw(gt), fw_ref);
+ return 0;
}
static void vram_fini(void *arg)
--
2.34.1
^ permalink raw reply related [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-12 19:16 ` [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put Himal Prasad Ghimiray
@ 2024-09-13 4:09 ` Ghimiray, Himal Prasad
2024-09-13 10:24 ` Michal Wajdeczko
2024-09-16 18:42 ` Nilawar, Badal
2 siblings, 0 replies; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-13 4:09 UTC (permalink / raw)
To: intel-xe; +Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 00:46, Himal Prasad Ghimiray wrote:
> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
> void.
>
> Cc: Badal Nilawar <badal.nilawar@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Nirmoy Das <nirmoy.das@intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 3 ++-
> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
> drivers/gpu/drm/xe/xe_query.c | 2 +-
> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
> 13 files changed, 59 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 5edb1cf51ea5..cce754801e8d 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
> drm_dbg(&xe->drm,
> "Flat CCS has been disabled in bios, May lead to performance impact");
>
> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + return 0;
> }
>
> int xe_device_probe(struct xe_device *xe)
> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
> index 01f643f6aaba..e5defce08281 100644
> --- a/drivers/gpu/drm/xe/xe_drm_client.c
> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
> if (fw_ref != fw) {
> hwe = NULL;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> break;
> }
>
> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> break;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
> index 73d37e79da9c..01b8bfdd748f 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.c
> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
> @@ -11,6 +11,7 @@
> #include "regs/xe_reg_defs.h"
> #include "xe_gt.h"
> #include "xe_gt_printk.h"
> +#include "xe_macros.h"
> #include "xe_mmio.h"
> #include "xe_sriov.h"
>
> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct xe_force_wake *fw,
> * and waits for acknowledgment for domain to sleep within specified timeout.
> * Ensure this function is always called with return of xe_force_wake_get() as
> * @domains_mask.
> - *
> - * Returns 0 in case of success or non-zero in case of timeout of ack
> + * Warns in case of timeout of ack from domain.
> */
> -int xe_force_wake_put(struct xe_force_wake *fw,
> - int domains_mask)
> +void xe_force_wake_put(struct xe_force_wake *fw,
> + int domains_mask)
> {
> struct xe_gt *gt = fw->gt;
> struct xe_force_wake_domain *domain;
> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> * in error path of individual domains.
> */
> if (!domains_mask)
> - return 0;
> + return;
>
> spin_lock_irqsave(&fw->lock, flags);
> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> fw->awake_domains &= ~sleep;
> spin_unlock_irqrestore(&fw->lock, flags);
>
> - return ret;
> + if (ret)
> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
> +
> }
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
> index e17fe316dc3c..c2c729371b2a 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.h
> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
> struct xe_force_wake *fw);
> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
> enum xe_force_wake_domains domains);
> -int xe_force_wake_put(struct xe_force_wake *fw,
> - int domains_mask);
> +void xe_force_wake_put(struct xe_force_wake *fw,
> + int domains_mask);
>
> static inline int
> xe_force_wake_ref(struct xe_force_wake *fw,
> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> index b0126daee359..5f5760b60eac 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
> */
> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> return 0;
>
> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
> if (IS_SRIOV_PF(gt_to_xe(gt)))
> xe_gt_sriov_pf_init_hw(gt);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return 0;
>
> err_force_wake:
> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
> if (err)
> goto err_out;
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(gt_to_xe(gt));
>
> xe_gt_info(gt, "reset done\n");
> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
> return 0;
>
> err_out:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> XE_WARN_ON(xe_uc_start(>->uc));
> err_fail:
> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>
> xe_uc_stop_prepare(>->uc);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> int xe_gt_suspend(struct xe_gt *gt)
> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>
> xe_gt_disable_host_l2_vram(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_dbg(gt, "suspended\n");
>
> return 0;
> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
> err_msg:
> err = -ETIMEDOUT;
> err_force_wake:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>
> return err;
> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>
> xe_gt_idle_enable_pg(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_dbg(gt, "resumed\n");
>
> return 0;
> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
> err_msg:
> err = -ETIMEDOUT;
> err_force_wake:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>
> return err;
> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
> index 86146de1d31c..2ecf3c87c6b0 100644
> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
> struct xe_device *xe = gt_to_xe(gt);
> struct xe_hw_engine *hwe;
> enum xe_hw_engine_id id;
> - int fw_ref, err;
> + int fw_ref;
>
> xe_pm_runtime_get(xe);
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
> for_each_hw_engine(hwe, gt, id)
> xe_hw_engine_print(hwe, p);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(xe);
> - if (err)
> - return err;
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
> index 9af81b07ab7a..1a7ee5681da6 100644
> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
> }
>
> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> void xe_gt_idle_disable_pg(struct xe_gt *gt)
> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> XE_WARN_ON(!fw_ref);
> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> /**
> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
> pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> index c7a00565216d..27ad412936f7 100644
> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
> */
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
> *freq = decode_freq(*freq);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return 0;
> }
>
> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
> *freq = pc_get_min_freq(pc);
>
> fw:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> out:
> mutex_unlock(&pc->freq_lock);
> return ret;
> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> xe_gt_idle_disable_c6(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> return 0;
> }
> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>
> out:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return ret;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 80e5c4ef86ef..8d7d9e7ade51 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>
> xe_oa_free_oa_buffer(stream);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> xe_pm_runtime_put(stream->oa->xe);
>
> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> err_free_oa_buf:
> xe_oa_free_oa_buffer(stream);
> err_fw_put:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(stream->oa->xe);
> if (stream->override_gucrc)
> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
> index 96d5ec1fbbd9..4372dd727e9f 100644
> --- a/drivers/gpu/drm/xe/xe_pat.c
> +++ b/drivers/gpu/drm/xe/xe_pat.c
> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
wrong assert in few places, Will fix in next rev with other review comments.
> }
>
> static const struct xe_pat_ops xelp_pat_ops = {
> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xehp_pat_ops = {
> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xehpc_pat_ops = {
> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> /*
> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
> u32 pat;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XE2_COH_MODE, pat),
> pat);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xe2_pat_ops = {
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 7c866b736f00..df7bdf3822cc 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -EIO;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
> index 6ab6a48b1d29..874523f22f56 100644
> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
> xa_for_each(&sr->xa, reg, entry)
> apply_one_mmio(gt, entry);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return;
>
> err_force_wake:
> err = -ETIMEDOUT;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
> }
>
> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return;
>
> err_force_wake:
> err = -ETIMEDOUT;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
> index 3b5256d76d9a..1384c97a75c2 100644
> --- a/drivers/gpu/drm/xe/xe_vram.c
> +++ b/drivers/gpu/drm/xe/xe_vram.c
> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
> /* remove the tile offset so we have just the available size */
> *vram_size = offset - *tile_offset;
>
> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + return 0;
> }
>
> static void vram_fini(void *arg)
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-12 19:16 ` [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put Himal Prasad Ghimiray
2024-09-13 4:09 ` Ghimiray, Himal Prasad
@ 2024-09-13 10:24 ` Michal Wajdeczko
2024-09-13 13:26 ` Ghimiray, Himal Prasad
2024-09-13 13:31 ` Ghimiray, Himal Prasad
2024-09-16 18:42 ` Nilawar, Badal
2 siblings, 2 replies; 58+ messages in thread
From: Michal Wajdeczko @ 2024-09-13 10:24 UTC (permalink / raw)
To: Himal Prasad Ghimiray, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 12.09.2024 21:16, Himal Prasad Ghimiray wrote:
> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
> void.
>
> Cc: Badal Nilawar <badal.nilawar@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Nirmoy Das <nirmoy.das@intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 3 ++-
> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
> drivers/gpu/drm/xe/xe_query.c | 2 +-
> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
> 13 files changed, 59 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 5edb1cf51ea5..cce754801e8d 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
> drm_dbg(&xe->drm,
> "Flat CCS has been disabled in bios, May lead to performance impact");
>
> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + return 0;
> }
>
> int xe_device_probe(struct xe_device *xe)
> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
> index 01f643f6aaba..e5defce08281 100644
> --- a/drivers/gpu/drm/xe/xe_drm_client.c
> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
> if (fw_ref != fw) {
> hwe = NULL;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> break;
> }
>
> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> break;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
> index 73d37e79da9c..01b8bfdd748f 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.c
> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
> @@ -11,6 +11,7 @@
> #include "regs/xe_reg_defs.h"
> #include "xe_gt.h"
> #include "xe_gt_printk.h"
> +#include "xe_macros.h"
> #include "xe_mmio.h"
> #include "xe_sriov.h"
>
> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct xe_force_wake *fw,
> * and waits for acknowledgment for domain to sleep within specified timeout.
> * Ensure this function is always called with return of xe_force_wake_get() as
> * @domains_mask.
> - *
> - * Returns 0 in case of success or non-zero in case of timeout of ack
> + * Warns in case of timeout of ack from domain.
maybe this cleanup should be done earlier in the series to avoid
changing code and kernel-doc once again at the end?
> */
> -int xe_force_wake_put(struct xe_force_wake *fw,
> - int domains_mask)
> +void xe_force_wake_put(struct xe_force_wake *fw,
> + int domains_mask)
> {
> struct xe_gt *gt = fw->gt;
> struct xe_force_wake_domain *domain;
> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> * in error path of individual domains.
> */
> if (!domains_mask)
> - return 0;
> + return;
>
> spin_lock_irqsave(&fw->lock, flags);
> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> fw->awake_domains &= ~sleep;
> spin_unlock_irqrestore(&fw->lock, flags);
>
> - return ret;
> + if (ret)
> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
I guess this should be xe_gt_WARN() instead, maybe like this:
xe_gt_WARN(gt, ret, "domain%s %#x failed to acknowledgment sleep\n",
str_plural(hweight_long(ret)), ret);
> +
> }
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
> index e17fe316dc3c..c2c729371b2a 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.h
> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
> struct xe_force_wake *fw);
> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
> enum xe_force_wake_domains domains);
> -int xe_force_wake_put(struct xe_force_wake *fw,
> - int domains_mask);
> +void xe_force_wake_put(struct xe_force_wake *fw,
> + int domains_mask);
>
> static inline int
> xe_force_wake_ref(struct xe_force_wake *fw,
> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> index b0126daee359..5f5760b60eac 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
> */
> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> return 0;
>
> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
> if (IS_SRIOV_PF(gt_to_xe(gt)))
> xe_gt_sriov_pf_init_hw(gt);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return 0;
>
> err_force_wake:
> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
> if (err)
> goto err_out;
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(gt_to_xe(gt));
>
> xe_gt_info(gt, "reset done\n");
> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
> return 0;
>
> err_out:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> XE_WARN_ON(xe_uc_start(>->uc));
> err_fail:
> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>
> xe_uc_stop_prepare(>->uc);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> int xe_gt_suspend(struct xe_gt *gt)
> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>
> xe_gt_disable_host_l2_vram(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_dbg(gt, "suspended\n");
>
> return 0;
> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
> err_msg:
> err = -ETIMEDOUT;
> err_force_wake:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>
> return err;
> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>
> xe_gt_idle_enable_pg(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_dbg(gt, "resumed\n");
>
> return 0;
> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
> err_msg:
> err = -ETIMEDOUT;
> err_force_wake:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>
> return err;
> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
> index 86146de1d31c..2ecf3c87c6b0 100644
> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
> struct xe_device *xe = gt_to_xe(gt);
> struct xe_hw_engine *hwe;
> enum xe_hw_engine_id id;
> - int fw_ref, err;
> + int fw_ref;
>
> xe_pm_runtime_get(xe);
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
> for_each_hw_engine(hwe, gt, id)
> xe_hw_engine_print(hwe, p);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(xe);
> - if (err)
> - return err;
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
> index 9af81b07ab7a..1a7ee5681da6 100644
> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
> }
>
> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> void xe_gt_idle_disable_pg(struct xe_gt *gt)
> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> XE_WARN_ON(!fw_ref);
> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> /**
> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
> pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> index c7a00565216d..27ad412936f7 100644
> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
> */
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
> *freq = decode_freq(*freq);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return 0;
> }
>
> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
> *freq = pc_get_min_freq(pc);
>
> fw:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> out:
> mutex_unlock(&pc->freq_lock);
> return ret;
> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> xe_gt_idle_disable_c6(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> return 0;
> }
> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>
> out:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return ret;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 80e5c4ef86ef..8d7d9e7ade51 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>
> xe_oa_free_oa_buffer(stream);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> xe_pm_runtime_put(stream->oa->xe);
>
> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> err_free_oa_buf:
> xe_oa_free_oa_buffer(stream);
> err_fw_put:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(stream->oa->xe);
> if (stream->override_gucrc)
> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
> index 96d5ec1fbbd9..4372dd727e9f 100644
> --- a/drivers/gpu/drm/xe/xe_pat.c
> +++ b/drivers/gpu/drm/xe/xe_pat.c
> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
xe_assert() shouldn't be used to track/report HW errors
> }
>
> static const struct xe_pat_ops xelp_pat_ops = {
> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xehp_pat_ops = {
> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xehpc_pat_ops = {
> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> /*
> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
> u32 pat;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XE2_COH_MODE, pat),
> pat);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xe2_pat_ops = {
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 7c866b736f00..df7bdf3822cc 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -EIO;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
> index 6ab6a48b1d29..874523f22f56 100644
> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
> xa_for_each(&sr->xa, reg, entry)
> apply_one_mmio(gt, entry);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return;
>
> err_force_wake:
> err = -ETIMEDOUT;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
> }
>
> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return;
>
> err_force_wake:
> err = -ETIMEDOUT;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
> index 3b5256d76d9a..1384c97a75c2 100644
> --- a/drivers/gpu/drm/xe/xe_vram.c
> +++ b/drivers/gpu/drm/xe/xe_vram.c
> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
> /* remove the tile offset so we have just the available size */
> *vram_size = offset - *tile_offset;
>
> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + return 0;
> }
>
> static void vram_fini(void *arg)
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-13 10:24 ` Michal Wajdeczko
@ 2024-09-13 13:26 ` Ghimiray, Himal Prasad
2024-09-13 13:31 ` Ghimiray, Himal Prasad
1 sibling, 0 replies; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-13 13:26 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 15:54, Michal Wajdeczko wrote:
>
>
> On 12.09.2024 21:16, Himal Prasad Ghimiray wrote:
>> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
>> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
>> void.
>>
>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_device.c | 3 ++-
>> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
>> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
>> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
>> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
>> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
>> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
>> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
>> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
>> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
>> drivers/gpu/drm/xe/xe_query.c | 2 +-
>> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
>> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
>> 13 files changed, 59 insertions(+), 65 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
>> index 5edb1cf51ea5..cce754801e8d 100644
>> --- a/drivers/gpu/drm/xe/xe_device.c
>> +++ b/drivers/gpu/drm/xe/xe_device.c
>> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
>> drm_dbg(&xe->drm,
>> "Flat CCS has been disabled in bios, May lead to performance impact");
>>
>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + return 0;
>> }
>>
>> int xe_device_probe(struct xe_device *xe)
>> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
>> index 01f643f6aaba..e5defce08281 100644
>> --- a/drivers/gpu/drm/xe/xe_drm_client.c
>> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
>> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
>> if (fw_ref != fw) {
>> hwe = NULL;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> break;
>> }
>>
>> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> break;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
>> index 73d37e79da9c..01b8bfdd748f 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>> @@ -11,6 +11,7 @@
>> #include "regs/xe_reg_defs.h"
>> #include "xe_gt.h"
>> #include "xe_gt_printk.h"
>> +#include "xe_macros.h"
>> #include "xe_mmio.h"
>> #include "xe_sriov.h"
>>
>> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>> * and waits for acknowledgment for domain to sleep within specified timeout.
>> * Ensure this function is always called with return of xe_force_wake_get() as
>> * @domains_mask.
>> - *
>> - * Returns 0 in case of success or non-zero in case of timeout of ack
>> + * Warns in case of timeout of ack from domain.
>
> maybe this cleanup should be done earlier in the series to avoid
> changing code and kernel-doc once again at the end?
Wanted to avoid, resolving conflicts on series patches again in case the
patch is not accepted.
If the patch is agreed upon, will change code in previous patches and
will use this patch just to change return type and add final kernel-doc.
>
>> */
>> -int xe_force_wake_put(struct xe_force_wake *fw,
>> - int domains_mask)
>> +void xe_force_wake_put(struct xe_force_wake *fw,
>> + int domains_mask)
>> {
>> struct xe_gt *gt = fw->gt;
>> struct xe_force_wake_domain *domain;
>> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> * in error path of individual domains.
>> */
>> if (!domains_mask)
>> - return 0;
>> + return;
>>
>> spin_lock_irqsave(&fw->lock, flags);
>> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> fw->awake_domains &= ~sleep;
>> spin_unlock_irqrestore(&fw->lock, flags);
>>
>> - return ret;
>> + if (ret)
>> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
>
> I guess this should be xe_gt_WARN() instead, maybe like this:
>
> xe_gt_WARN(gt, ret, "domain%s %#x failed to acknowledgment sleep\n",
> str_plural(hweight_long(ret)), ret);
>
>> +
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
>> index e17fe316dc3c..c2c729371b2a 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>> struct xe_force_wake *fw);
>> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>> enum xe_force_wake_domains domains);
>> -int xe_force_wake_put(struct xe_force_wake *fw,
>> - int domains_mask);
>> +void xe_force_wake_put(struct xe_force_wake *fw,
>> + int domains_mask);
>>
>> static inline int
>> xe_force_wake_ref(struct xe_force_wake *fw,
>> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>> index b0126daee359..5f5760b60eac 100644
>> --- a/drivers/gpu/drm/xe/xe_gt.c
>> +++ b/drivers/gpu/drm/xe/xe_gt.c
>> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>> */
>> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>
>> return 0;
>>
>> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
>> if (IS_SRIOV_PF(gt_to_xe(gt)))
>> xe_gt_sriov_pf_init_hw(gt);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>>
>> err_force_wake:
>> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
>> if (err)
>> goto err_out;
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(gt_to_xe(gt));
>>
>> xe_gt_info(gt, "reset done\n");
>> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
>> return 0;
>>
>> err_out:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> XE_WARN_ON(xe_uc_start(>->uc));
>> err_fail:
>> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
>> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>>
>> xe_uc_stop_prepare(>->uc);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> int xe_gt_suspend(struct xe_gt *gt)
>> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>
>> xe_gt_disable_host_l2_vram(gt);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_dbg(gt, "suspended\n");
>>
>> return 0;
>> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>> err_msg:
>> err = -ETIMEDOUT;
>> err_force_wake:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>>
>> return err;
>> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>
>> xe_gt_idle_enable_pg(gt);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_dbg(gt, "resumed\n");
>>
>> return 0;
>> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
>> err_msg:
>> err = -ETIMEDOUT;
>> err_force_wake:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>>
>> return err;
>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> index 86146de1d31c..2ecf3c87c6b0 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
>> struct xe_device *xe = gt_to_xe(gt);
>> struct xe_hw_engine *hwe;
>> enum xe_hw_engine_id id;
>> - int fw_ref, err;
>> + int fw_ref;
>>
>> xe_pm_runtime_get(xe);
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
>> for_each_hw_engine(hwe, gt, id)
>> xe_hw_engine_print(hwe, p);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(xe);
>> - if (err)
>> - return err;
>>
>> return 0;
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
>> index 9af81b07ab7a..1a7ee5681da6 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
>> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
>> }
>>
>> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> void xe_gt_idle_disable_pg(struct xe_gt *gt)
>> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> XE_WARN_ON(!fw_ref);
>> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> /**
>> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
>> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
>> pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
>> index c7a00565216d..27ad412936f7 100644
>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
>> */
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>>
>> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
>> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
>> *freq = decode_freq(*freq);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>> }
>>
>> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
>> *freq = pc_get_min_freq(pc);
>>
>> fw:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> out:
>> mutex_unlock(&pc->freq_lock);
>> return ret;
>> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>>
>> xe_gt_idle_disable_c6(gt);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>
>> return 0;
>> }
>> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>>
>> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>>
>> out:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return ret;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>> index 80e5c4ef86ef..8d7d9e7ade51 100644
>> --- a/drivers/gpu/drm/xe/xe_oa.c
>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>>
>> xe_oa_free_oa_buffer(stream);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
>> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> xe_pm_runtime_put(stream->oa->xe);
>>
>> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
>> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
>> err_free_oa_buf:
>> xe_oa_free_oa_buffer(stream);
>> err_fw_put:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(stream->oa->xe);
>> if (stream->override_gucrc)
>> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
>> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
>> index 96d5ec1fbbd9..4372dd727e9f 100644
>> --- a/drivers/gpu/drm/xe/xe_pat.c
>> +++ b/drivers/gpu/drm/xe/xe_pat.c
>> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
>> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>
> xe_assert() shouldn't be used to track/report HW errors
>
>> }
>>
>> static const struct xe_pat_ops xelp_pat_ops = {
>> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
>> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> static const struct xe_pat_ops xehp_pat_ops = {
>> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
>> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> static const struct xe_pat_ops xehpc_pat_ops = {
>> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
>> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> /*
>> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
>> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> u32 pat;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>> REG_FIELD_GET(XE2_COH_MODE, pat),
>> pat);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> static const struct xe_pat_ops xe2_pat_ops = {
>> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
>> index 7c866b736f00..df7bdf3822cc 100644
>> --- a/drivers/gpu/drm/xe/xe_query.c
>> +++ b/drivers/gpu/drm/xe/xe_query.c
>> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -EIO;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
>> index 6ab6a48b1d29..874523f22f56 100644
>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
>> xa_for_each(&sr->xa, reg, entry)
>> apply_one_mmio(gt, entry);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return;
>>
>> err_force_wake:
>> err = -ETIMEDOUT;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
>> }
>>
>> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
>> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return;
>>
>> err_force_wake:
>> err = -ETIMEDOUT;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
>> index 3b5256d76d9a..1384c97a75c2 100644
>> --- a/drivers/gpu/drm/xe/xe_vram.c
>> +++ b/drivers/gpu/drm/xe/xe_vram.c
>> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
>> /* remove the tile offset so we have just the available size */
>> *vram_size = offset - *tile_offset;
>>
>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + return 0;
>> }
>>
>> static void vram_fini(void *arg)
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-13 10:24 ` Michal Wajdeczko
2024-09-13 13:26 ` Ghimiray, Himal Prasad
@ 2024-09-13 13:31 ` Ghimiray, Himal Prasad
1 sibling, 0 replies; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-13 13:31 UTC (permalink / raw)
To: Michal Wajdeczko, intel-xe
Cc: Badal Nilawar, Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 15:54, Michal Wajdeczko wrote:
>
>
> On 12.09.2024 21:16, Himal Prasad Ghimiray wrote:
>> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
>> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
>> void.
>>
>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_device.c | 3 ++-
>> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
>> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
>> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
>> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
>> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
>> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
>> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
>> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
>> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
>> drivers/gpu/drm/xe/xe_query.c | 2 +-
>> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
>> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
>> 13 files changed, 59 insertions(+), 65 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
>> index 5edb1cf51ea5..cce754801e8d 100644
>> --- a/drivers/gpu/drm/xe/xe_device.c
>> +++ b/drivers/gpu/drm/xe/xe_device.c
>> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
>> drm_dbg(&xe->drm,
>> "Flat CCS has been disabled in bios, May lead to performance impact");
>>
>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + return 0;
>> }
>>
>> int xe_device_probe(struct xe_device *xe)
>> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
>> index 01f643f6aaba..e5defce08281 100644
>> --- a/drivers/gpu/drm/xe/xe_drm_client.c
>> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
>> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
>> if (fw_ref != fw) {
>> hwe = NULL;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> break;
>> }
>>
>> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> break;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
>> index 73d37e79da9c..01b8bfdd748f 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>> @@ -11,6 +11,7 @@
>> #include "regs/xe_reg_defs.h"
>> #include "xe_gt.h"
>> #include "xe_gt_printk.h"
>> +#include "xe_macros.h"
>> #include "xe_mmio.h"
>> #include "xe_sriov.h"
>>
>> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>> * and waits for acknowledgment for domain to sleep within specified timeout.
>> * Ensure this function is always called with return of xe_force_wake_get() as
>> * @domains_mask.
>> - *
>> - * Returns 0 in case of success or non-zero in case of timeout of ack
>> + * Warns in case of timeout of ack from domain.
>
> maybe this cleanup should be done earlier in the series to avoid
> changing code and kernel-doc once again at the end?
>
>> */
>> -int xe_force_wake_put(struct xe_force_wake *fw,
>> - int domains_mask)
>> +void xe_force_wake_put(struct xe_force_wake *fw,
>> + int domains_mask)
>> {
>> struct xe_gt *gt = fw->gt;
>> struct xe_force_wake_domain *domain;
>> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> * in error path of individual domains.
>> */
>> if (!domains_mask)
>> - return 0;
>> + return;
>>
>> spin_lock_irqsave(&fw->lock, flags);
>> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> fw->awake_domains &= ~sleep;
>> spin_unlock_irqrestore(&fw->lock, flags);
>>
>> - return ret;
>> + if (ret)
>> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
>
> I guess this should be xe_gt_WARN() instead, maybe like this:
>
> xe_gt_WARN(gt, ret, "domain%s %#x failed to acknowledgment sleep\n",
> str_plural(hweight_long(ret)), ret);
>
Agreed. Makes more sense, will update in next version.
>> +
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
>> index e17fe316dc3c..c2c729371b2a 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>> struct xe_force_wake *fw);
>> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>> enum xe_force_wake_domains domains);
>> -int xe_force_wake_put(struct xe_force_wake *fw,
>> - int domains_mask);
>> +void xe_force_wake_put(struct xe_force_wake *fw,
>> + int domains_mask);
>>
>> static inline int
>> xe_force_wake_ref(struct xe_force_wake *fw,
>> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>> index b0126daee359..5f5760b60eac 100644
>> --- a/drivers/gpu/drm/xe/xe_gt.c
>> +++ b/drivers/gpu/drm/xe/xe_gt.c
>> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>> */
>> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>
>> return 0;
>>
>> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
>> if (IS_SRIOV_PF(gt_to_xe(gt)))
>> xe_gt_sriov_pf_init_hw(gt);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>>
>> err_force_wake:
>> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
>> if (err)
>> goto err_out;
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(gt_to_xe(gt));
>>
>> xe_gt_info(gt, "reset done\n");
>> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
>> return 0;
>>
>> err_out:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> XE_WARN_ON(xe_uc_start(>->uc));
>> err_fail:
>> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
>> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>>
>> xe_uc_stop_prepare(>->uc);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> int xe_gt_suspend(struct xe_gt *gt)
>> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>
>> xe_gt_disable_host_l2_vram(gt);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_dbg(gt, "suspended\n");
>>
>> return 0;
>> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>> err_msg:
>> err = -ETIMEDOUT;
>> err_force_wake:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>>
>> return err;
>> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>
>> xe_gt_idle_enable_pg(gt);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_dbg(gt, "resumed\n");
>>
>> return 0;
>> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
>> err_msg:
>> err = -ETIMEDOUT;
>> err_force_wake:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>>
>> return err;
>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> index 86146de1d31c..2ecf3c87c6b0 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
>> struct xe_device *xe = gt_to_xe(gt);
>> struct xe_hw_engine *hwe;
>> enum xe_hw_engine_id id;
>> - int fw_ref, err;
>> + int fw_ref;
>>
>> xe_pm_runtime_get(xe);
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
>> for_each_hw_engine(hwe, gt, id)
>> xe_hw_engine_print(hwe, p);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(xe);
>> - if (err)
>> - return err;
>>
>> return 0;
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
>> index 9af81b07ab7a..1a7ee5681da6 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
>> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
>> }
>>
>> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> void xe_gt_idle_disable_pg(struct xe_gt *gt)
>> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> XE_WARN_ON(!fw_ref);
>> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> /**
>> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
>> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
>> pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>>
>> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
>> index c7a00565216d..27ad412936f7 100644
>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
>> */
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>>
>> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
>> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
>> *freq = decode_freq(*freq);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>> }
>>
>> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
>> *freq = pc_get_min_freq(pc);
>>
>> fw:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> out:
>> mutex_unlock(&pc->freq_lock);
>> return ret;
>> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>>
>> xe_gt_idle_disable_c6(gt);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>
>> return 0;
>> }
>> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>>
>> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>>
>> out:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return ret;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>> index 80e5c4ef86ef..8d7d9e7ade51 100644
>> --- a/drivers/gpu/drm/xe/xe_oa.c
>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>>
>> xe_oa_free_oa_buffer(stream);
>>
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
>> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> xe_pm_runtime_put(stream->oa->xe);
>>
>> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
>> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
>> err_free_oa_buf:
>> xe_oa_free_oa_buffer(stream);
>> err_fw_put:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(stream->oa->xe);
>> if (stream->override_gucrc)
>> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
>> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
>> index 96d5ec1fbbd9..4372dd727e9f 100644
>> --- a/drivers/gpu/drm/xe/xe_pat.c
>> +++ b/drivers/gpu/drm/xe/xe_pat.c
>> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
>> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>
> xe_assert() shouldn't be used to track/report HW errors
Agreed, should we use drm_WARN_ON ?
>
>> }
>>
>> static const struct xe_pat_ops xelp_pat_ops = {
>> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
>> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> static const struct xe_pat_ops xehp_pat_ops = {
>> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
>> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> static const struct xe_pat_ops xehpc_pat_ops = {
>> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
>> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> /*
>> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
>> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> u32 pat;
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>> REG_FIELD_GET(XE2_COH_MODE, pat),
>> pat);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>>
>> static const struct xe_pat_ops xe2_pat_ops = {
>> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
>> index 7c866b736f00..df7bdf3822cc 100644
>> --- a/drivers/gpu/drm/xe/xe_query.c
>> +++ b/drivers/gpu/drm/xe/xe_query.c
>> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>>
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -EIO;
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
>> index 6ab6a48b1d29..874523f22f56 100644
>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
>> xa_for_each(&sr->xa, reg, entry)
>> apply_one_mmio(gt, entry);
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return;
>>
>> err_force_wake:
>> err = -ETIMEDOUT;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
>> }
>>
>> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
>> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
>> }
>>
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return;
>>
>> err_force_wake:
>> err = -ETIMEDOUT;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>> }
>>
>> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
>> index 3b5256d76d9a..1384c97a75c2 100644
>> --- a/drivers/gpu/drm/xe/xe_vram.c
>> +++ b/drivers/gpu/drm/xe/xe_vram.c
>> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
>> /* remove the tile offset so we have just the available size */
>> *vram_size = offset - *tile_offset;
>>
>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + return 0;
>> }
>>
>> static void vram_fini(void *arg)
^ permalink raw reply [flat|nested] 58+ messages in thread
* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-12 19:16 ` [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put Himal Prasad Ghimiray
2024-09-13 4:09 ` Ghimiray, Himal Prasad
2024-09-13 10:24 ` Michal Wajdeczko
@ 2024-09-16 18:42 ` Nilawar, Badal
2024-09-17 4:48 ` Ghimiray, Himal Prasad
2 siblings, 1 reply; 58+ messages in thread
From: Nilawar, Badal @ 2024-09-16 18:42 UTC (permalink / raw)
To: Himal Prasad Ghimiray, intel-xe; +Cc: Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 13-09-2024 00:46, Himal Prasad Ghimiray wrote:
> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
> void.
>
> Cc: Badal Nilawar <badal.nilawar@intel.com>
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
> Cc: Nirmoy Das <nirmoy.das@intel.com>
> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
> ---
> drivers/gpu/drm/xe/xe_device.c | 3 ++-
> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
> drivers/gpu/drm/xe/xe_query.c | 2 +-
> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
> 13 files changed, 59 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/xe_device.c
> index 5edb1cf51ea5..cce754801e8d 100644
> --- a/drivers/gpu/drm/xe/xe_device.c
> +++ b/drivers/gpu/drm/xe/xe_device.c
> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
> drm_dbg(&xe->drm,
> "Flat CCS has been disabled in bios, May lead to performance impact");
>
> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + return 0;
> }
>
> int xe_device_probe(struct xe_device *xe)
> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/xe_drm_client.c
> index 01f643f6aaba..e5defce08281 100644
> --- a/drivers/gpu/drm/xe/xe_drm_client.c
> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer *p, struct drm_file *file)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
> if (fw_ref != fw) {
> hwe = NULL;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> break;
> }
>
> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> break;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/xe_force_wake.c
> index 73d37e79da9c..01b8bfdd748f 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.c
> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
> @@ -11,6 +11,7 @@
> #include "regs/xe_reg_defs.h"
> #include "xe_gt.h"
> #include "xe_gt_printk.h"
> +#include "xe_macros.h"
> #include "xe_mmio.h"
> #include "xe_sriov.h"
>
> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct xe_force_wake *fw,
> * and waits for acknowledgment for domain to sleep within specified timeout.
> * Ensure this function is always called with return of xe_force_wake_get() as
> * @domains_mask.
> - *
> - * Returns 0 in case of success or non-zero in case of timeout of ack
> + * Warns in case of timeout of ack from domain.
> */
> -int xe_force_wake_put(struct xe_force_wake *fw,
> - int domains_mask)
> +void xe_force_wake_put(struct xe_force_wake *fw,
> + int domains_mask)
> {
> struct xe_gt *gt = fw->gt;
> struct xe_force_wake_domain *domain;
> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> * in error path of individual domains.
> */
> if (!domains_mask)
> - return 0;
> + return;
>
> spin_lock_irqsave(&fw->lock, flags);
> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
> fw->awake_domains &= ~sleep;
> spin_unlock_irqrestore(&fw->lock, flags);
>
> - return ret;
> + if (ret)
> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
This looks good to me. There is no need to propagate error if domain
failed to sleep, warn on is enough. Additionally we should see if fw
domain ack bit is not cleared due to PCIe read completion timeout. i.e.
if mmio read for fw ack reg returned value 0xFFFFFFFF. This means device
is in bad state. In this case should consider putting device in wedged
state.
Regards,
Badal
> +
> }
> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/xe_force_wake.h
> index e17fe316dc3c..c2c729371b2a 100644
> --- a/drivers/gpu/drm/xe/xe_force_wake.h
> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
> struct xe_force_wake *fw);
> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
> enum xe_force_wake_domains domains);
> -int xe_force_wake_put(struct xe_force_wake *fw,
> - int domains_mask);
> +void xe_force_wake_put(struct xe_force_wake *fw,
> + int domains_mask);
>
> static inline int
> xe_force_wake_ref(struct xe_force_wake *fw,
> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
> index b0126daee359..5f5760b60eac 100644
> --- a/drivers/gpu/drm/xe/xe_gt.c
> +++ b/drivers/gpu/drm/xe/xe_gt.c
> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
> */
> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> return 0;
>
> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
> if (IS_SRIOV_PF(gt_to_xe(gt)))
> xe_gt_sriov_pf_init_hw(gt);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return 0;
>
> err_force_wake:
> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
> if (err)
> goto err_out;
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(gt_to_xe(gt));
>
> xe_gt_info(gt, "reset done\n");
> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
> return 0;
>
> err_out:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> XE_WARN_ON(xe_uc_start(>->uc));
> err_fail:
> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>
> xe_uc_stop_prepare(>->uc);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> int xe_gt_suspend(struct xe_gt *gt)
> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>
> xe_gt_disable_host_l2_vram(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_dbg(gt, "suspended\n");
>
> return 0;
> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
> err_msg:
> err = -ETIMEDOUT;
> err_force_wake:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>
> return err;
> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>
> xe_gt_idle_enable_pg(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_dbg(gt, "resumed\n");
>
> return 0;
> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
> err_msg:
> err = -ETIMEDOUT;
> err_force_wake:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>
> return err;
> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/xe_gt_debugfs.c
> index 86146de1d31c..2ecf3c87c6b0 100644
> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
> struct xe_device *xe = gt_to_xe(gt);
> struct xe_hw_engine *hwe;
> enum xe_hw_engine_id id;
> - int fw_ref, err;
> + int fw_ref;
>
> xe_pm_runtime_get(xe);
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct drm_printer *p)
> for_each_hw_engine(hwe, gt, id)
> xe_hw_engine_print(hwe, p);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(xe);
> - if (err)
> - return err;
>
> return 0;
> }
> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/xe_gt_idle.c
> index 9af81b07ab7a..1a7ee5681da6 100644
> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
> }
>
> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> void xe_gt_idle_disable_pg(struct xe_gt *gt)
> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> XE_WARN_ON(!fw_ref);
> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> /**
> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct drm_printer *p)
> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
> pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> }
>
> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/xe_guc_pc.c
> index c7a00565216d..27ad412936f7 100644
> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
> */
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc, u32 *freq)
> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
> *freq = decode_freq(*freq);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return 0;
> }
>
> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc, u32 *freq)
> *freq = pc_get_min_freq(pc);
>
> fw:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> out:
> mutex_unlock(&pc->freq_lock);
> return ret;
> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> xe_gt_idle_disable_c6(gt);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> return 0;
> }
> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -ETIMEDOUT;
> }
>
> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>
> out:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return ret;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
> index 80e5c4ef86ef..8d7d9e7ade51 100644
> --- a/drivers/gpu/drm/xe/xe_oa.c
> +++ b/drivers/gpu/drm/xe/xe_oa.c
> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct xe_oa_stream *stream)
>
> xe_oa_free_oa_buffer(stream);
>
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> xe_pm_runtime_put(stream->oa->xe);
>
> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable rc6 */
> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream *stream,
> err_free_oa_buf:
> xe_oa_free_oa_buffer(stream);
> err_fw_put:
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_pm_runtime_put(stream->oa->xe);
> if (stream->override_gucrc)
> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
> index 96d5ec1fbbd9..4372dd727e9f 100644
> --- a/drivers/gpu/drm/xe/xe_pat.c
> +++ b/drivers/gpu/drm/xe/xe_pat.c
> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt, const struct xe_pat_table_entry ta
> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xelp_pat_ops = {
> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xehp_pat_ops = {
> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xehpc_pat_ops = {
> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> if (!fw_ref)
> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> /*
> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt, const struct xe_pat_table_entry
> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
> {
> struct xe_device *xe = gt_to_xe(gt);
> - int i, err, fw_ref;
> + int i, fw_ref;
> u32 pat;
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
> REG_FIELD_GET(XE2_COH_MODE, pat),
> pat);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> err_fw:
> - xe_assert(xe, (fw_ref && !err));
> + xe_assert(xe, !fw_ref);
> }
>
> static const struct xe_pat_ops xe2_pat_ops = {
> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
> index 7c866b736f00..df7bdf3822cc 100644
> --- a/drivers/gpu/drm/xe/xe_query.c
> +++ b/drivers/gpu/drm/xe/xe_query.c
> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>
> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
> if (fw_ref != XE_FORCEWAKE_ALL) {
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return -EIO;
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/xe_reg_sr.c
> index 6ab6a48b1d29..874523f22f56 100644
> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr, struct xe_gt *gt)
> xa_for_each(&sr->xa, reg, entry)
> apply_one_mmio(gt, entry);
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return;
>
> err_force_wake:
> err = -ETIMEDOUT;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
> }
>
> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct xe_hw_engine *hwe)
> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
> }
>
> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
> - XE_WARN_ON(err);
> -
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> return;
>
> err_force_wake:
> err = -ETIMEDOUT;
> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
> }
>
> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
> index 3b5256d76d9a..1384c97a75c2 100644
> --- a/drivers/gpu/drm/xe/xe_vram.c
> +++ b/drivers/gpu/drm/xe/xe_vram.c
> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile, u64 *vram_size,
> /* remove the tile offset so we have just the available size */
> *vram_size = offset - *tile_offset;
>
> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
> + return 0;
> }
>
> static void vram_fini(void *arg)
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-16 18:42 ` Nilawar, Badal
@ 2024-09-17 4:48 ` Ghimiray, Himal Prasad
2024-09-17 4:52 ` Nilawar, Badal
0 siblings, 1 reply; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-17 4:48 UTC (permalink / raw)
To: Nilawar, Badal, intel-xe; +Cc: Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 17-09-2024 00:12, Nilawar, Badal wrote:
>
>
> On 13-09-2024 00:46, Himal Prasad Ghimiray wrote:
>> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
>> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
>> void.
>>
>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>> ---
>> drivers/gpu/drm/xe/xe_device.c | 3 ++-
>> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
>> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
>> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
>> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
>> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
>> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
>> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
>> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
>> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
>> drivers/gpu/drm/xe/xe_query.c | 2 +-
>> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
>> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
>> 13 files changed, 59 insertions(+), 65 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/xe/xe_device.c
>> b/drivers/gpu/drm/xe/xe_device.c
>> index 5edb1cf51ea5..cce754801e8d 100644
>> --- a/drivers/gpu/drm/xe/xe_device.c
>> +++ b/drivers/gpu/drm/xe/xe_device.c
>> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
>> drm_dbg(&xe->drm,
>> "Flat CCS has been disabled in bios, May lead to
>> performance impact");
>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + return 0;
>> }
>> int xe_device_probe(struct xe_device *xe)
>> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c
>> b/drivers/gpu/drm/xe/xe_drm_client.c
>> index 01f643f6aaba..e5defce08281 100644
>> --- a/drivers/gpu/drm/xe/xe_drm_client.c
>> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
>> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer
>> *p, struct drm_file *file)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
>> if (fw_ref != fw) {
>> hwe = NULL;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> break;
>> }
>> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> break;
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c
>> b/drivers/gpu/drm/xe/xe_force_wake.c
>> index 73d37e79da9c..01b8bfdd748f 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>> @@ -11,6 +11,7 @@
>> #include "regs/xe_reg_defs.h"
>> #include "xe_gt.h"
>> #include "xe_gt_printk.h"
>> +#include "xe_macros.h"
>> #include "xe_mmio.h"
>> #include "xe_sriov.h"
>> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct
>> xe_force_wake *fw,
>> * and waits for acknowledgment for domain to sleep within specified
>> timeout.
>> * Ensure this function is always called with return of
>> xe_force_wake_get() as
>> * @domains_mask.
>> - *
>> - * Returns 0 in case of success or non-zero in case of timeout of ack
>> + * Warns in case of timeout of ack from domain.
>> */
>> -int xe_force_wake_put(struct xe_force_wake *fw,
>> - int domains_mask)
>> +void xe_force_wake_put(struct xe_force_wake *fw,
>> + int domains_mask)
>> {
>> struct xe_gt *gt = fw->gt;
>> struct xe_force_wake_domain *domain;
>> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> * in error path of individual domains.
>> */
>> if (!domains_mask)
>> - return 0;
>> + return;
>> spin_lock_irqsave(&fw->lock, flags);
>> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>> fw->awake_domains &= ~sleep;
>> spin_unlock_irqrestore(&fw->lock, flags);
>> - return ret;
>> + if (ret)
>> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
>
> This looks good to me. There is no need to propagate error if domain
> failed to sleep, warn on is enough. Additionally we should see if fw
> domain ack bit is not cleared due to PCIe read completion timeout. i.e.
> if mmio read for fw ack reg returned value 0xFFFFFFFF. This means device
> is in bad state. In this case should consider putting device in wedged
> state.
>
This seems to be good check to have. On cross verifying, I see similar
implementation in i915. If you are ok, How about taking this as seperate
patch ?
BR
Himal
> Regards,
> Badal
>> +
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h
>> b/drivers/gpu/drm/xe/xe_force_wake.h
>> index e17fe316dc3c..c2c729371b2a 100644
>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>> struct xe_force_wake *fw);
>> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>> enum xe_force_wake_domains domains);
>> -int xe_force_wake_put(struct xe_force_wake *fw,
>> - int domains_mask);
>> +void xe_force_wake_put(struct xe_force_wake *fw,
>> + int domains_mask);
>> static inline int
>> xe_force_wake_ref(struct xe_force_wake *fw,
>> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>> index b0126daee359..5f5760b60eac 100644
>> --- a/drivers/gpu/drm/xe/xe_gt.c
>> +++ b/drivers/gpu/drm/xe/xe_gt.c
>> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>> */
>> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
>> if (IS_SRIOV_PF(gt_to_xe(gt)))
>> xe_gt_sriov_pf_init_hw(gt);
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>> err_force_wake:
>> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
>> if (err)
>> goto err_out;
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(gt_to_xe(gt));
>> xe_gt_info(gt, "reset done\n");
>> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
>> return 0;
>> err_out:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> XE_WARN_ON(xe_uc_start(>->uc));
>> err_fail:
>> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
>> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>> xe_uc_stop_prepare(>->uc);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>> int xe_gt_suspend(struct xe_gt *gt)
>> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>> xe_gt_disable_host_l2_vram(gt);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_dbg(gt, "suspended\n");
>> return 0;
>> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>> err_msg:
>> err = -ETIMEDOUT;
>> err_force_wake:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>> return err;
>> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>> xe_gt_idle_enable_pg(gt);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_dbg(gt, "resumed\n");
>> return 0;
>> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
>> err_msg:
>> err = -ETIMEDOUT;
>> err_force_wake:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>> return err;
>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> index 86146de1d31c..2ecf3c87c6b0 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct
>> drm_printer *p)
>> struct xe_device *xe = gt_to_xe(gt);
>> struct xe_hw_engine *hwe;
>> enum xe_hw_engine_id id;
>> - int fw_ref, err;
>> + int fw_ref;
>> xe_pm_runtime_get(xe);
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct
>> drm_printer *p)
>> for_each_hw_engine(hwe, gt, id)
>> xe_hw_engine_print(hwe, p);
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(xe);
>> - if (err)
>> - return err;
>> return 0;
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c
>> b/drivers/gpu/drm/xe/xe_gt_idle.c
>> index 9af81b07ab7a..1a7ee5681da6 100644
>> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
>> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
>> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
>> }
>> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>> void xe_gt_idle_disable_pg(struct xe_gt *gt)
>> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> XE_WARN_ON(!fw_ref);
>> xe_mmio_write32(>->mmio, POWERGATE_ENABLE,
>> gtidle->powergate_enable);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>> /**
>> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct
>> drm_printer *p)
>> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
>> pg_status = xe_mmio_read32(>->mmio, POWERGATE_DOMAIN_STATUS);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> }
>> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c
>> b/drivers/gpu/drm/xe/xe_guc_pc.c
>> index c7a00565216d..27ad412936f7 100644
>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc,
>> u32 *freq)
>> */
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc,
>> u32 *freq)
>> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
>> *freq = decode_freq(*freq);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>> }
>> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc,
>> u32 *freq)
>> *freq = pc_get_min_freq(pc);
>> fw:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> out:
>> mutex_unlock(&pc->freq_lock);
>> return ret;
>> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>> xe_gt_idle_disable_c6(gt);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return 0;
>> }
>> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -ETIMEDOUT;
>> }
>> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>> out:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return ret;
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>> index 80e5c4ef86ef..8d7d9e7ade51 100644
>> --- a/drivers/gpu/drm/xe/xe_oa.c
>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct
>> xe_oa_stream *stream)
>> xe_oa_free_oa_buffer(stream);
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
>> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> xe_pm_runtime_put(stream->oa->xe);
>> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to enable
>> rc6 */
>> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct xe_oa_stream
>> *stream,
>> err_free_oa_buf:
>> xe_oa_free_oa_buffer(stream);
>> err_fw_put:
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_pm_runtime_put(stream->oa->xe);
>> if (stream->override_gucrc)
>> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
>> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
>> index 96d5ec1fbbd9..4372dd727e9f 100644
>> --- a/drivers/gpu/drm/xe/xe_pat.c
>> +++ b/drivers/gpu/drm/xe/xe_pat.c
>> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt,
>> const struct xe_pat_table_entry ta
>> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct
>> drm_printer *p)
>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>> }
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>> static const struct xe_pat_ops xelp_pat_ops = {
>> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
>> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct
>> drm_printer *p)
>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>> }
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>> static const struct xe_pat_ops xehp_pat_ops = {
>> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
>> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct
>> drm_printer *p)
>> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
>> }
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>> static const struct xe_pat_ops xehpc_pat_ops = {
>> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
>> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> if (!fw_ref)
>> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct
>> drm_printer *p)
>> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
>> }
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>> /*
>> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt,
>> const struct xe_pat_table_entry
>> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>> {
>> struct xe_device *xe = gt_to_xe(gt);
>> - int i, err, fw_ref;
>> + int i, fw_ref;
>> u32 pat;
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct
>> drm_printer *p)
>> REG_FIELD_GET(XE2_COH_MODE, pat),
>> pat);
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> err_fw:
>> - xe_assert(xe, (fw_ref && !err));
>> + xe_assert(xe, !fw_ref);
>> }
>> static const struct xe_pat_ops xe2_pat_ops = {
>> diff --git a/drivers/gpu/drm/xe/xe_query.c
>> b/drivers/gpu/drm/xe/xe_query.c
>> index 7c866b736f00..df7bdf3822cc 100644
>> --- a/drivers/gpu/drm/xe/xe_query.c
>> +++ b/drivers/gpu/drm/xe/xe_query.c
>> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>> if (fw_ref != XE_FORCEWAKE_ALL) {
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return -EIO;
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c
>> b/drivers/gpu/drm/xe/xe_reg_sr.c
>> index 6ab6a48b1d29..874523f22f56 100644
>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr,
>> struct xe_gt *gt)
>> xa_for_each(&sr->xa, reg, entry)
>> apply_one_mmio(gt, entry);
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return;
>> err_force_wake:
>> err = -ETIMEDOUT;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
>> }
>> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct
>> xe_hw_engine *hwe)
>> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base,
>> slot), addr);
>> }
>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> - XE_WARN_ON(err);
>> -
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> return;
>> err_force_wake:
>> err = -ETIMEDOUT;
>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>> }
>> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
>> index 3b5256d76d9a..1384c97a75c2 100644
>> --- a/drivers/gpu/drm/xe/xe_vram.c
>> +++ b/drivers/gpu/drm/xe/xe_vram.c
>> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile,
>> u64 *vram_size,
>> /* remove the tile offset so we have just the available size */
>> *vram_size = offset - *tile_offset;
>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>> + return 0;
>> }
>> static void vram_fini(void *arg)
>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-17 4:48 ` Ghimiray, Himal Prasad
@ 2024-09-17 4:52 ` Nilawar, Badal
2024-09-17 5:21 ` Nilawar, Badal
0 siblings, 1 reply; 58+ messages in thread
From: Nilawar, Badal @ 2024-09-17 4:52 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, intel-xe
Cc: Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 17-09-2024 10:18, Ghimiray, Himal Prasad wrote:
>
>
> On 17-09-2024 00:12, Nilawar, Badal wrote:
>>
>>
>> On 13-09-2024 00:46, Himal Prasad Ghimiray wrote:
>>> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
>>> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
>>> void.
>>>
>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>> ---
>>> drivers/gpu/drm/xe/xe_device.c | 3 ++-
>>> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
>>> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
>>> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
>>> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
>>> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
>>> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
>>> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
>>> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
>>> drivers/gpu/drm/xe/xe_pat.c | 30 +++++++++++++++---------------
>>> drivers/gpu/drm/xe/xe_query.c | 2 +-
>>> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
>>> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
>>> 13 files changed, 59 insertions(+), 65 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/
>>> xe_device.c
>>> index 5edb1cf51ea5..cce754801e8d 100644
>>> --- a/drivers/gpu/drm/xe/xe_device.c
>>> +++ b/drivers/gpu/drm/xe/xe_device.c
>>> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
>>> drm_dbg(&xe->drm,
>>> "Flat CCS has been disabled in bios, May lead to
>>> performance impact");
>>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + return 0;
>>> }
>>> int xe_device_probe(struct xe_device *xe)
>>> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/xe/
>>> xe_drm_client.c
>>> index 01f643f6aaba..e5defce08281 100644
>>> --- a/drivers/gpu/drm/xe/xe_drm_client.c
>>> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
>>> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer
>>> *p, struct drm_file *file)
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
>>> if (fw_ref != fw) {
>>> hwe = NULL;
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> break;
>>> }
>>> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> break;
>>> }
>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/xe/
>>> xe_force_wake.c
>>> index 73d37e79da9c..01b8bfdd748f 100644
>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>> @@ -11,6 +11,7 @@
>>> #include "regs/xe_reg_defs.h"
>>> #include "xe_gt.h"
>>> #include "xe_gt_printk.h"
>>> +#include "xe_macros.h"
>>> #include "xe_mmio.h"
>>> #include "xe_sriov.h"
>>> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct
>>> xe_force_wake *fw,
>>> * and waits for acknowledgment for domain to sleep within
>>> specified timeout.
>>> * Ensure this function is always called with return of
>>> xe_force_wake_get() as
>>> * @domains_mask.
>>> - *
>>> - * Returns 0 in case of success or non-zero in case of timeout of ack
>>> + * Warns in case of timeout of ack from domain.
>>> */
>>> -int xe_force_wake_put(struct xe_force_wake *fw,
>>> - int domains_mask)
>>> +void xe_force_wake_put(struct xe_force_wake *fw,
>>> + int domains_mask)
>>> {
>>> struct xe_gt *gt = fw->gt;
>>> struct xe_force_wake_domain *domain;
>>> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>>> * in error path of individual domains.
>>> */
>>> if (!domains_mask)
>>> - return 0;
>>> + return;
>>> spin_lock_irqsave(&fw->lock, flags);
>>> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>>> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>>> fw->awake_domains &= ~sleep;
>>> spin_unlock_irqrestore(&fw->lock, flags);
>>> - return ret;
>>> + if (ret)
>>> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
>>
>> This looks good to me. There is no need to propagate error if domain
>> failed to sleep, warn on is enough. Additionally we should see if fw
>> domain ack bit is not cleared due to PCIe read completion timeout.
>> i.e. if mmio read for fw ack reg returned value 0xFFFFFFFF. This means
>> device is in bad state. In this case should consider putting device in
>> wedged state.
>>
>
>
> This seems to be good check to have. On cross verifying, I see similar
> implementation in i915. If you are ok, How about taking this as seperate
> patch ?
Yes, i915 has similar implementation. Sure, lets handle it in seperate
patch.
Regards,
Badal
>
> BR
> Himal
>
>> Regards,
>> Badal
>>> +
>>> }
>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/xe/
>>> xe_force_wake.h
>>> index e17fe316dc3c..c2c729371b2a 100644
>>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>>> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>>> struct xe_force_wake *fw);
>>> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>>> enum xe_force_wake_domains domains);
>>> -int xe_force_wake_put(struct xe_force_wake *fw,
>>> - int domains_mask);
>>> +void xe_force_wake_put(struct xe_force_wake *fw,
>>> + int domains_mask);
>>> static inline int
>>> xe_force_wake_ref(struct xe_force_wake *fw,
>>> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>>> index b0126daee359..5f5760b60eac 100644
>>> --- a/drivers/gpu/drm/xe/xe_gt.c
>>> +++ b/drivers/gpu/drm/xe/xe_gt.c
>>> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>>> */
>>> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> - XE_WARN_ON(err);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return 0;
>>> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
>>> if (IS_SRIOV_PF(gt_to_xe(gt)))
>>> xe_gt_sriov_pf_init_hw(gt);
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> - XE_WARN_ON(err);
>>> -
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return 0;
>>> err_force_wake:
>>> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
>>> if (err)
>>> goto err_out;
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> - XE_WARN_ON(err);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_pm_runtime_put(gt_to_xe(gt));
>>> xe_gt_info(gt, "reset done\n");
>>> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
>>> return 0;
>>> err_out:
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> XE_WARN_ON(xe_uc_start(>->uc));
>>> err_fail:
>>> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
>>> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>>> xe_uc_stop_prepare(>->uc);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> }
>>> int xe_gt_suspend(struct xe_gt *gt)
>>> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>> xe_gt_disable_host_l2_vram(gt);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_gt_dbg(gt, "suspended\n");
>>> return 0;
>>> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>> err_msg:
>>> err = -ETIMEDOUT;
>>> err_force_wake:
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>>> return err;
>>> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>> xe_gt_idle_enable_pg(gt);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_gt_dbg(gt, "resumed\n");
>>> return 0;
>>> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>> err_msg:
>>> err = -ETIMEDOUT;
>>> err_force_wake:
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>>> return err;
>>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/xe/
>>> xe_gt_debugfs.c
>>> index 86146de1d31c..2ecf3c87c6b0 100644
>>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>>> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> struct xe_device *xe = gt_to_xe(gt);
>>> struct xe_hw_engine *hwe;
>>> enum xe_hw_engine_id id;
>>> - int fw_ref, err;
>>> + int fw_ref;
>>> xe_pm_runtime_get(xe);
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> for_each_hw_engine(hwe, gt, id)
>>> xe_hw_engine_print(hwe, p);
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_pm_runtime_put(xe);
>>> - if (err)
>>> - return err;
>>> return 0;
>>> }
>>> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/
>>> xe_gt_idle.c
>>> index 9af81b07ab7a..1a7ee5681da6 100644
>>> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
>>> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
>>> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
>>> }
>>> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle->powergate_enable);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> }
>>> void xe_gt_idle_disable_pg(struct xe_gt *gt)
>>> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>> XE_WARN_ON(!fw_ref);
>>> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle-
>>> >powergate_enable);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> }
>>> /**
>>> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
>>> pg_status = xe_mmio_read32(>->mmio,
>>> POWERGATE_DOMAIN_STATUS);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> }
>>> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
>>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/
>>> xe_guc_pc.c
>>> index c7a00565216d..27ad412936f7 100644
>>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>>> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc,
>>> u32 *freq)
>>> */
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return -ETIMEDOUT;
>>> }
>>> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc,
>>> u32 *freq)
>>> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
>>> *freq = decode_freq(*freq);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return 0;
>>> }
>>> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc,
>>> u32 *freq)
>>> *freq = pc_get_min_freq(pc);
>>> fw:
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> out:
>>> mutex_unlock(&pc->freq_lock);
>>> return ret;
>>> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return -ETIMEDOUT;
>>> }
>>> xe_gt_idle_disable_c6(gt);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return 0;
>>> }
>>> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return -ETIMEDOUT;
>>> }
>>> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>>> out:
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return ret;
>>> }
>>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>>> index 80e5c4ef86ef..8d7d9e7ade51 100644
>>> --- a/drivers/gpu/drm/xe/xe_oa.c
>>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>>> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct
>>> xe_oa_stream *stream)
>>> xe_oa_free_oa_buffer(stream);
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
>>> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>> xe_pm_runtime_put(stream->oa->xe);
>>> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to
>>> enable rc6 */
>>> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct
>>> xe_oa_stream *stream,
>>> err_free_oa_buf:
>>> xe_oa_free_oa_buffer(stream);
>>> err_fw_put:
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_pm_runtime_put(stream->oa->xe);
>>> if (stream->override_gucrc)
>>> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>->uc.guc.pc));
>>> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
>>> index 96d5ec1fbbd9..4372dd727e9f 100644
>>> --- a/drivers/gpu/drm/xe/xe_pat.c
>>> +++ b/drivers/gpu/drm/xe/xe_pat.c
>>> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt,
>>> const struct xe_pat_table_entry ta
>>> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>>> {
>>> struct xe_device *xe = gt_to_xe(gt);
>>> - int i, err, fw_ref;
>>> + int i, fw_ref;
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>> if (!fw_ref)
>>> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>>> }
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> err_fw:
>>> - xe_assert(xe, (fw_ref && !err));
>>> + xe_assert(xe, !fw_ref);
>>> }
>>> static const struct xe_pat_ops xelp_pat_ops = {
>>> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
>>> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>>> {
>>> struct xe_device *xe = gt_to_xe(gt);
>>> - int i, err, fw_ref;
>>> + int i, fw_ref;
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>> if (!fw_ref)
>>> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>>> }
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> err_fw:
>>> - xe_assert(xe, (fw_ref && !err));
>>> + xe_assert(xe, !fw_ref);
>>> }
>>> static const struct xe_pat_ops xehp_pat_ops = {
>>> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
>>> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>>> {
>>> struct xe_device *xe = gt_to_xe(gt);
>>> - int i, err, fw_ref;
>>> + int i, fw_ref;
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>> if (!fw_ref)
>>> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
>>> }
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> err_fw:
>>> - xe_assert(xe, (fw_ref && !err));
>>> + xe_assert(xe, !fw_ref);
>>> }
>>> static const struct xe_pat_ops xehpc_pat_ops = {
>>> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
>>> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>>> {
>>> struct xe_device *xe = gt_to_xe(gt);
>>> - int i, err, fw_ref;
>>> + int i, fw_ref;
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>> if (!fw_ref)
>>> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
>>> }
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> err_fw:
>>> - xe_assert(xe, (fw_ref && !err));
>>> + xe_assert(xe, !fw_ref);
>>> }
>>> /*
>>> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt,
>>> const struct xe_pat_table_entry
>>> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>>> {
>>> struct xe_device *xe = gt_to_xe(gt);
>>> - int i, err, fw_ref;
>>> + int i, fw_ref;
>>> u32 pat;
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct
>>> drm_printer *p)
>>> REG_FIELD_GET(XE2_COH_MODE, pat),
>>> pat);
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> err_fw:
>>> - xe_assert(xe, (fw_ref && !err));
>>> + xe_assert(xe, !fw_ref);
>>> }
>>> static const struct xe_pat_ops xe2_pat_ops = {
>>> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/
>>> xe_query.c
>>> index 7c866b736f00..df7bdf3822cc 100644
>>> --- a/drivers/gpu/drm/xe/xe_query.c
>>> +++ b/drivers/gpu/drm/xe/xe_query.c
>>> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return -EIO;
>>> }
>>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/
>>> xe_reg_sr.c
>>> index 6ab6a48b1d29..874523f22f56 100644
>>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>>> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr *sr,
>>> struct xe_gt *gt)
>>> xa_for_each(&sr->xa, reg, entry)
>>> apply_one_mmio(gt, entry);
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> - XE_WARN_ON(err);
>>> -
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return;
>>> err_force_wake:
>>> err = -ETIMEDOUT;
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
>>> }
>>> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct
>>> xe_hw_engine *hwe)
>>> xe_mmio_write32(>->mmio, RING_FORCE_TO_NONPRIV(mmio_base,
>>> slot), addr);
>>> }
>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> - XE_WARN_ON(err);
>>> -
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> return;
>>> err_force_wake:
>>> err = -ETIMEDOUT;
>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>>> }
>>> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/xe_vram.c
>>> index 3b5256d76d9a..1384c97a75c2 100644
>>> --- a/drivers/gpu/drm/xe/xe_vram.c
>>> +++ b/drivers/gpu/drm/xe/xe_vram.c
>>> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile,
>>> u64 *vram_size,
>>> /* remove the tile offset so we have just the available size */
>>> *vram_size = offset - *tile_offset;
>>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>> + return 0;
>>> }
>>> static void vram_fini(void *arg)
>>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-17 4:52 ` Nilawar, Badal
@ 2024-09-17 5:21 ` Nilawar, Badal
2024-09-17 5:24 ` Ghimiray, Himal Prasad
0 siblings, 1 reply; 58+ messages in thread
From: Nilawar, Badal @ 2024-09-17 5:21 UTC (permalink / raw)
To: Ghimiray, Himal Prasad, intel-xe
Cc: Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 17-09-2024 10:22, Nilawar, Badal wrote:
>
>
> On 17-09-2024 10:18, Ghimiray, Himal Prasad wrote:
>>
>>
>> On 17-09-2024 00:12, Nilawar, Badal wrote:
>>>
>>>
>>> On 13-09-2024 00:46, Himal Prasad Ghimiray wrote:
>>>> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
>>>> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and
>>>> return
>>>> void.
>>>>
>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>> ---
>>>> drivers/gpu/drm/xe/xe_device.c | 3 ++-
>>>> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
>>>> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
>>>> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
>>>> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
>>>> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
>>>> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
>>>> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
>>>> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
>>>> drivers/gpu/drm/xe/xe_pat.c | 30 ++++++++++++++
>>>> +---------------
>>>> drivers/gpu/drm/xe/xe_query.c | 2 +-
>>>> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
>>>> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
>>>> 13 files changed, 59 insertions(+), 65 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/
>>>> xe_device.c
>>>> index 5edb1cf51ea5..cce754801e8d 100644
>>>> --- a/drivers/gpu/drm/xe/xe_device.c
>>>> +++ b/drivers/gpu/drm/xe/xe_device.c
>>>> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device *xe)
>>>> drm_dbg(&xe->drm,
>>>> "Flat CCS has been disabled in bios, May lead to
>>>> performance impact");
>>>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + return 0;
>>>> }
>>>> int xe_device_probe(struct xe_device *xe)
>>>> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/
>>>> xe/ xe_drm_client.c
>>>> index 01f643f6aaba..e5defce08281 100644
>>>> --- a/drivers/gpu/drm/xe/xe_drm_client.c
>>>> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
>>>> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer
>>>> *p, struct drm_file *file)
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
>>>> if (fw_ref != fw) {
>>>> hwe = NULL;
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> break;
>>>> }
>>>> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> break;
>>>> }
>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/
>>>> xe/ xe_force_wake.c
>>>> index 73d37e79da9c..01b8bfdd748f 100644
>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>> @@ -11,6 +11,7 @@
>>>> #include "regs/xe_reg_defs.h"
>>>> #include "xe_gt.h"
>>>> #include "xe_gt_printk.h"
>>>> +#include "xe_macros.h"
>>>> #include "xe_mmio.h"
>>>> #include "xe_sriov.h"
>>>> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct
>>>> xe_force_wake *fw,
>>>> * and waits for acknowledgment for domain to sleep within
>>>> specified timeout.
>>>> * Ensure this function is always called with return of
>>>> xe_force_wake_get() as
>>>> * @domains_mask.
>>>> - *
>>>> - * Returns 0 in case of success or non-zero in case of timeout of ack
Instead of changing doc here, its better to add final doc here itself.
>>>> + * Warns in case of timeout of ack from domain.
>>>> */
>>>> -int xe_force_wake_put(struct xe_force_wake *fw,
>>>> - int domains_mask)
>>>> +void xe_force_wake_put(struct xe_force_wake *fw,
>>>> + int domains_mask)
>>>> {
>>>> struct xe_gt *gt = fw->gt;
>>>> struct xe_force_wake_domain *domain;
>>>> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>>>> * in error path of individual domains.
>>>> */
>>>> if (!domains_mask)
>>>> - return 0;
>>>> + return;
>>>> spin_lock_irqsave(&fw->lock, flags);
>>>> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>>>> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>>>> fw->awake_domains &= ~sleep;
>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>> - return ret;
>>>> + if (ret)
>>>> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
Move this warn on to patch 2/23.
>>>
>>> This looks good to me. There is no need to propagate error if domain
>>> failed to sleep, warn on is enough. Additionally we should see if fw
>>> domain ack bit is not cleared due to PCIe read completion timeout.
>>> i.e. if mmio read for fw ack reg returned value 0xFFFFFFFF. This
>>> means device is in bad state. In this case should consider putting
>>> device in wedged state.
>>>
>>
>>
>> This seems to be good check to have. On cross verifying, I see similar
>> implementation in i915. If you are ok, How about taking this as
>> seperate patch ?
>
> Yes, i915 has similar implementation. Sure, lets handle it in seperate
> patch.
>
> Regards,
> Badal
>>
>> BR
>> Himal
>>
>>> Regards,
>>> Badal
>>>> +
>>>> }
>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/
>>>> xe/ xe_force_wake.h
>>>> index e17fe316dc3c..c2c729371b2a 100644
>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>>>> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>>>> struct xe_force_wake *fw);
>>>> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>>>> enum xe_force_wake_domains domains);
>>>> -int xe_force_wake_put(struct xe_force_wake *fw,
>>>> - int domains_mask);
>>>> +void xe_force_wake_put(struct xe_force_wake *fw,
>>>> + int domains_mask);
>>>> static inline int
>>>> xe_force_wake_ref(struct xe_force_wake *fw,
>>>> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>>>> index b0126daee359..5f5760b60eac 100644
>>>> --- a/drivers/gpu/drm/xe/xe_gt.c
>>>> +++ b/drivers/gpu/drm/xe/xe_gt.c
>>>> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>>>> */
>>>> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> - XE_WARN_ON(err);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
I recognize the logic behind implementing this change here since it
won't disrupt the compilation process. By relocating XE_WARN_ON within
force_wake_put, it's more appropriate to introduce this cleanup in
respective patches. This particular patch will solely include the
alteration of the return type and the documentation.
Regards,
Badal
>>>> return 0;
>>>> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
>>>> if (IS_SRIOV_PF(gt_to_xe(gt)))
>>>> xe_gt_sriov_pf_init_hw(gt);
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> - XE_WARN_ON(err);
>>>> -
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return 0;
>>>> err_force_wake:
>>>> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
>>>> if (err)
>>>> goto err_out;
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> - XE_WARN_ON(err);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_pm_runtime_put(gt_to_xe(gt));
>>>> xe_gt_info(gt, "reset done\n");
>>>> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
>>>> return 0;
>>>> err_out:
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> XE_WARN_ON(xe_uc_start(>->uc));
>>>> err_fail:
>>>> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
>>>> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>>>> xe_uc_stop_prepare(>->uc);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> }
>>>> int xe_gt_suspend(struct xe_gt *gt)
>>>> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>>> xe_gt_disable_host_l2_vram(gt);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_gt_dbg(gt, "suspended\n");
>>>> return 0;
>>>> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>>> err_msg:
>>>> err = -ETIMEDOUT;
>>>> err_force_wake:
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>>>> return err;
>>>> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>>> xe_gt_idle_enable_pg(gt);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_gt_dbg(gt, "resumed\n");
>>>> return 0;
>>>> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>>> err_msg:
>>>> err = -ETIMEDOUT;
>>>> err_force_wake:
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>>>> return err;
>>>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/
>>>> xe/ xe_gt_debugfs.c
>>>> index 86146de1d31c..2ecf3c87c6b0 100644
>>>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>>>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>>>> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> struct xe_device *xe = gt_to_xe(gt);
>>>> struct xe_hw_engine *hwe;
>>>> enum xe_hw_engine_id id;
>>>> - int fw_ref, err;
>>>> + int fw_ref;
>>>> xe_pm_runtime_get(xe);
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> for_each_hw_engine(hwe, gt, id)
>>>> xe_hw_engine_print(hwe, p);
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_pm_runtime_put(xe);
>>>> - if (err)
>>>> - return err;
>>>> return 0;
>>>> }
>>>> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/
>>>> xe_gt_idle.c
>>>> index 9af81b07ab7a..1a7ee5681da6 100644
>>>> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
>>>> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
>>>> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
>>>> }
>>>> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle-
>>>> >powergate_enable);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> }
>>>> void xe_gt_idle_disable_pg(struct xe_gt *gt)
>>>> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>> XE_WARN_ON(!fw_ref);
>>>> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle-
>>>> >powergate_enable);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> }
>>>> /**
>>>> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
>>>> pg_status = xe_mmio_read32(>->mmio,
>>>> POWERGATE_DOMAIN_STATUS);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> }
>>>> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
>>>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/
>>>> xe_guc_pc.c
>>>> index c7a00565216d..27ad412936f7 100644
>>>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>>>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>>>> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc,
>>>> u32 *freq)
>>>> */
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return -ETIMEDOUT;
>>>> }
>>>> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc *pc,
>>>> u32 *freq)
>>>> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
>>>> *freq = decode_freq(*freq);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return 0;
>>>> }
>>>> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc *pc,
>>>> u32 *freq)
>>>> *freq = pc_get_min_freq(pc);
>>>> fw:
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> out:
>>>> mutex_unlock(&pc->freq_lock);
>>>> return ret;
>>>> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc *pc)
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return -ETIMEDOUT;
>>>> }
>>>> xe_gt_idle_disable_c6(gt);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return 0;
>>>> }
>>>> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return -ETIMEDOUT;
>>>> }
>>>> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>>> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>>>> out:
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return ret;
>>>> }
>>>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>>>> index 80e5c4ef86ef..8d7d9e7ade51 100644
>>>> --- a/drivers/gpu/drm/xe/xe_oa.c
>>>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>>>> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct
>>>> xe_oa_stream *stream)
>>>> xe_oa_free_oa_buffer(stream);
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
>>>> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>> xe_pm_runtime_put(stream->oa->xe);
>>>> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to
>>>> enable rc6 */
>>>> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct
>>>> xe_oa_stream *stream,
>>>> err_free_oa_buf:
>>>> xe_oa_free_oa_buffer(stream);
>>>> err_fw_put:
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_pm_runtime_put(stream->oa->xe);
>>>> if (stream->override_gucrc)
>>>> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>-
>>>> >uc.guc.pc));
>>>> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
>>>> index 96d5ec1fbbd9..4372dd727e9f 100644
>>>> --- a/drivers/gpu/drm/xe/xe_pat.c
>>>> +++ b/drivers/gpu/drm/xe/xe_pat.c
>>>> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt,
>>>> const struct xe_pat_table_entry ta
>>>> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>>>> {
>>>> struct xe_device *xe = gt_to_xe(gt);
>>>> - int i, err, fw_ref;
>>>> + int i, fw_ref;
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>> if (!fw_ref)
>>>> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>>>> }
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> err_fw:
>>>> - xe_assert(xe, (fw_ref && !err));
>>>> + xe_assert(xe, !fw_ref);
>>>> }
>>>> static const struct xe_pat_ops xelp_pat_ops = {
>>>> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
>>>> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>>>> {
>>>> struct xe_device *xe = gt_to_xe(gt);
>>>> - int i, err, fw_ref;
>>>> + int i, fw_ref;
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>> if (!fw_ref)
>>>> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>>>> }
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> err_fw:
>>>> - xe_assert(xe, (fw_ref && !err));
>>>> + xe_assert(xe, !fw_ref);
>>>> }
>>>> static const struct xe_pat_ops xehp_pat_ops = {
>>>> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
>>>> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>>>> {
>>>> struct xe_device *xe = gt_to_xe(gt);
>>>> - int i, err, fw_ref;
>>>> + int i, fw_ref;
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>> if (!fw_ref)
>>>> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
>>>> }
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> err_fw:
>>>> - xe_assert(xe, (fw_ref && !err));
>>>> + xe_assert(xe, !fw_ref);
>>>> }
>>>> static const struct xe_pat_ops xehpc_pat_ops = {
>>>> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
>>>> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>>>> {
>>>> struct xe_device *xe = gt_to_xe(gt);
>>>> - int i, err, fw_ref;
>>>> + int i, fw_ref;
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>> if (!fw_ref)
>>>> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
>>>> }
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> err_fw:
>>>> - xe_assert(xe, (fw_ref && !err));
>>>> + xe_assert(xe, !fw_ref);
>>>> }
>>>> /*
>>>> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt *gt,
>>>> const struct xe_pat_table_entry
>>>> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>>>> {
>>>> struct xe_device *xe = gt_to_xe(gt);
>>>> - int i, err, fw_ref;
>>>> + int i, fw_ref;
>>>> u32 pat;
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct
>>>> drm_printer *p)
>>>> REG_FIELD_GET(XE2_COH_MODE, pat),
>>>> pat);
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> err_fw:
>>>> - xe_assert(xe, (fw_ref && !err));
>>>> + xe_assert(xe, !fw_ref);
>>>> }
>>>> static const struct xe_pat_ops xe2_pat_ops = {
>>>> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/
>>>> xe_query.c
>>>> index 7c866b736f00..df7bdf3822cc 100644
>>>> --- a/drivers/gpu/drm/xe/xe_query.c
>>>> +++ b/drivers/gpu/drm/xe/xe_query.c
>>>> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return -EIO;
>>>> }
>>>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/
>>>> xe_reg_sr.c
>>>> index 6ab6a48b1d29..874523f22f56 100644
>>>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>>>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>>>> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr
>>>> *sr, struct xe_gt *gt)
>>>> xa_for_each(&sr->xa, reg, entry)
>>>> apply_one_mmio(gt, entry);
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> - XE_WARN_ON(err);
>>>> -
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return;
>>>> err_force_wake:
>>>> err = -ETIMEDOUT;
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
>>>> }
>>>> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct
>>>> xe_hw_engine *hwe)
>>>> xe_mmio_write32(>->mmio,
>>>> RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
>>>> }
>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> - XE_WARN_ON(err);
>>>> -
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> return;
>>>> err_force_wake:
>>>> err = -ETIMEDOUT;
>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>>>> }
>>>> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/
>>>> xe_vram.c
>>>> index 3b5256d76d9a..1384c97a75c2 100644
>>>> --- a/drivers/gpu/drm/xe/xe_vram.c
>>>> +++ b/drivers/gpu/drm/xe/xe_vram.c
>>>> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile,
>>>> u64 *vram_size,
>>>> /* remove the tile offset so we have just the available size */
>>>> *vram_size = offset - *tile_offset;
>>>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>> + return 0;
>>>> }
>>>> static void vram_fini(void *arg)
>>>
>
^ permalink raw reply [flat|nested] 58+ messages in thread* Re: [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put
2024-09-17 5:21 ` Nilawar, Badal
@ 2024-09-17 5:24 ` Ghimiray, Himal Prasad
0 siblings, 0 replies; 58+ messages in thread
From: Ghimiray, Himal Prasad @ 2024-09-17 5:24 UTC (permalink / raw)
To: Nilawar, Badal, intel-xe; +Cc: Rodrigo Vivi, Lucas De Marchi, Nirmoy Das
On 17-09-2024 10:51, Nilawar, Badal wrote:
>
>
> On 17-09-2024 10:22, Nilawar, Badal wrote:
>>
>>
>> On 17-09-2024 10:18, Ghimiray, Himal Prasad wrote:
>>>
>>>
>>> On 17-09-2024 00:12, Nilawar, Badal wrote:
>>>>
>>>>
>>>> On 13-09-2024 00:46, Himal Prasad Ghimiray wrote:
>>>>> In case of xe_force_wake_put failure caller just calls XE_WARN_ON
>>>>> and continues. Move XE_WARN_ON inside the xe_force_wake_put() and
>>>>> return
>>>>> void.
>>>>>
>>>>> Cc: Badal Nilawar <badal.nilawar@intel.com>
>>>>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>>>>> Cc: Lucas De Marchi <lucas.demarchi@intel.com>
>>>>> Cc: Nirmoy Das <nirmoy.das@intel.com>
>>>>> Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
>>>>> ---
>>>>> drivers/gpu/drm/xe/xe_device.c | 3 ++-
>>>>> drivers/gpu/drm/xe/xe_drm_client.c | 4 ++--
>>>>> drivers/gpu/drm/xe/xe_force_wake.c | 14 ++++++++------
>>>>> drivers/gpu/drm/xe/xe_force_wake.h | 4 ++--
>>>>> drivers/gpu/drm/xe/xe_gt.c | 22 +++++++++-------------
>>>>> drivers/gpu/drm/xe/xe_gt_debugfs.c | 6 ++----
>>>>> drivers/gpu/drm/xe/xe_gt_idle.c | 6 +++---
>>>>> drivers/gpu/drm/xe/xe_guc_pc.c | 14 +++++++-------
>>>>> drivers/gpu/drm/xe/xe_oa.c | 4 ++--
>>>>> drivers/gpu/drm/xe/xe_pat.c | 30 ++++++++++++++
>>>>> +---------------
>>>>> drivers/gpu/drm/xe/xe_query.c | 2 +-
>>>>> drivers/gpu/drm/xe/xe_reg_sr.c | 12 ++++--------
>>>>> drivers/gpu/drm/xe/xe_vram.c | 3 ++-
>>>>> 13 files changed, 59 insertions(+), 65 deletions(-)
>>>>>
>>>>> diff --git a/drivers/gpu/drm/xe/xe_device.c b/drivers/gpu/drm/xe/
>>>>> xe_device.c
>>>>> index 5edb1cf51ea5..cce754801e8d 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_device.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_device.c
>>>>> @@ -620,7 +620,8 @@ static int probe_has_flat_ccs(struct xe_device
>>>>> *xe)
>>>>> drm_dbg(&xe->drm,
>>>>> "Flat CCS has been disabled in bios, May lead to
>>>>> performance impact");
>>>>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + return 0;
>>>>> }
>>>>> int xe_device_probe(struct xe_device *xe)
>>>>> diff --git a/drivers/gpu/drm/xe/xe_drm_client.c b/drivers/gpu/drm/
>>>>> xe/ xe_drm_client.c
>>>>> index 01f643f6aaba..e5defce08281 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_drm_client.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_drm_client.c
>>>>> @@ -301,12 +301,12 @@ static void show_run_ticks(struct drm_printer
>>>>> *p, struct drm_file *file)
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), fw);
>>>>> if (fw_ref != fw) {
>>>>> hwe = NULL;
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> break;
>>>>> }
>>>>> gpu_timestamp = xe_hw_engine_read_timestamp(hwe);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> break;
>>>>> }
>>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.c b/drivers/gpu/drm/
>>>>> xe/ xe_force_wake.c
>>>>> index 73d37e79da9c..01b8bfdd748f 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.c
>>>>> @@ -11,6 +11,7 @@
>>>>> #include "regs/xe_reg_defs.h"
>>>>> #include "xe_gt.h"
>>>>> #include "xe_gt_printk.h"
>>>>> +#include "xe_macros.h"
>>>>> #include "xe_mmio.h"
>>>>> #include "xe_sriov.h"
>>>>> @@ -208,11 +209,10 @@ int __must_check xe_force_wake_get(struct
>>>>> xe_force_wake *fw,
>>>>> * and waits for acknowledgment for domain to sleep within
>>>>> specified timeout.
>>>>> * Ensure this function is always called with return of
>>>>> xe_force_wake_get() as
>>>>> * @domains_mask.
>>>>> - *
>>>>> - * Returns 0 in case of success or non-zero in case of timeout of ack
>
> Instead of changing doc here, its better to add final doc here itself.
>
>>>>> + * Warns in case of timeout of ack from domain.
>>>>> */
>>>>> -int xe_force_wake_put(struct xe_force_wake *fw,
>>>>> - int domains_mask)
>>>>> +void xe_force_wake_put(struct xe_force_wake *fw,
>>>>> + int domains_mask)
>>>>> {
>>>>> struct xe_gt *gt = fw->gt;
>>>>> struct xe_force_wake_domain *domain;
>>>>> @@ -225,7 +225,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>>>>> * in error path of individual domains.
>>>>> */
>>>>> if (!domains_mask)
>>>>> - return 0;
>>>>> + return;
>>>>> spin_lock_irqsave(&fw->lock, flags);
>>>>> for_each_fw_domain_masked(domain, domains_mask, fw, tmp) {
>>>>> @@ -240,5 +240,7 @@ int xe_force_wake_put(struct xe_force_wake *fw,
>>>>> fw->awake_domains &= ~sleep;
>>>>> spin_unlock_irqrestore(&fw->lock, flags);
>>>>> - return ret;
>>>>> + if (ret)
>>>>> + XE_WARN_ON("Timedout for domain sleep acknowledgment");
>
> Move this warn on to patch 2/23.
Sure.
>
>>>>
>>>> This looks good to me. There is no need to propagate error if domain
>>>> failed to sleep, warn on is enough. Additionally we should see if fw
>>>> domain ack bit is not cleared due to PCIe read completion timeout.
>>>> i.e. if mmio read for fw ack reg returned value 0xFFFFFFFF. This
>>>> means device is in bad state. In this case should consider putting
>>>> device in wedged state.
>>>>
>>>
>>>
>>> This seems to be good check to have. On cross verifying, I see
>>> similar implementation in i915. If you are ok, How about taking this
>>> as seperate patch ?
>>
>> Yes, i915 has similar implementation. Sure, lets handle it in seperate
>> patch.
>>
>> Regards,
>> Badal
>>>
>>> BR
>>> Himal
>>>
>>>> Regards,
>>>> Badal
>>>>> +
>>>>> }
>>>>> diff --git a/drivers/gpu/drm/xe/xe_force_wake.h b/drivers/gpu/drm/
>>>>> xe/ xe_force_wake.h
>>>>> index e17fe316dc3c..c2c729371b2a 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_force_wake.h
>>>>> +++ b/drivers/gpu/drm/xe/xe_force_wake.h
>>>>> @@ -17,8 +17,8 @@ void xe_force_wake_init_engines(struct xe_gt *gt,
>>>>> struct xe_force_wake *fw);
>>>>> int __must_check xe_force_wake_get(struct xe_force_wake *fw,
>>>>> enum xe_force_wake_domains domains);
>>>>> -int xe_force_wake_put(struct xe_force_wake *fw,
>>>>> - int domains_mask);
>>>>> +void xe_force_wake_put(struct xe_force_wake *fw,
>>>>> + int domains_mask);
>>>>> static inline int
>>>>> xe_force_wake_ref(struct xe_force_wake *fw,
>>>>> diff --git a/drivers/gpu/drm/xe/xe_gt.c b/drivers/gpu/drm/xe/xe_gt.c
>>>>> index b0126daee359..5f5760b60eac 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_gt.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_gt.c
>>>>> @@ -446,8 +446,7 @@ static int gt_fw_domain_init(struct xe_gt *gt)
>>>>> */
>>>>> gt->info.gmdid = xe_mmio_read32(>->mmio, GMD_ID);
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> - XE_WARN_ON(err);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>
> I recognize the logic behind implementing this change here since it
> won't disrupt the compilation process. By relocating XE_WARN_ON within
> force_wake_put, it's more appropriate to introduce this cleanup in
> respective patches. This particular patch will solely include the
> alteration of the return type and the documentation.
Thanks for the comment. Will limit this patch to doc addition and
changing return to void.
>
> Regards,
> Badal
>>>>> return 0;
>>>>> @@ -533,9 +532,7 @@ static int all_fw_domain_init(struct xe_gt *gt)
>>>>> if (IS_SRIOV_PF(gt_to_xe(gt)))
>>>>> xe_gt_sriov_pf_init_hw(gt);
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> - XE_WARN_ON(err);
>>>>> -
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return 0;
>>>>> err_force_wake:
>>>>> @@ -787,8 +784,7 @@ static int gt_reset(struct xe_gt *gt)
>>>>> if (err)
>>>>> goto err_out;
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> - XE_WARN_ON(err);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_pm_runtime_put(gt_to_xe(gt));
>>>>> xe_gt_info(gt, "reset done\n");
>>>>> @@ -796,7 +792,7 @@ static int gt_reset(struct xe_gt *gt)
>>>>> return 0;
>>>>> err_out:
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> XE_WARN_ON(xe_uc_start(>->uc));
>>>>> err_fail:
>>>>> xe_gt_err(gt, "reset failed (%pe)\n", ERR_PTR(err));
>>>>> @@ -835,7 +831,7 @@ void xe_gt_suspend_prepare(struct xe_gt *gt)
>>>>> xe_uc_stop_prepare(>->uc);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> }
>>>>> int xe_gt_suspend(struct xe_gt *gt)
>>>>> @@ -857,7 +853,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>>>> xe_gt_disable_host_l2_vram(gt);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_gt_dbg(gt, "suspended\n");
>>>>> return 0;
>>>>> @@ -865,7 +861,7 @@ int xe_gt_suspend(struct xe_gt *gt)
>>>>> err_msg:
>>>>> err = -ETIMEDOUT;
>>>>> err_force_wake:
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_gt_err(gt, "suspend failed (%pe)\n", ERR_PTR(err));
>>>>> return err;
>>>>> @@ -914,7 +910,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>>>> xe_gt_idle_enable_pg(gt);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_gt_dbg(gt, "resumed\n");
>>>>> return 0;
>>>>> @@ -922,7 +918,7 @@ int xe_gt_resume(struct xe_gt *gt)
>>>>> err_msg:
>>>>> err = -ETIMEDOUT;
>>>>> err_force_wake:
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_gt_err(gt, "resume failed (%pe)\n", ERR_PTR(err));
>>>>> return err;
>>>>> diff --git a/drivers/gpu/drm/xe/xe_gt_debugfs.c b/drivers/gpu/drm/
>>>>> xe/ xe_gt_debugfs.c
>>>>> index 86146de1d31c..2ecf3c87c6b0 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_gt_debugfs.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_gt_debugfs.c
>>>>> @@ -90,7 +90,7 @@ static int hw_engines(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> struct xe_device *xe = gt_to_xe(gt);
>>>>> struct xe_hw_engine *hwe;
>>>>> enum xe_hw_engine_id id;
>>>>> - int fw_ref, err;
>>>>> + int fw_ref;
>>>>> xe_pm_runtime_get(xe);
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>>> @@ -103,10 +103,8 @@ static int hw_engines(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> for_each_hw_engine(hwe, gt, id)
>>>>> xe_hw_engine_print(hwe, p);
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_pm_runtime_put(xe);
>>>>> - if (err)
>>>>> - return err;
>>>>> return 0;
>>>>> }
>>>>> diff --git a/drivers/gpu/drm/xe/xe_gt_idle.c b/drivers/gpu/drm/xe/
>>>>> xe_gt_idle.c
>>>>> index 9af81b07ab7a..1a7ee5681da6 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_gt_idle.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_gt_idle.c
>>>>> @@ -144,7 +144,7 @@ void xe_gt_idle_enable_pg(struct xe_gt *gt)
>>>>> }
>>>>> xe_mmio_write32(mmio, POWERGATE_ENABLE, gtidle-
>>>>> >powergate_enable);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> }
>>>>> void xe_gt_idle_disable_pg(struct xe_gt *gt)
>>>>> @@ -161,7 +161,7 @@ void xe_gt_idle_disable_pg(struct xe_gt *gt)
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>>> XE_WARN_ON(!fw_ref);
>>>>> xe_mmio_write32(>->mmio, POWERGATE_ENABLE, gtidle-
>>>>> >powergate_enable);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> }
>>>>> /**
>>>>> @@ -223,7 +223,7 @@ int xe_gt_idle_pg_print(struct xe_gt *gt,
>>>>> struct drm_printer *p)
>>>>> pg_enabled = xe_mmio_read32(>->mmio, POWERGATE_ENABLE);
>>>>> pg_status = xe_mmio_read32(>->mmio,
>>>>> POWERGATE_DOMAIN_STATUS);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> }
>>>>> if (gt->info.engine_mask & XE_HW_ENGINE_RCS_MASK) {
>>>>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c b/drivers/gpu/drm/xe/
>>>>> xe_guc_pc.c
>>>>> index c7a00565216d..27ad412936f7 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>>>>> @@ -423,7 +423,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc
>>>>> *pc, u32 *freq)
>>>>> */
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return -ETIMEDOUT;
>>>>> }
>>>>> @@ -432,7 +432,7 @@ int xe_guc_pc_get_cur_freq(struct xe_guc_pc
>>>>> *pc, u32 *freq)
>>>>> *freq = REG_FIELD_GET(REQ_RATIO_MASK, *freq);
>>>>> *freq = decode_freq(*freq);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return 0;
>>>>> }
>>>>> @@ -508,7 +508,7 @@ int xe_guc_pc_get_min_freq(struct xe_guc_pc
>>>>> *pc, u32 *freq)
>>>>> *freq = pc_get_min_freq(pc);
>>>>> fw:
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> out:
>>>>> mutex_unlock(&pc->freq_lock);
>>>>> return ret;
>>>>> @@ -870,13 +870,13 @@ int xe_guc_pc_gucrc_disable(struct xe_guc_pc
>>>>> *pc)
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return -ETIMEDOUT;
>>>>> }
>>>>> xe_gt_idle_disable_c6(gt);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return 0;
>>>>> }
>>>>> @@ -968,7 +968,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return -ETIMEDOUT;
>>>>> }
>>>>> @@ -1013,7 +1013,7 @@ int xe_guc_pc_start(struct xe_guc_pc *pc)
>>>>> ret = pc_action_setup_gucrc(pc, GUCRC_FIRMWARE_CONTROL);
>>>>> out:
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return ret;
>>>>> }
>>>>> diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
>>>>> index 80e5c4ef86ef..8d7d9e7ade51 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_oa.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_oa.c
>>>>> @@ -840,7 +840,7 @@ static void xe_oa_stream_destroy(struct
>>>>> xe_oa_stream *stream)
>>>>> xe_oa_free_oa_buffer(stream);
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL));
>>>>> + xe_force_wake_put(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>>> xe_pm_runtime_put(stream->oa->xe);
>>>>> /* Wa_1509372804:pvc: Unset the override of GUCRC mode to
>>>>> enable rc6 */
>>>>> @@ -1463,7 +1463,7 @@ static int xe_oa_stream_init(struct
>>>>> xe_oa_stream *stream,
>>>>> err_free_oa_buf:
>>>>> xe_oa_free_oa_buffer(stream);
>>>>> err_fw_put:
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_pm_runtime_put(stream->oa->xe);
>>>>> if (stream->override_gucrc)
>>>>> xe_gt_WARN_ON(gt, xe_guc_pc_unset_gucrc_mode(>-
>>>>> >uc.guc.pc));
>>>>> diff --git a/drivers/gpu/drm/xe/xe_pat.c b/drivers/gpu/drm/xe/xe_pat.c
>>>>> index 96d5ec1fbbd9..4372dd727e9f 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_pat.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_pat.c
>>>>> @@ -182,7 +182,7 @@ static void program_pat_mcr(struct xe_gt *gt,
>>>>> const struct xe_pat_table_entry ta
>>>>> static void xelp_dump(struct xe_gt *gt, struct drm_printer *p)
>>>>> {
>>>>> struct xe_device *xe = gt_to_xe(gt);
>>>>> - int i, err, fw_ref;
>>>>> + int i, fw_ref;
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>>> if (!fw_ref)
>>>>> @@ -198,9 +198,9 @@ static void xelp_dump(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>>>>> }
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> err_fw:
>>>>> - xe_assert(xe, (fw_ref && !err));
>>>>> + xe_assert(xe, !fw_ref);
>>>>> }
>>>>> static const struct xe_pat_ops xelp_pat_ops = {
>>>>> @@ -211,7 +211,7 @@ static const struct xe_pat_ops xelp_pat_ops = {
>>>>> static void xehp_dump(struct xe_gt *gt, struct drm_printer *p)
>>>>> {
>>>>> struct xe_device *xe = gt_to_xe(gt);
>>>>> - int i, err, fw_ref;
>>>>> + int i, fw_ref;
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>>> if (!fw_ref)
>>>>> @@ -229,9 +229,9 @@ static void xehp_dump(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> XELP_MEM_TYPE_STR_MAP[mem_type], pat);
>>>>> }
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> err_fw:
>>>>> - xe_assert(xe, (fw_ref && !err));
>>>>> + xe_assert(xe, !fw_ref);
>>>>> }
>>>>> static const struct xe_pat_ops xehp_pat_ops = {
>>>>> @@ -242,7 +242,7 @@ static const struct xe_pat_ops xehp_pat_ops = {
>>>>> static void xehpc_dump(struct xe_gt *gt, struct drm_printer *p)
>>>>> {
>>>>> struct xe_device *xe = gt_to_xe(gt);
>>>>> - int i, err, fw_ref;
>>>>> + int i, fw_ref;
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>>> if (!fw_ref)
>>>>> @@ -258,9 +258,9 @@ static void xehpc_dump(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> REG_FIELD_GET(XEHPC_CLOS_LEVEL_MASK, pat), pat);
>>>>> }
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> err_fw:
>>>>> - xe_assert(xe, (fw_ref && !err));
>>>>> + xe_assert(xe, !fw_ref);
>>>>> }
>>>>> static const struct xe_pat_ops xehpc_pat_ops = {
>>>>> @@ -271,7 +271,7 @@ static const struct xe_pat_ops xehpc_pat_ops = {
>>>>> static void xelpg_dump(struct xe_gt *gt, struct drm_printer *p)
>>>>> {
>>>>> struct xe_device *xe = gt_to_xe(gt);
>>>>> - int i, err, fw_ref;
>>>>> + int i, fw_ref;
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>>> if (!fw_ref)
>>>>> @@ -292,9 +292,9 @@ static void xelpg_dump(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> REG_FIELD_GET(XELPG_INDEX_COH_MODE_MASK, pat), pat);
>>>>> }
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> err_fw:
>>>>> - xe_assert(xe, (fw_ref && !err));
>>>>> + xe_assert(xe, !fw_ref);
>>>>> }
>>>>> /*
>>>>> @@ -330,7 +330,7 @@ static void xe2lpm_program_pat(struct xe_gt
>>>>> *gt, const struct xe_pat_table_entry
>>>>> static void xe2_dump(struct xe_gt *gt, struct drm_printer *p)
>>>>> {
>>>>> struct xe_device *xe = gt_to_xe(gt);
>>>>> - int i, err, fw_ref;
>>>>> + int i, fw_ref;
>>>>> u32 pat;
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FW_GT);
>>>>> @@ -374,9 +374,9 @@ static void xe2_dump(struct xe_gt *gt, struct
>>>>> drm_printer *p)
>>>>> REG_FIELD_GET(XE2_COH_MODE, pat),
>>>>> pat);
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> err_fw:
>>>>> - xe_assert(xe, (fw_ref && !err));
>>>>> + xe_assert(xe, !fw_ref);
>>>>> }
>>>>> static const struct xe_pat_ops xe2_pat_ops = {
>>>>> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/
>>>>> xe_query.c
>>>>> index 7c866b736f00..df7bdf3822cc 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_query.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_query.c
>>>>> @@ -153,7 +153,7 @@ query_engine_cycles(struct xe_device *xe,
>>>>> fw_ref = xe_force_wake_get(gt_to_fw(gt), XE_FORCEWAKE_ALL);
>>>>> if (fw_ref != XE_FORCEWAKE_ALL) {
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return -EIO;
>>>>> }
>>>>> diff --git a/drivers/gpu/drm/xe/xe_reg_sr.c b/drivers/gpu/drm/xe/
>>>>> xe_reg_sr.c
>>>>> index 6ab6a48b1d29..874523f22f56 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_reg_sr.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_reg_sr.c
>>>>> @@ -202,14 +202,12 @@ void xe_reg_sr_apply_mmio(struct xe_reg_sr
>>>>> *sr, struct xe_gt *gt)
>>>>> xa_for_each(&sr->xa, reg, entry)
>>>>> apply_one_mmio(gt, entry);
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> - XE_WARN_ON(err);
>>>>> -
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return;
>>>>> err_force_wake:
>>>>> err = -ETIMEDOUT;
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> xe_gt_err(gt, "Failed to apply, err=%d\n", err);
>>>>> }
>>>>> @@ -256,14 +254,12 @@ void xe_reg_sr_apply_whitelist(struct
>>>>> xe_hw_engine *hwe)
>>>>> xe_mmio_write32(>->mmio,
>>>>> RING_FORCE_TO_NONPRIV(mmio_base, slot), addr);
>>>>> }
>>>>> - err = xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> - XE_WARN_ON(err);
>>>>> -
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> return;
>>>>> err_force_wake:
>>>>> err = -ETIMEDOUT;
>>>>> - XE_WARN_ON(xe_force_wake_put(gt_to_fw(gt), fw_ref));
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> drm_err(&xe->drm, "Failed to apply, err=%d\n", err);
>>>>> }
>>>>> diff --git a/drivers/gpu/drm/xe/xe_vram.c b/drivers/gpu/drm/xe/
>>>>> xe_vram.c
>>>>> index 3b5256d76d9a..1384c97a75c2 100644
>>>>> --- a/drivers/gpu/drm/xe/xe_vram.c
>>>>> +++ b/drivers/gpu/drm/xe/xe_vram.c
>>>>> @@ -263,7 +263,8 @@ static int tile_vram_size(struct xe_tile *tile,
>>>>> u64 *vram_size,
>>>>> /* remove the tile offset so we have just the available size */
>>>>> *vram_size = offset - *tile_offset;
>>>>> - return xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + xe_force_wake_put(gt_to_fw(gt), fw_ref);
>>>>> + return 0;
>>>>> }
>>>>> static void vram_fini(void *arg)
>>>>
>>
>
^ permalink raw reply [flat|nested] 58+ messages in thread
* ✓ CI.Patch_applied: success for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (22 preceding siblings ...)
2024-09-12 19:16 ` [PATCH v2 23/23] drm/xe: Change return type to void for xe_force_wake_put Himal Prasad Ghimiray
@ 2024-09-12 19:24 ` Patchwork
2024-09-12 19:24 ` ✓ CI.checkpatch: " Patchwork
` (6 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:24 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : success
== Summary ==
=== Applying kernel patches on branch 'drm-tip' with base: ===
Base commit: 9fd27ed0883c drm-tip: 2024y-09m-12d-16h-22m-36s UTC integration manifest
=== git am output follows ===
Applying: drm/xe: Error handling in xe_force_wake_get()
Applying: drm/xe: Modify xe_force_wake_put to handle _get returned mask
Applying: drm/xe/device: Update handling of xe_force_wake_get return
Applying: drm/xe/hdcp: Update handling of xe_force_wake_get return
Applying: drm/xe/gsc: Update handling of xe_force_wake_get return
Applying: drm/xe/gt: Update handling of xe_force_wake_get return
Applying: drm/xe/xe_gt_idle: Update handling of xe_force_wake_get return
Applying: drm/xe/devcoredump: Update handling of xe_force_wake_get return
Applying: drm/xe/tests/mocs: Update xe_force_wake_get() return handling
Applying: drm/xe/mocs: Update handling of xe_force_wake_get return
Applying: drm/xe/xe_drm_client: Update handling of xe_force_wake_get return
Applying: drm/xe/xe_gt_debugfs: Update handling of xe_force_wake_get return
Applying: drm/xe/guc: Update handling of xe_force_wake_get return
Applying: drm/xe/huc: Update handling of xe_force_wake_get return
Applying: drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init()
Applying: drm/xe/pat: Update handling of xe_force_wake_get return
Applying: drm/xe/gt_tlb_invalidation_ggtt: Update handling of xe_force_wake_get return
Applying: drm/xe/xe_reg_sr: Update handling of xe_force_wake_get return
Applying: drm/xe/query: Update handling of xe_force_wake_get return
Applying: drm/xe/vram: Update handling of xe_force_wake_get return
Applying: drm/xe: forcewake debugfs open fails on xe_forcewake_get failure
Applying: drm/xe: Ensure __must_check for xe_force_wake_get() return
Applying: drm/xe: Change return type to void for xe_force_wake_put
^ permalink raw reply [flat|nested] 58+ messages in thread* ✓ CI.checkpatch: success for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (23 preceding siblings ...)
2024-09-12 19:24 ` ✓ CI.Patch_applied: success for Fix xe_force_wake_get() failure handling (rev2) Patchwork
@ 2024-09-12 19:24 ` Patchwork
2024-09-12 19:25 ` ✓ CI.KUnit: " Patchwork
` (5 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:24 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : success
== Summary ==
+ KERNEL=/kernel
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools mt
Cloning into 'mt'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ git -C mt rev-list -n1 origin/master
c62d7e164862503a3662a095da1c6c9014248cb2
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ git log -n1
commit fd1d4bfb0f9d0ec50c5090d647cbb4157d2484ed
Author: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Date: Fri Sep 13 00:46:03 2024 +0530
drm/xe: Change return type to void for xe_force_wake_put
In case of xe_force_wake_put failure caller just calls XE_WARN_ON
and continues. Move XE_WARN_ON inside the xe_force_wake_put() and return
void.
Cc: Badal Nilawar <badal.nilawar@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Nirmoy Das <nirmoy.das@intel.com>
Signed-off-by: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
+ /mt/dim checkpatch 9fd27ed0883cff53777b8db0b7c6db327132dcdc drm-intel
371bc46c07da drm/xe: Error handling in xe_force_wake_get()
ea23cef4c1c6 drm/xe: Modify xe_force_wake_put to handle _get returned mask
00ecc12dbf9c drm/xe/device: Update handling of xe_force_wake_get return
a64b36d1e9df drm/xe/hdcp: Update handling of xe_force_wake_get return
e4e869fa3078 drm/xe/gsc: Update handling of xe_force_wake_get return
0d31a7d7d838 drm/xe/gt: Update handling of xe_force_wake_get return
d82df880439a drm/xe/xe_gt_idle: Update handling of xe_force_wake_get return
df0377f07ffc drm/xe/devcoredump: Update handling of xe_force_wake_get return
8f7fe7f81b46 drm/xe/tests/mocs: Update xe_force_wake_get() return handling
00cce24f3f56 drm/xe/mocs: Update handling of xe_force_wake_get return
332c2794525b drm/xe/xe_drm_client: Update handling of xe_force_wake_get return
807cabddf4d7 drm/xe/xe_gt_debugfs: Update handling of xe_force_wake_get return
72eb752b1d0b drm/xe/guc: Update handling of xe_force_wake_get return
d1e03013faa9 drm/xe/huc: Update handling of xe_force_wake_get return
7e544d1b6ce7 drm/xe/oa: Handle force_wake_get failure in xe_oa_stream_init()
f25893f0b465 drm/xe/pat: Update handling of xe_force_wake_get return
7d3dd424a1ac drm/xe/gt_tlb_invalidation_ggtt: Update handling of xe_force_wake_get return
d42bc2771516 drm/xe/xe_reg_sr: Update handling of xe_force_wake_get return
a75cfc6879c9 drm/xe/query: Update handling of xe_force_wake_get return
16d611d168ae drm/xe/vram: Update handling of xe_force_wake_get return
9f22b16b40d4 drm/xe: forcewake debugfs open fails on xe_forcewake_get failure
62502b32aec3 drm/xe: Ensure __must_check for xe_force_wake_get() return
fd1d4bfb0f9d drm/xe: Change return type to void for xe_force_wake_put
^ permalink raw reply [flat|nested] 58+ messages in thread* ✓ CI.KUnit: success for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (24 preceding siblings ...)
2024-09-12 19:24 ` ✓ CI.checkpatch: " Patchwork
@ 2024-09-12 19:25 ` Patchwork
2024-09-12 19:37 ` ✓ CI.Build: " Patchwork
` (4 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:25 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : success
== Summary ==
+ trap cleanup EXIT
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/xe/.kunitconfig
[19:24:49] Configuring KUnit Kernel ...
Generating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:24:53] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[19:25:19] Starting KUnit Kernel (1/1)...
[19:25:19] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:25:19] =================== guc_dbm (7 subtests) ===================
[19:25:19] [PASSED] test_empty
[19:25:19] [PASSED] test_default
[19:25:19] ======================== test_size ========================
[19:25:19] [PASSED] 4
[19:25:19] [PASSED] 8
[19:25:19] [PASSED] 32
[19:25:19] [PASSED] 256
[19:25:19] ==================== [PASSED] test_size ====================
[19:25:19] ======================= test_reuse ========================
[19:25:19] [PASSED] 4
[19:25:19] [PASSED] 8
[19:25:19] [PASSED] 32
[19:25:19] [PASSED] 256
[19:25:19] =================== [PASSED] test_reuse ====================
[19:25:19] =================== test_range_overlap ====================
[19:25:19] [PASSED] 4
[19:25:19] [PASSED] 8
[19:25:19] [PASSED] 32
[19:25:19] [PASSED] 256
[19:25:19] =============== [PASSED] test_range_overlap ================
[19:25:19] =================== test_range_compact ====================
[19:25:19] [PASSED] 4
[19:25:19] [PASSED] 8
[19:25:19] [PASSED] 32
[19:25:19] [PASSED] 256
[19:25:19] =============== [PASSED] test_range_compact ================
[19:25:19] ==================== test_range_spare =====================
[19:25:19] [PASSED] 4
[19:25:19] [PASSED] 8
[19:25:19] [PASSED] 32
[19:25:19] [PASSED] 256
[19:25:19] ================ [PASSED] test_range_spare =================
[19:25:19] ===================== [PASSED] guc_dbm =====================
[19:25:19] =================== guc_idm (6 subtests) ===================
[19:25:19] [PASSED] bad_init
[19:25:19] [PASSED] no_init
[19:25:19] [PASSED] init_fini
[19:25:19] [PASSED] check_used
[19:25:19] [PASSED] check_quota
[19:25:19] [PASSED] check_all
[19:25:19] ===================== [PASSED] guc_idm =====================
[19:25:19] ================== no_relay (3 subtests) ===================
[19:25:19] [PASSED] xe_drops_guc2pf_if_not_ready
[19:25:19] [PASSED] xe_drops_guc2vf_if_not_ready
[19:25:19] [PASSED] xe_rejects_send_if_not_ready
[19:25:19] ==================== [PASSED] no_relay =====================
[19:25:19] ================== pf_relay (14 subtests) ==================
[19:25:19] [PASSED] pf_rejects_guc2pf_too_short
[19:25:19] [PASSED] pf_rejects_guc2pf_too_long
[19:25:19] [PASSED] pf_rejects_guc2pf_no_payload
[19:25:19] [PASSED] pf_fails_no_payload
[19:25:19] [PASSED] pf_fails_bad_origin
[19:25:19] [PASSED] pf_fails_bad_type
[19:25:19] [PASSED] pf_txn_reports_error
[19:25:19] [PASSED] pf_txn_sends_pf2guc
[19:25:19] [PASSED] pf_sends_pf2guc
[19:25:19] [SKIPPED] pf_loopback_nop
[19:25:19] [SKIPPED] pf_loopback_echo
[19:25:19] [SKIPPED] pf_loopback_fail
[19:25:19] [SKIPPED] pf_loopback_busy
[19:25:19] [SKIPPED] pf_loopback_retry
[19:25:19] ==================== [PASSED] pf_relay =====================
[19:25:19] ================== vf_relay (3 subtests) ===================
[19:25:19] [PASSED] vf_rejects_guc2vf_too_short
[19:25:19] [PASSED] vf_rejects_guc2vf_too_long
[19:25:19] [PASSED] vf_rejects_guc2vf_no_payload
[19:25:19] ==================== [PASSED] vf_relay =====================
[19:25:19] ================= pf_service (11 subtests) =================
[19:25:19] [PASSED] pf_negotiate_any
[19:25:19] [PASSED] pf_negotiate_base_match
[19:25:19] [PASSED] pf_negotiate_base_newer
[19:25:19] [PASSED] pf_negotiate_base_next
[19:25:19] [SKIPPED] pf_negotiate_base_older
[19:25:19] [PASSED] pf_negotiate_base_prev
[19:25:19] [PASSED] pf_negotiate_latest_match
[19:25:19] [PASSED] pf_negotiate_latest_newer
[19:25:19] [PASSED] pf_negotiate_latest_next
[19:25:19] [SKIPPED] pf_negotiate_latest_older
[19:25:19] [SKIPPED] pf_negotiate_latest_prev
[19:25:19] =================== [PASSED] pf_service ====================
[19:25:19] ===================== lmtt (1 subtest) =====================
[19:25:19] ======================== test_ops =========================
[19:25:19] [PASSED] 2-level
[19:25:19] [PASSED] multi-level
[19:25:19] ==================== [PASSED] test_ops =====================
[19:25:19] ====================== [PASSED] lmtt =======================
[19:25:19] =================== xe_mocs (2 subtests) ===================
[19:25:19] ================ xe_live_mocs_kernel_kunit ================
[19:25:19] =========== [SKIPPED] xe_live_mocs_kernel_kunit ============
[19:25:19] ================ xe_live_mocs_reset_kunit =================
[19:25:19] ============ [SKIPPED] xe_live_mocs_reset_kunit ============
[19:25:19] ==================== [SKIPPED] xe_mocs =====================
[19:25:19] ================= xe_migrate (2 subtests) ==================
[19:25:19] ================= xe_migrate_sanity_kunit =================
[19:25:19] ============ [SKIPPED] xe_migrate_sanity_kunit =============
[19:25:19] ================== xe_validate_ccs_kunit ==================
[19:25:19] ============= [SKIPPED] xe_validate_ccs_kunit ==============
[19:25:19] =================== [SKIPPED] xe_migrate ===================
[19:25:19] ================== xe_dma_buf (1 subtest) ==================
[19:25:19] ==================== xe_dma_buf_kunit =====================
[19:25:19] ================ [SKIPPED] xe_dma_buf_kunit ================
[19:25:19] =================== [SKIPPED] xe_dma_buf ===================
[19:25:19] ==================== xe_bo (3 subtests) ====================
[19:25:19] ================== xe_ccs_migrate_kunit ===================
[19:25:19] ============== [SKIPPED] xe_ccs_migrate_kunit ==============
[19:25:19] ==================== xe_bo_evict_kunit ====================
[19:25:19] =============== [SKIPPED] xe_bo_evict_kunit ================
[19:25:19] =================== xe_bo_shrink_kunit ====================
[19:25:19] =============== [SKIPPED] xe_bo_shrink_kunit ===============
[19:25:19] ===================== [SKIPPED] xe_bo ======================
[19:25:19] ==================== args (11 subtests) ====================
[19:25:19] [PASSED] count_args_test
[19:25:19] [PASSED] call_args_example
[19:25:19] [PASSED] call_args_test
[19:25:19] [PASSED] drop_first_arg_example
[19:25:19] [PASSED] drop_first_arg_test
[19:25:19] [PASSED] first_arg_example
[19:25:19] [PASSED] first_arg_test
[19:25:19] [PASSED] last_arg_example
[19:25:19] [PASSED] last_arg_test
[19:25:19] [PASSED] pick_arg_example
[19:25:19] [PASSED] sep_comma_example
stty: 'standard input': Inappropriate ioctl for device
[19:25:19] ====================== [PASSED] args =======================
[19:25:19] =================== xe_pci (2 subtests) ====================
[19:25:19] [PASSED] xe_gmdid_graphics_ip
[19:25:19] [PASSED] xe_gmdid_media_ip
[19:25:19] ===================== [PASSED] xe_pci ======================
[19:25:19] =================== xe_rtp (2 subtests) ====================
[19:25:19] =============== xe_rtp_process_to_sr_tests ================
[19:25:19] [PASSED] coalesce-same-reg
[19:25:19] [PASSED] no-match-no-add
[19:25:19] [PASSED] match-or
[19:25:19] [PASSED] match-or-xfail
[19:25:19] [PASSED] no-match-no-add-multiple-rules
[19:25:19] [PASSED] two-regs-two-entries
[19:25:19] [PASSED] clr-one-set-other
[19:25:19] [PASSED] set-field
[19:25:19] [PASSED] conflict-duplicate
[19:25:19] [PASSED] conflict-not-disjoint
[19:25:19] [PASSED] conflict-reg-type
[19:25:19] =========== [PASSED] xe_rtp_process_to_sr_tests ============
[19:25:19] ================== xe_rtp_process_tests ===================
[19:25:19] [PASSED] active1
[19:25:19] [PASSED] active2
[19:25:19] [PASSED] active-inactive
[19:25:19] [PASSED] inactive-active
[19:25:19] [PASSED] inactive-1st_or_active-inactive
[19:25:19] [PASSED] inactive-2nd_or_active-inactive
[19:25:19] [PASSED] inactive-last_or_active-inactive
[19:25:19] [PASSED] inactive-no_or_active-inactive
[19:25:19] ============== [PASSED] xe_rtp_process_tests ===============
[19:25:19] ===================== [PASSED] xe_rtp ======================
[19:25:19] ==================== xe_wa (1 subtest) =====================
[19:25:19] ======================== xe_wa_gt =========================
[19:25:19] [PASSED] TIGERLAKE (B0)
[19:25:19] [PASSED] DG1 (A0)
[19:25:19] [PASSED] DG1 (B0)
[19:25:19] [PASSED] ALDERLAKE_S (A0)
[19:25:19] [PASSED] ALDERLAKE_S (B0)
[19:25:19] [PASSED] ALDERLAKE_S (C0)
[19:25:19] [PASSED] ALDERLAKE_S (D0)
[19:25:19] [PASSED] ALDERLAKE_P (A0)
[19:25:19] [PASSED] ALDERLAKE_P (B0)
[19:25:19] [PASSED] ALDERLAKE_P (C0)
[19:25:19] [PASSED] ALDERLAKE_S_RPLS (D0)
[19:25:19] [PASSED] ALDERLAKE_P_RPLU (E0)
[19:25:19] [PASSED] DG2_G10 (C0)
[19:25:19] [PASSED] DG2_G11 (B1)
[19:25:19] [PASSED] DG2_G12 (A1)
[19:25:19] [PASSED] METEORLAKE (g:A0, m:A0)
[19:25:19] [PASSED] METEORLAKE (g:A0, m:A0)
[19:25:19] [PASSED] METEORLAKE (g:A0, m:A0)
[19:25:19] [PASSED] LUNARLAKE (g:A0, m:A0)
[19:25:19] [PASSED] LUNARLAKE (g:B0, m:A0)
[19:25:19] [PASSED] BATTLEMAGE (g:A0, m:A1)
[19:25:19] ==================== [PASSED] xe_wa_gt =====================
[19:25:19] ====================== [PASSED] xe_wa ======================
[19:25:19] ============================================================
[19:25:19] Testing complete. Ran 122 tests: passed: 106, skipped: 16
[19:25:19] Elapsed time: 30.453s total, 4.239s configuring, 25.994s building, 0.213s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/tests/.kunitconfig
[19:25:19] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:25:21] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
../lib/iomap.c:156:5: warning: no previous prototype for ‘ioread64_lo_hi’ [-Wmissing-prototypes]
156 | u64 ioread64_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:163:5: warning: no previous prototype for ‘ioread64_hi_lo’ [-Wmissing-prototypes]
163 | u64 ioread64_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~
../lib/iomap.c:170:5: warning: no previous prototype for ‘ioread64be_lo_hi’ [-Wmissing-prototypes]
170 | u64 ioread64be_lo_hi(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:178:5: warning: no previous prototype for ‘ioread64be_hi_lo’ [-Wmissing-prototypes]
178 | u64 ioread64be_hi_lo(const void __iomem *addr)
| ^~~~~~~~~~~~~~~~
../lib/iomap.c:264:6: warning: no previous prototype for ‘iowrite64_lo_hi’ [-Wmissing-prototypes]
264 | void iowrite64_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:272:6: warning: no previous prototype for ‘iowrite64_hi_lo’ [-Wmissing-prototypes]
272 | void iowrite64_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~
../lib/iomap.c:280:6: warning: no previous prototype for ‘iowrite64be_lo_hi’ [-Wmissing-prototypes]
280 | void iowrite64be_lo_hi(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
../lib/iomap.c:288:6: warning: no previous prototype for ‘iowrite64be_hi_lo’ [-Wmissing-prototypes]
288 | void iowrite64be_hi_lo(u64 val, void __iomem *addr)
| ^~~~~~~~~~~~~~~~~
[19:25:42] Starting KUnit Kernel (1/1)...
[19:25:42] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:25:42] ============ drm_test_pick_cmdline (2 subtests) ============
[19:25:42] [PASSED] drm_test_pick_cmdline_res_1920_1080_60
[19:25:42] =============== drm_test_pick_cmdline_named ===============
[19:25:42] [PASSED] NTSC
[19:25:42] [PASSED] NTSC-J
[19:25:42] [PASSED] PAL
[19:25:42] [PASSED] PAL-M
[19:25:42] =========== [PASSED] drm_test_pick_cmdline_named ===========
[19:25:42] ============== [PASSED] drm_test_pick_cmdline ==============
[19:25:42] ================== drm_buddy (7 subtests) ==================
[19:25:42] [PASSED] drm_test_buddy_alloc_limit
[19:25:42] [PASSED] drm_test_buddy_alloc_optimistic
[19:25:42] [PASSED] drm_test_buddy_alloc_pessimistic
[19:25:42] [PASSED] drm_test_buddy_alloc_pathological
[19:25:42] [PASSED] drm_test_buddy_alloc_contiguous
[19:25:42] [PASSED] drm_test_buddy_alloc_clear
[19:25:42] [PASSED] drm_test_buddy_alloc_range_bias
[19:25:42] ==================== [PASSED] drm_buddy ====================
[19:25:42] ============= drm_cmdline_parser (40 subtests) =============
[19:25:42] [PASSED] drm_test_cmdline_force_d_only
[19:25:42] [PASSED] drm_test_cmdline_force_D_only_dvi
[19:25:42] [PASSED] drm_test_cmdline_force_D_only_hdmi
[19:25:42] [PASSED] drm_test_cmdline_force_D_only_not_digital
[19:25:42] [PASSED] drm_test_cmdline_force_e_only
[19:25:42] [PASSED] drm_test_cmdline_res
[19:25:42] [PASSED] drm_test_cmdline_res_vesa
[19:25:42] [PASSED] drm_test_cmdline_res_vesa_rblank
[19:25:42] [PASSED] drm_test_cmdline_res_rblank
[19:25:42] [PASSED] drm_test_cmdline_res_bpp
[19:25:42] [PASSED] drm_test_cmdline_res_refresh
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_margins
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_off
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_analog
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_force_on_digital
[19:25:42] [PASSED] drm_test_cmdline_res_bpp_refresh_interlaced_margins_force_on
[19:25:42] [PASSED] drm_test_cmdline_res_margins_force_on
[19:25:42] [PASSED] drm_test_cmdline_res_vesa_margins
[19:25:42] [PASSED] drm_test_cmdline_name
[19:25:42] [PASSED] drm_test_cmdline_name_bpp
[19:25:42] [PASSED] drm_test_cmdline_name_option
[19:25:42] [PASSED] drm_test_cmdline_name_bpp_option
[19:25:42] [PASSED] drm_test_cmdline_rotate_0
[19:25:42] [PASSED] drm_test_cmdline_rotate_90
[19:25:42] [PASSED] drm_test_cmdline_rotate_180
[19:25:42] [PASSED] drm_test_cmdline_rotate_270
[19:25:42] [PASSED] drm_test_cmdline_hmirror
[19:25:42] [PASSED] drm_test_cmdline_vmirror
[19:25:42] [PASSED] drm_test_cmdline_margin_options
[19:25:42] [PASSED] drm_test_cmdline_multiple_options
[19:25:42] [PASSED] drm_test_cmdline_bpp_extra_and_option
[19:25:42] [PASSED] drm_test_cmdline_extra_and_option
[19:25:42] [PASSED] drm_test_cmdline_freestanding_options
[19:25:42] [PASSED] drm_test_cmdline_freestanding_force_e_and_options
[19:25:42] [PASSED] drm_test_cmdline_panel_orientation
[19:25:42] ================ drm_test_cmdline_invalid =================
[19:25:42] [PASSED] margin_only
[19:25:42] [PASSED] interlace_only
[19:25:42] [PASSED] res_missing_x
[19:25:42] [PASSED] res_missing_y
[19:25:42] [PASSED] res_bad_y
[19:25:42] [PASSED] res_missing_y_bpp
[19:25:42] [PASSED] res_bad_bpp
[19:25:42] [PASSED] res_bad_refresh
[19:25:42] [PASSED] res_bpp_refresh_force_on_off
[19:25:42] [PASSED] res_invalid_mode
[19:25:42] [PASSED] res_bpp_wrong_place_mode
[19:25:42] [PASSED] name_bpp_refresh
[19:25:42] [PASSED] name_refresh
[19:25:42] [PASSED] name_refresh_wrong_mode
[19:25:42] [PASSED] name_refresh_invalid_mode
[19:25:42] [PASSED] rotate_multiple
[19:25:42] [PASSED] rotate_invalid_val
[19:25:42] [PASSED] rotate_truncated
[19:25:42] [PASSED] invalid_option
[19:25:42] [PASSED] invalid_tv_option
[19:25:42] [PASSED] truncated_tv_option
[19:25:42] ============ [PASSED] drm_test_cmdline_invalid =============
[19:25:42] =============== drm_test_cmdline_tv_options ===============
[19:25:42] [PASSED] NTSC
[19:25:42] [PASSED] NTSC_443
[19:25:42] [PASSED] NTSC_J
[19:25:42] [PASSED] PAL
[19:25:42] [PASSED] PAL_M
[19:25:42] [PASSED] PAL_N
[19:25:42] [PASSED] SECAM
[19:25:42] [PASSED] MONO_525
[19:25:42] [PASSED] MONO_625
[19:25:42] =========== [PASSED] drm_test_cmdline_tv_options ===========
[19:25:42] =============== [PASSED] drm_cmdline_parser ================
[19:25:42] ========== drmm_connector_hdmi_init (19 subtests) ==========
[19:25:42] [PASSED] drm_test_connector_hdmi_init_valid
[19:25:42] [PASSED] drm_test_connector_hdmi_init_bpc_8
[19:25:42] [PASSED] drm_test_connector_hdmi_init_bpc_10
[19:25:42] [PASSED] drm_test_connector_hdmi_init_bpc_12
[19:25:42] [PASSED] drm_test_connector_hdmi_init_bpc_invalid
[19:25:42] [PASSED] drm_test_connector_hdmi_init_bpc_null
[19:25:42] [PASSED] drm_test_connector_hdmi_init_formats_empty
[19:25:42] [PASSED] drm_test_connector_hdmi_init_formats_no_rgb
[19:25:42] [PASSED] drm_test_connector_hdmi_init_null_ddc
[19:25:42] [PASSED] drm_test_connector_hdmi_init_null_product
[19:25:42] [PASSED] drm_test_connector_hdmi_init_null_vendor
[19:25:42] [PASSED] drm_test_connector_hdmi_init_product_length_exact
[19:25:42] [PASSED] drm_test_connector_hdmi_init_product_length_too_long
[19:25:42] [PASSED] drm_test_connector_hdmi_init_product_valid
[19:25:42] [PASSED] drm_test_connector_hdmi_init_vendor_length_exact
[19:25:42] [PASSED] drm_test_connector_hdmi_init_vendor_length_too_long
[19:25:42] [PASSED] drm_test_connector_hdmi_init_vendor_valid
[19:25:42] ========= drm_test_connector_hdmi_init_type_valid =========
[19:25:42] [PASSED] HDMI-A
[19:25:42] [PASSED] HDMI-B
[19:25:42] ===== [PASSED] drm_test_connector_hdmi_init_type_valid =====
[19:25:42] ======== drm_test_connector_hdmi_init_type_invalid ========
[19:25:42] [PASSED] Unknown
[19:25:42] [PASSED] VGA
[19:25:42] [PASSED] DVI-I
[19:25:42] [PASSED] DVI-D
[19:25:42] [PASSED] DVI-A
[19:25:42] [PASSED] Composite
[19:25:42] [PASSED] SVIDEO
[19:25:42] [PASSED] LVDS
[19:25:42] [PASSED] Component
[19:25:42] [PASSED] DIN
[19:25:42] [PASSED] DP
[19:25:42] [PASSED] TV
[19:25:42] [PASSED] eDP
[19:25:42] [PASSED] Virtual
[19:25:42] [PASSED] DSI
[19:25:42] [PASSED] DPI
[19:25:42] [PASSED] Writeback
[19:25:42] [PASSED] SPI
[19:25:42] [PASSED] USB
[19:25:42] ==== [PASSED] drm_test_connector_hdmi_init_type_invalid ====
[19:25:42] ============ [PASSED] drmm_connector_hdmi_init =============
[19:25:42] ============= drmm_connector_init (3 subtests) =============
[19:25:42] [PASSED] drm_test_drmm_connector_init
[19:25:42] [PASSED] drm_test_drmm_connector_init_null_ddc
[19:25:42] ========= drm_test_drmm_connector_init_type_valid =========
[19:25:42] [PASSED] Unknown
[19:25:42] [PASSED] VGA
[19:25:42] [PASSED] DVI-I
[19:25:42] [PASSED] DVI-D
[19:25:42] [PASSED] DVI-A
[19:25:42] [PASSED] Composite
[19:25:42] [PASSED] SVIDEO
[19:25:42] [PASSED] LVDS
[19:25:42] [PASSED] Component
[19:25:42] [PASSED] DIN
[19:25:42] [PASSED] DP
[19:25:42] [PASSED] HDMI-A
[19:25:42] [PASSED] HDMI-B
[19:25:42] [PASSED] TV
[19:25:42] [PASSED] eDP
[19:25:42] [PASSED] Virtual
[19:25:42] [PASSED] DSI
[19:25:42] [PASSED] DPI
[19:25:42] [PASSED] Writeback
[19:25:42] [PASSED] SPI
[19:25:42] [PASSED] USB
[19:25:42] ===== [PASSED] drm_test_drmm_connector_init_type_valid =====
[19:25:42] =============== [PASSED] drmm_connector_init ===============
[19:25:42] = drm_connector_attach_broadcast_rgb_property (2 subtests) =
[19:25:42] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property
[19:25:42] [PASSED] drm_test_drm_connector_attach_broadcast_rgb_property_hdmi_connector
[19:25:42] === [PASSED] drm_connector_attach_broadcast_rgb_property ===
[19:25:42] ========== drm_get_tv_mode_from_name (2 subtests) ==========
[19:25:42] ========== drm_test_get_tv_mode_from_name_valid ===========
[19:25:42] [PASSED] NTSC
[19:25:42] [PASSED] NTSC-443
[19:25:42] [PASSED] NTSC-J
[19:25:42] [PASSED] PAL
[19:25:42] [PASSED] PAL-M
[19:25:42] [PASSED] PAL-N
[19:25:42] [PASSED] SECAM
[19:25:42] [PASSED] Mono
[19:25:42] ====== [PASSED] drm_test_get_tv_mode_from_name_valid =======
[19:25:42] [PASSED] drm_test_get_tv_mode_from_name_truncated
[19:25:42] ============ [PASSED] drm_get_tv_mode_from_name ============
[19:25:42] = drm_test_connector_hdmi_compute_mode_clock (12 subtests) =
[19:25:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb
[19:25:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc
[19:25:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_10bpc_vic_1
[19:25:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc
[19:25:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_12bpc_vic_1
[19:25:42] [PASSED] drm_test_drm_hdmi_compute_mode_clock_rgb_double
[19:25:42] = drm_test_connector_hdmi_compute_mode_clock_yuv420_valid =
[19:25:42] [PASSED] VIC 96
[19:25:42] [PASSED] VIC 97
[19:25:42] [PASSED] VIC 101
[19:25:42] [PASSED] VIC 102
[19:25:42] [PASSED] VIC 106
[19:25:42] [PASSED] VIC 107
[19:25:42] === [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_valid ===
[19:25:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_10_bpc
[19:25:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv420_12_bpc
[19:25:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_8_bpc
[19:25:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_10_bpc
[19:25:42] [PASSED] drm_test_connector_hdmi_compute_mode_clock_yuv422_12_bpc
[19:25:42] === [PASSED] drm_test_connector_hdmi_compute_mode_clock ====
[19:25:42] == drm_hdmi_connector_get_broadcast_rgb_name (2 subtests) ==
[19:25:42] === drm_test_drm_hdmi_connector_get_broadcast_rgb_name ====
[19:25:42] [PASSED] Automatic
[19:25:42] [PASSED] Full
[19:25:42] [PASSED] Limited 16:235
[19:25:42] === [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name ===
[19:25:42] [PASSED] drm_test_drm_hdmi_connector_get_broadcast_rgb_name_invalid
[19:25:42] ==== [PASSED] drm_hdmi_connector_get_broadcast_rgb_name ====
[19:25:42] == drm_hdmi_connector_get_output_format_name (2 subtests) ==
[19:25:42] === drm_test_drm_hdmi_connector_get_output_format_name ====
[19:25:42] [PASSED] RGB
[19:25:42] [PASSED] YUV 4:2:0
[19:25:42] [PASSED] YUV 4:2:2
[19:25:42] [PASSED] YUV 4:4:4
[19:25:42] === [PASSED] drm_test_drm_hdmi_connector_get_output_format_name ===
[19:25:42] [PASSED] drm_test_drm_hdmi_connector_get_output_format_name_invalid
[19:25:42] ==== [PASSED] drm_hdmi_connector_get_output_format_name ====
[19:25:42] ============= drm_damage_helper (21 subtests) ==============
[19:25:42] [PASSED] drm_test_damage_iter_no_damage
[19:25:42] [PASSED] drm_test_damage_iter_no_damage_fractional_src
[19:25:42] [PASSED] drm_test_damage_iter_no_damage_src_moved
[19:25:42] [PASSED] drm_test_damage_iter_no_damage_fractional_src_moved
[19:25:42] [PASSED] drm_test_damage_iter_no_damage_not_visible
[19:25:42] [PASSED] drm_test_damage_iter_no_damage_no_crtc
[19:25:42] [PASSED] drm_test_damage_iter_no_damage_no_fb
[19:25:42] [PASSED] drm_test_damage_iter_simple_damage
[19:25:42] [PASSED] drm_test_damage_iter_single_damage
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_intersect_src
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_outside_src
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_fractional_src
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_intersect_fractional_src
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_outside_fractional_src
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_src_moved
[19:25:42] [PASSED] drm_test_damage_iter_single_damage_fractional_src_moved
[19:25:42] [PASSED] drm_test_damage_iter_damage
[19:25:42] [PASSED] drm_test_damage_iter_damage_one_intersect
[19:25:42] [PASSED] drm_test_damage_iter_damage_one_outside
[19:25:42] [PASSED] drm_test_damage_iter_damage_src_moved
[19:25:42] [PASSED] drm_test_damage_iter_damage_not_visible
[19:25:42] ================ [PASSED] drm_damage_helper ================
[19:25:42] ============== drm_dp_mst_helper (3 subtests) ==============
[19:25:42] ============== drm_test_dp_mst_calc_pbn_mode ==============
[19:25:42] [PASSED] Clock 154000 BPP 30 DSC disabled
[19:25:42] [PASSED] Clock 234000 BPP 30 DSC disabled
[19:25:42] [PASSED] Clock 297000 BPP 24 DSC disabled
[19:25:42] [PASSED] Clock 332880 BPP 24 DSC enabled
[19:25:42] [PASSED] Clock 324540 BPP 24 DSC enabled
[19:25:42] ========== [PASSED] drm_test_dp_mst_calc_pbn_mode ==========
[19:25:42] ============== drm_test_dp_mst_calc_pbn_div ===============
[19:25:42] [PASSED] Link rate 2000000 lane count 4
[19:25:42] [PASSED] Link rate 2000000 lane count 2
[19:25:42] [PASSED] Link rate 2000000 lane count 1
[19:25:42] [PASSED] Link rate 1350000 lane count 4
[19:25:42] [PASSED] Link rate 1350000 lane count 2
[19:25:42] [PASSED] Link rate 1350000 lane count 1
[19:25:42] [PASSED] Link rate 1000000 lane count 4
[19:25:42] [PASSED] Link rate 1000000 lane count 2
[19:25:42] [PASSED] Link rate 1000000 lane count 1
[19:25:42] [PASSED] Link rate 810000 lane count 4
[19:25:42] [PASSED] Link rate 810000 lane count 2
[19:25:42] [PASSED] Link rate 810000 lane count 1
[19:25:42] [PASSED] Link rate 540000 lane count 4
[19:25:42] [PASSED] Link rate 540000 lane count 2
[19:25:42] [PASSED] Link rate 540000 lane count 1
[19:25:42] [PASSED] Link rate 270000 lane count 4
[19:25:42] [PASSED] Link rate 270000 lane count 2
[19:25:42] [PASSED] Link rate 270000 lane count 1
[19:25:42] [PASSED] Link rate 162000 lane count 4
[19:25:42] [PASSED] Link rate 162000 lane count 2
[19:25:42] [PASSED] Link rate 162000 lane count 1
[19:25:42] ========== [PASSED] drm_test_dp_mst_calc_pbn_div ===========
[19:25:42] ========= drm_test_dp_mst_sideband_msg_req_decode =========
[19:25:42] [PASSED] DP_ENUM_PATH_RESOURCES with port number
[19:25:42] [PASSED] DP_POWER_UP_PHY with port number
[19:25:42] [PASSED] DP_POWER_DOWN_PHY with port number
[19:25:42] [PASSED] DP_ALLOCATE_PAYLOAD with SDP stream sinks
[19:25:42] [PASSED] DP_ALLOCATE_PAYLOAD with port number
[19:25:42] [PASSED] DP_ALLOCATE_PAYLOAD with VCPI
[19:25:42] [PASSED] DP_ALLOCATE_PAYLOAD with PBN
[19:25:42] [PASSED] DP_QUERY_PAYLOAD with port number
[19:25:42] [PASSED] DP_QUERY_PAYLOAD with VCPI
[19:25:42] [PASSED] DP_REMOTE_DPCD_READ with port number
[19:25:42] [PASSED] DP_REMOTE_DPCD_READ with DPCD address
[19:25:42] [PASSED] DP_REMOTE_DPCD_READ with max number of bytes
[19:25:42] [PASSED] DP_REMOTE_DPCD_WRITE with port number
[19:25:42] [PASSED] DP_REMOTE_DPCD_WRITE with DPCD address
[19:25:42] [PASSED] DP_REMOTE_DPCD_WRITE with data array
[19:25:42] [PASSED] DP_REMOTE_I2C_READ with port number
[19:25:42] [PASSED] DP_REMOTE_I2C_READ with I2C device ID
[19:25:42] [PASSED] DP_REMOTE_I2C_READ with transactions array
[19:25:42] [PASSED] DP_REMOTE_I2C_WRITE with port number
[19:25:42] [PASSED] DP_REMOTE_I2C_WRITE with I2C device ID
[19:25:42] [PASSED] DP_REMOTE_I2C_WRITE with data array
[19:25:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream ID
[19:25:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with client ID
[19:25:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream event
[19:25:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with valid stream event
[19:25:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with stream behavior
[19:25:42] [PASSED] DP_QUERY_STREAM_ENC_STATUS with a valid stream behavior
[19:25:42] ===== [PASSED] drm_test_dp_mst_sideband_msg_req_decode =====
[19:25:42] ================ [PASSED] drm_dp_mst_helper ================
[19:25:42] ================== drm_exec (7 subtests) ===================
[19:25:42] [PASSED] sanitycheck
[19:25:42] [PASSED] test_lock
[19:25:42] [PASSED] test_lock_unlock
[19:25:42] [PASSED] test_duplicates
[19:25:42] [PASSED] test_prepare
[19:25:42] [PASSED] test_prepare_array
[19:25:42] [PASSED] test_multiple_loops
[19:25:42] ==================== [PASSED] drm_exec =====================
[19:25:42] =========== drm_format_helper_test (17 subtests) ===========
[19:25:42] ============== drm_test_fb_xrgb8888_to_gray8 ==============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ========== [PASSED] drm_test_fb_xrgb8888_to_gray8 ==========
[19:25:42] ============= drm_test_fb_xrgb8888_to_rgb332 ==============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb332 ==========
[19:25:42] ============= drm_test_fb_xrgb8888_to_rgb565 ==============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb565 ==========
[19:25:42] ============ drm_test_fb_xrgb8888_to_xrgb1555 =============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======== [PASSED] drm_test_fb_xrgb8888_to_xrgb1555 =========
[19:25:42] ============ drm_test_fb_xrgb8888_to_argb1555 =============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======== [PASSED] drm_test_fb_xrgb8888_to_argb1555 =========
[19:25:42] ============ drm_test_fb_xrgb8888_to_rgba5551 =============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======== [PASSED] drm_test_fb_xrgb8888_to_rgba5551 =========
[19:25:42] ============= drm_test_fb_xrgb8888_to_rgb888 ==============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ========= [PASSED] drm_test_fb_xrgb8888_to_rgb888 ==========
[19:25:42] ============ drm_test_fb_xrgb8888_to_argb8888 =============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======== [PASSED] drm_test_fb_xrgb8888_to_argb8888 =========
[19:25:42] =========== drm_test_fb_xrgb8888_to_xrgb2101010 ===========
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======= [PASSED] drm_test_fb_xrgb8888_to_xrgb2101010 =======
[19:25:42] =========== drm_test_fb_xrgb8888_to_argb2101010 ===========
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======= [PASSED] drm_test_fb_xrgb8888_to_argb2101010 =======
[19:25:42] ============== drm_test_fb_xrgb8888_to_mono ===============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ========== [PASSED] drm_test_fb_xrgb8888_to_mono ===========
[19:25:42] ==================== drm_test_fb_swab =====================
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ================ [PASSED] drm_test_fb_swab =================
[19:25:42] ============ drm_test_fb_xrgb8888_to_xbgr8888 =============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======== [PASSED] drm_test_fb_xrgb8888_to_xbgr8888 =========
[19:25:42] ============ drm_test_fb_xrgb8888_to_abgr8888 =============
[19:25:42] [PASSED] single_pixel_source_buffer
[19:25:42] [PASSED] single_pixel_clip_rectangle
[19:25:42] [PASSED] well_known_colors
[19:25:42] [PASSED] destination_pitch
[19:25:42] ======== [PASSED] drm_test_fb_xrgb8888_to_abgr8888 =========
[19:25:42] ================= drm_test_fb_clip_offset =================
[19:25:42] [PASSED] pass through
[19:25:42] [PASSED] horizontal offset
[19:25:42] [PASSED] vertical offset
[19:25:42] [PASSED] horizontal and vertical offset
[19:25:42] [PASSED] horizontal offset (custom pitch)
[19:25:42] [PASSED] vertical offset (custom pitch)
[19:25:42] [PASSED] horizontal and vertical offset (custom pitch)
[19:25:42] ============= [PASSED] drm_test_fb_clip_offset =============
[19:25:42] ============== drm_test_fb_build_fourcc_list ==============
[19:25:42] [PASSED] no native formats
[19:25:42] [PASSED] XRGB8888 as native format
[19:25:42] [PASSED] remove duplicates
[19:25:42] [PASSED] convert alpha formats
[19:25:42] [PASSED] random formats
[19:25:42] ========== [PASSED] drm_test_fb_build_fourcc_list ==========
[19:25:42] =================== drm_test_fb_memcpy ====================
[19:25:42] [PASSED] single_pixel_source_buffer: XR24 little-endian (0x34325258)
[19:25:42] [PASSED] single_pixel_source_buffer: XRA8 little-endian (0x38415258)
[19:25:42] [PASSED] single_pixel_source_buffer: YU24 little-endian (0x34325559)
[19:25:42] [PASSED] single_pixel_clip_rectangle: XB24 little-endian (0x34324258)
[19:25:42] [PASSED] single_pixel_clip_rectangle: XRA8 little-endian (0x38415258)
[19:25:42] [PASSED] single_pixel_clip_rectangle: YU24 little-endian (0x34325559)
[19:25:42] [PASSED] well_known_colors: XB24 little-endian (0x34324258)
[19:25:42] [PASSED] well_known_colors: XRA8 little-endian (0x38415258)
[19:25:42] [PASSED] well_known_colors: YU24 little-endian (0x34325559)
[19:25:42] [PASSED] destination_pitch: XB24 little-endian (0x34324258)
[19:25:42] [PASSED] destination_pitch: XRA8 little-endian (0x38415258)
[19:25:42] [PASSED] destination_pitch: YU24 little-endian (0x34325559)
[19:25:42] =============== [PASSED] drm_test_fb_memcpy ================
[19:25:42] ============= [PASSED] drm_format_helper_test ==============
[19:25:42] ================= drm_format (18 subtests) =================
[19:25:42] [PASSED] drm_test_format_block_width_invalid
[19:25:42] [PASSED] drm_test_format_block_width_one_plane
[19:25:42] [PASSED] drm_test_format_block_width_two_plane
[19:25:42] [PASSED] drm_test_format_block_width_three_plane
[19:25:42] [PASSED] drm_test_format_block_width_tiled
[19:25:42] [PASSED] drm_test_format_block_height_invalid
[19:25:42] [PASSED] drm_test_format_block_height_one_plane
[19:25:42] [PASSED] drm_test_format_block_height_two_plane
[19:25:42] [PASSED] drm_test_format_block_height_three_plane
[19:25:42] [PASSED] drm_test_format_block_height_tiled
[19:25:42] [PASSED] drm_test_format_min_pitch_invalid
[19:25:42] [PASSED] drm_test_format_min_pitch_one_plane_8bpp
[19:25:42] [PASSED] drm_test_format_min_pitch_one_plane_16bpp
[19:25:42] [PASSED] drm_test_format_min_pitch_one_plane_24bpp
[19:25:42] [PASSED] drm_test_format_min_pitch_one_plane_32bpp
[19:25:42] [PASSED] drm_test_format_min_pitch_two_plane
[19:25:42] [PASSED] drm_test_format_min_pitch_three_plane_8bpp
[19:25:42] [PASSED] drm_test_format_min_pitch_tiled
[19:25:42] =================== [PASSED] drm_format ====================
[19:25:42] ============== drm_framebuffer (10 subtests) ===============
[19:25:42] ========== drm_test_framebuffer_check_src_coords ==========
[19:25:42] [PASSED] Success: source fits into fb
[19:25:42] [PASSED] Fail: overflowing fb with x-axis coordinate
[19:25:42] [PASSED] Fail: overflowing fb with y-axis coordinate
[19:25:42] [PASSED] Fail: overflowing fb with source width
[19:25:42] [PASSED] Fail: overflowing fb with source height
[19:25:42] ====== [PASSED] drm_test_framebuffer_check_src_coords ======
[19:25:42] [PASSED] drm_test_framebuffer_cleanup
[19:25:42] =============== drm_test_framebuffer_create ===============
[19:25:42] [PASSED] ABGR8888 normal sizes
[19:25:42] [PASSED] ABGR8888 max sizes
[19:25:42] [PASSED] ABGR8888 pitch greater than min required
[19:25:42] [PASSED] ABGR8888 pitch less than min required
[19:25:42] [PASSED] ABGR8888 Invalid width
[19:25:42] [PASSED] ABGR8888 Invalid buffer handle
[19:25:42] [PASSED] No pixel format
[19:25:42] [PASSED] ABGR8888 Width 0
[19:25:42] [PASSED] ABGR8888 Height 0
[19:25:42] [PASSED] ABGR8888 Out of bound height * pitch combination
[19:25:42] [PASSED] ABGR8888 Large buffer offset
[19:25:42] [PASSED] ABGR8888 Buffer offset for inexistent plane
[19:25:42] [PASSED] ABGR8888 Invalid flag
[19:25:42] [PASSED] ABGR8888 Set DRM_MODE_FB_MODIFIERS without modifiers
[19:25:42] [PASSED] ABGR8888 Valid buffer modifier
[19:25:42] [PASSED] ABGR8888 Invalid buffer modifier(DRM_FORMAT_MOD_SAMSUNG_64_32_TILE)
[19:25:42] [PASSED] ABGR8888 Extra pitches without DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] ABGR8888 Extra pitches with DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] NV12 Normal sizes
[19:25:42] [PASSED] NV12 Max sizes
[19:25:42] [PASSED] NV12 Invalid pitch
[19:25:42] [PASSED] NV12 Invalid modifier/missing DRM_MODE_FB_MODIFIERS flag
[19:25:42] [PASSED] NV12 different modifier per-plane
[19:25:42] [PASSED] NV12 with DRM_FORMAT_MOD_SAMSUNG_64_32_TILE
[19:25:42] [PASSED] NV12 Valid modifiers without DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] NV12 Modifier for inexistent plane
[19:25:42] [PASSED] NV12 Handle for inexistent plane
[19:25:42] [PASSED] NV12 Handle for inexistent plane without DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] YVU420 DRM_MODE_FB_MODIFIERS set without modifier
[19:25:42] [PASSED] YVU420 Normal sizes
[19:25:42] [PASSED] YVU420 Max sizes
[19:25:42] [PASSED] YVU420 Invalid pitch
[19:25:42] [PASSED] YVU420 Different pitches
[19:25:42] [PASSED] YVU420 Different buffer offsets/pitches
[19:25:42] [PASSED] YVU420 Modifier set just for plane 0, without DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] YVU420 Modifier set just for planes 0, 1, without DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] YVU420 Modifier set just for plane 0, 1, with DRM_MODE_FB_MODIFIERS
[19:25:42] [PASSED] YVU420 Valid modifier
[19:25:42] [PASSED] YVU420 Different modifiers per plane
[19:25:42] [PASSED] YVU420 Modifier for inexistent plane
[19:25:42] [PASSED] YUV420_10BIT Invalid modifier(DRM_FORMAT_MOD_LINEAR)
[19:25:42] [PASSED] X0L2 Normal sizes
[19:25:42] [PASSED] X0L2 Max sizes
[19:25:42] [PASSED] X0L2 Invalid pitch
[19:25:42] [PASSED] X0L2 Pitch greater than minimum required
[19:25:42] [PASSED] X0L2 Handle for inexistent plane
[19:25:42] [PASSED] X0L2 Offset for inexistent plane, without DRM_MODE_FB_MODIFIERS set
[19:25:42] [PASSED] X0L2 Modifier without DRM_MODE_FB_MODIFIERS set
[19:25:42] [PASSED] X0L2 Valid modifier
[19:25:42] [PASSED] X0L2 Modifier for inexistent plane
[19:25:42] =========== [PASSED] drm_test_framebuffer_create ===========
[19:25:42] [PASSED] drm_test_framebuffer_free
[19:25:42] [PASSED] drm_test_framebuffer_init
[19:25:42] [PASSED] drm_test_framebuffer_init_bad_format
[19:25:42] [PASSED] drm_test_framebuffer_init_dev_mismatch
[19:25:42] [PASSED] drm_test_framebuffer_lookup
[19:25:42] [PASSED] drm_test_framebuffer_lookup_inexistent
[19:25:42] [PASSED] drm_test_framebuffer_modifiers_not_supported
[19:25:42] ================= [PASSED] drm_framebuffer =================
[19:25:42] ================ drm_gem_shmem (8 subtests) ================
[19:25:42] [PASSED] drm_gem_shmem_test_obj_create
[19:25:42] [PASSED] drm_gem_shmem_test_obj_create_private
[19:25:42] [PASSED] drm_gem_shmem_test_pin_pages
[19:25:42] [PASSED] drm_gem_shmem_test_vmap
[19:25:42] [PASSED] drm_gem_shmem_test_get_pages_sgt
[19:25:42] [PASSED] drm_gem_shmem_test_get_sg_table
[19:25:42] [PASSED] drm_gem_shmem_test_madvise
[19:25:42] [PASSED] drm_gem_shmem_test_purge
[19:25:42] ================== [PASSED] drm_gem_shmem ==================
[19:25:42] === drm_atomic_helper_connector_hdmi_check (22 subtests) ===
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_auto_cea_mode_vic_1
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_full_cea_mode_vic_1
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_limited_cea_mode_vic_1
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_changed
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_crtc_mode_not_changed
[19:25:42] [PASSED] drm_test_check_hdmi_funcs_reject_rate
[19:25:42] [PASSED] drm_test_check_max_tmds_rate_bpc_fallback
[19:25:42] [PASSED] drm_test_check_max_tmds_rate_format_fallback
[19:25:42] [PASSED] drm_test_check_output_bpc_crtc_mode_changed
[19:25:42] [PASSED] drm_test_check_output_bpc_crtc_mode_not_changed
[19:25:42] [PASSED] drm_test_check_output_bpc_dvi
[19:25:42] [PASSED] drm_test_check_output_bpc_format_vic_1
[19:25:42] [PASSED] drm_test_check_output_bpc_format_display_8bpc_only
[19:25:42] [PASSED] drm_test_check_output_bpc_format_display_rgb_only
[19:25:42] [PASSED] drm_test_check_output_bpc_format_driver_8bpc_only
[19:25:42] [PASSED] drm_test_check_output_bpc_format_driver_rgb_only
[19:25:42] [PASSED] drm_test_check_tmds_char_rate_rgb_8bpc
[19:25:42] [PASSED] drm_test_check_tmds_char_rate_rgb_10bpc
[19:25:42] [PASSED] drm_test_check_tmds_char_rate_rgb_12bpc
[19:25:42] ===== [PASSED] drm_atomic_helper_connector_hdmi_check ======
[19:25:42] === drm_atomic_helper_connector_hdmi_reset (6 subtests) ====
[19:25:42] [PASSED] drm_test_check_broadcast_rgb_value
[19:25:42] [PASSED] drm_test_check_bpc_8_value
[19:25:42] [PASSED] drm_test_check_bpc_10_value
[19:25:42] [PASSED] drm_test_check_bpc_12_value
[19:25:42] [PASSED] drm_test_check_format_value
[19:25:42] [PASSED] drm_test_check_tmds_char_value
[19:25:42] ===== [PASSED] drm_atomic_helper_connector_hdmi_reset ======
[19:25:42] ================= drm_managed (2 subtests) =================
[19:25:42] [PASSED] drm_test_managed_release_action
[19:25:42] [PASSED] drm_test_managed_run_action
[19:25:42] =================== [PASSED] drm_managed ===================
[19:25:42] =================== drm_mm (6 subtests) ====================
[19:25:42] [PASSED] drm_test_mm_init
[19:25:42] [PASSED] drm_test_mm_debug
[19:25:42] [PASSED] drm_test_mm_align32
[19:25:42] [PASSED] drm_test_mm_align64
[19:25:42] [PASSED] drm_test_mm_lowest
[19:25:42] [PASSED] drm_test_mm_highest
[19:25:42] ===================== [PASSED] drm_mm ======================
[19:25:42] ============= drm_modes_analog_tv (5 subtests) =============
stty: 'standard input': Inappropriate ioctl for device
[19:25:42] [PASSED] drm_test_modes_analog_tv_mono_576i
[19:25:42] [PASSED] drm_test_modes_analog_tv_ntsc_480i
[19:25:42] [PASSED] drm_test_modes_analog_tv_ntsc_480i_inlined
[19:25:42] [PASSED] drm_test_modes_analog_tv_pal_576i
[19:25:42] [PASSED] drm_test_modes_analog_tv_pal_576i_inlined
[19:25:42] =============== [PASSED] drm_modes_analog_tv ===============
[19:25:42] ============== drm_plane_helper (2 subtests) ===============
[19:25:42] =============== drm_test_check_plane_state ================
[19:25:42] [PASSED] clipping_simple
[19:25:42] [PASSED] clipping_rotate_reflect
[19:25:42] [PASSED] positioning_simple
[19:25:42] [PASSED] upscaling
[19:25:42] [PASSED] downscaling
[19:25:42] [PASSED] rounding1
[19:25:42] [PASSED] rounding2
[19:25:42] [PASSED] rounding3
[19:25:42] [PASSED] rounding4
[19:25:42] =========== [PASSED] drm_test_check_plane_state ============
[19:25:42] =========== drm_test_check_invalid_plane_state ============
[19:25:42] [PASSED] positioning_invalid
[19:25:42] [PASSED] upscaling_invalid
[19:25:42] [PASSED] downscaling_invalid
[19:25:42] ======= [PASSED] drm_test_check_invalid_plane_state ========
[19:25:42] ================ [PASSED] drm_plane_helper =================
[19:25:42] ====== drm_connector_helper_tv_get_modes (1 subtest) =======
[19:25:42] ====== drm_test_connector_helper_tv_get_modes_check =======
[19:25:42] [PASSED] None
[19:25:42] [PASSED] PAL
[19:25:42] [PASSED] NTSC
[19:25:42] [PASSED] Both, NTSC Default
[19:25:42] [PASSED] Both, PAL Default
[19:25:42] [PASSED] Both, NTSC Default, with PAL on command-line
[19:25:42] [PASSED] Both, PAL Default, with NTSC on command-line
[19:25:42] == [PASSED] drm_test_connector_helper_tv_get_modes_check ===
[19:25:42] ======== [PASSED] drm_connector_helper_tv_get_modes ========
[19:25:42] ================== drm_rect (9 subtests) ===================
[19:25:42] [PASSED] drm_test_rect_clip_scaled_div_by_zero
[19:25:42] [PASSED] drm_test_rect_clip_scaled_not_clipped
[19:25:42] [PASSED] drm_test_rect_clip_scaled_clipped
[19:25:42] [PASSED] drm_test_rect_clip_scaled_signed_vs_unsigned
[19:25:42] ================= drm_test_rect_intersect =================
[19:25:42] [PASSED] top-left x bottom-right: 2x2+1+1 x 2x2+0+0
[19:25:42] [PASSED] top-right x bottom-left: 2x2+0+0 x 2x2+1-1
[19:25:42] [PASSED] bottom-left x top-right: 2x2+1-1 x 2x2+0+0
[19:25:42] [PASSED] bottom-right x top-left: 2x2+0+0 x 2x2+1+1
[19:25:42] [PASSED] right x left: 2x1+0+0 x 3x1+1+0
[19:25:42] [PASSED] left x right: 3x1+1+0 x 2x1+0+0
[19:25:42] [PASSED] up x bottom: 1x2+0+0 x 1x3+0-1
[19:25:42] [PASSED] bottom x up: 1x3+0-1 x 1x2+0+0
[19:25:42] [PASSED] touching corner: 1x1+0+0 x 2x2+1+1
[19:25:42] [PASSED] touching side: 1x1+0+0 x 1x1+1+0
[19:25:42] [PASSED] equal rects: 2x2+0+0 x 2x2+0+0
[19:25:42] [PASSED] inside another: 2x2+0+0 x 1x1+1+1
[19:25:42] [PASSED] far away: 1x1+0+0 x 1x1+3+6
[19:25:42] [PASSED] points intersecting: 0x0+5+10 x 0x0+5+10
[19:25:42] [PASSED] points not intersecting: 0x0+0+0 x 0x0+5+10
[19:25:42] ============= [PASSED] drm_test_rect_intersect =============
[19:25:42] ================ drm_test_rect_calc_hscale ================
[19:25:42] [PASSED] normal use
[19:25:42] [PASSED] out of max range
[19:25:42] [PASSED] out of min range
[19:25:42] [PASSED] zero dst
[19:25:42] [PASSED] negative src
[19:25:42] [PASSED] negative dst
[19:25:42] ============ [PASSED] drm_test_rect_calc_hscale ============
[19:25:42] ================ drm_test_rect_calc_vscale ================
[19:25:42] [PASSED] normal use
[19:25:42] [PASSED] out of max range
[19:25:42] [PASSED] out of min range
[19:25:42] [PASSED] zero dst
[19:25:42] [PASSED] negative src
[19:25:42] [PASSED] negative dst
[19:25:42] ============ [PASSED] drm_test_rect_calc_vscale ============
[19:25:42] ================== drm_test_rect_rotate ===================
[19:25:42] [PASSED] reflect-x
[19:25:42] [PASSED] reflect-y
[19:25:42] [PASSED] rotate-0
[19:25:42] [PASSED] rotate-90
[19:25:42] [PASSED] rotate-180
[19:25:42] [PASSED] rotate-270
[19:25:42] ============== [PASSED] drm_test_rect_rotate ===============
[19:25:42] ================ drm_test_rect_rotate_inv =================
[19:25:42] [PASSED] reflect-x
[19:25:42] [PASSED] reflect-y
[19:25:42] [PASSED] rotate-0
[19:25:42] [PASSED] rotate-90
[19:25:42] [PASSED] rotate-180
[19:25:42] [PASSED] rotate-270
[19:25:42] ============ [PASSED] drm_test_rect_rotate_inv =============
[19:25:42] ==================== [PASSED] drm_rect =====================
[19:25:42] ============================================================
[19:25:42] Testing complete. Ran 531 tests: passed: 531
[19:25:43] Elapsed time: 23.392s total, 1.725s configuring, 21.462s building, 0.151s running
+ /kernel/tools/testing/kunit/kunit.py run --kunitconfig /kernel/drivers/gpu/drm/ttm/tests/.kunitconfig
[19:25:43] Configuring KUnit Kernel ...
Regenerating .config ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
[19:25:44] Building KUnit Kernel ...
Populating config with:
$ make ARCH=um O=.kunit olddefconfig
Building with:
$ make ARCH=um O=.kunit --jobs=48
[19:25:53] Starting KUnit Kernel (1/1)...
[19:25:53] ============================================================
Running tests with:
$ .kunit/linux kunit.enable=1 mem=1G console=tty kunit_shutdown=halt
[19:25:53] ================= ttm_device (5 subtests) ==================
[19:25:53] [PASSED] ttm_device_init_basic
[19:25:53] [PASSED] ttm_device_init_multiple
[19:25:53] [PASSED] ttm_device_fini_basic
[19:25:53] [PASSED] ttm_device_init_no_vma_man
[19:25:53] ================== ttm_device_init_pools ==================
[19:25:53] [PASSED] No DMA allocations, no DMA32 required
[19:25:53] [PASSED] DMA allocations, DMA32 required
[19:25:53] [PASSED] No DMA allocations, DMA32 required
[19:25:53] [PASSED] DMA allocations, no DMA32 required
[19:25:53] ============== [PASSED] ttm_device_init_pools ==============
[19:25:53] =================== [PASSED] ttm_device ====================
[19:25:53] ================== ttm_pool (8 subtests) ===================
[19:25:53] ================== ttm_pool_alloc_basic ===================
[19:25:53] [PASSED] One page
[19:25:53] [PASSED] More than one page
[19:25:53] [PASSED] Above the allocation limit
[19:25:53] [PASSED] One page, with coherent DMA mappings enabled
[19:25:53] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:25:53] ============== [PASSED] ttm_pool_alloc_basic ===============
[19:25:53] ============== ttm_pool_alloc_basic_dma_addr ==============
[19:25:53] [PASSED] One page
[19:25:53] [PASSED] More than one page
[19:25:53] [PASSED] Above the allocation limit
[19:25:53] [PASSED] One page, with coherent DMA mappings enabled
[19:25:53] [PASSED] Above the allocation limit, with coherent DMA mappings enabled
[19:25:53] ========== [PASSED] ttm_pool_alloc_basic_dma_addr ==========
[19:25:53] [PASSED] ttm_pool_alloc_order_caching_match
[19:25:53] [PASSED] ttm_pool_alloc_caching_mismatch
[19:25:53] [PASSED] ttm_pool_alloc_order_mismatch
[19:25:53] [PASSED] ttm_pool_free_dma_alloc
[19:25:53] [PASSED] ttm_pool_free_no_dma_alloc
[19:25:53] [PASSED] ttm_pool_fini_basic
[19:25:53] ==================== [PASSED] ttm_pool =====================
[19:25:53] ================ ttm_resource (8 subtests) =================
[19:25:53] ================= ttm_resource_init_basic =================
[19:25:53] [PASSED] Init resource in TTM_PL_SYSTEM
[19:25:53] [PASSED] Init resource in TTM_PL_VRAM
[19:25:53] [PASSED] Init resource in a private placement
[19:25:53] [PASSED] Init resource in TTM_PL_SYSTEM, set placement flags
[19:25:53] ============= [PASSED] ttm_resource_init_basic =============
[19:25:53] [PASSED] ttm_resource_init_pinned
[19:25:53] [PASSED] ttm_resource_fini_basic
[19:25:53] [PASSED] ttm_resource_manager_init_basic
[19:25:53] [PASSED] ttm_resource_manager_usage_basic
[19:25:53] [PASSED] ttm_resource_manager_set_used_basic
[19:25:53] [PASSED] ttm_sys_man_alloc_basic
[19:25:53] [PASSED] ttm_sys_man_free_basic
[19:25:53] ================== [PASSED] ttm_resource ===================
[19:25:53] =================== ttm_tt (15 subtests) ===================
[19:25:53] ==================== ttm_tt_init_basic ====================
[19:25:53] [PASSED] Page-aligned size
[19:25:53] [PASSED] Extra pages requested
[19:25:53] ================ [PASSED] ttm_tt_init_basic ================
[19:25:53] [PASSED] ttm_tt_init_misaligned
[19:25:53] [PASSED] ttm_tt_fini_basic
[19:25:53] [PASSED] ttm_tt_fini_sg
[19:25:53] [PASSED] ttm_tt_fini_shmem
[19:25:53] [PASSED] ttm_tt_create_basic
[19:25:53] [PASSED] ttm_tt_create_invalid_bo_type
[19:25:53] [PASSED] ttm_tt_create_ttm_exists
[19:25:53] [PASSED] ttm_tt_create_failed
[19:25:53] [PASSED] ttm_tt_destroy_basic
[19:25:53] [PASSED] ttm_tt_populate_null_ttm
[19:25:53] [PASSED] ttm_tt_populate_populated_ttm
[19:25:53] [PASSED] ttm_tt_unpopulate_basic
[19:25:53] [PASSED] ttm_tt_unpopulate_empty_ttm
[19:25:53] [PASSED] ttm_tt_swapin_basic
[19:25:53] ===================== [PASSED] ttm_tt ======================
[19:25:53] =================== ttm_bo (14 subtests) ===================
[19:25:53] =========== ttm_bo_reserve_optimistic_no_ticket ===========
[19:25:53] [PASSED] Cannot be interrupted and sleeps
[19:25:53] [PASSED] Cannot be interrupted, locks straight away
[19:25:53] [PASSED] Can be interrupted, sleeps
[19:25:53] ======= [PASSED] ttm_bo_reserve_optimistic_no_ticket =======
[19:25:53] [PASSED] ttm_bo_reserve_locked_no_sleep
[19:25:53] [PASSED] ttm_bo_reserve_no_wait_ticket
[19:25:53] [PASSED] ttm_bo_reserve_double_resv
[19:25:53] [PASSED] ttm_bo_reserve_interrupted
[19:25:53] [PASSED] ttm_bo_reserve_deadlock
[19:25:53] [PASSED] ttm_bo_unreserve_basic
[19:25:53] [PASSED] ttm_bo_unreserve_pinned
[19:25:53] [PASSED] ttm_bo_unreserve_bulk
[19:25:53] [PASSED] ttm_bo_put_basic
[19:25:53] [PASSED] ttm_bo_put_shared_resv
[19:25:53] [PASSED] ttm_bo_pin_basic
[19:25:53] [PASSED] ttm_bo_pin_unpin_resource
[19:25:53] [PASSED] ttm_bo_multiple_pin_one_unpin
[19:25:53] ===================== [PASSED] ttm_bo ======================
[19:25:53] ============== ttm_bo_validate (22 subtests) ===============
[19:25:53] ============== ttm_bo_init_reserved_sys_man ===============
[19:25:53] [PASSED] Buffer object for userspace
[19:25:53] [PASSED] Kernel buffer object
[19:25:53] [PASSED] Shared buffer object
[19:25:53] ========== [PASSED] ttm_bo_init_reserved_sys_man ===========
[19:25:53] ============== ttm_bo_init_reserved_mock_man ==============
[19:25:53] [PASSED] Buffer object for userspace
[19:25:53] [PASSED] Kernel buffer object
[19:25:53] [PASSED] Shared buffer object
[19:25:53] ========== [PASSED] ttm_bo_init_reserved_mock_man ==========
[19:25:53] [PASSED] ttm_bo_init_reserved_resv
[19:25:53] ================== ttm_bo_validate_basic ==================
[19:25:53] [PASSED] Buffer object for userspace
[19:25:53] [PASSED] Kernel buffer object
[19:25:53] [PASSED] Shared buffer object
[19:25:53] ============== [PASSED] ttm_bo_validate_basic ==============
[19:25:53] [PASSED] ttm_bo_validate_invalid_placement
[19:25:53] ============= ttm_bo_validate_same_placement ==============
[19:25:53] [PASSED] System manager
[19:25:53] [PASSED] VRAM manager
[19:25:53] ========= [PASSED] ttm_bo_validate_same_placement ==========
[19:25:53] [PASSED] ttm_bo_validate_failed_alloc
[19:25:53] [PASSED] ttm_bo_validate_pinned
[19:25:53] [PASSED] ttm_bo_validate_busy_placement
[19:25:53] ================ ttm_bo_validate_multihop =================
[19:25:53] [PASSED] Buffer object for userspace
[19:25:53] [PASSED] Kernel buffer object
[19:25:53] [PASSED] Shared buffer object
[19:25:53] ============ [PASSED] ttm_bo_validate_multihop =============
[19:25:53] ========== ttm_bo_validate_no_placement_signaled ==========
[19:25:53] [PASSED] Buffer object in system domain, no page vector
[19:25:53] [PASSED] Buffer object in system domain with an existing page vector
[19:25:53] ====== [PASSED] ttm_bo_validate_no_placement_signaled ======
[19:25:53] ======== ttm_bo_validate_no_placement_not_signaled ========
[19:25:53] [PASSED] Buffer object for userspace
[19:25:53] [PASSED] Kernel buffer object
[19:25:53] [PASSED] Shared buffer object
[19:25:53] ==== [PASSED] ttm_bo_validate_no_placement_not_signaled ====
[19:25:53] [PASSED] ttm_bo_validate_move_fence_signaled
[19:25:53] ========= ttm_bo_validate_move_fence_not_signaled =========
[19:25:53] [PASSED] Waits for GPU
[19:25:53] [PASSED] Tries to lock straight away
[19:25:54] ===== [PASSED] ttm_bo_validate_move_fence_not_signaled =====
[19:25:54] [PASSED] ttm_bo_validate_swapout
[19:25:54] [PASSED] ttm_bo_validate_happy_evict
[19:25:54] [PASSED] ttm_bo_validate_all_pinned_evict
[19:25:54] [PASSED] ttm_bo_validate_allowed_only_evict
[19:25:54] [PASSED] ttm_bo_validate_deleted_evict
[19:25:54] [PASSED] ttm_bo_validate_busy_domain_evict
[19:25:54] [PASSED] ttm_bo_validate_evict_gutting
[19:25:54] [PASSED] ttm_bo_validate_recrusive_evict
stty: 'standard input': Inappropriate ioctl for device
[19:25:54] ================= [PASSED] ttm_bo_validate =================
[19:25:54] ============================================================
[19:25:54] Testing complete. Ran 102 tests: passed: 102
[19:25:54] Elapsed time: 11.256s total, 1.760s configuring, 8.873s building, 0.520s running
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 58+ messages in thread* ✓ CI.Build: success for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (25 preceding siblings ...)
2024-09-12 19:25 ` ✓ CI.KUnit: " Patchwork
@ 2024-09-12 19:37 ` Patchwork
2024-09-12 19:39 ` ✓ CI.Hooks: " Patchwork
` (3 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:37 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : success
== Summary ==
lib/modules/6.11.0-rc7-xe/kernel/sound/core/seq/
lib/modules/6.11.0-rc7-xe/kernel/sound/core/seq/snd-seq.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-seq-device.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-hwdep.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-pcm.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-compress.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/core/snd-timer.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soundcore.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/snd-soc-sst-atom-hifi2-platform.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/sst/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-acpi.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/atom/sst/snd-intel-sst-core.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/common/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/intel/common/snd-soc-acpi-intel-match.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/amd/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/amd/snd-acp-config.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-tgl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-mlink.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-cnl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-lnl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-common.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda-generic.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-intel-hda.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/intel/snd-sof-pci-intel-mtl.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/amd/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/amd/snd-sof-amd-renoir.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/amd/snd-sof-amd-acp.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof-utils.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof-pci.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/snd-sof-probes.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/xtensa/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/sof/xtensa/snd-sof-xtensa-dsp.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/snd-soc-core.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/snd-soc-acpi.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/codecs/
lib/modules/6.11.0-rc7-xe/kernel/sound/soc/codecs/snd-soc-hdac-hda.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/snd-intel-sdw-acpi.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/ext/
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/ext/snd-hda-ext-core.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/snd-intel-dspcfg.ko
lib/modules/6.11.0-rc7-xe/kernel/sound/hda/snd-hda-core.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kernel/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kernel/msr.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kernel/cpuid.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/sha512-ssse3.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/crct10dif-pclmul.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/ghash-clmulni-intel.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/sha1-ssse3.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/crc32-pclmul.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/sha256-ssse3.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/aesni-intel.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/crypto/polyval-clmulni.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/intel/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/intel/intel-cstate.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/events/rapl.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kvm/
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kvm/kvm.ko
lib/modules/6.11.0-rc7-xe/kernel/arch/x86/kvm/kvm-intel.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/
lib/modules/6.11.0-rc7-xe/kernel/crypto/crypto_simd.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/cmac.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/ccm.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/cryptd.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/polyval-generic.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_xor.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_tx.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_memcpy.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_pq.ko
lib/modules/6.11.0-rc7-xe/kernel/crypto/async_tx/async_raid6_recov.ko
lib/modules/6.11.0-rc7-xe/build
lib/modules/6.11.0-rc7-xe/modules.alias.bin
lib/modules/6.11.0-rc7-xe/modules.builtin
lib/modules/6.11.0-rc7-xe/modules.softdep
lib/modules/6.11.0-rc7-xe/modules.alias
lib/modules/6.11.0-rc7-xe/modules.order
lib/modules/6.11.0-rc7-xe/modules.symbols
lib/modules/6.11.0-rc7-xe/modules.dep.bin
+ mv kernel-nodebug.tar.gz ..
+ cd ..
+ rm -rf archive
++ date +%s
^[[0Ksection_end:1726169842:package_x86_64_nodebug
^[[0K
+ echo -e '\e[0Ksection_end:1726169842:package_x86_64_nodebug\r\e[0K'
+ sync
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 58+ messages in thread* ✓ CI.Hooks: success for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (26 preceding siblings ...)
2024-09-12 19:37 ` ✓ CI.Build: " Patchwork
@ 2024-09-12 19:39 ` Patchwork
2024-09-12 19:41 ` ✓ CI.checksparse: " Patchwork
` (2 subsequent siblings)
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:39 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : success
== Summary ==
run-parts: executing /workspace/ci/hooks/00-showenv
+ export
+ grep -Ei '(^|\W)CI_'
declare -x CI_KERNEL_BUILD_DIR="/workspace/kernel/build64-default"
declare -x CI_KERNEL_SRC_DIR="/workspace/kernel"
declare -x CI_TOOLS_SRC_DIR="/workspace/ci"
declare -x CI_WORKSPACE_DIR="/workspace"
run-parts: executing /workspace/ci/hooks/10-build-W1
+ SRC_DIR=/workspace/kernel
+ RESTORE_DISPLAY_CONFIG=0
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ cd /workspace/kernel
++ nproc
+ make -j48 O=/workspace/kernel/build64-default modules_prepare
make[1]: Entering directory '/workspace/kernel/build64-default'
GEN Makefile
UPD include/generated/compile.h
UPD include/config/kernel.release
mkdir -p /workspace/kernel/build64-default/tools/objtool && make O=/workspace/kernel/build64-default subdir=tools/objtool --no-print-directory -C objtool
UPD include/generated/utsrelease.h
CALL ../scripts/checksyscalls.sh
HOSTCC /workspace/kernel/build64-default/tools/objtool/fixdep.o
HOSTLD /workspace/kernel/build64-default/tools/objtool/fixdep-in.o
LINK /workspace/kernel/build64-default/tools/objtool/fixdep
INSTALL libsubcmd_headers
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/exec-cmd.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/help.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/pager.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/parse-options.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/run-command.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/sigchain.o
CC /workspace/kernel/build64-default/tools/objtool/libsubcmd/subcmd-config.o
LD /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd-in.o
AR /workspace/kernel/build64-default/tools/objtool/libsubcmd/libsubcmd.a
CC /workspace/kernel/build64-default/tools/objtool/weak.o
CC /workspace/kernel/build64-default/tools/objtool/check.o
CC /workspace/kernel/build64-default/tools/objtool/special.o
CC /workspace/kernel/build64-default/tools/objtool/builtin-check.o
CC /workspace/kernel/build64-default/tools/objtool/elf.o
CC /workspace/kernel/build64-default/tools/objtool/objtool.o
CC /workspace/kernel/build64-default/tools/objtool/orc_gen.o
CC /workspace/kernel/build64-default/tools/objtool/orc_dump.o
CC /workspace/kernel/build64-default/tools/objtool/libstring.o
CC /workspace/kernel/build64-default/tools/objtool/libctype.o
CC /workspace/kernel/build64-default/tools/objtool/str_error_r.o
CC /workspace/kernel/build64-default/tools/objtool/librbtree.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/special.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/decode.o
CC /workspace/kernel/build64-default/tools/objtool/arch/x86/orc.o
LD /workspace/kernel/build64-default/tools/objtool/arch/x86/objtool-in.o
LD /workspace/kernel/build64-default/tools/objtool/objtool-in.o
LINK /workspace/kernel/build64-default/tools/objtool/objtool
make[1]: Leaving directory '/workspace/kernel/build64-default'
++ nproc
+ make -j48 O=/workspace/kernel/build64-default W=1 drivers/gpu/drm/xe
make[1]: Entering directory '/workspace/kernel/build64-default'
make[2]: Nothing to be done for 'drivers/gpu/drm/xe'.
make[1]: Leaving directory '/workspace/kernel/build64-default'
run-parts: executing /workspace/ci/hooks/11-build-32b
+++ realpath /workspace/ci/hooks/11-build-32b
++ dirname /workspace/ci/hooks/11-build-32b
+ THIS_SCRIPT_DIR=/workspace/ci/hooks
+ SRC_DIR=/workspace/kernel
+ TOOLS_SRC_DIR=/workspace/ci
+ '[' -n /workspace/kernel/build64-default ']'
+ BUILD_DIR=/workspace/kernel/build64-default
+ BUILD_DIR=/workspace/kernel/build64-default/build32
+ cd /workspace/kernel
+ mkdir -p /workspace/kernel/build64-default/build32
++ nproc
+ make -j48 ARCH=i386 O=/workspace/kernel/build64-default/build32 defconfig
make[1]: Entering directory '/workspace/kernel/build64-default/build32'
GEN Makefile
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/confdata.o
HOSTCC scripts/kconfig/expr.o
LEX scripts/kconfig/lexer.lex.c
YACC scripts/kconfig/parser.tab.[ch]
HOSTCC scripts/kconfig/menu.o
HOSTCC scripts/kconfig/preprocess.o
HOSTCC scripts/kconfig/symbol.o
HOSTCC scripts/kconfig/util.o
HOSTCC scripts/kconfig/lexer.lex.o
HOSTCC scripts/kconfig/parser.tab.o
HOSTLD scripts/kconfig/conf
*** Default configuration is based on 'i386_defconfig'
#
# configuration written to .config
#
make[1]: Leaving directory '/workspace/kernel/build64-default/build32'
+ cd /workspace/kernel/build64-default/build32
+ /workspace/kernel/scripts/kconfig/merge_config.sh .config /workspace/ci/kernel/10-xe.fragment
Using .config as base
Merging /workspace/ci/kernel/10-xe.fragment
Value of CONFIG_DRM_XE is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_DRM_XE is not set
New value: CONFIG_DRM_XE=m
Value of CONFIG_SND_DEBUG is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_DEBUG is not set
New value: CONFIG_SND_DEBUG=y
Value of CONFIG_SND_HDA_INTEL is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: CONFIG_SND_HDA_INTEL=y
New value: CONFIG_SND_HDA_INTEL=m
Value of CONFIG_SND_HDA_CODEC_HDMI is redefined by fragment /workspace/ci/kernel/10-xe.fragment:
Previous value: # CONFIG_SND_HDA_CODEC_HDMI is not set
New value: CONFIG_SND_HDA_CODEC_HDMI=m
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
Value requested for CONFIG_HAVE_UID16 not in final .config
Requested value: CONFIG_HAVE_UID16=y
Actual value:
Value requested for CONFIG_UID16 not in final .config
Requested value: CONFIG_UID16=y
Actual value:
Value requested for CONFIG_X86_32 not in final .config
Requested value: CONFIG_X86_32=y
Actual value:
Value requested for CONFIG_OUTPUT_FORMAT not in final .config
Requested value: CONFIG_OUTPUT_FORMAT="elf32-i386"
Actual value: CONFIG_OUTPUT_FORMAT="elf64-x86-64"
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MIN not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MIN=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MIN=28
Value requested for CONFIG_ARCH_MMAP_RND_BITS_MAX not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS_MAX=16
Actual value: CONFIG_ARCH_MMAP_RND_BITS_MAX=32
Value requested for CONFIG_PGTABLE_LEVELS not in final .config
Requested value: CONFIG_PGTABLE_LEVELS=2
Actual value: CONFIG_PGTABLE_LEVELS=5
Value requested for CONFIG_X86_BIGSMP not in final .config
Requested value: # CONFIG_X86_BIGSMP is not set
Actual value:
Value requested for CONFIG_X86_INTEL_QUARK not in final .config
Requested value: # CONFIG_X86_INTEL_QUARK is not set
Actual value:
Value requested for CONFIG_X86_RDC321X not in final .config
Requested value: # CONFIG_X86_RDC321X is not set
Actual value:
Value requested for CONFIG_X86_32_NON_STANDARD not in final .config
Requested value: # CONFIG_X86_32_NON_STANDARD is not set
Actual value:
Value requested for CONFIG_X86_32_IRIS not in final .config
Requested value: # CONFIG_X86_32_IRIS is not set
Actual value:
Value requested for CONFIG_M486SX not in final .config
Requested value: # CONFIG_M486SX is not set
Actual value:
Value requested for CONFIG_M486 not in final .config
Requested value: # CONFIG_M486 is not set
Actual value:
Value requested for CONFIG_M586 not in final .config
Requested value: # CONFIG_M586 is not set
Actual value:
Value requested for CONFIG_M586TSC not in final .config
Requested value: # CONFIG_M586TSC is not set
Actual value:
Value requested for CONFIG_M586MMX not in final .config
Requested value: # CONFIG_M586MMX is not set
Actual value:
Value requested for CONFIG_M686 not in final .config
Requested value: CONFIG_M686=y
Actual value:
Value requested for CONFIG_MPENTIUMII not in final .config
Requested value: # CONFIG_MPENTIUMII is not set
Actual value:
Value requested for CONFIG_MPENTIUMIII not in final .config
Requested value: # CONFIG_MPENTIUMIII is not set
Actual value:
Value requested for CONFIG_MPENTIUMM not in final .config
Requested value: # CONFIG_MPENTIUMM is not set
Actual value:
Value requested for CONFIG_MPENTIUM4 not in final .config
Requested value: # CONFIG_MPENTIUM4 is not set
Actual value:
Value requested for CONFIG_MK6 not in final .config
Requested value: # CONFIG_MK6 is not set
Actual value:
Value requested for CONFIG_MK7 not in final .config
Requested value: # CONFIG_MK7 is not set
Actual value:
Value requested for CONFIG_MCRUSOE not in final .config
Requested value: # CONFIG_MCRUSOE is not set
Actual value:
Value requested for CONFIG_MEFFICEON not in final .config
Requested value: # CONFIG_MEFFICEON is not set
Actual value:
Value requested for CONFIG_MWINCHIPC6 not in final .config
Requested value: # CONFIG_MWINCHIPC6 is not set
Actual value:
Value requested for CONFIG_MWINCHIP3D not in final .config
Requested value: # CONFIG_MWINCHIP3D is not set
Actual value:
Value requested for CONFIG_MELAN not in final .config
Requested value: # CONFIG_MELAN is not set
Actual value:
Value requested for CONFIG_MGEODEGX1 not in final .config
Requested value: # CONFIG_MGEODEGX1 is not set
Actual value:
Value requested for CONFIG_MGEODE_LX not in final .config
Requested value: # CONFIG_MGEODE_LX is not set
Actual value:
Value requested for CONFIG_MCYRIXIII not in final .config
Requested value: # CONFIG_MCYRIXIII is not set
Actual value:
Value requested for CONFIG_MVIAC3_2 not in final .config
Requested value: # CONFIG_MVIAC3_2 is not set
Actual value:
Value requested for CONFIG_MVIAC7 not in final .config
Requested value: # CONFIG_MVIAC7 is not set
Actual value:
Value requested for CONFIG_X86_GENERIC not in final .config
Requested value: # CONFIG_X86_GENERIC is not set
Actual value:
Value requested for CONFIG_X86_INTERNODE_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_INTERNODE_CACHE_SHIFT=5
Actual value: CONFIG_X86_INTERNODE_CACHE_SHIFT=6
Value requested for CONFIG_X86_L1_CACHE_SHIFT not in final .config
Requested value: CONFIG_X86_L1_CACHE_SHIFT=5
Actual value: CONFIG_X86_L1_CACHE_SHIFT=6
Value requested for CONFIG_X86_USE_PPRO_CHECKSUM not in final .config
Requested value: CONFIG_X86_USE_PPRO_CHECKSUM=y
Actual value:
Value requested for CONFIG_X86_MINIMUM_CPU_FAMILY not in final .config
Requested value: CONFIG_X86_MINIMUM_CPU_FAMILY=6
Actual value: CONFIG_X86_MINIMUM_CPU_FAMILY=64
Value requested for CONFIG_CPU_SUP_TRANSMETA_32 not in final .config
Requested value: CONFIG_CPU_SUP_TRANSMETA_32=y
Actual value:
Value requested for CONFIG_CPU_SUP_VORTEX_32 not in final .config
Requested value: CONFIG_CPU_SUP_VORTEX_32=y
Actual value:
Value requested for CONFIG_HPET_TIMER not in final .config
Requested value: # CONFIG_HPET_TIMER is not set
Actual value: CONFIG_HPET_TIMER=y
Value requested for CONFIG_NR_CPUS_RANGE_END not in final .config
Requested value: CONFIG_NR_CPUS_RANGE_END=8
Actual value: CONFIG_NR_CPUS_RANGE_END=512
Value requested for CONFIG_NR_CPUS_DEFAULT not in final .config
Requested value: CONFIG_NR_CPUS_DEFAULT=8
Actual value: CONFIG_NR_CPUS_DEFAULT=64
Value requested for CONFIG_X86_ANCIENT_MCE not in final .config
Requested value: # CONFIG_X86_ANCIENT_MCE is not set
Actual value:
Value requested for CONFIG_X86_LEGACY_VM86 not in final .config
Requested value: # CONFIG_X86_LEGACY_VM86 is not set
Actual value:
Value requested for CONFIG_X86_ESPFIX32 not in final .config
Requested value: CONFIG_X86_ESPFIX32=y
Actual value:
Value requested for CONFIG_TOSHIBA not in final .config
Requested value: # CONFIG_TOSHIBA is not set
Actual value:
Value requested for CONFIG_X86_REBOOTFIXUPS not in final .config
Requested value: # CONFIG_X86_REBOOTFIXUPS is not set
Actual value:
Value requested for CONFIG_MICROCODE_INITRD32 not in final .config
Requested value: CONFIG_MICROCODE_INITRD32=y
Actual value:
Value requested for CONFIG_NOHIGHMEM not in final .config
Requested value: # CONFIG_NOHIGHMEM is not set
Actual value:
Value requested for CONFIG_HIGHMEM4G not in final .config
Requested value: CONFIG_HIGHMEM4G=y
Actual value:
Value requested for CONFIG_HIGHMEM64G not in final .config
Requested value: # CONFIG_HIGHMEM64G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_3G not in final .config
Requested value: CONFIG_VMSPLIT_3G=y
Actual value:
Value requested for CONFIG_VMSPLIT_3G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_3G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G not in final .config
Requested value: # CONFIG_VMSPLIT_2G is not set
Actual value:
Value requested for CONFIG_VMSPLIT_2G_OPT not in final .config
Requested value: # CONFIG_VMSPLIT_2G_OPT is not set
Actual value:
Value requested for CONFIG_VMSPLIT_1G not in final .config
Requested value: # CONFIG_VMSPLIT_1G is not set
Actual value:
Value requested for CONFIG_PAGE_OFFSET not in final .config
Requested value: CONFIG_PAGE_OFFSET=0xC0000000
Actual value:
Value requested for CONFIG_HIGHMEM not in final .config
Requested value: CONFIG_HIGHMEM=y
Actual value:
Value requested for CONFIG_X86_PAE not in final .config
Requested value: # CONFIG_X86_PAE is not set
Actual value:
Value requested for CONFIG_ARCH_FLATMEM_ENABLE not in final .config
Requested value: CONFIG_ARCH_FLATMEM_ENABLE=y
Actual value:
Value requested for CONFIG_ARCH_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_ARCH_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_ILLEGAL_POINTER_VALUE not in final .config
Requested value: CONFIG_ILLEGAL_POINTER_VALUE=0
Actual value: CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
Value requested for CONFIG_HIGHPTE not in final .config
Requested value: # CONFIG_HIGHPTE is not set
Actual value:
Value requested for CONFIG_COMPAT_VDSO not in final .config
Requested value: # CONFIG_COMPAT_VDSO is not set
Actual value:
Value requested for CONFIG_FUNCTION_PADDING_CFI not in final .config
Requested value: CONFIG_FUNCTION_PADDING_CFI=0
Actual value: CONFIG_FUNCTION_PADDING_CFI=11
Value requested for CONFIG_FUNCTION_PADDING_BYTES not in final .config
Requested value: CONFIG_FUNCTION_PADDING_BYTES=4
Actual value: CONFIG_FUNCTION_PADDING_BYTES=16
Value requested for CONFIG_APM not in final .config
Requested value: # CONFIG_APM is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K6 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K6 is not set
Actual value:
Value requested for CONFIG_X86_POWERNOW_K7 not in final .config
Requested value: # CONFIG_X86_POWERNOW_K7 is not set
Actual value:
Value requested for CONFIG_X86_GX_SUSPMOD not in final .config
Requested value: # CONFIG_X86_GX_SUSPMOD is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_ICH not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_ICH is not set
Actual value:
Value requested for CONFIG_X86_SPEEDSTEP_SMI not in final .config
Requested value: # CONFIG_X86_SPEEDSTEP_SMI is not set
Actual value:
Value requested for CONFIG_X86_CPUFREQ_NFORCE2 not in final .config
Requested value: # CONFIG_X86_CPUFREQ_NFORCE2 is not set
Actual value:
Value requested for CONFIG_X86_LONGRUN not in final .config
Requested value: # CONFIG_X86_LONGRUN is not set
Actual value:
Value requested for CONFIG_X86_LONGHAUL not in final .config
Requested value: # CONFIG_X86_LONGHAUL is not set
Actual value:
Value requested for CONFIG_X86_E_POWERSAVER not in final .config
Requested value: # CONFIG_X86_E_POWERSAVER is not set
Actual value:
Value requested for CONFIG_PCI_GOBIOS not in final .config
Requested value: # CONFIG_PCI_GOBIOS is not set
Actual value:
Value requested for CONFIG_PCI_GOMMCONFIG not in final .config
Requested value: # CONFIG_PCI_GOMMCONFIG is not set
Actual value:
Value requested for CONFIG_PCI_GODIRECT not in final .config
Requested value: # CONFIG_PCI_GODIRECT is not set
Actual value:
Value requested for CONFIG_PCI_GOANY not in final .config
Requested value: CONFIG_PCI_GOANY=y
Actual value:
Value requested for CONFIG_PCI_BIOS not in final .config
Requested value: CONFIG_PCI_BIOS=y
Actual value:
Value requested for CONFIG_ISA not in final .config
Requested value: # CONFIG_ISA is not set
Actual value:
Value requested for CONFIG_SCx200 not in final .config
Requested value: # CONFIG_SCx200 is not set
Actual value:
Value requested for CONFIG_OLPC not in final .config
Requested value: # CONFIG_OLPC is not set
Actual value:
Value requested for CONFIG_ALIX not in final .config
Requested value: # CONFIG_ALIX is not set
Actual value:
Value requested for CONFIG_NET5501 not in final .config
Requested value: # CONFIG_NET5501 is not set
Actual value:
Value requested for CONFIG_GEOS not in final .config
Requested value: # CONFIG_GEOS is not set
Actual value:
Value requested for CONFIG_COMPAT_32 not in final .config
Requested value: CONFIG_COMPAT_32=y
Actual value:
Value requested for CONFIG_HAVE_ATOMIC_IOMAP not in final .config
Requested value: CONFIG_HAVE_ATOMIC_IOMAP=y
Actual value:
Value requested for CONFIG_ARCH_32BIT_OFF_T not in final .config
Requested value: CONFIG_ARCH_32BIT_OFF_T=y
Actual value:
Value requested for CONFIG_ARCH_WANT_IPC_PARSE_VERSION not in final .config
Requested value: CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
Actual value:
Value requested for CONFIG_MODULES_USE_ELF_REL not in final .config
Requested value: CONFIG_MODULES_USE_ELF_REL=y
Actual value:
Value requested for CONFIG_ARCH_MMAP_RND_BITS not in final .config
Requested value: CONFIG_ARCH_MMAP_RND_BITS=8
Actual value: CONFIG_ARCH_MMAP_RND_BITS=28
Value requested for CONFIG_CLONE_BACKWARDS not in final .config
Requested value: CONFIG_CLONE_BACKWARDS=y
Actual value:
Value requested for CONFIG_OLD_SIGSUSPEND3 not in final .config
Requested value: CONFIG_OLD_SIGSUSPEND3=y
Actual value:
Value requested for CONFIG_OLD_SIGACTION not in final .config
Requested value: CONFIG_OLD_SIGACTION=y
Actual value:
Value requested for CONFIG_ARCH_SPLIT_ARG64 not in final .config
Requested value: CONFIG_ARCH_SPLIT_ARG64=y
Actual value:
Value requested for CONFIG_FUNCTION_ALIGNMENT not in final .config
Requested value: CONFIG_FUNCTION_ALIGNMENT=4
Actual value: CONFIG_FUNCTION_ALIGNMENT=16
Value requested for CONFIG_SELECT_MEMORY_MODEL not in final .config
Requested value: CONFIG_SELECT_MEMORY_MODEL=y
Actual value:
Value requested for CONFIG_FLATMEM_MANUAL not in final .config
Requested value: CONFIG_FLATMEM_MANUAL=y
Actual value:
Value requested for CONFIG_SPARSEMEM_MANUAL not in final .config
Requested value: # CONFIG_SPARSEMEM_MANUAL is not set
Actual value:
Value requested for CONFIG_FLATMEM not in final .config
Requested value: CONFIG_FLATMEM=y
Actual value:
Value requested for CONFIG_SPARSEMEM_STATIC not in final .config
Requested value: CONFIG_SPARSEMEM_STATIC=y
Actual value:
Value requested for CONFIG_BOUNCE not in final .config
Requested value: CONFIG_BOUNCE=y
Actual value:
Value requested for CONFIG_KMAP_LOCAL not in final .config
Requested value: CONFIG_KMAP_LOCAL=y
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_COMPAQ not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_COMPAQ is not set
Actual value:
Value requested for CONFIG_HOTPLUG_PCI_IBM not in final .config
Requested value: # CONFIG_HOTPLUG_PCI_IBM is not set
Actual value:
Value requested for CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH not in final .config
Requested value: CONFIG_EFI_CAPSULE_QUIRK_QUARK_CSH=y
Actual value:
Value requested for CONFIG_PCH_PHUB not in final .config
Requested value: # CONFIG_PCH_PHUB is not set
Actual value:
Value requested for CONFIG_SCSI_NSP32 not in final .config
Requested value: # CONFIG_SCSI_NSP32 is not set
Actual value:
Value requested for CONFIG_PATA_CS5520 not in final .config
Requested value: # CONFIG_PATA_CS5520 is not set
Actual value:
Value requested for CONFIG_PATA_CS5530 not in final .config
Requested value: # CONFIG_PATA_CS5530 is not set
Actual value:
Value requested for CONFIG_PATA_CS5535 not in final .config
Requested value: # CONFIG_PATA_CS5535 is not set
Actual value:
Value requested for CONFIG_PATA_CS5536 not in final .config
Requested value: # CONFIG_PATA_CS5536 is not set
Actual value:
Value requested for CONFIG_PATA_SC1200 not in final .config
Requested value: # CONFIG_PATA_SC1200 is not set
Actual value:
Value requested for CONFIG_PCH_GBE not in final .config
Requested value: # CONFIG_PCH_GBE is not set
Actual value:
Value requested for CONFIG_INPUT_WISTRON_BTNS not in final .config
Requested value: # CONFIG_INPUT_WISTRON_BTNS is not set
Actual value:
Value requested for CONFIG_SERIAL_TIMBERDALE not in final .config
Requested value: # CONFIG_SERIAL_TIMBERDALE is not set
Actual value:
Value requested for CONFIG_SERIAL_PCH_UART not in final .config
Requested value: # CONFIG_SERIAL_PCH_UART is not set
Actual value:
Value requested for CONFIG_HW_RANDOM_GEODE not in final .config
Requested value: CONFIG_HW_RANDOM_GEODE=y
Actual value:
Value requested for CONFIG_SONYPI not in final .config
Requested value: # CONFIG_SONYPI is not set
Actual value:
Value requested for CONFIG_PC8736x_GPIO not in final .config
Requested value: # CONFIG_PC8736x_GPIO is not set
Actual value:
Value requested for CONFIG_NSC_GPIO not in final .config
Requested value: # CONFIG_NSC_GPIO is not set
Actual value:
Value requested for CONFIG_I2C_EG20T not in final .config
Requested value: # CONFIG_I2C_EG20T is not set
Actual value:
Value requested for CONFIG_SCx200_ACB not in final .config
Requested value: # CONFIG_SCx200_ACB is not set
Actual value:
Value requested for CONFIG_PTP_1588_CLOCK_PCH not in final .config
Requested value: # CONFIG_PTP_1588_CLOCK_PCH is not set
Actual value:
Value requested for CONFIG_SBC8360_WDT not in final .config
Requested value: # CONFIG_SBC8360_WDT is not set
Actual value:
Value requested for CONFIG_SBC7240_WDT not in final .config
Requested value: # CONFIG_SBC7240_WDT is not set
Actual value:
Value requested for CONFIG_MFD_CS5535 not in final .config
Requested value: # CONFIG_MFD_CS5535 is not set
Actual value:
Value requested for CONFIG_AGP_ALI not in final .config
Requested value: # CONFIG_AGP_ALI is not set
Actual value:
Value requested for CONFIG_AGP_ATI not in final .config
Requested value: # CONFIG_AGP_ATI is not set
Actual value:
Value requested for CONFIG_AGP_AMD not in final .config
Requested value: # CONFIG_AGP_AMD is not set
Actual value:
Value requested for CONFIG_AGP_NVIDIA not in final .config
Requested value: # CONFIG_AGP_NVIDIA is not set
Actual value:
Value requested for CONFIG_AGP_SWORKS not in final .config
Requested value: # CONFIG_AGP_SWORKS is not set
Actual value:
Value requested for CONFIG_AGP_EFFICEON not in final .config
Requested value: # CONFIG_AGP_EFFICEON is not set
Actual value:
Value requested for CONFIG_SND_PCM not in final .config
Requested value: CONFIG_SND_PCM=y
Actual value: CONFIG_SND_PCM=m
Value requested for CONFIG_SND_HWDEP not in final .config
Requested value: CONFIG_SND_HWDEP=y
Actual value: CONFIG_SND_HWDEP=m
Value requested for CONFIG_SND_DYNAMIC_MINORS not in final .config
Requested value: # CONFIG_SND_DYNAMIC_MINORS is not set
Actual value: CONFIG_SND_DYNAMIC_MINORS=y
Value requested for CONFIG_SND_CS5530 not in final .config
Requested value: # CONFIG_SND_CS5530 is not set
Actual value:
Value requested for CONFIG_SND_CS5535AUDIO not in final .config
Requested value: # CONFIG_SND_CS5535AUDIO is not set
Actual value:
Value requested for CONFIG_SND_SIS7019 not in final .config
Requested value: # CONFIG_SND_SIS7019 is not set
Actual value:
Value requested for CONFIG_SND_HDA not in final .config
Requested value: CONFIG_SND_HDA=y
Actual value: CONFIG_SND_HDA=m
Value requested for CONFIG_SND_HDA_CORE not in final .config
Requested value: CONFIG_SND_HDA_CORE=y
Actual value: CONFIG_SND_HDA_CORE=m
Value requested for CONFIG_SND_INTEL_DSP_CONFIG not in final .config
Requested value: CONFIG_SND_INTEL_DSP_CONFIG=y
Actual value: CONFIG_SND_INTEL_DSP_CONFIG=m
Value requested for CONFIG_SND_INTEL_SOUNDWIRE_ACPI not in final .config
Requested value: CONFIG_SND_INTEL_SOUNDWIRE_ACPI=y
Actual value: CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
Value requested for CONFIG_LEDS_OT200 not in final .config
Requested value: # CONFIG_LEDS_OT200 is not set
Actual value:
Value requested for CONFIG_PCH_DMA not in final .config
Requested value: # CONFIG_PCH_DMA is not set
Actual value:
Value requested for CONFIG_CLKSRC_I8253 not in final .config
Requested value: CONFIG_CLKSRC_I8253=y
Actual value:
Value requested for CONFIG_MAILBOX not in final .config
Requested value: # CONFIG_MAILBOX is not set
Actual value: CONFIG_MAILBOX=y
Value requested for CONFIG_CRYPTO_SERPENT_SSE2_586 not in final .config
Requested value: # CONFIG_CRYPTO_SERPENT_SSE2_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_TWOFISH_586 not in final .config
Requested value: # CONFIG_CRYPTO_TWOFISH_586 is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_GEODE not in final .config
Requested value: # CONFIG_CRYPTO_DEV_GEODE is not set
Actual value:
Value requested for CONFIG_CRYPTO_DEV_HIFN_795X not in final .config
Requested value: # CONFIG_CRYPTO_DEV_HIFN_795X is not set
Actual value:
Value requested for CONFIG_CRYPTO_LIB_POLY1305_RSIZE not in final .config
Requested value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1
Actual value: CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
Value requested for CONFIG_AUDIT_GENERIC not in final .config
Requested value: CONFIG_AUDIT_GENERIC=y
Actual value:
Value requested for CONFIG_GENERIC_VDSO_32 not in final .config
Requested value: CONFIG_GENERIC_VDSO_32=y
Actual value:
Value requested for CONFIG_DEBUG_KMAP_LOCAL not in final .config
Requested value: # CONFIG_DEBUG_KMAP_LOCAL is not set
Actual value:
Value requested for CONFIG_DEBUG_HIGHMEM not in final .config
Requested value: # CONFIG_DEBUG_HIGHMEM is not set
Actual value:
Value requested for CONFIG_HAVE_DEBUG_STACKOVERFLOW not in final .config
Requested value: CONFIG_HAVE_DEBUG_STACKOVERFLOW=y
Actual value:
Value requested for CONFIG_DEBUG_STACKOVERFLOW not in final .config
Requested value: # CONFIG_DEBUG_STACKOVERFLOW is not set
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_TRACER not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
Actual value:
Value requested for CONFIG_HAVE_FUNCTION_GRAPH_RETVAL not in final .config
Requested value: CONFIG_HAVE_FUNCTION_GRAPH_RETVAL=y
Actual value:
Value requested for CONFIG_DRM_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_KUNIT_TEST=m
Actual value:
Value requested for CONFIG_DRM_XE_WERROR not in final .config
Requested value: CONFIG_DRM_XE_WERROR=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG not in final .config
Requested value: CONFIG_DRM_XE_DEBUG=y
Actual value:
Value requested for CONFIG_DRM_XE_DEBUG_MEM not in final .config
Requested value: CONFIG_DRM_XE_DEBUG_MEM=y
Actual value:
Value requested for CONFIG_DRM_XE_KUNIT_TEST not in final .config
Requested value: CONFIG_DRM_XE_KUNIT_TEST=m
Actual value:
++ nproc
+ make -j48 ARCH=i386 olddefconfig
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
#
# configuration written to .config
#
++ nproc
+ make -j48 ARCH=i386
SYNC include/config/auto.conf.cmd
GEN Makefile
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
WARNING: unmet direct dependencies detected for FB_IOMEM_HELPERS
Depends on [n]: HAS_IOMEM [=y] && FB_CORE [=n]
Selected by [m]:
- DRM_XE_DISPLAY [=y] && HAS_IOMEM [=y] && DRM [=y] && DRM_XE [=m] && DRM_XE [=m]=m [=m]
GEN Makefile
WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h
WRAP arch/x86/include/generated/uapi/asm/errno.h
WRAP arch/x86/include/generated/uapi/asm/fcntl.h
WRAP arch/x86/include/generated/uapi/asm/ioctl.h
UPD include/generated/uapi/linux/version.h
WRAP arch/x86/include/generated/uapi/asm/ioctls.h
WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h
WRAP arch/x86/include/generated/uapi/asm/param.h
WRAP arch/x86/include/generated/uapi/asm/poll.h
WRAP arch/x86/include/generated/uapi/asm/resource.h
WRAP arch/x86/include/generated/uapi/asm/socket.h
WRAP arch/x86/include/generated/uapi/asm/sockios.h
WRAP arch/x86/include/generated/uapi/asm/termbits.h
WRAP arch/x86/include/generated/uapi/asm/termios.h
WRAP arch/x86/include/generated/uapi/asm/types.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h
SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h
SYSTBL arch/x86/include/generated/asm/syscalls_32.h
UPD include/generated/compile.h
HOSTCC arch/x86/tools/relocs_32.o
WRAP arch/x86/include/generated/asm/early_ioremap.h
HOSTCC arch/x86/tools/relocs_common.o
WRAP arch/x86/include/generated/asm/mcs_spinlock.h
HOSTCC arch/x86/tools/relocs_64.o
WRAP arch/x86/include/generated/asm/kmap_size.h
WRAP arch/x86/include/generated/asm/irq_regs.h
WRAP arch/x86/include/generated/asm/local64.h
WRAP arch/x86/include/generated/asm/mmiowb.h
WRAP arch/x86/include/generated/asm/module.lds.h
WRAP arch/x86/include/generated/asm/rwonce.h
WRAP arch/x86/include/generated/asm/unaligned.h
HOSTCC scripts/kallsyms
HOSTCC scripts/sorttable
HOSTCC scripts/asn1_compiler
HOSTCC scripts/selinux/mdp/mdp
HOSTCC scripts/selinux/genheaders/genheaders
HOSTLD arch/x86/tools/relocs
UPD include/config/kernel.release
UPD include/generated/utsrelease.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/devicetable-offsets.s
UPD scripts/mod/devicetable-offsets.h
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTCC scripts/mod/symsearch.o
HOSTLD scripts/mod/modpost
CC kernel/bounds.s
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-arch-fallback.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-instrumented.h
CHKSHA1 /workspace/kernel/include/linux/atomic/atomic-long.h
UPD include/generated/timeconst.h
UPD include/generated/bounds.h
CC arch/x86/kernel/asm-offsets.s
UPD include/generated/asm-offsets.h
CALL /workspace/kernel/scripts/checksyscalls.sh
LDS scripts/module.lds
CC ipc/util.o
CC ipc/msgutil.o
HOSTCC usr/gen_init_cpio
CC ipc/msg.o
CC ipc/sem.o
CC ipc/shm.o
CC init/main.o
CC ipc/syscall.o
CC ipc/ipc_sysctl.o
CC certs/system_keyring.o
CC ipc/mqueue.o
CC io_uring/io_uring.o
AS arch/x86/lib/atomic64_cx8_32.o
AS arch/x86/lib/checksum_32.o
CC block/bdev.o
CC init/do_mounts.o
CC ipc/namespace.o
UPD init/utsversion-tmp.h
CC mm/filemap.o
CC arch/x86/power/cpu.o
CC arch/x86/pci/i386.o
CC arch/x86/video/video-common.o
AR net/802/built-in.a
CC net/ethernet/eth.o
CC lib/math/div64.o
CC security/keys/gc.o
GEN security/selinux/flask.h security/selinux/av_permissions.h
CC arch/x86/realmode/init.o
AR virt/lib/built-in.a
CC block/partitions/core.o
AR drivers/cache/built-in.a
CC net/sched/sch_generic.o
CC net/core/sock.o
AR sound/drivers/opl3/built-in.a
AR arch/x86/crypto/built-in.a
CC net/core/request_sock.o
AR sound/isa/ad1816a/built-in.a
CC sound/core/seq/seq.o
CC arch/x86/mm/pat/set_memory.o
CC security/selinux/avc.o
AR arch/x86/entry/vsyscall/built-in.a
AR arch/x86/platform/atom/built-in.a
CC arch/x86/events/amd/core.o
CC lib/crypto/mpi/generic_mpih-lshift.o
AR sound/pci/ac97/built-in.a
CC fs/notify/dnotify/dnotify.o
AR sound/i2c/other/built-in.a
CC arch/x86/kernel/fpu/init.o
AR virt/built-in.a
AR sound/isa/ad1848/built-in.a
AR sound/drivers/opl4/built-in.a
AR drivers/irqchip/built-in.a
AR sound/i2c/built-in.a
AR arch/x86/platform/ce4100/built-in.a
AR sound/pci/ali5451/built-in.a
CC arch/x86/lib/cmdline.o
CC security/integrity/iint.o
CC arch/x86/entry/vdso/vma.o
AR sound/pci/asihpi/built-in.a
AR sound/drivers/mpu401/built-in.a
CC arch/x86/entry/vdso/extable.o
CC arch/x86/kernel/cpu/mce/core.o
CC arch/x86/kernel/fpu/bugs.o
CC arch/x86/platform/efi/memmap.o
AR sound/isa/cs423x/built-in.a
AR sound/drivers/vx/built-in.a
AR drivers/pwm/built-in.a
CC kernel/sched/core.o
AR sound/pci/au88x0/built-in.a
CC arch/x86/platform/efi/quirks.o
AR drivers/bus/mhi/built-in.a
AR sound/isa/es1688/built-in.a
AR sound/drivers/pcsp/built-in.a
AR drivers/bus/built-in.a
AR sound/pci/aw2/built-in.a
CC crypto/asymmetric_keys/asymmetric_type.o
AR sound/drivers/built-in.a
AR sound/isa/galaxy/built-in.a
AR sound/pci/ctxfi/built-in.a
AR sound/isa/gus/built-in.a
CC drivers/pci/msi/pcidev_msi.o
CC arch/x86/platform/efi/efi.o
AR sound/pci/ca0106/built-in.a
CC lib/math/gcd.o
AR sound/isa/msnd/built-in.a
AS arch/x86/lib/cmpxchg8b_emu.o
AR sound/pci/cs46xx/built-in.a
AR sound/isa/opti9xx/built-in.a
AR sound/pci/cs5535audio/built-in.a
CC lib/crypto/mpi/generic_mpih-mul1.o
CC arch/x86/lib/cpu.o
AR sound/isa/sb/built-in.a
AR sound/pci/lola/built-in.a
AR sound/isa/wavefront/built-in.a
CC lib/math/lcm.o
AR sound/pci/lx6464es/built-in.a
AR sound/isa/wss/built-in.a
AR sound/pci/echoaudio/built-in.a
AR sound/isa/built-in.a
AR sound/pci/emu10k1/built-in.a
AR sound/pci/hda/built-in.a
AR sound/pci/ice1712/built-in.a
CC lib/math/int_log.o
CC [M] sound/pci/hda/hda_bind.o
CC security/keys/key.o
GEN usr/initramfs_data.cpio
COPY usr/initramfs_inc_data
AS usr/initramfs_data.o
AR usr/built-in.a
HOSTCC certs/extract-cert
CC lib/math/int_pow.o
CC drivers/video/console/dummycon.o
CC arch/x86/kernel/fpu/core.o
CC lib/math/int_sqrt.o
CC drivers/video/console/vgacon.o
CC lib/math/reciprocal_div.o
CC arch/x86/lib/delay.o
AS arch/x86/lib/getuser.o
AS arch/x86/realmode/rm/header.o
CC lib/math/rational.o
AS arch/x86/realmode/rm/trampoline_32.o
AS arch/x86/realmode/rm/stack.o
CC sound/core/seq/seq_lock.o
GEN arch/x86/lib/inat-tables.c
CERT certs/x509_certificate_list
CERT certs/signing_key.x509
CC arch/x86/power/hibernate_32.o
AS certs/system_certificates.o
AR arch/x86/video/built-in.a
AS arch/x86/realmode/rm/reboot.o
AR sound/pci/korg1212/built-in.a
AR certs/built-in.a
CC fs/nfs_common/nfsacl.o
CC fs/iomap/trace.o
CC sound/core/seq/seq_clientmgr.o
AS arch/x86/realmode/rm/wakeup_asm.o
CC arch/x86/pci/init.o
CC arch/x86/pci/pcbios.o
CC security/integrity/integrity_audit.o
CC arch/x86/realmode/rm/wakemain.o
CC fs/iomap/iter.o
CC drivers/pci/msi/api.o
CC fs/iomap/buffered-io.o
AR fs/notify/dnotify/built-in.a
CC crypto/asymmetric_keys/restrict.o
CC lib/crypto/mpi/generic_mpih-mul2.o
CC fs/notify/inotify/inotify_fsnotify.o
CC crypto/asymmetric_keys/signature.o
CC arch/x86/realmode/rm/video-mode.o
LDS arch/x86/entry/vdso/vdso32/vdso32.lds
AR sound/pci/mixart/built-in.a
AR fs/notify/fanotify/built-in.a
AS arch/x86/entry/vdso/vdso32/note.o
CC crypto/api.o
AR drivers/idle/built-in.a
CC arch/x86/lib/insn-eval.o
AS arch/x86/entry/vdso/vdso32/system_call.o
AR drivers/char/ipmi/built-in.a
CC block/partitions/msdos.o
AS arch/x86/entry/vdso/vdso32/sigreturn.o
CC drivers/acpi/acpica/dsargs.o
AS arch/x86/realmode/rm/copy.o
CC arch/x86/entry/vdso/vdso32/vclock_gettime.o
AS arch/x86/realmode/rm/bioscall.o
CC drivers/acpi/acpica/dscontrol.o
AR lib/math/built-in.a
CC block/partitions/efi.o
CC net/core/skbuff.o
CC arch/x86/realmode/rm/regs.o
CC [M] sound/pci/hda/hda_codec.o
CC lib/zlib_inflate/inffast.o
CC arch/x86/platform/efi/efi_32.o
AR sound/ppc/built-in.a
CC arch/x86/realmode/rm/video-vga.o
CC lib/zlib_deflate/deflate.o
AR sound/arm/built-in.a
AR sound/sh/built-in.a
CC sound/core/sound.o
CC kernel/sched/fair.o
AR sound/synth/emux/built-in.a
AR sound/synth/built-in.a
CC block/fops.o
CC arch/x86/realmode/rm/video-vesa.o
CC lib/zlib_inflate/inflate.o
CC arch/x86/events/amd/lbr.o
CC lib/zlib_inflate/infutil.o
CC [M] sound/pci/hda/hda_jack.o
CC arch/x86/realmode/rm/video-bios.o
CC security/keys/keyring.o
CC crypto/asymmetric_keys/public_key.o
AR net/ethernet/built-in.a
CC arch/x86/mm/pat/memtype.o
CC arch/x86/mm/pat/memtype_interval.o
CC fs/notify/inotify/inotify_user.o
AR drivers/acpi/pmic/built-in.a
AS arch/x86/power/hibernate_asm_32.o
CC arch/x86/pci/mmconfig_32.o
CC fs/notify/fsnotify.o
CC arch/x86/kernel/acpi/boot.o
CC drivers/acpi/acpica/dsdebug.o
PASYMS arch/x86/realmode/rm/pasyms.h
CC lib/crypto/mpi/generic_mpih-mul3.o
CC arch/x86/power/hibernate.o
LDS arch/x86/realmode/rm/realmode.lds
CC drivers/pci/msi/msi.o
CC fs/nfs_common/grace.o
CC arch/x86/kernel/acpi/sleep.o
LD arch/x86/realmode/rm/realmode.elf
RELOCS arch/x86/realmode/rm/realmode.relocs
CC init/do_mounts_initrd.o
OBJCOPY arch/x86/realmode/rm/realmode.bin
AS arch/x86/kernel/acpi/wakeup_32.o
AS arch/x86/realmode/rmpiggy.o
AR arch/x86/realmode/built-in.a
CC net/netlink/af_netlink.o
AR security/integrity/built-in.a
CC arch/x86/lib/insn.o
CC security/commoncap.o
AR drivers/video/console/built-in.a
CC io_uring/opdef.o
CC drivers/video/backlight/backlight.o
CC fs/iomap/direct-io.o
CC arch/x86/entry/vdso/vdso32/vgetcpu.o
CC security/selinux/hooks.o
CC ipc/mq_sysctl.o
CC arch/x86/kernel/fpu/regset.o
HOSTCC arch/x86/entry/vdso/vdso2c
CC arch/x86/lib/kaslr.o
CC security/lsm_syscalls.o
CC drivers/acpi/acpica/dsfield.o
AR drivers/video/fbdev/core/built-in.a
CC drivers/acpi/acpica/dsinit.o
AR drivers/video/fbdev/omap/built-in.a
AR drivers/video/fbdev/omap2/omapfb/dss/built-in.a
CC arch/x86/kernel/cpu/mce/severity.o
CC arch/x86/mm/init.o
AS arch/x86/platform/efi/efi_stub_32.o
AR drivers/video/fbdev/omap2/omapfb/displays/built-in.a
AR drivers/video/fbdev/omap2/omapfb/built-in.a
CC lib/zlib_inflate/inftrees.o
CC arch/x86/platform/efi/runtime-map.o
AR block/partitions/built-in.a
AR drivers/video/fbdev/omap2/built-in.a
CC arch/x86/lib/memcpy_32.o
AR drivers/video/fbdev/built-in.a
CC security/selinux/selinuxfs.o
CC lib/zlib_deflate/deftree.o
CC fs/notify/notification.o
CC kernel/sched/build_policy.o
CC net/sched/sch_mq.o
AS arch/x86/lib/memmove_32.o
CC lib/crypto/mpi/generic_mpih-rshift.o
CC fs/notify/group.o
CC arch/x86/lib/misc.o
ASN.1 crypto/asymmetric_keys/x509.asn1.[ch]
CC lib/zlib_inflate/inflate_syms.o
ASN.1 crypto/asymmetric_keys/x509_akid.asn1.[ch]
CC crypto/asymmetric_keys/x509_loader.o
CC sound/core/seq/seq_memory.o
CC arch/x86/lib/pc-conf-reg.o
AR ipc/built-in.a
CC arch/x86/pci/direct.o
CC crypto/asymmetric_keys/x509_public_key.o
CC arch/x86/events/amd/ibs.o
CC arch/x86/entry/vdso/vdso32-setup.o
AR fs/nfs_common/built-in.a
CC init/initramfs.o
AR arch/x86/power/built-in.a
CC net/core/datagram.o
CC sound/core/seq/seq_queue.o
AR net/bpf/built-in.a
CC block/bio.o
CC net/sched/sch_frag.o
CC arch/x86/kernel/cpu/mtrr/mtrr.o
CC drivers/acpi/acpica/dsmethod.o
AR arch/x86/mm/pat/built-in.a
CC net/sched/sch_api.o
AS arch/x86/lib/putuser.o
AR arch/x86/net/built-in.a
CC net/core/stream.o
CC lib/crypto/memneq.o
AS arch/x86/lib/retpoline.o
AR fs/notify/inotify/built-in.a
CC arch/x86/mm/init_32.o
CC arch/x86/lib/string_32.o
CC net/sched/sch_blackhole.o
CC drivers/pci/msi/irqdomain.o
CC drivers/acpi/acpica/dsmthdat.o
CC arch/x86/lib/strstr_32.o
AR drivers/video/backlight/built-in.a
AR lib/zlib_inflate/built-in.a
CC drivers/video/aperture.o
VDSO arch/x86/entry/vdso/vdso32.so.dbg
CC drivers/acpi/acpica/dsobject.o
CC arch/x86/lib/usercopy.o
CC lib/zlib_deflate/deflate_syms.o
OBJCOPY arch/x86/entry/vdso/vdso32.so
VDSO2C arch/x86/entry/vdso/vdso-image-32.c
CC arch/x86/entry/vdso/vdso-image-32.o
CC arch/x86/kernel/acpi/cstate.o
CC crypto/cipher.o
CC security/keys/keyctl.o
CC arch/x86/kernel/fpu/signal.o
CC lib/crypto/mpi/generic_mpih-sub1.o
CC crypto/compress.o
CC arch/x86/kernel/cpu/mtrr/if.o
AR arch/x86/platform/efi/built-in.a
CC fs/iomap/fiemap.o
AR arch/x86/platform/geode/built-in.a
ASN.1 crypto/asymmetric_keys/pkcs7.asn1.[ch]
CC arch/x86/kernel/cpu/mce/genpool.o
CC crypto/asymmetric_keys/pkcs7_trust.o
AR arch/x86/platform/iris/built-in.a
CC arch/x86/platform/intel/iosf_mbi.o
CC arch/x86/pci/mmconfig-shared.o
CC fs/iomap/seek.o
CC arch/x86/kernel/cpu/mtrr/generic.o
CC arch/x86/lib/usercopy_32.o
CC arch/x86/lib/msr-smp.o
AR arch/x86/entry/vdso/built-in.a
CC arch/x86/kernel/cpu/mtrr/cleanup.o
AS arch/x86/entry/entry.o
CC net/core/scm.o
AS arch/x86/entry/entry_32.o
AR lib/zlib_deflate/built-in.a
CC fs/notify/mark.o
CC drivers/acpi/acpica/dsopcode.o
AR arch/x86/virt/svm/built-in.a
CC arch/x86/entry/syscall_32.o
AR arch/x86/virt/vmx/built-in.a
AR arch/x86/virt/built-in.a
CC io_uring/kbuf.o
CC arch/x86/pci/fixup.o
CC sound/core/seq/seq_fifo.o
CC arch/x86/kernel/cpu/mtrr/amd.o
CC fs/notify/fdinfo.o
CC mm/mempool.o
CC arch/x86/lib/cache-smp.o
AR arch/x86/platform/intel-mid/built-in.a
AR arch/x86/kernel/acpi/built-in.a
CC crypto/asymmetric_keys/pkcs7_verify.o
CC net/sched/cls_api.o
CC lib/lzo/lzo1x_compress.o
CC net/sched/act_api.o
CC init/calibrate.o
CC drivers/acpi/acpica/dspkginit.o
AR drivers/pci/msi/built-in.a
CC drivers/pci/pcie/portdrv.o
CC lib/crypto/mpi/generic_mpih-add1.o
AR sound/pci/nm256/built-in.a
CC [M] sound/pci/hda/hda_auto_parser.o
CC [M] sound/pci/hda/hda_sysfs.o
CC arch/x86/lib/msr.o
CC drivers/video/cmdline.o
CC arch/x86/mm/fault.o
AS arch/x86/lib/msr-reg.o
CC arch/x86/events/amd/uncore.o
CC arch/x86/lib/msr-reg-export.o
AR drivers/pci/pwrctl/built-in.a
CC drivers/acpi/acpica/dsutils.o
CC arch/x86/kernel/cpu/mce/intel.o
CC arch/x86/events/intel/core.o
CC drivers/pci/hotplug/pci_hotplug_core.o
CC block/elevator.o
CC arch/x86/events/zhaoxin/core.o
CC fs/iomap/swapfile.o
AR arch/x86/platform/intel/built-in.a
CC init/init_task.o
AR arch/x86/platform/intel-quark/built-in.a
AR arch/x86/platform/olpc/built-in.a
CC arch/x86/kernel/fpu/xstate.o
AR arch/x86/platform/scx200/built-in.a
CC block/blk-core.o
AR arch/x86/platform/ts5500/built-in.a
CC arch/x86/events/intel/bts.o
AR arch/x86/platform/uv/built-in.a
AR arch/x86/platform/built-in.a
CC crypto/asymmetric_keys/x509.asn1.o
CC arch/x86/events/intel/ds.o
CC sound/core/seq/seq_prioq.o
CC security/selinux/netlink.o
CC arch/x86/kernel/apic/apic.o
CC crypto/asymmetric_keys/x509_akid.asn1.o
CC arch/x86/kernel/apic/apic_common.o
CC lib/lzo/lzo1x_decompress_safe.o
CC crypto/asymmetric_keys/x509_cert_parser.o
CC drivers/pci/hotplug/acpi_pcihp.o
CC crypto/asymmetric_keys/pkcs7.asn1.o
CC crypto/asymmetric_keys/pkcs7_parser.o
CC security/keys/permission.o
CC arch/x86/kernel/cpu/mtrr/cyrix.o
CC arch/x86/kernel/cpu/mtrr/centaur.o
CC mm/oom_kill.o
CC lib/crypto/mpi/ec.o
AR fs/notify/built-in.a
CC drivers/acpi/acpica/dswexec.o
CC arch/x86/events/intel/knc.o
CC block/blk-sysfs.o
CC arch/x86/pci/acpi.o
CC security/keys/process_keys.o
CC [M] sound/pci/hda/hda_controller.o
CC arch/x86/kernel/cpu/mce/amd.o
CC net/netlink/genetlink.o
CC drivers/video/nomodeset.o
CC crypto/algapi.o
CC arch/x86/entry/common.o
CC drivers/pci/pcie/rcec.o
AR lib/lzo/built-in.a
CC arch/x86/kernel/apic/apic_noop.o
CC lib/lz4/lz4_decompress.o
AS arch/x86/lib/hweight.o
CC init/version.o
CC arch/x86/lib/iomem.o
AR fs/iomap/built-in.a
CC io_uring/rsrc.o
CC fs/quota/dquot.o
CC sound/core/seq/seq_timer.o
CC io_uring/notif.o
CC drivers/acpi/acpica/dswload.o
AS arch/x86/entry/thunk.o
AR crypto/asymmetric_keys/built-in.a
CC security/min_addr.o
CC crypto/scatterwalk.o
CC crypto/proc.o
AR arch/x86/events/zhaoxin/built-in.a
CC drivers/acpi/acpica/dswload2.o
CC [M] sound/pci/hda/hda_proc.o
CC arch/x86/kernel/cpu/mtrr/legacy.o
AR arch/x86/events/amd/built-in.a
CC sound/core/seq/seq_system.o
CC sound/core/seq/seq_ports.o
AR init/built-in.a
CC arch/x86/events/core.o
AR drivers/pci/hotplug/built-in.a
CC drivers/video/hdmi.o
CC fs/quota/quota_v2.o
CC drivers/pci/pcie/aspm.o
CC arch/x86/events/probe.o
CC arch/x86/mm/ioremap.o
CC lib/crypto/utils.o
CC crypto/aead.o
CC arch/x86/lib/atomic64_32.o
CC fs/proc/task_mmu.o
CC arch/x86/pci/legacy.o
CC fs/kernfs/mount.o
CC block/blk-flush.o
CC arch/x86/lib/inat.o
AR arch/x86/kernel/fpu/built-in.a
CC fs/sysfs/file.o
CC fs/devpts/inode.o
AR arch/x86/kernel/cpu/mtrr/built-in.a
AR arch/x86/lib/built-in.a
CC arch/x86/events/intel/lbr.o
CC drivers/acpi/acpica/dswscope.o
CC lib/crypto/mpi/mpicoder.o
AR arch/x86/lib/lib.a
CC fs/sysfs/dir.o
CC arch/x86/kernel/kprobes/core.o
CC fs/sysfs/symlink.o
CC arch/x86/events/intel/p4.o
AR arch/x86/entry/built-in.a
CC kernel/sched/build_utility.o
LDS arch/x86/kernel/vmlinux.lds
CC drivers/pci/pcie/pme.o
CC arch/x86/events/intel/p6.o
CC security/selinux/nlmsgtab.o
CC fs/sysfs/mount.o
CC security/keys/request_key.o
CC security/selinux/netif.o
CC arch/x86/events/utils.o
CC net/sched/sch_fifo.o
CC drivers/acpi/acpica/dswstate.o
CC fs/proc/inode.o
CC sound/core/seq/seq_info.o
CC drivers/pnp/pnpacpi/core.o
AR drivers/video/built-in.a
CC drivers/pnp/core.o
CC arch/x86/pci/irq.o
AR lib/lz4/built-in.a
CC arch/x86/mm/extable.o
CC arch/x86/mm/mmap.o
CC arch/x86/pci/common.o
CC lib/zstd/zstd_decompress_module.o
CC net/ethtool/ioctl.o
AR drivers/pci/controller/dwc/built-in.a
CC arch/x86/kernel/apic/ipi.o
CC mm/fadvise.o
CC [M] sound/pci/hda/hda_hwdep.o
AR drivers/pci/controller/mobiveil/built-in.a
CC net/ethtool/common.o
AR drivers/pci/controller/plda/built-in.a
AR drivers/pci/controller/built-in.a
CC block/blk-settings.o
AR fs/devpts/built-in.a
CC crypto/geniv.o
CC arch/x86/kernel/apic/vector.o
CC mm/maccess.o
CC sound/core/seq/seq_dummy.o
CC fs/kernfs/inode.o
CC io_uring/tctx.o
CC net/ethtool/netlink.o
CC net/core/gen_stats.o
CC drivers/acpi/acpica/evevent.o
CC lib/xz/xz_dec_syms.o
CC net/netlink/policy.o
CC lib/xz/xz_dec_stream.o
CC lib/crypto/mpi/mpi-add.o
CC arch/x86/kernel/cpu/mce/threshold.o
CC drivers/acpi/acpica/evgpe.o
AR drivers/pci/pcie/built-in.a
CC net/netfilter/core.o
AR drivers/pci/switch/built-in.a
CC drivers/pci/access.o
CC lib/zstd/decompress/huf_decompress.o
CC drivers/pci/bus.o
CC fs/sysfs/group.o
CC drivers/pnp/pnpacpi/rsparser.o
AR drivers/amba/built-in.a
CC net/xfrm/xfrm_policy.o
CC net/ipv4/netfilter/nf_defrag_ipv4.o
CC arch/x86/kernel/kprobes/opt.o
CC net/ipv4/netfilter/nf_reject_ipv4.o
CC security/keys/request_key_auth.o
CC security/keys/user_defined.o
CC arch/x86/kernel/cpu/microcode/core.o
CC arch/x86/kernel/cpu/cacheinfo.o
CC arch/x86/kernel/cpu/microcode/intel.o
CC io_uring/filetable.o
CC arch/x86/mm/pgtable.o
CC arch/x86/kernel/cpu/microcode/amd.o
CC net/sched/cls_cgroup.o
CC net/ipv4/netfilter/ip_tables.o
CC [M] sound/pci/hda/patch_hdmi.o
AR sound/core/seq/built-in.a
CC sound/core/init.o
CC drivers/acpi/acpica/evgpeblk.o
CC security/selinux/netnode.o
CC kernel/locking/mutex.o
CC arch/x86/pci/early.o
CC lib/xz/xz_dec_lzma2.o
CC fs/proc/root.o
CC mm/page-writeback.o
CC fs/quota/quota_tree.o
CC lib/crypto/mpi/mpi-bit.o
CC lib/zstd/decompress/zstd_ddict.o
CC fs/kernfs/dir.o
CC fs/quota/quota.o
CC crypto/lskcipher.o
CC block/blk-ioc.o
CC fs/quota/kqid.o
CC arch/x86/mm/physaddr.o
AR fs/sysfs/built-in.a
CC io_uring/rw.o
CC sound/core/memory.o
CC arch/x86/kernel/cpu/scattered.o
CC arch/x86/kernel/cpu/topology_common.o
AR net/netlink/built-in.a
CC drivers/pci/probe.o
CC security/keys/proc.o
CC net/ethtool/bitset.o
CC lib/crypto/mpi/mpi-cmp.o
AR drivers/clk/actions/built-in.a
CC arch/x86/events/intel/pt.o
CC drivers/acpi/acpica/evgpeinit.o
CC net/core/gen_estimator.o
AR drivers/clk/analogbits/built-in.a
CC drivers/pci/host-bridge.o
AR drivers/clk/bcm/built-in.a
AR drivers/pnp/pnpacpi/built-in.a
AR drivers/clk/imgtec/built-in.a
CC drivers/pnp/card.o
AR arch/x86/kernel/kprobes/built-in.a
AR drivers/clk/imx/built-in.a
AR drivers/clk/ingenic/built-in.a
AR sound/usb/misc/built-in.a
AR sound/usb/usx2y/built-in.a
CC net/core/net_namespace.o
AR drivers/clk/mediatek/built-in.a
AR sound/usb/caiaq/built-in.a
CC arch/x86/mm/tlb.o
AR drivers/clk/microchip/built-in.a
AR sound/usb/6fire/built-in.a
AR sound/firewire/built-in.a
AR drivers/clk/mstar/built-in.a
AR sound/usb/hiface/built-in.a
AR arch/x86/kernel/cpu/microcode/built-in.a
CC lib/crypto/mpi/mpi-sub-ui.o
AR drivers/clk/mvebu/built-in.a
AR sound/usb/bcd2000/built-in.a
CC arch/x86/pci/bus_numa.o
CC arch/x86/kernel/cpu/topology_ext.o
AR sound/usb/built-in.a
AR drivers/clk/ralink/built-in.a
CC lib/xz/xz_dec_bcj.o
AR drivers/clk/renesas/built-in.a
AR arch/x86/kernel/cpu/mce/built-in.a
CC net/ethtool/strset.o
CC lib/crypto/mpi/mpi-div.o
AR drivers/clk/socfpga/built-in.a
AR drivers/clk/sophgo/built-in.a
CC security/keys/sysctl.o
CC fs/quota/netlink.o
AR drivers/clk/sprd/built-in.a
CC security/selinux/netport.o
AR drivers/clk/starfive/built-in.a
AR drivers/clk/sunxi-ng/built-in.a
CC security/keys/keyctl_pkey.o
AR drivers/clk/ti/built-in.a
AR drivers/clk/versatile/built-in.a
CC lib/crypto/mpi/mpi-inv.o
CC block/blk-map.o
AR drivers/clk/xilinx/built-in.a
CC kernel/power/qos.o
AR drivers/clk/built-in.a
CC drivers/acpi/acpica/evgpeutil.o
CC block/blk-merge.o
CC fs/proc/base.o
CC net/netfilter/nf_log.o
CC arch/x86/kernel/apic/init.o
CC net/netfilter/nf_queue.o
CC block/blk-timeout.o
CC lib/zstd/decompress/zstd_decompress.o
CC sound/core/control.o
CC drivers/acpi/acpica/evglock.o
CC net/sched/ematch.o
CC arch/x86/pci/amd_bus.o
CC lib/dim/dim.o
CC net/ipv4/netfilter/iptable_filter.o
CC lib/dim/net_dim.o
CC crypto/skcipher.o
AR lib/xz/built-in.a
CC arch/x86/kernel/cpu/topology_amd.o
CC crypto/seqiv.o
CC net/ipv4/netfilter/iptable_mangle.o
CC security/selinux/status.o
CC sound/core/misc.o
CC drivers/pnp/driver.o
CC sound/core/device.o
CC fs/proc/generic.o
CC net/ipv4/netfilter/ipt_REJECT.o
CC fs/kernfs/file.o
CC [M] net/ipv4/netfilter/iptable_nat.o
CC sound/core/info.o
CC sound/core/isadma.o
CC arch/x86/kernel/apic/hw_nmi.o
CC kernel/locking/semaphore.o
CC drivers/acpi/acpica/evhandler.o
CC lib/zstd/decompress/zstd_decompress_block.o
CC net/netfilter/nf_sockopt.o
CC lib/crypto/mpi/mpi-mod.o
AR security/keys/built-in.a
CC lib/crypto/mpi/mpi-mul.o
AR fs/quota/built-in.a
CC crypto/echainiv.o
CC crypto/ahash.o
CC fs/proc/array.o
CC arch/x86/kernel/cpu/common.o
CC io_uring/net.o
CC io_uring/poll.o
CC arch/x86/mm/cpu_entry_area.o
CC kernel/power/main.o
CC [M] sound/pci/hda/hda_eld.o
CC arch/x86/events/intel/uncore.o
CC drivers/pnp/resource.o
CC kernel/power/console.o
CC drivers/acpi/acpica/evmisc.o
AR arch/x86/pci/built-in.a
CC kernel/printk/printk.o
CC net/ethtool/linkinfo.o
CC kernel/power/process.o
CC arch/x86/kernel/cpu/rdrand.o
CC fs/kernfs/symlink.o
CC security/security.o
CC arch/x86/kernel/apic/io_apic.o
CC drivers/pci/remove.o
CC arch/x86/mm/maccess.o
CC arch/x86/kernel/cpu/match.o
CC lib/dim/rdma_dim.o
CC net/unix/af_unix.o
CC mm/folio-compat.o
CC net/core/secure_seq.o
AR net/sched/built-in.a
CC kernel/locking/rwsem.o
CC arch/x86/mm/pgprot.o
CC arch/x86/mm/pgtable_32.o
CC net/unix/garbage.o
CC arch/x86/kernel/apic/msi.o
CC lib/crypto/mpi/mpih-cmp.o
CC net/ethtool/linkmodes.o
CC net/core/flow_dissector.o
CC arch/x86/events/rapl.o
CC security/selinux/ss/ebitmap.o
CC drivers/acpi/acpica/evregion.o
CC lib/crypto/mpi/mpih-div.o
CC fs/netfs/buffered_read.o
CC kernel/irq/irqdesc.o
CC crypto/shash.o
CC kernel/irq/handle.o
CC crypto/akcipher.o
AR kernel/sched/built-in.a
CC net/netfilter/utils.o
CC block/blk-lib.o
CC net/ipv4/route.o
AR lib/dim/built-in.a
CC net/core/sysctl_net_core.o
CC net/ipv6/netfilter/ip6_tables.o
AR sound/sparc/built-in.a
CC net/ipv6/af_inet6.o
CC sound/core/vmaster.o
CC net/ipv6/netfilter/ip6table_filter.o
AR net/ipv4/netfilter/built-in.a
CC kernel/rcu/update.o
CC drivers/pci/pci.o
AR fs/kernfs/built-in.a
CC kernel/rcu/sync.o
CC fs/ext4/balloc.o
CC drivers/acpi/acpica/evrgnini.o
CC [M] sound/pci/hda/hda_intel.o
CC mm/readahead.o
CC fs/ext4/bitmap.o
CC mm/swap.o
CC fs/jbd2/transaction.o
CC fs/proc/fd.o
CC fs/jbd2/commit.o
CC arch/x86/kernel/cpu/bugs.o
CC drivers/pnp/manager.o
CC arch/x86/mm/iomap_32.o
CC lib/crypto/mpi/mpih-mul.o
CC net/ethtool/rss.o
CC kernel/locking/percpu-rwsem.o
CC kernel/irq/manage.o
CC fs/ramfs/inode.o
CC kernel/power/suspend.o
LD [M] sound/pci/hda/snd-hda-codec.o
CC sound/core/ctljack.o
CC sound/core/jack.o
CC net/xfrm/xfrm_state.o
CC drivers/acpi/acpica/evsci.o
CC kernel/irq/spurious.o
CC crypto/sig.o
CC fs/hugetlbfs/inode.o
CC block/blk-mq.o
CC drivers/acpi/dptf/int340x_thermal.o
CC fs/proc/proc_tty.o
CC net/ethtool/linkstate.o
CC fs/ext4/block_validity.o
CC drivers/pnp/support.o
CC arch/x86/mm/hugetlbpage.o
CC arch/x86/events/intel/uncore_nhmex.o
CC fs/ext4/dir.o
CC security/selinux/ss/hashtab.o
CC kernel/power/hibernate.o
CC kernel/rcu/srcutree.o
CC drivers/acpi/acpica/evxface.o
CC fs/netfs/buffered_write.o
CC lib/zstd/zstd_common_module.o
CC net/netfilter/nfnetlink.o
CC kernel/locking/spinlock.o
CC io_uring/eventfd.o
CC arch/x86/kernel/apic/probe_32.o
CC fs/jbd2/recovery.o
CC net/ethtool/debug.o
AR drivers/acpi/dptf/built-in.a
CC lib/crypto/mpi/mpi-pow.o
CC lib/crypto/mpi/mpiutil.o
CC fs/proc/cmdline.o
CC fs/ramfs/file-mmu.o
CC net/ipv6/netfilter/ip6table_mangle.o
CC fs/jbd2/checkpoint.o
CC arch/x86/mm/dump_pagetables.o
CC sound/core/timer.o
CC kernel/locking/osq_lock.o
CC security/selinux/ss/symtab.o
CC drivers/pnp/interface.o
CC kernel/printk/printk_safe.o
CC lib/zstd/common/debug.o
CC fs/proc/consoles.o
CC lib/zstd/common/entropy_common.o
CC crypto/kpp.o
CC sound/core/hrtimer.o
CC drivers/acpi/acpica/evxfevnt.o
CC kernel/locking/qspinlock.o
CC net/ipv4/inetpeer.o
AR arch/x86/kernel/apic/built-in.a
CC arch/x86/events/intel/uncore_snb.o
CC arch/x86/events/intel/uncore_snbep.o
CC security/selinux/ss/sidtab.o
CC arch/x86/kernel/cpu/aperfmperf.o
CC net/netfilter/nfnetlink_log.o
CC lib/zstd/common/error_private.o
CC net/netfilter/nf_conntrack_core.o
CC arch/x86/events/msr.o
CC lib/zstd/common/fse_decompress.o
CC net/core/dev.o
CC mm/truncate.o
CC kernel/power/snapshot.o
CC kernel/irq/resend.o
CC io_uring/uring_cmd.o
CC kernel/printk/nbcon.o
AR fs/ramfs/built-in.a
CC fs/ext4/ext4_jbd2.o
LD [M] sound/pci/hda/snd-hda-codec-hdmi.o
LD [M] sound/pci/hda/snd-hda-intel.o
AR sound/pci/oxygen/built-in.a
AR sound/spi/built-in.a
AR sound/pci/pcxhr/built-in.a
CC fs/jbd2/revoke.o
CC arch/x86/events/intel/uncore_discovery.o
AR lib/crypto/mpi/built-in.a
AR sound/pci/riptide/built-in.a
CC drivers/acpi/acpica/evxfgpe.o
CC net/unix/sysctl_net_unix.o
AR fs/hugetlbfs/built-in.a
CC lib/crypto/chacha.o
CC fs/jbd2/journal.o
AR sound/pci/rme9652/built-in.a
AR sound/pci/trident/built-in.a
CC fs/ext4/extents.o
CC net/ethtool/wol.o
AR sound/pci/ymfpci/built-in.a
CC drivers/pnp/quirks.o
AR sound/pci/vx222/built-in.a
AR sound/pci/built-in.a
CC kernel/locking/rtmutex_api.o
CC fs/proc/cpuinfo.o
CC kernel/power/swap.o
CC lib/crypto/aes.o
CC net/packet/af_packet.o
CC net/ethtool/features.o
CC arch/x86/mm/highmem_32.o
CC net/ethtool/privflags.o
CC net/netfilter/nf_conntrack_standalone.o
CC arch/x86/events/intel/cstate.o
CC fs/netfs/direct_read.o
CC net/ethtool/rings.o
CC kernel/rcu/tree.o
CC lib/zstd/common/zstd_common.o
CC kernel/printk/printk_ringbuffer.o
ASN.1 crypto/rsapubkey.asn1.[ch]
ASN.1 crypto/rsaprivkey.asn1.[ch]
CC crypto/rsa.o
CC kernel/power/user.o
CC kernel/irq/chip.o
CC arch/x86/kernel/cpu/cpuid-deps.o
CC lib/fonts/fonts.o
AR lib/zstd/built-in.a
CC kernel/power/poweroff.o
CC net/ipv6/netfilter/nf_defrag_ipv6_hooks.o
CC drivers/acpi/acpica/evxfregn.o
CC net/ipv4/protocol.o
CC drivers/acpi/acpica/exconcat.o
CC kernel/rcu/rcu_segcblist.o
CC kernel/locking/qrwlock.o
CC fs/proc/devices.o
CC fs/netfs/direct_write.o
AR net/dsa/built-in.a
CC lib/crypto/arc4.o
CC net/xfrm/xfrm_hash.o
CC net/ipv4/ip_input.o
CC drivers/pci/pci-driver.o
CC lib/fonts/font_8x16.o
CC mm/vmscan.o
CC arch/x86/kernel/cpu/umwait.o
CC sound/core/seq_device.o
AR arch/x86/mm/built-in.a
CC net/xfrm/xfrm_input.o
CC drivers/pnp/system.o
CC security/selinux/ss/avtab.o
CC kernel/printk/sysctl.o
AR net/unix/built-in.a
CC net/ipv4/ip_fragment.o
CC fs/fat/cache.o
CC block/blk-mq-tag.o
CC drivers/acpi/acpica/exconfig.o
CC crypto/rsa_helper.o
CC fs/fat/dir.o
CC net/ethtool/channels.o
CC lib/crypto/gf128mul.o
CC net/ipv4/ip_forward.o
CC drivers/acpi/acpica/exconvrt.o
CC crypto/rsa-pkcs1pad.o
AR kernel/printk/built-in.a
CC drivers/acpi/x86/apple.o
CC security/selinux/ss/policydb.o
AS arch/x86/kernel/head_32.o
AR kernel/locking/built-in.a
CC drivers/acpi/x86/cmos_rtc.o
AR lib/fonts/built-in.a
CC arch/x86/kernel/head32.o
CC lib/crypto/blake2s.o
CC net/netfilter/nf_conntrack_expect.o
CC net/ipv4/ip_options.o
CC io_uring/openclose.o
CC fs/netfs/io.o
CC security/selinux/ss/services.o
CC net/xfrm/xfrm_output.o
CC net/ethtool/coalesce.o
AR drivers/pnp/built-in.a
CC lib/argv_split.o
CC fs/proc/interrupts.o
CC kernel/irq/dummychip.o
CC drivers/dma/dw/core.o
CC [M] sound/core/hwdep.o
CC drivers/dma/hsu/hsu.o
AR drivers/dma/idxd/built-in.a
MKCAP arch/x86/kernel/cpu/capflags.c
CC arch/x86/kernel/cpu/powerflags.o
CC net/ipv4/ip_output.o
AR kernel/power/built-in.a
AR drivers/soc/apple/built-in.a
AR drivers/dma/mediatek/built-in.a
AR drivers/soc/aspeed/built-in.a
AR drivers/soc/bcm/built-in.a
CC drivers/acpi/acpica/excreate.o
CC drivers/dma/dw/dw.o
CC drivers/dma/dw/idma32.o
AR drivers/soc/fsl/built-in.a
CC net/ipv4/ip_sockglue.o
AR drivers/soc/fujitsu/built-in.a
AR drivers/soc/hisilicon/built-in.a
AR drivers/soc/imx/built-in.a
CC net/ipv6/netfilter/nf_conntrack_reasm.o
AR drivers/soc/ixp4xx/built-in.a
AR drivers/soc/loongson/built-in.a
AR drivers/soc/mediatek/built-in.a
CC drivers/virtio/virtio.o
AR drivers/soc/microchip/built-in.a
CC drivers/tty/vt/vt_ioctl.o
AR drivers/soc/nuvoton/built-in.a
CC drivers/acpi/acpica/exdebug.o
AR drivers/soc/pxa/built-in.a
AR drivers/soc/amlogic/built-in.a
AR drivers/soc/qcom/built-in.a
CC lib/crypto/blake2s-generic.o
AR drivers/soc/renesas/built-in.a
CC drivers/acpi/x86/lpss.o
AR drivers/soc/rockchip/built-in.a
CC kernel/irq/devres.o
AR drivers/soc/sunxi/built-in.a
CC lib/crypto/sha1.o
AR drivers/soc/ti/built-in.a
AR drivers/soc/xilinx/built-in.a
AR drivers/soc/built-in.a
CC fs/proc/loadavg.o
CC kernel/irq/autoprobe.o
CC arch/x86/kernel/ebda.o
CC arch/x86/kernel/platform-quirks.o
AR arch/x86/events/intel/built-in.a
CC arch/x86/kernel/process_32.o
AR arch/x86/events/built-in.a
CC arch/x86/kernel/signal.o
CC crypto/acompress.o
CC crypto/scompress.o
CC io_uring/sqpoll.o
CC fs/isofs/namei.o
CC block/blk-stat.o
CC drivers/pci/search.o
CC drivers/acpi/acpica/exdump.o
CC drivers/tty/vt/vc_screen.o
CC net/ethtool/pause.o
CC drivers/acpi/x86/s2idle.o
CC net/ipv4/inet_hashtables.o
CC drivers/char/hw_random/core.o
CC [M] sound/core/pcm.o
CC drivers/char/agp/backend.o
CC lib/crypto/sha256.o
AR drivers/dma/hsu/built-in.a
CC drivers/char/agp/generic.o
CC fs/isofs/inode.o
CC [M] sound/core/pcm_native.o
CC [M] sound/core/pcm_lib.o
CC net/core/dev_addr_lists.o
CC kernel/irq/irqdomain.o
CC fs/fat/fatent.o
CC fs/fat/file.o
CC drivers/virtio/virtio_ring.o
CC fs/netfs/iterator.o
CC fs/proc/meminfo.o
CC drivers/dma/dw/acpi.o
CC net/netfilter/nf_conntrack_helper.o
CC security/lsm_audit.o
CC security/device_cgroup.o
CC drivers/acpi/acpica/exfield.o
CC [M] sound/core/pcm_misc.o
AR fs/jbd2/built-in.a
CC io_uring/xattr.o
AR sound/parisc/built-in.a
CC mm/shrinker.o
CC net/ipv6/netfilter/nf_reject_ipv6.o
CC drivers/tty/vt/selection.o
CC drivers/pci/rom.o
CC drivers/char/agp/isoch.o
CC arch/x86/kernel/signal_32.o
CC drivers/pci/setup-res.o
CC net/xfrm/xfrm_sysctl.o
CC block/blk-mq-sysfs.o
AR lib/crypto/built-in.a
CC crypto/algboss.o
CC lib/bug.o
CC drivers/acpi/acpica/exfldio.o
CC drivers/char/hw_random/intel-rng.o
CC drivers/acpi/acpica/exmisc.o
CC drivers/tty/vt/keyboard.o
CC net/xfrm/xfrm_replay.o
CC drivers/acpi/x86/utils.o
AR net/packet/built-in.a
AR drivers/dma/dw/built-in.a
CC net/xfrm/xfrm_device.o
AR drivers/dma/qcom/built-in.a
CC net/xfrm/xfrm_nat_keepalive.o
AR drivers/dma/stm32/built-in.a
CC net/ethtool/eee.o
AR drivers/dma/ti/built-in.a
CC fs/proc/stat.o
AR drivers/dma/xilinx/built-in.a
CC drivers/dma/dmaengine.o
CC net/xfrm/xfrm_algo.o
CC net/xfrm/xfrm_user.o
CC net/ipv6/netfilter/ip6t_ipv6header.o
CC net/ipv6/netfilter/ip6t_REJECT.o
AR sound/pcmcia/vx/built-in.a
AR sound/pcmcia/pdaudiocf/built-in.a
AR sound/pcmcia/built-in.a
CC drivers/tty/vt/vt.o
COPY drivers/tty/vt/defkeymap.c
AR sound/soc/built-in.a
AR sound/mips/built-in.a
CC drivers/char/hw_random/amd-rng.o
CC drivers/char/hw_random/geode-rng.o
CC drivers/acpi/acpica/exmutex.o
CC fs/fat/inode.o
CC fs/netfs/locking.o
CC fs/fat/misc.o
CC fs/fat/nfs.o
CC security/selinux/ss/conditional.o
CC fs/fat/namei_vfat.o
CC drivers/char/agp/amd64-agp.o
CC kernel/irq/proc.o
CC drivers/acpi/x86/blacklist.o
CC fs/isofs/dir.o
CC drivers/pci/irq.o
CC io_uring/nop.o
CC lib/buildid.o
CC block/blk-mq-cpumap.o
CC drivers/dma/virt-dma.o
CC drivers/char/hw_random/via-rng.o
CC drivers/acpi/acpica/exnames.o
CC mm/shmem.o
CC mm/util.o
CC drivers/acpi/acpica/exoparg1.o
CC fs/ext4/extents_status.o
CC net/netfilter/nf_conntrack_proto.o
CC fs/proc/uptime.o
CC crypto/testmgr.o
CC block/blk-mq-sched.o
CC block/ioctl.o
CC drivers/virtio/virtio_anchor.o
CC arch/x86/kernel/traps.o
AR drivers/acpi/x86/built-in.a
CC drivers/acpi/tables.o
CC lib/clz_tab.o
CC fs/fat/namei_msdos.o
CC fs/ext4/file.o
CC drivers/acpi/osi.o
CC fs/ext4/fsmap.o
CC security/selinux/ss/mls.o
AR drivers/char/hw_random/built-in.a
CC drivers/dma/acpi-dma.o
CC lib/cmdline.o
AR kernel/rcu/built-in.a
CC fs/proc/util.o
CC net/ipv4/inet_timewait_sock.o
CC io_uring/fs.o
CC drivers/acpi/acpica/exoparg2.o
CC net/ethtool/tsinfo.o
CC drivers/pci/vpd.o
CC kernel/irq/migration.o
CC lib/cpumask.o
CC kernel/irq/cpuhotplug.o
CC mm/mmzone.o
CC lib/ctype.o
CC drivers/virtio/virtio_pci_modern_dev.o
CC fs/isofs/util.o
CC fs/ext4/fsync.o
CC fs/ext4/hash.o
CC mm/vmstat.o
CC drivers/tty/vt/consolemap.o
CC drivers/char/agp/intel-agp.o
CC mm/backing-dev.o
CC fs/netfs/main.o
CC fs/netfs/misc.o
CC mm/mm_init.o
CC crypto/cmac.o
CC security/selinux/ss/context.o
CC [M] sound/core/pcm_memory.o
AR net/ipv6/netfilter/built-in.a
CC fs/ext4/ialloc.o
CC net/ipv6/anycast.o
CC drivers/acpi/osl.o
CC drivers/acpi/acpica/exoparg3.o
CC fs/proc/version.o
CC drivers/acpi/utils.o
CC drivers/char/mem.o
CC kernel/irq/pm.o
CC security/selinux/netlabel.o
CC kernel/irq/msi.o
CC lib/dec_and_lock.o
CC fs/isofs/rock.o
AR drivers/dma/built-in.a
CC io_uring/splice.o
CC mm/percpu.o
CC lib/decompress.o
CC io_uring/sync.o
CC fs/netfs/objects.o
CC crypto/hmac.o
CC io_uring/msg_ring.o
CC kernel/irq/affinity.o
CC block/genhd.o
AR fs/fat/built-in.a
CC drivers/acpi/reboot.o
CC lib/decompress_bunzip2.o
CC [M] sound/core/memalloc.o
CC lib/decompress_inflate.o
CC drivers/pci/setup-bus.o
CC drivers/acpi/acpica/exoparg6.o
CC lib/decompress_unlz4.o
CC net/ethtool/cabletest.o
CC drivers/virtio/virtio_pci_legacy_dev.o
CC drivers/char/agp/intel-gtt.o
CC io_uring/advise.o
CC fs/proc/softirqs.o
CC net/netfilter/nf_conntrack_proto_generic.o
CC mm/slab_common.o
CC [M] sound/core/pcm_timer.o
CC lib/decompress_unlzma.o
CC drivers/acpi/nvs.o
CC net/ipv4/inet_connection_sock.o
CC crypto/crypto_null.o
CC kernel/irq/matrix.o
CC net/ipv4/tcp.o
CC arch/x86/kernel/cpu/topology.o
CC drivers/acpi/acpica/exprep.o
CC arch/x86/kernel/cpu/proc.o
CC mm/compaction.o
CC net/netfilter/nf_conntrack_proto_tcp.o
CC lib/decompress_unlzo.o
AR kernel/livepatch/built-in.a
CC fs/netfs/write_collect.o
AR net/xfrm/built-in.a
CC net/ethtool/tunnels.o
CC net/ethtool/fec.o
HOSTCC drivers/tty/vt/conmakehash
CC net/ethtool/eeprom.o
CC fs/isofs/export.o
CC drivers/virtio/virtio_pci_modern.o
CC fs/isofs/joliet.o
CC fs/ext4/indirect.o
CC io_uring/epoll.o
CC net/ipv6/ip6_output.o
CC fs/proc/namespaces.o
CC drivers/tty/vt/defkeymap.o
CC net/ipv6/ip6_input.o
CC fs/isofs/compress.o
CC drivers/acpi/acpica/exregion.o
CC kernel/dma/mapping.o
CC kernel/dma/direct.o
CC kernel/dma/ops_helpers.o
CC kernel/dma/dummy.o
CC fs/ext4/inline.o
LD [M] sound/core/snd-hwdep.o
LD [M] sound/core/snd-pcm.o
AR sound/core/built-in.a
CONMK drivers/tty/vt/consolemap_deftbl.c
CC fs/netfs/write_issue.o
CC drivers/tty/vt/consolemap_deftbl.o
CC net/netfilter/nf_conntrack_proto_udp.o
AR sound/atmel/built-in.a
CC drivers/acpi/acpica/exresnte.o
CC net/core/dst.o
AR drivers/tty/vt/built-in.a
CC io_uring/statx.o
AR sound/hda/built-in.a
AR security/selinux/built-in.a
CC drivers/tty/hvc/hvc_console.o
CC [M] sound/hda/hda_bus_type.o
AR security/built-in.a
CC [M] sound/hda/hdac_bus.o
CC crypto/md5.o
CC net/core/netevent.o
CC arch/x86/kernel/cpu/feat_ctl.o
CC crypto/sha256_generic.o
AR drivers/char/agp/built-in.a
CC block/ioprio.o
CC drivers/char/random.o
CC drivers/pci/vc.o
CC lib/decompress_unxz.o
CC fs/proc/self.o
CC drivers/pci/mmap.o
CC arch/x86/kernel/idt.o
CC drivers/acpi/wakeup.o
CC [M] sound/hda/hdac_device.o
CC lib/decompress_unzstd.o
CC drivers/acpi/acpica/exresolv.o
CC kernel/dma/remap.o
CC [M] sound/hda/hdac_sysfs.o
CC fs/proc/thread_self.o
CC drivers/virtio/virtio_pci_common.o
CC net/netfilter/nf_conntrack_proto_icmp.o
CC arch/x86/kernel/irq.o
CC drivers/pci/devres.o
CC crypto/sha512_generic.o
AR kernel/irq/built-in.a
CC net/ethtool/stats.o
CC fs/ext4/inode.o
CC kernel/entry/common.o
AR fs/isofs/built-in.a
CC kernel/entry/syscall_user_dispatch.o
CC net/ipv4/tcp_input.o
CC fs/ext4/ioctl.o
CC arch/x86/kernel/cpu/intel.o
CC fs/ext4/mballoc.o
CC drivers/acpi/acpica/exresop.o
CC block/badblocks.o
CC drivers/acpi/sleep.o
CC [M] sound/hda/hdac_regmap.o
CC drivers/pci/proc.o
CC lib/dump_stack.o
CC drivers/pci/pci-sysfs.o
CC net/sunrpc/auth_gss/auth_gss.o
CC net/sunrpc/clnt.o
AR drivers/tty/hvc/built-in.a
CC net/ethtool/phc_vclocks.o
CC io_uring/timeout.o
AR net/wireless/tests/built-in.a
CC net/wireless/core.o
AR drivers/tty/ipwireless/built-in.a
CC drivers/tty/serial/8250/8250_core.o
AR net/mac80211/tests/built-in.a
CC net/mac80211/main.o
CC drivers/tty/serial/8250/8250_platform.o
CC net/wireless/sysfs.o
CC arch/x86/kernel/irq_32.o
AR kernel/dma/built-in.a
CC fs/proc/proc_sysctl.o
CC net/sunrpc/xprt.o
CC fs/proc/proc_net.o
AR fs/netfs/built-in.a
CC net/sunrpc/socklib.o
CC net/netfilter/nf_conntrack_extend.o
CC drivers/acpi/device_sysfs.o
CC arch/x86/kernel/cpu/tsx.o
CC drivers/acpi/acpica/exserial.o
CC [M] sound/hda/hdac_controller.o
CC net/core/neighbour.o
CC arch/x86/kernel/cpu/intel_epb.o
CC drivers/acpi/device_pm.o
CC net/mac80211/status.o
CC net/sunrpc/xprtsock.o
CC fs/proc/kcore.o
CC drivers/char/misc.o
CC drivers/virtio/virtio_pci_legacy.o
CC crypto/sha3_generic.o
CC lib/earlycpio.o
CC net/sunrpc/sched.o
CC [M] sound/hda/hdac_stream.o
CC lib/extable.o
AR kernel/entry/built-in.a
CC drivers/acpi/acpica/exstore.o
CC kernel/module/main.o
CC [M] sound/hda/array.o
CC kernel/module/strict_rwx.o
CC arch/x86/kernel/cpu/amd.o
CC drivers/tty/serial/8250/8250_pnp.o
CC block/blk-rq-qos.o
CC net/netfilter/nf_conntrack_acct.o
CC net/ethtool/mm.o
CC arch/x86/kernel/cpu/hygon.o
CC net/ethtool/module.o
CC crypto/ecb.o
CC net/ipv6/addrconf.o
CC drivers/pci/slot.o
CC [M] sound/hda/hdmi_chmap.o
CC io_uring/fdinfo.o
CC mm/show_mem.o
CC net/ipv4/tcp_output.o
CC net/netlabel/netlabel_user.o
CC fs/ext4/migrate.o
CC lib/flex_proportions.o
CC net/netlabel/netlabel_kapi.o
CC drivers/virtio/virtio_pci_admin_legacy_io.o
CC drivers/acpi/acpica/exstoren.o
CC drivers/char/virtio_console.o
CC drivers/acpi/acpica/exstorob.o
CC lib/idr.o
CC arch/x86/kernel/cpu/centaur.o
CC kernel/module/kmod.o
CC crypto/cbc.o
CC drivers/pci/pci-acpi.o
CC arch/x86/kernel/dumpstack_32.o
CC crypto/ctr.o
CC lib/irq_regs.o
CC net/sunrpc/auth.o
CC net/ipv4/tcp_timer.o
CC block/disk-events.o
CC drivers/tty/serial/8250/8250_rsa.o
CC arch/x86/kernel/cpu/transmeta.o
CC kernel/module/tree_lookup.o
CC drivers/char/hpet.o
CC kernel/time/time.o
CC fs/proc/vmcore.o
CC drivers/acpi/acpica/exsystem.o
CC kernel/time/timer.o
CC arch/x86/kernel/cpu/zhaoxin.o
CC net/sunrpc/auth_gss/gss_generic_token.o
CC lib/is_single_threaded.o
CC net/sunrpc/auth_gss/gss_mech_switch.o
CC crypto/gcm.o
CC [M] sound/hda/trace.o
CC net/netfilter/nf_conntrack_seqadj.o
CC drivers/virtio/virtio_input.o
CC net/ethtool/cmis_fw_update.o
CC drivers/virtio/virtio_dma_buf.o
CC io_uring/cancel.o
CC mm/shmem_quota.o
CC arch/x86/kernel/time.o
CC drivers/acpi/acpica/extrace.o
CC fs/ext4/mmp.o
CC fs/ext4/move_extent.o
CC net/netlabel/netlabel_domainhash.o
CC net/sunrpc/auth_gss/svcauth_gss.o
CC crypto/ccm.o
CC net/mac80211/driver-ops.o
CC net/ethtool/cmis_cdb.o
CC arch/x86/kernel/cpu/vortex.o
CC kernel/module/kallsyms.o
CC drivers/tty/serial/8250/8250_port.o
CC lib/klist.o
CC block/blk-ia-ranges.o
CC drivers/pci/iomap.o
CC drivers/acpi/acpica/exutils.o
CC lib/kobject.o
CC arch/x86/kernel/ioport.o
CC kernel/module/procfs.o
CC kernel/module/sysfs.o
CC drivers/char/nvram.o
CC drivers/tty/serial/serial_core.o
CC net/mac80211/sta_info.o
CC arch/x86/kernel/cpu/perfctr-watchdog.o
CC drivers/acpi/proc.o
AR drivers/virtio/built-in.a
CC fs/proc/kmsg.o
CC kernel/time/hrtimer.o
CC mm/interval_tree.o
CC arch/x86/kernel/dumpstack.o
CC drivers/acpi/acpica/hwacpi.o
CC crypto/aes_generic.o
CC [M] sound/hda/hdac_component.o
CC fs/ext4/namei.o
CC kernel/time/timekeeping.o
CC mm/list_lru.o
CC drivers/tty/tty_io.o
CC net/core/rtnetlink.o
CC block/early-lookup.o
CC net/ipv4/tcp_ipv4.o
CC lib/kobject_uevent.o
CC drivers/pci/quirks.o
CC drivers/pci/pci-label.o
CC io_uring/waitid.o
CC drivers/acpi/bus.o
CC drivers/acpi/glue.o
CC net/ethtool/pse-pd.o
CC net/sunrpc/auth_gss/gss_rpc_upcall.o
CC net/ipv6/addrlabel.o
CC fs/proc/page.o
CC net/netfilter/nf_conntrack_proto_icmpv6.o
CC net/sunrpc/auth_gss/gss_rpc_xdr.o
AR kernel/module/built-in.a
CC net/netfilter/nf_conntrack_netlink.o
CC drivers/acpi/acpica/hwesleep.o
CC drivers/tty/n_tty.o
CC [M] sound/hda/hdac_i915.o
CC arch/x86/kernel/cpu/vmware.o
AR drivers/char/built-in.a
CC mm/workingset.o
CC net/rfkill/core.o
CC net/netlabel/netlabel_addrlist.o
CC net/rfkill/input.o
CC net/wireless/radiotap.o
CC net/core/utils.o
CC mm/debug.o
CC [M] sound/hda/intel-dsp-config.o
CC arch/x86/kernel/cpu/hypervisor.o
CC block/bounce.o
CC drivers/acpi/acpica/hwgpe.o
CC net/netlabel/netlabel_mgmt.o
CC crypto/crc32c_generic.o
CC drivers/acpi/scan.o
CC drivers/tty/serial/8250/8250_dma.o
CC kernel/time/ntp.o
CC crypto/authenc.o
CC kernel/time/clocksource.o
AR fs/proc/built-in.a
CC net/ipv6/route.o
CC net/netlabel/netlabel_unlabeled.o
CC io_uring/register.o
CC arch/x86/kernel/cpu/mshyperv.o
CC net/wireless/util.o
CC drivers/tty/serial/serial_base_bus.o
CC net/netlabel/netlabel_cipso_v4.o
CC kernel/time/jiffies.o
CC fs/nfs/client.o
CC lib/logic_pio.o
CC net/ipv6/ip6_fib.o
CC drivers/acpi/acpica/hwregs.o
CC block/bsg.o
CC net/sunrpc/auth_gss/trace.o
CC net/ethtool/plca.o
CC fs/nfs/dir.o
CC net/wireless/reg.o
AR net/rfkill/built-in.a
CC net/ipv6/ipv6_sockglue.o
CC block/blk-cgroup.o
CC net/9p/mod.o
CC [M] sound/hda/intel-nhlt.o
CC arch/x86/kernel/cpu/debugfs.o
CC drivers/pci/vgaarb.o
CC mm/gup.o
CC net/sunrpc/auth_null.o
CC drivers/tty/serial/8250/8250_dwlib.o
CC net/netlabel/netlabel_calipso.o
CC io_uring/truncate.o
CC net/sunrpc/auth_gss/gss_krb5_mech.o
CC net/dns_resolver/dns_key.o
CC net/sunrpc/auth_gss/gss_krb5_seal.o
CC drivers/acpi/acpica/hwsleep.o
CC lib/maple_tree.o
CC net/netfilter/nf_conntrack_ftp.o
CC crypto/authencesn.o
CC net/handshake/alert.o
CC drivers/acpi/acpica/hwvalid.o
CC arch/x86/kernel/nmi.o
CC kernel/time/timer_list.o
CC block/blk-ioprio.o
AR drivers/iommu/amd/built-in.a
AR drivers/iommu/intel/built-in.a
CC net/9p/client.o
CC net/9p/error.o
CC net/9p/protocol.o
AR drivers/iommu/arm/arm-smmu/built-in.a
CC crypto/lzo.o
CC [M] sound/hda/intel-sdw-acpi.o
CC crypto/lzo-rle.o
AR drivers/iommu/arm/arm-smmu-v3/built-in.a
CC net/mac80211/wep.o
AR drivers/iommu/arm/built-in.a
CC arch/x86/kernel/cpu/capflags.o
AR drivers/iommu/iommufd/built-in.a
CC net/handshake/genl.o
CC drivers/iommu/iommu.o
AR drivers/gpu/host1x/built-in.a
AR arch/x86/kernel/cpu/built-in.a
CC arch/x86/kernel/ldt.o
CC drivers/tty/serial/8250/8250_pcilib.o
CC drivers/acpi/mipi-disco-img.o
AR net/ethtool/built-in.a
CC drivers/acpi/acpica/hwxface.o
CC drivers/iommu/iommu-traces.o
CC net/dns_resolver/dns_query.o
CC drivers/tty/serial/serial_ctrl.o
CC net/sunrpc/auth_gss/gss_krb5_unseal.o
CC drivers/tty/serial/serial_port.o
AR drivers/gpu/drm/tests/built-in.a
AR drivers/gpu/drm/arm/built-in.a
CC drivers/gpu/drm/display/drm_display_helper_mod.o
AR drivers/gpu/vga/built-in.a
CC net/sunrpc/auth_gss/gss_krb5_wrap.o
CC drivers/connector/cn_queue.o
CC drivers/iommu/iommu-sysfs.o
CC drivers/gpu/drm/display/drm_dp_dual_mode_helper.o
AR drivers/pci/built-in.a
CC drivers/tty/serial/earlycon.o
LD [M] sound/hda/snd-hda-core.o
CC drivers/gpu/drm/ttm/ttm_tt.o
LD [M] sound/hda/snd-intel-dspcfg.o
LD [M] sound/hda/snd-intel-sdw-acpi.o
CC drivers/connector/connector.o
AR sound/x86/built-in.a
AR net/netlabel/built-in.a
AR sound/xen/built-in.a
CC kernel/time/timeconv.o
AR sound/virtio/built-in.a
CC drivers/base/power/sysfs.o
CC sound/sound_core.o
CC kernel/time/timecounter.o
CC fs/nfs/file.o
CC drivers/base/firmware_loader/builtin/main.o
CC fs/nfs/getroot.o
CC io_uring/memmap.o
CC drivers/acpi/acpica/hwxfsleep.o
CC drivers/tty/serial/8250/8250_early.o
CC crypto/rng.o
CC block/blk-iolatency.o
CC fs/ext4/page-io.o
CC drivers/block/loop.o
CC fs/ext4/readpage.o
CC drivers/block/virtio_blk.o
CC drivers/gpu/drm/i915/i915_config.o
AR drivers/base/firmware_loader/builtin/built-in.a
CC drivers/base/firmware_loader/main.o
CC kernel/time/alarmtimer.o
CC sound/last.o
CC net/netfilter/nf_conntrack_irc.o
CC net/devres.o
CC drivers/acpi/resource.o
CC net/ipv4/tcp_minisocks.o
AR net/dns_resolver/built-in.a
CC arch/x86/kernel/setup.o
CC net/ipv4/tcp_cong.o
CC kernel/futex/core.o
CC arch/x86/kernel/x86_init.o
CC drivers/acpi/acpica/hwpci.o
CC drivers/gpu/drm/display/drm_dp_helper.o
CC net/handshake/netlink.o
CC drivers/base/power/generic_ops.o
CC drivers/gpu/drm/i915/i915_driver.o
AR drivers/gpu/drm/renesas/rcar-du/built-in.a
AR drivers/gpu/drm/renesas/rz-du/built-in.a
CC drivers/gpu/drm/i915/i915_drm_client.o
CC drivers/gpu/drm/i915/i915_getparam.o
AR drivers/gpu/drm/renesas/built-in.a
CC net/ipv4/tcp_metrics.o
CC mm/mmap_lock.o
CC net/sunrpc/auth_gss/gss_krb5_crypto.o
AR drivers/gpu/drm/omapdrm/built-in.a
CC crypto/drbg.o
CC net/9p/trans_common.o
CC drivers/gpu/drm/ttm/ttm_bo.o
CC io_uring/io-wq.o
CC net/handshake/request.o
CC kernel/futex/syscalls.o
CC drivers/tty/serial/8250/8250_exar.o
CC net/core/link_watch.o
AR sound/built-in.a
CC drivers/acpi/acpica/nsaccess.o
CC net/handshake/tlshd.o
CC drivers/base/regmap/regmap.o
CC net/mac80211/aead_api.o
CC drivers/connector/cn_proc.o
CC drivers/base/regmap/regcache.o
CC net/netfilter/nf_conntrack_sip.o
CC fs/ext4/resize.o
CC drivers/base/power/common.o
AR drivers/gpu/drm/tilcdc/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_drv.o
CC arch/x86/kernel/i8259.o
CC net/9p/trans_fd.o
CC drivers/acpi/acpi_processor.o
AR drivers/gpu/drm/imx/built-in.a
AR drivers/base/firmware_loader/built-in.a
CC drivers/gpu/drm/display/drm_dp_mst_topology.o
CC drivers/gpu/drm/virtio/virtgpu_kms.o
CC drivers/gpu/drm/display/drm_dsc_helper.o
CC drivers/iommu/dma-iommu.o
CC net/9p/trans_virtio.o
CC drivers/acpi/acpica/nsalloc.o
CC drivers/acpi/acpica/nsarguments.o
CC drivers/acpi/acpica/nsconvert.o
CC net/mac80211/wpa.o
CC drivers/acpi/processor_core.o
CC block/blk-iocost.o
CC block/mq-deadline.o
CC drivers/base/power/qos.o
CC mm/highmem.o
CC kernel/time/posix-timers.o
CC crypto/jitterentropy.o
CC fs/nfs/inode.o
AR drivers/block/built-in.a
CC drivers/gpu/drm/ttm/ttm_bo_util.o
CC crypto/jitterentropy-kcapi.o
CC net/sunrpc/auth_gss/gss_krb5_keys.o
CC crypto/ghash-generic.o
AR drivers/misc/eeprom/built-in.a
CC kernel/futex/pi.o
AR drivers/misc/cb710/built-in.a
CC crypto/hash_info.o
AR drivers/misc/ti-st/built-in.a
CC net/handshake/trace.o
AR drivers/misc/lis3lv02d/built-in.a
AR drivers/misc/cardreader/built-in.a
CC net/ipv4/tcp_fastopen.o
CC kernel/futex/requeue.o
AR drivers/misc/keba/built-in.a
CC drivers/tty/serial/8250/8250_lpss.o
AR drivers/misc/built-in.a
CC drivers/acpi/acpica/nsdump.o
CC fs/nfs/super.o
CC drivers/gpu/drm/virtio/virtgpu_gem.o
CC net/core/filter.o
CC arch/x86/kernel/irqinit.o
AR drivers/mfd/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_vram.o
CC fs/nfs/io.o
CC fs/nfs/direct.o
AR drivers/nfc/built-in.a
CC kernel/cgroup/cgroup.o
AR drivers/connector/built-in.a
CC net/ipv4/tcp_rate.o
CC drivers/base/regmap/regcache-rbtree.o
CC drivers/tty/serial/8250/8250_mid.o
CC drivers/gpu/drm/i915/i915_ioctl.o
CC io_uring/futex.o
CC net/ipv4/tcp_recovery.o
CC drivers/gpu/drm/ttm/ttm_bo_vm.o
CC drivers/base/regmap/regcache-flat.o
CC drivers/acpi/acpica/nseval.o
CC crypto/rsapubkey.asn1.o
CC kernel/cgroup/rstat.o
AR drivers/dax/hmem/built-in.a
AR drivers/dax/built-in.a
CC crypto/rsaprivkey.asn1.o
CC drivers/dma-buf/dma-buf.o
CC arch/x86/kernel/jump_label.o
AR crypto/built-in.a
CC net/core/sock_diag.o
CC arch/x86/kernel/irq_work.o
CC net/ipv6/ndisc.o
CC drivers/gpu/drm/display/drm_hdcp_helper.o
CC kernel/futex/waitwake.o
CC drivers/acpi/processor_pdc.o
CC drivers/acpi/ec.o
CC net/wireless/scan.o
CC kernel/cgroup/namespace.o
CC mm/memory.o
CC kernel/cgroup/cgroup-v1.o
AR net/9p/built-in.a
CC net/ipv6/udp.o
CC net/core/dev_ioctl.o
AR net/sunrpc/auth_gss/built-in.a
CC drivers/gpu/drm/virtio/virtgpu_display.o
CC drivers/acpi/acpica/nsinit.o
CC net/sunrpc/auth_tls.o
CC drivers/iommu/iova.o
CC arch/x86/kernel/probe_roms.o
CC net/wireless/nl80211.o
CC net/core/tso.o
CC net/wireless/mlme.o
CC drivers/tty/serial/8250/8250_pci.o
CC kernel/time/posix-cpu-timers.o
CC net/netfilter/nf_nat_core.o
CC fs/ext4/super.o
CC drivers/base/power/runtime.o
CC net/mac80211/scan.o
CC arch/x86/kernel/sys_ia32.o
CC drivers/gpu/drm/virtio/virtgpu_vq.o
CC drivers/gpu/drm/ttm/ttm_module.o
CC drivers/gpu/drm/i915/i915_irq.o
CC drivers/acpi/acpica/nsload.o
CC drivers/gpu/drm/ttm/ttm_execbuf_util.o
CC fs/nfs/pagelist.o
CC drivers/dma-buf/dma-fence.o
CC io_uring/napi.o
CC block/kyber-iosched.o
AR kernel/futex/built-in.a
CC kernel/cgroup/freezer.o
CC net/ipv4/tcp_ulp.o
CC fs/ext4/symlink.o
AR net/handshake/built-in.a
CC net/socket.o
CC drivers/acpi/dock.o
CC drivers/base/regmap/regcache-maple.o
CC drivers/gpu/drm/ttm/ttm_range_manager.o
CC net/ipv6/udplite.o
CC net/core/sock_reuseport.o
CC drivers/dma-buf/dma-fence-array.o
CC net/sunrpc/auth_unix.o
CC arch/x86/kernel/ksysfs.o
CC arch/x86/kernel/bootflag.o
CC drivers/acpi/acpica/nsnames.o
CC drivers/gpu/drm/i915/i915_mitigations.o
AR drivers/iommu/built-in.a
CC net/sunrpc/svc.o
AR drivers/cxl/core/built-in.a
AR drivers/cxl/built-in.a
CC drivers/macintosh/mac_hid.o
CC drivers/gpu/drm/ttm/ttm_resource.o
CC drivers/gpu/drm/ttm/ttm_pool.o
CC drivers/acpi/pci_root.o
CC drivers/dma-buf/dma-fence-chain.o
CC drivers/acpi/acpica/nsobject.o
CC kernel/cgroup/legacy_freezer.o
CC net/core/fib_notifier.o
CC drivers/acpi/pci_link.o
CC arch/x86/kernel/e820.o
CC drivers/gpu/drm/display/drm_hdmi_helper.o
CC lib/memcat_p.o
CC kernel/time/posix-clock.o
CC drivers/base/power/wakeirq.o
CC drivers/base/regmap/regmap-debugfs.o
CC arch/x86/kernel/pci-dma.o
CC drivers/tty/serial/8250/8250_pericom.o
CC drivers/acpi/acpica/nsparse.o
CC kernel/time/itimer.o
CC mm/mincore.o
CC net/ipv4/tcp_offload.o
CC drivers/gpu/drm/virtio/virtgpu_fence.o
CC net/mac80211/offchannel.o
CC drivers/gpu/drm/ttm/ttm_device.o
AR drivers/macintosh/built-in.a
CC drivers/acpi/acpica/nspredef.o
AR drivers/gpu/drm/i2c/built-in.a
CC drivers/scsi/scsi.o
AR drivers/scsi/pcmcia/built-in.a
CC drivers/scsi/hosts.o
CC drivers/acpi/pci_irq.o
CC lib/nmi_backtrace.o
CC drivers/dma-buf/dma-fence-unwrap.o
CC drivers/acpi/acpi_apd.o
CC drivers/scsi/scsi_ioctl.o
CC net/sunrpc/svcsock.o
CC net/netfilter/nf_nat_proto.o
CC lib/objpool.o
AR io_uring/built-in.a
CC drivers/acpi/acpica/nsprepkg.o
CC drivers/gpu/drm/i915/i915_module.o
CC drivers/base/power/main.o
CC kernel/cgroup/pids.o
CC kernel/trace/trace_clock.o
CC drivers/gpu/drm/display/drm_scdc_helper.o
CC kernel/trace/ring_buffer.o
CC drivers/acpi/acpi_platform.o
CC kernel/bpf/core.o
CC block/blk-mq-pci.o
CC drivers/gpu/drm/ttm/ttm_sys_manager.o
CC drivers/gpu/drm/i915/i915_params.o
AR drivers/tty/serial/8250/built-in.a
AR drivers/tty/serial/built-in.a
CC drivers/tty/tty_ioctl.o
CC drivers/dma-buf/dma-resv.o
CC kernel/cgroup/rdma.o
AR drivers/base/regmap/built-in.a
CC net/sunrpc/svcauth.o
AR drivers/base/test/built-in.a
CC net/sunrpc/svcauth_unix.o
CC drivers/acpi/acpi_pnp.o
CC drivers/acpi/power.o
CC net/sunrpc/addr.o
CC net/ipv6/raw.o
CC kernel/trace/trace.o
CC drivers/acpi/acpica/nsrepair.o
AR drivers/nvme/common/built-in.a
CC drivers/ata/libata-core.o
CC lib/plist.o
AR drivers/nvme/host/built-in.a
AR drivers/nvme/target/built-in.a
CC drivers/net/phy/mdio-boardinfo.o
AR drivers/nvme/built-in.a
AR drivers/net/phy/qcom/built-in.a
CC fs/ext4/sysfs.o
CC kernel/time/clockevents.o
CC drivers/gpu/drm/virtio/virtgpu_object.o
AR drivers/net/pse-pd/built-in.a
CC lib/radix-tree.o
CC drivers/gpu/drm/i915/i915_pci.o
CC net/mac80211/ht.o
CC arch/x86/kernel/quirks.o
CC drivers/gpu/drm/ttm/ttm_agp_backend.o
CC drivers/acpi/acpica/nsrepair2.o
CC block/blk-mq-virtio.o
CC drivers/scsi/scsicam.o
CC drivers/acpi/event.o
CC fs/nfs/read.o
CC lib/ratelimit.o
CC fs/ext4/xattr.o
AR drivers/gpu/drm/display/built-in.a
CC drivers/acpi/acpica/nssearch.o
CC kernel/trace/trace_output.o
CC kernel/cgroup/cpuset.o
CC kernel/time/tick-common.o
CC drivers/gpu/drm/i915/i915_scatterlist.o
CC drivers/tty/tty_ldisc.o
CC net/sysctl_net.o
CC net/sunrpc/rpcb_clnt.o
CC block/blk-mq-debugfs.o
CC drivers/dma-buf/sync_file.o
CC arch/x86/kernel/kdebugfs.o
CC fs/nfs/symlink.o
CC kernel/cgroup/misc.o
CC net/ipv4/tcp_plb.o
CC drivers/acpi/acpica/nsutils.o
CC drivers/net/phy/stubs.o
CC fs/nfs/unlink.o
AR drivers/gpu/drm/ttm/built-in.a
CC fs/ext4/xattr_hurd.o
CC drivers/acpi/evged.o
CC mm/mlock.o
CC net/sunrpc/timer.o
CC fs/exportfs/expfs.o
CC drivers/scsi/scsi_error.o
CC drivers/gpu/drm/virtio/virtgpu_debugfs.o
CC lib/rbtree.o
CC drivers/scsi/scsi_lib.o
CC drivers/acpi/sysfs.o
CC net/netfilter/nf_nat_helper.o
CC drivers/acpi/property.o
CC drivers/base/power/wakeup.o
CC drivers/scsi/constants.o
CC kernel/events/core.o
CC drivers/scsi/scsi_lib_dma.o
CC net/core/xdp.o
CC arch/x86/kernel/alternative.o
CC drivers/acpi/acpica/nswalk.o
CC drivers/gpu/drm/i915/i915_suspend.o
AR drivers/dma-buf/built-in.a
CC fs/lockd/clntlock.o
CC lib/seq_buf.o
CC drivers/tty/tty_buffer.o
CC fs/lockd/clntproc.o
CC block/blk-pm.o
AR fs/exportfs/built-in.a
CC fs/nls/nls_base.o
CC drivers/acpi/debugfs.o
CC drivers/gpu/drm/virtio/virtgpu_plane.o
CC fs/nls/nls_cp437.o
CC drivers/net/phy/mdio_devres.o
CC kernel/time/tick-broadcast.o
CC net/ipv6/icmp.o
CC drivers/gpu/drm/i915/i915_switcheroo.o
CC drivers/acpi/acpica/nsxfeval.o
CC fs/nfs/write.o
CC fs/nls/nls_ascii.o
CC drivers/tty/tty_port.o
CC drivers/net/phy/phy.o
CC drivers/scsi/scsi_scan.o
CC net/mac80211/agg-tx.o
CC net/sunrpc/xdr.o
CC lib/siphash.o
CC drivers/acpi/acpi_lpat.o
CC net/ipv4/datagram.o
CC net/sunrpc/sunrpc_syms.o
CC net/mac80211/agg-rx.o
CC fs/nls/nls_iso8859-1.o
CC fs/nls/nls_utf8.o
CC mm/mmap.o
CC net/sunrpc/cache.o
CC fs/ext4/xattr_trusted.o
CC block/holder.o
CC drivers/acpi/acpi_pcc.o
CC drivers/acpi/acpica/nsxfname.o
AR kernel/bpf/built-in.a
AR fs/unicode/built-in.a
CC kernel/fork.o
CC net/netfilter/nf_nat_masquerade.o
CC net/ipv6/mcast.o
CC fs/ext4/xattr_user.o
CC mm/mmu_gather.o
CC kernel/time/tick-broadcast-hrtimer.o
CC mm/mprotect.o
CC drivers/base/power/wakeup_stats.o
AR fs/nls/built-in.a
CC drivers/tty/tty_mutex.o
CC drivers/gpu/drm/virtio/virtgpu_ioctl.o
CC drivers/gpu/drm/virtio/virtgpu_prime.o
CC arch/x86/kernel/i8253.o
CC drivers/gpu/drm/virtio/virtgpu_trace_points.o
CC drivers/acpi/acpica/nsxfobj.o
CC lib/string.o
CC net/sunrpc/rpc_pipe.o
CC arch/x86/kernel/hw_breakpoint.o
CC net/ipv4/raw.o
CC drivers/tty/tty_ldsem.o
CC drivers/gpu/drm/i915/i915_sysfs.o
CC drivers/gpu/drm/i915/i915_utils.o
CC fs/lockd/clntxdr.o
CC drivers/net/phy/phy-c45.o
GEN drivers/scsi/scsi_devinfo_tbl.c
CC drivers/acpi/acpica/psargs.o
CC drivers/acpi/acpica/psloop.o
CC lib/timerqueue.o
CC drivers/scsi/scsi_devinfo.o
CC kernel/cgroup/debug.o
AR block/built-in.a
CC drivers/scsi/scsi_sysctl.o
CC kernel/time/tick-oneshot.o
CC drivers/acpi/acpica/psobject.o
CC drivers/gpu/drm/i915/intel_clock_gating.o
CC drivers/base/power/trace.o
CC net/core/flow_offload.o
CC lib/vsprintf.o
CC drivers/scsi/scsi_proc.o
CC drivers/net/phy/phy-core.o
CC drivers/tty/tty_baudrate.o
CC net/wireless/ibss.o
CC drivers/acpi/ac.o
CC mm/mremap.o
CC net/sunrpc/sysfs.o
CC lib/win_minmax.o
CC drivers/scsi/scsi_debugfs.o
CC drivers/gpu/drm/i915/intel_device_info.o
CC net/ipv4/udp.o
CC fs/lockd/host.o
CC drivers/ata/libata-scsi.o
CC kernel/time/tick-sched.o
CC net/ipv6/reassembly.o
CC net/ipv6/tcp_ipv6.o
CC drivers/gpu/drm/virtio/virtgpu_submit.o
CC drivers/acpi/acpica/psopcode.o
CC kernel/trace/trace_seq.o
CC arch/x86/kernel/tsc.o
CC drivers/acpi/acpica/psopinfo.o
CC mm/msync.o
CC fs/ext4/fast_commit.o
CC drivers/net/phy/phy_device.o
CC lib/xarray.o
AR kernel/cgroup/built-in.a
CC net/netfilter/nf_nat_ftp.o
CC drivers/gpu/drm/i915/intel_memory_region.o
CC drivers/ata/libata-eh.o
CC drivers/acpi/button.o
CC drivers/tty/tty_jobctrl.o
CC mm/page_vma_mapped.o
AR drivers/base/power/built-in.a
CC drivers/base/component.o
CC drivers/scsi/scsi_trace.o
CC fs/lockd/svc.o
CC kernel/events/ring_buffer.o
CC drivers/acpi/acpica/psparse.o
CC drivers/scsi/scsi_logging.o
CC drivers/net/phy/linkmode.o
CC kernel/trace/trace_stat.o
CC fs/lockd/svclock.o
CC drivers/ata/libata-transport.o
CC drivers/net/phy/mdio_bus.o
CC drivers/gpu/drm/i915/intel_pcode.o
CC net/core/gro.o
CC net/netfilter/nf_nat_irc.o
AR drivers/gpu/drm/virtio/built-in.a
CC drivers/tty/n_null.o
CC kernel/trace/trace_printk.o
CC net/wireless/sme.o
CC fs/ext4/orphan.o
CC drivers/acpi/acpica/psscope.o
CC mm/pagewalk.o
CC drivers/acpi/fan_core.o
CC kernel/time/timer_migration.o
CC drivers/ata/libata-trace.o
CC drivers/base/core.o
CC arch/x86/kernel/tsc_msr.o
CC lib/lockref.o
CC net/mac80211/vht.o
CC net/wireless/chan.o
CC arch/x86/kernel/io_delay.o
CC fs/nfs/namespace.o
CC net/ipv4/udplite.o
CC net/netfilter/nf_nat_sip.o
CC drivers/scsi/scsi_pm.o
CC fs/ext4/acl.o
CC net/mac80211/he.o
CC drivers/acpi/acpica/pstree.o
CC net/mac80211/s1g.o
CC drivers/base/bus.o
CC fs/lockd/svcshare.o
CC kernel/exec_domain.o
CC net/netfilter/x_tables.o
CC drivers/tty/pty.o
CC kernel/panic.o
CC drivers/tty/tty_audit.o
CC kernel/trace/pid_list.o
CC fs/lockd/svcproc.o
CC drivers/net/phy/mdio_device.o
CC arch/x86/kernel/rtc.o
CC net/sunrpc/svc_xprt.o
CC net/ipv4/udp_offload.o
CC drivers/acpi/fan_attr.o
CC net/netfilter/xt_tcpudp.o
CC drivers/acpi/acpica/psutils.o
CC net/ipv4/arp.o
CC lib/bcd.o
CC drivers/gpu/drm/i915/intel_region_ttm.o
CC mm/pgtable-generic.o
CC fs/autofs/init.o
CC lib/sort.o
CC fs/autofs/inode.o
CC net/sunrpc/xprtmultipath.o
CC lib/parser.o
CC drivers/base/dd.o
CC drivers/scsi/scsi_bsg.o
CC drivers/net/phy/swphy.o
CC net/netfilter/xt_CONNSECMARK.o
CC drivers/ata/libata-sata.o
CC fs/nfs/mount_clnt.o
CC drivers/tty/sysrq.o
CC drivers/ata/libata-sff.o
CC drivers/acpi/acpica/pswalk.o
CC drivers/net/phy/fixed_phy.o
CC arch/x86/kernel/resource.o
CC fs/9p/vfs_super.o
CC net/sunrpc/stats.o
CC fs/nfs/nfstrace.o
CC drivers/net/phy/realtek.o
CC kernel/trace/trace_sched_switch.o
CC lib/debug_locks.o
CC fs/nfs/export.o
CC fs/9p/vfs_inode.o
AS arch/x86/kernel/irqflags.o
CC arch/x86/kernel/static_call.o
CC fs/lockd/svcsubs.o
CC fs/9p/vfs_inode_dotl.o
CC fs/lockd/mon.o
CC net/core/netdev-genl.o
CC lib/random32.o
CC fs/autofs/root.o
CC drivers/acpi/acpica/psxface.o
CC mm/rmap.o
CC drivers/ata/libata-pmp.o
CC drivers/scsi/scsi_common.o
CC kernel/time/vsyscall.o
CC net/netfilter/xt_NFLOG.o
CC net/core/netdev-genl-gen.o
CC fs/ext4/xattr_security.o
CC kernel/events/callchain.o
CC drivers/gpu/drm/i915/intel_runtime_pm.o
CC net/ipv6/ping.o
CC drivers/scsi/scsi_transport_spi.o
CC net/ipv4/icmp.o
CC lib/bust_spinlocks.o
CC drivers/firewire/init_ohci1394_dma.o
CC arch/x86/kernel/process.o
CC drivers/cdrom/cdrom.o
AR drivers/auxdisplay/built-in.a
CC drivers/acpi/acpica/rsaddr.o
CC fs/9p/vfs_addr.o
CC drivers/pcmcia/cs.o
CC kernel/trace/trace_nop.o
CC kernel/time/timekeeping_debug.o
CC drivers/ata/libata-acpi.o
CC net/ipv6/exthdrs.o
CC drivers/scsi/virtio_scsi.o
AR drivers/tty/built-in.a
CC mm/vmalloc.o
CC fs/nfs/sysfs.o
CC lib/kasprintf.o
CC lib/bitmap.o
CC net/ipv4/devinet.o
CC net/netfilter/xt_SECMARK.o
CC drivers/acpi/acpica/rscalc.o
CC drivers/base/syscore.o
CC fs/9p/vfs_file.o
CC fs/autofs/symlink.o
AR drivers/net/phy/built-in.a
CC arch/x86/kernel/ptrace.o
CC drivers/net/mdio/acpi_mdio.o
CC fs/autofs/waitq.o
AR fs/ext4/built-in.a
AR drivers/net/pcs/built-in.a
CC fs/autofs/expire.o
CC net/ipv4/af_inet.o
CC fs/lockd/trace.o
CC fs/autofs/dev-ioctl.o
AR drivers/net/ethernet/3com/built-in.a
CC net/ipv6/datagram.o
CC kernel/events/hw_breakpoint.o
CC drivers/net/ethernet/8390/ne2k-pci.o
AR drivers/firewire/built-in.a
CC kernel/time/namespace.o
CC drivers/net/ethernet/8390/8390.o
CC arch/x86/kernel/tls.o
CC drivers/ata/libata-pata-timings.o
CC fs/lockd/xdr.o
CC kernel/trace/blktrace.o
CC drivers/acpi/acpica/rscreate.o
CC fs/lockd/clnt4xdr.o
CC drivers/usb/common/common.o
CC net/core/gso.o
CC drivers/pcmcia/socket_sysfs.o
CC lib/scatterlist.o
CC net/mac80211/ibss.o
CC net/mac80211/iface.o
CC drivers/gpu/drm/i915/intel_sbi.o
CC drivers/usb/core/usb.o
AR drivers/usb/phy/built-in.a
CC drivers/acpi/fan_hwmon.o
CC net/wireless/ethtool.o
CC drivers/usb/mon/mon_main.o
CC net/netfilter/xt_TCPMSS.o
CC drivers/usb/host/pci-quirks.o
CC fs/9p/vfs_dir.o
CC drivers/acpi/acpica/rsdumpinfo.o
CC drivers/usb/host/ehci-hcd.o
CC net/mac80211/link.o
CC net/wireless/mesh.o
CC drivers/net/mdio/fwnode_mdio.o
CC drivers/scsi/sd.o
CC net/netfilter/xt_conntrack.o
AR fs/autofs/built-in.a
AR drivers/net/ethernet/adaptec/built-in.a
CC drivers/acpi/acpi_video.o
CC drivers/gpu/drm/i915/intel_step.o
AR drivers/net/ethernet/agere/built-in.a
AR kernel/time/built-in.a
CC drivers/gpu/drm/i915/intel_uncore.o
CC net/sunrpc/sysctl.o
AR drivers/net/ethernet/alacritech/built-in.a
CC drivers/base/driver.o
CC drivers/base/class.o
CC arch/x86/kernel/step.o
CC drivers/ata/ahci.o
CC net/wireless/ap.o
CC drivers/usb/common/debug.o
CC drivers/pcmcia/cardbus.o
AR drivers/cdrom/built-in.a
CC fs/lockd/xdr4.o
CC drivers/acpi/acpica/rsinfo.o
CC fs/lockd/svc4proc.o
CC kernel/trace/trace_events.o
CC arch/x86/kernel/i8237.o
CC kernel/trace/trace_export.o
AR drivers/usb/common/built-in.a
CC kernel/cpu.o
CC drivers/scsi/sr.o
CC drivers/scsi/sr_ioctl.o
CC drivers/scsi/sr_vendor.o
AR drivers/net/ethernet/8390/built-in.a
CC drivers/usb/mon/mon_stat.o
AR drivers/net/ethernet/alteon/built-in.a
AR drivers/net/ethernet/amazon/built-in.a
AR drivers/net/ethernet/amd/built-in.a
CC kernel/events/uprobes.o
CC drivers/pcmcia/ds.o
AR drivers/net/ethernet/aquantia/built-in.a
AR drivers/net/ethernet/arc/built-in.a
CC drivers/input/serio/serio.o
AR drivers/net/ethernet/asix/built-in.a
CC fs/9p/vfs_dentry.o
AR drivers/net/ethernet/atheros/built-in.a
CC drivers/input/keyboard/atkbd.o
CC drivers/acpi/acpica/rsio.o
CC net/core/net-sysfs.o
AR drivers/net/ethernet/cadence/built-in.a
CC fs/lockd/procfs.o
CC drivers/net/ethernet/broadcom/bnx2.o
CC drivers/usb/core/hub.o
CC fs/9p/v9fs.o
CC lib/list_sort.o
AR net/sunrpc/built-in.a
CC drivers/net/ethernet/broadcom/tg3.o
CC net/ipv6/ip6_flowlabel.o
AR drivers/net/wireless/admtek/built-in.a
CC arch/x86/kernel/stacktrace.o
AR drivers/net/wireless/ath/built-in.a
CC lib/uuid.o
AR drivers/net/mdio/built-in.a
AR drivers/net/wireless/atmel/built-in.a
CC drivers/usb/core/hcd.o
CC drivers/usb/core/urb.o
CC drivers/base/platform.o
AR drivers/net/wireless/broadcom/built-in.a
CC drivers/acpi/acpica/rsirq.o
CC lib/iov_iter.o
AR drivers/net/wireless/intel/built-in.a
AR drivers/net/wireless/intersil/built-in.a
CC drivers/pcmcia/pcmcia_resource.o
CC drivers/usb/mon/mon_text.o
AR drivers/net/ethernet/brocade/built-in.a
AR drivers/net/wireless/marvell/built-in.a
CC kernel/exit.o
CC kernel/softirq.o
CC drivers/gpu/drm/i915/intel_wakeref.o
CC drivers/rtc/lib.o
AR drivers/net/wireless/mediatek/built-in.a
CC kernel/trace/trace_event_perf.o
CC net/ipv4/igmp.o
AR drivers/net/wireless/microchip/built-in.a
CC net/netfilter/xt_policy.o
AR drivers/net/ethernet/cavium/common/built-in.a
AR drivers/net/wireless/purelifi/built-in.a
AR drivers/net/ethernet/cavium/thunder/built-in.a
AR drivers/net/wireless/quantenna/built-in.a
AR drivers/net/ethernet/cavium/liquidio/built-in.a
AR drivers/net/wireless/ralink/built-in.a
AR drivers/net/ethernet/cavium/octeon/built-in.a
AR drivers/net/ethernet/cavium/built-in.a
AR drivers/net/wireless/realtek/built-in.a
CC net/wireless/trace.o
AR drivers/net/wireless/rsi/built-in.a
CC fs/9p/fid.o
AR drivers/net/wireless/silabs/built-in.a
CC drivers/input/serio/i8042.o
AR drivers/net/wireless/st/built-in.a
CC drivers/gpu/drm/i915/vlv_sideband.o
CC drivers/acpi/acpica/rslist.o
AR drivers/net/wireless/ti/built-in.a
CC drivers/ata/libahci.o
AR drivers/net/wireless/zydas/built-in.a
CC drivers/scsi/sg.o
AR drivers/net/wireless/virtual/built-in.a
AR drivers/net/wireless/built-in.a
CC net/netfilter/xt_state.o
AR fs/lockd/built-in.a
AR fs/hostfs/built-in.a
CC fs/debugfs/inode.o
AR drivers/net/usb/built-in.a
CC [M] net/netfilter/nf_log_syslog.o
CC drivers/acpi/video_detect.o
CC fs/9p/xattr.o
CC arch/x86/kernel/reboot.o
CC arch/x86/kernel/msr.o
CC mm/process_vm_access.o
AR drivers/input/keyboard/built-in.a
CC drivers/input/mouse/psmouse-base.o
CC drivers/acpi/acpica/rsmemory.o
CC drivers/rtc/class.o
CC drivers/input/mouse/synaptics.o
CC drivers/usb/mon/mon_bin.o
CC drivers/base/cpu.o
CC drivers/base/firmware.o
CC net/ipv6/inet6_connection_sock.o
CC drivers/base/init.o
AR kernel/events/built-in.a
CC drivers/acpi/acpica/rsmisc.o
CC drivers/usb/core/message.o
CC drivers/gpu/drm/i915/vlv_suspend.o
CC drivers/pcmcia/cistpl.o
AR fs/9p/built-in.a
CC fs/tracefs/inode.o
CC fs/nfs/fs_context.o
CC net/ipv6/udp_offload.o
CC fs/nfs/nfsroot.o
CC drivers/usb/core/driver.o
CC fs/nfs/sysctl.o
CC kernel/resource.o
CC drivers/pcmcia/pcmcia_cis.o
CC [M] fs/efivarfs/inode.o
CC fs/open.o
CC fs/tracefs/event_inode.o
CC fs/debugfs/file.o
CC drivers/base/map.o
CC [M] net/netfilter/xt_mark.o
CC net/core/hotdata.o
CC arch/x86/kernel/cpuid.o
CC drivers/rtc/interface.o
CC [M] fs/efivarfs/file.o
CC mm/page_alloc.o
CC drivers/input/serio/serport.o
CC drivers/acpi/processor_driver.o
CC drivers/usb/host/ehci-pci.o
CC drivers/acpi/acpica/rsserial.o
CC kernel/trace/trace_events_filter.o
CC net/wireless/ocb.o
CC [M] fs/efivarfs/super.o
CC arch/x86/kernel/early-quirks.o
CC lib/clz_ctz.o
CC drivers/rtc/nvmem.o
CC net/wireless/pmsr.o
CC net/mac80211/rate.o
CC kernel/trace/trace_events_trigger.o
CC lib/bsearch.o
CC drivers/base/devres.o
CC drivers/scsi/scsi_sysfs.o
CC drivers/ata/ata_piix.o
CC kernel/sysctl.o
AR drivers/usb/mon/built-in.a
CC drivers/usb/class/usblp.o
CC drivers/acpi/acpica/rsutils.o
CC [M] fs/efivarfs/vars.o
CC net/ipv6/seg6.o
CC lib/find_bit.o
CC net/mac80211/michael.o
CC drivers/rtc/dev.o
CC kernel/capability.o
CC net/ipv6/fib6_notifier.o
CC drivers/acpi/acpica/rsxface.o
CC drivers/usb/storage/scsiglue.o
CC drivers/input/mouse/focaltech.o
CC drivers/input/serio/libps2.o
CC drivers/usb/host/ohci-hcd.o
CC drivers/usb/host/ohci-pci.o
GEN net/wireless/shipped-certs.c
AR fs/tracefs/built-in.a
CC drivers/usb/host/uhci-hcd.o
CC [M] net/netfilter/xt_nat.o
CC drivers/input/mouse/alps.o
CC drivers/ata/pata_amd.o
CC [M] net/netfilter/xt_LOG.o
CC drivers/ata/pata_oldpiix.o
CC drivers/gpu/drm/i915/soc/intel_dram.o
CC net/core/net-procfs.o
CC [M] net/netfilter/xt_MASQUERADE.o
CC drivers/usb/storage/protocol.o
CC kernel/ptrace.o
CC net/ipv4/fib_frontend.o
CC lib/llist.o
CC fs/read_write.o
CC drivers/pcmcia/rsrc_mgr.o
CC net/ipv4/fib_semantics.o
AR fs/debugfs/built-in.a
CC drivers/usb/core/config.o
CC net/ipv4/fib_trie.o
CC lib/lwq.o
CC drivers/base/attribute_container.o
CC drivers/acpi/acpica/tbdata.o
CC arch/x86/kernel/smp.o
CC drivers/rtc/proc.o
CC lib/memweight.o
LD [M] fs/efivarfs/efivarfs.o
CC drivers/acpi/acpica/tbfadt.o
CC fs/file_table.o
AR drivers/usb/class/built-in.a
CC net/ipv6/rpl.o
CC drivers/input/mouse/byd.o
AR drivers/input/serio/built-in.a
CC lib/kfifo.o
CC drivers/usb/host/xhci.o
CC kernel/user.o
CC drivers/i2c/algos/i2c-algo-bit.o
CC drivers/rtc/sysfs.o
CC drivers/acpi/acpica/tbfind.o
CC net/mac80211/tkip.o
CC lib/percpu-refcount.o
CC kernel/trace/trace_eprobe.o
CC net/ipv4/fib_notifier.o
AR drivers/scsi/built-in.a
CC net/ipv6/ioam6.o
CC kernel/trace/trace_kprobe.o
CC drivers/pcmcia/rsrc_nonstatic.o
CC net/mac80211/aes_cmac.o
CC drivers/base/transport_class.o
CC drivers/i2c/busses/i2c-i801.o
CC drivers/usb/storage/transport.o
CC kernel/signal.o
CC drivers/ata/pata_sch.o
CC drivers/pcmcia/yenta_socket.o
AR drivers/net/ethernet/chelsio/built-in.a
AR drivers/net/ethernet/cisco/built-in.a
AR drivers/net/ethernet/cortina/built-in.a
AR drivers/net/ethernet/dec/tulip/built-in.a
AR drivers/net/ethernet/dec/built-in.a
CC drivers/acpi/acpica/tbinstal.o
AR drivers/net/ethernet/dlink/built-in.a
CC drivers/acpi/acpica/tbprint.o
AR drivers/net/ethernet/emulex/built-in.a
CC fs/super.o
CC drivers/usb/core/file.o
CC drivers/base/topology.o
CC fs/nfs/nfs3super.o
CC fs/char_dev.o
AR drivers/i2c/muxes/built-in.a
CC [M] net/netfilter/xt_addrtype.o
CC fs/nfs/nfs3client.o
CC drivers/gpu/drm/i915/soc/intel_gmch.o
CC fs/nfs/nfs3proc.o
CC net/core/netpoll.o
CC drivers/base/container.o
CC drivers/rtc/rtc-mc146818-lib.o
CC drivers/rtc/rtc-cmos.o
CC drivers/usb/core/buffer.o
CC fs/stat.o
CC drivers/gpu/drm/i915/soc/intel_pch.o
CC lib/rhashtable.o
CC drivers/usb/host/xhci-mem.o
CC drivers/net/mii.o
CC drivers/input/mouse/logips2pp.o
CC drivers/acpi/acpica/tbutils.o
CC arch/x86/kernel/smpboot.o
AR drivers/gpu/drm/panel/built-in.a
AR drivers/i2c/algos/built-in.a
CC drivers/ata/pata_mpiix.o
CC drivers/i2c/i2c-boardinfo.o
AR drivers/gpu/drm/bridge/analogix/built-in.a
CC mm/init-mm.o
AR drivers/gpu/drm/bridge/cadence/built-in.a
CC drivers/net/loopback.o
AR drivers/gpu/drm/bridge/imx/built-in.a
AR drivers/gpu/drm/bridge/synopsys/built-in.a
CC drivers/usb/host/xhci-ext-caps.o
AR drivers/gpu/drm/bridge/built-in.a
CC drivers/usb/core/sysfs.o
AR drivers/gpu/drm/hisilicon/built-in.a
CC drivers/usb/host/xhci-ring.o
AR drivers/gpu/drm/mxsfb/built-in.a
AR drivers/gpu/drm/tiny/built-in.a
AR drivers/gpu/drm/xlnx/built-in.a
CC drivers/base/property.o
AR drivers/gpu/drm/gud/built-in.a
CC drivers/usb/host/xhci-hub.o
AR drivers/gpu/drm/solomon/built-in.a
CC drivers/usb/storage/usb.o
CC [M] drivers/gpu/drm/scheduler/sched_main.o
CC fs/exec.o
CC drivers/usb/host/xhci-dbg.o
CC drivers/base/cacheinfo.o
CC [M] drivers/gpu/drm/scheduler/sched_fence.o
CC drivers/ata/ata_generic.o
CC [M] drivers/gpu/drm/scheduler/sched_entity.o
AR drivers/i2c/busses/built-in.a
CC drivers/i2c/i2c-core-base.o
CC drivers/acpi/acpica/tbxface.o
CC drivers/input/mouse/lifebook.o
CC fs/nfs/nfs3xdr.o
AR drivers/pcmcia/built-in.a
CC drivers/usb/host/xhci-trace.o
AR drivers/i3c/built-in.a
CC drivers/gpu/drm/i915/i915_memcpy.o
CC net/wireless/shipped-certs.o
CC fs/nfs/nfs3acl.o
CC drivers/gpu/drm/i915/i915_mm.o
CC fs/pipe.o
CC mm/memblock.o
CC drivers/usb/host/xhci-debugfs.o
CC drivers/acpi/acpica/tbxfload.o
CC drivers/base/swnode.o
AR drivers/rtc/built-in.a
CC drivers/usb/storage/initializers.o
CC drivers/net/netconsole.o
AR net/netfilter/built-in.a
CC net/ipv6/sysctl_net_ipv6.o
CC drivers/usb/storage/sierra_ms.o
CC drivers/usb/host/xhci-pci.o
CC drivers/gpu/drm/i915/i915_sw_fence.o
CC drivers/gpu/drm/i915/i915_sw_fence_work.o
CC net/ipv4/inet_fragment.o
CC drivers/net/virtio_net.o
CC drivers/acpi/acpica/tbxfroot.o
CC lib/base64.o
CC net/ipv6/xfrm6_policy.o
CC fs/namei.o
CC kernel/trace/error_report-traces.o
CC kernel/trace/power-traces.o
CC kernel/trace/rpm-traces.o
CC lib/once.o
CC net/core/fib_rules.o
CC drivers/input/mouse/trackpoint.o
CC drivers/usb/core/endpoint.o
CC drivers/usb/core/devio.o
CC drivers/usb/core/notify.o
CC arch/x86/kernel/tsc_sync.o
HOSTCC drivers/gpu/drm/xe/xe_gen_wa_oob
AR drivers/input/joystick/built-in.a
AR drivers/ata/built-in.a
CC drivers/acpi/acpica/utaddress.o
CC arch/x86/kernel/setup_percpu.o
CC drivers/input/mouse/cypress_ps2.o
CC fs/nfs/nfs4proc.o
CC net/ipv4/ping.o
GEN xe_wa_oob.c xe_wa_oob.h
CC [M] drivers/gpu/drm/xe/xe_bb.o
CC drivers/acpi/acpica/utalloc.o
CC drivers/gpu/drm/i915/i915_syncmap.o
CC net/core/net-traces.o
CC lib/refcount.o
CC lib/rcuref.o
CC drivers/usb/core/generic.o
CC drivers/usb/storage/option_ms.o
CC drivers/acpi/acpica/utascii.o
CC drivers/gpu/drm/i915/i915_user_extensions.o
CC drivers/base/auxiliary.o
CC drivers/input/mouse/psmouse-smbus.o
CC arch/x86/kernel/mpparse.o
CC arch/x86/kernel/trace_clock.o
CC lib/usercopy.o
CC drivers/usb/storage/usual-tables.o
CC drivers/gpu/drm/drm_aperture.o
CC net/ipv4/ip_tunnel_core.o
LD [M] drivers/gpu/drm/scheduler/gpu-sched.o
CC drivers/net/net_failover.o
CC net/core/selftests.o
CC drivers/acpi/acpica/utbuffer.o
CC fs/nfs/nfs4xdr.o
CC net/mac80211/aes_gmac.o
AR drivers/input/tablet/built-in.a
AR drivers/input/touchscreen/built-in.a
AR drivers/input/misc/built-in.a
CC kernel/sys.o
CC drivers/input/input.o
CC drivers/usb/core/quirks.o
CC arch/x86/kernel/trace.o
CC drivers/acpi/processor_thermal.o
CC drivers/acpi/acpica/utcksum.o
CC [M] drivers/gpu/drm/xe/xe_bo.o
CC kernel/umh.o
CC net/core/ptp_classifier.o
CC drivers/gpu/drm/i915/i915_debugfs.o
CC fs/fcntl.o
CC drivers/acpi/processor_idle.o
CC drivers/usb/core/devices.o
CC mm/slub.o
CC lib/errseq.o
CC drivers/acpi/acpica/utcopy.o
CC net/mac80211/fils_aead.o
CC drivers/base/devtmpfs.o
CC net/ipv6/xfrm6_state.o
CC drivers/usb/core/phy.o
CC lib/bucket_locks.o
CC lib/generic-radix-tree.o
CC lib/bitmap-str.o
CC drivers/i2c/i2c-core-smbus.o
CC drivers/base/module.o
CC kernel/trace/trace_dynevent.o
CC arch/x86/kernel/rethook.o
AR drivers/usb/storage/built-in.a
CC arch/x86/kernel/vmcore_info_32.o
AR drivers/usb/misc/built-in.a
CC drivers/acpi/acpica/utexcep.o
AR drivers/input/mouse/built-in.a
CC drivers/input/input-compat.o
CC net/ipv4/gre_offload.o
CC drivers/acpi/processor_throttling.o
CC drivers/usb/core/port.o
CC drivers/i2c/i2c-core-acpi.o
CC kernel/trace/trace_probe.o
CC arch/x86/kernel/machine_kexec_32.o
CC drivers/input/input-mt.o
CC drivers/usb/early/ehci-dbgp.o
CC drivers/input/input-poller.o
CC kernel/trace/trace_uprobe.o
CC kernel/trace/rethook.o
CC drivers/acpi/acpica/utdebug.o
CC net/ipv4/metrics.o
CC drivers/i2c/i2c-smbus.o
AS arch/x86/kernel/relocate_kernel_32.o
CC net/core/netprio_cgroup.o
CC net/core/netclassid_cgroup.o
CC drivers/gpu/drm/drm_atomic.o
CC drivers/acpi/processor_perflib.o
AR drivers/usb/host/built-in.a
CC arch/x86/kernel/crash_dump_32.o
CC arch/x86/kernel/crash.o
CC net/ipv4/netlink.o
CC drivers/usb/core/hcd-pci.o
CC drivers/usb/core/usb-acpi.o
CC lib/string_helpers.o
CC lib/hexdump.o
CC drivers/base/auxiliary_sysfs.o
CC drivers/acpi/acpica/utdecode.o
CC lib/kstrtox.o
AR drivers/media/i2c/built-in.a
AR drivers/media/tuners/built-in.a
CC drivers/acpi/acpica/utdelete.o
CC lib/iomap.o
AR drivers/media/rc/keymaps/built-in.a
AR drivers/media/rc/built-in.a
CC net/core/dst_cache.o
AR drivers/pps/clients/built-in.a
AR drivers/media/common/b2c2/built-in.a
AR drivers/pps/generators/built-in.a
CC drivers/ptp/ptp_clock.o
CC drivers/pps/pps.o
AR drivers/media/common/saa7146/built-in.a
AR drivers/media/common/siano/built-in.a
CC net/mac80211/cfg.o
AR drivers/media/common/v4l2-tpg/built-in.a
CC drivers/ptp/ptp_chardev.o
AR drivers/media/common/videobuf2/built-in.a
CC net/ipv6/xfrm6_input.o
AR drivers/media/common/built-in.a
CC drivers/pps/kapi.o
CC drivers/pps/sysfs.o
AR drivers/media/platform/allegro-dvt/built-in.a
CC net/mac80211/ethtool.o
AR drivers/media/platform/amlogic/meson-ge2d/built-in.a
CC net/mac80211/rx.o
CC drivers/input/ff-core.o
AR drivers/media/platform/amlogic/built-in.a
AR drivers/media/platform/amphion/built-in.a
CC drivers/gpu/drm/i915/i915_debugfs_params.o
CC drivers/gpu/drm/i915/i915_pmu.o
AR drivers/media/platform/aspeed/built-in.a
CC drivers/base/devcoredump.o
AR drivers/media/platform/atmel/built-in.a
CC drivers/gpu/drm/i915/gt/gen2_engine_cs.o
AR drivers/media/platform/broadcom/built-in.a
CC drivers/gpu/drm/i915/gt/gen6_engine_cs.o
AR drivers/media/platform/cadence/built-in.a
CC drivers/gpu/drm/i915/gt/gen6_ppgtt.o
CC lib/iomap_copy.o
AR drivers/media/platform/imagination/built-in.a
CC drivers/acpi/container.o
CC drivers/acpi/acpica/uterror.o
AR drivers/media/platform/chips-media/coda/built-in.a
AR drivers/usb/early/built-in.a
AR drivers/media/platform/intel/built-in.a
CC drivers/acpi/thermal_lib.o
CC lib/devres.o
AR drivers/media/platform/chips-media/wave5/built-in.a
AR drivers/media/platform/chips-media/built-in.a
CC [M] drivers/gpu/drm/xe/xe_bo_evict.o
AR drivers/media/platform/marvell/built-in.a
CC net/core/gro_cells.o
AR drivers/i2c/built-in.a
AR drivers/media/platform/mediatek/jpeg/built-in.a
CC arch/x86/kernel/module.o
CC net/core/failover.o
CC [M] drivers/gpu/drm/xe/xe_devcoredump.o
AR drivers/media/platform/mediatek/mdp/built-in.a
CC lib/check_signature.o
AR drivers/media/platform/mediatek/vcodec/common/built-in.a
AR drivers/media/platform/mediatek/vcodec/encoder/built-in.a
CC drivers/gpu/drm/drm_atomic_uapi.o
CC [M] drivers/gpu/drm/xe/xe_device.o
AR drivers/media/platform/mediatek/vcodec/decoder/built-in.a
AR drivers/media/platform/mediatek/vcodec/built-in.a
AR drivers/usb/core/built-in.a
AR drivers/usb/built-in.a
CC drivers/input/touchscreen.o
AR drivers/media/platform/mediatek/vpu/built-in.a
CC [M] drivers/gpu/drm/xe/xe_device_sysfs.o
AR drivers/media/platform/mediatek/mdp3/built-in.a
AR drivers/media/platform/mediatek/built-in.a
CC drivers/acpi/acpica/uteval.o
CC lib/interval_tree.o
AR drivers/media/pci/ttpci/built-in.a
CC lib/assoc_array.o
AR drivers/media/platform/microchip/built-in.a
AR drivers/media/pci/b2c2/built-in.a
AR drivers/media/platform/nuvoton/built-in.a
AR drivers/media/pci/pluto2/built-in.a
CC drivers/gpu/drm/drm_auth.o
AR drivers/media/pci/dm1105/built-in.a
CC drivers/acpi/thermal.o
CC lib/bitrev.o
AR drivers/media/platform/nvidia/tegra-vde/built-in.a
AR drivers/media/pci/pt1/built-in.a
CC net/ipv4/nexthop.o
AR drivers/media/platform/nvidia/built-in.a
AR drivers/pps/built-in.a
CC mm/madvise.o
CC fs/nfs/nfs4state.o
AR drivers/media/pci/pt3/built-in.a
CC drivers/acpi/acpica/utglobal.o
AR drivers/media/pci/mantis/built-in.a
AR drivers/media/platform/nxp/dw100/built-in.a
AR drivers/media/pci/ngene/built-in.a
AR drivers/media/platform/nxp/imx-jpeg/built-in.a
AR drivers/media/pci/ddbridge/built-in.a
AR drivers/media/platform/nxp/imx8-isi/built-in.a
AR drivers/media/pci/saa7146/built-in.a
AR drivers/media/platform/nxp/built-in.a
AR drivers/media/pci/smipcie/built-in.a
AR drivers/media/pci/netup_unidvb/built-in.a
AR drivers/media/platform/qcom/camss/built-in.a
AR drivers/media/platform/qcom/venus/built-in.a
AR drivers/media/pci/intel/ipu3/built-in.a
AR drivers/media/platform/qcom/built-in.a
CC drivers/acpi/acpica/uthex.o
AR drivers/media/pci/intel/ivsc/built-in.a
AR drivers/media/pci/intel/built-in.a
AR drivers/media/platform/raspberrypi/pisp_be/built-in.a
CC arch/x86/kernel/doublefault_32.o
AR drivers/media/usb/b2c2/built-in.a
AR drivers/media/pci/built-in.a
AR drivers/media/platform/raspberrypi/built-in.a
CC arch/x86/kernel/early_printk.o
AR drivers/media/usb/dvb-usb/built-in.a
AR drivers/media/platform/renesas/rcar-vin/built-in.a
AR drivers/media/usb/dvb-usb-v2/built-in.a
CC lib/crc-ccitt.o
CC drivers/acpi/nhlt.o
CC drivers/ptp/ptp_sysfs.o
AR drivers/media/usb/s2255/built-in.a
AR drivers/media/mmc/siano/built-in.a
AR drivers/media/platform/renesas/rzg2l-cru/built-in.a
AR drivers/media/mmc/built-in.a
AR drivers/media/usb/siano/built-in.a
AR drivers/media/platform/renesas/vsp1/built-in.a
AR drivers/media/usb/ttusb-budget/built-in.a
CC fs/ioctl.o
AR drivers/media/platform/renesas/built-in.a
CC drivers/base/platform-msi.o
AR drivers/media/usb/ttusb-dec/built-in.a
AR drivers/media/usb/built-in.a
CC fs/readdir.o
AR drivers/media/platform/rockchip/rga/built-in.a
CC fs/select.o
CC lib/crc16.o
CC drivers/acpi/acpica/utids.o
CC [M] drivers/gpu/drm/xe/xe_dma_buf.o
AR drivers/media/platform/rockchip/rkisp1/built-in.a
CC net/mac80211/spectmgmt.o
AR drivers/media/platform/rockchip/built-in.a
CC [M] drivers/gpu/drm/xe/xe_drm_client.o
AR drivers/media/platform/samsung/exynos-gsc/built-in.a
AR drivers/media/platform/samsung/exynos4-is/built-in.a
CC drivers/ptp/ptp_vclock.o
AR drivers/media/platform/samsung/s3c-camif/built-in.a
AR drivers/media/platform/samsung/s5p-g2d/built-in.a
AR drivers/media/platform/samsung/s5p-jpeg/built-in.a
CC kernel/workqueue.o
AR kernel/trace/built-in.a
AR drivers/media/platform/samsung/s5p-mfc/built-in.a
CC drivers/acpi/acpica/utinit.o
CC kernel/pid.o
AR drivers/media/platform/samsung/built-in.a
CC drivers/ptp/ptp_kvm_x86.o
CC [M] drivers/gpu/drm/xe/xe_exec.o
CC drivers/input/ff-memless.o
AR drivers/net/ethernet/broadcom/built-in.a
AR drivers/media/platform/st/sti/bdisp/built-in.a
AR drivers/media/platform/sunxi/sun4i-csi/built-in.a
CC drivers/ptp/ptp_kvm_common.o
AR drivers/media/platform/sunxi/sun6i-csi/built-in.a
AR drivers/net/ethernet/engleder/built-in.a
AR drivers/media/platform/st/sti/c8sectpfe/built-in.a
AR drivers/media/platform/sunxi/sun6i-mipi-csi2/built-in.a
AR drivers/net/ethernet/ezchip/built-in.a
CC [M] drivers/gpu/drm/xe/xe_execlist.o
AR drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/built-in.a
AR drivers/media/platform/st/sti/delta/built-in.a
AR drivers/net/ethernet/fujitsu/built-in.a
AR drivers/net/ethernet/fungible/built-in.a
AR drivers/media/platform/sunxi/sun8i-di/built-in.a
CC arch/x86/kernel/hpet.o
AR drivers/media/platform/st/sti/hva/built-in.a
AR drivers/net/ethernet/google/built-in.a
AR drivers/media/platform/sunxi/sun8i-rotate/built-in.a
AR drivers/media/platform/ti/am437x/built-in.a
AR drivers/media/platform/st/stm32/built-in.a
AR drivers/net/ethernet/huawei/built-in.a
AR drivers/media/platform/sunxi/built-in.a
AR drivers/media/platform/st/built-in.a
AR drivers/media/platform/ti/cal/built-in.a
CC fs/dcache.o
AR drivers/media/platform/ti/vpe/built-in.a
AR drivers/media/platform/ti/davinci/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_main.o
AR drivers/media/platform/ti/j721e-csi2rx/built-in.a
AR drivers/media/platform/verisilicon/built-in.a
AR drivers/media/platform/ti/omap/built-in.a
CC net/ipv6/xfrm6_output.o
HOSTCC lib/gen_crc32table
CC drivers/net/ethernet/intel/e1000e/82571.o
CC kernel/task_work.o
AR drivers/media/platform/ti/omap3isp/built-in.a
CC drivers/power/supply/power_supply_core.o
AR drivers/media/platform/ti/built-in.a
CC kernel/extable.o
CC drivers/base/physical_location.o
CC net/ipv6/xfrm6_protocol.o
CC drivers/net/ethernet/intel/e1000e/ich8lan.o
CC drivers/acpi/acpi_memhotplug.o
AR drivers/media/platform/via/built-in.a
CC drivers/acpi/acpica/utlock.o
AR drivers/media/platform/xilinx/built-in.a
AR drivers/media/platform/built-in.a
CC drivers/net/ethernet/intel/e1000/e1000_hw.o
CC lib/xxhash.o
CC drivers/gpu/drm/i915/gt/gen7_renderclear.o
AR drivers/media/firewire/built-in.a
AR drivers/media/spi/built-in.a
CC drivers/gpu/drm/drm_blend.o
CC drivers/base/trace.o
AR drivers/media/test-drivers/built-in.a
AR drivers/media/built-in.a
CC arch/x86/kernel/amd_nb.o
CC arch/x86/kernel/kvm.o
CC drivers/acpi/ioapic.o
CC drivers/net/ethernet/intel/e1000e/80003es2lan.o
CC [M] drivers/gpu/drm/xe/xe_exec_queue.o
CC drivers/gpu/drm/i915/gt/gen8_engine_cs.o
CC drivers/acpi/acpica/utmath.o
CC mm/page_io.o
CC drivers/hwmon/hwmon.o
CC drivers/acpi/battery.o
CC fs/inode.o
CC drivers/gpu/drm/i915/gt/gen8_ppgtt.o
AR drivers/ptp/built-in.a
CC kernel/params.o
CC drivers/input/sparse-keymap.o
CC kernel/kthread.o
CC fs/attr.o
CC fs/nfs/nfs4renewd.o
CC fs/nfs/nfs4super.o
CC [M] drivers/gpu/drm/xe/xe_force_wake.o
CC kernel/sys_ni.o
CC lib/genalloc.o
AR drivers/net/ethernet/i825xx/built-in.a
CC drivers/power/supply/power_supply_sysfs.o
CC net/ipv6/netfilter.o
CC drivers/acpi/acpica/utmisc.o
CC drivers/net/ethernet/intel/e1000e/mac.o
CC drivers/net/ethernet/intel/e1000e/manage.o
CC fs/nfs/nfs4file.o
CC mm/swap_state.o
CC drivers/gpu/drm/drm_bridge.o
AR drivers/base/built-in.a
CC kernel/nsproxy.o
CC arch/x86/kernel/kvmclock.o
AR drivers/thermal/broadcom/built-in.a
AR drivers/thermal/renesas/built-in.a
AR net/core/built-in.a
AR drivers/thermal/samsung/built-in.a
CC drivers/thermal/intel/intel_tcc.o
CC drivers/acpi/bgrt.o
AR drivers/thermal/st/built-in.a
CC drivers/gpu/drm/drm_cache.o
AR drivers/thermal/qcom/built-in.a
CC drivers/acpi/spcr.o
CC fs/bad_inode.o
CC drivers/gpu/drm/drm_client.o
CC drivers/thermal/intel/therm_throt.o
CC fs/file.o
CC lib/percpu_counter.o
CC drivers/input/vivaldi-fmap.o
CC drivers/acpi/acpica/utmutex.o
CC net/ipv6/proc.o
CC kernel/notifier.o
CC drivers/net/ethernet/intel/e1000/e1000_ethtool.o
CC mm/swapfile.o
CC drivers/power/supply/power_supply_leds.o
CC lib/audit.o
CC drivers/gpu/drm/drm_client_modeset.o
CC arch/x86/kernel/paravirt.o
CC arch/x86/kernel/pvclock.o
CC kernel/ksysfs.o
CC kernel/cred.o
CC drivers/net/ethernet/intel/e100.o
CC net/ipv6/syncookies.o
CC drivers/net/ethernet/intel/e1000e/nvm.o
CC drivers/input/input-leds.o
CC drivers/acpi/acpica/utnonansi.o
CC drivers/input/evdev.o
AR drivers/hwmon/built-in.a
CC drivers/power/supply/power_supply_hwmon.o
CC fs/filesystems.o
AR drivers/watchdog/built-in.a
CC fs/namespace.o
CC lib/syscall.o
AR drivers/net/ethernet/microsoft/built-in.a
CC net/ipv6/calipso.o
CC kernel/reboot.o
CC [M] drivers/gpu/drm/xe/xe_ggtt.o
CC mm/swap_slots.o
CC net/ipv4/udp_tunnel_stub.o
CC fs/seq_file.o
CC fs/nfs/delegation.o
CC mm/dmapool.o
CC mm/hugetlb.o
CC kernel/async.o
CC drivers/gpu/drm/drm_color_mgmt.o
CC fs/xattr.o
CC lib/errname.o
CC drivers/acpi/acpica/utobject.o
CC drivers/acpi/acpica/utosi.o
AR net/wireless/built-in.a
CC lib/nlattr.o
CC drivers/gpu/drm/i915/gt/intel_breadcrumbs.o
CC fs/nfs/nfs4idmap.o
CC drivers/md/md.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.o
CC drivers/md/md-bitmap.o
CC kernel/range.o
CC drivers/gpu/drm/i915/gt/intel_context.o
AR drivers/power/supply/built-in.a
CC kernel/smpboot.o
CC drivers/gpu/drm/i915/gt/intel_context_sseu.o
AR drivers/power/built-in.a
CC arch/x86/kernel/pcspeaker.o
CC drivers/acpi/acpica/utownerid.o
CC kernel/ucount.o
CC arch/x86/kernel/check.o
CC net/ipv6/ah6.o
CC drivers/md/md-autodetect.o
CC lib/cpu_rmap.o
CC mm/mmu_notifier.o
CC drivers/md/dm.o
CC drivers/acpi/acpica/utpredef.o
CC drivers/acpi/acpica/utresdecode.o
CC net/ipv6/esp6.o
CC fs/libfs.o
CC drivers/gpu/drm/i915/gt/intel_engine_cs.o
CC [M] drivers/gpu/drm/xe/xe_gpu_scheduler.o
CC arch/x86/kernel/uprobes.o
CC drivers/md/dm-table.o
CC drivers/cpufreq/cpufreq.o
CC arch/x86/kernel/perf_regs.o
AR drivers/input/built-in.a
CC drivers/cpufreq/freq_table.o
AR drivers/mmc/built-in.a
CC drivers/cpuidle/governors/menu.o
CC drivers/cpuidle/cpuidle.o
CC kernel/regset.o
CC kernel/ksyms_common.o
CC drivers/cpuidle/driver.o
CC kernel/groups.o
AR drivers/ufs/built-in.a
CC drivers/gpu/drm/drm_connector.o
CC drivers/gpu/drm/i915/gt/intel_engine_heartbeat.o
CC kernel/kcmp.o
CC kernel/freezer.o
CC drivers/acpi/acpica/utresrc.o
CC drivers/acpi/acpica/utstate.o
CC drivers/net/ethernet/intel/e1000e/phy.o
AR drivers/thermal/intel/built-in.a
CC drivers/cpuidle/governor.o
CC arch/x86/kernel/tracepoint.o
AR drivers/thermal/tegra/built-in.a
CC net/ipv4/ip_tunnel.o
AR drivers/thermal/mediatek/built-in.a
CC drivers/thermal/thermal_core.o
CC drivers/md/dm-target.o
CC kernel/profile.o
CC drivers/net/ethernet/intel/e1000/e1000_param.o
CC [M] drivers/gpu/drm/xe/xe_gsc.o
CC kernel/stacktrace.o
CC drivers/cpuidle/governors/haltpoll.o
CC drivers/gpu/drm/drm_crtc.o
CC lib/dynamic_queue_limits.o
CC net/mac80211/tx.o
CC drivers/cpufreq/cpufreq_performance.o
CC drivers/acpi/acpica/utstring.o
CC arch/x86/kernel/itmt.o
CC drivers/md/dm-linear.o
CC drivers/cpufreq/cpufreq_userspace.o
CC arch/x86/kernel/umip.o
CC drivers/cpuidle/sysfs.o
CC mm/migrate.o
CC drivers/md/dm-stripe.o
CC fs/fs-writeback.o
CC net/ipv6/sit.o
CC drivers/acpi/acpica/utstrsuppt.o
CC net/ipv6/addrconf_core.o
CC mm/page_counter.o
CC drivers/acpi/acpica/utstrtoul64.o
CC arch/x86/kernel/unwind_frame.o
CC net/ipv6/exthdrs_core.o
CC drivers/cpuidle/poll_state.o
CC drivers/thermal/thermal_sysfs.o
CC drivers/acpi/acpica/utxface.o
CC drivers/cpuidle/cpuidle-haltpoll.o
CC mm/hugetlb_cgroup.o
CC drivers/md/dm-ioctl.o
CC lib/glob.o
CC net/ipv6/ip6_checksum.o
CC kernel/dma.o
CC net/ipv6/ip6_icmp.o
CC fs/pnode.o
CC drivers/acpi/acpica/utxfinit.o
CC net/ipv6/output_core.o
CC fs/nfs/callback.o
CC drivers/gpu/drm/drm_displayid.o
CC drivers/thermal/thermal_trip.o
CC drivers/cpufreq/cpufreq_ondemand.o
CC drivers/md/dm-io.o
CC drivers/gpu/drm/drm_drv.o
CC fs/nfs/callback_xdr.o
CC fs/nfs/callback_proc.o
CC kernel/smp.o
CC [M] drivers/gpu/drm/xe/xe_gsc_debugfs.o
CC drivers/gpu/drm/drm_dumb_buffers.o
CC net/mac80211/key.o
CC lib/strncpy_from_user.o
CC drivers/cpufreq/cpufreq_governor.o
CC lib/strnlen_user.o
CC drivers/gpu/drm/drm_edid.o
AR drivers/net/ethernet/intel/e1000/built-in.a
CC lib/net_utils.o
CC mm/early_ioremap.o
CC drivers/gpu/drm/i915/gt/intel_engine_pm.o
CC net/ipv6/protocol.o
CC drivers/gpu/drm/i915/gt/intel_engine_user.o
CC drivers/acpi/acpica/utxferror.o
AR drivers/cpuidle/governors/built-in.a
CC net/ipv6/ip6_offload.o
AR drivers/cpuidle/built-in.a
CC drivers/gpu/drm/i915/gt/intel_execlists_submission.o
CC kernel/uid16.o
CC drivers/acpi/acpica/utxfmutex.o
CC net/ipv4/sysctl_net_ipv4.o
CC drivers/gpu/drm/drm_eld.o
AR arch/x86/kernel/built-in.a
AR arch/x86/built-in.a
CC drivers/gpu/drm/drm_encoder.o
CC drivers/thermal/thermal_helpers.o
CC drivers/md/dm-kcopyd.o
CC drivers/thermal/thermal_hwmon.o
CC net/ipv4/proc.o
CC fs/splice.o
CC drivers/gpu/drm/i915/gt/intel_ggtt.o
CC drivers/cpufreq/cpufreq_governor_attr_set.o
CC drivers/net/ethernet/intel/e1000e/param.o
CC drivers/net/ethernet/intel/e1000e/ethtool.o
CC lib/sg_pool.o
AR drivers/acpi/acpica/built-in.a
AR drivers/leds/trigger/built-in.a
AR drivers/firmware/arm_ffa/built-in.a
CC mm/secretmem.o
AR drivers/acpi/built-in.a
AR drivers/leds/blink/built-in.a
AR drivers/firmware/arm_scmi/built-in.a
CC drivers/cpufreq/acpi-cpufreq.o
AR drivers/leds/simple/built-in.a
AR drivers/firmware/broadcom/built-in.a
CC drivers/leds/led-core.o
CC lib/stackdepot.o
AR drivers/firmware/cirrus/built-in.a
AR drivers/firmware/meson/built-in.a
CC lib/asn1_decoder.o
AR drivers/firmware/microchip/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gsc_proxy.o
CC mm/hmm.o
CC net/ipv6/tcpv6_offload.o
CC drivers/gpu/drm/drm_file.o
CC drivers/cpufreq/amd-pstate.o
CC drivers/firmware/efi/efi-bgrt.o
CC kernel/kallsyms.o
CC drivers/firmware/efi/libstub/efi-stub-helper.o
CC drivers/firmware/efi/efi.o
CC mm/memfd.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_fencing.o
CC kernel/acct.o
CC fs/nfs/nfs4namespace.o
CC drivers/firmware/efi/libstub/gop.o
CC drivers/gpu/drm/i915/gt/intel_gt.o
CC drivers/firmware/efi/libstub/secureboot.o
CC drivers/thermal/gov_step_wise.o
CC mm/ptdump.o
CC drivers/gpu/drm/drm_fourcc.o
GEN lib/oid_registry_data.c
CC lib/ucs2_string.o
CC [M] drivers/gpu/drm/xe/xe_gsc_submit.o
CC kernel/vmcore_info.o
CC drivers/gpu/drm/i915/gt/intel_gt_buffer_pool.o
CC kernel/elfcorehdr.o
CC drivers/md/dm-sysfs.o
CC lib/sbitmap.o
CC net/ipv6/exthdrs_offload.o
CC drivers/gpu/drm/i915/gt/intel_gt_ccs_mode.o
CC drivers/leds/led-class.o
CC drivers/thermal/gov_user_space.o
CC drivers/gpu/drm/i915/gt/intel_gt_clock_utils.o
CC drivers/leds/led-triggers.o
CC drivers/firmware/efi/vars.o
CC drivers/md/dm-stats.o
CC drivers/cpufreq/amd-pstate-trace.o
CC mm/execmem.o
CC fs/nfs/nfs4getroot.o
CC drivers/md/dm-rq.o
CC lib/group_cpus.o
CC drivers/md/dm-io-rewind.o
CC drivers/net/ethernet/intel/e1000e/netdev.o
CC drivers/gpu/drm/i915/gt/intel_gt_debugfs.o
CC fs/sync.o
CC drivers/firmware/efi/reboot.o
CC drivers/md/dm-builtin.o
CC net/ipv4/fib_rules.o
CC drivers/net/ethernet/intel/e1000e/ptp.o
CC drivers/gpu/drm/drm_framebuffer.o
CC net/ipv4/ipmr.o
CC drivers/firmware/efi/libstub/tpm.o
CC net/ipv4/ipmr_base.o
CC net/ipv4/syncookies.o
CC net/ipv4/tunnel4.o
CC drivers/gpu/drm/i915/gt/intel_gt_engines_debugfs.o
AR drivers/thermal/built-in.a
AR drivers/net/ethernet/litex/built-in.a
CC [M] drivers/gpu/drm/xe/xe_gt.o
CC net/mac80211/util.o
CC drivers/gpu/drm/i915/gt/intel_gt_irq.o
CC drivers/md/dm-raid1.o
AR drivers/net/ethernet/marvell/octeon_ep/built-in.a
CC net/mac80211/parse.o
CC drivers/cpufreq/intel_pstate.o
AR drivers/net/ethernet/marvell/octeon_ep_vf/built-in.a
CC kernel/crash_reserve.o
AR drivers/net/ethernet/marvell/octeontx2/built-in.a
CC fs/utimes.o
CC fs/d_path.o
AR drivers/net/ethernet/marvell/prestera/built-in.a
CC lib/fw_table.o
CC drivers/net/ethernet/marvell/sky2.o
AR mm/built-in.a
CC net/ipv6/inet6_hashtables.o
AR drivers/firmware/imx/built-in.a
AR drivers/net/ethernet/mellanox/built-in.a
AR drivers/net/ethernet/meta/built-in.a
CC drivers/firmware/efi/memattr.o
AR drivers/net/ethernet/micrel/built-in.a
CC net/ipv6/mcast_snoop.o
CC drivers/md/dm-log.o
AR drivers/net/ethernet/microchip/built-in.a
CC drivers/md/dm-region-hash.o
AR drivers/firmware/psci/built-in.a
CC drivers/md/dm-zero.o
AR drivers/net/ethernet/mscc/built-in.a
AR drivers/net/ethernet/myricom/built-in.a
CC drivers/firmware/efi/libstub/file.o
CC fs/nfs/nfs4client.o
AR drivers/leds/built-in.a
CC drivers/firmware/efi/libstub/mem.o
CC drivers/firmware/efi/libstub/random.o
CC drivers/gpu/drm/drm_gem.o
CC fs/nfs/nfs4session.o
CC net/ipv4/ipconfig.o
CC net/ipv4/netfilter.o
CC kernel/kexec_core.o
CC drivers/gpu/drm/i915/gt/intel_gt_mcr.o
CC net/ipv4/tcp_cubic.o
CC drivers/firmware/efi/tpm.o
CC fs/nfs/dns_resolve.o
CC net/ipv4/tcp_sigpool.o
CC [M] drivers/gpu/drm/xe/xe_gt_ccs_mode.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_debugfs.o
AR lib/lib.a
GEN lib/crc32table.h
CC lib/oid_registry.o
CC kernel/crash_core.o
CC kernel/kexec.o
AR drivers/crypto/stm32/built-in.a
AR drivers/crypto/xilinx/built-in.a
AR drivers/crypto/hisilicon/built-in.a
CC drivers/clocksource/acpi_pm.o
CC kernel/utsname.o
AR drivers/crypto/intel/keembay/built-in.a
AR drivers/crypto/intel/ixp4xx/built-in.a
CC drivers/firmware/efi/memmap.o
AR drivers/crypto/intel/built-in.a
CC fs/stack.o
CC fs/fs_struct.o
AR drivers/crypto/starfive/built-in.a
AR drivers/crypto/built-in.a
CC drivers/clocksource/i8253.o
CC drivers/firmware/efi/libstub/randomalloc.o
CC drivers/gpu/drm/drm_ioctl.o
AR drivers/firmware/qcom/built-in.a
CC drivers/gpu/drm/drm_lease.o
CC net/ipv4/cipso_ipv4.o
CC drivers/firmware/efi/capsule.o
CC drivers/gpu/drm/i915/gt/intel_gt_pm_irq.o
CC drivers/gpu/drm/i915/gt/intel_gt_requests.o
CC fs/nfs/nfs4trace.o
CC [M] drivers/gpu/drm/xe/xe_gt_clock.o
CC net/ipv4/xfrm4_policy.o
CC net/mac80211/wme.o
CC fs/statfs.o
CC lib/crc32.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs.o
CC drivers/gpu/drm/i915/gt/intel_gt_sysfs_pm.o
CC net/mac80211/chan.o
CC fs/fs_pin.o
AR drivers/md/built-in.a
CC kernel/pid_namespace.o
CC drivers/firmware/efi/esrt.o
CC fs/nsfs.o
CC fs/fs_types.o
CC [M] drivers/gpu/drm/xe/xe_gt_freq.o
CC fs/fs_context.o
CC fs/nfs/nfs4sysctl.o
CC drivers/firmware/efi/libstub/pci.o
AR net/ipv6/built-in.a
CC drivers/firmware/efi/libstub/skip_spaces.o
AR drivers/net/ethernet/natsemi/built-in.a
AR drivers/clocksource/built-in.a
CC fs/fs_parser.o
CC drivers/firmware/efi/libstub/lib-cmdline.o
CC net/ipv4/xfrm4_state.o
CC drivers/hid/hid-core.o
CC drivers/hid/usbhid/hid-core.o
CC drivers/firmware/efi/libstub/lib-ctype.o
CC drivers/hid/usbhid/hiddev.o
CC drivers/firmware/efi/libstub/alignedmem.o
CC drivers/hid/usbhid/hid-pidff.o
CC drivers/hid/hid-input.o
CC drivers/firmware/efi/runtime-wrappers.o
CC kernel/stop_machine.o
CC drivers/firmware/efi/libstub/relocate.o
CC drivers/hid/hid-quirks.o
AR lib/built-in.a
CC drivers/firmware/efi/capsule-loader.o
CC drivers/gpu/drm/drm_managed.o
CC drivers/firmware/efi/earlycon.o
CC fs/fsopen.o
CC kernel/audit.o
CC drivers/gpu/drm/drm_mm.o
AR drivers/net/ethernet/neterion/built-in.a
CC drivers/gpu/drm/drm_mode_config.o
CC drivers/hid/hid-debug.o
AR drivers/net/ethernet/netronome/built-in.a
CC drivers/hid/hidraw.o
CC drivers/gpu/drm/i915/gt/intel_gtt.o
CC drivers/firmware/efi/libstub/printk.o
CC drivers/gpu/drm/i915/gt/intel_llc.o
CC drivers/gpu/drm/i915/gt/intel_lrc.o
CC net/ipv4/xfrm4_input.o
CC net/ipv4/xfrm4_output.o
CC drivers/gpu/drm/i915/gt/intel_migrate.o
CC kernel/auditfilter.o
CC drivers/gpu/drm/drm_mode_object.o
CC drivers/gpu/drm/drm_modes.o
AR drivers/cpufreq/built-in.a
CC drivers/hid/hid-generic.o
CC drivers/gpu/drm/i915/gt/intel_mocs.o
CC [M] drivers/gpu/drm/xe/xe_gt_idle.o
CC drivers/firmware/efi/libstub/vsprintf.o
CC kernel/auditsc.o
CC net/mac80211/trace.o
CC net/mac80211/mlme.o
CC drivers/firmware/efi/libstub/x86-stub.o
CC fs/init.o
AR drivers/net/ethernet/ni/built-in.a
CC drivers/firmware/efi/libstub/smbios.o
STUBCPY drivers/firmware/efi/libstub/alignedmem.stub.o
STUBCPY drivers/firmware/efi/libstub/efi-stub-helper.stub.o
CC fs/kernel_read_file.o
CC drivers/net/ethernet/nvidia/forcedeth.o
CC fs/mnt_idmapping.o
AR drivers/net/ethernet/oki-semi/built-in.a
CC fs/remap_range.o
CC net/mac80211/tdls.o
CC net/mac80211/ocb.o
AR drivers/firmware/smccc/built-in.a
AR drivers/firmware/tegra/built-in.a
CC drivers/gpu/drm/drm_modeset_lock.o
AR drivers/firmware/xilinx/built-in.a
CC fs/pidfs.o
CC fs/buffer.o
CC drivers/gpu/drm/i915/gt/intel_ppgtt.o
CC net/ipv4/xfrm4_protocol.o
CC fs/mpage.o
CC drivers/gpu/drm/i915/gt/intel_rc6.o
AR drivers/platform/x86/amd/built-in.a
STUBCPY drivers/firmware/efi/libstub/file.stub.o
CC drivers/mailbox/mailbox.o
AR drivers/platform/x86/intel/built-in.a
CC drivers/mailbox/pcc.o
CC drivers/platform/x86/wmi.o
CC drivers/gpu/drm/drm_plane.o
CC net/mac80211/airtime.o
CC drivers/hid/hid-a4tech.o
CC drivers/gpu/drm/i915/gt/intel_region_lmem.o
AR drivers/hid/usbhid/built-in.a
AR drivers/platform/surface/built-in.a
CC drivers/hid/hid-apple.o
CC drivers/firmware/dmi_scan.o
CC kernel/audit_watch.o
AR drivers/firmware/efi/built-in.a
CC kernel/audit_fsnotify.o
CC fs/proc_namespace.o
CC fs/direct-io.o
CC [M] drivers/gpu/drm/xe/xe_gt_mcr.o
STUBCPY drivers/firmware/efi/libstub/gop.stub.o
AR drivers/net/ethernet/marvell/built-in.a
STUBCPY drivers/firmware/efi/libstub/lib-cmdline.stub.o
AR drivers/net/ethernet/packetengines/built-in.a
STUBCPY drivers/firmware/efi/libstub/lib-ctype.stub.o
AR drivers/net/ethernet/qlogic/built-in.a
STUBCPY drivers/firmware/efi/libstub/mem.stub.o
STUBCPY drivers/firmware/efi/libstub/pci.stub.o
AR drivers/net/ethernet/qualcomm/emac/built-in.a
CC drivers/gpu/drm/i915/gt/intel_renderstate.o
AR drivers/net/ethernet/qualcomm/built-in.a
CC drivers/net/ethernet/realtek/8139too.o
CC [M] drivers/gpu/drm/xe/xe_gt_pagefault.o
CC drivers/net/ethernet/realtek/r8169_main.o
CC fs/eventpoll.o
STUBCPY drivers/firmware/efi/libstub/printk.stub.o
STUBCPY drivers/firmware/efi/libstub/random.stub.o
STUBCPY drivers/firmware/efi/libstub/randomalloc.stub.o
AR drivers/net/ethernet/renesas/built-in.a
CC drivers/net/ethernet/realtek/r8169_firmware.o
CC drivers/hid/hid-belkin.o
CC drivers/net/ethernet/realtek/r8169_phy_config.o
STUBCPY drivers/firmware/efi/libstub/relocate.stub.o
AR drivers/net/ethernet/rdc/built-in.a
STUBCPY drivers/firmware/efi/libstub/secureboot.stub.o
CC [M] drivers/gpu/drm/xe/xe_gt_sysfs.o
AR drivers/net/ethernet/rocker/built-in.a
STUBCPY drivers/firmware/efi/libstub/skip_spaces.stub.o
CC fs/anon_inodes.o
STUBCPY drivers/firmware/efi/libstub/smbios.stub.o
CC kernel/audit_tree.o
STUBCPY drivers/firmware/efi/libstub/tpm.stub.o
AR drivers/mailbox/built-in.a
STUBCPY drivers/firmware/efi/libstub/vsprintf.stub.o
CC kernel/kprobes.o
STUBCPY drivers/firmware/efi/libstub/x86-stub.stub.o
AR drivers/firmware/efi/libstub/lib.a
CC drivers/firmware/dmi-id.o
CC fs/signalfd.o
CC fs/timerfd.o
AR drivers/net/ethernet/intel/e1000e/built-in.a
AR drivers/net/ethernet/intel/built-in.a
CC fs/eventfd.o
CC drivers/gpu/drm/i915/gt/intel_reset.o
AR drivers/net/ethernet/samsung/built-in.a
CC net/mac80211/eht.o
AR drivers/net/ethernet/seeq/built-in.a
AR drivers/net/ethernet/silan/built-in.a
CC net/mac80211/led.o
CC net/mac80211/pm.o
CC drivers/platform/x86/wmi-bmof.o
CC net/mac80211/rc80211_minstrel_ht.o
AR net/ipv4/built-in.a
CC drivers/gpu/drm/i915/gt/intel_ring.o
CC drivers/gpu/drm/drm_prime.o
CC drivers/platform/x86/eeepc-laptop.o
CC drivers/gpu/drm/drm_print.o
CC drivers/hid/hid-cherry.o
CC drivers/gpu/drm/i915/gt/intel_ring_submission.o
CC drivers/firmware/memmap.o
CC kernel/seccomp.o
AR drivers/net/ethernet/sis/built-in.a
AR drivers/net/ethernet/sfc/built-in.a
AR drivers/net/ethernet/smsc/built-in.a
AR drivers/net/ethernet/socionext/built-in.a
CC kernel/relay.o
CC drivers/gpu/drm/drm_property.o
CC drivers/platform/x86/p2sb.o
AR drivers/net/ethernet/stmicro/built-in.a
CC drivers/gpu/drm/drm_syncobj.o
CC kernel/utsname_sysctl.o
CC drivers/gpu/drm/drm_sysfs.o
CC drivers/hid/hid-chicony.o
CC [M] drivers/gpu/drm/xe/xe_gt_throttle.o
CC [M] drivers/gpu/drm/xe/xe_gt_tlb_invalidation.o
CC kernel/delayacct.o
AR drivers/perf/built-in.a
CC drivers/hid/hid-cypress.o
AR drivers/net/ethernet/sun/built-in.a
AR drivers/net/ethernet/tehuti/built-in.a
AR drivers/hwtracing/intel_th/built-in.a
AR drivers/android/built-in.a
AR drivers/nvmem/layouts/built-in.a
AR drivers/net/ethernet/ti/built-in.a
CC drivers/nvmem/core.o
AR drivers/net/ethernet/vertexcom/built-in.a
AR drivers/net/ethernet/via/built-in.a
CC drivers/gpu/drm/i915/gt/intel_rps.o
CC fs/aio.o
AR drivers/net/ethernet/wangxun/built-in.a
CC fs/locks.o
CC [M] drivers/gpu/drm/xe/xe_gt_topology.o
AR fs/nfs/built-in.a
CC fs/binfmt_misc.o
CC drivers/gpu/drm/drm_trace_points.o
CC [M] drivers/gpu/drm/xe/xe_guc.o
CC drivers/gpu/drm/drm_vblank.o
CC drivers/gpu/drm/i915/gt/intel_sa_media.o
CC drivers/gpu/drm/i915/gt/intel_sseu.o
CC fs/binfmt_script.o
CC [M] drivers/gpu/drm/xe/xe_guc_ads.o
CC fs/binfmt_elf.o
CC drivers/hid/hid-ezkey.o
AR drivers/firmware/built-in.a
CC drivers/hid/hid-gyration.o
CC drivers/gpu/drm/drm_vblank_work.o
CC net/mac80211/wbrf.o
CC drivers/gpu/drm/drm_vma_manager.o
CC kernel/taskstats.o
CC [M] drivers/gpu/drm/xe/xe_guc_ct.o
CC drivers/gpu/drm/drm_writeback.o
CC drivers/gpu/drm/drm_panel.o
CC drivers/gpu/drm/drm_pci.o
CC drivers/gpu/drm/i915/gt/intel_sseu_debugfs.o
AR drivers/platform/x86/built-in.a
CC drivers/gpu/drm/i915/gt/intel_timeline.o
CC drivers/hid/hid-ite.o
AR drivers/platform/built-in.a
CC kernel/tsacct.o
CC drivers/gpu/drm/i915/gt/intel_tlb.o
CC drivers/gpu/drm/drm_debugfs.o
CC drivers/gpu/drm/i915/gt/intel_wopcm.o
CC kernel/tracepoint.o
CC [M] drivers/gpu/drm/xe/xe_guc_db_mgr.o
CC fs/mbcache.o
CC fs/posix_acl.o
CC fs/coredump.o
CC fs/drop_caches.o
CC [M] drivers/gpu/drm/xe/xe_guc_hwconfig.o
CC [M] drivers/gpu/drm/xe/xe_guc_id_mgr.o
CC drivers/gpu/drm/drm_debugfs_crc.o
CC drivers/hid/hid-kensington.o
CC fs/sysctls.o
AR drivers/nvmem/built-in.a
CC fs/fhandle.o
AR drivers/net/ethernet/nvidia/built-in.a
CC drivers/gpu/drm/drm_panel_orientation_quirks.o
AR drivers/net/ethernet/wiznet/built-in.a
CC drivers/hid/hid-lg.o
AR drivers/net/ethernet/xilinx/built-in.a
CC [M] drivers/gpu/drm/xe/xe_guc_klv_helpers.o
AR drivers/net/ethernet/xircom/built-in.a
CC drivers/gpu/drm/drm_buddy.o
CC drivers/gpu/drm/i915/gt/intel_workarounds.o
CC drivers/hid/hid-lgff.o
AR drivers/net/ethernet/synopsys/built-in.a
CC drivers/gpu/drm/drm_gem_shmem_helper.o
AR drivers/net/ethernet/pensando/built-in.a
CC kernel/irq_work.o
CC kernel/static_call.o
CC drivers/gpu/drm/drm_atomic_helper.o
CC [M] drivers/gpu/drm/xe/xe_guc_log.o
CC drivers/gpu/drm/drm_atomic_state_helper.o
CC drivers/hid/hid-lg4ff.o
CC drivers/hid/hid-lg-g15.o
CC [M] drivers/gpu/drm/xe/xe_guc_pc.o
CC drivers/hid/hid-microsoft.o
CC drivers/gpu/drm/drm_crtc_helper.o
CC drivers/gpu/drm/drm_damage_helper.o
CC [M] drivers/gpu/drm/xe/xe_guc_submit.o
CC [M] drivers/gpu/drm/xe/xe_heci_gsc.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine.o
CC kernel/padata.o
CC kernel/jump_label.o
CC drivers/gpu/drm/drm_encoder_slave.o
CC drivers/hid/hid-monterey.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_class_sysfs.o
CC drivers/gpu/drm/drm_flip_work.o
CC drivers/gpu/drm/i915/gt/shmem_utils.o
CC drivers/gpu/drm/i915/gt/sysfs_engines.o
CC [M] drivers/gpu/drm/xe/xe_hw_engine_group.o
CC drivers/gpu/drm/i915/gt/intel_ggtt_gmch.o
CC kernel/context_tracking.o
CC kernel/iomem.o
CC [M] drivers/gpu/drm/xe/xe_hw_fence.o
CC [M] drivers/gpu/drm/xe/xe_huc.o
CC drivers/gpu/drm/drm_format_helper.o
CC drivers/gpu/drm/i915/gt/gen6_renderstate.o
CC drivers/hid/hid-ntrig.o
CC drivers/gpu/drm/i915/gt/gen7_renderstate.o
CC drivers/gpu/drm/i915/gt/gen8_renderstate.o
CC drivers/gpu/drm/drm_gem_atomic_helper.o
AR drivers/net/ethernet/realtek/built-in.a
AR drivers/net/ethernet/built-in.a
CC drivers/hid/hid-pl.o
CC kernel/rseq.o
CC drivers/gpu/drm/i915/gt/gen9_renderstate.o
CC drivers/hid/hid-petalynx.o
CC drivers/gpu/drm/i915/gem/i915_gem_busy.o
CC drivers/gpu/drm/drm_gem_framebuffer_helper.o
CC [M] drivers/gpu/drm/xe/xe_irq.o
AR drivers/net/built-in.a
CC drivers/gpu/drm/drm_kms_helper_common.o
CC drivers/gpu/drm/drm_modeset_helper.o
CC drivers/gpu/drm/drm_plane_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_clflush.o
CC drivers/hid/hid-redragon.o
CC drivers/hid/hid-samsung.o
CC drivers/hid/hid-sony.o
CC drivers/hid/hid-sunplus.o
CC drivers/gpu/drm/drm_probe_helper.o
CC drivers/gpu/drm/i915/gem/i915_gem_context.o
CC drivers/gpu/drm/drm_rect.o
CC drivers/hid/hid-topseed.o
CC drivers/gpu/drm/drm_self_refresh_helper.o
CC [M] drivers/gpu/drm/xe/xe_lrc.o
CC [M] drivers/gpu/drm/xe/xe_migrate.o
CC [M] drivers/gpu/drm/xe/xe_mmio.o
CC [M] drivers/gpu/drm/xe/xe_mocs.o
CC drivers/gpu/drm/i915/gem/i915_gem_create.o
CC drivers/gpu/drm/i915/gem/i915_gem_dmabuf.o
CC drivers/gpu/drm/i915/gem/i915_gem_domain.o
CC drivers/gpu/drm/i915/gem/i915_gem_execbuffer.o
CC [M] drivers/gpu/drm/xe/xe_module.o
CC [M] drivers/gpu/drm/xe/xe_oa.o
CC drivers/gpu/drm/i915/gem/i915_gem_internal.o
AR fs/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_lmem.o
CC drivers/gpu/drm/drm_simple_kms_helper.o
CC [M] drivers/gpu/drm/xe/xe_observation.o
CC drivers/gpu/drm/bridge/panel.o
CC drivers/gpu/drm/drm_mipi_dsi.o
CC [M] drivers/gpu/drm/xe/xe_pat.o
CC [M] drivers/gpu/drm/drm_exec.o
CC drivers/gpu/drm/i915/gem/i915_gem_mman.o
CC [M] drivers/gpu/drm/xe/xe_pci.o
CC [M] drivers/gpu/drm/drm_gpuvm.o
CC [M] drivers/gpu/drm/drm_suballoc.o
CC [M] drivers/gpu/drm/drm_gem_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_pcode.o
CC [M] drivers/gpu/drm/xe/xe_pm.o
CC [M] drivers/gpu/drm/xe/xe_preempt_fence.o
CC drivers/gpu/drm/i915/gem/i915_gem_object.o
CC drivers/gpu/drm/i915/gem/i915_gem_pages.o
CC [M] drivers/gpu/drm/xe/xe_pt.o
CC [M] drivers/gpu/drm/xe/xe_pt_walk.o
AR kernel/built-in.a
CC drivers/gpu/drm/i915/gem/i915_gem_phys.o
CC [M] drivers/gpu/drm/xe/xe_query.o
CC drivers/gpu/drm/i915/gem/i915_gem_pm.o
CC [M] drivers/gpu/drm/xe/xe_range_fence.o
CC drivers/gpu/drm/i915/gem/i915_gem_region.o
CC [M] drivers/gpu/drm/xe/xe_reg_sr.o
CC [M] drivers/gpu/drm/xe/xe_reg_whitelist.o
CC [M] drivers/gpu/drm/xe/xe_rtp.o
CC drivers/gpu/drm/i915/gem/i915_gem_shmem.o
CC [M] drivers/gpu/drm/xe/xe_ring_ops.o
CC [M] drivers/gpu/drm/xe/xe_sa.o
CC [M] drivers/gpu/drm/xe/xe_sched_job.o
LD [M] drivers/gpu/drm/drm_suballoc_helper.o
CC [M] drivers/gpu/drm/xe/xe_step.o
CC drivers/gpu/drm/i915/gem/i915_gem_shrinker.o
CC drivers/gpu/drm/i915/gem/i915_gem_stolen.o
CC drivers/gpu/drm/i915/gem/i915_gem_throttle.o
CC [M] drivers/gpu/drm/xe/xe_sync.o
CC [M] drivers/gpu/drm/xe/xe_tile.o
AR drivers/hid/built-in.a
CC [M] drivers/gpu/drm/xe/xe_tile_sysfs.o
LD [M] drivers/gpu/drm/drm_ttm_helper.o
CC [M] drivers/gpu/drm/xe/xe_trace.o
CC drivers/gpu/drm/i915/gem/i915_gem_tiling.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_move.o
CC [M] drivers/gpu/drm/xe/xe_trace_bo.o
CC drivers/gpu/drm/i915/gem/i915_gem_ttm_pm.o
CC drivers/gpu/drm/i915/gem/i915_gem_userptr.o
CC [M] drivers/gpu/drm/xe/xe_trace_guc.o
CC [M] drivers/gpu/drm/xe/xe_ttm_sys_mgr.o
CC [M] drivers/gpu/drm/xe/xe_ttm_stolen_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gem_wait.o
CC [M] drivers/gpu/drm/xe/xe_ttm_vram_mgr.o
CC drivers/gpu/drm/i915/gem/i915_gemfs.o
CC [M] drivers/gpu/drm/xe/xe_tuning.o
CC [M] drivers/gpu/drm/xe/xe_uc.o
CC [M] drivers/gpu/drm/xe/xe_uc_fw.o
CC [M] drivers/gpu/drm/xe/xe_vm.o
CC [M] drivers/gpu/drm/xe/xe_vram.o
CC [M] drivers/gpu/drm/xe/xe_vram_freq.o
CC [M] drivers/gpu/drm/xe/xe_wait_user_fence.o
CC [M] drivers/gpu/drm/xe/xe_wa.o
CC drivers/gpu/drm/i915/i915_active.o
CC drivers/gpu/drm/i915/i915_cmd_parser.o
CC [M] drivers/gpu/drm/xe/xe_wopcm.o
CC [M] drivers/gpu/drm/xe/xe_hmm.o
CC drivers/gpu/drm/i915/i915_deps.o
CC [M] drivers/gpu/drm/xe/xe_hwmon.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf.o
CC [M] drivers/gpu/drm/xe/xe_guc_relay.o
CC [M] drivers/gpu/drm/xe/xe_memirq.o
CC [M] drivers/gpu/drm/xe/xe_sriov.o
CC drivers/gpu/drm/i915/i915_gem.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_irq.o
CC drivers/gpu/drm/i915/i915_gem_evict.o
CC drivers/gpu/drm/i915/i915_gem_gtt.o
CC drivers/gpu/drm/i915/i915_gem_ww.o
CC [M] drivers/gpu/drm/xe/display/ext/i915_utils.o
CC drivers/gpu/drm/i915/i915_query.o
CC [M] drivers/gpu/drm/xe/display/intel_fb_bo.o
CC drivers/gpu/drm/i915/i915_request.o
CC [M] drivers/gpu/drm/xe/display/intel_fbdev_fb.o
CC drivers/gpu/drm/i915/i915_scheduler.o
CC [M] drivers/gpu/drm/xe/display/xe_display.o
CC [M] drivers/gpu/drm/xe/display/xe_display_misc.o
CC drivers/gpu/drm/i915/i915_trace_points.o
CC [M] drivers/gpu/drm/xe/display/xe_display_rps.o
CC drivers/gpu/drm/i915/i915_ttm_buddy_manager.o
CC drivers/gpu/drm/i915/i915_vma.o
CC drivers/gpu/drm/i915/i915_vma_resource.o
CC [M] drivers/gpu/drm/xe/display/xe_display_wa.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_fw.o
CC [M] drivers/gpu/drm/xe/display/xe_dsb_buffer.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_proxy.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc.o
CC [M] drivers/gpu/drm/xe/display/xe_fb_pin.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/display/xe_hdcp_gsc.o
CC drivers/gpu/drm/i915/gt/uc/intel_gsc_uc_heci_cmd_submit.o
CC [M] drivers/gpu/drm/xe/display/xe_plane_initial.o
CC [M] drivers/gpu/drm/xe/display/xe_tdf.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_dram.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc.o
CC [M] drivers/gpu/drm/xe/i915-soc/intel_pch.o
CC [M] drivers/gpu/drm/xe/i915-display/icl_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_alpm.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ads.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_atomic_plane.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_color.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_capture.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_combo_phy.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_ct.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_connector.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_crtc_state_dump.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cursor.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_hwconfig.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_rc.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_slpc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi.o
CC drivers/gpu/drm/i915/gt/uc/intel_guc_submission.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_ddi_buf_trans.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_device.o
AR net/mac80211/built-in.a
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_driver.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_irq.o
AR net/built-in.a
CC drivers/gpu/drm/i915/gt/uc/intel_huc.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_huc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_params.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_debugfs.o
CC drivers/gpu/drm/i915/gt/uc/intel_uc_fw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_map.o
CC drivers/gpu/drm/i915/gt/intel_gsc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_power_well.o
CC drivers/gpu/drm/i915/i915_hwmon.o
CC drivers/gpu/drm/i915/display/hsw_ips.o
CC drivers/gpu/drm/i915/display/i9xx_plane.o
CC drivers/gpu/drm/i915/display/i9xx_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_alpm.o
CC drivers/gpu/drm/i915/display/intel_atomic.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_wa.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dkl_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_atomic_plane.o
CC drivers/gpu/drm/i915/display/intel_audio.o
CC drivers/gpu/drm/i915/display/intel_bios.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_aux_backlight.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_cdclk.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_link_training.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dp_mst.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_color.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dpt_common.o
CC drivers/gpu/drm/i915/display/intel_combo_phy.o
CC drivers/gpu/drm/i915/display/intel_connector.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_drrs.o
CC drivers/gpu/drm/i915/display/intel_crtc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsb.o
CC drivers/gpu/drm/i915/display/intel_crtc_state_dump.o
CC drivers/gpu/drm/i915/display/intel_cursor.o
CC drivers/gpu/drm/i915/display/intel_display.o
CC drivers/gpu/drm/i915/display/intel_display_driver.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_display_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dsi_vbt.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_encoder.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fb.o
CC drivers/gpu/drm/i915/display/intel_display_params.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fbc.o
CC drivers/gpu/drm/i915/display/intel_display_power.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fdi.o
CC drivers/gpu/drm/i915/display/intel_display_power_map.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/intel_display_power_well.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_display_reset.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_gmbus.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hdmi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hotplug_irq.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_hti.o
CC drivers/gpu/drm/i915/display/intel_display_rps.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_link_bw.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_lspcon.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_lock.o
CC drivers/gpu/drm/i915/display/intel_display_wa.o
CC drivers/gpu/drm/i915/display/intel_dmc.o
CC drivers/gpu/drm/i915/display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_dpio_phy.o
CC drivers/gpu/drm/i915/display/intel_dpll.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_modeset_verify.o
CC drivers/gpu/drm/i915/display/intel_dpll_mgr.o
CC drivers/gpu/drm/i915/display/intel_dpt.o
CC drivers/gpu/drm/i915/display/intel_dpt_common.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_panel.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_drrs.o
CC drivers/gpu/drm/i915/display/intel_dsb.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pps.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_psr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_dsb_buffer.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_quirks.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_snps_phy.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_tc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_fb.o
CC drivers/gpu/drm/i915/display/intel_fb_bo.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vdsc.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vga.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_vrr.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_dmc_wl.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_wm.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_scaler.o
CC drivers/gpu/drm/i915/display/intel_fb_pin.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_universal_plane.o
CC drivers/gpu/drm/i915/display/intel_fbc.o
CC [M] drivers/gpu/drm/xe/i915-display/skl_watermark.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_acpi.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_fdi.o
CC [M] drivers/gpu/drm/xe/xe_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_gt_debugfs.o
CC drivers/gpu/drm/i915/display/intel_fifo_underrun.o
CC drivers/gpu/drm/i915/display/intel_frontbuffer.o
CC [M] drivers/gpu/drm/xe/xe_gt_sriov_vf_debugfs.o
CC drivers/gpu/drm/i915/display/intel_global_state.o
CC drivers/gpu/drm/i915/display/intel_hdcp.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc.o
CC [M] drivers/gpu/drm/xe/xe_gt_stats.o
CC drivers/gpu/drm/i915/display/intel_hdcp_gsc_message.o
CC [M] drivers/gpu/drm/xe/xe_guc_debugfs.o
CC [M] drivers/gpu/drm/xe/xe_huc_debugfs.o
CC drivers/gpu/drm/i915/display/intel_hotplug.o
CC drivers/gpu/drm/i915/display/intel_hotplug_irq.o
CC drivers/gpu/drm/i915/display/intel_hti.o
CC [M] drivers/gpu/drm/xe/xe_uc_debugfs.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_link_bw.o
CC drivers/gpu/drm/i915/display/intel_load_detect.o
CC drivers/gpu/drm/i915/display/intel_lpe_audio.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_modeset_lock.o
CC [M] drivers/gpu/drm/xe/i915-display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/intel_modeset_setup.o
CC drivers/gpu/drm/i915/display/intel_modeset_verify.o
CC drivers/gpu/drm/i915/display/intel_overlay.o
CC drivers/gpu/drm/i915/display/intel_pch_display.o
CC drivers/gpu/drm/i915/display/intel_pch_refclk.o
CC drivers/gpu/drm/i915/display/intel_plane_initial.o
CC drivers/gpu/drm/i915/display/intel_pmdemand.o
CC drivers/gpu/drm/i915/display/intel_psr.o
CC drivers/gpu/drm/i915/display/intel_quirks.o
CC drivers/gpu/drm/i915/display/intel_sprite.o
CC drivers/gpu/drm/i915/display/intel_sprite_uapi.o
CC drivers/gpu/drm/i915/display/intel_tc.o
CC drivers/gpu/drm/i915/display/intel_vblank.o
CC drivers/gpu/drm/i915/display/intel_vga.o
CC drivers/gpu/drm/i915/display/intel_wm.o
CC drivers/gpu/drm/i915/display/skl_scaler.o
CC drivers/gpu/drm/i915/display/skl_universal_plane.o
CC drivers/gpu/drm/i915/display/skl_watermark.o
CC drivers/gpu/drm/i915/display/intel_acpi.o
CC drivers/gpu/drm/i915/display/intel_opregion.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs.o
CC drivers/gpu/drm/i915/display/intel_display_debugfs_params.o
CC drivers/gpu/drm/i915/display/intel_pipe_crc.o
CC drivers/gpu/drm/i915/display/dvo_ch7017.o
CC drivers/gpu/drm/i915/display/dvo_ch7xxx.o
CC drivers/gpu/drm/i915/display/dvo_ivch.o
CC drivers/gpu/drm/i915/display/dvo_ns2501.o
CC drivers/gpu/drm/i915/display/dvo_sil164.o
CC drivers/gpu/drm/i915/display/dvo_tfp410.o
CC drivers/gpu/drm/i915/display/g4x_dp.o
CC drivers/gpu/drm/i915/display/g4x_hdmi.o
CC drivers/gpu/drm/i915/display/icl_dsi.o
CC drivers/gpu/drm/i915/display/intel_backlight.o
CC drivers/gpu/drm/i915/display/intel_crt.o
CC drivers/gpu/drm/i915/display/intel_cx0_phy.o
CC drivers/gpu/drm/i915/display/intel_ddi.o
CC drivers/gpu/drm/i915/display/intel_ddi_buf_trans.o
CC drivers/gpu/drm/i915/display/intel_display_device.o
CC drivers/gpu/drm/i915/display/intel_display_trace.o
CC drivers/gpu/drm/i915/display/intel_dkl_phy.o
CC drivers/gpu/drm/i915/display/intel_dp.o
CC drivers/gpu/drm/i915/display/intel_dp_aux.o
CC drivers/gpu/drm/i915/display/intel_dp_aux_backlight.o
CC drivers/gpu/drm/i915/display/intel_dp_hdcp.o
CC drivers/gpu/drm/i915/display/intel_dp_link_training.o
CC drivers/gpu/drm/i915/display/intel_dp_mst.o
CC drivers/gpu/drm/i915/display/intel_dsi.o
CC drivers/gpu/drm/i915/display/intel_dsi_dcs_backlight.o
CC drivers/gpu/drm/i915/display/intel_dsi_vbt.o
CC drivers/gpu/drm/i915/display/intel_dvo.o
CC drivers/gpu/drm/i915/display/intel_encoder.o
CC drivers/gpu/drm/i915/display/intel_gmbus.o
CC drivers/gpu/drm/i915/display/intel_hdmi.o
CC drivers/gpu/drm/i915/display/intel_lspcon.o
CC drivers/gpu/drm/i915/display/intel_lvds.o
CC drivers/gpu/drm/i915/display/intel_panel.o
CC drivers/gpu/drm/i915/display/intel_pps.o
CC drivers/gpu/drm/i915/display/intel_qp_tables.o
CC drivers/gpu/drm/i915/display/intel_sdvo.o
CC drivers/gpu/drm/i915/display/intel_snps_phy.o
CC drivers/gpu/drm/i915/display/intel_tv.o
CC drivers/gpu/drm/i915/display/intel_vdsc.o
CC drivers/gpu/drm/i915/display/intel_vrr.o
CC drivers/gpu/drm/i915/display/vlv_dsi.o
CC drivers/gpu/drm/i915/display/vlv_dsi_pll.o
CC drivers/gpu/drm/i915/i915_perf.o
CC drivers/gpu/drm/i915/pxp/intel_pxp.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_huc.o
CC drivers/gpu/drm/i915/pxp/intel_pxp_tee.o
CC drivers/gpu/drm/i915/i915_gpu_error.o
CC drivers/gpu/drm/i915/i915_vgpu.o
LD [M] drivers/gpu/drm/xe/xe.o
AR drivers/gpu/drm/i915/built-in.a
AR drivers/gpu/drm/built-in.a
AR drivers/gpu/built-in.a
AR drivers/built-in.a
AR built-in.a
AR vmlinux.a
LD vmlinux.o
OBJCOPY modules.builtin.modinfo
GEN modules.builtin
MODPOST Module.symvers
CC .vmlinux.export.o
CC [M] fs/efivarfs/efivarfs.mod.o
CC [M] drivers/gpu/drm/drm_exec.mod.o
CC [M] drivers/gpu/drm/drm_gpuvm.mod.o
CC [M] drivers/gpu/drm/drm_suballoc_helper.mod.o
CC [M] drivers/gpu/drm/drm_ttm_helper.mod.o
CC [M] drivers/gpu/drm/scheduler/gpu-sched.mod.o
CC [M] drivers/gpu/drm/xe/xe.mod.o
CC [M] drivers/thermal/intel/x86_pkg_temp_thermal.mod.o
CC [M] sound/core/snd-hwdep.mod.o
CC [M] sound/core/snd-pcm.mod.o
CC [M] sound/pci/hda/snd-hda-codec.mod.o
CC [M] sound/pci/hda/snd-hda-codec-hdmi.mod.o
CC [M] sound/pci/hda/snd-hda-intel.mod.o
CC [M] sound/hda/snd-hda-core.mod.o
CC [M] sound/hda/snd-intel-dspcfg.mod.o
CC [M] sound/hda/snd-intel-sdw-acpi.mod.o
CC [M] net/netfilter/nf_log_syslog.mod.o
CC [M] net/netfilter/xt_mark.mod.o
CC [M] net/netfilter/xt_nat.mod.o
CC [M] net/netfilter/xt_LOG.mod.o
CC [M] net/netfilter/xt_MASQUERADE.mod.o
CC [M] net/netfilter/xt_addrtype.mod.o
CC [M] net/ipv4/netfilter/iptable_nat.mod.o
LD [M] fs/efivarfs/efivarfs.ko
LD [M] net/netfilter/nf_log_syslog.ko
LD [M] drivers/thermal/intel/x86_pkg_temp_thermal.ko
LD [M] drivers/gpu/drm/drm_ttm_helper.ko
LD [M] sound/core/snd-hwdep.ko
LD [M] sound/core/snd-pcm.ko
LD [M] sound/pci/hda/snd-hda-codec.ko
LD [M] drivers/gpu/drm/scheduler/gpu-sched.ko
LD [M] sound/hda/snd-intel-sdw-acpi.ko
LD [M] net/netfilter/xt_mark.ko
LD [M] net/netfilter/xt_MASQUERADE.ko
LD [M] net/netfilter/xt_addrtype.ko
LD [M] drivers/gpu/drm/xe/xe.ko
LD [M] sound/hda/snd-intel-dspcfg.ko
LD [M] sound/pci/hda/snd-hda-intel.ko
LD [M] drivers/gpu/drm/drm_suballoc_helper.ko
LD [M] net/netfilter/xt_nat.ko
LD [M] net/netfilter/xt_LOG.ko
LD [M] drivers/gpu/drm/drm_gpuvm.ko
LD [M] sound/pci/hda/snd-hda-codec-hdmi.ko
LD [M] net/ipv4/netfilter/iptable_nat.ko
LD [M] drivers/gpu/drm/drm_exec.ko
LD [M] sound/hda/snd-hda-core.ko
UPD include/generated/utsversion.h
CC init/version-timestamp.o
KSYMS .tmp_vmlinux0.kallsyms.S
AS .tmp_vmlinux0.kallsyms.o
LD .tmp_vmlinux1
NM .tmp_vmlinux1.syms
KSYMS .tmp_vmlinux1.kallsyms.S
AS .tmp_vmlinux1.kallsyms.o
LD .tmp_vmlinux2
NM .tmp_vmlinux2.syms
KSYMS .tmp_vmlinux2.kallsyms.S
AS .tmp_vmlinux2.kallsyms.o
LD vmlinux
NM System.map
SORTTAB vmlinux
RELOCS arch/x86/boot/compressed/vmlinux.relocs
RSTRIP vmlinux
CC arch/x86/boot/a20.o
AS arch/x86/boot/bioscall.o
CC arch/x86/boot/cmdline.o
AS arch/x86/boot/copy.o
HOSTCC arch/x86/boot/mkcpustr
CC arch/x86/boot/cpuflags.o
CC arch/x86/boot/cpucheck.o
CC arch/x86/boot/early_serial_console.o
CC arch/x86/boot/edd.o
CC arch/x86/boot/main.o
CC arch/x86/boot/memory.o
CC arch/x86/boot/pm.o
AS arch/x86/boot/pmjump.o
CC arch/x86/boot/printf.o
CC arch/x86/boot/regs.o
CC arch/x86/boot/string.o
CC arch/x86/boot/tty.o
CC arch/x86/boot/video.o
CC arch/x86/boot/video-mode.o
CC arch/x86/boot/version.o
CC arch/x86/boot/video-vga.o
CC arch/x86/boot/video-vesa.o
CC arch/x86/boot/video-bios.o
HOSTCC arch/x86/boot/tools/build
CPUSTR arch/x86/boot/cpustr.h
CC arch/x86/boot/cpu.o
LDS arch/x86/boot/compressed/vmlinux.lds
AS arch/x86/boot/compressed/kernel_info.o
AS arch/x86/boot/compressed/head_32.o
VOFFSET arch/x86/boot/compressed/../voffset.h
CC arch/x86/boot/compressed/string.o
CC arch/x86/boot/compressed/cmdline.o
CC arch/x86/boot/compressed/error.o
OBJCOPY arch/x86/boot/compressed/vmlinux.bin
HOSTCC arch/x86/boot/compressed/mkpiggy
CC arch/x86/boot/compressed/cpuflags.o
CC arch/x86/boot/compressed/early_serial_console.o
CC arch/x86/boot/compressed/kaslr.o
CC arch/x86/boot/compressed/acpi.o
CC arch/x86/boot/compressed/efi.o
GZIP arch/x86/boot/compressed/vmlinux.bin.gz
CC arch/x86/boot/compressed/misc.o
MKPIGGY arch/x86/boot/compressed/piggy.S
AS arch/x86/boot/compressed/piggy.o
LD arch/x86/boot/compressed/vmlinux
ZOFFSET arch/x86/boot/zoffset.h
OBJCOPY arch/x86/boot/vmlinux.bin
AS arch/x86/boot/header.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
BUILD arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready (#1)
run-parts: executing /workspace/ci/hooks/20-kernel-doc
+ SRC_DIR=/workspace/kernel
+ cd /workspace/kernel
+ find drivers/gpu/drm/xe/ -name '*.[ch]' -not -path 'drivers/gpu/drm/xe/display/*'
+ xargs ./scripts/kernel-doc -Werror -none include/uapi/drm/xe_drm.h
All hooks done
^ permalink raw reply [flat|nested] 58+ messages in thread* ✓ CI.checksparse: success for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (27 preceding siblings ...)
2024-09-12 19:39 ` ✓ CI.Hooks: " Patchwork
@ 2024-09-12 19:41 ` Patchwork
2024-09-12 19:58 ` ✗ CI.BAT: failure " Patchwork
2024-09-13 12:01 ` ✗ CI.FULL: " Patchwork
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:41 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : success
== Summary ==
+ trap cleanup EXIT
+ KERNEL=/kernel
+ MT=/root/linux/maintainer-tools
+ git clone https://gitlab.freedesktop.org/drm/maintainer-tools /root/linux/maintainer-tools
Cloning into '/root/linux/maintainer-tools'...
warning: redirecting to https://gitlab.freedesktop.org/drm/maintainer-tools.git/
+ make -C /root/linux/maintainer-tools
make: Entering directory '/root/linux/maintainer-tools'
cc -O2 -g -Wextra -o remap-log remap-log.c
make: Leaving directory '/root/linux/maintainer-tools'
+ cd /kernel
+ git config --global --add safe.directory /kernel
+ /root/linux/maintainer-tools/dim sparse --fast 9fd27ed0883cff53777b8db0b7c6db327132dcdc
Sparse version: 0.6.1 (Ubuntu: 0.6.1-2build1)
Fast mode used, each commit won't be checked separately.
Okay!
+ cleanup
++ stat -c %u:%g /kernel
+ chown -R 1003:1003 /kernel
^ permalink raw reply [flat|nested] 58+ messages in thread* ✗ CI.BAT: failure for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (28 preceding siblings ...)
2024-09-12 19:41 ` ✓ CI.checksparse: " Patchwork
@ 2024-09-12 19:58 ` Patchwork
2024-09-13 12:01 ` ✗ CI.FULL: " Patchwork
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-12 19:58 UTC (permalink / raw)
To: Himal Prasad Ghimiray; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 6896 bytes --]
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : failure
== Summary ==
CI Bug Log - changes from xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc_BAT -> xe-pw-137982v2_BAT
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-137982v2_BAT absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-137982v2_BAT, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (8 -> 8)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-137982v2_BAT:
### IGT changes ###
#### Possible regressions ####
* igt@xe_debugfs@gt:
- bat-lnl-2: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-lnl-2/igt@xe_debugfs@gt.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-lnl-2/igt@xe_debugfs@gt.html
- bat-dg2-oem2: [PASS][3] -> [DMESG-WARN][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-dg2-oem2/igt@xe_debugfs@gt.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-dg2-oem2/igt@xe_debugfs@gt.html
- bat-atsm-2: [PASS][5] -> [DMESG-WARN][6]
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-atsm-2/igt@xe_debugfs@gt.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-atsm-2/igt@xe_debugfs@gt.html
- bat-lnl-1: [PASS][7] -> [DMESG-WARN][8]
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-lnl-1/igt@xe_debugfs@gt.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-lnl-1/igt@xe_debugfs@gt.html
- bat-bmg-1: [PASS][9] -> [DMESG-WARN][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-bmg-1/igt@xe_debugfs@gt.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-bmg-1/igt@xe_debugfs@gt.html
- bat-adlp-7: [PASS][11] -> [DMESG-WARN][12]
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-adlp-7/igt@xe_debugfs@gt.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-adlp-7/igt@xe_debugfs@gt.html
* igt@xe_live_ktest@xe_migrate:
- bat-bmg-1: [PASS][13] -> [SKIP][14] +2 other tests skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-bmg-1/igt@xe_live_ktest@xe_migrate.html
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-bmg-1/igt@xe_live_ktest@xe_migrate.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@xe_debugfs@gt:
- {bat-bmg-2}: [PASS][15] -> [DMESG-WARN][16]
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-bmg-2/igt@xe_debugfs@gt.html
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-bmg-2/igt@xe_debugfs@gt.html
* igt@xe_live_ktest@xe_dma_buf:
- {bat-bmg-2}: [PASS][17] -> [SKIP][18] +2 other tests skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-bmg-2/igt@xe_live_ktest@xe_dma_buf.html
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-bmg-2/igt@xe_live_ktest@xe_dma_buf.html
Known issues
------------
Here are the changes found in xe-pw-137982v2_BAT that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_frontbuffer_tracking@basic:
- bat-adlp-7: [PASS][19] -> [FAIL][20] ([Intel XE#1861])
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-adlp-7/igt@kms_frontbuffer_tracking@basic.html
* igt@xe_live_ktest@xe_bo:
- bat-lnl-1: [PASS][21] -> [SKIP][22] ([Intel XE#1192]) +2 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-lnl-1/igt@xe_live_ktest@xe_bo.html
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-lnl-1/igt@xe_live_ktest@xe_bo.html
* igt@xe_live_ktest@xe_migrate:
- bat-adlp-7: [PASS][23] -> [SKIP][24] ([Intel XE#1192]) +2 other tests skip
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-adlp-7/igt@xe_live_ktest@xe_migrate.html
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-adlp-7/igt@xe_live_ktest@xe_migrate.html
- bat-lnl-2: [PASS][25] -> [SKIP][26] ([Intel XE#1192]) +2 other tests skip
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-lnl-2/igt@xe_live_ktest@xe_migrate.html
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-lnl-2/igt@xe_live_ktest@xe_migrate.html
- bat-dg2-oem2: [PASS][27] -> [SKIP][28] ([Intel XE#1192]) +2 other tests skip
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-dg2-oem2/igt@xe_live_ktest@xe_migrate.html
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-dg2-oem2/igt@xe_live_ktest@xe_migrate.html
- bat-atsm-2: [PASS][29] -> [SKIP][30] ([Intel XE#1192]) +2 other tests skip
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/bat-atsm-2/igt@xe_live_ktest@xe_migrate.html
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/bat-atsm-2/igt@xe_live_ktest@xe_migrate.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1192]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1192
[Intel XE#1861]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1861
Build changes
-------------
* Linux: xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc -> xe-pw-137982v2
IGT_8015: 8015
xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc: 9fd27ed0883cff53777b8db0b7c6db327132dcdc
xe-pw-137982v2: 137982v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/index.html
[-- Attachment #2: Type: text/html, Size: 7997 bytes --]
^ permalink raw reply [flat|nested] 58+ messages in thread* ✗ CI.FULL: failure for Fix xe_force_wake_get() failure handling (rev2)
2024-09-12 19:15 [PATCH v2 00/23] Fix xe_force_wake_get() failure handling Himal Prasad Ghimiray
` (29 preceding siblings ...)
2024-09-12 19:58 ` ✗ CI.BAT: failure " Patchwork
@ 2024-09-13 12:01 ` Patchwork
30 siblings, 0 replies; 58+ messages in thread
From: Patchwork @ 2024-09-13 12:01 UTC (permalink / raw)
To: Ghimiray, Himal Prasad; +Cc: intel-xe
[-- Attachment #1: Type: text/plain, Size: 68306 bytes --]
== Series Details ==
Series: Fix xe_force_wake_get() failure handling (rev2)
URL : https://patchwork.freedesktop.org/series/137982/
State : failure
== Summary ==
CI Bug Log - changes from xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc_full -> xe-pw-137982v2_full
====================================================
Summary
-------
**FAILURE**
Serious unknown changes coming with xe-pw-137982v2_full absolutely need to be
verified manually.
If you think the reported changes have nothing to do with the changes
introduced in xe-pw-137982v2_full, please notify your bug team (I915-ci-infra@lists.freedesktop.org) to allow them
to document this new failure mode, which will reduce false positives in CI.
Participating hosts (4 -> 4)
------------------------------
No changes in participating hosts
Possible new issues
-------------------
Here are the unknown changes that may have been introduced in xe-pw-137982v2_full:
### IGT changes ###
#### Possible regressions ####
* igt@xe_debugfs@gt:
- shard-dg2-set2: [PASS][1] -> [DMESG-WARN][2]
[1]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-433/igt@xe_debugfs@gt.html
[2]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-436/igt@xe_debugfs@gt.html
- shard-lnl: [PASS][3] -> [DMESG-WARN][4]
[3]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-4/igt@xe_debugfs@gt.html
[4]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-3/igt@xe_debugfs@gt.html
* igt@xe_exec_reset@gt-reset-stress:
- shard-adlp: [PASS][5] -> [DMESG-WARN][6] +1 other test dmesg-warn
[5]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-6/igt@xe_exec_reset@gt-reset-stress.html
[6]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-2/igt@xe_exec_reset@gt-reset-stress.html
#### Suppressed ####
The following results come from untrusted machines, tests, or statuses.
They do not affect the overall result.
* igt@kms_display_modes@extended-mode-basic:
- {shard-bmg}: [PASS][7] -> [DMESG-WARN][8] +1 other test dmesg-warn
[7]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-4/igt@kms_display_modes@extended-mode-basic.html
[8]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-7/igt@kms_display_modes@extended-mode-basic.html
* igt@xe_drm_fdinfo@basic-mem:
- {shard-bmg}: [PASS][9] -> [INCOMPLETE][10]
[9]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-4/igt@xe_drm_fdinfo@basic-mem.html
[10]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-7/igt@xe_drm_fdinfo@basic-mem.html
Known issues
------------
Here are the changes found in xe-pw-137982v2_full that come from known issues:
### IGT changes ###
#### Issues hit ####
* igt@kms_big_fb@4-tiled-64bpp-rotate-180:
- shard-lnl: [PASS][11] -> [FAIL][12] ([Intel XE#1659]) +1 other test fail
[11]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-5/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
[12]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-1/igt@kms_big_fb@4-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@linear-32bpp-rotate-270:
- shard-adlp: NOTRUN -> [SKIP][13] ([Intel XE#1201] / [Intel XE#316]) +1 other test skip
[13]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_big_fb@linear-32bpp-rotate-270.html
* igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
- shard-adlp: NOTRUN -> [SKIP][14] ([Intel XE#1201] / [Intel XE#607])
[14]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
* igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip:
- shard-adlp: NOTRUN -> [SKIP][15] ([Intel XE#1124] / [Intel XE#1201]) +5 other tests skip
[15]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_big_fb@yf-tiled-max-hw-stride-32bpp-rotate-0-hflip.html
* igt@kms_big_joiner@invalid-modeset:
- shard-adlp: NOTRUN -> [SKIP][16] ([Intel XE#1201] / [Intel XE#346])
[16]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_big_joiner@invalid-modeset.html
* igt@kms_bw@linear-tiling-2-displays-1920x1080p:
- shard-adlp: NOTRUN -> [SKIP][17] ([Intel XE#1201] / [Intel XE#367]) +1 other test skip
[17]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_bw@linear-tiling-2-displays-1920x1080p.html
* igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs:
- shard-adlp: NOTRUN -> [SKIP][18] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +11 other tests skip
[18]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_ccs@crc-primary-basic-4-tiled-dg2-rc-ccs.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-1:
- shard-adlp: NOTRUN -> [SKIP][19] ([Intel XE#1201] / [Intel XE#787]) +17 other tests skip
[19]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_ccs@crc-primary-rotation-180-4-tiled-dg2-rc-ccs@pipe-b-hdmi-a-1.html
* igt@kms_chamelium_color@ctm-0-50:
- shard-adlp: NOTRUN -> [SKIP][20] ([Intel XE#1201] / [Intel XE#306])
[20]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_chamelium_color@ctm-0-50.html
* igt@kms_chamelium_hpd@vga-hpd-fast:
- shard-adlp: NOTRUN -> [SKIP][21] ([Intel XE#1201] / [Intel XE#373]) +4 other tests skip
[21]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_chamelium_hpd@vga-hpd-fast.html
* igt@kms_content_protection@dp-mst-type-0:
- shard-adlp: NOTRUN -> [SKIP][22] ([Intel XE#1201] / [Intel XE#307])
[22]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_content_protection@dp-mst-type-0.html
* igt@kms_cursor_crc@cursor-random-512x512:
- shard-adlp: NOTRUN -> [SKIP][23] ([Intel XE#1201] / [Intel XE#308])
[23]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_cursor_crc@cursor-random-512x512.html
* igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic:
- shard-adlp: NOTRUN -> [SKIP][24] ([Intel XE#1201] / [Intel XE#309]) +1 other test skip
[24]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_cursor_legacy@2x-long-flip-vs-cursor-atomic.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size:
- shard-adlp: NOTRUN -> [SKIP][25] ([Intel XE#1201] / [Intel XE#323])
[25]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_cursor_legacy@short-busy-flip-before-cursor-atomic-transitions-varying-size.html
* igt@kms_cursor_legacy@single-move@pipe-a:
- shard-dg2-set2: [PASS][26] -> [DMESG-WARN][27] ([Intel XE#877]) +1 other test dmesg-warn
[26]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-435/igt@kms_cursor_legacy@single-move@pipe-a.html
[27]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-463/igt@kms_cursor_legacy@single-move@pipe-a.html
* igt@kms_cursor_legacy@torture-bo@pipe-a:
- shard-lnl: [PASS][28] -> [DMESG-WARN][29] ([Intel XE#877]) +1 other test dmesg-warn
[28]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-2/igt@kms_cursor_legacy@torture-bo@pipe-a.html
[29]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-2/igt@kms_cursor_legacy@torture-bo@pipe-a.html
* igt@kms_flip@2x-flip-vs-modeset-vs-hang:
- shard-adlp: NOTRUN -> [SKIP][30] ([Intel XE#1201] / [Intel XE#310]) +4 other tests skip
[30]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_flip@2x-flip-vs-modeset-vs-hang.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible:
- shard-dg2-set2: [PASS][31] -> [INCOMPLETE][32] ([Intel XE#1195] / [Intel XE#2049])
[31]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
[32]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-436/igt@kms_flip@flip-vs-expired-vblank-interruptible.html
* igt@kms_flip@flip-vs-expired-vblank-interruptible@c-hdmi-a6:
- shard-dg2-set2: [PASS][33] -> [INCOMPLETE][34] ([Intel XE#1195])
[33]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-433/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-hdmi-a6.html
[34]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-436/igt@kms_flip@flip-vs-expired-vblank-interruptible@c-hdmi-a6.html
* igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt:
- shard-adlp: NOTRUN -> [SKIP][35] ([Intel XE#1201] / [Intel XE#656]) +18 other tests skip
[35]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_frontbuffer_tracking@fbc-2p-scndscrn-shrfb-pgflip-blt.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw:
- shard-adlp: NOTRUN -> [SKIP][36] ([Intel XE#1201] / [Intel XE#651]) +8 other tests skip
[36]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_frontbuffer_tracking@fbcdrrs-1p-pri-indfb-multidraw.html
* igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary:
- shard-lnl: NOTRUN -> [SKIP][37] ([Intel XE#651]) +1 other test skip
[37]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-2/igt@kms_frontbuffer_tracking@fbcdrrs-indfb-scaledprimary.html
* igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-render:
- shard-lnl: NOTRUN -> [SKIP][38] ([Intel XE#656])
[38]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-2/igt@kms_frontbuffer_tracking@psr-2p-scndscrn-cur-indfb-draw-render.html
* igt@kms_frontbuffer_tracking@psr-modesetfrombusy:
- shard-adlp: NOTRUN -> [SKIP][39] ([Intel XE#1201] / [Intel XE#653]) +5 other tests skip
[39]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_frontbuffer_tracking@psr-modesetfrombusy.html
* igt@kms_hdr@invalid-hdr:
- shard-dg2-set2: [PASS][40] -> [SKIP][41] ([Intel XE#1201] / [Intel XE#455])
[40]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-463/igt@kms_hdr@invalid-hdr.html
[41]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_hdr@invalid-hdr.html
* igt@kms_plane@plane-position-covered:
- shard-lnl: [PASS][42] -> [DMESG-FAIL][43] ([Intel XE#324]) +1 other test dmesg-fail
[42]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-2/igt@kms_plane@plane-position-covered.html
[43]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-2/igt@kms_plane@plane-position-covered.html
* igt@kms_plane@plane-position-covered@pipe-b-plane-4:
- shard-lnl: [PASS][44] -> [DMESG-WARN][45] ([Intel XE#324])
[44]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-2/igt@kms_plane@plane-position-covered@pipe-b-plane-4.html
[45]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-2/igt@kms_plane@plane-position-covered@pipe-b-plane-4.html
* igt@kms_plane_lowres@tiling-y@pipe-d-hdmi-a-1:
- shard-adlp: NOTRUN -> [FAIL][46] ([Intel XE#1874]) +3 other tests fail
[46]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_plane_lowres@tiling-y@pipe-d-hdmi-a-1.html
* igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-exceed-fully-sf:
- shard-adlp: NOTRUN -> [SKIP][47] ([Intel XE#1201]) +3 other tests skip
[47]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-exceed-fully-sf.html
* igt@kms_psr@fbc-psr2-suspend:
- shard-adlp: NOTRUN -> [SKIP][48] ([Intel XE#1201] / [Intel XE#929]) +6 other tests skip
[48]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_psr@fbc-psr2-suspend.html
* igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
- shard-adlp: NOTRUN -> [SKIP][49] ([Intel XE#1149] / [Intel XE#1201])
[49]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
- shard-adlp: NOTRUN -> [SKIP][50] ([Intel XE#1201] / [Intel XE#327])
[50]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html
* igt@kms_scaling_modes@scaling-mode-center:
- shard-adlp: NOTRUN -> [SKIP][51] ([Intel XE#1201] / [Intel XE#455]) +11 other tests skip
[51]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@kms_scaling_modes@scaling-mode-center.html
* igt@kms_universal_plane@cursor-fb-leak:
- shard-adlp: [PASS][52] -> [FAIL][53] ([Intel XE#771] / [Intel XE#899])
[52]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-9/igt@kms_universal_plane@cursor-fb-leak.html
[53]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-9/igt@kms_universal_plane@cursor-fb-leak.html
* igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1:
- shard-adlp: [PASS][54] -> [FAIL][55] ([Intel XE#899])
[54]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-9/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
[55]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-9/igt@kms_universal_plane@cursor-fb-leak@pipe-d-hdmi-a-1.html
* igt@xe_copy_basic@mem-copy-linear-0xfd:
- shard-adlp: NOTRUN -> [SKIP][56] ([Intel XE#1123] / [Intel XE#1201])
[56]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@xe_copy_basic@mem-copy-linear-0xfd.html
* igt@xe_evict@evict-beng-mixed-threads-large:
- shard-adlp: NOTRUN -> [SKIP][57] ([Intel XE#1201] / [Intel XE#261]) +3 other tests skip
[57]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@xe_evict@evict-beng-mixed-threads-large.html
- shard-dg2-set2: [PASS][58] -> [TIMEOUT][59] ([Intel XE#1473])
[58]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@xe_evict@evict-beng-mixed-threads-large.html
[59]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@xe_evict@evict-beng-mixed-threads-large.html
* igt@xe_evict@evict-small-cm:
- shard-adlp: NOTRUN -> [SKIP][60] ([Intel XE#1201] / [Intel XE#261] / [Intel XE#688])
[60]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_evict@evict-small-cm.html
* igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind:
- shard-adlp: NOTRUN -> [SKIP][61] ([Intel XE#1201] / [Intel XE#1392]) +3 other tests skip
[61]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_exec_basic@multigpu-once-bindexecqueue-rebind.html
* igt@xe_exec_compute_mode@once-userptr-invalidate-race:
- shard-lnl: [PASS][62] -> [FAIL][63] ([Intel XE#1069])
[62]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-2/igt@xe_exec_compute_mode@once-userptr-invalidate-race.html
[63]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-3/igt@xe_exec_compute_mode@once-userptr-invalidate-race.html
* igt@xe_exec_fault_mode@many-userptr-imm:
- shard-adlp: NOTRUN -> [SKIP][64] ([Intel XE#1201] / [Intel XE#288]) +7 other tests skip
[64]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_exec_fault_mode@many-userptr-imm.html
* igt@xe_exec_reset@cm-cat-error:
- shard-adlp: NOTRUN -> [DMESG-FAIL][65] ([Intel XE#1962])
[65]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_exec_reset@cm-cat-error.html
* igt@xe_live_ktest@xe_mocs@xe_live_mocs_kernel_kunit:
- shard-adlp: NOTRUN -> [FAIL][66] ([Intel XE#1999]) +2 other tests fail
[66]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_live_ktest@xe_mocs@xe_live_mocs_kernel_kunit.html
* igt@xe_oa@enable-disable:
- shard-adlp: NOTRUN -> [SKIP][67] ([Intel XE#1201] / [Intel XE#2541]) +1 other test skip
[67]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-6/igt@xe_oa@enable-disable.html
* igt@xe_oa@oa-exponents:
- shard-lnl: [PASS][68] -> [FAIL][69] ([Intel XE#2723])
[68]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-8/igt@xe_oa@oa-exponents.html
[69]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-7/igt@xe_oa@oa-exponents.html
* igt@xe_oa@oa-exponents@ccs-0:
- shard-lnl: NOTRUN -> [FAIL][70] ([Intel XE#2723])
[70]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-7/igt@xe_oa@oa-exponents@ccs-0.html
* igt@xe_pm@d3cold-mmap-system:
- shard-adlp: NOTRUN -> [SKIP][71] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366]) +1 other test skip
[71]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_pm@d3cold-mmap-system.html
* igt@xe_query@multigpu-query-invalid-extension:
- shard-adlp: NOTRUN -> [SKIP][72] ([Intel XE#1201] / [Intel XE#944]) +1 other test skip
[72]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_query@multigpu-query-invalid-extension.html
#### Possible fixes ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x:
- shard-adlp: [DMESG-WARN][73] ([Intel XE#324]) -> [PASS][74] +1 other test pass
[73]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-1/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html
[74]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-1-x.html
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-edp-1-linear:
- shard-lnl: [FAIL][75] ([Intel XE#911]) -> [PASS][76] +2 other tests pass
[75]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-7/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-edp-1-linear.html
[76]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-4/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-c-edp-1-linear.html
* igt@kms_flip@2x-flip-vs-panning-interruptible:
- shard-dg2-set2: [DMESG-WARN][77] ([Intel XE#877]) -> [PASS][78]
[77]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-463/igt@kms_flip@2x-flip-vs-panning-interruptible.html
[78]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_flip@2x-flip-vs-panning-interruptible.html
* igt@kms_flip@2x-flip-vs-panning-interruptible@ab-dp2-hdmi-a3:
- {shard-bmg}: [DMESG-WARN][79] ([Intel XE#877]) -> [PASS][80] +6 other tests pass
[79]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-3/igt@kms_flip@2x-flip-vs-panning-interruptible@ab-dp2-hdmi-a3.html
[80]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-8/igt@kms_flip@2x-flip-vs-panning-interruptible@ab-dp2-hdmi-a3.html
* igt@kms_flip@2x-flip-vs-panning-interruptible@bd-hdmi-a6-dp4:
- shard-dg2-set2: [DMESG-WARN][81] -> [PASS][82]
[81]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-463/igt@kms_flip@2x-flip-vs-panning-interruptible@bd-hdmi-a6-dp4.html
[82]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_flip@2x-flip-vs-panning-interruptible@bd-hdmi-a6-dp4.html
* igt@kms_flip@basic-flip-vs-wf_vblank:
- shard-lnl: [FAIL][83] ([Intel XE#886]) -> [PASS][84] +1 other test pass
[83]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-3/igt@kms_flip@basic-flip-vs-wf_vblank.html
[84]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-8/igt@kms_flip@basic-flip-vs-wf_vblank.html
* igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y:
- shard-adlp: [FAIL][85] ([Intel XE#1874]) -> [PASS][86] +1 other test pass
[85]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-8/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y.html
[86]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-8/igt@kms_flip_tiling@flip-change-tiling@pipe-d-hdmi-a-1-y-to-y.html
* igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1:
- shard-lnl: [INCOMPLETE][87] ([Intel XE#2622]) -> [PASS][88] +1 other test pass
[87]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-2/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
[88]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-2/igt@kms_pipe_crc_basic@suspend-read-crc@pipe-a-edp-1.html
* igt@kms_plane@plane-position-hole:
- shard-lnl: [DMESG-WARN][89] ([Intel XE#324]) -> [PASS][90] +1 other test pass
[89]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-lnl-8/igt@kms_plane@plane-position-hole.html
[90]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-lnl-1/igt@kms_plane@plane-position-hole.html
* igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6:
- shard-dg2-set2: [FAIL][91] ([Intel XE#361]) -> [PASS][92]
[91]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-435/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
[92]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-463/igt@kms_plane_scaling@intel-max-src-size@pipe-a-hdmi-a-6.html
* igt@kms_universal_plane@cursor-fb-leak:
- {shard-bmg}: [FAIL][93] ([Intel XE#899]) -> [PASS][94] +3 other tests pass
[93]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-5/igt@kms_universal_plane@cursor-fb-leak.html
[94]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-1/igt@kms_universal_plane@cursor-fb-leak.html
* igt@xe_evict@evict-beng-mixed-many-threads-large:
- shard-dg2-set2: [FAIL][95] ([Intel XE#1000]) -> [PASS][96]
[95]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-435/igt@xe_evict@evict-beng-mixed-many-threads-large.html
[96]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-463/igt@xe_evict@evict-beng-mixed-many-threads-large.html
* igt@xe_evict@evict-beng-mixed-many-threads-small:
- shard-dg2-set2: [TIMEOUT][97] ([Intel XE#1473] / [Intel XE#402]) -> [PASS][98]
[97]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_evict@evict-beng-mixed-many-threads-small.html
[98]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_evict@evict-beng-mixed-many-threads-small.html
* igt@xe_evict@evict-beng-threads-large:
- {shard-bmg}: [TIMEOUT][99] ([Intel XE#1473]) -> [PASS][100]
[99]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-5/igt@xe_evict@evict-beng-threads-large.html
[100]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-1/igt@xe_evict@evict-beng-threads-large.html
* igt@xe_evict@evict-mixed-threads-large:
- {shard-bmg}: [FAIL][101] ([Intel XE#1000]) -> [PASS][102]
[101]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-5/igt@xe_evict@evict-mixed-threads-large.html
[102]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-1/igt@xe_evict@evict-mixed-threads-large.html
* igt@xe_evict@evict-threads-large:
- shard-dg2-set2: [TIMEOUT][103] ([Intel XE#1473]) -> [PASS][104]
[103]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_evict@evict-threads-large.html
[104]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-434/igt@xe_evict@evict-threads-large.html
* igt@xe_oa@oa-exponents:
- {shard-bmg}: [FAIL][105] ([Intel XE#2723]) -> [PASS][106]
[105]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-bmg-2/igt@xe_oa@oa-exponents.html
[106]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-bmg-2/igt@xe_oa@oa-exponents.html
* igt@xe_pm@s4-d3hot-basic-exec:
- shard-adlp: [ABORT][107] ([Intel XE#1358] / [Intel XE#1607]) -> [PASS][108]
[107]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-9/igt@xe_pm@s4-d3hot-basic-exec.html
[108]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-1/igt@xe_pm@s4-d3hot-basic-exec.html
* igt@xe_pm@s4-multiple-execs:
- shard-dg2-set2: [DMESG-WARN][109] ([Intel XE#2019]) -> [PASS][110]
[109]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@xe_pm@s4-multiple-execs.html
[110]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@xe_pm@s4-multiple-execs.html
#### Warnings ####
* igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs:
- shard-dg2-set2: [SKIP][111] ([Intel XE#801]) -> [SKIP][112] ([Intel XE#1201] / [Intel XE#801]) +23 other tests skip
[111]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs.html
[112]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_async_flips@async-flip-with-page-flip-events@pipe-b-hdmi-a-6-4-mc-ccs.html
* igt@kms_big_fb@4-tiled-8bpp-rotate-270:
- shard-dg2-set2: [SKIP][113] ([Intel XE#316]) -> [SKIP][114] ([Intel XE#1201] / [Intel XE#316]) +2 other tests skip
[113]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
[114]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_big_fb@4-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-8bpp-rotate-270:
- shard-dg2-set2: [SKIP][115] ([Intel XE#1201] / [Intel XE#316]) -> [SKIP][116] ([Intel XE#316]) +3 other tests skip
[115]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html
[116]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_big_fb@x-tiled-8bpp-rotate-270.html
* igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip:
- shard-adlp: [DMESG-FAIL][117] ([Intel XE#324]) -> [FAIL][118] ([Intel XE#1231]) +1 other test fail
[117]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-1/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
[118]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-9/igt@kms_big_fb@x-tiled-max-hw-stride-64bpp-rotate-180-async-flip.html
* igt@kms_big_fb@y-tiled-addfb-size-overflow:
- shard-dg2-set2: [SKIP][119] ([Intel XE#610]) -> [SKIP][120] ([Intel XE#1201] / [Intel XE#610])
[119]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
[120]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_big_fb@y-tiled-addfb-size-overflow.html
* igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip:
- shard-dg2-set2: [SKIP][121] ([Intel XE#1124]) -> [SKIP][122] ([Intel XE#1124] / [Intel XE#1201]) +5 other tests skip
[121]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
[122]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_big_fb@y-tiled-max-hw-stride-32bpp-rotate-180-hflip.html
* igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip:
- shard-adlp: [FAIL][123] ([Intel XE#1231]) -> [DMESG-FAIL][124] ([Intel XE#324]) +1 other test dmesg-fail
[123]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-adlp-8/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
[124]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-adlp-2/igt@kms_big_fb@y-tiled-max-hw-stride-64bpp-rotate-180-hflip-async-flip.html
* igt@kms_big_fb@yf-tiled-64bpp-rotate-180:
- shard-dg2-set2: [SKIP][125] ([Intel XE#1124] / [Intel XE#1201]) -> [SKIP][126] ([Intel XE#1124]) +9 other tests skip
[125]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
[126]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_big_fb@yf-tiled-64bpp-rotate-180.html
* igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow:
- shard-dg2-set2: [SKIP][127] ([Intel XE#1201] / [Intel XE#607]) -> [SKIP][128] ([Intel XE#607])
[127]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
[128]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_big_fb@yf-tiled-addfb-size-offset-overflow.html
* igt@kms_big_joiner@basic:
- shard-dg2-set2: [SKIP][129] ([Intel XE#1201] / [Intel XE#346]) -> [SKIP][130] ([Intel XE#346])
[129]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_big_joiner@basic.html
[130]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_big_joiner@basic.html
* igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p:
- shard-dg2-set2: [SKIP][131] ([Intel XE#1201] / [Intel XE#367]) -> [SKIP][132] ([Intel XE#367]) +1 other test skip
[131]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p.html
[132]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_bw@connected-linear-tiling-1-displays-2560x1440p.html
* igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p:
- shard-dg2-set2: [SKIP][133] ([Intel XE#367]) -> [SKIP][134] ([Intel XE#1201] / [Intel XE#367]) +3 other tests skip
[133]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html
[134]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_bw@connected-linear-tiling-1-displays-3840x2160p.html
* igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p:
- shard-dg2-set2: [SKIP][135] ([Intel XE#2191]) -> [SKIP][136] ([Intel XE#1201] / [Intel XE#2191])
[135]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
[136]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_bw@connected-linear-tiling-3-displays-2160x1440p.html
* igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p:
- shard-dg2-set2: [SKIP][137] ([Intel XE#1201] / [Intel XE#2191]) -> [SKIP][138] ([Intel XE#2191])
[137]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
[138]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_bw@connected-linear-tiling-4-displays-2560x1440p.html
* igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs:
- shard-dg2-set2: [SKIP][139] ([Intel XE#1201] / [Intel XE#1252]) -> [SKIP][140] ([Intel XE#1252]) +1 other test skip
[139]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
[140]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_ccs@crc-primary-basic-4-tiled-bmg-ccs.html
* igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6:
- shard-dg2-set2: [SKIP][141] ([Intel XE#787]) -> [SKIP][142] ([Intel XE#1201] / [Intel XE#787]) +83 other tests skip
[141]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6.html
[142]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_ccs@crc-primary-basic-4-tiled-mtl-rc-ccs@pipe-b-hdmi-a-6.html
* igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-d-dp-4:
- shard-dg2-set2: [SKIP][143] ([Intel XE#455] / [Intel XE#787]) -> [SKIP][144] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) +23 other tests skip
[143]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-d-dp-4.html
[144]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_ccs@crc-primary-rotation-180-4-tiled-mtl-rc-ccs-cc@pipe-d-dp-4.html
* igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6:
- shard-dg2-set2: [SKIP][145] ([Intel XE#1201] / [Intel XE#787]) -> [SKIP][146] ([Intel XE#787]) +76 other tests skip
[145]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6.html
[146]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-4-tiled-mtl-rc-ccs-cc@pipe-c-hdmi-a-6.html
* igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4:
- shard-dg2-set2: [SKIP][147] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#787]) -> [SKIP][148] ([Intel XE#455] / [Intel XE#787]) +21 other tests skip
[147]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4.html
[148]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_ccs@crc-sprite-planes-basic-y-tiled-gen12-rc-ccs@pipe-d-dp-4.html
* igt@kms_chamelium_color@degamma:
- shard-dg2-set2: [SKIP][149] ([Intel XE#1201] / [Intel XE#306]) -> [SKIP][150] ([Intel XE#306]) +2 other tests skip
[149]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_chamelium_color@degamma.html
[150]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_chamelium_color@degamma.html
* igt@kms_chamelium_color@gamma:
- shard-dg2-set2: [SKIP][151] ([Intel XE#306]) -> [SKIP][152] ([Intel XE#1201] / [Intel XE#306]) +1 other test skip
[151]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_chamelium_color@gamma.html
[152]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_chamelium_color@gamma.html
* igt@kms_chamelium_edid@hdmi-mode-timings:
- shard-dg2-set2: [SKIP][153] ([Intel XE#373]) -> [SKIP][154] ([Intel XE#1201] / [Intel XE#373]) +6 other tests skip
[153]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_chamelium_edid@hdmi-mode-timings.html
[154]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_chamelium_edid@hdmi-mode-timings.html
* igt@kms_chamelium_hpd@hdmi-hpd:
- shard-dg2-set2: [SKIP][155] ([Intel XE#1201] / [Intel XE#373]) -> [SKIP][156] ([Intel XE#373]) +7 other tests skip
[155]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_chamelium_hpd@hdmi-hpd.html
[156]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_chamelium_hpd@hdmi-hpd.html
* igt@kms_content_protection@dp-mst-lic-type-0:
- shard-dg2-set2: [SKIP][157] ([Intel XE#1201] / [Intel XE#307]) -> [SKIP][158] ([Intel XE#307])
[157]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_content_protection@dp-mst-lic-type-0.html
[158]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_content_protection@dp-mst-lic-type-0.html
* igt@kms_cursor_crc@cursor-random-512x170:
- shard-dg2-set2: [SKIP][159] ([Intel XE#308]) -> [SKIP][160] ([Intel XE#1201] / [Intel XE#308])
[159]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_cursor_crc@cursor-random-512x170.html
[160]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_cursor_crc@cursor-random-512x170.html
* igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle:
- shard-dg2-set2: [SKIP][161] ([Intel XE#323]) -> [SKIP][162] ([Intel XE#1201] / [Intel XE#323])
[161]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
[162]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_cursor_legacy@short-busy-flip-before-cursor-toggle.html
* igt@kms_fbcon_fbt@psr:
- shard-dg2-set2: [SKIP][163] ([Intel XE#1201] / [Intel XE#776]) -> [SKIP][164] ([Intel XE#776])
[163]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_fbcon_fbt@psr.html
[164]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_fbcon_fbt@psr.html
* igt@kms_feature_discovery@chamelium:
- shard-dg2-set2: [SKIP][165] ([Intel XE#1201] / [Intel XE#701]) -> [SKIP][166] ([Intel XE#701])
[165]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_feature_discovery@chamelium.html
[166]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_feature_discovery@chamelium.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling:
- shard-dg2-set2: [SKIP][167] ([Intel XE#1201] / [Intel XE#455]) -> [SKIP][168] ([Intel XE#455]) +17 other tests skip
[167]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html
[168]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytile-downscaling.html
* igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling:
- shard-dg2-set2: [SKIP][169] ([Intel XE#455]) -> [SKIP][170] ([Intel XE#1201] / [Intel XE#455]) +11 other tests skip
[169]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
[170]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_flip_scaled_crc@flip-64bpp-ytile-to-32bpp-ytilegen12rcccs-upscaling.html
* igt@kms_force_connector_basic@prune-stale-modes:
- shard-dg2-set2: [SKIP][171] ([i915#5274]) -> [SKIP][172] ([Intel XE#1201] / [i915#5274])
[171]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_force_connector_basic@prune-stale-modes.html
[172]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_force_connector_basic@prune-stale-modes.html
* igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte:
- shard-dg2-set2: [SKIP][173] ([Intel XE#1201] / [Intel XE#651]) -> [SKIP][174] ([Intel XE#651]) +29 other tests skip
[173]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte.html
[174]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-1p-rte.html
* igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc:
- shard-dg2-set2: [SKIP][175] ([Intel XE#651]) -> [SKIP][176] ([Intel XE#1201] / [Intel XE#651]) +20 other tests skip
[175]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc.html
[176]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_frontbuffer_tracking@fbcdrrs-rgb101010-draw-mmap-wc.html
* igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y:
- shard-dg2-set2: [SKIP][177] ([Intel XE#1201] / [Intel XE#658]) -> [SKIP][178] ([Intel XE#658])
[177]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
[178]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcdrrs-tiling-y.html
* igt@kms_frontbuffer_tracking@fbcpsr-slowdraw:
- shard-dg2-set2: [SKIP][179] ([Intel XE#653]) -> [SKIP][180] ([Intel XE#1201] / [Intel XE#653]) +20 other tests skip
[179]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html
[180]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html
* igt@kms_frontbuffer_tracking@fbcpsr-tiling-y:
- shard-dg2-set2: [SKIP][181] ([Intel XE#658]) -> [SKIP][182] ([Intel XE#1201] / [Intel XE#658])
[181]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
[182]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_frontbuffer_tracking@fbcpsr-tiling-y.html
* igt@kms_frontbuffer_tracking@psr-slowdraw:
- shard-dg2-set2: [SKIP][183] ([Intel XE#1201] / [Intel XE#653]) -> [SKIP][184] ([Intel XE#653]) +30 other tests skip
[183]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_frontbuffer_tracking@psr-slowdraw.html
[184]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_frontbuffer_tracking@psr-slowdraw.html
* igt@kms_multipipe_modeset@basic-max-pipe-crc-check:
- shard-dg2-set2: [SKIP][185] ([Intel XE#356]) -> [SKIP][186] ([Intel XE#1201] / [Intel XE#356])
[185]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
[186]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_multipipe_modeset@basic-max-pipe-crc-check.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format:
- shard-dg2-set2: [SKIP][187] ([Intel XE#1201] / [Intel XE#455] / [Intel XE#498]) -> [SKIP][188] ([Intel XE#455] / [Intel XE#498]) +1 other test skip
[187]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
[188]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format.html
* igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-c-hdmi-a-6:
- shard-dg2-set2: [SKIP][189] ([Intel XE#1201] / [Intel XE#498]) -> [SKIP][190] ([Intel XE#498]) +2 other tests skip
[189]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-c-hdmi-a-6.html
[190]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_plane_scaling@plane-downscale-factor-0-25-with-pixel-format@pipe-c-hdmi-a-6.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-c-hdmi-a-6:
- shard-dg2-set2: [SKIP][191] ([Intel XE#2318]) -> [SKIP][192] ([Intel XE#1201] / [Intel XE#2318]) +2 other tests skip
[191]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-c-hdmi-a-6.html
[192]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-c-hdmi-a-6.html
* igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-6:
- shard-dg2-set2: [SKIP][193] ([Intel XE#2318] / [Intel XE#455]) -> [SKIP][194] ([Intel XE#1201] / [Intel XE#2318] / [Intel XE#455]) +1 other test skip
[193]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-6.html
[194]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_plane_scaling@planes-upscale-factor-0-25-downscale-factor-0-25@pipe-d-hdmi-a-6.html
* igt@kms_pm_backlight@basic-brightness:
- shard-dg2-set2: [SKIP][195] ([Intel XE#870]) -> [SKIP][196] ([Intel XE#1201] / [Intel XE#870])
[195]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_pm_backlight@basic-brightness.html
[196]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_pm_backlight@basic-brightness.html
* igt@kms_pm_dc@deep-pkgc:
- shard-dg2-set2: [SKIP][197] ([Intel XE#908]) -> [SKIP][198] ([Intel XE#1201] / [Intel XE#908])
[197]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_pm_dc@deep-pkgc.html
[198]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_pm_dc@deep-pkgc.html
* igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf:
- shard-dg2-set2: [SKIP][199] ([Intel XE#1489]) -> [SKIP][200] ([Intel XE#1201] / [Intel XE#1489]) +1 other test skip
[199]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf.html
[200]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_psr2_sf@fbc-cursor-plane-move-continuous-exceed-sf.html
* igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-sf:
- shard-dg2-set2: [SKIP][201] ([Intel XE#1201] / [Intel XE#1489]) -> [SKIP][202] ([Intel XE#1489]) +4 other tests skip
[201]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-sf.html
[202]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_psr2_sf@fbc-overlay-plane-move-continuous-sf.html
* igt@kms_psr2_su@frontbuffer-xrgb8888:
- shard-dg2-set2: [SKIP][203] ([Intel XE#1122] / [Intel XE#1201]) -> [SKIP][204] ([Intel XE#1122])
[203]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_psr2_su@frontbuffer-xrgb8888.html
[204]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_psr2_su@frontbuffer-xrgb8888.html
* igt@kms_psr2_su@page_flip-p010:
- shard-dg2-set2: [SKIP][205] ([Intel XE#1122]) -> [SKIP][206] ([Intel XE#1122] / [Intel XE#1201])
[205]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_psr2_su@page_flip-p010.html
[206]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_psr2_su@page_flip-p010.html
* igt@kms_psr@pr-sprite-blt:
- shard-dg2-set2: [SKIP][207] ([Intel XE#1201] / [Intel XE#929]) -> [SKIP][208] ([Intel XE#929]) +13 other tests skip
[207]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_psr@pr-sprite-blt.html
[208]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_psr@pr-sprite-blt.html
* igt@kms_psr@psr-dpms:
- shard-dg2-set2: [SKIP][209] ([Intel XE#929]) -> [SKIP][210] ([Intel XE#1201] / [Intel XE#929]) +10 other tests skip
[209]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_psr@psr-dpms.html
[210]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_psr@psr-dpms.html
* igt@kms_psr_stress_test@flip-primary-invalidate-overlay:
- shard-dg2-set2: [SKIP][211] ([Intel XE#1149] / [Intel XE#1201]) -> [SKIP][212] ([Intel XE#1149]) +1 other test skip
[211]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
[212]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_psr_stress_test@flip-primary-invalidate-overlay.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-270:
- shard-dg2-set2: [SKIP][213] ([Intel XE#1201] / [Intel XE#327]) -> [SKIP][214] ([Intel XE#327])
[213]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html
[214]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_rotation_crc@primary-y-tiled-reflect-x-270.html
* igt@kms_rotation_crc@primary-y-tiled-reflect-x-90:
- shard-dg2-set2: [SKIP][215] ([Intel XE#327]) -> [SKIP][216] ([Intel XE#1201] / [Intel XE#327]) +2 other tests skip
[215]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
[216]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_rotation_crc@primary-y-tiled-reflect-x-90.html
* igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0:
- shard-dg2-set2: [SKIP][217] ([Intel XE#1127]) -> [SKIP][218] ([Intel XE#1127] / [Intel XE#1201])
[217]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
[218]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@kms_rotation_crc@primary-yf-tiled-reflect-x-0.html
* igt@kms_tiled_display@basic-test-pattern:
- shard-dg2-set2: [SKIP][219] ([Intel XE#1201] / [Intel XE#362]) -> [FAIL][220] ([Intel XE#1729])
[219]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern.html
[220]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_tiled_display@basic-test-pattern.html
* igt@kms_tiled_display@basic-test-pattern-with-chamelium:
- shard-dg2-set2: [SKIP][221] ([Intel XE#1201] / [Intel XE#362]) -> [SKIP][222] ([Intel XE#1201] / [Intel XE#1500])
[221]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-463/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
[222]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@kms_tiled_display@basic-test-pattern-with-chamelium.html
* igt@kms_vrr@cmrr:
- shard-dg2-set2: [SKIP][223] ([Intel XE#2168]) -> [SKIP][224] ([Intel XE#1201] / [Intel XE#2168])
[223]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@kms_vrr@cmrr.html
[224]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@kms_vrr@cmrr.html
* igt@kms_vrr@lobf:
- shard-dg2-set2: [SKIP][225] ([Intel XE#1201] / [Intel XE#2168]) -> [SKIP][226] ([Intel XE#2168])
[225]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-434/igt@kms_vrr@lobf.html
[226]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_vrr@lobf.html
* igt@kms_writeback@writeback-check-output-xrgb2101010:
- shard-dg2-set2: [SKIP][227] ([Intel XE#1201] / [Intel XE#756]) -> [SKIP][228] ([Intel XE#756])
[227]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@kms_writeback@writeback-check-output-xrgb2101010.html
[228]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@kms_writeback@writeback-check-output-xrgb2101010.html
* igt@xe_compute_preempt@compute-preempt-many:
- shard-dg2-set2: [SKIP][229] ([Intel XE#1201] / [Intel XE#1280] / [Intel XE#455]) -> [SKIP][230] ([Intel XE#1280] / [Intel XE#455]) +1 other test skip
[229]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_compute_preempt@compute-preempt-many.html
[230]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_compute_preempt@compute-preempt-many.html
* igt@xe_copy_basic@mem-copy-linear-0xfffe:
- shard-dg2-set2: [SKIP][231] ([Intel XE#1123]) -> [SKIP][232] ([Intel XE#1123] / [Intel XE#1201])
[231]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_copy_basic@mem-copy-linear-0xfffe.html
[232]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@xe_copy_basic@mem-copy-linear-0xfffe.html
* igt@xe_copy_basic@mem-set-linear-0x369:
- shard-dg2-set2: [SKIP][233] ([Intel XE#1126]) -> [SKIP][234] ([Intel XE#1126] / [Intel XE#1201])
[233]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_copy_basic@mem-set-linear-0x369.html
[234]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@xe_copy_basic@mem-set-linear-0x369.html
* igt@xe_exec_fault_mode@many-execqueues-basic-imm:
- shard-dg2-set2: [SKIP][235] ([Intel XE#1201] / [Intel XE#288]) -> [SKIP][236] ([Intel XE#288]) +24 other tests skip
[235]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_exec_fault_mode@many-execqueues-basic-imm.html
[236]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_exec_fault_mode@many-execqueues-basic-imm.html
* igt@xe_exec_fault_mode@twice-userptr-rebind-imm:
- shard-dg2-set2: [SKIP][237] ([Intel XE#288]) -> [SKIP][238] ([Intel XE#1201] / [Intel XE#288]) +18 other tests skip
[237]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html
[238]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@xe_exec_fault_mode@twice-userptr-rebind-imm.html
* igt@xe_exec_mix_modes@exec-simple-batch-store-lr:
- shard-dg2-set2: [SKIP][239] ([Intel XE#2360]) -> [SKIP][240] ([Intel XE#1201] / [Intel XE#2360])
[239]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
[240]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@xe_exec_mix_modes@exec-simple-batch-store-lr.html
* igt@xe_media_fill@media-fill:
- shard-dg2-set2: [SKIP][241] ([Intel XE#1201] / [Intel XE#560]) -> [SKIP][242] ([Intel XE#560])
[241]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_media_fill@media-fill.html
[242]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_media_fill@media-fill.html
* igt@xe_module_load@force-load:
- shard-dg2-set2: [SKIP][243] ([Intel XE#378]) -> [SKIP][244] ([Intel XE#1201] / [Intel XE#378])
[243]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_module_load@force-load.html
[244]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-466/igt@xe_module_load@force-load.html
* igt@xe_oa@non-privileged-access-vaddr:
- shard-dg2-set2: [SKIP][245] ([Intel XE#1201] / [Intel XE#2541]) -> [SKIP][246] ([Intel XE#2541]) +3 other tests skip
[245]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_oa@non-privileged-access-vaddr.html
[246]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_oa@non-privileged-access-vaddr.html
* igt@xe_oa@rc6-disable:
- shard-dg2-set2: [SKIP][247] ([Intel XE#2541]) -> [SKIP][248] ([Intel XE#1201] / [Intel XE#2541]) +4 other tests skip
[247]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_oa@rc6-disable.html
[248]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@xe_oa@rc6-disable.html
* igt@xe_pat@display-vs-wb-transient:
- shard-dg2-set2: [SKIP][249] ([Intel XE#1337]) -> [SKIP][250] ([Intel XE#1201] / [Intel XE#1337])
[249]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_pat@display-vs-wb-transient.html
[250]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-433/igt@xe_pat@display-vs-wb-transient.html
* igt@xe_pat@pat-index-xe2:
- shard-dg2-set2: [SKIP][251] ([Intel XE#1201] / [Intel XE#977]) -> [SKIP][252] ([Intel XE#977])
[251]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_pat@pat-index-xe2.html
[252]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_pat@pat-index-xe2.html
* igt@xe_pm@d3cold-mmap-system:
- shard-dg2-set2: [SKIP][253] ([Intel XE#1201] / [Intel XE#2284] / [Intel XE#366]) -> [SKIP][254] ([Intel XE#2284] / [Intel XE#366])
[253]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_pm@d3cold-mmap-system.html
[254]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_pm@d3cold-mmap-system.html
* igt@xe_query@multigpu-query-cs-cycles:
- shard-dg2-set2: [SKIP][255] ([Intel XE#944]) -> [SKIP][256] ([Intel XE#1201] / [Intel XE#944]) +1 other test skip
[255]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-432/igt@xe_query@multigpu-query-cs-cycles.html
[256]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-435/igt@xe_query@multigpu-query-cs-cycles.html
* igt@xe_query@multigpu-query-engines:
- shard-dg2-set2: [SKIP][257] ([Intel XE#1201] / [Intel XE#944]) -> [SKIP][258] ([Intel XE#944]) +2 other tests skip
[257]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc/shard-dg2-466/igt@xe_query@multigpu-query-engines.html
[258]: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/shard-dg2-432/igt@xe_query@multigpu-query-engines.html
{name}: This element is suppressed. This means it is ignored when computing
the status of the difference (SUCCESS, WARNING, or FAILURE).
[Intel XE#1000]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1000
[Intel XE#1069]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1069
[Intel XE#1122]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1122
[Intel XE#1123]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1123
[Intel XE#1124]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1124
[Intel XE#1126]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1126
[Intel XE#1127]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1127
[Intel XE#1149]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1149
[Intel XE#1195]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1195
[Intel XE#1201]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1201
[Intel XE#1231]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1231
[Intel XE#1252]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1252
[Intel XE#1280]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1280
[Intel XE#1337]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1337
[Intel XE#1358]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1358
[Intel XE#1392]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1392
[Intel XE#1473]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1473
[Intel XE#1489]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1489
[Intel XE#1500]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1500
[Intel XE#1607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1607
[Intel XE#1638]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1638
[Intel XE#1659]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1659
[Intel XE#1729]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1729
[Intel XE#1874]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1874
[Intel XE#1962]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1962
[Intel XE#1999]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/1999
[Intel XE#2019]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2019
[Intel XE#2049]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2049
[Intel XE#2168]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2168
[Intel XE#2191]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2191
[Intel XE#2284]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2284
[Intel XE#2318]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2318
[Intel XE#2360]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2360
[Intel XE#2514]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2514
[Intel XE#2541]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2541
[Intel XE#261]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/261
[Intel XE#2622]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2622
[Intel XE#2723]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/2723
[Intel XE#288]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/288
[Intel XE#306]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/306
[Intel XE#307]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/307
[Intel XE#308]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/308
[Intel XE#309]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/309
[Intel XE#310]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/310
[Intel XE#316]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/316
[Intel XE#323]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/323
[Intel XE#324]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/324
[Intel XE#327]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/327
[Intel XE#346]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/346
[Intel XE#356]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/356
[Intel XE#361]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/361
[Intel XE#362]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/362
[Intel XE#366]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/366
[Intel XE#367]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/367
[Intel XE#373]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/373
[Intel XE#378]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/378
[Intel XE#402]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/402
[Intel XE#455]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/455
[Intel XE#498]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/498
[Intel XE#560]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/560
[Intel XE#607]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/607
[Intel XE#610]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/610
[Intel XE#651]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/651
[Intel XE#653]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/653
[Intel XE#656]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/656
[Intel XE#658]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/658
[Intel XE#688]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/688
[Intel XE#701]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/701
[Intel XE#756]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/756
[Intel XE#771]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/771
[Intel XE#776]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/776
[Intel XE#787]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/787
[Intel XE#801]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/801
[Intel XE#870]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/870
[Intel XE#877]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/877
[Intel XE#886]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/886
[Intel XE#899]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/899
[Intel XE#908]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/908
[Intel XE#911]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/911
[Intel XE#929]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/929
[Intel XE#944]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/944
[Intel XE#977]: https://gitlab.freedesktop.org/drm/xe/kernel/issues/977
[i915#5274]: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/5274
Build changes
-------------
* Linux: xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc -> xe-pw-137982v2
IGT_8015: 8015
xe-1939-9fd27ed0883cff53777b8db0b7c6db327132dcdc: 9fd27ed0883cff53777b8db0b7c6db327132dcdc
xe-pw-137982v2: 137982v2
== Logs ==
For more details see: https://intel-gfx-ci.01.org/tree/intel-xe/xe-pw-137982v2/index.html
[-- Attachment #2: Type: text/html, Size: 89605 bytes --]
^ permalink raw reply [flat|nested] 58+ messages in thread