Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=edd2fd643c500c812cae5b0d314ab9db9f959898
Commit:     edd2fd643c500c812cae5b0d314ab9db9f959898
Parent:     11e0704b7ec3abfeaee7e3a56f11c82024d1ae01
Author:     Chien Tung <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 15 21:00:36 2008 -0600
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Sat Feb 16 21:16:33 2008 -0800

    RDMA/nes: Fix VLAN support
    
    We need to account for the VLAN header size in nes_netdev_change_mtu()
    and nes_netdev_init().  Also, add spin lock/unlock during VLAN RX
    registration so only one process can assign VLAN group for a given
    interface at a time.
    
    Signed-off-by: Chien Tung <[EMAIL PROTECTED]>
    Signed-off-by: Glenn Streiff <[EMAIL PROTECTED]>
    Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
---
 drivers/infiniband/hw/nes/nes_nic.c |   10 ++++++++--
 1 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/hw/nes/nes_nic.c 
b/drivers/infiniband/hw/nes/nes_nic.c
index 67827ad..eee77da 100644
--- a/drivers/infiniband/hw/nes/nes_nic.c
+++ b/drivers/infiniband/hw/nes/nes_nic.c
@@ -932,7 +932,7 @@ static int nes_netdev_change_mtu(struct     net_device 
*netdev,     int     new_mtu)
                return -EINVAL;
 
        netdev->mtu     = new_mtu;
-       nesvnic->max_frame_size = new_mtu+ETH_HLEN;
+       nesvnic->max_frame_size = new_mtu + VLAN_ETH_HLEN;
 
        if (netdev->mtu > 1500) {
                jumbomode=1;
@@ -1494,10 +1494,15 @@ static void nes_netdev_vlan_rx_register(struct 
net_device *netdev, struct vlan_g
 {
        struct nes_vnic *nesvnic = netdev_priv(netdev);
        struct nes_device *nesdev = nesvnic->nesdev;
+       struct nes_adapter *nesadapter = nesdev->nesadapter;
        u32 u32temp;
+       unsigned long flags;
 
+       spin_lock_irqsave(&nesadapter->phy_lock, flags);
        nesvnic->vlan_grp = grp;
 
+       nes_debug(NES_DBG_NETDEV, "%s: %s\n", __func__, netdev->name);
+
        /* Enable/Disable VLAN Stripping */
        u32temp = nes_read_indexed(nesdev, NES_IDX_PCIX_DIAG);
        if (grp)
@@ -1506,6 +1511,7 @@ static void nes_netdev_vlan_rx_register(struct net_device 
*netdev, struct vlan_g
                u32temp |= 0x02000000;
 
        nes_write_indexed(nesdev, NES_IDX_PCIX_DIAG, u32temp);
+       spin_unlock_irqrestore(&nesadapter->phy_lock, flags);
 }
 
 
@@ -1564,7 +1570,7 @@ struct net_device *nes_netdev_init(struct nes_device 
*nesdev,
        nesvnic->msg_enable = netif_msg_init(debug, default_msg);
        nesvnic->netdev_index = nesdev->netdev_count;
        nesvnic->perfect_filter_index = nesdev->nesadapter->netdev_count;
-       nesvnic->max_frame_size = netdev->mtu+netdev->hard_header_len;
+       nesvnic->max_frame_size = netdev->mtu + netdev->hard_header_len + 
VLAN_HLEN;
 
        curr_qp_map = 
nic_qp_mapping_per_function[PCI_FUNC(nesdev->pcidev->devfn)];
        nesvnic->nic.qp_id = curr_qp_map[nesdev->netdev_count].qpid;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to