forked from pool/libcpuset
- whack duplicate %patch1 -p1 in .spec - Add missing fixes. bug-514127_libcpuset-cpuset_set_iopt-adds.patch (SUSE bnc#514127) initialize_buffer.patch (bnc unknown) libcpuset-agnostic-mountpoint.diff (SUSE bnc#625079, SUSE bnc#834223) libcpuset-handle-cgroup-mount.diff (SUSE bnc#625079, SUSE bnc#834223) OBS-URL: https://build.opensuse.org/request/show/235488 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/libcpuset?expand=0&rev=10
172 lines
5.5 KiB
Diff
172 lines
5.5 KiB
Diff
---
|
|
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:
|