|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 1/2] plat/*: Add memory region names
Add configuration option that enables a name field in
struct ukplat_memregion_desc (inlucde/uk/plat/memory.h).
This option might be useful for debugging.
Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx>
---
include/uk/plat/memory.h | 4 ++++
lib/ukboot/boot.c | 14 ++++++++++++++
plat/Config.uk | 6 ++++++
plat/kvm/memory.c | 18 ++++++++++++++++++
plat/linuxu/memory.c | 6 ++++++
plat/xen/arm/setup.c | 6 ++++++
plat/xen/memory.c | 18 ++++++++++++++++++
plat/xen/x86/setup.c | 3 +++
8 files changed, 75 insertions(+)
diff --git a/include/uk/plat/memory.h b/include/uk/plat/memory.h
index 46e3679..eadb088 100644
--- a/include/uk/plat/memory.h
+++ b/include/uk/plat/memory.h
@@ -37,6 +37,7 @@
#define __UKPLAT_MEMORY_H__
#include <uk/arch/types.h>
+#include <uk/config.h>
#ifdef __cplusplus
extern "C" {
@@ -57,6 +58,9 @@ struct ukplat_memregion_desc {
void *base;
__sz len;
int flags;
+#if UKPLAT_MEMRNAME
+ const char *name;
+#endif
};
/**
diff --git a/lib/ukboot/boot.c b/lib/ukboot/boot.c
index 5158f32..acbae6e 100644
--- a/lib/ukboot/boot.c
+++ b/lib/ukboot/boot.c
@@ -142,17 +142,31 @@ void ukplat_entry(int argc, char *argv[])
if ((md.flags & UKPLAT_MEMRF_ALLOCATABLE)
!= UKPLAT_MEMRF_ALLOCATABLE) {
+#if UKPLAT_MEMRNAME
+ uk_printd(DLVL_EXTRA, "Skip memory region %d:
%p - %p (flags: 0x%02x, name: %s)\n",
+ i, md.base, (void *)((size_t)md.base
+ + md.len),
+ md.flags, md.name);
+#else
uk_printd(DLVL_EXTRA, "Skip memory region %d:
%p - %p (flags: 0x%02x)\n",
i, md.base, (void *)((size_t)md.base
+ md.len),
md.flags);
+#endif
continue;
}
+#if UKPLAT_MEMRNAME
+ uk_printd(DLVL_EXTRA, "Try memory region %d: %p - %p
(flags: 0x%02x, name: %s)...\n",
+ i, md.base, (void *)((size_t)md.base
+ + md.len),
+ md.flags, md.name);
+#else
uk_printd(DLVL_EXTRA, "Try memory region %d: %p - %p
(flags: 0x%02x)...\n",
i, md.base, (void *)((size_t)md.base
+ md.len),
md.flags);
+#endif
/* try to use memory region to initialize allocator
* if it fails, we will try again with the next region.
* As soon we have an allocator, we simply add every
diff --git a/plat/Config.uk b/plat/Config.uk
index fd251dd..e14cc85 100644
--- a/plat/Config.uk
+++ b/plat/Config.uk
@@ -1,3 +1,9 @@
source "plat/xen/Config.uk"
source "plat/kvm/Config.uk"
source "plat/linuxu/Config.uk"
+
+config UKPLAT_MEMRNAME
+ bool "Memory region names"
+ default n
+ help
+ Enable name field in memory region descriptors
diff --git a/plat/kvm/memory.c b/plat/kvm/memory.c
index 20f6bd2..cfb15a6 100644
--- a/plat/kvm/memory.c
+++ b/plat/kvm/memory.c
@@ -48,6 +48,9 @@ int ukplat_memregion_get(int i, struct ukplat_memregion_desc
*m)
m->len = (size_t) &_etext - (size_t) &_stext;
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "text";
+#endif
ret = 0;
break;
case 1: /* rodata */
@@ -55,6 +58,9 @@ int ukplat_memregion_get(int i, struct ukplat_memregion_desc
*m)
m->len = (size_t) &_erodata - (size_t) &_etext;
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "rodata";
+#endif
ret = 0;
break;
case 2: /* data */
@@ -63,6 +69,9 @@ int ukplat_memregion_get(int i, struct ukplat_memregion_desc
*m)
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE
| UKPLAT_MEMRF_WRITABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "data";
+#endif
ret = 0;
break;
case 3: /* heap */
@@ -70,6 +79,9 @@ int ukplat_memregion_get(int i, struct ukplat_memregion_desc
*m)
m->len = (size_t) _libkvmplat_stack_top
- (size_t) _libkvmplat_heap_start;
m->flags = UKPLAT_MEMRF_ALLOCATABLE;
+#if UKPLAT_MEMRNAME
+ m->name = "heap";
+#endif
ret = 0;
break;
case 4: /* stack */
@@ -80,11 +92,17 @@ int ukplat_memregion_get(int i, struct
ukplat_memregion_desc *m)
| UKPLAT_MEMRF_READABLE
| UKPLAT_MEMRF_WRITABLE);
ret = 0;
+#if UKPLAT_MEMRNAME
+ m->name = "bstack";
+#endif
break;
default:
m->base = __NULL;
m->len = 0;
m->flags = 0x0;
+#if UKPLAT_MEMRNAME
+ m->name = __NULL;
+#endif
ret = -1;
break;
}
diff --git a/plat/linuxu/memory.c b/plat/linuxu/memory.c
index 4d674c1..f0f3d7e 100644
--- a/plat/linuxu/memory.c
+++ b/plat/linuxu/memory.c
@@ -52,12 +52,18 @@ int ukplat_memregion_get(int i, struct
ukplat_memregion_desc *m)
m->base = _liblinuxuplat_opts.heap.base;
m->len = _liblinuxuplat_opts.heap.len;
m->flags = UKPLAT_MEMRF_ALLOCATABLE;
+#if UKPLAT_MEMRNAME
+ m->name = "heap";
+#endif
ret = 0;
} else {
/* invalid memory region index or no heap allocated */
m->base = __NULL;
m->len = 0;
m->flags = 0x0;
+#if UKPLAT_MEMRNAME
+ m->name = __NULL;
+#endif
ret = -1;
}
diff --git a/plat/xen/arm/setup.c b/plat/xen/arm/setup.c
index 1f9aa83..c247db5 100644
--- a/plat/xen/arm/setup.c
+++ b/plat/xen/arm/setup.c
@@ -172,11 +172,17 @@ static inline void _dtb_init_mem(uint32_t physical_offset)
_libxenplat_mrd[0].len = (size_t) to_virt(max_pfn_p << __PAGE_SHIFT)
- (size_t) to_virt(start_pfn_p << __PAGE_SHIFT);
_libxenplat_mrd[0].flags = (UKPLAT_MEMRF_ALLOCATABLE);
+#if UKPLAT_MEMRNAME
+ _libxenplat_mrd[0].name = "heap";
+#endif
/* dtb */
_libxenplat_mrd[1].base = HYPERVISOR_dtb;
_libxenplat_mrd[1].len = fdt_size;
_libxenplat_mrd[1].flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE);
+#if UKPLAT_MEMRNAME
+ _libxenplat_mrd[1].name = "dtb";
+#endif
_libxenplat_mrd_num = 2;
}
diff --git a/plat/xen/memory.c b/plat/xen/memory.c
index 2fafdcd..c40ea3d 100644
--- a/plat/xen/memory.c
+++ b/plat/xen/memory.c
@@ -60,18 +60,27 @@ int ukplat_memregion_get(int i, struct
ukplat_memregion_desc *m)
m->len = (size_t) &_etext - (size_t) &_text;
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "text";
+#endif
break;
case 1: /* ro data */
m->base = &_rodata;
m->len = (size_t) &_erodata - (size_t) &_rodata;
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "rodata";
+#endif
break;
case 2: /* ctors, dtors */
m->base = &_erodata;
m->len = (size_t) &_data - (size_t) &_erodata;
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "ctors+dtors";
+#endif
break;
case 3: /* data */
m->base = &_data;
@@ -79,6 +88,9 @@ int ukplat_memregion_get(int i, struct ukplat_memregion_desc
*m)
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE
| UKPLAT_MEMRF_WRITABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "data";
+#endif
break;
case 4: /* bss */
m->base = &__bss_start;
@@ -86,12 +98,18 @@ int ukplat_memregion_get(int i, struct
ukplat_memregion_desc *m)
m->flags = (UKPLAT_MEMRF_RESERVED
| UKPLAT_MEMRF_READABLE
| UKPLAT_MEMRF_WRITABLE);
+#if UKPLAT_MEMRNAME
+ m->name = "bss";
+#endif
break;
default:
if (i < 0 || i >= ukplat_memregion_count()) {
m->base = __NULL;
m->len = 0;
m->flags = 0x0;
+#if UKPLAT_MEMRNAME
+ m->name = __NULL;
+#endif
return -1;
} else {
memcpy(m, &_libxenplat_mrd[i - 5], sizeof(*m));
diff --git a/plat/xen/x86/setup.c b/plat/xen/x86/setup.c
index cf8bad2..3392841 100644
--- a/plat/xen/x86/setup.c
+++ b/plat/xen/x86/setup.c
@@ -165,6 +165,9 @@ static inline void _init_mem(void)
_libxenplat_mrd[0].len = (size_t) to_virt(max_pfn << __PAGE_SHIFT)
- (size_t) to_virt(start_pfn << __PAGE_SHIFT);
_libxenplat_mrd[0].flags = (UKPLAT_MEMRF_ALLOCATABLE);
+#if UKPLAT_MEMRNAME
+ _libxenplat_mrd[0].name = "heap";
+#endif
_libxenplat_mrd_num = 1;
}
--
2.7.4
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |