overlay: Constify perf ringbuffer

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2013-08-17 18:24:39 +01:00
parent 3e430a8b01
commit 8cdb5bc5e8
2 changed files with 15 additions and 16 deletions

View File

@ -74,7 +74,7 @@ static uint64_t tracepoint_id(const char *sys, const char *name)
static int perf_tracepoint_open(struct gpu_perf *gp, static int perf_tracepoint_open(struct gpu_perf *gp,
const char *sys, const char *name, const char *sys, const char *name,
int (*func)(struct gpu_perf *, void *)) int (*func)(struct gpu_perf *, const void *))
{ {
struct perf_event_attr attr; struct perf_event_attr attr;
struct gpu_perf_sample *sample; struct gpu_perf_sample *sample;
@ -151,17 +151,17 @@ err:
return EINVAL; return EINVAL;
} }
static int seqno_start(struct gpu_perf *gp, void *event) static int seqno_start(struct gpu_perf *gp, const void *event)
{ {
return 0; return 0;
} }
static int seqno_end(struct gpu_perf *gp, void *event) static int seqno_end(struct gpu_perf *gp, const void *event)
{ {
return 0; return 0;
} }
static int flip_complete(struct gpu_perf *gp, void *event) static int flip_complete(struct gpu_perf *gp, const void *event)
{ {
gp->flip_complete++; gp->flip_complete++;
return 1; return 1;
@ -186,9 +186,9 @@ void gpu_perf_init(struct gpu_perf *gp, unsigned flags)
} }
static int process_sample(struct gpu_perf *gp, static int process_sample(struct gpu_perf *gp,
struct perf_event_header *header) const struct perf_event_header *header)
{ {
struct sample_event *sample = (struct sample_event *)header; const struct sample_event *sample = (const struct sample_event *)header;
int n, update = 0; int n, update = 0;
/* hash me! */ /* hash me! */
@ -218,7 +218,7 @@ int gpu_perf_update(struct gpu_perf *gp)
for (n = 0; n < gp->nr_cpus; n++) { for (n = 0; n < gp->nr_cpus; n++) {
struct perf_event_mmap_page *mmap = gp->map[n]; struct perf_event_mmap_page *mmap = gp->map[n];
uint8_t *data; const uint8_t *data;
uint64_t head, tail; uint64_t head, tail;
tail = mmap->data_tail; tail = mmap->data_tail;
@ -230,14 +230,14 @@ int gpu_perf_update(struct gpu_perf *gp)
data = (uint8_t *)mmap + gp->page_size; data = (uint8_t *)mmap + gp->page_size;
while (head - tail >= sizeof (struct perf_event_header)) { while (head - tail >= sizeof (struct perf_event_header)) {
struct perf_event_header *header; const struct perf_event_header *header;
header = (struct perf_event_header *)(data + (tail & mask)); header = (const struct perf_event_header *)(data + (tail & mask));
if (header->size > head - tail) if (header->size > head - tail)
break; break;
if (data + (tail & mask) + header->size > data + size) { if ((const uint8_t *)header + header->size > data + size) {
int before, after; int before;
if (header->size > buffer_size) { if (header->size > buffer_size) {
uint8_t *b = realloc(buffer, header->size); uint8_t *b = realloc(buffer, header->size);
@ -248,11 +248,10 @@ int gpu_perf_update(struct gpu_perf *gp)
buffer_size = header->size; buffer_size = header->size;
} }
after = (tail & mask) + header->size - size; before = data + size - (const uint8_t *)header;
before = header->size - after;
memcpy(buffer, data + (tail & mask), before); memcpy(buffer, header, before);
memcpy(buffer + before, data, after); memcpy(buffer + before, data, header->size - before);
header = (struct perf_event_header *)buffer; header = (struct perf_event_header *)buffer;
} }

View File

@ -8,7 +8,7 @@ struct gpu_perf {
void **map; void **map;
struct gpu_perf_sample { struct gpu_perf_sample {
uint64_t id; uint64_t id;
int (*func)(struct gpu_perf *, void *); int (*func)(struct gpu_perf *, const void *);
} *sample; } *sample;
int flip_complete; int flip_complete;