projects
/
lttng-ust.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Implement shm object table
[lttng-ust.git]
/
libringbuffer
/
backend.h
diff --git
a/libringbuffer/backend.h
b/libringbuffer/backend.h
index 1bd61109ca0096e2685b864324449b5760dc3128..e26045af2c7318f8bff93813cd9beaae8085db81 100644
(file)
--- a/
libringbuffer/backend.h
+++ b/
libringbuffer/backend.h
@@
-27,10
+27,12
@@
/* Ring buffer backend access (read/write) */
extern size_t lib_ring_buffer_read(struct lib_ring_buffer_backend *bufb,
/* Ring buffer backend access (read/write) */
extern size_t lib_ring_buffer_read(struct lib_ring_buffer_backend *bufb,
- size_t offset, void *dest, size_t len);
+ size_t offset, void *dest, size_t len,
+ struct shm_handle *handle);
extern int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb,
extern int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb,
- size_t offset, void *dest, size_t len);
+ size_t offset, void *dest, size_t len,
+ struct shm_handle *handle);
/*
* Return the address where a given offset is located.
/*
* Return the address where a given offset is located.
@@
-40,10
+42,12
@@
extern int lib_ring_buffer_read_cstr(struct lib_ring_buffer_backend *bufb,
*/
extern void *
lib_ring_buffer_offset_address(struct lib_ring_buffer_backend *bufb,
*/
extern void *
lib_ring_buffer_offset_address(struct lib_ring_buffer_backend *bufb,
- size_t offset);
+ size_t offset,
+ struct shm_handle *handle);
extern void *
lib_ring_buffer_read_offset_address(struct lib_ring_buffer_backend *bufb,
extern void *
lib_ring_buffer_read_offset_address(struct lib_ring_buffer_backend *bufb,
- size_t offset);
+ size_t offset,
+ struct shm_handle *handle);
/**
* lib_ring_buffer_write - write data to a buffer backend
/**
* lib_ring_buffer_write - write data to a buffer backend
@@
-64,16
+68,17
@@
void lib_ring_buffer_write(const struct lib_ring_buffer_config *config,
{
struct lib_ring_buffer_backend *bufb = &ctx->buf->backend;
struct channel_backend *chanb = &ctx->chan->backend;
{
struct lib_ring_buffer_backend *bufb = &ctx->buf->backend;
struct channel_backend *chanb = &ctx->chan->backend;
+ struct shm_handle *handle = ctx->handle;
size_t sbidx;
size_t offset = ctx->buf_offset;
size_t sbidx;
size_t offset = ctx->buf_offset;
- struct lib_ring_buffer_backend_pages *rpages;
+ struct lib_ring_buffer_backend_pages
_shmp
*rpages;
unsigned long sb_bindex, id;
offset &= chanb->buf_size - 1;
sbidx = offset >> chanb->subbuf_size_order;
unsigned long sb_bindex, id;
offset &= chanb->buf_size - 1;
sbidx = offset >> chanb->subbuf_size_order;
- id = shmp(bufb->buf_wsb)[sbidx].id;
+ id = shmp(
handle,
bufb->buf_wsb)[sbidx].id;
sb_bindex = subbuffer_id_get_index(config, id);
sb_bindex = subbuffer_id_get_index(config, id);
- rpages =
shmp(
bufb->array)[sb_bindex];
+ rpages =
&shmp(handle,
bufb->array)[sb_bindex];
CHAN_WARN_ON(ctx->chan,
config->mode == RING_BUFFER_OVERWRITE
&& subbuffer_id_is_noref(config, id));
CHAN_WARN_ON(ctx->chan,
config->mode == RING_BUFFER_OVERWRITE
&& subbuffer_id_is_noref(config, id));
@@
-83,7
+88,7
@@
void lib_ring_buffer_write(const struct lib_ring_buffer_config *config,
*/
CHAN_WARN_ON(chanb, offset >= chanb->buf_size);
lib_ring_buffer_do_copy(config,
*/
CHAN_WARN_ON(chanb, offset >= chanb->buf_size);
lib_ring_buffer_do_copy(config,
- shmp(
rpages
->p) + (offset & ~(chanb->subbuf_size - 1)),
+ shmp(
handle, shmp(handle, rpages->shmp)
->p) + (offset & ~(chanb->subbuf_size - 1)),
src, len);
ctx->buf_offset += len;
}
src, len);
ctx->buf_offset += len;
}
@@
-96,24
+101,25
@@
void lib_ring_buffer_write(const struct lib_ring_buffer_config *config,
static inline
unsigned long lib_ring_buffer_get_records_unread(
const struct lib_ring_buffer_config *config,
static inline
unsigned long lib_ring_buffer_get_records_unread(
const struct lib_ring_buffer_config *config,
- struct lib_ring_buffer *buf)
+ struct lib_ring_buffer *buf,
+ struct shm_handle *handle)
{
struct lib_ring_buffer_backend *bufb = &buf->backend;
{
struct lib_ring_buffer_backend *bufb = &buf->backend;
- struct lib_ring_buffer_backend_pages *pages;
+ struct lib_ring_buffer_backend_pages
_shmp
*pages;
unsigned long records_unread = 0, sb_bindex, id;
unsigned int i;
unsigned long records_unread = 0, sb_bindex, id;
unsigned int i;
- for (i = 0; i < shmp(bufb->chan)->backend.num_subbuf; i++) {
- id = shmp(bufb->buf_wsb)[i].id;
+ for (i = 0; i < shmp(
handle,
bufb->chan)->backend.num_subbuf; i++) {
+ id = shmp(
handle,
bufb->buf_wsb)[i].id;
sb_bindex = subbuffer_id_get_index(config, id);
sb_bindex = subbuffer_id_get_index(config, id);
- pages =
shmp(
bufb->array)[sb_bindex];
- records_unread += v_read(config, &
pages
->records_unread);
+ pages =
&shmp(handle,
bufb->array)[sb_bindex];
+ records_unread += v_read(config, &
shmp(handle, pages->shmp)
->records_unread);
}
if (config->mode == RING_BUFFER_OVERWRITE) {
id = bufb->buf_rsb.id;
sb_bindex = subbuffer_id_get_index(config, id);
}
if (config->mode == RING_BUFFER_OVERWRITE) {
id = bufb->buf_rsb.id;
sb_bindex = subbuffer_id_get_index(config, id);
- pages =
shmp(
bufb->array)[sb_bindex];
- records_unread += v_read(config, &
pages
->records_unread);
+ pages =
&shmp(handle,
bufb->array)[sb_bindex];
+ records_unread += v_read(config, &
shmp(handle, pages->shmp)
->records_unread);
}
return records_unread;
}
}
return records_unread;
}
This page took
0.025386 seconds
and
4
git commands to generate.