diff options
| author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2014-09-16 04:28:08 -0400 |
|---|---|---|
| committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2016-03-16 10:33:14 -0400 |
| commit | be24daf0a97247fa3e97ef63e5e4b0efb3d7ec20 (patch) | |
| tree | 8a714af3f24ef8a0ee663dfe0af54904f598ffcd | |
| parent | 3d2d58b9e57a876bf57d4daf54ffbe2a15ce55fa (diff) | |
resctl: support specifying open intervals [$start,$end)
| -rw-r--r-- | bin/resctl.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/bin/resctl.c b/bin/resctl.c index 52cf6c0..6b05851 100644 --- a/bin/resctl.c +++ b/bin/resctl.c | |||
| @@ -74,18 +74,25 @@ static struct lt_interval* parse_td_intervals(int argc, char** argv, | |||
| 74 | int i, matched; | 74 | int i, matched; |
| 75 | struct lt_interval *slots = malloc(sizeof(slots[0]) * argc); | 75 | struct lt_interval *slots = malloc(sizeof(slots[0]) * argc); |
| 76 | double start, end; | 76 | double start, end; |
| 77 | char closing_paren[2]; | ||
| 78 | int closed; | ||
| 77 | 79 | ||
| 78 | *num_intervals = 0; | 80 | *num_intervals = 0; |
| 79 | for (i = 0; i < argc; i++) { | 81 | for (i = 0; i < argc; i++) { |
| 80 | matched = sscanf(argv[i], "[%lf,%lf]", &start, &end); | 82 | matched = sscanf(argv[i], "[%lf,%lf%1[])]", |
| 81 | if (matched != 2) { | 83 | &start, &end, closing_paren); |
| 84 | if (matched != 3) { | ||
| 82 | fprintf(stderr, "could not parse '%s' as interval\n", argv[i]); | 85 | fprintf(stderr, "could not parse '%s' as interval\n", argv[i]); |
| 83 | exit(5); | 86 | exit(5); |
| 84 | } | 87 | } |
| 88 | |||
| 89 | closed = closing_paren[0] == ']'; | ||
| 90 | |||
| 85 | if (start < 0) { | 91 | if (start < 0) { |
| 86 | fprintf(stderr, "interval %s: must not start before zero\n", argv[i]); | 92 | fprintf(stderr, "interval %s: must not start before zero\n", argv[i]); |
| 87 | exit(5); | 93 | exit(5); |
| 88 | } | 94 | } |
| 95 | |||
| 89 | if (end <= start) { | 96 | if (end <= start) { |
| 90 | fprintf(stderr, "interval %s: end before start\n", argv[i]); | 97 | fprintf(stderr, "interval %s: end before start\n", argv[i]); |
| 91 | exit(5); | 98 | exit(5); |
| @@ -94,13 +101,17 @@ static struct lt_interval* parse_td_intervals(int argc, char** argv, | |||
| 94 | slots[i].start = ms2ns(start); | 101 | slots[i].start = ms2ns(start); |
| 95 | slots[i].end = ms2ns(end); | 102 | slots[i].end = ms2ns(end); |
| 96 | 103 | ||
| 104 | if (!closed) | ||
| 105 | slots[i].end--; | ||
| 106 | |||
| 97 | if (i > 0 && slots[i - 1].end >= slots[i].start) { | 107 | if (i > 0 && slots[i - 1].end >= slots[i].start) { |
| 98 | fprintf(stderr, "interval %s: overlaps with previous interval\n", argv[i]); | 108 | fprintf(stderr, "interval %s: overlaps with previous interval\n", argv[i]); |
| 99 | exit(5); | 109 | exit(5); |
| 100 | } | 110 | } |
| 101 | 111 | ||
| 102 | if (slots[i].end >= major_cycle) { | 112 | if (slots[i].end >= major_cycle) { |
| 103 | fprintf(stderr, "interval %s: exceeds major cycle length\n", argv[i]); | 113 | fprintf(stderr, "interval %s: exceeds major cycle length (%llu >= %llu)\n", argv[i], |
| 114 | slots[i].end, major_cycle); | ||
| 104 | exit(5); | 115 | exit(5); |
| 105 | } | 116 | } |
| 106 | 117 | ||
