kernel/user_mutex: Use phys_addr_t for hash keys.

This could fix address collisions on 32-bit systems with PAE.

Fixes #18435.
This commit is contained in:
Augustin Cavalier
2023-06-05 20:56:15 -04:00
parent cf1b26a933
commit 402b41562c
+8 -8
View File
@@ -24,7 +24,7 @@ struct UserMutexEntry;
typedef DoublyLinkedList<UserMutexEntry> UserMutexEntryList;
struct UserMutexEntry : public DoublyLinkedListLinkImpl<UserMutexEntry> {
addr_t address;
phys_addr_t address;
ConditionVariable condition;
bool locked;
UserMutexEntryList otherEntries;
@@ -32,7 +32,7 @@ struct UserMutexEntry : public DoublyLinkedListLinkImpl<UserMutexEntry> {
};
struct UserMutexHashDefinition {
typedef addr_t KeyType;
typedef phys_addr_t KeyType;
typedef UserMutexEntry ValueType;
size_t HashKey(addr_t key) const
@@ -45,7 +45,7 @@ struct UserMutexHashDefinition {
return HashKey(value->address);
}
bool Compare(addr_t key, const UserMutexEntry* value) const
bool Compare(phys_addr_t key, const UserMutexEntry* value) const
{
return value->address == key;
}
@@ -147,7 +147,7 @@ remove_user_mutex_entry(UserMutexEntry* entry)
static status_t
user_mutex_wait_locked(int32* mutex, addr_t physicalAddress, const char* name,
user_mutex_wait_locked(int32* mutex, phys_addr_t physicalAddress, const char* name,
uint32 flags, bigtime_t timeout, MutexLocker& locker, bool& lastWaiter)
{
// add the entry to the table
@@ -177,7 +177,7 @@ user_mutex_wait_locked(int32* mutex, addr_t physicalAddress, const char* name,
static status_t
user_mutex_lock_locked(int32* mutex, addr_t physicalAddress,
user_mutex_lock_locked(int32* mutex, phys_addr_t physicalAddress,
const char* name, uint32 flags, bigtime_t timeout, MutexLocker& locker)
{
// mark the mutex locked + waiting
@@ -204,7 +204,7 @@ user_mutex_lock_locked(int32* mutex, addr_t physicalAddress,
static void
user_mutex_unlock_locked(int32* mutex, addr_t physicalAddress, uint32 flags)
user_mutex_unlock_locked(int32* mutex, phys_addr_t physicalAddress, uint32 flags)
{
UserMutexEntry* entry = sUserMutexTable.Lookup(physicalAddress);
if (entry == NULL) {
@@ -243,7 +243,7 @@ user_mutex_unlock_locked(int32* mutex, addr_t physicalAddress, uint32 flags)
static status_t
user_mutex_sem_acquire_locked(int32* sem, addr_t physicalAddress,
user_mutex_sem_acquire_locked(int32* sem, phys_addr_t physicalAddress,
const char* name, uint32 flags, bigtime_t timeout, MutexLocker& locker)
{
// The semaphore may have been released in the meantime, and we also
@@ -268,7 +268,7 @@ user_mutex_sem_acquire_locked(int32* sem, addr_t physicalAddress,
static void
user_mutex_sem_release_locked(int32* sem, addr_t physicalAddress)
user_mutex_sem_release_locked(int32* sem, phys_addr_t physicalAddress)
{
UserMutexEntry* entry = sUserMutexTable.Lookup(physicalAddress);
if (!entry) {