X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_task.c;h=b50454167b67d70fdcea806f75ac3a21afb74b9d;hb=8c0a7dfa4ba4b46dabce0ac7daecf0edd5fb6b62;hp=dd278bde064740f3ed0ac1a6ef11d90ccb85ab7c;hpb=7b1f4177d42e5e951a7db4289c847d355a785c2a;p=fw%2Faltos diff --git a/src/kernel/ao_task.c b/src/kernel/ao_task.c index dd278bde..b5045416 100644 --- a/src/kernel/ao_task.c +++ b/src/kernel/ao_task.c @@ -57,7 +57,17 @@ static inline void ao_check_stack(void) { #endif #ifndef SLEEP_HASH_SIZE +#ifdef __ARM_FEATURE_IDIV__ #define SLEEP_HASH_SIZE 17 +#else +#define SLEEP_HASH_SIZE 16 +#endif +#endif + +#if SLEEP_HASH_SIZE & (SLEEP_HASH_SIZE - 1) +#define SLEEP_HASH_SHIFT 0 +#else +#define SLEEP_HASH_SHIFT 2 #endif static struct ao_list run_queue; @@ -75,7 +85,7 @@ _ao_task_to_run_queue(struct ao_task *task) static struct ao_list * ao_task_sleep_queue(void *wchan) { - return &ao_sleep_queue[(uintptr_t) wchan % SLEEP_HASH_SIZE]; + return &ao_sleep_queue[(((uintptr_t) wchan) >> SLEEP_HASH_SHIFT) % SLEEP_HASH_SIZE]; } static void