File bug-514127_libcpuset-cpuset_set_iopt-adds.patch of Package libcpuset

---
 libcpuset.c |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 55 insertions(+)

--- a/libcpuset.c
+++ b/libcpuset.c
@@ -67,9 +67,11 @@ struct cpuset {
 	char mem_exclusive;
 	char notify_on_release;
 	char memory_migrate;
+	char mem_hardwall;
 	char memory_pressure_enabled;
 	char memory_spread_page;
 	char memory_spread_slab;
+	char sched_load_balance;
 
 	/*
 	 * Each field 'x' above gets an 'x_valid' field below.
@@ -95,9 +97,11 @@ struct cpuset {
 	unsigned mem_exclusive_valid:1;
 	unsigned notify_on_release_valid:1;
 	unsigned memory_migrate_valid:1;
+	unsigned mem_hardwall_valid:1;
 	unsigned memory_pressure_enabled_valid:1;
 	unsigned memory_spread_page_valid:1;
 	unsigned memory_spread_slab_valid:1;
+	unsigned sched_load_balance_valid:1;
 };
 
 /* Presumed cpuset file system mount point */
@@ -688,12 +692,18 @@ int cpuset_set_iopt(struct cpuset *cp, c
 	} else if (streq(optionname, "memory_migrate")) {
 		cp->memory_migrate = !!value;
 		cp->memory_migrate_valid = 1;
+	} else if (streq(optionname, "mem_hardwall")) {
+		cp->mem_hardwall = !!value;
+		cp->mem_hardwall_valid = 1;
 	} else if (streq(optionname, "memory_spread_page")) {
 		cp->memory_spread_page = !!value;
 		cp->memory_spread_page_valid = 1;
 	} else if (streq(optionname, "memory_spread_slab")) {
 		cp->memory_spread_slab = !!value;
 		cp->memory_spread_slab_valid = 1;
+	} else if (streq(optionname, "sched_load_balance")) {
+		cp->sched_load_balance = !!value;
+		cp->sched_load_balance_valid = 1;
 	} else
 		return -2;	/* optionname not recognized */
 	return 0;
@@ -857,10 +867,14 @@ int cpuset_get_iopt(const struct cpuset
 		return cp->memory_pressure_enabled;
 	else if (streq(optionname, "memory_migrate"))
 		return cp->memory_migrate;
+	else if (streq(optionname, "mem_hardwall"))
+		return cp->mem_hardwall;
 	else if (streq(optionname, "memory_spread_page"))
 		return cp->memory_spread_page;
 	else if (streq(optionname, "memory_spread_slab"))
 		return cp->memory_spread_slab;
+	else if (streq(optionname, "sched_load_balance"))
+		return cp->sched_load_balance;
 	else
 		return -1;	/* optionname not recognized */
 }
@@ -1642,6 +1656,11 @@ static int apply_cpuset_settings(const c
 		if (store_flag(path, "memory_migrate", cp->memory_migrate) < 0)
 			goto err;
 	}
+	if (cp->mem_hardwall_valid &&
+	    exists_flag(path, "mem_hardwall")) {
+		if (store_flag(path, "mem_hardwall", cp->mem_hardwall) < 0)
+			goto err;
+	}
 	if (cp->memory_pressure_enabled_valid &&
 	    exists_flag(path, "memory_pressure_enabled")) {
 		if (store_flag(path, "memory_pressure_enabled", cp->memory_pressure_enabled) < 0)
@@ -1657,6 +1676,12 @@ static int apply_cpuset_settings(const c
 		if (store_flag(path, "memory_spread_slab", cp->memory_spread_slab) < 0)
 			goto err;
 	}
+	if (cp->sched_load_balance_valid &&
+	    exists_flag(path, "sched_load_balance")) {
+		if (store_flag(path, "sched_load_balance", cp->sched_load_balance) < 0)
+			goto err;
+	}
+
 	if (cp->cpus_valid && store_mask(path, "cpus", cp->cpus) < 0)
 		goto err;
 	if (cp->mems_valid && store_mask(path, "mems", cp->mems) < 0)
@@ -1912,6 +1937,12 @@ int cpuset_query(struct cpuset *cp, cons
 		cp->memory_migrate_valid = 1;
 	}
 
+	if (exists_flag(buf, "mem_hardwall")) {
+		if (load_flag(buf, &cp->mem_hardwall, "mem_hardwall") < 0)
+			goto err;
+		cp->mem_hardwall_valid = 1;
+	}
+
 	if (exists_flag(buf, "memory_pressure_enabled")) {
 		if (load_flag(buf, &cp->memory_pressure_enabled, "memory_pressure_enabled") < 0)
 			goto err;
@@ -1930,6 +1961,12 @@ int cpuset_query(struct cpuset *cp, cons
 		cp->memory_spread_slab_valid = 1;
 	}
 
+	if (exists_flag(buf, "sched_load_balance")) {
+		if (load_flag(buf, &cp->sched_load_balance, "sched_load_balance") < 0)
+			goto err;
+		cp->sched_load_balance_valid = 1;
+	}
+
 	if (load_mask(buf, &cp->cpus, cpuset_cpus_nbits(), "cpus") < 0)
 		goto err;
 	cp->cpus_valid = 1;
@@ -3291,6 +3328,10 @@ int cpuset_export(const struct cpuset *c
 		n += snprintf(buf + n, max(buflen - n, 0),
 							"memory_migrate\n");
 
+	if (cp->mem_hardwall)
+		n += snprintf(buf + n, max(buflen - n, 0),
+							"mem_hardwall\n");
+
 	if (cp->memory_spread_page)
 		n += snprintf(buf + n, max(buflen - n, 0),
 							"memory_spread_page\n");
@@ -3299,6 +3340,10 @@ int cpuset_export(const struct cpuset *c
 		n += snprintf(buf + n, max(buflen - n, 0),
 							"memory_spread_slab\n");
 
+	if (cp->sched_load_balance)
+		n += snprintf(buf + n, max(buflen - n, 0),
+							"sched_load_balance\n");
+
 	if ((tmp = sprint_mask_buf(cp->cpus)) == NULL)
 		return -1;
 	n += snprintf(buf + n, max(buflen - n, 0), "cpus %s\n", tmp);
@@ -3383,6 +3428,10 @@ int cpuset_import(struct cpuset *cp, con
 			cp->memory_migrate = 1;
 			goto eol;
 		}
+		if (streq(tok, "mem_hardwall")) {
+			cp->mem_hardwall = 1;
+			goto eol;
+		}
 		if (streq(tok, "memory_spread_page")) {
 			cp->memory_spread_page = 1;
 			goto eol;
@@ -3391,6 +3440,10 @@ int cpuset_import(struct cpuset *cp, con
 			cp->memory_spread_slab = 1;
 			goto eol;
 		}
+		if (streq(tok, "sched_load_balance")) {
+			cp->sched_load_balance = 1;
+			goto eol;
+		}
 		if (streq(tok, "cpu") || streq(tok, "cpus")) {
 			if (import_list(tok, arg, cp->cpus, emsg, elen) < 0)
 				goto err;
@@ -3434,9 +3487,11 @@ int cpuset_import(struct cpuset *cp, con
 	cp->mem_exclusive_valid = 1;
 	cp->notify_on_release_valid = 1;
 	cp->memory_migrate_valid = 1;
+	cp->mem_hardwall_valid = 1;
 	cp->memory_pressure_enabled_valid = 1;
 	cp->memory_spread_page_valid = 1;
 	cp->memory_spread_slab_valid = 1;
+	cp->sched_load_balance = 1;
 
 	return 0;
 err: