rpms/irqbalance/F-7 irqbalance-0.55-cputree-parse.patch, NONE, 1.1 irqbalance-pie.patch, NONE, 1.1 irqbalance.spec, 1.42, 1.43

Neil Horman (nhorman) fedora-extras-commits at redhat.com
Fri Sep 28 19:04:06 UTC 2007


Author: nhorman

Update of /cvs/extras/rpms/irqbalance/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv4746

Modified Files:
	irqbalance.spec 
Added Files:
	irqbalance-0.55-cputree-parse.patch irqbalance-pie.patch 
Log Message:
ulis cputree parse fix

irqbalance-0.55-cputree-parse.patch:

--- NEW FILE irqbalance-0.55-cputree-parse.patch ---
diff -up irqbalance-0.55/irqbalance-0.55/cputree.c.orig irqbalance-0.55/irqbalance-0.55/cputree.c
--- irqbalance-0.55/irqbalance-0.55/cputree.c.orig	2006-12-10 15:04:59.000000000 -0500
+++ irqbalance-0.55/irqbalance-0.55/cputree.c	2007-09-28 12:43:35.000000000 -0400
@@ -26,6 +26,8 @@
 
 #define _GNU_SOURCE
 
+#include <ctype.h>
+#include <fcntl.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -131,34 +133,30 @@ static void fill_cache_domain(void)
 }
 
 
-static void do_one_cpu(char *path)
+static void do_one_cpu(int dfd, char *d_name)
 {
 	struct cpu_core *cpu;
 	FILE *file;
 	char new_path[PATH_MAX];
 
 	/* skip offline cpus */
-	snprintf(new_path, PATH_MAX, "%s/online", path);
-	file = fopen(new_path, "r");
-	if (file) {
-		char *line = NULL;
-		size_t size = 0;
-		if (getline(&line, &size, file)==0)
+	snprintf(new_path, PATH_MAX, "%s/online", d_name);
+	int fd = openat(dfd, new_path, O_RDONLY);
+	if (fd != -1) {
+		char buf[1];
+		ssize_t n = read(fd, buf, sizeof(buf));
+		close(fd);
+		if (n != sizeof(buf))
 			return;
-		fclose(file);
-		if (line && line[0]=='0') {
-			free(line);
+		if (buf[0] == '0')
 			return;
-		}
-		free(line);
 	}
 
-	cpu = malloc(sizeof(struct cpu_core));
+	cpu = calloc(1, sizeof(struct cpu_core));
 	if (!cpu)
 		return;
-	memset(cpu, 0, sizeof(struct cpu_core));
 
-	cpu->number = strtoul(&path[27], NULL, 10);
+	cpu->number = strtoul(&d_name[3], NULL, 10);
 	
 	cpu_set(cpu->number, cpu->mask);
 
@@ -170,43 +168,45 @@ static void do_one_cpu(char *path)
 		return;
 	}
 
+	char *line = NULL;
+	size_t size = 0;
 
 	/* try to read the package mask; if it doesn't exist assume solitary */
-	snprintf(new_path, PATH_MAX, "%s/topology/core_siblings", path);
-	file = fopen(new_path, "r");
+	snprintf(new_path, PATH_MAX, "%s/topology/core_siblings", d_name);
+	fd = openat(dfd, new_path, O_RDONLY);
+	file = fd == -1 ? NULL : fdopen(fd, "r");
 	cpu_set(cpu->number, cpu->package_mask);
 	if (file) {
-		char *line = NULL;
-		size_t size = 0;
 		if (getline(&line, &size, file)) 
 			cpumask_parse_user(line, strlen(line), cpu->package_mask);
 		fclose(file);
-		free(line);
-	}
+	} else if (fd != -1)
+		close(fd);
 
 	/* try to read the cache mask; if it doesn't exist assume solitary */
 	/* We want the deepest cache level available so try index1 first, then index2 */
 	cpu_set(cpu->number, cpu->cache_mask);
