Revert upstream commit d1993bcde2a524346a9508754671f096ec129ad1
to avoid glib dependency. That commit polluted the main code
with glib types.
 
--- a/irqbalance.h
+++ b/irqbalance.h
@@ -8,7 +8,6 @@
 
 #include <stdint.h>
 #include <glib.h>
-#include <glib-unix.h>
 #include <syslog.h>
 #include <limits.h>
 
@@ -63,7 +62,6 @@ extern GList *packages;
 extern GList *cache_domains;
 extern GList *cpus;
 extern int numa_avail;
-extern GList *cl_banned_irqs;
 
 extern int debug_mode;
 extern int journal_logging;
@@ -171,7 +169,5 @@ extern unsigned int log_mask;
 }while(0)
 #endif /* HAVE_LIBSYSTEMD */
 
-#define SOCKET_PATH "irqbalance"
-
 #endif /* __INCLUDE_GUARD_IRQBALANCE_H_ */
 
--- a/irqbalance.c
+++ b/irqbalance.c
@@ -31,8 +31,6 @@
 #include <time.h>
 #include <sys/types.h>
 #include <sys/stat.h>
-#include <sys/socket.h>
-#include <sys/un.h>
 #include <fcntl.h>
 #ifdef HAVE_GETOPT_LONG 
 #include <getopt.h>
@@ -44,7 +42,6 @@
 #include "irqbalance.h"
 
 volatile int keep_going = 1;
-int socket_fd;
 int one_shot_mode;
 int debug_mode;
 int foreground_mode;
@@ -61,9 +58,6 @@ char *banscript = NULL;
 char *polscript = NULL;
 long HZ;
 int sleep_interval = SLEEP_INTERVAL;
