[mlx4_bus] Fix for vlan handling. (mlnx 5160)
authortzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 3 Dec 2009 16:12:28 +0000 (16:12 +0000)
committertzachid <tzachid@ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86>
Thu, 3 Dec 2009 16:12:28 +0000 (16:12 +0000)
sign off by: galina

git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2618 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86

hw/mlx4/kernel/bus/net/port.c

index 1306ba6..0381400 100644 (file)
@@ -60,6 +60,10 @@ void mlx4_init_vlan_table(struct mlx4_dev *dev, u8 port)
                table->refs[i] = 0;\r
        }\r
        table->max = 1 << dev->caps.log_num_vlans;\r
+       if(table->max > MLX4_MAX_VLAN_NUM)\r
+       {\r
+               table->max = MLX4_MAX_VLAN_NUM;\r
+       }\r
        table->total = 0;\r
 }\r
 \r
@@ -112,7 +116,7 @@ int mlx4_register_mac(struct mlx4_dev *dev, u8 port, u64 mac, int *index)
        }\r
        mlx4_dbg(dev, "Free mac index is %d\n", free);\r
 \r
-       if (table->total == table->max) {\r
+       if (table->total == table->max || free < 0) {\r
                /* No free mac entries */\r
                err = -ENOSPC;\r
                goto out;\r
@@ -207,7 +211,7 @@ int mlx4_register_vlan(struct mlx4_dev *dev, u8 port, u16 vlan, int *index)
                }\r
        }\r
 \r
-       if (table->total == table->max) {\r
+       if (table->total == table->max || free < 0) {\r
                /* No free vlan entries */\r
                err = -ENOSPC;\r
                goto out;\r