X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_task.c;fp=src%2Fkernel%2Fao_task.c;h=b50454167b67d70fdcea806f75ac3a21afb74b9d;hb=c1708f3fa4ff412da8817ba0fa58d05fe7ef44f5;hp=dd278bde064740f3ed0ac1a6ef11d90ccb85ab7c;hpb=414ad2696bbe2a2f245ae7bb2ec8f57bc8cc0097;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