Commit 6fb62233 authored by Pu Lehui's avatar Pu Lehui Committed by Andrew Morton
Browse files

selftests/mm: extract read_sysfs and write_sysfs into vm_util

Extract read_sysfs and write_sysfs into vm_util.  Meanwhile, rename the
function in thuge-gen that has the same name as read_sysfs.

Link: https://lkml.kernel.org/r/20250529155650.4017699-4-pulehui@huaweicloud.com


Signed-off-by: default avatarPu Lehui <pulehui@huawei.com>
Reviewed-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
Cc: Jann Horn <jannh@google.com>
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: "Masami Hiramatsu (Google)" <mhiramat@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Vlastimil Babka <vbabka@suse.cz>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
parent b36b701b
Loading
Loading
Loading
Loading
+2 −30
Original line number Diff line number Diff line
@@ -58,40 +58,12 @@ int debug;

static int ksm_write_sysfs(const char *file_path, unsigned long val)
{
	FILE *f = fopen(file_path, "w");

	if (!f) {
		fprintf(stderr, "f %s\n", file_path);
		perror("fopen");
		return 1;
	}
	if (fprintf(f, "%lu", val) < 0) {
		perror("fprintf");
		fclose(f);
		return 1;
	}
	fclose(f);

	return 0;
	return write_sysfs(file_path, val);
}

static int ksm_read_sysfs(const char *file_path, unsigned long *val)
{
	FILE *f = fopen(file_path, "r");

	if (!f) {
		fprintf(stderr, "f %s\n", file_path);
		perror("fopen");
		return 1;
	}
	if (fscanf(f, "%lu", val) != 1) {
		perror("fscanf");
		fclose(f);
		return 1;
	}
	fclose(f);

	return 0;
	return read_sysfs(file_path, val);
}

static void ksm_print_sysfs(void)
+3 −3
Original line number Diff line number Diff line
@@ -77,7 +77,7 @@ void show(unsigned long ps)
	system(buf);
}

unsigned long read_sysfs(int warn, char *fmt, ...)
unsigned long thuge_read_sysfs(int warn, char *fmt, ...)
{
	char *line = NULL;
	size_t linelen = 0;
@@ -106,7 +106,7 @@ unsigned long read_sysfs(int warn, char *fmt, ...)

unsigned long read_free(unsigned long ps)
{
	return read_sysfs(ps != getpagesize(),
	return thuge_read_sysfs(ps != getpagesize(),
			  "/sys/kernel/mm/hugepages/hugepages-%lukB/free_hugepages",
			  ps >> 10);
}
@@ -195,7 +195,7 @@ void find_pagesizes(void)
	}
	globfree(&g);

	if (read_sysfs(0, "/proc/sys/kernel/shmmax") < NUM_PAGES * largest)
	if (thuge_read_sysfs(0, "/proc/sys/kernel/shmmax") < NUM_PAGES * largest)
		ksft_exit_fail_msg("Please do echo %lu > /proc/sys/kernel/shmmax",
				   largest * NUM_PAGES);

+38 −0
Original line number Diff line number Diff line
@@ -486,3 +486,41 @@ int close_procmap(struct procmap_fd *procmap)
{
	return close(procmap->fd);
}

int write_sysfs(const char *file_path, unsigned long val)
{
	FILE *f = fopen(file_path, "w");

	if (!f) {
		fprintf(stderr, "f %s\n", file_path);
		perror("fopen");
		return 1;
	}
	if (fprintf(f, "%lu", val) < 0) {
		perror("fprintf");
		fclose(f);
		return 1;
	}
	fclose(f);

	return 0;
}

int read_sysfs(const char *file_path, unsigned long *val)
{
	FILE *f = fopen(file_path, "r");

	if (!f) {
		fprintf(stderr, "f %s\n", file_path);
		perror("fopen");
		return 1;
	}
	if (fscanf(f, "%lu", val) != 1) {
		perror("fscanf");
		fclose(f);
		return 1;
	}
	fclose(f);

	return 0;
}
+2 −0
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ int open_procmap(pid_t pid, struct procmap_fd *procmap_out);
int query_procmap(struct procmap_fd *procmap);
bool find_vma_procmap(struct procmap_fd *procmap, void *address);
int close_procmap(struct procmap_fd *procmap);
int write_sysfs(const char *file_path, unsigned long val);
int read_sysfs(const char *file_path, unsigned long *val);

static inline int open_self_procmap(struct procmap_fd *procmap_out)
{