#define CLASS_LEN(class) (sizeof(class) / sizeof(class[0]))
+// threshold to use external cake metadata
+#define EXTERN_THRESHOLD 128
+
static char piles_names[][PILE_NAME_MAXLEN] =
{
"valloc_8", "valloc_16", "valloc_32", "valloc_64",
"valloc_2k", "valloc_4k", "valloc_8k"
};
+#define M128 (4)
+#define M1K (M128 + 3)
+
+static int page_counts[] =
+{
+ [0] = 1,
+ [1] = 1,
+ [2] = 1,
+ [3] = 1,
+ [M128 ] = 1,
+ [M128 + 1] = 2,
+ [M128 + 2] = 2,
+ [M1K ] = 4,
+ [M1K + 1 ] = 4,
+ [M1K + 2 ] = 8,
+ [M1K + 3 ] = 8
+};
+
static char piles_names_dma[][PILE_NAME_MAXLEN] =
{
"valloc_dma_128", "valloc_dma_256", "valloc_dma_512",
void
valloc_init()
{
+ int opts = 0;
for (size_t i = 0; i < CLASS_LEN(piles_names); i++) {
int size = 1 << (i + 3);
- piles[i] = cake_new_pile(piles_names[i], size, size > 1024 ? 8 : 1, 0);
+ if (size >= EXTERN_THRESHOLD) {
+ opts |= PILE_FL_EXTERN;
+ }
+ piles[i] = cake_new_pile(piles_names[i], size, page_counts[i], opts);
}
+ opts = PILE_ALIGN_CACHE;
// DMA 内存保证128字节对齐
for (size_t i = 0; i < CLASS_LEN(piles_names_dma); i++) {
int size = 1 << (i + 7);
+ if (size >= EXTERN_THRESHOLD) {
+ opts |= PILE_FL_EXTERN;
+ }
piles_dma[i] = cake_new_pile(
- piles_names_dma[i], size, size > 1024 ? 4 : 1, PILE_ALIGN_CACHE);
+ piles_names_dma[i], size, page_counts[M128 + i], opts);
}
}