Revision dc333cd6 target-ppc/kvm.c

b/target-ppc/kvm.c
252 252
    return ret;
253 253
}
254 254

  
255
static int read_cpuinfo(const char *field, char *value, int len)
256
{
257
    FILE *f;
258
    int ret = -1;
259
    int field_len = strlen(field);
260
    char line[512];
261

  
262
    f = fopen("/proc/cpuinfo", "r");
263
    if (!f) {
264
        return -1;
265
    }
266

  
267
    do {
268
        if(!fgets(line, sizeof(line), f)) {
269
            break;
270
        }
271
        if (!strncmp(line, field, field_len)) {
272
            strncpy(value, line, len);
273
            ret = 0;
274
            break;
275
        }
276
    } while(*line);
277

  
278
    fclose(f);
279

  
280
    return ret;
281
}
282

  
283
uint32_t kvmppc_get_tbfreq(void)
284
{
285
    char line[512];
286
    char *ns;
287
    uint32_t retval = get_ticks_per_sec();
288

  
289
    if (read_cpuinfo("timebase", line, sizeof(line))) {
290
        return retval;
291
    }
292

  
293
    if (!(ns = strchr(line, ':'))) {
294
        return retval;
295
    }
296

  
297
    ns++;
298

  
299
    retval = atoi(ns);
300
    return retval;
301
}

Also available in: Unified diff