1 056fe1ba 2003-11-23 devnull #include <u.h>
2 056fe1ba 2003-11-23 devnull #include <libc.h>
3 056fe1ba 2003-11-23 devnull #include <venti.h>
6 056fe1ba 2003-11-23 devnull IdealAlignment = 32,
7 cbeb0b26 2006-04-01 devnull ChunkSize = 128*1024
12 056fe1ba 2003-11-23 devnull vtfree(void *p)
14 056fe1ba 2003-11-23 devnull if(p == 0)
20 056fe1ba 2003-11-23 devnull vtmalloc(int size)
24 056fe1ba 2003-11-23 devnull p = malloc(size);
25 056fe1ba 2003-11-23 devnull if(p == 0)
26 056fe1ba 2003-11-23 devnull sysfatal("vtmalloc: out of memory");
27 056fe1ba 2003-11-23 devnull setmalloctag(p, getcallerpc(&size));
28 056fe1ba 2003-11-23 devnull return p;
32 056fe1ba 2003-11-23 devnull vtmallocz(int size)
34 056fe1ba 2003-11-23 devnull void *p = vtmalloc(size);
35 056fe1ba 2003-11-23 devnull memset(p, 0, size);
36 056fe1ba 2003-11-23 devnull setmalloctag(p, getcallerpc(&size));
37 056fe1ba 2003-11-23 devnull return p;
41 056fe1ba 2003-11-23 devnull vtrealloc(void *p, int size)
43 056fe1ba 2003-11-23 devnull if(p == nil)
44 056fe1ba 2003-11-23 devnull return vtmalloc(size);
45 056fe1ba 2003-11-23 devnull p = realloc(p, size);
46 056fe1ba 2003-11-23 devnull if(p == 0)
47 056fe1ba 2003-11-23 devnull sysfatal("vtMemRealloc: out of memory");
48 056fe1ba 2003-11-23 devnull setrealloctag(p, getcallerpc(&size));
49 056fe1ba 2003-11-23 devnull return p;
53 056fe1ba 2003-11-23 devnull vtbrk(int n)
55 056fe1ba 2003-11-23 devnull static Lock lk;
56 056fe1ba 2003-11-23 devnull static uchar *buf;
57 056fe1ba 2003-11-23 devnull static int nbuf;
58 056fe1ba 2003-11-23 devnull static int nchunk;
59 056fe1ba 2003-11-23 devnull int align, pad;
62 056fe1ba 2003-11-23 devnull if(n >= IdealAlignment)
63 056fe1ba 2003-11-23 devnull align = IdealAlignment;
64 056fe1ba 2003-11-23 devnull else if(n > 8)
65 056fe1ba 2003-11-23 devnull align = 8;
67 056fe1ba 2003-11-23 devnull align = 4;
69 056fe1ba 2003-11-23 devnull lock(&lk);
70 056fe1ba 2003-11-23 devnull pad = (align - (ulong)buf) & (align-1);
71 056fe1ba 2003-11-23 devnull if(n + pad > nbuf) {
72 056fe1ba 2003-11-23 devnull buf = vtmallocz(ChunkSize);
73 056fe1ba 2003-11-23 devnull nbuf = ChunkSize;
74 056fe1ba 2003-11-23 devnull pad = (align - (ulong)buf) & (align-1);
75 056fe1ba 2003-11-23 devnull nchunk++;
78 056fe1ba 2003-11-23 devnull assert(n + pad <= nbuf);
80 056fe1ba 2003-11-23 devnull p = buf + pad;
81 056fe1ba 2003-11-23 devnull buf += pad + n;
82 056fe1ba 2003-11-23 devnull nbuf -= pad + n;
83 056fe1ba 2003-11-23 devnull unlock(&lk);
85 056fe1ba 2003-11-23 devnull return p;