summaryrefslogtreecommitdiffstats
path: root/sys/ofed/drivers/net/mlx4/main.c
diff options
context:
space:
mode:
authorhselasky <hselasky@FreeBSD.org>2015-03-07 18:33:28 +0000
committerhselasky <hselasky@FreeBSD.org>2015-03-07 18:33:28 +0000
commitbbbee95dbac1a58d8ed9bcd9a13e3b62589bbe0e (patch)
treecfd36f18f5138f429fc932e1bd7d66da6b53d2c6 /sys/ofed/drivers/net/mlx4/main.c
parent88fa6bbce5dc15cc47f7a7500c86953b559e66f2 (diff)
downloadFreeBSD-src-bbbee95dbac1a58d8ed9bcd9a13e3b62589bbe0e.zip
FreeBSD-src-bbbee95dbac1a58d8ed9bcd9a13e3b62589bbe0e.tar.gz
MFC r279584:
Updates for the Mellanox ethernet driver > List of fixes: * use correct format for GID printouts * double array indexing * spelling in printouts * void pointer arithmetic * allow more receive rings * correct maximum number of transmit rings * use "const" instead of "static" for constants * check for invalid VLAN tags * check for lack of IRQ resources > Added more hardware specific defines > Added more verbose printouts of firmware status codes Sponsored by: Mellanox Technologies
Diffstat (limited to 'sys/ofed/drivers/net/mlx4/main.c')
-rw-r--r--sys/ofed/drivers/net/mlx4/main.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/sys/ofed/drivers/net/mlx4/main.c b/sys/ofed/drivers/net/mlx4/main.c
index b92626d..ddcd7d1 100644
--- a/sys/ofed/drivers/net/mlx4/main.c
+++ b/sys/ofed/drivers/net/mlx4/main.c
@@ -1307,8 +1307,9 @@ static ssize_t show_port_ib_mtu(struct device *dev,
port_mtu_attr);
struct mlx4_dev *mdev = info->dev;
+ /* When port type is eth, port mtu value isn't used. */
if (mdev->caps.port_type[info->port] == MLX4_PORT_TYPE_ETH)
- mlx4_warn(mdev, "port level mtu is only used for IB ports\n");
+ return -EINVAL;
sprintf(buf, "%d\n",
ibta_mtu_to_int(mdev->caps.port_ib_mtu[info->port]));
@@ -2903,6 +2904,12 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
goto retry;
}
kfree(entries);
+ /* if error, or can't alloc even 1 IRQ */
+ if (err < 0) {
+ mlx4_err(dev, "No IRQs left, device can't "
+ "be started.\n");
+ goto no_irq;
+ }
goto no_msi;
}
@@ -2930,6 +2937,10 @@ no_msi:
for (i = 0; i < 2; ++i)
priv->eq_table.eq[i].irq = dev->pdev->irq;
+ return;
+no_irq:
+ dev->caps.num_comp_vectors = 0;
+ dev->caps.comp_pool = 0;
}
static int mlx4_init_port_info(struct mlx4_dev *dev, int port)
@@ -3305,6 +3316,13 @@ slave_start:
mutex_init(&priv->msix_ctl.pool_lock);
mlx4_enable_msi_x(dev);
+
+ /* no MSIX and no shared IRQ */
+ if (!dev->caps.num_comp_vectors && !dev->caps.comp_pool) {
+ err = -ENOSPC;
+ goto err_free_eq;
+ }
+
if ((mlx4_is_mfunc(dev)) &&
!(dev->flags & MLX4_FLAG_MSI_X)) {
err = -ENOSYS;
OpenPOWER on IntegriCloud