All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gustavo Sousa <gustavo.sousa@intel.com>
To: Matt Atwood <matthew.s.atwood@intel.com>
Cc: <igt-dev@lists.freedesktop.org>, Matt Roper <matthew.d.roper@intel.com>
Subject: Re: [PATCH i-g-t v2 03/11] lib/xe: Gather workarounds debugfs dumps in a cache struct
Date: Tue, 20 Oct 2026 19:49:48 -0300	[thread overview]
Message-ID: <87qzhkgf77.fsf@intel.com> (raw)
In-Reply-To: <20261020212422.GB180749@msatwood-mobl>

Matt Atwood <matthew.s.atwood@intel.com> writes:

> On Wed, Sep 23, 2026 at 06:41:10PM -0300, Gustavo Sousa wrote:
>> In an upcoming change, we will cache workaround information in struct
>> xe_device.  As a preparation for that, add the logic to gather the
>> dumps of workaround debugfs files into a cache struct.  Such a cache
>> will be kept attached to xe_device as a follow-up.
>> 
>> Signed-off-by: Gustavo Sousa <gustavo.sousa@intel.com>
> looks like MattR's rb got dropped from series one

Yeah.  I should have called it out, sorry.

I intentionally dropped it because I changed the approach in v2 and I
would like a new review on this new version.

--
Gustavo Sousa

