commit
3b133b4fe7
|
@ -0,0 +1 @@
|
|||
build
|
|
@ -140,3 +140,12 @@ distclean:
|
|||
@rm -f .config*
|
||||
@rm -f $(KERNEL_ROOT)/lib/musllib/libmusl.a
|
||||
@rm -f $(KERNEL_ROOT)/board/*/.config
|
||||
|
||||
|
||||
# Run qemu with config discribed in README.md.
|
||||
.PHONY: qemu-default
|
||||
qemu-default:
|
||||
qemu-system-arm -M sabrelite -m 1G -smp 4 -cpu cortex-a9 \
|
||||
-display none -serial null -serial stdio \
|
||||
-kernel ./build/XiZi-imx6q-sabrelite.elf
|
||||
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
bin
|
||||
fs.img
|
||||
user.map
|
|
@ -41,15 +41,28 @@ int IPC_DO_SERVE_FUNC(Ipc_sem_create)(sem_t* sem, int* count)
|
|||
return SEMAPHORE_SUC;
|
||||
}
|
||||
|
||||
|
||||
#define CHECK_SEM_RANGE(sem) \
|
||||
do { \
|
||||
if (*sem < 0 || *sem >= MAX_SUPPORT_SEMAPHORES) { \
|
||||
return SEMAPHORE_ERR; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
#define CHECK_SEM_RANGE_AND_VALID(sem) \
|
||||
do { \
|
||||
CHECK_SEM_RANGE(sem); \
|
||||
\
|
||||
if (!sem_pool[*sem].valid) { \
|
||||
return SEMAPHORE_ERR; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
int IPC_DO_SERVE_FUNC(Ipc_sem_delete)(sem_t* sem)
|
||||
{
|
||||
if (*sem < 0 || *sem > MAX_SUPPORT_SEMAPHORES) {
|
||||
return SEMAPHORE_ERR;
|
||||
}
|
||||
|
||||
if (!sem_pool[*sem].valid) {
|
||||
return SEMAPHORE_ERR;
|
||||
}
|
||||
CHECK_SEM_RANGE_AND_VALID(sem);
|
||||
|
||||
sem_pool[*sem].valid = false;
|
||||
return SEMAPHORE_SUC;
|
||||
|
@ -57,9 +70,7 @@ int IPC_DO_SERVE_FUNC(Ipc_sem_delete)(sem_t* sem)
|
|||
|
||||
int IPC_DO_SERVE_FUNC(Ipc_sem_wait)(sem_t* sem, int* timeout)
|
||||
{
|
||||
if (*sem < 0 || *sem > MAX_SUPPORT_SEMAPHORES) {
|
||||
return SEMAPHORE_ERR;
|
||||
}
|
||||
CHECK_SEM_RANGE(sem);
|
||||
|
||||
/// @todo support timeout
|
||||
// return if sem is freed(no valid) or sem count is sufficient
|
||||
|
@ -72,13 +83,7 @@ int IPC_DO_SERVE_FUNC(Ipc_sem_wait)(sem_t* sem, int* timeout)
|
|||
|
||||
int IPC_DO_SERVE_FUNC(Ipc_sem_signal)(sem_t* sem)
|
||||
{
|
||||
if (*sem < 0 || *sem >= MAX_SUPPORT_SEMAPHORES) {
|
||||
return SEMAPHORE_ERR;
|
||||
}
|
||||
|
||||
if (!sem_pool[*sem].valid) {
|
||||
return SEMAPHORE_ERR;
|
||||
}
|
||||
CHECK_SEM_RANGE_AND_VALID(sem);
|
||||
|
||||
sem_pool[*sem].count++;
|
||||
return SEMAPHORE_SUC;
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
mkfs
|
|
@ -77,8 +77,13 @@ static struct KPage* KBuddyPagesAlloc(struct KBuddy* pbuddy, int nPages)
|
|||
int i = 0, order = 0;
|
||||
|
||||
// find order
|
||||
#if defined(__GNUC__)
|
||||
// see: https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
|
||||
order = nPages ? (sizeof(int) * 8 - __builtin_clz(nPages) - 1) + !!(__builtin_popcount(nPages) != 1) : 0;
|
||||
#else
|
||||
for (order = 0; (FREE_LIST_INDEX(order)) < nPages; order++)
|
||||
;
|
||||
#endif
|
||||
|
||||
// find the free page list
|
||||
for (i = order; i < MAX_BUDDY_ORDER; i++) {
|
||||
|
|
Loading…
Reference in New Issue