On Sat, Jan 04, 2020 at 08:12:15PM +0530, madhuparnabhowmik04@xxxxxxxxx wrote: > From: Madhuparna Bhowmik <madhuparnabhowmik04@xxxxxxxxx> > > 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@xxxxxxxxx> Reviewed-by: Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx> thanks, - Joel > --- > 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 >