summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-10-07 19:40:10 -0400
committerIan Moffett <ian@osmora.org>2025-10-07 19:41:54 -0400
commitf5bb03397d33167d598c4a8d6ca662a0fb8ce1ab (patch)
treeb9cbe02db04b156938bda63f2359d4533428038e
parentb54dc5fad0b5bd1fe2cb52bb6769788a018230b1 (diff)
kern: os: Support up to 8 max namespaces
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--src/sys/include/os/ns.h5
-rw-r--r--src/sys/include/sys/fbdev.h2
-rw-r--r--src/sys/io/video/fbdev.c2
-rw-r--r--src/sys/os/os_ns.c20
4 files changed, 23 insertions, 6 deletions
diff --git a/src/sys/include/os/ns.h b/src/sys/include/os/ns.h
index 87f18bf..73de677 100644
--- a/src/sys/include/os/ns.h
+++ b/src/sys/include/os/ns.h
@@ -33,6 +33,11 @@
#include <sys/types.h>
#include <os/nsvar.h>
+#define NSMAX 8 /* Max number of namespaces */
+
+/* Namespace lists */
+#define NS_IOTAP 0 /* I/O tap interface */
+
typedef uint8_t ns_t;
/*
diff --git a/src/sys/include/sys/fbdev.h b/src/sys/include/sys/fbdev.h
index b0f3fb1..2acddbf 100644
--- a/src/sys/include/sys/fbdev.h
+++ b/src/sys/include/sys/fbdev.h
@@ -35,7 +35,7 @@
#include <stdint.h>
#endif /* !_KERNEL */
-#define FBDEV_NSO "system:video:attr"
+#define FBDEV_NSO "video:attr"
struct fb_info {
uint32_t width;
diff --git a/src/sys/io/video/fbdev.c b/src/sys/io/video/fbdev.c
index 9ebad7a..ce8c073 100644
--- a/src/sys/io/video/fbdev.c
+++ b/src/sys/io/video/fbdev.c
@@ -126,7 +126,7 @@ fbdev_init(struct module *modp)
}
obj->data = &info;
- return ns_obj_enter(0, obj, FBDEV_NSO);
+ return ns_obj_enter(NS_IOTAP, obj, FBDEV_NSO);
}
static struct mac_ops ops = {
diff --git a/src/sys/os/os_ns.c b/src/sys/os/os_ns.c
index e449eb5..5259acc 100644
--- a/src/sys/os/os_ns.c
+++ b/src/sys/os/os_ns.c
@@ -55,7 +55,7 @@ struct ns_hashmap {
};
/* Global namespace */
-static struct ns_hashmap namespace;
+static struct ns_hashmap namespace[NSMAX];
/*
* Fowler–Noll–Vo hash function
@@ -131,12 +131,17 @@ ns_obj_enter(ns_t ns, void *obj, const char *name)
return -EINVAL;
}
+ /* Don't overflow */
+ if (ns >= NSMAX) {
+ return -EINVAL;
+ }
+
/* Get the index */
hash = fnv1_hash(name);
key = hash % NS_HM_ENTRIES;
/* Find a free slot */
- hm = &namespace;
+ hm = &namespace[ns];
while (hm != NULL) {
entry = &hm->entries[key];
@@ -168,11 +173,16 @@ ns_obj_lookup(ns_t ns, const char *name, void *res_p)
return -EINVAL;
}
+ /* Don't overflow */
+ if (ns >= NSMAX) {
+ return -EINVAL;
+ }
+
/* Get the index */
hash = fnv1_hash(name);
key = hash % NS_HM_ENTRIES;
- hm = &namespace;
+ hm = &namespace[ns];
while (hm != NULL) {
entry = &hm->entries[key];
if (entry->name == NULL) {
@@ -202,6 +212,8 @@ ns_obj_lookup(ns_t ns, const char *name, void *res_p)
int
ns_init(void)
{
- memset(&namespace, 0, sizeof(namespace));
+ for (uint8_t i = 0; i < NSMAX; ++i) {
+ memset(&namespace[i], 0, sizeof(namespace[0]));
+ }
return 0;
}