|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 09/36] xen/arch: add default colors selection function
From: Luca Miccio <lucmiccio@xxxxxxxxx>
When cache coloring support is enabled, a color assignment is needed for
every domain. Introduce a function computing a default configuration
with a safe and common value -- the dom0 color selection.
Do not access directly the array of color indices of dom0. Instead make
use of the dom0 color configuration as a bitmask.
Add a helper function that converts the color configuration bitmask into
the indices array.
Signed-off-by: Luca Miccio <lucmiccio@xxxxxxxxx>
Signed-off-by: Marco Solieri <marco.solieri@xxxxxxxxxxxxxxx>
---
xen/arch/arm/coloring.c | 36 +++++++++++++++++++++++++++++
xen/arch/arm/include/asm/coloring.h | 7 ++++++
2 files changed, 43 insertions(+)
diff --git a/xen/arch/arm/coloring.c b/xen/arch/arm/coloring.c
index af75b536a7..f6e6d09477 100644
--- a/xen/arch/arm/coloring.c
+++ b/xen/arch/arm/coloring.c
@@ -143,6 +143,42 @@ static __init uint64_t calculate_addr_col_mask(uint64_t
llc_way_size)
return addr_col_mask;
}
+static int copy_mask_to_list(
+ uint32_t *col_mask, uint32_t *col_list, uint64_t col_num)
+{
+ unsigned int i, k, c;
+
+ if ( !col_list )
+ return -EINVAL;
+
+ for ( i = 0, k = 0; i < MAX_COLORS_CELLS; i++ )
+ for ( c = 0; k < col_num && c < 32; c++ )
+ if ( col_mask[i] & (1 << (c + (i*32))) )
+ col_list[k++] = c + (i * 32);
+
+ return 0;
+}
+
+uint32_t *setup_default_colors(uint32_t *col_num)
+{
+ uint32_t *col_list;
+
+ if ( dom0_col_num )
+ {
+ *col_num = dom0_col_num;
+ col_list = xzalloc_array(uint32_t, dom0_col_num);
+ if ( !col_list )
+ {
+ printk(XENLOG_ERR "setup_default_colors: Alloc failed\n");
+ return NULL;
+ }
+ copy_mask_to_list(dom0_col_mask, col_list, dom0_col_num);
+ return col_list;
+ }
+
+ return NULL;
+}
+
bool __init coloring_init(void)
{
int i;
diff --git a/xen/arch/arm/include/asm/coloring.h
b/xen/arch/arm/include/asm/coloring.h
index 70e1dbd09b..8f24acf082 100644
--- a/xen/arch/arm/include/asm/coloring.h
+++ b/xen/arch/arm/include/asm/coloring.h
@@ -27,6 +27,13 @@
#ifdef CONFIG_COLORING
bool __init coloring_init(void);
+
+/*
+ * Return an array with default colors selection and store the number of
+ * colors in @param col_num. The array selection will be equal to the dom0
+ * color configuration.
+ */
+uint32_t *setup_default_colors(uint32_t *col_num);
#else /* !CONFIG_COLORING */
static inline bool __init coloring_init(void)
{
--
2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |