Use assets in PFA

This commit is contained in:
Alex Kotov 2021-12-15 02:01:27 +05:00
parent c397165dd4
commit 99b90a6ce7
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
2 changed files with 21 additions and 3 deletions

10
src/assert.h Normal file
View File

@ -0,0 +1,10 @@
#include <kernaux/assert.h>
#ifdef ENABLE_ASSERT
#define assert(cond) kernaux_assert((cond))
#else
#define assert(cond) ((void)sizeof((cond)))
#endif
#define assert_return(cond) { assert((cond)); if (!(cond)) return; }
#define assert_retval(cond, val) { assert((cond)); if (!(cond)) return (val); }

View File

@ -5,6 +5,8 @@
#include <kernaux/pfa.h>
#include <kernaux/stdlib.h>
#include "assert.h"
#define PAGE_INDEX(page_addr) ((page_addr) / KERNAUX_PFA_PAGE_SIZE)
#define FLAG_INDEX_FROM_INDEX(page_index) ((page_index) / 8)
@ -39,12 +41,14 @@ __attribute__((nonnull));
void KernAux_PFA_initialize(const KernAux_PFA pfa)
{
assert(pfa);
kernaux_memset(pfa->flags, 0, sizeof(pfa->flags));
}
bool KernAux_PFA_is_available(const KernAux_PFA pfa, const size_t page_addr)
{
if (page_addr % KERNAUX_PFA_PAGE_SIZE != 0) return false;
assert(pfa);
assert_retval(page_addr % KERNAUX_PFA_PAGE_SIZE == 0, false);
return GET_FLAG_FROM_ADDR(pfa, page_addr);
}
@ -71,7 +75,8 @@ void KernAux_PFA_mark(
size_t start,
size_t end
) {
if (start >= end) return;
assert(pfa);
assert_return(start < end);
const size_t start_rem = start % KERNAUX_PFA_PAGE_SIZE;
const size_t end_rem = (end + 1) % KERNAUX_PFA_PAGE_SIZE;
@ -98,6 +103,8 @@ void KernAux_PFA_mark(
size_t KernAux_PFA_alloc_pages(const KernAux_PFA pfa, size_t mem_size)
{
assert(pfa);
const size_t mem_rem = mem_size % KERNAUX_PFA_PAGE_SIZE;
if (mem_rem != 0) {
@ -135,7 +142,8 @@ void KernAux_PFA_free_pages(
const size_t page_addr,
size_t mem_size
) {
if (page_addr % KERNAUX_PFA_PAGE_SIZE != 0) return;
assert(pfa);
assert_return(page_addr % KERNAUX_PFA_PAGE_SIZE == 0);
const size_t mem_rem = mem_size % KERNAUX_PFA_PAGE_SIZE;