When the mlx4_core driver calls request_irq() to allocate interrupt
resources, it uses the fixed device name string "mlx4_core".
When multiple IB cards are present in the system, every instance of
the resource is named "mlx4_core" in /proc/interrupts.
This can make it very confusing trying to work out exactly where IB
interrupts are going and why.

The mlx4_core driver has been modified to use the PCI name of the IB
card for the purpose of allocating interrupt resources.

Signed-off-by: Arputham Benjamin <[email protected]>
---
diff -rup a/drivers/net/mlx4/eq.c b/drivers/net/mlx4/eq.c
--- a/drivers/net/mlx4/eq.c     2009-08-03 19:42:18.737707766 -0700
+++ b/drivers/net/mlx4/eq.c     2009-08-03 19:42:48.175515414 -0700
@@ -615,7 +615,8 @@ int mlx4_init_eq_table(struct mlx4_dev *
        priv->eq_table.clr_int  = priv->clr_base +
                (priv->eq_table.inta_pin < 32 ? 4 : 0);
 
-       priv->eq_table.irq_names = kmalloc(16 * dev->caps.num_comp_vectors, 
GFP_KERNEL);
+       priv->eq_table.irq_names = kmalloc(DEVICE_NAME_MAX *
+                                          (dev->caps.num_comp_vectors + 1), 
GFP_KERNEL);
        if (!priv->eq_table.irq_names) {
                err = -ENOMEM;
                goto err_out_bitmap;
@@ -638,17 +639,25 @@ int mlx4_init_eq_table(struct mlx4_dev *
                goto err_out_comp;
 
        if (dev->flags & MLX4_FLAG_MSI_X) {
-               static const char async_eq_name[] = "mlx4-async";
                const char *eq_name;
 
                for (i = 0; i < dev->caps.num_comp_vectors + 1; ++i) {
                        if (i < dev->caps.num_comp_vectors) {
-                               snprintf(priv->eq_table.irq_names + i * 16, 16,
-                                        "mlx4-comp-%d", i);
-                               eq_name = priv->eq_table.irq_names + i * 16;
-                       } else
-                               eq_name = async_eq_name;
+                               snprintf(priv->eq_table.irq_names +
+                                        i * DEVICE_NAME_MAX,
+                                        DEVICE_NAME_MAX,
+                                        "mlx4-comp...@pci:%s", i,
+                                        pci_name(dev->pdev));
+                       } else {
+                               snprintf(priv->eq_table.irq_names +
+                                        i * DEVICE_NAME_MAX,
+                                        DEVICE_NAME_MAX,
+                                        "mlx4-as...@pci:%s",
+                                        pci_name(dev->pdev));
+                       }
 
+                       eq_name = priv->eq_table.irq_names +
+                                 i * DEVICE_NAME_MAX;
                        err = request_irq(priv->eq_table.eq[i].irq,
                                          mlx4_msi_x_interrupt, 0, eq_name,
                                          priv->eq_table.eq + i);
@@ -658,8 +667,12 @@ int mlx4_init_eq_table(struct mlx4_dev *
                        priv->eq_table.eq[i].have_irq = 1;
                }
        } else {
+               snprintf(priv->eq_table.irq_names,
+                        DEVICE_NAME_MAX,
+                        DRV_NAME "@pci:%s",
+                        pci_name(dev->pdev));
                err = request_irq(dev->pdev->irq, mlx4_interrupt,
-                                 IRQF_SHARED, DRV_NAME, dev);
+                                 IRQF_SHARED, priv->eq_table.irq_names, dev);
                if (err)
                        goto err_out_async;
 
diff -rup a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
--- a/drivers/net/mlx4/mlx4.h   2009-08-03 19:42:18.737707766 -0700
+++ b/drivers/net/mlx4/mlx4.h   2009-08-03 19:43:01.532335625 -0700
@@ -198,6 +198,8 @@ struct mlx4_cq_table {
        struct mlx4_icm_table   cmpt_table;
 };
 
+#define DEVICE_NAME_MAX 64
+
 struct mlx4_eq_table {
        struct mlx4_bitmap      bitmap;
        char                   *irq_names;
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to