1*10b721fbSAndrew Jones /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*10b721fbSAndrew Jones #include <alloc.h> 3*10b721fbSAndrew Jones #include <bitops.h> 4*10b721fbSAndrew Jones #include <asm/page.h> 5*10b721fbSAndrew Jones #include <linux/compiler.h> 611c4715fSPaolo Bonzini malloc(size_t size)711c4715fSPaolo Bonzinivoid *malloc(size_t size) 811c4715fSPaolo Bonzini { 911c4715fSPaolo Bonzini return memalign(sizeof(long), size); 1011c4715fSPaolo Bonzini } 1111c4715fSPaolo Bonzini calloc(size_t nmemb,size_t size)1211c4715fSPaolo Bonzinivoid *calloc(size_t nmemb, size_t size) 1311c4715fSPaolo Bonzini { 14cde8415eSClaudio Imbrenda void *ptr; 15cde8415eSClaudio Imbrenda 16*10b721fbSAndrew Jones assert(!check_mul_overflow(nmemb, size)); 17cde8415eSClaudio Imbrenda ptr = malloc(nmemb * size); 1811c4715fSPaolo Bonzini if (ptr) 1911c4715fSPaolo Bonzini memset(ptr, 0, nmemb * size); 2011c4715fSPaolo Bonzini return ptr; 2111c4715fSPaolo Bonzini } 2211c4715fSPaolo Bonzini free(void * ptr)2311c4715fSPaolo Bonzinivoid free(void *ptr) 2411c4715fSPaolo Bonzini { 25f90ddba3SClaudio Imbrenda if (alloc_ops->free) 26f90ddba3SClaudio Imbrenda alloc_ops->free(ptr); 2711c4715fSPaolo Bonzini } 2811c4715fSPaolo Bonzini memalign(size_t alignment,size_t size)2911c4715fSPaolo Bonzinivoid *memalign(size_t alignment, size_t size) 3011c4715fSPaolo Bonzini { 3111c4715fSPaolo Bonzini void *p; 3211c4715fSPaolo Bonzini 339390b55bSJanosch Frank if (!size) 349390b55bSJanosch Frank return NULL; 3511c4715fSPaolo Bonzini 36f90ddba3SClaudio Imbrenda assert(is_power_of_2(alignment)); 379390b55bSJanosch Frank assert(alloc_ops && alloc_ops->memalign); 389390b55bSJanosch Frank 39f90ddba3SClaudio Imbrenda p = alloc_ops->memalign(alignment, size); 409390b55bSJanosch Frank assert(p); 4111c4715fSPaolo Bonzini 42f90ddba3SClaudio Imbrenda return (void *)p; 4311c4715fSPaolo Bonzini } 44