diff options
| author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-02-05 16:59:57 +0000 |
|---|---|---|
| committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2016-02-05 16:59:57 +0000 |
| commit | 9b5a3abe0db8fd385e99be3ef0e59873d59f07eb (patch) | |
| tree | b0bdb381fe3747dd052fa96025da031e78462a75 | |
| parent | a53c0ded8cc9e3b71a5c680e66ef591e0f8e1cba (diff) | |
| download | illumos-joyent-9b5a3abe0db8fd385e99be3ef0e59873d59f07eb.tar.gz | |
OS-5139 cpu_cap is sometimes off by 1 when set with package fss or cap_cap direct update
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
| -rw-r--r-- | usr/src/cmd/zonecfg/zonecfg.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/usr/src/cmd/zonecfg/zonecfg.c b/usr/src/cmd/zonecfg/zonecfg.c index 714d04164d..41423c95cd 100644 --- a/usr/src/cmd/zonecfg/zonecfg.c +++ b/usr/src/cmd/zonecfg/zonecfg.c @@ -23,7 +23,7 @@ * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright 2014 Nexenta Systems, Inc. All rights reserved. * Copyright 2014 Gary Mills - * Copyright 2015, Joyent Inc. + * Copyright 2016, Joyent Inc. */ /* @@ -4475,7 +4475,7 @@ set_func(cmd_t *cmd) zone_iptype_t iptype; boolean_t force_set = B_FALSE; uint64_t mem_cap, mem_limit; - float cap; + double cap; char *unitp; struct zone_psettab tmp_psettab; boolean_t arg_err = B_FALSE; @@ -5069,19 +5069,22 @@ set_func(cmd_t *cmd) * the add_resource() function. */ - if ((cap = strtof(prop_id, &unitp)) <= 0 || *unitp != '\0' || - (int)(cap * 100) < 1) { + if ((cap = strtod(prop_id, &unitp)) <= 0 || *unitp != '\0' || + (cap * 100.0) < 1) { zerr(gettext("%s property is out of range."), pt_to_str(PT_NCPUS)); saw_error = B_TRUE; return; } + cap *= 100.0; + /* To avoid rounding issues add .5 to force correct value. */ if ((err = zonecfg_set_aliased_rctl(handle, ALIAS_CPUCAP, - (int)(cap * 100))) != Z_OK) + (uint_t)(cap + 0.5))) != Z_OK) { zone_perror(zone, err, B_TRUE); - else + } else { need_to_commit = B_TRUE; + } return; case RT_MCAP: switch (prop_type) { |
