#include <lib/kmalloc.h>
#include <lib/kprintf.h>
#include <ubixos/kpanic.h>
#include <ubixos/sched.h>
#include <ubixos/spinlock.h>
#include <vmm/vmm.h>
#include <string.h>
#include <assert.h>
Include dependency graph for kmalloc.c:
Go to the source code of this file.
Functions | |
static void * | getEmptyDesc () |
static int | insertFreeDesc (struct memDescriptor *freeDesc) |
void | kfree (void *baseAddr) |
void * | kmalloc (uInt32 len) |
static void | mergeMemBlocks () |
Variables | |
static spinLock_t | emptyDescSpinLock = SPIN_LOCK_INITIALIZER |
static struct memDescriptor * | emptyKernDesc = 0x0 |
static struct memDescriptor * | freeKernDesc = 0x0 |
static spinLock_t | mallocSpinLock = SPIN_LOCK_INITIALIZER |
static struct memDescriptor * | usedKernDesc = 0x0 |
static void* getEmptyDesc | ( | ) | [static] |
Definition at line 67 of file kmalloc.c.
References emptyDescSpinLock, emptyKernDesc, kpanic(), memset(), memDescriptor::next, memDescriptor::prev, spinLock(), spinUnlock(), vmm_getFreeMallocPage(), and x1.
Referenced by kmalloc().
Here is the call graph for this function:
static int insertFreeDesc | ( | struct memDescriptor * | freeDesc | ) | [static] |
Definition at line 124 of file kmalloc.c.
References assert, freeKernDesc, kpanic(), memDescriptor::limit, memDescriptor::next, and memDescriptor::prev.
Referenced by kfree(), and kmalloc().
Here is the call graph for this function:
void kfree | ( | void * | baseAddr | ) |
Definition at line 351 of file kmalloc.c.
References assert, memDescriptor::baseAddr, insertFreeDesc(), kprintf(), memDescriptor::limit, mallocSpinLock, memset(), memDescriptor::next, memDescriptor::prev, spinLock(), spinUnlock(), and usedKernDesc.
Referenced by close(), device_remove(), elf_loadfile(), execFile(), fclose(), fopen(), kmod_load(), ldEnable(), mpi_destroyMbox(), mpi_fetchMessage(), ne2kFreeBuffer(), operator delete(), operator delete[](), sys_exec(), sys_write(), sysExec(), systemTask(), ubixfs_cacheDelete(), ubixFSmkDir(), ubthread_cond_destroy(), ubthread_mutex_destroy(), vfs_mount(), and writeUbixFS().
Here is the call graph for this function:
void* kmalloc | ( | uInt32 | len | ) |
Definition at line 247 of file kmalloc.c.
References assert, memDescriptor::baseAddr, freeKernDesc, getEmptyDesc(), insertFreeDesc(), kprintf(), memDescriptor::limit, MALLOC_ALIGN, mallocSpinLock, memDescriptor::next, memDescriptor::prev, spinLock(), spinUnlock(), and usedKernDesc.
Referenced by addDirEntry(), biosCall(), devfs_initialize(), devfs_makeNode(), device_add(), elf_loadfile(), execFile(), falloc(), fdc_init(), fopen(), initHardDisk(), initLNC(), kmain(), kmod_add(), kmod_load(), ldEnable(), lncAttach(), mpi_createMbox(), mpi_postMessage(), mpi_spam(), ne2k_init(), ne2kAllocBuffer(), openFileUbixFS(), operator new(), operator new[](), sched_init(), schedNewTask(), sys_exec(), sys_write(), sysctl_add(), sysctl_init(), sysExec(), tty_init(), ubixfs_cacheNew(), ubixfs_initialize(), ubixFSLoadDir(), ubixFSmkDir(), ubixFSUnlink(), ubthread_cond_init(), ubthread_create(), ubthread_mutex_init(), ufs_openFile(), vfs_mount(), vfsRegisterFS(), vitals_init(), and writeUbixFS().
Here is the call graph for this function:
static void mergeMemBlocks | ( | ) | [static] |
Definition at line 185 of file kmalloc.c.
References memDescriptor::baseAddr, emptyKernDesc, freeKernDesc, memDescriptor::limit, memDescriptor::next, and memDescriptor::prev.
spinLock_t emptyDescSpinLock = SPIN_LOCK_INITIALIZER [static] |
struct memDescriptor* emptyKernDesc = 0x0 [static] |
struct memDescriptor* freeKernDesc = 0x0 [static] |
Definition at line 48 of file kmalloc.c.
Referenced by insertFreeDesc(), kmalloc(), and mergeMemBlocks().
spinLock_t mallocSpinLock = SPIN_LOCK_INITIALIZER [static] |
struct memDescriptor* usedKernDesc = 0x0 [static] |