Messages in this thread Patch in this message | | | From | madhuparnabhowmik04@gmail ... | Subject | [PATCH] drivers: firewire: core-transaction: Pass lockdep condition to address_handler_list iterator | Date | Sat, 4 Jan 2020 20:12:15 +0530 |
| |
From: Madhuparna Bhowmik <madhuparnabhowmik04@gmail.com>
The address_handler_list is traversed with list_for_each_entry_rcu with address_handler_list_lock held. list_for_each_entry_rcu has built-in RCU and lock checking. Use it for address_handler_list traversal.
Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik04@gmail.com> --- drivers/firewire/core-transaction.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c index 404a035f104d..a15e70027932 100644 --- a/drivers/firewire/core-transaction.c +++ b/drivers/firewire/core-transaction.c @@ -61,6 +61,11 @@ #define PHY_CONFIG_ROOT_ID(node_id) ((((node_id) & 0x3f) << 24) | (1 << 23)) #define PHY_IDENTIFIER(id) ((id) << 30) +static DEFINE_SPINLOCK(address_handler_list_lock); +static LIST_HEAD(address_handler_list); + +#define address_handler_list_lock_held() lock_is_held(&(address_handler_list_lock).dep_map) + /* returns 0 if the split timeout handler is already running */ static int try_cancel_split_timeout(struct fw_transaction *t) { @@ -485,7 +490,7 @@ static struct fw_address_handler *lookup_overlapping_address_handler( { struct fw_address_handler *handler; - list_for_each_entry_rcu(handler, list, link) { + list_for_each_entry_rcu(handler, list, link, address_handler_list_lock_held()) { if (handler->offset < offset + length && offset < handler->offset + handler->length) return handler; @@ -514,8 +519,6 @@ static struct fw_address_handler *lookup_enclosing_address_handler( return NULL; } -static DEFINE_SPINLOCK(address_handler_list_lock); -static LIST_HEAD(address_handler_list); const struct fw_address_region fw_high_memory_region = { .start = FW_MAX_PHYSICAL_RANGE, .end = 0xffffe0000000ULL, }; -- 2.17.1
| |