sched_deadline: Changes for HRTICK
- Take into account the rename of the sched_features file for HRTICK - Use HRTICK_DL if available Resolves: rhbz#1973083 Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
		
							parent
							
								
									f9afb08aae
								
							
						
					
					
						commit
						6aa7c32eae
					
				| @ -6,7 +6,7 @@ Name: realtime-tests | |||||||
| # Numa argument to make:  NUMA=1 | # Numa argument to make:  NUMA=1 | ||||||
| # | # | ||||||
| Version: 2.1 | Version: 2.1 | ||||||
| Release: 1%{?dist} | Release: 2%{?dist} | ||||||
| License: GPLv2 | License: GPLv2 | ||||||
| URL: https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git | URL: https://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git | ||||||
| Source0: https://www.kernel.org/pub/linux/utils/rt-tests/rt-tests-%{version}.tar.xz | Source0: https://www.kernel.org/pub/linux/utils/rt-tests/rt-tests-%{version}.tar.xz | ||||||
| @ -20,6 +20,8 @@ Requires: bash | |||||||
| Requires: bc | Requires: bc | ||||||
| 
 | 
 | ||||||
| #Patches | #Patches | ||||||
|  | Patch1: sched_deadline-Accommodate-new-location-of-HRTICK-file.patch | ||||||
|  | Patch2: sched_deadline-Use-HRTICK_DL-for-sched_deadline-tests.patch | ||||||
| 
 | 
 | ||||||
| %description | %description | ||||||
| realtime-tests is a set of programs that test and measure various components of | realtime-tests is a set of programs that test and measure various components of | ||||||
| @ -28,6 +30,8 @@ latency. It also tests the functioning of priority-inheritance mutexes. | |||||||
| 
 | 
 | ||||||
| %prep | %prep | ||||||
| %setup -q -n rt-tests-%{version} | %setup -q -n rt-tests-%{version} | ||||||
|  | %patch1 -p1 | ||||||
|  | %patch2 -p1 | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| %set_build_flags | %set_build_flags | ||||||
| @ -78,6 +82,11 @@ latency. It also tests the functioning of priority-inheritance mutexes. | |||||||
| %{_mandir}/man8/determine_maximum_mpps.8.* | %{_mandir}/man8/determine_maximum_mpps.8.* | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Fri Jul 23 2021 John Kacur <jkacur@redhat.com> - 2.1-2 | ||||||
|  | - Take into account the rename of the sched_features file for HRTICK | ||||||
|  | - Use HRTICK_DL if available | ||||||
|  | Resolves: rhbz#1973083 | ||||||
|  | 
 | ||||||
| * Wed Jun 30 2021 john Kacur <jkacur@redhat.com> - 2.1-1 | * Wed Jun 30 2021 john Kacur <jkacur@redhat.com> - 2.1-1 | ||||||
| - Update to latest upstream rt-tests-2.1 | - Update to latest upstream rt-tests-2.1 | ||||||
| Resolves: rhbz#1890563 | Resolves: rhbz#1890563 | ||||||
|  | |||||||
							
								
								
									
										217
									
								
								sched_deadline-Accommodate-new-location-of-HRTICK-file.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										217
									
								
								sched_deadline-Accommodate-new-location-of-HRTICK-file.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,217 @@ | |||||||
|  | From 84c45a66bf077be31c9e0cf85b72896798966826 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: John Kacur <jkacur@redhat.com> | ||||||
|  | Date: Thu, 22 Jul 2021 16:30:13 -0400 | ||||||
|  | Subject: [PATCH 1/2] sched_deadline: Accommodate new location of HRTICK file | ||||||
|  |  in kernel | ||||||
|  | 
 | ||||||
|  | Newer kernels rename /sys/kernel/debug/sched_features to | ||||||
|  | /sys/kernel/debug/sched/features | ||||||
|  | 
 | ||||||
|  | Modify sched_deadline tests to look for the new file and if that fails | ||||||
|  | look for the old file name | ||||||
|  | 
 | ||||||
