mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-10-31 14:38:21 +00:00
kernel: finish work of removing interruptible mutexes
This commit is contained in:
+4
-4
@@ -132,7 +132,7 @@ void *pmm_getpageaddress(page_t *page) {
|
||||
void pmm_hold(void *addr) {
|
||||
page_t *page = &pages[((uintptr_t)addr / PAGE_SIZE)];
|
||||
|
||||
MUTEX_ACQUIRE(&freelistmutex, false);
|
||||
MUTEX_ACQUIRE(&freelistmutex);
|
||||
internalhold(page);
|
||||
MUTEX_RELEASE(&freelistmutex);
|
||||
}
|
||||
@@ -144,7 +144,7 @@ void pmm_release(void *addr) {
|
||||
uintmax_t newrefcount = __atomic_sub_fetch(&page->refcount, 1, __ATOMIC_SEQ_CST);
|
||||
if (newrefcount == 0) {
|
||||
__assert((page->flags & PAGE_FLAGS_DIRTY) == 0);
|
||||
MUTEX_ACQUIRE(&freelistmutex, false);
|
||||
MUTEX_ACQUIRE(&freelistmutex);
|
||||
insertinfreelist(page);
|
||||
if (page->backing == NULL)
|
||||
page->flags |= PAGE_FLAGS_FREE;
|
||||
@@ -160,7 +160,7 @@ static void doalloc(page_t *page) {
|
||||
|
||||
void *pmm_allocpage(int section) {
|
||||
retry:
|
||||
MUTEX_ACQUIRE(&freelistmutex, false);
|
||||
MUTEX_ACQUIRE(&freelistmutex);
|
||||
page_t *page = NULL;
|
||||
|
||||
// try to take a free anonymous page
|
||||
@@ -274,7 +274,7 @@ void *pmm_alloc(size_t size, int section) {
|
||||
if (size == 1)
|
||||
return pmm_allocpage(section);
|
||||
|
||||
MUTEX_ACQUIRE(&freelistmutex, false);
|
||||
MUTEX_ACQUIRE(&freelistmutex);
|
||||
|
||||
uintmax_t page = 0;
|
||||
size_t found = 0;
|
||||
|
||||
@@ -143,7 +143,7 @@ static slab_t *returnobject(scache_t *cache, void *obj) {
|
||||
}
|
||||
|
||||
void *slab_allocate(scache_t *cache) {
|
||||
MUTEX_ACQUIRE(&cache->mutex, false);
|
||||
MUTEX_ACQUIRE(&cache->mutex);
|
||||
slab_t *slab = NULL;
|
||||
if (cache->partial != NULL)
|
||||
slab = cache->partial;
|
||||
@@ -192,7 +192,7 @@ void *slab_allocate(scache_t *cache) {
|
||||
}
|
||||
|
||||
void slab_free(scache_t *cache, void *addr) {
|
||||
MUTEX_ACQUIRE(&cache->mutex, false);
|
||||
MUTEX_ACQUIRE(&cache->mutex);
|
||||
|
||||
slab_t *slab = returnobject(cache, addr);
|
||||
__assert(slab);
|
||||
@@ -284,7 +284,7 @@ static size_t purge(scache_t *cache, size_t maxcount){
|
||||
}
|
||||
|
||||
void slab_freecache(scache_t *cache) {
|
||||
MUTEX_ACQUIRE(&cache->mutex, false);
|
||||
MUTEX_ACQUIRE(&cache->mutex);
|
||||
__assert(cache->partial == NULL);
|
||||
__assert(cache->full == NULL);
|
||||
|
||||
|
||||
+8
-8
@@ -44,7 +44,7 @@ static vmmrange_t *allocrange() {
|
||||
vmmcache_t *cache = cachelist;
|
||||
vmmrange_t *range = NULL;
|
||||
while (cache) {
|
||||
MUTEX_ACQUIRE(&cache->header.lock, false);
|
||||
MUTEX_ACQUIRE(&cache->header.lock);
|
||||
if (cache->header.freecount > 0) {
|
||||
--cache->header.freecount;
|
||||
uintmax_t r = getentrynumber(cache);
|
||||
@@ -66,7 +66,7 @@ static vmmrange_t *allocrange() {
|
||||
|
||||
static void freerange(vmmrange_t *range) {
|
||||
vmmcache_t *cache = (vmmcache_t *)ROUND_DOWN((uintptr_t)range, PAGE_SIZE);
|
||||
MUTEX_ACQUIRE(&cache->header.lock, false);
|
||||
MUTEX_ACQUIRE(&cache->header.lock);
|
||||
|
||||
int rangeoffset = ((uintptr_t)range - (uintptr_t)cache->ranges) / sizeof(vmmrange_t);
|
||||
range->size = 0;
|
||||
@@ -501,7 +501,7 @@ int vmm_changemmuflags(void *base, size_t size, mmuflags_t mmuflags, int flags)
|
||||
if (space == NULL)
|
||||
return ENOMEM;
|
||||
|
||||
MUTEX_ACQUIRE(&space->lock, false);
|
||||
MUTEX_ACQUIRE(&space->lock);
|
||||
|
||||
int error = changemap(space, base, size, false, flags, mmuflags);
|
||||
arch_mmu_invalidate_range(base, size);
|
||||
@@ -536,7 +536,7 @@ bool vmm_pagefault(void *addr, bool user, int actions) {
|
||||
return false;
|
||||
}
|
||||
|
||||
MUTEX_ACQUIRE(&space->lock, false);
|
||||
MUTEX_ACQUIRE(&space->lock);
|
||||
vmmrange_t *range = getrange(space, addr);
|
||||
|
||||
bool status = false;
|
||||
@@ -665,7 +665,7 @@ void *vmm_getphysical(void *addr, bool hold) {
|
||||
if (space == NULL)
|
||||
return NULL;
|
||||
|
||||
MUTEX_ACQUIRE(&space->lock, false);
|
||||
MUTEX_ACQUIRE(&space->lock);
|
||||
|
||||
void *physical = arch_mmu_getphysical(current_vmm_context()->pagetable, addr);
|
||||
|
||||
@@ -695,7 +695,7 @@ void *vmm_map(void *addr, volatile size_t size, int flags, mmuflags_t mmuflags,
|
||||
if (space == NULL)
|
||||
return NULL;
|
||||
|
||||
MUTEX_ACQUIRE(&space->lock, false);
|
||||
MUTEX_ACQUIRE(&space->lock);
|
||||
vmmrange_t *range = NULL;
|
||||
|
||||
void *start = getfreerange(space, addr, size);
|
||||
@@ -803,7 +803,7 @@ void vmm_unmap(void *addr, size_t size, int flags) {
|
||||
if (space == NULL)
|
||||
return;
|
||||
|
||||
MUTEX_ACQUIRE(&space->lock, false);
|
||||
MUTEX_ACQUIRE(&space->lock);
|
||||
|
||||
// make memory inacessible
|
||||
changemap(space, addr, size, false, flags, 0);
|
||||
@@ -858,7 +858,7 @@ vmmcontext_t *vmm_fork(vmmcontext_t *oldcontext) {
|
||||
if (newcontext == NULL)
|
||||
return NULL;
|
||||
|
||||
MUTEX_ACQUIRE(&oldcontext->space.lock, false);
|
||||
MUTEX_ACQUIRE(&oldcontext->space.lock);
|
||||
|
||||
vmmrange_t *range = oldcontext->space.ranges;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ static eventheader_t pagereadyevent;
|
||||
size_t vmmcache_cachedpages;
|
||||
|
||||
#define HOLD_LOCK() \
|
||||
MUTEX_ACQUIRE(&mutex, false);
|
||||
MUTEX_ACQUIRE(&mutex);
|
||||
|
||||
#define RELEASE_LOCK() \
|
||||
MUTEX_RELEASE(&mutex);
|
||||
|
||||
Reference in New Issue
Block a user