Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b581401e authored by Roland Dreier's avatar Roland Dreier
Browse files

mlx4_core: Initialize ctx_list and ctx_lock earlier



We may call mlx4_dispatch_event() before mlx4_register_device() is
called for a device, because for example a catastrophic error happens
immediately after we enable interrupts.  Therefore priv->ctx_list and
priv->ctx_lock need to be initialized earlier.

This bug was actually exposed by the MSI-X bug that returned IRQ numbers 
to drivers in reverse order, so that the first FW command 
interrupt looked to mlx4 like a catastrophic error.

Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent 09360d54
Loading
Loading
Loading
Loading
+0 −3
Original line number Diff line number Diff line
@@ -135,9 +135,6 @@ int mlx4_register_device(struct mlx4_dev *dev)
	struct mlx4_priv *priv = mlx4_priv(dev);
	struct mlx4_interface *intf;

	INIT_LIST_HEAD(&priv->ctx_list);
	spin_lock_init(&priv->ctx_lock);

	mutex_lock(&intf_mutex);

	list_add_tail(&priv->dev_list, &dev_list);
+2 −0
Original line number Diff line number Diff line
@@ -787,6 +787,8 @@ static int __devinit mlx4_init_one(struct pci_dev *pdev,

	dev       = &priv->dev;
	dev->pdev = pdev;
	INIT_LIST_HEAD(&priv->ctx_list);
	spin_lock_init(&priv->ctx_lock);

	/*
	 * Now reset the HCA before we touch the PCI capabilities or