X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;ds=sidebyside;f=libringbuffer%2Fring_buffer_backend.c;h=3e202978465ba73923a5c75645011ede0ff18954;hb=58d4b2a2484f1d6277c5553a661cf161a9de9af3;hp=cac746c246109d792432ad552e51cc77dd916356;hpb=afdf9825400f1b975a98202a3e9dcbec0a572a56;p=lttng-ust.git diff --git a/libringbuffer/ring_buffer_backend.c b/libringbuffer/ring_buffer_backend.c index cac746c2..3e202978 100644 --- a/libringbuffer/ring_buffer_backend.c +++ b/libringbuffer/ring_buffer_backend.c @@ -62,7 +62,7 @@ int lib_ring_buffer_backend_allocate(const struct lib_ring_buffer_config *config /* Allocate backend pages array elements */ for (i = 0; i < num_subbuf_alloc; i++) { align_shm(shmobj, __alignof__(struct lib_ring_buffer_backend_pages)); - set_shmp(shmp(handle, bufb->array)[i].shmp, + set_shmp(shmp_index(handle, bufb->array, i)->shmp, zalloc_shm(shmobj, sizeof(struct lib_ring_buffer_backend_pages))); if (!shmp(handle, shmp_index(handle, bufb->array, i)->shmp)) @@ -213,7 +213,7 @@ int channel_backend_init(struct channel_backend *chanb, struct channel *chan = caa_container_of(chanb, struct channel, backend); unsigned int i; int ret; - size_t shmsize = 0, bufshmsize = 0, num_subbuf_alloc; + size_t shmsize = 0, num_subbuf_alloc; if (!name) return -EPERM; @@ -257,11 +257,11 @@ int channel_backend_init(struct channel_backend *chanb, num_subbuf_alloc = num_subbuf + 1; shmsize += offset_align(shmsize, __alignof__(struct lib_ring_buffer_backend_pages_shmp)); shmsize += sizeof(struct lib_ring_buffer_backend_pages_shmp) * num_subbuf_alloc; - shmsize += offset_align(bufshmsize, PAGE_SIZE); + shmsize += offset_align(shmsize, PAGE_SIZE); shmsize += subbuf_size * num_subbuf_alloc; - shmsize += offset_align(bufshmsize, __alignof__(struct lib_ring_buffer_backend_pages)); + shmsize += offset_align(shmsize, __alignof__(struct lib_ring_buffer_backend_pages)); shmsize += sizeof(struct lib_ring_buffer_backend_pages) * num_subbuf_alloc; - shmsize += offset_align(bufshmsize, __alignof__(struct lib_ring_buffer_backend_subbuffer)); + shmsize += offset_align(shmsize, __alignof__(struct lib_ring_buffer_backend_subbuffer)); shmsize += sizeof(struct lib_ring_buffer_backend_subbuffer) * num_subbuf; /* Per-cpu buffer size: control (after backend) */ shmsize += offset_align(shmsize, __alignof__(struct commit_counters_hot)); @@ -390,7 +390,7 @@ size_t lib_ring_buffer_read(struct lib_ring_buffer_backend *bufb, size_t offset, CHAN_WARN_ON(chanb, offset >= chanb->buf_size); CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE && subbuffer_id_is_noref(config, id)); - memcpy(dest, shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & ~(chanb->subbuf_size - 1)), len); + memcpy(dest, shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)), len); return orig_len; } @@ -426,7 +426,7 @@ int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb, size_t offse CHAN_WARN_ON(chanb, offset >= chanb->buf_size); CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE && subbuffer_id_is_noref(config, id)); - str = shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & ~(chanb->subbuf_size - 1)); + str = shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)); string_len = strnlen(str, len); if (dest && len) { memcpy(dest, str, string_len); @@ -460,7 +460,7 @@ void *lib_ring_buffer_read_offset_address(struct lib_ring_buffer_backend *bufb, rpages = shmp_index(handle, bufb->array, sb_bindex); CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE && subbuffer_id_is_noref(config, id)); - return shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & ~(chanb->subbuf_size - 1)); + return shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)); } /** @@ -482,6 +482,7 @@ void *lib_ring_buffer_offset_address(struct lib_ring_buffer_backend *bufb, struct channel_backend *chanb = &shmp(handle, bufb->chan)->backend; const struct lib_ring_buffer_config *config = chanb->config; unsigned long sb_bindex, id; + void *ret; offset &= chanb->buf_size - 1; sbidx = offset >> chanb->subbuf_size_order; @@ -490,5 +491,5 @@ void *lib_ring_buffer_offset_address(struct lib_ring_buffer_backend *bufb, rpages = shmp_index(handle, bufb->array, sb_bindex); CHAN_WARN_ON(chanb, config->mode == RING_BUFFER_OVERWRITE && subbuffer_id_is_noref(config, id)); - return shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & ~(chanb->subbuf_size - 1)); + return shmp_index(handle, shmp(handle, rpages->shmp)->p, offset & (chanb->subbuf_size - 1)); }