thread_cpu: make it 64-bit compatible

This stores a combination of a pointer and a CPU number in the low
2 bits. On 64-bit systems, the pointer part won't fit in an int.
Let's use uintptr_t for this purpose.

Signed-off-by: Nicolas Pitre <npitre@baylibre.com>
This commit is contained in:
Nicolas Pitre 2019-05-20 23:41:27 -04:00 committed by Anas Nashif
commit 0b5d9f71f2
2 changed files with 3 additions and 3 deletions

View file

@ -59,7 +59,7 @@ struct k_spinlock {
/* Stores the thread that holds the lock with the locking CPU /* Stores the thread that holds the lock with the locking CPU
* ID in the bottom two bits. * ID in the bottom two bits.
*/ */
size_t thread_cpu; uintptr_t thread_cpu;
#endif #endif
}; };

View file

@ -727,7 +727,7 @@ bool z_spin_lock_valid(struct k_spinlock *l)
bool z_spin_unlock_valid(struct k_spinlock *l) bool z_spin_unlock_valid(struct k_spinlock *l)
{ {
if (l->thread_cpu != (_current_cpu->id | (u32_t)_current)) { if (l->thread_cpu != (_current_cpu->id | (uintptr_t)_current)) {
return false; return false;
} }
l->thread_cpu = 0; l->thread_cpu = 0;
@ -736,7 +736,7 @@ bool z_spin_unlock_valid(struct k_spinlock *l)
void z_spin_lock_set_owner(struct k_spinlock *l) void z_spin_lock_set_owner(struct k_spinlock *l)
{ {
l->thread_cpu = _current_cpu->id | (u32_t)_current; l->thread_cpu = _current_cpu->id | (uintptr_t)_current;
} }
#endif #endif