-GMainLoop *main_loop;
-
-char *banned_cpumask_from_ui = NULL;
 
 static void sleep_approx(int seconds)
 {
@@ -236,224 +230,22 @@ static void force_rebalance_irq(struct i
 	info->assigned_obj = NULL;
 }
 
-gboolean handler(gpointer data __attribute__((unused)))
+static void handler(int signum)
 {
+	(void)signum;
 	keep_going = 0;
-	g_main_loop_quit(main_loop);
-	return TRUE;
 }
 
-gboolean force_rescan(gpointer data __attribute__((unused)))
+static void force_rescan(int signum)
 {
+	(void)signum;
 	if (cycle_count)
 		need_rescan = 1;
-	return TRUE;
-}
-
-gboolean scan(gpointer data)
-{
-	log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n");
-	clear_work_stats();
-	parse_proc_interrupts();
-	parse_proc_stat();
-
-
-	/* cope with cpu hotplug -- detected during /proc/interrupts parsing */
-	if (need_rescan) {
-		need_rescan = 0;
-		cycle_count = 0;
-		log(TO_CONSOLE, LOG_INFO, "Rescanning cpu topology \n");
-		clear_work_stats();
-
-		free_object_tree();
-		build_object_tree();
-		for_each_irq(NULL, force_rebalance_irq, NULL);
-		parse_proc_interrupts();
-		parse_proc_stat();
-		sleep_approx(sleep_interval);
-		clear_work_stats();
-		parse_proc_interrupts();
-		parse_proc_stat();
-	} 
-
-	if (cycle_count)	
-		update_migration_status();
-
-	calculate_placement();
-	activate_mappings();
-
-	if (debug_mode)
-		dump_tree();
-	if (one_shot_mode)
-		keep_going = 0;
-	cycle_count++;
-
-	if (data != &sleep_interval) {
-		data = &sleep_interval;
-		g_timeout_add_seconds(sleep_interval, scan, data);
-		return FALSE;
-	}
-
-	if (keep_going)
-		return TRUE;
-	else
-		return FALSE;
-}
-
-void get_irq_data(struct irq_info *irq, void *data)
-{
-	sprintf(data + strlen(data),
-			"IRQ %d LOAD %lu DIFF %lu CLASS %d ", irq->irq, irq->load,
-			(irq->irq_count - irq->last_irq_count), irq->class);
-}
-
-void get_object_stat(struct topo_obj *object, void *data)
-{
-	char irq_data[1024] = "\0";
-
-	if (g_list_length(object->interrupts) > 0) {
-		for_each_irq(object->interrupts, get_irq_data, irq_data);
-	}
-	sprintf(data + strlen(data), "TYPE %d NUMBER %d LOAD %lu SAVE_MODE %d %s",
-			object->obj_type, object->number, object->load,
-			object->powersave_mode, irq_data);
-	if (object->obj_type != OBJ_TYPE_CPU) {
-		for_each_object(object->children, get_object_stat, data);
-	}
-}
-
-gboolean sock_handle(gint fd, GIOCondition condition, gpointer user_data __attribute__((unused)))
-{
-	char buff[500];
-	int sock;
-	int recv_size = 0;
-	int valid_user = 0;
-
-	struct iovec iov = { buff, 500 };
-	struct msghdr msg = { NULL, 0, &iov, 1, NULL, 0, 0 };
-	msg.msg_control = malloc(CMSG_SPACE(sizeof(struct ucred)));
-	msg.msg_controllen = CMSG_SPACE(sizeof(struct ucred));
-
-	struct cmsghdr *cmsg;
-
-	if (condition == G_IO_IN) {
-		sock = accept(fd, NULL, NULL);
-		if (sock < 0) {
-			log(TO_ALL, LOG_WARNING, "Connection couldn't be accepted.\n");
-			return TRUE;
-		}
-		if ((recv_size = recvmsg(sock, &msg, 0)) < 0) {
-			log(TO_ALL, LOG_WARNING, "Error while receiving data.\n");
-			return TRUE;
-		}
-		cmsg = CMSG_FIRSTHDR(&msg);
-		if ((cmsg->cmsg_level == SOL_SOCKET) &&
-				(cmsg->cmsg_type == SCM_CREDENTIALS)) {
-			struct ucred *credentials = (struct ucred *) CMSG_DATA(cmsg);
-			if (!credentials->uid) {
-				valid_user = 1;
-			}
-		}
-		if (!valid_user) {
-			log(TO_ALL, LOG_INFO, "Permission denied for user to connect to socket.\n");
-			return TRUE;
-		}
-
-		if (!strncmp(buff, "stats", strlen("stats"))) {
-			char stats[2048] = "\0";
-			for_each_object(numa_nodes, get_object_stat, stats);
-			send(sock, stats, strlen(stats), 0);
-		}
-		if (!strncmp(buff, "settings ", strlen("settings "))) {
-			if (!(strncmp(buff + strlen("settings "), "sleep ",
-							strlen("sleep ")))) {
-				char *sleep_string = malloc(
-						sizeof(char) * (recv_size - strlen("settings sleep ")));
-				strncpy(sleep_string, buff + strlen("settings sleep "),
-						recv_size - strlen("settings sleep "));
-				int new_iterval = strtoul(sleep_string, NULL, 10);
-				if (new_iterval >= 1) {
-					sleep_interval = new_iterval;
-				}
-			} else if (!(strncmp(buff + strlen("settings "), "ban irqs ",
-							strlen("ban irqs ")))) {
-				char *end;
-				char *irq_string = malloc(
-						sizeof(char) * (recv_size - strlen("settings ban irqs ")));
-				strncpy(irq_string, buff + strlen("settings ban irqs "),
-						recv_size - strlen("settings ban irqs "));
-				g_list_free_full(cl_banned_irqs, free);
-				cl_banned_irqs = NULL;
-				need_rescan = 1;
-				if (!strncmp(irq_string, "NONE", strlen("NONE"))) {
-					return TRUE;
-				}
-				int irq = strtoul(irq_string, &end, 10);
-				do {
-					add_cl_banned_irq(irq);
-				} while((irq = strtoul(end, &end, 10)));
-			} else if (!(strncmp(buff + strlen("settings "), "cpus ",
-							strlen("cpus")))) {
-				char *cpu_ban_string = malloc(
-						sizeof(char) * (recv_size - strlen("settings cpus ")));
-				strncpy(cpu_ban_string, buff + strlen("settings cpus "),
-						recv_size - strlen("settings cpus "));
-				banned_cpumask_from_ui = strtok(cpu_ban_string, " ");
-				if (!strncmp(banned_cpumask_from_ui, "NULL", strlen("NULL"))) {
-					banned_cpumask_from_ui = NULL;
-				}
-				need_rescan = 1;
-			}
-		}
-		if (!strncmp(buff, "setup", strlen("setup"))) {
-			char setup[2048] = "\0";
-			snprintf(setup, 2048, "SLEEP %d ", sleep_interval);
-			if(g_list_length(cl_banned_irqs) > 0) {
-				for_each_irq(cl_banned_irqs, get_irq_data, setup);
-			}
-			char banned[512];
-			cpumask_scnprintf(banned, 512, banned_cpus);
-			snprintf(setup + strlen(setup), 2048 - strlen(setup),
-					"BANNED %s", banned);
-			send(sock, setup, strlen(setup), 0);
-		}
-
-		close(sock);
-	}
-	return TRUE;
-}
-
-int init_socket(char *socket_name)
-{
-	struct sockaddr_un addr;
-	memset(&addr, 0, sizeof(struct sockaddr_un));
-
-	socket_fd = socket(AF_LOCAL, SOCK_STREAM, 0);
-	if (socket_fd < 0) {
-		log(TO_ALL, LOG_WARNING, "Socket couldn't be created.\n");
-		return 1;
-	}
-
-	addr.sun_family = AF_UNIX;
-	addr.sun_path[0] = '\0';
-	strncpy(addr.sun_path + 1, socket_name, strlen(socket_name));
-	if (bind(socket_fd, (struct sockaddr *)&addr,
-				sizeof(sa_family_t) + strlen(socket_name) + 1) < 0) {
-		log(TO_ALL, LOG_WARNING, "Daemon couldn't be bound to the socket.\n");
-		return 1;
-	}
-	int optval = 1;
-	if (setsockopt(socket_fd, SOL_SOCKET, SO_PASSCRED, &optval, sizeof(optval)) < 0) {
-		log(TO_ALL, LOG_WARNING, "Unable to set socket options.\n");
-		return 1;
-	}
-	listen(socket_fd, 1);
-	g_unix_fd_add(socket_fd, G_IO_IN, sock_handle, NULL);
-	return 0;
 }
 
 int main(int argc, char** argv)
 {
+	struct sigaction action, hupaction;
 	sigset_t sigset, old_sigset;
 
 	sigemptyset(&sigset);
@@ -553,11 +345,19 @@ int main(int argc, char** argv)
 		}
 	}
 
