From f2dd9acf7202412744180600ced685b5e36efbfd Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Tue, 29 Nov 2022 17:51:31 -0500 Subject: [PATCH] nvme_disk: Use a recursive lock instead of a mutex. It appears on some controllers we can wind up in cases that are a double-lock, otherwise. Should fix #18093. --- .../drivers/disk/nvme/compat/nvme_platform.h | 16 ++++++++-------- .../kernel/drivers/disk/nvme/libnvme/nvme.c | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/add-ons/kernel/drivers/disk/nvme/compat/nvme_platform.h b/src/add-ons/kernel/drivers/disk/nvme/compat/nvme_platform.h index 81ad1da0e3..dfae11b9cd 100644 --- a/src/add-ons/kernel/drivers/disk/nvme/compat/nvme_platform.h +++ b/src/add-ons/kernel/drivers/disk/nvme/compat/nvme_platform.h @@ -1,5 +1,5 @@ /* - * Copyright 2019, Haiku, Inc. All rights reserved. + * Copyright 2019-2022, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -11,13 +11,13 @@ #include -#define pthread_mutex_t mutex -#undef PTHREAD_MUTEX_INITIALIZER -#define PTHREAD_MUTEX_INITIALIZER MUTEX_INITIALIZER(__FUNCTION__) -#define pthread_mutex_init(mtx, attr) mutex_init(mtx, __FUNCTION__) -#define pthread_mutex_destroy mutex_destroy -#define pthread_mutex_lock mutex_lock -#define pthread_mutex_unlock mutex_unlock +#define pthread_mutex_t recursive_lock +#undef PTHREAD_RECURSIVE_MUTEX_INITIALIZER +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER RECURSIVE_LOCK_INITIALIZER(__FUNCTION__) +#define pthread_mutex_init(mtx, attr) recursive_lock_init(mtx, __FUNCTION__) +#define pthread_mutex_destroy recursive_lock_destroy +#define pthread_mutex_lock recursive_lock_lock +#define pthread_mutex_unlock recursive_lock_unlock #endif /* __NVME_PLATFORM_H__ */ diff --git a/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c b/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c index 21798891c6..2b0fc565a3 100644 --- a/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c +++ b/src/add-ons/kernel/drivers/disk/nvme/libnvme/nvme.c @@ -37,7 +37,7 @@ * List of open controllers and its lock. */ LIST_HEAD(, nvme_ctrlr) ctrlr_head = LIST_HEAD_INITIALIZER(ctrlr_head); -static pthread_mutex_t ctrlr_lock = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t ctrlr_lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER; /* * Search for an open controller.