>> ---
>>  lib/xe/xe_wa.c | 140 +++++++++++++++++++++++++++++++++++++++++++--------------
>>  1 file changed, 106 insertions(+), 34 deletions(-)
>> 
>> diff --git a/lib/xe/xe_wa.c b/lib/xe/xe_wa.c
>> index c0c97e244564..93b97c7c1476 100644
>> --- a/lib/xe/xe_wa.c
>> +++ b/lib/xe/xe_wa.c
>> @@ -8,6 +8,7 @@
>>  #include <stdint.h>
>>  #include <stdio.h>
>>  
>> +#include "igt_core.h"
>>  #include "igt_debugfs.h"
>>  #include "igt_sysfs.h"
>>  
>> @@ -16,6 +17,101 @@
>>  
>>  #include "tests/xe_wa.h"
>>  
>> +struct xe_wa_cache {
>> +	int num_dumps;
>> +	char *dumps[];
>> +};
>> +
>> +static void free_wa_debugfs_dumps(struct xe_wa_cache *wa_cache)
>> +{
>> +	for (int i = 0; i < wa_cache->num_dumps && wa_cache->dumps[i]; i++) {
>> +		free(wa_cache->dumps[i]);
>> +		wa_cache->dumps[i] = NULL;
>> +	}
>> +}
>> +
>> +static int get_wa_debugfs_count(int fd)
>> +{
>> +	int gt;
>> +	int count = 1; /* Device workarounds */
>> +
>> +	xe_for_each_gt(fd, gt)
>> +		count++;
>> +
>> +	return count;
>> +}
>> +
>> +static int get_wa_debugfs_dumps(int fd, struct xe_wa_cache *wa_cache)
>> +{
>> +	int gt;
>> +	int debugfs_fd;
>> +	int count;
>> +	int ret = 0;
>> +
>> +	debugfs_fd = igt_debugfs_dir(fd);
>> +	if (debugfs_fd == -1)
>> +		goto err;
>> +
>> +	count = 0;
>> +
>> +	if (!(wa_cache->dumps[count++] = igt_sysfs_get(debugfs_fd, "workarounds")))
>> +		goto err;
>> +
>> +	xe_for_each_gt(fd, gt) {
>> +		char name[32];
>> +
>> +		snprintf(name, sizeof(name), "gt%d/workarounds", gt);
>> +
>> +		if (!(wa_cache->dumps[count++] = igt_sysfs_get(debugfs_fd, name)))
>> +			goto err;
>> +	}
>> +
>> +	if (igt_warn_on(count != wa_cache->num_dumps))
>> +		goto err;
>> +
>> +	goto out;
>> +
>> +err:
>> +	free_wa_debugfs_dumps(wa_cache);
>> +	ret = 1;
>> +
>> +out:
>> +	close(debugfs_fd);
>> +
>> +	return ret;
>> +}
>> +
>> +static void free_cache(struct xe_wa_cache *wa_cache)
>> +{
>> +	if (!wa_cache)
>> +		return;
>> +
>> +	free_wa_debugfs_dumps(wa_cache);
>> +	free(wa_cache);
>> +}
>> +
>> +static struct xe_wa_cache *build_cache(int fd)
>> +{
>> +	struct xe_wa_cache *wa_cache;
>> +	int num_dumps;
>> +
>> +	num_dumps = get_wa_debugfs_count(fd);
>> +	wa_cache = calloc(1, sizeof(*wa_cache) + num_dumps * sizeof(wa_cache->dumps[0]));
>> +
>> +	if (igt_warn_on(!wa_cache))
>> +		return NULL;
>> +
>> +	wa_cache->num_dumps = num_dumps;
>> +
>> +	if (igt_warn_on(get_wa_debugfs_dumps(fd, wa_cache))) {
>> +		free_cache(wa_cache);
>> +
>> +		return NULL;
>> +	}
>> +
>> +	return wa_cache;
>> +}
>> +
>>  static int debugfs_dump_has_wa(char *dump, const char *wa)
>>  {
>>  	size_t wa_len;
>> @@ -76,27 +172,6 @@ int xe_wa_test_debugfs_dump_has_wa(char *dump, const char *wa)
>>  	return debugfs_dump_has_wa(dump, wa);
>>  }
>>  
>> -static int debugfs_file_has_wa(int drm_fd, int debugfs_fd,
>> -			       const char *debugfs_name, const char *wa)
>> -{
>> -	char *debugfs_dump;
>> -
>> -	if (!igt_debugfs_exists(drm_fd, debugfs_name, O_RDONLY))
>> -		return -1;
>> -
>> -	debugfs_dump = igt_sysfs_get(debugfs_fd, debugfs_name);
>> -	if (debugfs_dump) {
>> -		int ret = debugfs_dump_has_wa(debugfs_dump, wa);
>> -
>> -		free(debugfs_dump);
>> -
>> -		if (ret)
>> -			return ret;
>> -	}
>> -
>> -	return 0;
>> -}
>> -
>>  /**
>>   * xe_wa: Check if a workaround is enabled for the device.
>>   * @fd: A drm file descriptor.
>> @@ -106,25 +181,22 @@ static int debugfs_file_has_wa(int drm_fd, int debugfs_fd,
>>   */
>>  int xe_wa(int fd, const char *wa)
>>  {
>> -	int ret = 0;
>> -	int debugfs_fd;
>> -	unsigned int xe;
>> -	char name[256];
>> +	struct xe_wa_cache *wa_cache = build_cache(fd);
>> +	int ret;
>>  
>> -	debugfs_fd = igt_debugfs_dir(fd);
>> -	if (debugfs_fd == -1)
>> +	if (igt_warn_on(!wa_cache))
>>  		return -1;
>>  
>> -	xe_for_each_gt(fd, xe) {
>> -		sprintf(name, "gt%d/workarounds", xe);
>> -		ret = debugfs_file_has_wa(fd, debugfs_fd, name, wa);
>> -		if (ret)
>> +	ret = 0;
>> +
>> +	for (int i = 0; i < wa_cache->num_dumps; i++) {
>> +		if (debugfs_dump_has_wa(wa_cache->dumps[i], wa)) {
>> +			ret = 1;
>>  			break;
>> +		}
>>  	}
>>  
>> -	if (!ret)
>> -		ret = debugfs_file_has_wa(fd, debugfs_fd, "workarounds", wa);
>> +	free_cache(wa_cache);
>>  
>> -	close(debugfs_fd);
>>  	return ret;
>>  }
>> 
>> -- 
>> 2.55.0
>> 

  reply	other threads:[~2026-10-20 22:50 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-23 21:41 [PATCH i-g-t v2 00/11] Implement Wa_14026539277 Gustavo Sousa
2026-09-23 21:41 ` [PATCH i-g-t v2 01/11] lib/xe: Move lib/intel_wa to lib/xe/xe_wa Gustavo Sousa
2026-09-23 21:41 ` [PATCH i-g-t v2 02/11] lib/xe: Make debugfs_file_has_wa() aware of the debugfs file layout Gustavo Sousa
2026-10-20 21:15   ` Matt Atwood
2026-09-23 21:41 ` [PATCH i-g-t v2 03/11] lib/xe: Gather workarounds debugfs dumps in a cache struct Gustavo Sousa
2026-10-20 21:24   ` Matt Atwood
2026-10-20 22:49     ` Gustavo Sousa [this message]
2026-09-23 21:41 ` [PATCH i-g-t v2 04/11] lib/xe: Cache workaround information in xe_device Gustavo Sousa
2026-10-20 21:30   ` Matt Atwood
2026-09-23 21:41 ` [PATCH i-g-t v2 05/11] lib/xe: Return boolean from xe_wa() Gustavo Sousa
2026-10-20 21:32   ` Matt Atwood
2026-09-23 21:41 ` [PATCH i-g-t v2 06/11] lib/xe: Assert that cache is available for xe_wa() Gustavo Sousa
2026-10-20 21:33   ` Matt Atwood
2026-09-23 21:41 ` [PATCH i-g-t v2 07/11] tests/intel/xe_pat: Adapt pat_entry_is_wb() to Xe3p Gustavo Sousa
2026-09-23 21:41 ` [PATCH i-g-t v2 08/11] lib/xe: Add xe_wa_from_cache() Gustavo Sousa
2026-09-23 21:41 ` [PATCH i-g-t v2 09/11] lib/intel_pat: Encapsulate management of xe_device's pat_cache Gustavo Sousa
2026-10-20 21:35   ` Matt Atwood
2026-09-23 21:41 ` [PATCH i-g-t v2 10/11] lib/intel_pat: Pass xe_device to xe_get_pat_config() Gustavo Sousa
2026-09-23 21:41 ` [PATCH i-g-t v2 11/11] intel: Implement Wa_14026539277 Gustavo Sousa
2026-09-24  1:52 ` ✓ i915.CI.BAT: success for Implement Wa_14026539277 (rev2) Patchwork
2026-09-24  2:18 ` ✓ Xe.CI.BAT: " Patchwork
2026-09-24 16:04 ` ✗ Xe.CI.FULL: failure " Patchwork
2026-09-25  0:41 ` ✗ i915.CI.Full: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87qzhkgf77.fsf@intel.com \
    --to=gustavo.sousa@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=matthew.d.roper@intel.com \
    --cc=matthew.s.atwood@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.