[PATCH 1/3] Revert "Fix ringbuffer creation on sparc"
by Angus Salkeld
This reverts commit 683296f180fdd7b7834dc1506b7a192ae2684c04.
---
lib/ringbuffer.c | 60 +++++++----------------------------------------------
1 files changed, 8 insertions(+), 52 deletions(-)
diff --git a/lib/ringbuffer.c b/lib/ringbuffer.c
index 93b0857..2fa08ed 100644
--- a/lib/ringbuffer.c
+++ b/lib/ringbuffer.c
@@ -84,11 +84,11 @@ do { \
static void qb_rb_chunk_check(qb_ringbuffer_t * rb, uint32_t pointer);
-static qb_ringbuffer_t *
-_qb_rb_open(const char *name, size_t real_size, uint32_t flags,
- size_t shared_user_data_size)
+qb_ringbuffer_t *qb_rb_open(const char *name, size_t size, uint32_t flags,
+ size_t shared_user_data_size)
{
struct qb_ringbuffer_s *rb;
+ size_t real_size = QB_ROUNDUP(size, sysconf(_SC_PAGESIZE));
char path[PATH_MAX];
int32_t fd_hdr;
int32_t fd_data;
@@ -96,7 +96,6 @@ _qb_rb_open(const char *name, size_t real_size, uint32_t flags,
size_t shared_size = sizeof(struct qb_ringbuffer_shared_s);
char filename[PATH_MAX];
int32_t error = 0;
- void *shm_addr;
shared_size += shared_user_data_size;
@@ -171,9 +170,12 @@ _qb_rb_open(const char *name, size_t real_size, uint32_t flags,
goto cleanup_hdr;
}
+ qb_util_log(LOG_DEBUG,
+ "shm size:%zd; real_size:%zd; rb->size:%d", size,
+ real_size, rb->shared_hdr->size);
+
error = qb_util_circular_mmap(fd_data,
- &shm_addr, real_size);
- rb->shared_data = shm_addr;
+ (void **)&rb->shared_data, real_size);
if (error != 0) {
qb_util_log(LOG_ERR, "couldn't create circular mmap on %s",
rb->shared_hdr->data_path);
@@ -214,52 +216,6 @@ cleanup_hdr:
return NULL;
}
-static size_t _rb_min_size = 0;
-#define PAGE_SIZES_NUM 9
-static size_t _page_sizes[PAGE_SIZES_NUM] = {
- 0,
- 16 * 1024,
- 64 * 1024,
- 256 * 1024,
- 512 * 1024,
- 1024 * 1024,
- 4 * 1024 * 1024,
- 64 * 1024 * 1024,
- 256 * 1024 * 1024,
-};
-
-qb_ringbuffer_t *
-qb_rb_open(const char *name, size_t size, uint32_t flags,
- size_t shared_user_data_size)
-{
- int i;
- qb_ringbuffer_t * rb;
-
- if (_rb_min_size > 0) {
- return _qb_rb_open(name, QB_ROUNDUP(size, _rb_min_size),
- flags, shared_user_data_size);
- }
- /*
- * On the first call to qb_rb_open() we try using a number of
- * page sizes. This because the system might have CONFIG_HUGETLB_PAGE_SIZE
- * defined in their kernel. So even though sysconf() returns 2K or 4K
- * the mmap() will require alignment on these boundaries.
- */
- _page_sizes[0] = sysconf(_SC_PAGESIZE);
- for (i = 0; i < PAGE_SIZES_NUM; i++) {
- rb = _qb_rb_open(name, QB_ROUNDUP(size, _page_sizes[i]),
- flags, shared_user_data_size);
-
- if (rb != NULL) {
- _rb_min_size = _page_sizes[i];
- return rb;
- } else if (!(rb == NULL && errno == EINVAL)) {
- return rb;
- }
- }
- return rb;
-}
-
void qb_rb_close(qb_ringbuffer_t * rb)
{
if (rb == NULL) {
--
1.7.5.2
12 years, 11 months
[PATCH 1/4] Fix ringbuffer creation on sparc
by Angus Salkeld
On the first call to qb_rb_open() we try using a number of
page sizes. This because the system might have CONFIG_HUGETLB_PAGE_SIZE
defined in their kernel. So even though sysconf() returns 2K or 4K
some arch's mmap() require alignment on these boundaries.
Signed-off-by: Angus Salkeld <asalkeld(a)redhat.com>
---
lib/ringbuffer.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/lib/ringbuffer.c b/lib/ringbuffer.c
index 26c8ea9..94732eb 100644
--- a/lib/ringbuffer.c
+++ b/lib/ringbuffer.c
@@ -84,11 +84,11 @@ do { \
static void qb_rb_chunk_check(qb_ringbuffer_t * rb, uint32_t pointer);
-qb_ringbuffer_t *qb_rb_open(const char *name, size_t size, uint32_t flags,
- size_t shared_user_data_size)
+static qb_ringbuffer_t *
+_qb_rb_open(const char *name, size_t real_size, uint32_t flags,
+ size_t shared_user_data_size)
{
struct qb_ringbuffer_s *rb;
- size_t real_size = QB_ROUNDUP(size, sysconf(_SC_PAGESIZE));
char path[PATH_MAX];
int32_t fd_hdr;
int32_t fd_data;
@@ -96,6 +96,7 @@ qb_ringbuffer_t *qb_rb_open(const char *name, size_t size, uint32_t flags,
size_t shared_size = sizeof(struct qb_ringbuffer_shared_s);
char filename[PATH_MAX];
int32_t error = 0;
+ void *shm_addr;
shared_size += shared_user_data_size;
@@ -170,12 +171,9 @@ qb_ringbuffer_t *qb_rb_open(const char *name, size_t size, uint32_t flags,
goto cleanup_hdr;
}
- qb_util_log(LOG_DEBUG,
- "shm size:%zd; real_size:%zd; rb->size:%d", size,
- real_size, rb->shared_hdr->size);
-
error = qb_util_circular_mmap(fd_data,
- (void **)&rb->shared_data, real_size);
+ &shm_addr, real_size);
+ rb->shared_data = shm_addr;
if (error != 0) {
qb_util_log(LOG_ERR, "couldn't create circular mmap on %s",
rb->shared_hdr->data_path);
@@ -216,6 +214,52 @@ cleanup_hdr:
return NULL;
}
+static size_t _rb_min_size = 0;
+#define PAGE_SIZES_NUM 9
+static size_t _page_sizes[PAGE_SIZES_NUM] = {
+ 0,
+ 16 * 1024,
+ 64 * 1024,
+ 256 * 1024,
+ 512 * 1024,
+ 1024 * 1024,
+ 4 * 1024 * 1024,
+ 64 * 1024 * 1024,
+ 256 * 1024 * 1024,
+};
+
+qb_ringbuffer_t *
+qb_rb_open(const char *name, size_t size, uint32_t flags,
+ size_t shared_user_data_size)
+{
+ int i;
+ qb_ringbuffer_t * rb;
+
+ if (_rb_min_size > 0) {
+ return _qb_rb_open(name, QB_ROUNDUP(size, _rb_min_size),
+ flags, shared_user_data_size);
+ }
+ /*
+ * On the first call to qb_rb_open() we try using a number of
+ * page sizes. This because the system might have CONFIG_HUGETLB_PAGE_SIZE
+ * defined in their kernel. So even though sysconf() returns 2K or 4K
+ * the mmap() will require alignment on these boundaries.
+ */
+ _page_sizes[0] = sysconf(_SC_PAGESIZE);
+ for (i = 0; i < PAGE_SIZES_NUM; i++) {
+ rb = _qb_rb_open(name, QB_ROUNDUP(size, _page_sizes[i]),
+ flags, shared_user_data_size);
+
+ if (rb != NULL) {
+ _rb_min_size = _page_sizes[i];
+ return rb;
+ } else if (!(rb == NULL && errno == EINVAL)) {
+ return rb;
+ }
+ }
+ return rb;
+}
+
void qb_rb_close(qb_ringbuffer_t * rb)
{
if (rb == NULL) {
--
1.7.5.2
12 years, 11 months