177 lines
4.9 KiB
Diff
177 lines
4.9 KiB
Diff
From 56679afd67ba2706387407ea258eb0d2413c0c1e Mon Sep 17 00:00:00 2001
|
|
From: Yunfeng Ye <yeyunfeng@huawei.com>
|
|
Date: Sun, 10 Nov 2019 19:18:07 +0000
|
|
Subject: [PATCH 42/53] irqbalance: use process_one_line() instead of fscanf()
|
|
|
|
The logic using fscanf() to get data from open file can be instead by
|
|
process_one_line(), and provide two functions get_hex() and get_int()
|
|
to convert string to integer. also use get_int() instead of
|
|
get_offline_status() and get_packageid().
|
|
|
|
Signed-off-by: Yunfeng Ye <yeyunfeng@huawei.com>
|
|
---
|
|
classify.c | 27 ++++-----------------------
|
|
cputree.c | 32 ++++++++++++++------------------
|
|
irqbalance.h | 2 ++
|
|
3 files changed, 20 insertions(+), 41 deletions(-)
|
|
|
|
diff --git a/classify.c b/classify.c
|
|
index 5fb8233..90b0f30 100644
|
|
--- a/classify.c
|
|
+++ b/classify.c
|
|
@@ -187,20 +187,11 @@ static int map_pci_irq_class(unsigned int pci_class)
|
|
static unsigned int read_pci_data(const char *devpath, const char* file)
|
|
{
|
|
char path[PATH_MAX];
|
|
- FILE *fd;
|
|
unsigned int data = PCI_INVAL_DATA;
|
|
|
|
sprintf(path, "%s/%s", devpath, file);
|
|
-
|
|
- fd = fopen(path, "r");
|
|
-
|
|
- if (!fd) {
|
|
- log(TO_CONSOLE, LOG_WARNING, "PCI: can't open file:%s\n", path);
|
|
- return data;
|
|
- }
|
|
-
|
|
- (void) fscanf(fd, "%x", &data);
|
|
- fclose(fd);
|
|
+ if (process_one_line(path, get_hex, &data) < 0)
|
|
+ log(TO_CONSOLE, LOG_WARNING, "PCI: can't get from file:%s\n", path);
|
|
|
|
return data;
|
|
}
|
|
@@ -349,7 +340,6 @@ static struct irq_info *add_one_irq_to_db(const char *devpath, struct irq_info *
|
|
struct irq_info *new;
|
|
int numa_node;
|
|
char path[PATH_MAX];
|
|
- FILE *fd;
|
|
GList *entry;
|
|
|
|
/*
|
|
@@ -394,11 +384,7 @@ get_numa_node:
|
|
numa_node = NUMA_NO_NODE;
|
|
if (devpath != NULL && numa_avail) {
|
|
sprintf(path, "%s/numa_node", devpath);
|
|
- fd = fopen(path, "r");
|
|
- if (fd) {
|
|
- fscanf(fd, "%d", &numa_node);
|
|
- fclose(fd);
|
|
- }
|
|
+ process_one_line(path, get_int, &numa_node);
|
|
}
|
|
|
|
if (pol->numa_node_set == 1)
|
|
@@ -619,7 +605,6 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs)
|
|
{
|
|
struct dirent *entry;
|
|
DIR *msidir;
|
|
- FILE *fd;
|
|
int irqnum;
|
|
struct irq_info *new, hint;
|
|
char path[PATH_MAX];
|
|
@@ -661,10 +646,7 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs)
|
|
}
|
|
|
|
sprintf(path, "%s/%s/irq", SYSPCI_DIR, dirname);
|
|
- fd = fopen(path, "r");
|
|
- if (!fd)
|
|
- return;
|
|
- if (fscanf(fd, "%d", &irqnum) < 0)
|
|
+ if (process_one_line(path, get_int, &irqnum) < 0)
|
|
goto done;
|
|
|
|
/*
|
|
@@ -693,7 +675,6 @@ static void build_one_dev_entry(const char *dirname, GList *tmp_irqs)
|
|
}
|
|
|
|
done:
|
|
- fclose(fd);
|
|
return;
|
|
}
|
|
|
|
diff --git a/cputree.c b/cputree.c
|
|
index 4c5fdf5..9aa4794 100644
|
|
--- a/cputree.c
|
|
+++ b/cputree.c
|
|
@@ -78,6 +78,16 @@ int process_one_line(char *path, void (*cb)(char *line, void *data), void *data)
|
|
return ret;
|
|
}
|
|
|
|
+void get_hex(char *line, void *data)
|
|
+{
|
|
+ *(int *)data = strtoul(line, NULL, 16);
|
|
+}
|
|
+
|
|
+void get_int(char *line, void *data)
|
|
+{
|
|
+ *(int *)data = strtoul(line, NULL, 10);
|
|
+}
|
|
+
|
|
void get_mask_from_bitmap(char *line, void *mask)
|
|
{
|
|
cpumask_parse_user(line, strlen(line), *(cpumask_t *)mask);
|
|
@@ -244,20 +254,6 @@ static struct topo_obj* add_cpu_to_cache_domain(struct topo_obj *cpu,
|
|
return cache;
|
|
}
|
|
|
|
-static void get_offline_status(char *line, void *data)
|
|
-{
|
|
- int *status = (int *)data;
|
|
-
|
|
- *status = (line && line[0] == '0') ? 1 : 0;
|
|
-}
|
|
-
|
|
-static void get_packageid(char *line, void *data)
|
|
-{
|
|
- int *packageid = (int *)data;
|
|
-
|
|
- *packageid = strtoul(line, NULL, 10);
|
|
-}
|
|
-
|
|
#define ADJ_SIZE(r,s) PATH_MAX-strlen(r)-strlen(#s)
|
|
static void do_one_cpu(char *path)
|
|
{
|
|
@@ -270,12 +266,12 @@ static void do_one_cpu(char *path)
|
|
int nodeid;
|
|
int packageid = 0;
|
|
unsigned int max_cache_index, cache_index, cache_stat;
|
|
- int offline_status = 0;
|
|
+ int online_status = 1;
|
|
|
|
/* skip offline cpus */
|
|
snprintf(new_path, ADJ_SIZE(path,"/online"), "%s/online", path);
|
|
- process_one_line(new_path, get_offline_status, &offline_status);
|
|
- if (offline_status)
|
|
+ process_one_line(new_path, get_int, &online_status);
|
|
+ if (!online_status)
|
|
return;
|
|
|
|
cpu = calloc(1, sizeof(struct topo_obj));
|
|
@@ -315,7 +311,7 @@ static void do_one_cpu(char *path)
|
|
/* try to read the package id */
|
|
snprintf(new_path, ADJ_SIZE(path, "/topology/physical_package_id"),
|
|
"%s/topology/physical_package_id", path);
|
|
- process_one_line(new_path, get_packageid, &packageid);
|
|
+ process_one_line(new_path, get_int, &packageid);
|
|
|
|
/* try to read the cache mask; if it doesn't exist assume solitary */
|
|
/* We want the deepest cache level available */
|
|
diff --git a/irqbalance.h b/irqbalance.h
|
|
index 900db9d..3e3ea5d 100644
|
|
--- a/irqbalance.h
|
|
+++ b/irqbalance.h
|
|
@@ -163,6 +163,8 @@ extern unsigned int log_mask;
|
|
|
|
extern int process_one_line(char *path, void (*cb)(char *line, void *data), void *data);
|
|
extern void get_mask_from_bitmap(char *line, void *mask);
|
|
+extern void get_int(char *line, void *data);
|
|
+extern void get_hex(char *line, void *data);
|
|
|
|
#endif /* __INCLUDE_GUARD_IRQBALANCE_H_ */
|
|
|
|
--
|
|
2.23.0
|
|
|