Changeset 295dd61 for libcfa/src/device/cpu.cfa
- Timestamp:
- Dec 6, 2021, 5:06:14 PM (4 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
- Children:
- 75873cf
- Parents:
- 813dfd86 (diff), a83012bf (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)links above to see all the changes relative to each parent. - File:
-
- 1 edited
-
libcfa/src/device/cpu.cfa (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/device/cpu.cfa
r813dfd86 r295dd61 135 135 count++; 136 136 } 137 iterate_dir(path, lambda); 137 int ret = iterate_dir(path, lambda); 138 if(ret == ENOTDIR) return 0; 138 139 139 140 /* paranoid */ verifyf(count == max + 1, "Inconsistent %s count, counted %d, but max %s was %d", prefix, count, prefix, (int)max); … … 159 160 160 161 const char * _; 161 int cnt = read_width(buff, r - 1, &_); 162 /* paranoid */ verify(cnt == count_prefix_dirs("/sys/devices/system/cpu", "cpu")); 163 return cnt; 162 return read_width(buff, r - 1, &_);; 164 163 } 165 164 … … 226 225 227 226 struct raw_cache_instance { 228 idx_range_t range; 229 unsigned width; 230 unsigned char level; 227 idx_range_t range; // A text description of the cpus covered 228 unsigned width; // The number of cpus covered 229 unsigned char level; // the cache level 231 230 // FIXME add at least size and type 232 231 }; … … 235 234 static void ^?{}(raw_cache_instance & this) { free(this.range);} 236 235 236 // Returns a 2D array of instances of size [cpu count][cache levels] 237 // where cache level doesn't include instruction caches 237 238 raw_cache_instance ** build_raw_cache_table(unsigned cpus, unsigned idxs, unsigned cache_levels) 238 239 { 239 240 raw_cache_instance ** raw = alloc(cpus); 241 242 // TODO: this loop is broken, it only works if the present cpu start at 0 and are contiguous which is not guaranteed. 240 243 for(i; cpus) { 241 raw[i] = alloc(cache_levels); 242 void addcache(unsigned fidx, unsigned char level, idx_range_t range, size_t len) { 243 /* paranoid */ verifyf(level <= cache_levels, "Unexpected cache level %d on cpu %u index %u", (int)level, i, fidx); 244 245 unsigned idx = cache_levels - level; 246 raw_cache_instance & r = raw[i][idx]; 247 r.range = strndup(range, len); 248 r.level = level; 249 const char * end; 250 r.width = read_width(range, len, &end); 251 } 252 foreach_cacheidx(i, idxs, addcache); 244 if (cache_levels > 0) { 245 raw[i] = alloc(cache_levels); 246 void addcache(unsigned fidx, unsigned char level, idx_range_t range, size_t len) { 247 /* paranoid */ verifyf(level <= cache_levels, "Unexpected cache level %d on cpu %u index %u", (int)level, i, fidx); 248 249 unsigned idx = cache_levels - level; 250 raw_cache_instance & r = raw[i][idx]; 251 r.range = strndup(range, len); 252 r.level = level; 253 const char * end; 254 r.width = read_width(range, len, &end); 255 } 256 foreach_cacheidx(i, idxs, addcache); 257 } 258 else { 259 char buf[128]; 260 snprintf(buf, 128, "0-%u", cpus); 261 raw[i] = alloc(); 262 raw[i]->range = strndup(buf, 128); 263 raw[i]->level = 0; 264 raw[i]->width = cpus; 265 } 253 266 } 254 267 … … 333 346 unsigned cache_levels = 0; 334 347 unsigned llc = 0; 335 {348 if (idxs != 0) { 336 349 unsigned char prev = -1u; 337 350 void first(unsigned idx, unsigned char level, const char * map, size_t len) { … … 416 429 cpu_info.llc_map = entries; 417 430 cpu_info.hthrd_count = cpus; 431 cpu_info.llc_count = map_cnt; 418 432 } 419 433
Note:
See TracChangeset
for help on using the changeset viewer.