-	snprintf(new_path, PATH_MAX, "%s/cache/index1/shared_cpu_map", path);
-	file = fopen(new_path, "r");
+	snprintf(new_path, PATH_MAX, "%s/cache/index1/shared_cpu_map", d_name);
+	fd = openat(dfd, new_path, O_RDONLY);
+	file = fd == -1 ? NULL : fdopen(fd, "r");
 	if (file) {
-		char *line = NULL;
-		size_t size = 0;
 		if (getline(&line, &size, file)) 
 			cpumask_parse_user(line, strlen(line), cpu->cache_mask);
 		fclose(file);
-		free(line);
-	}
-	snprintf(new_path, PATH_MAX, "%s/cache/index2/shared_cpu_map", path);
-	file = fopen(new_path, "r");
+	} else if (fd != -1)
+		close(fd);
+
+	snprintf(new_path, PATH_MAX, "%s/cache/index2/shared_cpu_map", d_name);
+	fd = openat(dfd, new_path, O_RDONLY);
+	file = fd == -1 ? NULL : fdopen(fd, "r");
 	if (file) {
-		char *line = NULL;
-		size_t size = 0;
 		if (getline(&line, &size, file)) 
 			cpumask_parse_user(line, strlen(line), cpu->cache_mask);
 		fclose(file);
-		free(line);
-	}
+	} else if (fd != -1)
+		close(fd);
+
+	free(line);
 
 	/* 
 	   blank out the banned cpus from the various masks so that interrupts
@@ -311,18 +311,19 @@ void parse_cpu_tree(void)
 {
 	DIR *dir;
 	struct dirent *entry;
+	int dfd;
 
 	cpus_complement(unbanned_cpus, banned_cpus);
 
 	dir = opendir("/sys/devices/system/cpu");
 	if (!dir)
 		return;
+	dfd = dirfd(dir);
 	do {
 		entry = readdir(dir);
-                if (entry && strlen(entry->d_name)>3 && strstr(entry->d_name,"cpu")) {
-			char new_path[PATH_MAX];
-			sprintf(new_path, "/sys/devices/system/cpu/%s", entry->d_name);
-			do_one_cpu(new_path);
+                if (entry && strlen(entry->d_name)>3 && memcmp(entry->d_name,"cpu",3) == 0
+		    && isdigit(entry->d_name[3])) {
+			do_one_cpu(dfd, entry->d_name);
 		}
 	} while (entry);
 	closedir(dir);  

irqbalance-pie.patch:

--- NEW FILE irqbalance-pie.patch ---
diff -up irqbalance-0.55/irqbalance-0.55/Makefile.orig irqbalance-0.55/irqbalance-0.55/Makefile
--- irqbalance-0.55/irqbalance-0.55/Makefile.orig	2006-12-05 08:15:23.000000000 -0500
+++ irqbalance-0.55/irqbalance-0.55/Makefile	2007-09-28 14:10:01.000000000 -0400
@@ -1,11 +1,11 @@
-CFLAGS+=-g -Os -D_FORTIFY_SOURCE=2 -Wall -W `pkg-config --cflags glib-2.0` 
+CFLAGS+=-g -Os -Os -pie -fpie -D_FORTIFY_SOURCE=2 -Wall -W `pkg-config --cflags glib-2.0` 
 
 all: irqbalance
 
 LIBS=bitmap.o irqbalance.o cputree.o  procinterrupts.o irqlist.o placement.o activate.o network.o powermode.o numa.o classify.o
 
 irqbalance: .depend $(LIBS)
-	gcc  -g -O2 -D_FORTIFY_SOURCE=2 -Wall  `pkg-config --libs glib-2.0` $(LIBS) -o irqbalance 
+	gcc  -g -D_FORTIFY_SOURCE=2 -Wall -Os -Wl,-z,relro,-z,now -pie -fpie `pkg-config --libs glib-2.0` $(LIBS) -o irqbalance 
 
 clean:
 	rm -f irqbalance *~ *.o .depend


Index: irqbalance.spec
===================================================================
RCS file: /cvs/extras/rpms/irqbalance/F-7/irqbalance.spec,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -r1.42 -r1.43
--- irqbalance.spec	12 Dec 2006 16:43:01 -0000	1.42
+++ irqbalance.spec	28 Sep 2007 19:03:34 -0000	1.43
@@ -1,7 +1,7 @@
 Summary:        IRQ balancing daemon.
 Name:           irqbalance
 Version:        0.55 
-Release: 	2%{?dist}
+Release: 	3%{?dist}
 Epoch:		2	
 Group:          System Environment/Base
 License:        GPL/OSL
@@ -17,12 +17,17 @@
 BuildRequires:	glib2-devel pkgconfig imake
 Requires:	glib2
 
+Patch0: irqbalance-pie.patch
+Patch1: irqbalance-0.55-cputree-parse.patch
+
 %description
 irqbalance is a daemon that evenly distributes IRQ load across
 multiple CPUs for enhanced performance.
 
 %prep
 %setup -q -c -a 0
+%patch0 -p1
+%patch1 -p1
 
 %build
 rm -rf $RPM_BUILD_ROOT
@@ -70,6 +75,10 @@
 
 
 %changelog
+* Fri Sep 28 2007 Neil Horman <nhorman at redhat.com> - 0.55-3
+- Installed pie build patch
+- Grabbed Uli's cputree parsing fixes
+
 * Tue Dec 12 2006 Neil Horman <nhorman at redhat.com> - 0.55-2
 - Fixing typos in spec file (bz 219301)
 




More information about the fedora-extras-commits mailing list