static DEFINE_MUTEX(perf_counter_mutex);
static LIST_HEAD(perf_counter_contexts);
+static
+size_t perf_counter_get_size(size_t offset)
+{
+ size_t size = 0;
+
+ size += lib_ring_buffer_align(offset, ltt_alignof(uint64_t));
+ size += sizeof(uint64_t);
+ return size;
+}
+
static
void perf_counter_record(struct lttng_ctx_field *field,
struct lib_ring_buffer_ctx *ctx,
event = field->u.perf_counter.e[ctx->cpu];
event->pmu->read(event);
value = local64_read(&event->count);
- lib_ring_buffer_align_ctx(ctx,
- ltt_alignof(field->type.u.basic.integer.alignment / CHAR_BIT));
+ lib_ring_buffer_align_ctx(ctx, ltt_alignof(value));
chan->ops->event_write(ctx, &value, sizeof(value));
}
}
field->destroy = lttng_destroy_perf_counter_field;
- field->name = "dummyname";//TODO: lookup_counter_name(type, config);
- field->type.atype = atype_integer;
- field->type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT;
- field->type.u.basic.integer.alignment = ltt_alignof(unsigned long) * CHAR_BIT;
- field->type.u.basic.integer.signedness = 0;
- field->type.u.basic.integer.reverse_byte_order = 0;
- field->type.u.basic.integer.base = 10;
- field->type.u.basic.integer.encoding = lttng_encode_none;
- field->callback = perf_counter_record;
+ field->event_field.name = "dummyname";//TODO: lookup_counter_name(type, config);
+ field->event_field.type.atype = atype_integer;
+ field->event_field.type.u.basic.integer.size = sizeof(unsigned long) * CHAR_BIT;
+ field->event_field.type.u.basic.integer.alignment = ltt_alignof(unsigned long) * CHAR_BIT;
+ field->event_field.type.u.basic.integer.signedness = is_signed_type(unsigned long);
+ field->event_field.type.u.basic.integer.reverse_byte_order = 0;
+ field->event_field.type.u.basic.integer.base = 10;
+ field->event_field.type.u.basic.integer.encoding = lttng_encode_none;
+ field->get_size = perf_counter_get_size;
+ field->record = perf_counter_record;
field->u.perf_counter.e = events;
field->u.perf_counter.attr = attr;