All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petri Latvala <petri.latvala@intel.com>
To: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>
Cc: igt-dev@lists.freedesktop.org, Jani Nikula <jani.nikula@intel.com>
Subject: Re: [igt-dev] [PATCH i-g-t 6/7] igt/params: use igt_params_set_save for igt_set_module_param*
Date: Tue, 5 May 2020 10:20:19 +0300	[thread overview]
Message-ID: <20200505072019.GN9497@platvala-desk.ger.corp.intel.com> (raw)
In-Reply-To: <20200428202255.31309-7-juhapekka.heikkila@gmail.com>

On Tue, Apr 28, 2020 at 11:22:54PM +0300, Juha-Pekka Heikkila wrote:
> Unify parameter access. Here is also decided 'default' device
> if -1 is specified as device. Derault being that device

s/Derault/Default/

> which is first to match requirements, starting search
> from zero upwards.
> 
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila@gmail.com>


This patch also changes module parameters to use debugfs files instead
of sysfs's /sys/module/<m>/parameters! Could be worth a mention in a
commit message maybe?!


-- 
Petri Latvala



> ---
>  lib/igt_params.c | 134 +++++++++++++++++++++++++++++++++++------------
>  1 file changed, 100 insertions(+), 34 deletions(-)
> 
> diff --git a/lib/igt_params.c b/lib/igt_params.c
> index d9cf986c..dc35f233 100644
> --- a/lib/igt_params.c
> +++ b/lib/igt_params.c
> @@ -27,12 +27,14 @@
>  #include <stdbool.h>
>  #include <stdio.h>
>  #include <sys/ioctl.h>
> +#include <sys/stat.h>
>  
>  #include <i915_drm.h>
>  
>  #include "igt_core.h"
>  #include "igt_params.h"
>  #include "igt_sysfs.h"
> +#include "igt_debugfs.h"
>  
>  struct module_param_data {
>  	char *path;
> @@ -107,15 +109,59 @@ static void igt_params_save(int dir, const char *path, const char *name)
>  	module_params = data;
>  }
>  
> -static int __igt_params_open(int device, char **outpath)
> +static int __igt_params_open(int device, char **outpath, const char *param)
>  {
>  	int dir, params = -1;
> +	struct stat buffer;
> +	char searchname[64];
> +	char searchpath[PATH_MAX];
> +	char *foundname, *ctx;
>  
> -	dir = igt_sysfs_open(device);
> +	dir = igt_debugfs_dir(device);
>  	if (dir >= 0) {
> -		params = openat(dir,
> -				"device/driver/module/parameters",
> -				O_RDONLY);
> +		int devname;
> +
> +		devname = openat(dir, "name", O_RDONLY);
> +		igt_assert(devname >= 0);
> +
> +		read(devname, searchname, sizeof(searchname));
> +		close(devname);
> +
> +		foundname = strtok_r(searchname, " ", &ctx);
> +		igt_assert(foundname);
> +
> +		snprintf(searchpath, PATH_MAX, "%s_params", foundname);
> +		params = openat(dir, searchpath, O_RDONLY);
> +
> +		if (params >= 0) {
> +			char *debugfspath = malloc(PATH_MAX);
> +
> +			igt_debugfs_path(device, debugfspath, PATH_MAX);
> +			if (param != NULL) {
> +				char filepath[PATH_MAX];
> +
> +				snprintf(filepath, PATH_MAX, "%s/%s",
> +					 debugfspath, param);
> +
> +				if (stat(filepath, &buffer) == 0) {
> +					if (outpath != NULL)
> +						*outpath = debugfspath;
> +					else
> +						free(debugfspath);
> +				} else {
> +					free(debugfspath);
> +					close(params);
> +					params = -1;
> +				}
> +			} else if (outpath != NULL) {
> +				/*
> +				 * Caller is responsible to free this.
> +				 */
> +				*outpath = debugfspath;
> +			} else {
> +				free(debugfspath);
> +			}
> +		}
>  		close(dir);
>  	}
>  
> @@ -124,12 +170,51 @@ static int __igt_params_open(int device, char **outpath)
>  		char name[32] = "";
>  		char path[PATH_MAX];
>  
> -		memset(&version, 0, sizeof(version));
> -		version.name_len = sizeof(name);
> -		version.name = name;
> -		ioctl(device, DRM_IOCTL_VERSION, &version);
> -
> -		sprintf(path, "/sys/module/%s/parameters", name);
> +		if (device == -1) {
> +			/*
> +			 * find default device
> +			 */
> +			int file, i;
> +			const char *debugfs_root = igt_debugfs_mount();
> +
> +			igt_assert(debugfs_root);
> +
> +			for (i = 0; i < 63; i++) {
> +				char testpath[PATH_MAX];
> +
> +				snprintf(searchpath, PATH_MAX,
> +					 "%s/dri/%d/name", debugfs_root, i);
> +
> +				file = open(searchpath, O_RDONLY);
> +
> +				if (file < 0)
> +					continue;
> +
> +				read(file, searchname, sizeof(searchname));
> +				close(file);
> +
> +				foundname = strtok_r(searchname, " ", &ctx);
> +				if (!foundname)
> +					continue;
> +
> +				snprintf(testpath, PATH_MAX,
> +					 "/sys/module/%s/parameters",
> +					 foundname);
> +
> +				if (stat(testpath, &buffer) == 0 &&
> +				    S_ISDIR(buffer.st_mode)) {
> +					snprintf(name, sizeof(name), "%s",
> +						 foundname);
> +					break;
> +				}
> +			}
> +		} else {
> +			memset(&version, 0, sizeof(version));
> +			version.name_len = sizeof(name);
> +			version.name = name;
> +			ioctl(device, DRM_IOCTL_VERSION, &version);
> +		}
> +		snprintf(path, sizeof(path), "/sys/module/%s/parameters", name);
>  		params = open(path, O_RDONLY);
>  		if (params >= 0 && outpath)
>  			*outpath = strdup(path);
> @@ -150,7 +235,7 @@ static int __igt_params_open(int device, char **outpath)
>   */
>  int igt_params_open(int device)
>  {
> -	return __igt_params_open(device, NULL);
> +	return __igt_params_open(device, NULL, NULL);
>  }
>  
>  __attribute__((format(printf, 3, 0)))
> @@ -161,7 +246,7 @@ static bool __igt_params_set(int device, const char *parameter,
>  	int dir;
>  	int ret;
>  
> -	dir = __igt_params_open(device, save ? &path : NULL);
> +	dir = __igt_params_open(device, save ? &path : NULL, parameter);
>  	if (dir < 0)
>  		return false;
>  
> @@ -233,21 +318,9 @@ bool igt_params_set_save(int device, const char *parameter, const char *fmt, ...
>   */
>  void igt_set_module_param(const char *name, const char *val)
>  {
> -	const char *path = "/sys/module/i915/parameters";
> -	int dir;
> -
> -	dir = open(path, O_RDONLY);
> -	igt_assert(dir >= 0);
> -
> -	igt_params_save(dir, path, name);
> -
> -	igt_assert(igt_sysfs_set(dir, name, val));
> -
> -	igt_assert(close(dir) == 0);
> +	igt_assert(igt_params_set_save(-1, name, "%s", val));
>  }
>  
> -#define PARAM_VALUE_MAX_SZ 16
> -
>  /**
>   * igt_set_module_param_int:
>   * @name: i915.ko parameter name
> @@ -258,12 +331,5 @@ void igt_set_module_param(const char *name, const char *val)
>   */
>  void igt_set_module_param_int(const char *name, int val)
>  {
> -	char str[PARAM_VALUE_MAX_SZ];
> -	int n;
> -
> -	n = snprintf(str, PARAM_VALUE_MAX_SZ, "%d\n", val);
> -	igt_assert_f(n < PARAM_VALUE_MAX_SZ,
> -		     "Need to increase PARAM_VALUE_MAX_SZ\n");
> -
> -	igt_set_module_param(name, str);
> +	igt_assert(igt_params_set_save(-1, name, "%d", val));
>  }
> -- 
> 2.26.0
> 
> _______________________________________________
> igt-dev mailing list
> igt-dev@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
_______________________________________________
igt-dev mailing list
igt-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/igt-dev

  reply	other threads:[~2020-05-05  7:20 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-28 20:22 [igt-dev] [PATCH i-g-t 0/7] Use device dependant module parameters Juha-Pekka Heikkila
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 1/7] lib/params: add igt_params.c for module parameter access Juha-Pekka Heikkila
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 2/7] lib/params: start renaming functions igt_params_* Juha-Pekka Heikkila
2020-05-05 14:04   ` Arkadiusz Hiler
2020-05-05 18:43     ` Juha-Pekka Heikkila
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 3/7] lib/params: overhaul param saving Juha-Pekka Heikkila
2020-05-05  7:05   ` Petri Latvala
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 4/7] lib/params: add igt_params_open() which will return path Juha-Pekka Heikkila
2020-05-05  7:07   ` Petri Latvala
2020-05-05 18:44     ` Juha-Pekka Heikkila
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 5/7] igt/params: add generic saving module parameter set Juha-Pekka Heikkila
2020-05-05  7:16   ` Petri Latvala
2020-05-05 18:44     ` Juha-Pekka Heikkila
2020-05-05 14:09   ` Arkadiusz Hiler
2020-05-05 18:46     ` Juha-Pekka Heikkila
2020-05-05 20:00       ` Juha-Pekka Heikkila
2020-05-06  9:05         ` Arkadiusz Hiler
2020-05-06  9:54           ` Juha-Pekka Heikkila
2020-05-06 10:09             ` Petri Latvala
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 6/7] igt/params: use igt_params_set_save for igt_set_module_param* Juha-Pekka Heikkila
2020-05-05  7:20   ` Petri Latvala [this message]
2020-05-05 14:22   ` Arkadiusz Hiler
2020-05-06  7:34   ` Petri Latvala
2020-04-28 20:22 ` [igt-dev] [PATCH i-g-t 7/7] tests/gem_eio: switch to using igt_params_set() Juha-Pekka Heikkila
2020-05-05  7:41   ` Petri Latvala
2020-04-28 21:16 ` [igt-dev] ✓ Fi.CI.BAT: success for Use device dependant module parameters (rev5) Patchwork
2020-04-29  1:42 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
2020-05-07 19:09 [igt-dev] [PATCH i-g-t 0/7] Use device dependant module parameters Juha-Pekka Heikkila
2020-05-07 19:09 ` [igt-dev] [PATCH i-g-t 6/7] igt/params: use igt_params_set_save for igt_set_module_param* Juha-Pekka Heikkila

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=20200505072019.GN9497@platvala-desk.ger.corp.intel.com \
    --to=petri.latvala@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    --cc=jani.nikula@intel.com \
    --cc=juhapekka.heikkila@gmail.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.