net/mlx4_en: initialize cmd.context_lock spinlock earlier
Maciej Żenczykowski reported lockdep warning a spinlock was not registered before being held in mlx4_cmd_wake_completions() cmd.context_lock initialization is not at the right place. 1) mlx4_cmd_use_events() can be called multiple times. Calling spin_lock_init() on a live spinlock can lead to hangs. 2) mlx4_cmd_wake_completions() can be called while lock has not been initialized. Lockdep complains, and current logic is not race prone. It seems better to move the initialization earlier in mlx4_load_one() Signed-off-by: Eric Dumazet <edumazet@google.com> Reported-by: Maciej Żenczykowski <maze@google.com> Cc: Eugenia Emantayev <eugenia@mellanox.com> Cc: Tariq Toukan <tariqt@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
61e0979a49
commit
0c5ddb51e8
|
@ -2597,7 +2597,6 @@ int mlx4_cmd_use_events(struct mlx4_dev *dev)
|
|||
priv->cmd.free_head = 0;
|
||||
|
||||
sema_init(&priv->cmd.event_sem, priv->cmd.max_cmds);
|
||||
spin_lock_init(&priv->cmd.context_lock);
|
||||
|
||||
for (priv->cmd.token_mask = 1;
|
||||
priv->cmd.token_mask < priv->cmd.max_cmds;
|
||||
|
|
|
@ -3222,6 +3222,7 @@ static int mlx4_load_one(struct pci_dev *pdev, int pci_dev_data,
|
|||
|
||||
INIT_LIST_HEAD(&priv->pgdir_list);
|
||||
mutex_init(&priv->pgdir_mutex);
|
||||
spin_lock_init(&priv->cmd.context_lock);
|
||||
|
||||
INIT_LIST_HEAD(&priv->bf_list);
|
||||
mutex_init(&priv->bf_mutex);
|
||||
|
|
Loading…
Reference in New Issue