xref: /kvm-unit-tests/lib/alloc.c (revision 882825e6b9c4af7961ee48b293beb75111e86d54)
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 Bonzini void *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 Bonzini void *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 Bonzini void 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 Bonzini void *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