Signed-off-by: Andrea Bastoni <[email protected]>
---
hypervisor/arch/arm64/coloring.c | 40 +--------------------------
include/jailhouse/coloring.h | 46 ++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 39 deletions(-)
create mode 100644 include/jailhouse/coloring.h
diff --git a/hypervisor/arch/arm64/coloring.c b/hypervisor/arch/arm64/coloring.c
index ff3b5a78..c066ae24 100644
--- a/hypervisor/arch/arm64/coloring.c
+++ b/hypervisor/arch/arm64/coloring.c
@@ -21,6 +21,7 @@
#include <jailhouse/cell.h>
#include <jailhouse/mmio.h>
#include <jailhouse/assert.h>
+#include <jailhouse/coloring.h>
#include <asm/control.h>
#include <asm/coloring.h>
@@ -54,21 +55,11 @@ static inline int coloring_mem_destroy(struct cell *cell,
static inline int coloring_mem_start(struct jailhouse_memory *mr)
{
- assert(mr->flags & JAILHOUSE_MEM_LOADABLE);
-
- /* Match the address specified during load */
- mr->virt_start += coloring_root_map_offset;
-
return arch_unmap_memory_region(&root_cell, mr);
}
static inline int coloring_mem_load(struct jailhouse_memory *mr)
{
- assert(mr->flags & JAILHOUSE_MEM_LOADABLE);
-
- /* Fix addr to match the driver's IPA ioremap */
- mr->virt_start += coloring_root_map_offset;
-
/* Create an ad-hoc mapping just to load this image */
return arch_map_memory_region(&root_cell, mr);
}
@@ -104,35 +95,6 @@ static int dispatch_op(struct cell *cell, struct
jailhouse_memory *mr,
return 0;
}
-/**
- * Get range of contiguous bits in a bitmask.
- *
- * The function returns:
- * - bitmask without the extracted bit range.
- * - low: original bit position of range start.
- * - size: size of the range
- *
- * The function assumes bitmask is not 0.
- */
-static inline void get_bit_range(
- u64 *bitmask,
- unsigned int *low,
- unsigned int *size)
-{
- unsigned int _range;
-
- //col_print("mask: 0x%lx ", *bitmask);
-
- *low = ffsl(*bitmask);
- _range = *bitmask >> *low;
- *bitmask = _range & (_range + 1UL);
-
- _range = _range ^ *bitmask;
- *size = msbl(_range) + 1;
-
- //col_print("range: 0x%x, low: %u, size %u\n", _range, *low, *size);
-}
-
int color_cell_op(struct cell *cell,
const struct jailhouse_memory *col_mem,
unsigned int op, unsigned int flags)
diff --git a/include/jailhouse/coloring.h b/include/jailhouse/coloring.h
new file mode 100644
index 00000000..3def05d9
--- /dev/null
+++ b/include/jailhouse/coloring.h
@@ -0,0 +1,46 @@
+/*
+ * Jailhouse Cache Coloring Support
+ *
+ * Copyright (C) Technical University of Munich, 2020
+ *
+ * Authors:
+ * Andrea Bastoni <[email protected]>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See the
+ * COPYING file in the top-level directory.
+ */
+
+/** MSB/LSB function names differs between Jailhouse and Linux */
+#ifdef LINUX_VERSION_CODE
+/* NOTE: use [0-63] variants */
+#define _lsb(x) __ffs(x)
+#define _msb(x) __fls(x)
+#else
+#define _lsb(x) ffsl(x)
+#define _msb(x) msbl(x)
+#endif
+
+/**
+ * Get range of contiguous bits in a bitmask.
+ *
+ * The function returns:
+ * - bitmask without the extracted bit range.
+ * - low: original bit position of range start.
+ * - size: size of the range
+ *
+ * The function assumes bitmask is not 0.
+ */
+static inline void get_bit_range(
+ u64 *bitmask,
+ unsigned int *low,
+ unsigned int *size)
+{
+ unsigned int _range;
+
+ *low = _lsb(*bitmask);
+ _range = *bitmask >> *low;
+ *bitmask = _range & (_range + 1UL);
+
+ _range = _range ^ *bitmask;
+ *size = _msb(_range) + 1;
+}
--
2.29.2
--
You received this message because you are subscribed to the Google Groups
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jailhouse-dev/20210125120044.56794-21-andrea.bastoni%40tum.de.