Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Jul 2024 19:31:07 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: a161269b2451 - main - buf_ring: Make buf_ring.h amenable to userspace compilation
Message-ID:  <202407111931.46BJV7ac070144@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=a161269b2451140a45de2d0cae0dad84f9e7b439

commit a161269b2451140a45de2d0cae0dad84f9e7b439
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-07-11 18:55:11 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-07-11 18:55:44 +0000

    buf_ring: Make buf_ring.h amenable to userspace compilation
    
    This will be useful for adding test cases.
    
    Reviewed by:    andrew
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D45869
---
 sys/sys/buf_ring.h | 37 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/sys/sys/buf_ring.h b/sys/sys/buf_ring.h
index 32c9f5b15f22..cb18175c3a75 100644
--- a/sys/sys/buf_ring.h
+++ b/sys/sys/buf_ring.h
@@ -30,11 +30,18 @@
 #ifndef	_SYS_BUF_RING_H_
 #define	_SYS_BUF_RING_H_
 
+#include <sys/param.h>
+#include <sys/kassert.h>
+#include <machine/atomic.h>
 #include <machine/cpu.h>
 
 #ifdef DEBUG_BUFRING
+#ifdef _KERNEL
 #include <sys/lock.h>
 #include <sys/mutex.h>
+#else
+#error "DEBUG_BUFRING is only supported in kernel"
+#endif
 #endif
 
 struct buf_ring {
@@ -361,8 +368,36 @@ buf_ring_count(struct buf_ring *br)
 	    & br->br_prod_mask);
 }
 
+#ifdef _KERNEL
 struct buf_ring *buf_ring_alloc(int count, struct malloc_type *type, int flags,
     struct mtx *);
 void buf_ring_free(struct buf_ring *br, struct malloc_type *type);
+#else
 
-#endif
+#include <stdlib.h>
+
+static inline struct buf_ring *
+buf_ring_alloc(int count)
+{
+	struct buf_ring *br;
+
+	KASSERT(powerof2(count), ("buf ring must be size power of 2"));
+
+	br = calloc(1, sizeof(struct buf_ring) + count * sizeof(void *));
+	if (br == NULL)
+		return (NULL);
+	br->br_prod_size = br->br_cons_size = count;
+	br->br_prod_mask = br->br_cons_mask = count - 1;
+	br->br_prod_head = br->br_cons_head = 0;
+	br->br_prod_tail = br->br_cons_tail = 0;
+	return (br);
+}
+
+static inline void
+buf_ring_free(struct buf_ring *br)
+{
+	free(br);
+}
+
+#endif /* !_KERNEL */
+#endif /* _SYS_BUF_RING_H_ */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202407111931.46BJV7ac070144>