-	g_unix_signal_add(SIGINT, handler, NULL);
-	g_unix_signal_add(SIGTERM, handler, NULL);
-	g_unix_signal_add(SIGUSR1, handler, NULL);
-	g_unix_signal_add(SIGUSR2, handler, NULL);
-	g_unix_signal_add(SIGHUP, force_rescan, NULL);
+	action.sa_handler = handler;
+	sigemptyset(&action.sa_mask);
+	action.sa_flags = 0;
+	sigaction(SIGINT, &action, NULL);
+	sigaction(SIGTERM, &action, NULL);
+	sigaction(SIGUSR1, &action, NULL);
+	sigaction(SIGUSR2, &action, NULL);
+
+	hupaction.sa_handler = force_rescan;
+	sigemptyset(&hupaction.sa_mask);
+	hupaction.sa_flags = 0;
+	sigaction(SIGHUP, &hupaction, NULL);
+
 	sigprocmask(SIG_SETMASK, &old_sigset, NULL);
 
 #ifdef HAVE_LIBCAP_NG
@@ -566,32 +366,58 @@ int main(int argc, char** argv)
 	capng_lock();
 	capng_apply(CAPNG_SELECT_BOTH);
 #endif
+
 	for_each_irq(NULL, force_rebalance_irq, NULL);
 
 	parse_proc_interrupts();
 	parse_proc_stat();
 