|  | These functions are based on ones in stalld, and stalld itself has | ||||||
|  | functions based on the sched_deadline programs in rt-tests | ||||||
|  | 
 | ||||||
|  | Signed-off-by: John Kacur <jkacur@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  src/sched_deadline/cyclicdeadline.c | 65 ++++++++++++++++++++++------- | ||||||
|  |  src/sched_deadline/deadline_test.c  | 61 +++++++++++++++++++++------ | ||||||
|  |  2 files changed, 100 insertions(+), 26 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c
 | ||||||
|  | index 8447424273ee..4a38ec2274c9 100644
 | ||||||
|  | --- a/src/sched_deadline/cyclicdeadline.c
 | ||||||
|  | +++ b/src/sched_deadline/cyclicdeadline.c
 | ||||||
|  | @@ -230,12 +230,53 @@ found:
 | ||||||
|  |  	mark_fd = open(files, O_WRONLY); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/*
 | ||||||
|  | + * Return true if file exists
 | ||||||
|  | + */
 | ||||||
|  | +static int check_file_exists(char *path)
 | ||||||
|  | +{
 | ||||||
|  | +	int ret;
 | ||||||
|  | +	struct stat st;
 | ||||||
|  | +
 | ||||||
|  | +	ret = !stat(path, &st);
 | ||||||
|  | +
 | ||||||
|  | +	return ret;
 | ||||||
|  | +
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +/*
 | ||||||
|  | + * Return 0 on success
 | ||||||
|  | + */
 | ||||||
|  | +
 | ||||||
|  | +static int fill_sched_features(char *path)
 | ||||||
|  | +{
 | ||||||
|  | +	int ret;
 | ||||||
|  | +	const char *debugfs;
 | ||||||
|  | +
 | ||||||
|  | +	debugfs = find_debugfs();
 | ||||||
|  | +	if (strlen(debugfs) == 0)
 | ||||||
|  | +		return -1;
 | ||||||
|  | +
 | ||||||
|  | +	snprintf(path, MAX_PATH, "%s/sched/features", debugfs);
 | ||||||
|  | +	ret = check_file_exists(path);
 | ||||||
|  | +	if (ret)
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	snprintf(path, MAX_PATH, "%s/sched_features", debugfs);
 | ||||||
|  | +	ret = check_file_exists(path);
 | ||||||
|  | +	if (ret)
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	memset(path, 0, MAX_PATH);
 | ||||||
|  | +
 | ||||||
|  | +	return ret;
 | ||||||
|  | +
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  static int setup_hr_tick(void) | ||||||
|  |  { | ||||||
|  | -	const char *debugfs = find_debugfs();
 | ||||||
|  | -	char files[strlen(debugfs) + strlen("/sched_features") + 1];
 | ||||||
|  | +	char path[MAX_PATH];
 | ||||||
|  |  	char buf[500]; | ||||||
|  | -	struct stat st;
 | ||||||
|  |  	static int set = 0; | ||||||
|  |  	char *p; | ||||||
|  |  	int ret; | ||||||
|  | @@ -244,27 +285,23 @@ static int setup_hr_tick(void)
 | ||||||
|  |   | ||||||
|  |  	if (set) | ||||||
|  |  		return 1; | ||||||
|  | -
 | ||||||
|  |  	set = 1; | ||||||
|  |   | ||||||
|  | -	if (strlen(debugfs) == 0)
 | ||||||
|  | -		return 0;
 | ||||||
|  | -
 | ||||||
|  | -	sprintf(files, "%s/sched_features", debugfs);
 | ||||||
|  | -	ret = stat(files, &st);
 | ||||||
|  | -	if (ret < 0)
 | ||||||
|  | +	ret = fill_sched_features(path);
 | ||||||
|  | +	if (ret)
 | ||||||
|  |  		return 0; | ||||||
|  |   | ||||||
|  | -	fd = open(files, O_RDWR);
 | ||||||
|  | -	perror(files);
 | ||||||
|  | -	if (fd < 0)
 | ||||||
|  | +	fd = open(path, O_RDWR);
 | ||||||
|  | +	if (fd < 0) {
 | ||||||
|  | +		perror(path);
 | ||||||
|  |  		return 0; | ||||||
|  | +	}
 | ||||||
|  |   | ||||||
|  |  	len = sizeof(buf); | ||||||
|  |   | ||||||
|  |  	ret = read(fd, buf, len); | ||||||
|  |  	if (ret < 0) { | ||||||
|  | -		perror(files);
 | ||||||
|  | +		perror(path);
 | ||||||
|  |  		close(fd); | ||||||
|  |  		return 0; | ||||||
|  |  	} | ||||||
|  | diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c
 | ||||||
|  | index 395c2370f69a..c1e890319895 100644
 | ||||||
|  | --- a/src/sched_deadline/deadline_test.c
 | ||||||
|  | +++ b/src/sched_deadline/deadline_test.c
 | ||||||
|  | @@ -368,6 +368,49 @@ found:
 | ||||||
|  |  	mark_fd = open(files, O_WRONLY); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +/*
 | ||||||
|  | + * Return true if file exists
 | ||||||
|  | + */
 | ||||||
|  | +static int check_file_exists(char *path)
 | ||||||
|  | +{
 | ||||||
|  | +	int ret;
 | ||||||
|  | +	struct stat st;
 | ||||||
|  | +
 | ||||||
|  | +	ret = !stat(path, &st);
 | ||||||
|  | +
 | ||||||
|  | +	return ret;
 | ||||||
|  | +
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  | +/*
 | ||||||
|  | + * Return 0 on success
 | ||||||
|  | + */
 | ||||||
|  | +
 | ||||||
|  | +static int fill_sched_features(char *path)
 | ||||||
|  | +{
 | ||||||
|  | +	int ret;
 | ||||||
|  | +	const char *debugfs;
 | ||||||
|  | +
 | ||||||
|  | +	debugfs = find_debugfs();
 | ||||||
|  | +	if (strlen(debugfs) == 0)
 | ||||||
|  | +		return -1;
 | ||||||
|  | +
 | ||||||
|  | +	snprintf(path, MAX_PATH, "%s/sched/features", debugfs);
 | ||||||
|  | +	ret = check_file_exists(path);
 | ||||||
|  | +	if (ret)
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	snprintf(path, MAX_PATH, "%s/sched_features", debugfs);
 | ||||||
|  | +	ret = check_file_exists(path);
 | ||||||
|  | +	if (ret)
 | ||||||
|  | +		return 0;
 | ||||||
|  | +
 | ||||||
|  | +	memset(path, 0, MAX_PATH);
 | ||||||
|  | +
 | ||||||
|  | +	return ret;
 | ||||||
|  | +
 | ||||||
|  | +}
 | ||||||
|  | +
 | ||||||
|  |  /** | ||||||
|  |   * setup_hr_tick - Enable the HRTICK in sched_features (if available) | ||||||
|  |   * | ||||||
|  | @@ -381,10 +424,8 @@ found:
 | ||||||
|  |   */ | ||||||
|  |  static int setup_hr_tick(void) | ||||||
|  |  { | ||||||
|  | -	const char *debugfs = find_debugfs();
 | ||||||
|  | -	char files[strlen(debugfs) + strlen("/sched_features") + 1];
 | ||||||
|  | +	char path[MAX_PATH];
 | ||||||
|  |  	char buf[500]; | ||||||
|  | -	struct stat st;
 | ||||||
|  |  	static int set = 0; | ||||||
|  |  	char *p; | ||||||
|  |  	int ret; | ||||||
|  | @@ -396,17 +437,13 @@ static int setup_hr_tick(void)
 | ||||||
|  |   | ||||||
|  |  	set = 1; | ||||||
|  |   | ||||||
|  | -	if (strlen(debugfs) == 0)
 | ||||||
|  | -		return 0;
 | ||||||
|  | -
 | ||||||
|  | -	sprintf(files, "%s/sched_features", debugfs);
 | ||||||
|  | -	ret = stat(files, &st);
 | ||||||
|  | -	if (ret < 0)
 | ||||||
|  | +	ret = fill_sched_features(path);
 | ||||||
|  | +	if (ret)
 | ||||||
|  |  		return 0; | ||||||
|  |   | ||||||
|  | -	fd = open(files, O_RDWR);
 | ||||||
|  | +	fd = open(path, O_RDWR);
 | ||||||
|  |  	if (fd < 0) { | ||||||
|  | -		perror(files);
 | ||||||
|  | +		perror(path);
 | ||||||
|  |  		return 0; | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | @@ -414,7 +451,7 @@ static int setup_hr_tick(void)
 | ||||||
|  |   | ||||||
|  |  	ret = read(fd, buf, len); | ||||||
|  |  	if (ret < 0) { | ||||||
|  | -		perror(files);
 | ||||||
|  | +		perror(path);
 | ||||||
|  |  		close(fd); | ||||||
|  |  		return 0; | ||||||
|  |  	} | ||||||
|  | -- 
 | ||||||
|  | 2.31.1 | ||||||
|  | 
 | ||||||
							
								
								
									
										125
									
								
								sched_deadline-Use-HRTICK_DL-for-sched_deadline-tests.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								sched_deadline-Use-HRTICK_DL-for-sched_deadline-tests.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,125 @@ | |||||||
|  | From de3cdf92834bc600d5806f959e8d78d48f7f9775 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: John Kacur <jkacur@redhat.com> | ||||||
|  | Date: Fri, 23 Jul 2021 14:52:43 -0400 | ||||||
|  | Subject: [PATCH 2/2] sched_deadline: Use HRTICK_DL for sched_deadline tests | ||||||
|  | 
 | ||||||
|  | If the HRTICK_DL feature is available, use it for the sched_deadline | ||||||
|  | tests, otherwise fall back to HRTICK | ||||||
|  | 
 | ||||||
|  | This code is based on changes in stalld - which in turn was based on | ||||||
|  | these sched_deadline tests | ||||||
|  | 
 | ||||||
|  | Signed-off-by: John Kacur <jkacur@redhat.com> | ||||||
|  | ---
 | ||||||
|  |  src/sched_deadline/cyclicdeadline.c | 27 ++++++++++++++++++++++----- | ||||||
|  |  src/sched_deadline/deadline_test.c  | 28 +++++++++++++++++++++++----- | ||||||
|  |  2 files changed, 45 insertions(+), 10 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/src/sched_deadline/cyclicdeadline.c b/src/sched_deadline/cyclicdeadline.c
 | ||||||
|  | index 4a38ec2274c9..4860a40f5e6b 100644
 | ||||||
|  | --- a/src/sched_deadline/cyclicdeadline.c
 | ||||||
|  | +++ b/src/sched_deadline/cyclicdeadline.c
 | ||||||
|  | @@ -278,6 +278,7 @@ static int setup_hr_tick(void)
 | ||||||
|  |  	char path[MAX_PATH]; | ||||||
|  |  	char buf[500]; | ||||||
|  |  	static int set = 0; | ||||||
|  | +	int hrtick_dl = 0;
 | ||||||
|  |  	char *p; | ||||||
|  |  	int ret; | ||||||
|  |  	int len; | ||||||
|  | @@ -311,18 +312,34 @@ static int setup_hr_tick(void)
 | ||||||
|  |   | ||||||
|  |  	ret = 1; | ||||||
|  |   | ||||||
|  | -	p = strstr(buf, "HRTICK");
 | ||||||
|  | -	if (p + 3 >= buf) {
 | ||||||
|  | +	p = strstr(buf, "HRTICK_DL");
 | ||||||
|  | +	if (p && p - 3 >= buf) {
 | ||||||
|  | +		hrtick_dl = 1;
 | ||||||
|  |  		p -= 3; | ||||||
|  | -		if (strncmp(p, "NO_HRTICK", 9) == 0) {
 | ||||||
|  | -			ret = write(fd, "HRTICK", 6);
 | ||||||
|  | -			if (ret != 6)
 | ||||||
|  | +		if (strncmp(p, "NO_HRTICK_DL", 12) == 0) {
 | ||||||
|  | +			ret = write(fd, "HRTICK_DL", 9);
 | ||||||
|  | +			if (ret != 9)
 | ||||||
|  |  				ret = 0; | ||||||
|  |  			else | ||||||
|  |  				ret = 1; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	/* Backwards compatibility for kernel that only have HRTICK */
 | ||||||
|  | +	if (!hrtick_dl) {
 | ||||||
|  | +		p = strstr(buf, "HRTICK");
 | ||||||
|  | +		if (p && p - 3 >= buf) {
 | ||||||
|  | +			p -=3;
 | ||||||
|  | +			if (strncmp(p, "NO_HRTICK", 9) == 0) {
 | ||||||
|  | +				ret = write(fd, "HRTICK", 6);
 | ||||||
|  | +				if (ret != 6)
 | ||||||
|  | +					ret = 0;
 | ||||||
|  | +				else
 | ||||||
|  | +					ret = 1;
 | ||||||
|  | +			}
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  |  	close(fd); | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  | diff --git a/src/sched_deadline/deadline_test.c b/src/sched_deadline/deadline_test.c
 | ||||||
|  | index c1e890319895..a48c231c1281 100644
 | ||||||
|  | --- a/src/sched_deadline/deadline_test.c
 | ||||||
|  | +++ b/src/sched_deadline/deadline_test.c
 | ||||||
|  | @@ -427,6 +427,7 @@ static int setup_hr_tick(void)
 | ||||||
|  |  	char path[MAX_PATH]; | ||||||
|  |  	char buf[500]; | ||||||
|  |  	static int set = 0; | ||||||
|  | +	int hrtick_dl = 0;
 | ||||||
|  |  	char *p; | ||||||
|  |  	int ret; | ||||||
|  |  	int len; | ||||||
|  | @@ -461,18 +462,35 @@ static int setup_hr_tick(void)
 | ||||||
|  |   | ||||||
|  |  	ret = 1; | ||||||
|  |   | ||||||
|  | -	p = strstr(buf, "HRTICK");
 | ||||||
|  | -	if (p + 3 >= buf) {
 | ||||||
|  | +	p = strstr(buf, "HRTICK_DL");
 | ||||||
|  | +	if (p && p - 3 >= buf) {
 | ||||||
|  | +		hrtick_dl = 1;
 | ||||||
|  |  		p -= 3; | ||||||
|  | -		if (strncmp(p, "NO_HRTICK", 9) == 0) {
 | ||||||
|  | -			ret = write(fd, "HRTICK", 6);
 | ||||||
|  | -			if (ret != 6)
 | ||||||
|  | +		if (strncmp(p, "NO_HRTICK_DL", 12) == 0) {
 | ||||||
|  | +			ret = write(fd, "HRTICK_DL", 9);
 | ||||||
|  | +			if (ret != 9)
 | ||||||
|  |  				ret = 0; | ||||||
|  |  			else | ||||||
|  |  				ret = 1; | ||||||
|  |  		} | ||||||
|  |  	} | ||||||
|  |   | ||||||
|  | +	/* Backwards compatibility for kernel that only have HRTICK */
 | ||||||
|  | +	if (!hrtick_dl) {
 | ||||||
|  | +		p = strstr(buf, "HRTICK");
 | ||||||
|  | +		if (p && p - 3 >= buf) {
 | ||||||
|  | +			p -=3;
 | ||||||
|  | +			if (strncmp(p, "NO_HRTICK", 9) == 0) {
 | ||||||
|  | +				ret = write(fd, "HRTICK", 6);
 | ||||||
|  | +				if (ret != 6)
 | ||||||
|  | +					ret = 0;
 | ||||||
|  | +				else
 | ||||||
|  | +					ret = 1;
 | ||||||
|  | +			}
 | ||||||
|  | +		}
 | ||||||
|  | +	}
 | ||||||
|  | +
 | ||||||
|  | +
 | ||||||
|  |  	close(fd); | ||||||
|  |  	return ret; | ||||||
|  |  } | ||||||
|  | -- 
 | ||||||
|  | 2.31.1 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user