X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/eb037efe9f30ae166684e99146024abf8740984d..191737e1350a125739697af304730a0028ca01d5:/lunaix-os/kernel/mm/valloc.c diff --git a/lunaix-os/kernel/mm/valloc.c b/lunaix-os/kernel/mm/valloc.c index 4ff4794..02384ef 100644 --- a/lunaix-os/kernel/mm/valloc.c +++ b/lunaix-os/kernel/mm/valloc.c @@ -10,7 +10,7 @@ static char piles_names[MAX_CLASS][PILE_NAME_MAXLEN] = { }; static char piles_names_dma[MAX_CLASS][PILE_NAME_MAXLEN] = { - "valloc_dma_128", "valloc_dma_512", "valloc_dma_512", + "valloc_dma_128", "valloc_dma_256", "valloc_dma_512", "valloc_dma_1k", "valloc_dma_2k", "valloc_dma_4k" }; @@ -67,13 +67,26 @@ valloc(unsigned int size) } void* -vcalloc(unsigned int size) +vzalloc(unsigned int size) { void* ptr = __valloc(size, &piles); memset(ptr, 0, size); return ptr; } +void* +vcalloc(unsigned int size, unsigned int count) +{ + unsigned int alloc_size; + if (__builtin_umul_overflow(size, count, &alloc_size)) { + return 0; + } + + void* ptr = __valloc(alloc_size, &piles); + memset(ptr, 0, alloc_size); + return ptr; +} + void vfree(void* ptr) { @@ -87,7 +100,7 @@ valloc_dma(unsigned int size) } void* -vcalloc_dma(unsigned int size) +vzalloc_dma(unsigned int size) { void* ptr = __valloc(size, &piles_dma); memset(ptr, 0, size);