-	char socket_name[64];
-	snprintf(socket_name, 64, "%s%d.sock", SOCKET_PATH, getpid());
+	while (keep_going) {
+		sleep_approx(sleep_interval);
+		log(TO_CONSOLE, LOG_INFO, "\n\n\n-----------------------------------------------------------------------------\n");
 
-	if (init_socket(socket_name)) {
-		return EXIT_FAILURE;
-	}
-	main_loop = g_main_loop_new(NULL, FALSE);
-	int *last_interval = &sleep_interval;
-	g_timeout_add_seconds(sleep_interval, scan, last_interval);
-	g_main_loop_run(main_loop);
 
-	g_main_loop_quit(main_loop);
+		clear_work_stats();
+		parse_proc_interrupts();
+		parse_proc_stat();
+
+		/* cope with cpu hotplug -- detected during /proc/interrupts parsing */
+		if (need_rescan) {
+			need_rescan = 0;
+			cycle_count = 0;
+			log(TO_CONSOLE, LOG_INFO, "Rescanning cpu topology \n");
+			clear_work_stats();
+
+			free_object_tree();
+			build_object_tree();
+			for_each_irq(NULL, force_rebalance_irq, NULL);
+			parse_proc_interrupts();
+			parse_proc_stat();
+			sleep_approx(sleep_interval);
+			clear_work_stats();
+			parse_proc_interrupts();
+			parse_proc_stat();
+		} 
+
+		if (cycle_count)	
+			update_migration_status();
+
+		calculate_placement();
+		activate_mappings();
 	
+		if (debug_mode)
+			dump_tree();
+		if (one_shot_mode)
+			keep_going = 0;
+		cycle_count++;
+
+	}
 	free_object_tree();
 	free_cl_opts();
 
 	/* Remove pidfile */
 	if (!foreground_mode && pidfile)
 		unlink(pidfile);
-	/* Remove socket */
-	close(socket_fd);
 
 	return EXIT_SUCCESS;
 }
--- a/cputree.c
+++ b/cputree.c
@@ -38,7 +38,6 @@
 
 #include "irqbalance.h"
 
-extern char *banned_cpumask_from_ui;
 
 GList *cpus;
 GList *cache_domains;
@@ -77,15 +76,11 @@ static void setup_banned_cpus(void)
 	cpus_clear(nohz_full);
 
 	/* A manually specified cpumask overrides auto-detection. */
-	if (banned_cpumask_from_ui != NULL) {
-		cpulist_parse(banned_cpumask_from_ui,
-			strlen(banned_cpumask_from_ui), banned_cpus);
-		goto out;
-	}
 	if (getenv("IRQBALANCE_BANNED_CPUS"))  {
 		cpumask_parse_user(getenv("IRQBALANCE_BANNED_CPUS"), strlen(getenv("IRQBALANCE_BANNED_CPUS")), banned_cpus);
 		goto out;
 	}
+
 	file = fopen("/sys/devices/system/cpu/isolated", "r");
 	if (file) {
 		if (getline(&line, &size, file) > 0) {
@@ -117,8 +112,6 @@ out:
 	log(TO_CONSOLE, LOG_INFO, "Isolated CPUs: %s\n", buffer);
 	cpumask_scnprintf(buffer, 4096, nohz_full);
 	log(TO_CONSOLE, LOG_INFO, "Adaptive-ticks CPUs: %s\n", buffer);
-	cpumask_scnprintf(buffer, 4096, banned_cpus);
-	log(TO_CONSOLE, LOG_INFO, "Banned CPUs: %s\n", buffer);
 }
 
 static struct topo_obj* add_cache_domain_to_package(struct topo_obj *cache,