2 * allocate uncached memory
5 #include "../port/lib.h"
12 typedef struct Private Private;
19 static Private ucprivate;
22 ucpoolpanic(Pool* p, char* fmt, ...)
26 char msg[sizeof pv->msg];
30 vseprint(pv->cur, &pv->msg[sizeof pv->msg], fmt, v);
32 memmove(msg, pv->msg, sizeof msg);
38 ucpoolprint(Pool* p, char* fmt, ...)
45 pv->cur = vseprint(pv->cur, &pv->msg[sizeof pv->msg], fmt, v);
53 char msg[sizeof pv->msg];
56 if(pv->cur == pv->msg){
61 memmove(msg, pv->msg, sizeof msg);
65 iprint("%.*s", sizeof pv->msg, msg);
75 pv->pc = getcallerpc(&p);
84 assert(size == 1*MiB);
86 mainmem->maxsize += 1*MiB;
87 if((v = mallocalign(1*MiB, 1*MiB, 0, 0)) == nil ||
88 (uv = mmuuncache(v, 1*MiB)) == nil){
90 mainmem->maxsize -= 1*MiB;
96 static Pool ucpool = {
103 .flags = /*POOL_TOLERANCE|POOL_ANTAGONISM|POOL_PARANOIA|*/0,
106 .unlock = ucpoolunlock,
107 .print = ucpoolprint,
108 .panic = ucpoolpanic,
110 .private = &ucprivate,
118 poolfree(&ucpool, v);
124 assert(size < ucpool.minarena-128);
126 return poolallocalign(&ucpool, size, 32, 0, 0);
130 ucallocalign(usize size, int align, int span)
132 assert(size < ucpool.minarena-128);
134 return poolallocalign(&ucpool, size, align, 0, span);