[ofa-general][PATCH 2/3] mlx4: Register VLAN bugfix

oren at mellanox.co.il oren at mellanox.co.il
Mon Sep 22 07:34:10 PDT 2008


mlx4_core: Fix VLAN registration

Signed-off-by: Oren Duer <oren at mellanox.co.il>

Index: ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/en_port.c
===================================================================
--- ofed_kernel-2.6.18-EL5.1.orig.orig/drivers/net/mlx4/en_port.c	2008-09-04 15:00:59.497911000 +0300
+++ ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/en_port.c	2008-09-04 15:01:16.979282000 +0300
@@ -129,6 +129,10 @@ int mlx4_SET_PORT_qpn_calc(struct mlx4_d
 	context->base_qpn = cpu_to_be32(base_qpn);
 	context->promisc = cpu_to_be32(promisc << SET_PORT_PROMISC_SHIFT | base_qpn);
 	context->mcast = cpu_to_be32(1 << SET_PORT_PROMISC_SHIFT | base_qpn);
+	context->intra_no_vlan = 0;
+	context->no_vlan = MLX4_NO_VLAN_IDX;
+	context->intra_vlan_miss = 0;
+	context->vlan_miss = MLX4_VLAN_MISS_IDX;
 
 	in_mod = MLX4_SET_PORT_RQP_CALC << 8 | port;
 	err = mlx4_cmd(dev, mailbox->dma, in_mod, 1, MLX4_CMD_SET_PORT,
Index: ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/en_port.h
===================================================================
--- ofed_kernel-2.6.18-EL5.1.orig.orig/drivers/net/mlx4/en_port.h	2008-09-04 15:00:59.500913000 +0300
+++ ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/en_port.h	2008-09-04 15:01:16.984285000 +0300
@@ -75,9 +75,9 @@ struct mlx4_set_port_rqp_calc_context {
 	__be32 flags;
 	u8 reserved[3];
 	u8 mac_miss;
-	u8 reserved2;
+	u8 intra_no_vlan;
 	u8 no_vlan;
-	u8 reserved3;
+	u8 intra_vlan_miss;
 	u8 vlan_miss;
 	u8 reserved4[3];
 	u8 no_vlan_prio;
Index: ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/mlx4.h
===================================================================
--- ofed_kernel-2.6.18-EL5.1.orig.orig/drivers/net/mlx4/mlx4.h	2008-09-04 15:01:13.697393000 +0300
+++ ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/mlx4.h	2008-09-04 15:01:31.944725000 +0300
@@ -267,7 +267,7 @@ struct mlx4_mac_table {
 };
 
 struct mlx4_vlan_table {
-#define MLX4_MAX_VLAN_NUM	126
+#define MLX4_MAX_VLAN_NUM	128
 #define MLX4_VLAN_MASK		0xfff
 #define MLX4_VLAN_VALID		(1 << 31)
 #define MLX4_VLAN_TABLE_SIZE	(MLX4_MAX_VLAN_NUM << 2)
Index: ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/port.c
===================================================================
--- ofed_kernel-2.6.18-EL5.1.orig.orig/drivers/net/mlx4/port.c	2008-09-04 15:00:59.507914000 +0300
+++ ofed_kernel-2.6.18-EL5.1.orig/drivers/net/mlx4/port.c	2008-09-04 15:01:16.995288000 +0300
@@ -56,7 +56,7 @@ void mlx4_init_vlan_table(struct mlx4_de
 	int i;
 
 	sema_init(&table->vlan_sem, 1);
-	for (i = 0; i < MLX4_MAX_MAC_NUM; i++) {
+	for (i = 0; i < MLX4_MAX_VLAN_NUM; i++) {
 		table->entries[i] = 0;
 		table->refs[i] = 0;
 	}
@@ -185,7 +185,7 @@ int mlx4_register_vlan(struct mlx4_dev *
 	int free = -1;
 
 	down(&table->vlan_sem);
-	for (i = 0; i < MLX4_MAX_VLAN_NUM; i++) {
+	for (i = MLX4_VLAN_REGULAR; i < MLX4_MAX_VLAN_NUM; i++) {
 		if (free < 0 && (table->refs[i] == 0)) {
 			free = i;
 			continue;
@@ -231,6 +231,11 @@ void mlx4_unregister_vlan(struct mlx4_de
 {
 	struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table;
 
+	if (index < MLX4_VLAN_REGULAR) {
+		mlx4_warn(dev, "Trying to free special vlan index %d\n", index);
+		return;
+	}
+
 	down(&table->vlan_sem);
 	if (!table->refs[index]) {
 		mlx4_warn(dev, "No vlan entry for index %d\n", index);
Index: ofed_kernel-2.6.18-EL5.1.orig/include/linux/mlx4/device.h
===================================================================
--- ofed_kernel-2.6.18-EL5.1.orig.orig/include/linux/mlx4/device.h	2008-09-04 15:00:59.514915000 +0300
+++ ofed_kernel-2.6.18-EL5.1.orig/include/linux/mlx4/device.h	2008-09-04 15:01:17.003285000 +0300
@@ -162,6 +162,12 @@ enum {
 	MLX4_NUM_FEXCH          = 64 * 1024,
 };
 
+enum mlx4_special_vlan_idx {
+	MLX4_NO_VLAN_IDX        = 0,
+	MLX4_VLAN_MISS_IDX,
+	MLX4_VLAN_REGULAR
+};
+
 #define MLX4_LEAST_ATTACHED_VECTOR	0xffffffff
 
 static inline u64 mlx4_fw_ver(u64 major, u64 minor, u64 subminor)



More information about the general mailing list