overlay: Fix sampling of i915 perf event

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2013-08-20 23:19:45 +01:00
parent 0b78c1632c
commit a7b7420927

View File

@ -72,10 +72,12 @@ static uint64_t i915_type_id(void)
int fd, n; int fd, n;
fd = open("/sys/bus/event_source/devices/i915/type", 0); fd = open("/sys/bus/event_source/devices/i915/type", 0);
if (fd < 0) if (fd < 0) {
return 0; n = -1;
n = read(fd, buf, sizeof(buf)-1); } else {
close(fd); n = read(fd, buf, sizeof(buf)-1);
close(fd);
}
if (n < 0) if (n < 0)
return 0; return 0;
@ -310,7 +312,7 @@ int gpu_top_update(struct gpu_top *gt)
struct gpu_top_stat *s = &gt->stat[gt->count++&1]; struct gpu_top_stat *s = &gt->stat[gt->count++&1];
struct gpu_top_stat *d = &gt->stat[gt->count&1]; struct gpu_top_stat *d = &gt->stat[gt->count&1];
uint64_t *sample, d_time; uint64_t *sample, d_time;
int n; int n, m;
len = read(gt->fd, data, sizeof(data)); len = read(gt->fd, data, sizeof(data));
if (len < 0) if (len < 0)
@ -319,12 +321,12 @@ int gpu_top_update(struct gpu_top *gt)
sample = (uint64_t *)data + 1; sample = (uint64_t *)data + 1;
s->time = *sample++; s->time = *sample++;
for (n = 0; n < gt->num_rings; n++) { for (n = m = 0; n < gt->num_rings; n++) {
s->busy[n] = sample[n]; s->busy[n] = sample[m++];
if (gt->have_wait) if (gt->have_wait)
s->wait[n] = sample[n]; s->wait[n] = sample[m++];
if (gt->have_sema) if (gt->have_sema)
s->sema[n] = sample[n]; s->sema[n] = sample[m++];
} }
if (gt->count == 1) if (gt->count == 1)